ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGI1ZGI5ZDguLmE0N2Y1NjggMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSwyICsxLDMgQEAKIGNvbmZpZy5tawogb2Jqcy92YzIwMTAvCitidWlsZApkaWZmIC0tZ2l0IGEvQW5kcm9pZC5icCBiL0FuZHJvaWQuYnAKaW5kZXggNGI2YTM0ZS4uYzc4ZWNiNSAxMDA2NDQKLS0tIGEvQW5kcm9pZC5icAorKysgYi9BbmRyb2lkLmJwCkBAIC0xLDUgKzEsNiBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJsaWJmdDIiLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAogCiAgICAgLy8gY29tcGlsZSBpbiBBUk0gbW9kZSwgc2luY2UgdGhlIGdseXBoIGxvYWRlci9yZW5kZXJlciBpcyBhIGhvdHNwb3QKICAgICAvLyB3aGVuIGxvYWRpbmcgY29tcGxleCBwYWdlcyBpbiB0aGUgYnJvd3NlcgpAQCAtMTEsMzEgKzEyLDMwIEBACiAgICAgfSwKIAogICAgIHNyY3M6IFsKKyAgICAgICAgInNyYy9hdXRvZml0L2F1dG9maXQuYyIsCisgICAgICAgICJzcmMvYmFzZS9mdGJhc2UuYyIsCiAgICAgICAgICJzcmMvYmFzZS9mdGJib3guYyIsCiAgICAgICAgICJzcmMvYmFzZS9mdGJpdG1hcC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0Zm50Zm10LmMiLAorICAgICAgICAic3JjL2Jhc2UvZnRkZWJ1Zy5jIiwKICAgICAgICAgInNyYy9iYXNlL2Z0ZnN0eXBlLmMiLAorICAgICAgICAic3JjL2Jhc2UvZnRnYXNwLmMiLAogICAgICAgICAic3JjL2Jhc2UvZnRnbHlwaC5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0bGNkZmlsLmMiLAorICAgICAgICAic3JjL2Jhc2UvZnRpbml0LmMiLAorICAgICAgICAic3JjL2Jhc2UvZnRtbS5jIiwKICAgICAgICAgInNyYy9iYXNlL2Z0c3Ryb2tlLmMiLAogICAgICAgICAic3JjL2Jhc2UvZnR0eXBlMS5jIiwKLSAgICAgICAgInNyYy9iYXNlL2Z0YmFzZS5jIiwKICAgICAgICAgInNyYy9iYXNlL2Z0c3lzdGVtLmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRpbml0LmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRnYXNwLmMiLAotICAgICAgICAic3JjL2Jhc2UvZnRtbS5jIiwKKyAgICAgICAgInNyYy9jaWQvdHlwZTFjaWQuYyIsCisgICAgICAgICJzcmMvY2ZmL2NmZi5jIiwKICAgICAgICAgInNyYy9nemlwL2Z0Z3ppcC5jIiwKKyAgICAgICAgInNyYy9wc2F1eC9wc2F1eC5jIiwKKyAgICAgICAgInNyYy9wc2hpbnRlci9wc2hpbnRlci5jIiwKKyAgICAgICAgInNyYy9wc25hbWVzL3BzbmFtZXMuYyIsCiAgICAgICAgICJzcmMvcmFzdGVyL3Jhc3Rlci5jIiwKICAgICAgICAgInNyYy9zZm50L3NmbnQuYyIsCiAgICAgICAgICJzcmMvc21vb3RoL3Ntb290aC5jIiwKLSAgICAgICAgInNyYy9hdXRvZml0L2F1dG9maXQuYyIsCiAgICAgICAgICJzcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYyIsCi0gICAgICAgICJzcmMvY2ZmL2NmZi5jIiwKLSAgICAgICAgInNyYy9wc25hbWVzL3BzbmFtZXMuYyIsCi0gICAgICAgICJzcmMvcHNoaW50ZXIvcHNoaW50ZXIuYyIsCi0gICAgICAgICJzcmMvcHNhdXgvcHNhdXguYyIsCiAgICAgICAgICJzcmMvdHlwZTEvdHlwZTEuYyIsCi0gICAgICAgICJzcmMvY2lkL3R5cGUxY2lkLmMiLAogICAgIF0sCiAKICAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggODNmMjZiOS4uM2Y1ODMzNyAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTEyLDM1ICsxMiw0NCBAQAogIyBmdWxseS4KICMKICMKLSMgQXMgYSBwcmVsaW1pbmFyeSwgY3JlYXRlIGEgY29tcGlsYXRpb24gZGlyZWN0b3J5IGFuZCBjaGFuZ2UgaW50byBpdCwgZm9yCi0jIGV4YW1wbGUKKyMgVGhlIGZvbGxvd2luZyB3aWxsIDEuIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSBhbmQgMi4gY2hhbmdlIGludG8gaXQgYW5kCisjIGNhbGwgY21ha2UgdG8gY29uZmlndXJlIHRoZSBidWlsZCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyBhcyBhIHN0YXRpYworIyBsaWJyYXJ5LgogIwotIyAgIG1rZGlyIH4vZnJlZXR5cGUyLmNvbXBpbGVkCi0jICAgY2Qgfi9mcmVldHlwZTIuY29tcGlsZWQKLSMKLSMgTm93IHlvdSBjYW4gc2F5Ci0jCi0jICAgY21ha2UgPHBhdGgtdG8tZnJlZXR5cGUyLXNyYy1kaXI+Ci0jCi0jIHRvIGNyZWF0ZSBhIE1ha2VmaWxlIHRoYXQgYnVpbGRzIGEgc3RhdGljIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisjICAgY21ha2UgLUUgbWFrZV9kaXJlY3RvcnkgYnVpbGQKKyMgICBjbWFrZSAtRSBjaGRpciBidWlsZCBjbWFrZSAuLgogIwogIyBGb3IgYSBkeW5hbWljIGxpYnJhcnksIHVzZQogIwotIyAgIGNtYWtlIDxwYXRoLXRvLWZyZWV0eXBlMi1zcmMtZGlyPiAtRCBCVUlMRF9TSEFSRURfTElCUzpCT09MPXRydWUKKyMgICBjbWFrZSAtRSBjaGRpciBidWlsZCBjbWFrZSAtRCBCVUlMRF9TSEFSRURfTElCUzpCT09MPXRydWUgLi4KICMKICMgRm9yIGEgZnJhbWV3b3JrIG9uIE9TIFgsIHVzZQogIwotIyAgIGNtYWtlIDxwYXRoLXRvLWZyZWV0eXBlMi1zcmMtZGlyPiAtRCBCVUlMRF9GUkFNRVdPUks6Qk9PTD10cnVlIC1HIFhjb2RlCi0jCi0jIGluc3RlYWQuCisjICAgY21ha2UgLUUgY2hkaXIgYnVpbGQgY21ha2UgLUcgWGNvZGUgLUQgQlVJTERfRlJBTUVXT1JLOkJPT0w9dHJ1ZSAuLgogIwogIyBGb3IgYW4gaU9TIHN0YXRpYyBsaWJyYXJ5LCB1c2UKICMKLSMgICBjbWFrZSAtRCBJT1NfUExBVEZPUk09T1MgLUcgWGNvZGUgPHBhdGgtdG8tZnJlZXR5cGUyLXNyYy1kaXI+CisjICAgY21ha2UgLUUgY2hkaXIgYnVpbGQgY21ha2UgLUcgWGNvZGUgLUQgSU9TX1BMQVRGT1JNPU9TIC4uCiAjCiAjIG9yCiAjCi0jICAgY21ha2UgLUQgSU9TX1BMQVRGT1JNPVNJTVVMQVRPUiAtRyBYY29kZSA8cGF0aC10by1mcmVldHlwZTItc3JjLWRpcj4KKyMgICBjbWFrZSAtRSBjaGRpciBidWlsZCBjbWFrZSAtRyBYY29kZSAtRCBJT1NfUExBVEZPUk09U0lNVUxBVE9SIC4uCisjCisjIG9yCisjCisjICAgY21ha2UgLUUgY2hkaXIgYnVpbGQgY21ha2UgLUcgWGNvZGUgLUQgSU9TX1BMQVRGT1JNPVNJTVVMQVRPUjY0IC4uCisjCisjIEZpbmFsbHksIGJ1aWxkIHRoZSBwcm9qZWN0IHdpdGg6CisjCisjICAgY21ha2UgLS1idWlsZCBidWlsZAorIworIyBJbnN0YWxsIGl0IHdpdGgKKyMKKyMgICAoc3VkbykgY21ha2UgLS1idWlsZCBidWlsZCAtLXRhcmdldCBpbnN0YWxsCisjCisjIEEgYmluYXJ5IGRpc3RyaWJ1dGlvbiBjYW4gYmUgbWFkZSB3aXRoCisjCisjICAgY21ha2UgLS1idWlsZCBidWlsZCAtLWNvbmZpZyBSZWxlYXNlIC0tdGFyZ2V0IHBhY2thZ2UKICMKICMgUGxlYXNlIHJlZmVyIHRvIHRoZSBjbWFrZSBtYW51YWwgZm9yIGZ1cnRoZXIgb3B0aW9ucywgaW4gcGFydGljdWxhciwgaG93CiAjIHRvIG1vZGlmeSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBwYXJhbWV0ZXJzLgpAQCAtNTksMzYgKzY4LDQyIEBACiAjIC4gYENNYWtlTGlzdHMudHh0JyBpcyBwcm92aWRlZCBhcy1pcyBzaW5jZSBpdCBpcyBub3JtYWxseSBub3QgdXNlZCBieSB0aGUKICMgICBkZXZlbG9wZXIgdGVhbS4KICMKLSMgLiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uCi0jICAgdGFyZ2V0cywgYWRkIHRoZSBgLUQgRlJFRVRZUEVfTk9fRElTVD10cnVlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuCi0jCi0jIC4gU2V0IHRoZSBgV0lUSF9aTElCJywgYFdJVEhfQlppcDInLCBgV0lUSF9QTkcnLCBhbmQgYFdJVEhfSGFyZkJ1enonCi0jICAgQ01ha2UgdmFyaWFibGVzIHRvIGBPTicgb3IgYE9GRicgdG8gZm9yY2Ugb3Igc2tpcCB1c2luZyBhIGRlcGVuZGVuY3kuCisjIC4gU2V0IHRoZSBgRlRfV0lUSF9aTElCJywgYEZUX1dJVEhfQlpJUDInLCBgRlRfV0lUSF9QTkcnLCBhbmQKKyMgICBgRlRfV0lUSF9IQVJGQlVaWicgQ01ha2UgdmFyaWFibGVzIHRvIGBPTicgdG8gZm9yY2UgdXNpbmcgYSBkZXBlbmRlbmN5LgogIyAgIExlYXZlIGEgdmFyaWFibGUgdW5kZWZpbmVkICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdG8gdXNlIHRoZSBkZXBlbmRlbmN5Ci0jICAgb25seSBpZiBpdCBpcyBhdmFpbGFibGUuICBFeGFtcGxlOgorIyAgIG9ubHkgaWYgaXQgaXMgYXZhaWxhYmxlLiAgU2V0IGBDTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV9IYXJmQnV6ej1UUlVFJyB0bworIyAgIGRpc2FibGUgYSBkZXBlbmRlbmN5IGNvbXBsZXRlbHkgKENNYWtlIHBhY2thZ2UgbmFtZSwgc28gYEJaaXAyJyBpbnN0ZWFkIG9mCisjICAgYEJaSVAyJykuIEV4YW1wbGU6CiAjCi0jICAgICBjbWFrZSAuLi4gLURXSVRIX1pMSUI9T04gLURXSVRIX0hhcmZCdXp6PU9GRiAuLi4KKyMgICAgIGNtYWtlIC1ERlRfV0lUSF9aTElCPU9OIC1EQ01BS0VfRElTQUJMRV9GSU5EX1BBQ0tBR0VfSGFyZkJ1eno9VFJVRSBbLi4uXQogIwogIyAuIEluc3RhbGxhdGlvbiBvZiBGcmVlVHlwZSBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSBDTWFrZSB2YXJpYWJsZXMKICMgICBgU0tJUF9JTlNUQUxMX0hFQURFUlMnLCBgU0tJUF9JTlNUQUxMX0xJQlJBUklFUycsIGFuZCBgU0tJUF9JTlNUQUxMX0FMTCcKICMgICAodGhpcyBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHNhbWUgQ01ha2UgdmFyaWFibGVzIGluIHpsaWIncyBDTWFrZQogIyAgIHN1cHBvcnQpLgogCisjIEZyZWVUeXBlIGV4cGxpY2l0bHkgbWFya3MgdGhlIEFQSSB0byBiZSBleHBvcnRlZCBhbmQgcmVsaWVzIG9uIHRoZSBjb21waWxlcgorIyB0byBoaWRlIGFsbCBvdGhlciBzeW1ib2xzLiBDTWFrZSBzdXBwb3J0cyBhIENfVklTQklMSVRZX1BSRVNFVCBwcm9wZXJ0eQorIyBzdGFydGluZyB3aXRoIDIuOC4xMi4KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCi0KK2lmIChOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4zKQorICAjIEFsbG93IHN5bWJvbCB2aXNpYmlsaXR5IHNldHRpbmdzIGFsc28gb24gc3RhdGljIGxpYnJhcmllcy4gQ01ha2UgPCAzLjMKKyAgIyBvbmx5IHNldHMgdGhlIHByb3Blcnkgb24gYSBzaGFyZWQgbGlicmFyeSBidWlsZC4KKyAgY21ha2VfcG9saWN5KFNFVCBDTVAwMDYzIE5FVykKK2VuZGlmICgpCiAKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZSkKIAotCiAjIENNQUtFX1RPT0xDSEFJTl9GSUxFIG11c3QgYmUgc2V0IGJlZm9yZSBgcHJvamVjdCcgaXMgY2FsbGVkLCB3aGljaAogIyBjb25maWd1cmVzIHRoZSBiYXNlIGJ1aWxkIGVudmlyb25tZW50IGFuZCByZWZlcmVuY2VzIHRoZSB0b29sY2hhaW4gZmlsZQogaWYgKEFQUExFKQogICBpZiAoREVGSU5FRCBJT1NfUExBVEZPUk0pCiAgICAgaWYgKE5PVCAiJHtJT1NfUExBVEZPUk19IiBTVFJFUVVBTCAiT1MiCi0gICAgICAgIEFORCBOT1QgIiR7SU9TX1BMQVRGT1JNfSIgU1RSRVFVQUwgIlNJTVVMQVRPUiIpCisgICAgICAgIEFORCBOT1QgIiR7SU9TX1BMQVRGT1JNfSIgU1RSRVFVQUwgIlNJTVVMQVRPUiIKKyAgICAgICAgQU5EIE5PVCAiJHtJT1NfUExBVEZPUk19IiBTVFJFUVVBTCAiU0lNVUxBVE9SNjQiKQogICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUgotICAgICAgICAiSU9TX1BMQVRGT1JNIG11c3QgYmUgc2V0IHRvIGVpdGhlciBPUyBvciBTSU1VTEFUT1IiKQorICAgICAgICAiSU9TX1BMQVRGT1JNIG11c3QgYmUgc2V0IHRvIGVpdGhlciBPUywgU0lNVUxBVE9SLCBvciBTSU1VTEFUT1I2NCIpCiAgICAgZW5kaWYgKCkKICAgICBpZiAoTk9UICIke0NNQUtFX0dFTkVSQVRPUn0iIFNUUkVRVUFMICJYY29kZSIpCiAgICAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HCkBAIC0xMTYsMzAgKzEzMSw0NyBAQAogZW5kaWYgKCkKIAogCi1wcm9qZWN0KGZyZWV0eXBlKQorcHJvamVjdChmcmVldHlwZSBDKQogCitzZXQoVkVSU0lPTl9NQUpPUiAiMiIpCitzZXQoVkVSU0lPTl9NSU5PUiAiOSIpCitzZXQoVkVSU0lPTl9QQVRDSCAiMSIpCiAKLWlmIChXSU4zMiBBTkQgTk9UIE1JTkdXIEFORCBCVUlMRF9TSEFSRURfTElCUykKLSAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyBvbiBXaW5kb3dzIG5lZWRzIE1pbkdXIikKLWVuZGlmICgpCisjIFNPVkVSU0lPTiBzY2hlbWU6IENVUlJFTlQuQUdFLlJFVklTSU9OCisjICAgSWYgdGhlcmUgd2FzIGFuIGluY29tcGF0aWJsZSBpbnRlcmZhY2UgY2hhbmdlOgorIyAgICAgSW5jcmVtZW50IENVUlJFTlQuIFNldCBBR0UgYW5kIFJFVklTSU9OIHRvIDAKKyMgICBJZiB0aGVyZSB3YXMgYSBjb21wYXRpYmxlIGludGVyZmFjZSBjaGFuZ2U6CisjICAgICBJbmNyZW1lbnQgQUdFLiBTZXQgUkVWSVNJT04gdG8gMAorIyAgIElmIHRoZSBzb3VyY2UgY29kZSB3YXMgY2hhbmdlZCwgYnV0IHRoZXJlIHdlcmUgbm8gaW50ZXJmYWNlIGNoYW5nZXM6CisjICAgICBJbmNyZW1lbnQgUkVWSVNJT04uCitzZXQoTElCUkFSWV9WRVJTSU9OICI2LjE2LjAiKQorc2V0KExJQlJBUllfU09WRVJTSU9OICI2IikKKworIyBUaGVzZSBvcHRpb25zIG1lYW4gInJlcXVpcmUgeCBhbmQgY29tcGxhaW4gaWYgbm90IGZvdW5kIi4gVGhleSdsbCBnZXQKKyMgb3B0aW9uYWxseSBmb3VuZCBhbnl3YXkuIFVzZSBgLURDTUFLRV9ESVNBQkxFX0ZJTkRfUEFDS0FHRV94PVRSVUVgIHRvIGRpc2FibGUKKyMgc2VhcmNoaW5nIGZvciBhIHBhY2tnZSBlbnRpcmVseSAoeCBpcyB0aGUgQ01ha2UgcGFja2FnZSBuYW1lLCBzbyAiQlppcDIiCisjIGluc3RlYWQgb2YgIkJaSVAyIikuCitvcHRpb24oRlRfV0lUSF9aTElCICJVc2Ugc3lzdGVtIHpsaWIgaW5zdGVhZCBvZiBpbnRlcm5hbCBsaWJyYXJ5LiIgT0ZGKQorb3B0aW9uKEZUX1dJVEhfQlpJUDIgIlN1cHBvcnQgYnppcDIgY29tcHJlc3NlZCBmb250cy4iIE9GRikKK29wdGlvbihGVF9XSVRIX1BORyAiU3VwcG9ydCBQTkcgY29tcHJlc3NlZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXBzLiIgT0ZGKQorb3B0aW9uKEZUX1dJVEhfSEFSRkJVWlogIkltcHJvdmUgYXV0by1oaW50aW5nIG9mIE9wZW5UeXBlIGZvbnRzLiIgT0ZGKQorCiAKICMgRGlzYWxsb3cgaW4tc291cmNlIGJ1aWxkcwotaWYgKCIke1BST0pFQ1RfQklOQVJZX0RJUn0iIFNUUkVRVUFMICIke1BST0pFQ1RfU09VUkNFX0RJUn0iKQoraWYgKCIke0NNQUtFX0JJTkFSWV9ESVJ9IiBTVFJFUVVBTCAiJHtDTUFLRV9TT1VSQ0VfRElSfSIpCiAgIG1lc3NhZ2UoRkFUQUxfRVJST1IKLSAgICAiCi1Jbi1zb3VyY2UgYnVpbGRzIGFyZSBub3QgcGVybWl0dGVkISAgTWFrZSBhIHNlcGFyYXRlIGZvbGRlciBmb3IiCi0gICAgIiBidWlsZGluZywgZS5nLiwiCi0gICAgIgotICBta2RpciBidWlsZDsgY2QgYnVpbGQ7IGNtYWtlIC4uIgotICAgICIKLUJlZm9yZSB0aGF0LCByZW1vdmUgdGhlIGZpbGVzIGNyZWF0ZWQgYnkgdGhpcyBmYWlsZWQgcnVuIHdpdGgiCi0gICAgIgotICBybSAtcmYgQ01ha2VDYWNoZS50eHQgQ01ha2VGaWxlcyIpCisgICAgIkluLXNvdXJjZSBidWlsZHMgYXJlIG5vdCBwZXJtaXR0ZWQhICBNYWtlIGEgc2VwYXJhdGUgZm9sZGVyIGZvciIKKyAgICAiIGJ1aWxkaW5nLCBlLmcuLFxuIgorICAgICIgIGNtYWtlIC1FIG1ha2VfZGlyZWN0b3J5IGJ1aWxkXG4iCisgICAgIiAgY21ha2UgLUUgY2hkaXIgYnVpbGQgY21ha2UgLi5cbiIKKyAgICAiQmVmb3JlIHRoYXQsIHJlbW92ZSB0aGUgZmlsZXMgY3JlYXRlZCBieSB0aGlzIGZhaWxlZCBydW4gd2l0aFxuIgorICAgICIgIGNtYWtlIC1FIHJlbW92ZSBDTWFrZUNhY2hlLnR4dFxuIgorICAgICIgIGNtYWtlIC1FIHJlbW92ZV9kaXJlY3RvcnkgQ01ha2VGaWxlcyIpCiBlbmRpZiAoKQogCiAKICMgQWRkIGxvY2FsIGNtYWtlIG1vZHVsZXMKLXNldChDTUFLRV9NT0RVTEVfUEFUSCAke0NNQUtFX01PRFVMRV9QQVRIfSAke1BST0pFQ1RfU09VUkNFX0RJUn0vYnVpbGRzL2NtYWtlKQorbGlzdChBUFBFTkQgQ01BS0VfTU9EVUxFX1BBVEggJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2J1aWxkcy9jbWFrZSkKIAogCiBpZiAoQlVJTERfRlJBTUVXT1JLKQpAQCAtMTUyLDQ4ICsxODQsMzIgQEAKIGVuZGlmICgpCiAKIAotc2V0KFZFUlNJT05fTUFKT1IgIjIiKQotc2V0KFZFUlNJT05fTUlOT1IgIjkiKQotc2V0KFZFUlNJT05fUEFUQ0ggIjAiKQotCi1zZXQoUFJPSkVDVF9WRVJTSU9OICR7VkVSU0lPTl9NQUpPUn0uJHtWRVJTSU9OX01JTk9SfS4ke1ZFUlNJT05fUEFUQ0h9KQotc2V0KFNIQVJFRF9MSUJSQVJZX1ZFUlNJT04gJHtWRVJTSU9OX01BSk9SfS4ke1ZFUlNJT05fTUlOT1J9KQotCi0KLSMgQ29tcGlsZXIgZGVmaW5pdGlvbnMgZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5Ci1hZGRfZGVmaW5pdGlvbnMoLURGVDJfQlVJTERfTElCUkFSWSkKLWlmIChXSU4zMikKLSAgYWRkX2RlZmluaXRpb25zKC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCisjIEZpbmQgZGVwZW5kZW5jaWVzCitpZiAoRlRfV0lUSF9IQVJGQlVaWikKKyAgZmluZF9wYWNrYWdlKEhhcmZCdXp6IDEuMy4wIFJFUVVJUkVEKQorZWxzZSAoKQorICBmaW5kX3BhY2thZ2UoSGFyZkJ1enogMS4zLjApCiBlbmRpZiAoKQogCitpZiAoRlRfV0lUSF9QTkcpCisgIGZpbmRfcGFja2FnZShQTkcgUkVRVUlSRUQpCitlbHNlICgpCisgIGZpbmRfcGFja2FnZShQTkcpCitlbmRpZiAoKQogCi0jIEZpbmQgZGVwZW5kZW5jaWVzCi1mb3JlYWNoIChkIFpMSUIgQlppcDIgUE5HIEhhcmZCdXp6KQotICBzdHJpbmcoVE9VUFBFUiAiJHtkfSIgRCkKK2lmIChGVF9XSVRIX1pMSUIpCisgIGZpbmRfcGFja2FnZShaTElCIFJFUVVJUkVEKQorZWxzZSAoKQorICBmaW5kX3BhY2thZ2UoWkxJQikKK2VuZGlmICgpCiAKLSAgaWYgKERFRklORUQgV0lUSF8ke2R9IE9SIERFRklORUQgV0lUSF8ke0R9KQotICAgIGlmIChXSVRIXyR7ZH0gT1IgV0lUSF8ke0R9KQotICAgICAgZmluZF9wYWNrYWdlKCR7ZH0gUVVJRVQgUkVRVUlSRUQpCi0gICAgZW5kaWYgKCkKLSAgZWxzZSAoKQotICAgIGZpbmRfcGFja2FnZSgke2R9IFFVSUVUKQotICBlbmRpZiAoKQotCi0gIGlmICgke2R9X0ZPVU5EIE9SICR7RH1fRk9VTkQpCi0gICAgbWVzc2FnZShTVEFUVVMgIkJ1aWxkaW5nIHdpdGggJHtkfSIpCi0gIGVuZGlmICgpCi1lbmRmb3JlYWNoICgpCi0KLQotbWVzc2FnZShTVEFUVVMKLSAgIkNyZWF0aW5nIGRpcmVjdG9yeSAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWciKQotZmlsZShNQUtFX0RJUkVDVE9SWSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnIikKLQoraWYgKEZUX1dJVEhfQlpJUDIpCisgIGZpbmRfcGFja2FnZShCWmlwMiBSRVFVSVJFRCkKK2Vsc2UgKCkKKyAgZmluZF9wYWNrYWdlKEJaaXAyKQorZW5kaWYgKCkKIAogIyBDcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotbWVzc2FnZShTVEFUVVMKLSAgIkNyZWF0aW5nIGZpbGUgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgiKQotCiBpZiAoVU5JWCkKICAgY2hlY2tfaW5jbHVkZV9maWxlKCJ1bmlzdGQuaCIgSEFWRV9VTklTVERfSCkKICAgY2hlY2tfaW5jbHVkZV9maWxlKCJmY250bC5oIiBIQVZFX0ZDTlRMX0gpCkBAIC0yMDMsMzggKzIxOSwzMCBAQAogICAgIEZUQ09ORklHX0gpCiAgIGlmIChIQVZFX1VOSVNURF9IKQogICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFCi0gICAgICAiI3VuZGVmICsoSEFWRV9VTklTVERfSCkiICIjZGVmaW5lIFxcMSIKKyAgICAgICIjdW5kZWYgKyhIQVZFX1VOSVNURF9IKSIgIiNkZWZpbmUgXFwxIDEiCiAgICAgICBGVENPTkZJR19IICIke0ZUQ09ORklHX0h9IikKICAgZW5kaWYgKCkKICAgaWYgKEhBVkVfRkNOVExfSCkKICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRQotICAgICAgIiN1bmRlZiArKEhBVkVfRkNOVExfSCkiICIjZGVmaW5lIFxcMSIKKyAgICAgICIjdW5kZWYgKyhIQVZFX0ZDTlRMX0gpIiAiI2RlZmluZSBcXDEgMSIKICAgICAgIEZUQ09ORklHX0ggIiR7RlRDT05GSUdfSH0iKQogICBlbmRpZiAoKQogICBpZiAoSEFWRV9TVERJTlRfSCkKICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRQotICAgICAgIiN1bmRlZiArKEhBVkVfU1RESU5UX0gpIiAiI2RlZmluZSBcXDEiCisgICAgICAiI3VuZGVmICsoSEFWRV9TVERJTlRfSCkiICIjZGVmaW5lIFxcMSAxIgogICAgICAgRlRDT05GSUdfSCAiJHtGVENPTkZJR19IfSIpCiAgIGVuZGlmICgpCiAgIHN0cmluZyhSRVBMQUNFICIvdW5kZWYgIiAiI3VuZGVmICIKICAgICBGVENPTkZJR19IICIke0ZUQ09ORklHX0h9IikKLSAgZmlsZShXUklURSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgtbmV3IgotICAgICIke0ZUQ09ORklHX0h9IikKLWVsc2UgKCkKK2Vsc2UoKQogICBmaWxlKFJFQUQgIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIgogICAgIEZUQ09ORklHX0gpCi0gIGZpbGUoV1JJVEUgIiR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLW5ldyIKLSAgICAiJHtGVENPTkZJR19IfSIpCiBlbmRpZiAoKQotZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5X2lmX2RpZmZlcmVudAotICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgtbmV3IgotICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgiKQorZmlsZShXUklURSAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgiCisgICIke0ZUQ09ORklHX0h9IikKIAogCiAjIENyZWF0ZSB0aGUgb3B0aW9ucyBmaWxlCi1tZXNzYWdlKFNUQVRVUwotICAiQ3JlYXRpbmcgZmlsZSAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCIpCi0KIGZpbGUoUkVBRCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgiCiAgIEZUT1BUSU9OX0gpCiBpZiAoWkxJQl9GT1VORCkKQEAgLTI1NywxNiArMjY1LDggQEAKICAgICAiL1xcKiArKCNkZWZpbmUgK0ZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaKSArXFwqLyIgIlxcMSIKICAgICBGVE9QVElPTl9IICIke0ZUT1BUSU9OX0h9IikKIGVuZGlmICgpCi1maWxlKFdSSVRFICIke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaC1uZXciCitmaWxlKFdSSVRFICIke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCIKICAgIiR7RlRPUFRJT05fSH0iKQotZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5X2lmX2RpZmZlcmVudAotICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgtbmV3IgotICAiJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgiKQotCi0KLSMgU3BlY2lmeSBsaWJyYXJ5IGluY2x1ZGUgZGlyZWN0b3JpZXMKLWluY2x1ZGVfZGlyZWN0b3JpZXMoIiR7UFJPSkVDVF9TT1VSQ0VfRElSfS9pbmNsdWRlIikKLWluY2x1ZGVfZGlyZWN0b3JpZXMoQkVGT1JFICIke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZSIpCiAKIAogZmlsZShHTE9CIFBVQkxJQ19IRUFERVJTICJpbmNsdWRlL2Z0MmJ1aWxkLmgiICJpbmNsdWRlL2ZyZWV0eXBlLyouaCIpCkBAIC0yODEsMTMgKzI4MSwxMSBAQAogICBzcmMvYmFzZS9mdGJkZi5jCiAgIHNyYy9iYXNlL2Z0Yml0bWFwLmMKICAgc3JjL2Jhc2UvZnRjaWQuYwotICBzcmMvYmFzZS9mdGZudGZtdC5jCiAgIHNyYy9iYXNlL2Z0ZnN0eXBlLmMKICAgc3JjL2Jhc2UvZnRnYXNwLmMKICAgc3JjL2Jhc2UvZnRnbHlwaC5jCiAgIHNyYy9iYXNlL2Z0Z3h2YWwuYwogICBzcmMvYmFzZS9mdGluaXQuYwotICBzcmMvYmFzZS9mdGxjZGZpbC5jCiAgIHNyYy9iYXNlL2Z0bW0uYwogICBzcmMvYmFzZS9mdG90dmFsLmMKICAgc3JjL2Jhc2UvZnRwYXRlbnQuYwpAQCAtMzE5LDI1ICszMTcsMjUgQEAKICkKIAogaWYgKFdJTjMyKQotICBzZXQoQkFTRV9TUkNTICR7QkFTRV9TUkNTfSBidWlsZHMvd2luZG93cy9mdGRlYnVnLmMpCisgIGVuYWJsZV9sYW5ndWFnZShSQykKKyAgbGlzdChBUFBFTkQgQkFTRV9TUkNTIGJ1aWxkcy93aW5kb3dzL2Z0ZGVidWcuYworICAgICAgICAgICAgICAgICAgICAgICAgc3JjL2Jhc2UvZnR2ZXIucmMpCiBlbHNlaWYgKFdJTkNFKQotICBzZXQoQkFTRV9TUkNTICR7QkFTRV9TUkNTfSBidWlsZHMvd2luY2UvZnRkZWJ1Zy5jKQorICBsaXN0KEFQUEVORCBCQVNFX1NSQ1MgYnVpbGRzL3dpbmNlL2Z0ZGVidWcuYykKIGVsc2UgKCkKLSAgc2V0KEJBU0VfU1JDUyAke0JBU0VfU1JDU30gc3JjL2Jhc2UvZnRkZWJ1Zy5jKQorICBsaXN0KEFQUEVORCBCQVNFX1NSQ1Mgc3JjL2Jhc2UvZnRkZWJ1Zy5jKQogZW5kaWYgKCkKIAotCiBpZiAoQlVJTERfRlJBTUVXT1JLKQotICBzZXQoQkFTRV9TUkNTCi0gICAgJHtCQVNFX1NSQ1N9Ci0gICAgYnVpbGRzL21hYy9mcmVldHlwZS1JbmZvLnBsaXN0Ci0gICkKKyAgbGlzdChBUFBFTkQgQkFTRV9TUkNTIGJ1aWxkcy9tYWMvZnJlZXR5cGUtSW5mby5wbGlzdCkKIGVuZGlmICgpCiAKKwogaWYgKE5PVCBESVNBQkxFX0ZPUkNFX0RFQlVHX1BPU1RGSVgpCiAgIHNldChDTUFLRV9ERUJVR19QT1NURklYIGQpCiBlbmRpZigpCiAKKwogYWRkX2xpYnJhcnkoZnJlZXR5cGUKICAgJHtQVUJMSUNfSEVBREVSU30KICAgJHtQVUJMSUNfQ09ORklHX0hFQURFUlN9CkBAIC0zNDUsMTUgKzM0MywzOSBAQAogICAke0JBU0VfU1JDU30KICkKIAorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKAorICBmcmVldHlwZSBQUk9QRVJUSUVTCisgICAgQ19WSVNJQklMSVRZX1BSRVNFVCBoaWRkZW4pCisKK3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKAorICBmcmVldHlwZSBQUklWQVRFIEZUMl9CVUlMRF9MSUJSQVJZKQorCitpZiAoV0lOMzIpCisgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKAorICAgIGZyZWV0eXBlIFBSSVZBVEUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgX0NSVF9OT05TVERDX05PX1dBUk5JTkdTKQorICBpZiAoQlVJTERfU0hBUkVEX0xJQlMpCisgICAgdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoCisgICAgICBmcmVldHlwZSBQUklWQVRFIERMTF9FWFBPUlQpCisgIGVuZGlmICgpCitlbmRpZiAoKQogCiBpZiAoQlVJTERfU0hBUkVEX0xJQlMpCiAgIHNldF90YXJnZXRfcHJvcGVydGllcyhmcmVldHlwZSBQUk9QRVJUSUVTCi0gICAgVkVSU0lPTiAke1BST0pFQ1RfVkVSU0lPTn0KLSAgICBTT1ZFUlNJT04gJHtTSEFSRURfTElCUkFSWV9WRVJTSU9OfQotICAgIENPTVBJTEVfREVGSU5JVElPTlMgZnJlZXR5cGVfRVhQT1JUUwotICApCisgICAgVkVSU0lPTiAke0xJQlJBUllfVkVSU0lPTn0KKyAgICBTT1ZFUlNJT04gJHtMSUJSQVJZX1NPVkVSU0lPTn0pCiBlbmRpZiAoKQogCisjIFBpY2sgdXAgZnRjb25maWcuaCBhbmQgZnRvcHRpb24uaCBnZW5lcmF0ZWQgYWJvdmUsIGZpcnN0LgordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoCisgIGZyZWV0eXBlCisgICAgUFVCTElDCisgICAgICAkPElOU1RBTExfSU5URVJGQUNFOmluY2x1ZGUvZnJlZXR5cGUyPgorICAgICAgJDxCVUlMRF9JTlRFUkZBQ0U6JHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2luY2x1ZGU+CisgICAgICAkPEJVSUxEX0lOVEVSRkFDRToke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vaW5jbHVkZT4KKyAgICBQUklWQVRFIAorICAgICAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2luY2x1ZGUKKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlKQorCiAKIGlmIChCVUlMRF9GUkFNRVdPUkspCiAgIHNldF9wcm9wZXJ0eShTT1VSQ0UgJHtQVUJMSUNfQ09ORklHX0hFQURFUlN9CkBAIC0zNjcsOTEgKzM4OSwxMjEgQEAKICAgKQogZW5kaWYgKCkKIAotaWYgKE5PVCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAyLjguMTIpCi0gIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGZyZWV0eXBlCi0gICAgUFVCTElDICQ8SU5TVEFMTF9JTlRFUkZBQ0U6aW5jbHVkZS9mcmVldHlwZTI+KQotZW5kaWYgKCkKIAotaWYgKENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDIuOC4xMikKLSAgc2V0KE1BWUJFX1BSSVZBVEUgIiIpCi1lbHNlICgpCi0gIHNldChNQVlCRV9QUklWQVRFICJQUklWQVRFIikKLWVuZGlmICgpCitzZXQoUEtHX0NPTkZJR19SRVFVSVJFRF9QUklWQVRFICIiKQogCiBpZiAoWkxJQl9GT1VORCkKLSAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZyZWV0eXBlICR7TUFZQkVfUFJJVkFURX0gJHtaTElCX0xJQlJBUklFU30pCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtaTElCX0lOQ0xVREVfRElSU30pCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFICR7WkxJQl9MSUJSQVJJRVN9KQorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhmcmVldHlwZSBQUklWQVRFICR7WkxJQl9JTkNMVURFX0RJUlN9KQorICBsaXN0KEFQUEVORCBQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEUgemxpYikKIGVuZGlmICgpCiBpZiAoQlpJUDJfRk9VTkQpCi0gIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSAke01BWUJFX1BSSVZBVEV9ICR7QlpJUDJfTElCUkFSSUVTfSkKLSAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0JaSVAyX0lOQ0xVREVfRElSfSkgIyBub3QgQlpJUDJfSU5DTFVERV9ESVJTCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFICR7QlpJUDJfTElCUkFSSUVTfSkKKyAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoZnJlZXR5cGUgUFJJVkFURSAke0JaSVAyX0lOQ0xVREVfRElSfSkgIyBub3QgQlpJUDJfSU5DTFVERV9ESVJTCisgIGxpc3QoQVBQRU5EIFBLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURSBiemlwMikKIGVuZGlmICgpCiBpZiAoUE5HX0ZPVU5EKQotICBhZGRfZGVmaW5pdGlvbnMoJHtQTkdfREVGSU5JVElPTlN9KQotICB0YXJnZXRfbGlua19saWJyYXJpZXMoZnJlZXR5cGUgJHtNQVlCRV9QUklWQVRFfSAke1BOR19MSUJSQVJJRVN9KQotICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7UE5HX0lOQ0xVREVfRElSU30pCisgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFICR7UE5HX0xJQlJBUklFU30pCisgIHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zKGZyZWV0eXBlIFBSSVZBVEUgJHtQTkdfREVGSU5JVElPTlN9KQorICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhmcmVldHlwZSBQUklWQVRFICR7UE5HX0lOQ0xVREVfRElSU30pCisgIGxpc3QoQVBQRU5EIFBLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURSBsaWJwbmcpCiBlbmRpZiAoKQogaWYgKEhBUkZCVVpaX0ZPVU5EKQotICB0YXJnZXRfbGlua19saWJyYXJpZXMoZnJlZXR5cGUgJHtNQVlCRV9QUklWQVRFfSAke0hBUkZCVVpaX0xJQlJBUklFU30pCi0gIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9KQorICB0YXJnZXRfbGlua19saWJyYXJpZXMoZnJlZXR5cGUgUFJJVkFURSAke0hBUkZCVVpaX0xJQlJBUklFU30pCisgIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKGZyZWV0eXBlIFBSSVZBVEUgJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9KQorICBsaXN0KEFQUEVORCBQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEUgaGFyZmJ1enopCiBlbmRpZiAoKQogCiAKLSMgSW5zdGFsbGF0aW9ucwotIyBOb3RlIHRoZSB0cmFpbGluZyBzbGFzaCBpbiB0aGUgYXJndW1lbnQgdG8gdGhlIGBESVJFQ1RPUlknIGRpcmVjdGl2ZQorIyBJbnN0YWxsYXRpb24KK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisKIGlmIChOT1QgU0tJUF9JTlNUQUxMX0hFQURFUlMgQU5EIE5PVCBTS0lQX0lOU1RBTExfQUxMKQotICBpbnN0YWxsKERJUkVDVE9SWSAke1BST0pFQ1RfU09VUkNFX0RJUn0vaW5jbHVkZS8KLSAgICBERVNUSU5BVElPTiBpbmNsdWRlL2ZyZWV0eXBlMgotICAgIFBBVFRFUk4gImludGVybmFsIiBFWENMVURFCi0gICAgUEFUVEVSTiAiZnRjb25maWcuaCIgRVhDTFVERQotICAgIFBBVFRFUk4gImZ0b3B0aW9uLmgiIEVYQ0xVREUKLSAgICApCi0gIGluc3RhbGwoRklMRVMKLSAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAotICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCi0gICAgREVTVElOQVRJT04gaW5jbHVkZS9mcmVldHlwZTIvZnJlZXR5cGUvY29uZmlnCi0gICAgKQorICBpbnN0YWxsKAorICAgICMgTm90ZSB0aGUgdHJhaWxpbmcgc2xhc2ggaW4gdGhlIGFyZ3VtZW50IHRvIGBESVJFQ1RPUlknIQorICAgIERJUkVDVE9SWSAke1BST0pFQ1RfU09VUkNFX0RJUn0vaW5jbHVkZS8KKyAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfS9mcmVldHlwZTIKKyAgICAgIENPTVBPTkVOVCBoZWFkZXJzCisgICAgICBQQVRURVJOICJpbnRlcm5hbCIgRVhDTFVERQorICAgICAgUEFUVEVSTiAiZnRjb25maWcuaCIgRVhDTFVERQorICAgICAgUEFUVEVSTiAiZnRvcHRpb24uaCIgRVhDTFVERSkKKyAgaW5zdGFsbCgKKyAgICBGSUxFUyAke1BST0pFQ1RfQklOQVJZX0RJUn0vaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAorICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisgICAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0vZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZworICAgICAgQ09NUE9ORU5UIGhlYWRlcnMpCiBlbmRpZiAoKQogCiBpZiAoTk9UIFNLSVBfSU5TVEFMTF9MSUJSQVJJRVMgQU5EIE5PVCBTS0lQX0lOU1RBTExfQUxMKQotICBpbnN0YWxsKFRBUkdFVFMgZnJlZXR5cGUKKyAgIyBHZW5lcmF0ZSB0aGUgcGtnLWNvbmZpZyBmaWxlCisgIGlmIChVTklYKQorICAgIGZpbGUoUkVBRCAke1BST0pFQ1RfU09VUkNFX0RJUn0vYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluIEZSRUVUWVBFMl9QQ19JTikKKworICAgIHN0cmluZyhSRVBMQUNFICI7IiAiLCAiIFBLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURSAiJHtQS0dfQ09ORklHX1JFUVVJUkVEX1BSSVZBVEV9IikKKworICAgIHN0cmluZyhSRVBMQUNFICIlcHJlZml4JSIgJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0KKyAgICAgICAgICAgRlJFRVRZUEUyX1BDX0lOICR7RlJFRVRZUEUyX1BDX0lOfSkKKyAgICBzdHJpbmcoUkVQTEFDRSAiJWV4ZWNfcHJlZml4JSIgIlwke3ByZWZpeH0iCisgICAgICAgICAgIEZSRUVUWVBFMl9QQ19JTiAke0ZSRUVUWVBFMl9QQ19JTn0pCisgICAgc3RyaW5nKFJFUExBQ0UgIiVsaWJkaXIlIiAiXCR7cHJlZml4fS8ke0NNQUtFX0lOU1RBTExfTElCRElSfSIKKyAgICAgICAgICAgRlJFRVRZUEUyX1BDX0lOICR7RlJFRVRZUEUyX1BDX0lOfSkKKyAgICBzdHJpbmcoUkVQTEFDRSAiJWluY2x1ZGVkaXIlIiAiXCR7cHJlZml4fS8ke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0iCisgICAgICAgICAgIEZSRUVUWVBFMl9QQ19JTiAke0ZSRUVUWVBFMl9QQ19JTn0pCisgICAgc3RyaW5nKFJFUExBQ0UgIiVmdF92ZXJzaW9uJSIgIiR7VkVSU0lPTl9NQUpPUn0uJHtWRVJTSU9OX01JTk9SfS4ke1ZFUlNJT05fUEFUQ0h9IgorICAgICAgICAgICBGUkVFVFlQRTJfUENfSU4gJHtGUkVFVFlQRTJfUENfSU59KQorICAgIHN0cmluZyhSRVBMQUNFICIlUkVRVUlSRVNfUFJJVkFURSUiICIke1BLR19DT05GSUdfUkVRVUlSRURfUFJJVkFURX0iCisgICAgICAgICAgIEZSRUVUWVBFMl9QQ19JTiAke0ZSRUVUWVBFMl9QQ19JTn0pCisgICAgc3RyaW5nKFJFUExBQ0UgIiVMSUJTX1BSSVZBVEUlIiAiIiAgIyBBbGwgbGlicyBzdXBwb3J0IHBrZy1jb25maWcKKyAgICAgICAgICAgRlJFRVRZUEUyX1BDX0lOICR7RlJFRVRZUEUyX1BDX0lOfSkKKworICAgIGZpbGUoV1JJVEUgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2ZyZWV0eXBlMi5wYyAke0ZSRUVUWVBFMl9QQ19JTn0pCisKKyAgICBpbnN0YWxsKAorICAgICAgRklMRVMgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2ZyZWV0eXBlMi5wYworICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcGtnY29uZmlnCisgICAgICBDT01QT05FTlQgcGtnY29uZmlnKQorICBlbmRpZiAoKQorCisgIGluc3RhbGwoCisgICAgVEFSR0VUUyBmcmVldHlwZQorICAgICAgRVhQT1JUIGZyZWV0eXBlLXRhcmdldHMKKyAgICAgIExJQlJBUlkgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0KKyAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0KKyAgICAgIEZSQU1FV09SSyBERVNUSU5BVElPTiBMaWJyYXJ5L0ZyYW1ld29ya3MKKyAgICAgIENPTVBPTkVOVCBsaWJyYXJpZXMpCisgIGluc3RhbGwoCiAgICAgRVhQT1JUIGZyZWV0eXBlLXRhcmdldHMKLSAgICBSVU5USU1FIERFU1RJTkFUSU9OIGJpbgotICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCi0gICAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIKLSAgICBGUkFNRVdPUksgREVTVElOQVRJT04gTGlicmFyeS9GcmFtZXdvcmtzCi0gICAgKQotICBpbnN0YWxsKEVYUE9SVCBmcmVldHlwZS10YXJnZXRzCi0gICAgREVTVElOQVRJT04gbGliL2NtYWtlL2ZyZWV0eXBlCi0gICAgRklMRSBmcmVldHlwZS1jb25maWcuY21ha2UKLSAgICApCisgICAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfS9jbWFrZS9mcmVldHlwZQorICAgICAgRklMRSBmcmVldHlwZS1jb25maWcuY21ha2UKKyAgICAgIENPTVBPTkVOVCBoZWFkZXJzKQogZW5kaWYgKCkKIAogCiAjIFBhY2thZ2luZwotIyBDUGFjayB2ZXJzaW9uIG51bWJlcnMgZm9yIHJlbGVhc2UgdGFyYmFsbCBuYW1lLgorc2V0KENQQUNLX1BBQ0tBR0VfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0pCitzZXQoQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZICJUaGUgRnJlZVR5cGUgZm9udCByZW5kZXJpbmcgbGlicmFyeS4iKQorc2V0KENQQUNLX1BBQ0tBR0VfREVTQ1JJUFRJT05fRklMRSAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1JFQURNRSIpCitzZXQoQ1BBQ0tfUkVTT1VSQ0VfRklMRV9MSUNFTlNFICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZG9jcy9MSUNFTlNFLlRYVCIpCisKIHNldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUFKT1IgJHtWRVJTSU9OX01BSk9SfSkKIHNldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUlOT1IgJHtWRVJTSU9OX01JTk9SfSkKLXNldChDUEFDS19QQUNLQUdFX1ZFUlNJT05fUEFUQ0ggJHtWRVJTSU9OX1BBVENIfX0pCi1pZiAoTk9UIERFRklORUQgQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZKQotICBzZXQoQ1BBQ0tfUEFDS0FHRV9ERVNDUklQVElPTl9TVU1NQVJZICIke0NNQUtFX1BST0pFQ1RfTkFNRX0iKQotZW5kaWYgKCkKLWlmIChOT1QgREVGSU5FRCBDUEFDS19TT1VSQ0VfUEFDS0FHRV9GSUxFX05BTUUpCi0gIHNldChDUEFDS19TT1VSQ0VfUEFDS0FHRV9GSUxFX05BTUUKLSAgICAiJHtDTUFLRV9QUk9KRUNUX05BTUV9LSR7UFJPSkVDVF9WRVJTSU9OfS1yJHtQUk9KRUNUX1JFVn0iCi0gICAgQ0FDSEUgSU5URVJOQUwgInRhcmJhbGwgYmFzZW5hbWUiCi0gICkKLWVuZGlmICgpCi1zZXQoQ1BBQ0tfU09VUkNFX0dFTkVSQVRPUiBUR1opCi1zZXQoQ1BBQ0tfU09VUkNFX0lHTk9SRV9GSUxFUwotICAiL0NWUy87Ly5zdm4vOy5zd3AkOy4jOy8jOy9idWlsZC87L3NlcmlhbC87L3Nlci87L3BhcmFsbGVsLzsvcGFyLzt+Oy9wcmVjb25maWcub3V0Oy9hdXRvbTR0ZS5jYWNoZS87Ly5jb25maWciKQotc2V0KENQQUNLX0dFTkVSQVRPUiBUR1opCitzZXQoQ1BBQ0tfUEFDS0FHRV9WRVJTSU9OX1BBVENIICR7VkVSU0lPTl9QQVRDSH0pCitzZXQoQ1BBQ0tfUEFDS0FHRV9WRVJTSU9OICIke0NQQUNLX1BBQ0tBR0VfVkVSU0lPTl9NQUpPUn0uJHtDUEFDS19QQUNLQUdFX1ZFUlNJT05fTUlOT1J9LiR7Q1BBQ0tfUEFDS0FHRV9WRVJTSU9OX1BBVENIfSIpCisKK2lmIChXSU4zMikKKyAgc2V0KENQQUNLX0dFTkVSQVRPUiBaSVApCitlbHNlKCkKKyAgc2V0KENQQUNLX0dFTkVSQVRPUiBUR1opCitlbmRpZigpCisKK3NldChDUEFDS19DT01QT05FTlRfTElCUkFSSUVTX0RJU1BMQVlfTkFNRSAiTGlicmFyaWVzIikKK3NldChDUEFDS19DT01QT05FTlRfSEVBREVSU19ESVNQTEFZX05BTUUgIkMvQysrIEhlYWRlcnMiKQorc2V0KENQQUNLX0NPTVBPTkVOVF9MSUJSQVJJRVNfREVTQ1JJUFRJT04KKyAgIkxpYnJhcnkgdXNlZCB0byBidWlsZCBwcm9ncmFtcyB3aGljaCB1c2UgRnJlZVR5cGUiKQorc2V0KENQQUNLX0NPTVBPTkVOVF9IRUFERVJTX0RFU0NSSVBUSU9OCisgICJDL0MrKyBoZWFkZXIgZmlsZXMgZm9yIHVzZSB3aXRoIEZyZWVUeXBlIikKK3NldChDUEFDS19DT01QT05FTlRfSEVBREVSU19ERVBFTkRTIGxpYnJhcmllcykKK3NldChDUEFDS19DT01QT05FTlRfTElCUkFSSUVTX0dST1VQICJEZXZlbG9wbWVudCIpCitzZXQoQ1BBQ0tfQ09NUE9ORU5UX0hFQURFUlNfR1JPVVAgIkRldmVsb3BtZW50IikKKwogaW5jbHVkZShDUGFjaykKLQotCi0jIEFkZCBgbWFrZSBkaXN0JyB0YXJnZXQgaWYgRlJFRVRZUEVfRElTVCBpcyBzZXQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KQotaWYgKE5PVCBERUZJTkVEIEZSRUVUWVBFX05PX0RJU1QpCi0gIGFkZF9jdXN0b21fdGFyZ2V0KGRpc3QgQ09NTUFORCAke0NNQUtFX01BS0VfUFJPR1JBTX0gcGFja2FnZV9zb3VyY2UpCi1lbmRpZiAoKQotCi0jIGVvZgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDA3MDhlNWUuLmI2Y2I0NmIgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzY5IEBACisyMDE4LTA4LTEwICBCZW4gV2FnbmVyICA8YnVuZ2VtYW5AZ29vZ2xlLmNvbT4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfZG9uZV9mYWNlKTogRml4IG1lbW9yeSBsZWFrICgjNTQ0MzUpLgorCisyMDE4LTA4LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBJbXByb3ZlIHRyYWNpbmcuCisKKzIwMTgtMDgtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRkZWJ1Zy5jIChmdF90cmFjZV9sZXZlbF9lbmFibGVkLAorCWZ0X3RyYWNlX2xldmVsX2Rpc2FibGVkKTogQWRkIGBzdGF0aWMnIGtleXdvcmQuCisKKzIwMTgtMDgtMDkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtyYXN0ZXIsIHNtb290aF0gUmVpbnN0YXRlIGJpdG1hcCBzaXplIGxpbWl0cy4KKworCVRoaXMgYWdhaW4gbW92ZXMgb3V0bGluZSBhbmQgYml0bWFwIHNpemUgY2hlY2tzIG9uZSBsZXZlbCB1cC4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX1JlbmRlcik6IEV4cGxpY2l0bHkgcmVqZWN0IGVub3Jtb3VzCisJb3V0bGluZXMuCisJKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBSZWplY3QgZW5vcm1vdXMgYml0bWFwcworCWFuZCwgdGhlcmVmb3JlLCBvdXRsaW5lcyB0aGF0IHJlcXVpcmUgdGhlbS4KKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogRGl0dG8uCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoZnRfYmxhY2tfcmVuZGVyKTogUmVtb3ZlIG91dGxpbmUgc2l6ZSBjaGVja3MuCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogRGl0dG8uCisJW1NUQU5EQUxPTkVdOiBSZW1vdmUgYEZUX091dGxpbmVfR2V0X0NCb3gnIGNvcHkuCisKKzIwMTgtMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtwY2ZdIFJldmVydCBtYXNzaXZlIHVuc2lnbmluZy4KKworMjAxOC0wOC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gSW1wcm92ZSB0cmFjaW5nLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKTogT25seSB1c2UgdHJhY2luZworCWlmIGNhbGxlZCB0aGUgZmlyc3QgdGltZS4KKwkoZ3JheV9jb252ZXJ0X2dseXBoKTogVXBkYXRlZC4KKworMjAxOC0wOC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIGludGVybmFsIGZ1bmN0aW9ucyBgRlRfVHJhY2VfRGlzYWJsZScgYW5kIGBGVF9UcmFjZV9FbmFibGUnLgorCisJSXQgc29tZXRpbWVzIG1ha2VzIHNlbnNlIHRvIHN1cHByZXNzIHRyYWNpbmcgaW5mb3JtYXRpb25zLCBmb3IKKwlleGFtcGxlLCBpZiBpdCBvdXRwdXRzIGlkZW50aWNhbCBtZXNzYWdlcyBhZ2FpbiBhbmQgYWdhaW4uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oOiBNYWtlIGBmdF90cmFjZV9sZXZlbHMnIGEKKwlwb2ludGVyLgorCShGVF9UcmFjZV9EaXNhYmxlLCBGVF9UcmFjZV9FbmFibGUpOiBOZXcgZGVjbGFyYXRpb25zLgorCisJKiBzcmMvYmFzZS9mdGRlYnVnLmMgKGZ0X3RyYWNlX2xldmVscyk6IFJlbmFtZSB0by4uLgorCShmdF90cmFjZV9sZXZlbHNfZW5hYmxlZCk6IC4uLiB0aGlzLgorCShmdF90cmFjZV9sZXZlbHNfZGlzYWJsZWQpOiBOZXcgYXJyYXkuCisJKGZ0X3RyYWNlX2xldmVscyk6IE5ldyBwb2ludGVyLgorCShGVF9UcmFjZV9EaXNhYmxlLCBGVF9UcmFjZV9FbmFibGUpOiBJbXBsZW1lbnQuCisJKGZ0X2RlYnVnX2luaXQpOiBVcGRhdGVkLgorCisyMDE4LTA4LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlEZWJ1Z2dpbmcgaW1wcm92ZW1lbnRzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAocGl4ZWxfbW9kZXMpOiBNb3ZlIHRoaXMgYXJyYXkgdG8gdG9wIGxldmVsCisJZnJvbSAuLi4KKwkoRlRfTG9hZF9HbHlwaCk6IC4uLiBoZXJlLgorCShGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBVc2UgYHdpZHRoJyB4IGBoZWlnaHQnIGluIHRyYWNlIG1lc3NhZ2UuCisJVXNlIGBwaXhlbF9tb2RlcycuCisKKzIwMTgtMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtwY2ZdIE1hc3NpdmUgdW5zaWduaW5nIChwYXJ0IDIpLgorCisJVHJlYXQgYWxsIHNpemUgcmVsYXRlZCBwcm9wZXJ0aWVzIGFzIHVuc2lnbmVkIHZhbHVlcy4KKworCSogc3JjL3BjZi9wY2YuaCAoUENGX1BhcnNlUHJvcGVydHlSZWMpOiBVc2UgdW5zaWduZWQgYG5hbWUnIGFuZAorCWB2YWx1ZScuCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9wcm9wZWVydGllcywgcGNmX2xvYWRfZm9udCk6IFVwZGF0ZWQKKwlwYXJzaW5nIGNvZGUgYW5kIGhhbmRsaW5nIG9mIEFWRVJBR0VfV0lEVEgsIFBPSU5UX1NJWkUsIFBJWEVMX1NJWkUsCisJUkVTT0xVVElPTl9YIGFuZCBSRVNPTFVUSU9OX1kuCisKKzIwMTgtMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtwY2ZdIE1hc3NpdmUgdW5zaWduaW5nIChwYXJ0IDEpLgorCisJVW5vZmZpY2lhbCBzcGVjaWZpY2F0aW9ucyBoZXNpdGF0ZSB0byB1c2UgdW5zaWduZWQgMzItYml0IGludGVnZXJzLgorCU5lZ2F0aXZlIHZhbHVlcyBjYXVzZWQgYSBsb3Qgb2YgdHJvdWJsZSBpbiB0aGUgcGFzdCBhbmQgaXQgaXMgc2FmZXIKKwlhbmQgZWFzaWVyIHRvIHRyZWF0IHNvbWUgcHJvcGVydGllcyBhcyB1bnNpZ25lZC4KKworCSogc3JjL3BjZi9wY2YuaCAoUENGX0FjY2VsUmVjKTogVXNlIHVuc2lnbmVkIHZhbHVlcyBmb3IgYGZvbnRBc2NlbnQnLAorCWBmb250RGVzY2VudCcsIGFuZCBgbWF4T3ZlcmxhcCcuCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCwgcGNmX2dldF9hY2NlbCk6IFVwZGF0ZWQuCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9HbHlwaF9Mb2FkLCBQQ0ZfU2l6ZV9TZWxlY3QsCisJUENGX1NpemVfUmVxdWVzdCk6IFVwZGF0ZWQuCisKKzIwMTgtMDgtMDcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfYml0bWFwcyk6IFVuc2lnbiBgb2Zmc2V0cycgYW5kCisJYGJpdG1hcFNpemVzJy4KKworMjAxOC0wOC0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBkZXZlbC9mdG9wdGlvbi5oOiBTeW5jaHJvbml6ZSB3aXRoIG1haW4gYGZ0b3B0aW9uLmgnLgorCisyMDE4LTA4LTA2ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbcGNmXSBVc2UgdW5zaWduZWQgdHlwZXMuCisKKwkqIHNyYy9wY2YvcGNmLmggKFBDRl9FbmNvZGluZyk6IFVzZSB1bnNpZ25lZCBgZW5jJy4KKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2NtYXBfY2hhcl97aW5kZXgsbmV4dH0pOiBEaXR0by4KKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X2VuY29kaW5ncyk6IFVzZSB1bnNpZ25lZCB0eXBlcy4KKworMjAxOC0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpOiBGaXggb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03NzcxNTEKKworMjAxOC0wOC0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAob3Bjb2RlX25hbWUpOiBGaXggdHlwb3MuCisKKzIwMTgtMDgtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0VtYm9sZGVuWFkpOiBGaXggdHlwZSBvZgorCWBvcmllbnRhdGlvbicuCisKKwkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmMgKGd4X2xvb2t1cF92YWx1ZV9yZWFkKTogRml4IHNpZ25hdHVyZS4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfZW5jb2RpbmdzKTogRml4IHR5cGUgb2Ygc29tZSB2YXJpYWJsZXMuCisJQWRkIGNhc3QuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2Vfd2VpZ2h0X3ZlY3Rvcik6IEZpeCBjYXN0LgorCisyMDE4LTA3LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkdG9rZW4uaDogSGFuZGxlIGBYVUlEJyBrZXl3b3JkLgorCisyMDE4LTA3LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2lkXSBUcmFjZSBQb3N0U2NyaXB0IGRpY3Rpb25hcmllcy4KKworCSogc3JjL2NpZC9jaWRsb2FkLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCShjaWRfbG9hZF9rZXl3b3JkLCBjaWRfcGFyc2VfZm9udF9tYXRyaXgsIHBhcnNlX2ZkX2FycmF5LAorCXBhcnNlX2V4cGFuc2lvbl9mYWN0b3IsIGNpZF9wYXJzZV9kaWN0KTogQWRkIHRyYWNpbmcgY2FsbHMuCisJKHBhcnNlX2ZvbnRfbmFtZSk6IE5ldyBmdW5jdGlvbiB0byB0cmFjZSBgL0ZvbnROYW1lJyBrZXl3b3JkcyBpbgorCS9GREFycmF5IGRpY3QuCisJKGNpZF9maWVsZF9yZWNvcmRzKTogUmVnaXN0ZXIgYHBhcnNlX2ZvbnRfbmFtZScuCisKKzIwMTgtMDctMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCB0eXBvLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9OTQwOQorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgpOiBGaXggYm91bmRhcnkKKwljaGVjay4KKworMjAxOC0wNy0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9lbmNvZGluZ3MpOiBBbm90aGVyIHRoaW5rby4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk2MDgKKworMjAxOC0wNy0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gRml4IEhhcm1vbnkgbWVtb3J5IG1hbmFnZW1lbnQuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NTAxCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBSZXN0b3JlIGJ1ZmZlcgorCWFmdGVyIGVhY2ggcmVuZGVyaW5nIGluIGNhc2Ugb2YgZmFpbHVyZS4gCisKKzIwMTgtMDctMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gQXZvaWQgc2VnZmF1bHRzIHdpdGggYEZUX0dldF9QU19Gb250X1ZhbHVlJy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk2MTAKKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKHQxX3BzX2dldF9mb250X3ZhbHVlKTogUHJvdGVjdCBhZ2FpbnN0IE5VTEwuCisKKzIwMTgtMDctMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gTWFrZSBgVFRfU2V0X01NX0JsZW5kJyBpZGVtcG90ZW50ICgjNTQzODgpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9zZXRfbW1fYmxlbmQpOiBDb3JyZWN0bHkgc2V0CisJYGZhY2UtPmRvYmxlbmQnIGlmIHRoZSBjdXJyZW50IGNhbGwgdG8gdGhlIGZ1bmN0aW9uIHlpZWxkcyB0aGUgc2FtZQorCWJsZW5kIGNvb3JkaW5hdGVzIGFzIHRoZSBwcmV2aW91cyBjYWxsLgorCisyMDE4LTA3LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXgsIHR5cGUxXTogTW9yZSB0cmFjaW5nIGltcHJvdmVtZW50cy4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IFRyYWNlIHNraXBwZWQKKwlvdXRsaW5lIGNvbW1hbmRzLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nKTogRml4CisJbWlzc2luZyBjYXNlLgorCSh0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MpOiBNYWtlIHRyYWNpbmcgb3V0cHV0IG1vcmUgY29tcGFjdC4KKworCSogc3JjL3R5cGUxL3QxZ2xvYWQuYyAoVDFfQ29tcHV0ZV9NYXhfQWR2YW5jZSk6IEJlIGxlc3MgdmVyYm9zZS4KKwkoVDFfR2V0X0FkdmFuY2VzKTogQWRkIHRyYWNpbmcuCisKKzIwMTgtMDctMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwc2F1eCwgdHlwZTFdIFRyYWNlIFBvc3RTY3JpcHQgZGljdGlvbmFyaWVzIGFuZCBvdGhlciB0aGluZ3MuCisKKwlUaGUgdHJhY2luZyBvZiAvRW5jb2RpbmcsIC9TdWJycywgYW5kIC9DaGFyc3RyaW5ncyBpcyBydWRpbWVudGFyeQorCXJpZ2h0IG5vdy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19wYXJzZXJfbG9hZF9maWVsZCwKKwlwc19wYXJzZXJfbG9hZF9maWVsZF90YWJsZSk6IEFkZCB0cmFjaW5nIGNhbGxzLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IE1ha2UgdHJhY2luZworCW91dHB1dCBtb3JlIGNvbXBhY3QuCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX0NvbXB1dGVfTWF4X0FkdmFuY2UsIFQxX0dldF9BZHZhbmNlcyk6IEFkZAorCXRyYWNpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfYmxlbmRfYXhpc190eXBlcywKKwlwYXJzZV9ibGVuZF9kZXNpZ25fcG9zaXRpb25zLCBwYXJzZV9ibGVuZF9kZXNpZ25fbWFwLAorCXBhcnNlX3dlaWdodF92ZWN0b3IsIHQxX2xvYWRfa2V5d29yZCwgdDFfcGFyc2VfZm9udF9tYXRyaXgsCisJcGFyc2VfZW5jb2RpbmcsIHBhcnNlX3N1YnJzLCBwYXJzZV9jaGFyc3RyaW5ncywgVDFfT3Blbl9GYWNlKTogQWRkCisJdHJhY2luZyBjYWxscy4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9GYWNlX0luaXQpOiBBZGQgdHJhY2luZyBjYWxsLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBNYWtlIHRyYWNpbmcgbWVzc2FnZSBtb3JlCisJdmVyYm9zZS4KKworMjAxOC0wNy0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IG1pbm9yIEFTQU4gcnVuLXRpbWUgd2FybmluZ3MuCisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9tZW1fYWxsb2MsIGZ0X21lbV9yZWFsbG9jKTogT25seSBjYWxsCisJYEZUX01FTV9aRVJPJyBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgYnVmZmVyLgorCShmdF9tZW1fZHVwKTogT25seSBjYWxsIGBmdF9tZW1jcHknIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBidWZmZXIuCisKKzIwMTgtMDctMjQgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtidWlsZF0gRm9ydGlmeSBkbGxleHBvcnQvZGxsaW1wb3J0IGF0dHJpYnV0ZXMgKCM1Mzk2OSwjNTQzMzApLgorCisJV2Ugbm8gbG9uZ2VyIHVzZSBwcmVkZWZpbmVkIF9ETEwsIHdoaWNoIGNhbiBiZSBkZWZpbmVkIGZvciBzdGF0aWMKKwlidWlsZHMgdG9vIHdpdGggL01ELiBXZSB1c2UgRExMX0VYUE9SVCBhbmQgRExMX0lNUE9SVCBpbnN0ZWFkLAorCWZvbGxvd2luZyBsaWJ0b29sIGNvbnZlbnRpb24uCisKKwkqIENNYWtlTGlzdHMudHh0IFtXSU4zMl0sIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOgorCURlZmluZSBETExfRVhQT1JUIG1hbnVhbGx5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oLCBidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwKKwlidWlsZHMvdm1zL2Z0Y29uZmlnLmgsIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCXNyYy9iYXNlL2Z0dmVyLnJjOiAvX0RMTC9kLCBzL0ZUMl9ETExJTVBPUlQvRExMX0lNUE9SVC8uCisKKzIwMTgtMDctMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gQ2hlY2sgcmVsYXRpb25zaGlwIGJldHdlZW4gbnVtYmVyIG9mIGF4ZXMgYW5kIGRlc2lnbnMuCisKKwlGb3IgTXVsdGlwbGUgTWFzdGVycyBmb250cyBXZSBkb24ndCBzdXBwb3J0IGludGVybWVkaWF0ZSBkZXNpZ25zOworCXRoaXMgaW1wbGllcyB0aGF0CisKKwkgIG51bWJlcl9vZl9kZXNpZ25zID09IDIgXl4gbnVtYmVyX29mX2F4ZXMKKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk1NTcKKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9PcGVuX0ZhY2UpOiBFbnN1cmUgYWJvdmUgY29uc3RyYWludC4KKwkoVDFfR2V0X01NX1Zhcik6IFJlbW92ZSBub3cgcmVkdW5kYW50IHRlc3QuCisKKzIwMTgtMDctMjQgIEhpbi1UYWsgTGV1bmcgIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwlbdHJ1ZXR5cGVdIE1hdGNoIHR0ZGVidWcncyBuYW1pbmcgb2YgaW5zdHJ1Y3Rpb24gbW5lbW9uaWNzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogVGhlIGZvcm0gdXNlZCBpbiB0dGRlYnVnLAorCSJNRFJQW0csQixXLD9dIiwgZXRjLiwgaXMgc2xpZ2h0bHkgbW9yZSByZWFkYWJsZSB0aGFuCisJIk1EUlBbMDAsMDEsMDIsMDNdIi4KKworMjAxOC0wNy0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9lbmNvZGluZ3MpOiBUaGlua28uCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NTYxCisKKzIwMTgtMDctMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfZW5jb2RpbmdzKTogQ2hlY2sgaW5kZXggb2YgZGVmYXVsdENoYXIuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NTI3CisKKzIwMTgtMDctMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9sb2FkX2ZvbnQpOiBGaXggbnVtYmVyIG9mIGdseXBocy4KKworCVRoaXMgaXMgYW4gb3ZlcnNpZ2h0IG9mIHRoZSBtb2R1bGUgY2hhbmdlIDIwMTgtMDctMjEuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NTI0CisKKzIwMTgtMDctMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjaWRdIFNhbml0aXplIGBCbHVlU2hpZnQnIGFuZCBgQmx1ZUZ1enonLgorCisJVGhpcyBjb2RlIGlzIHRha2VuIGZyb20gdGhlIHR5cGUxIG1vZHVsZS4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk1MTAKKworCSogc3JjL2NpZC9jaWRsb2FkLmMgKHBhcnNlX2ZkX2FycmF5KTogU2V0IHNvbWUgcHJpdmF0ZSBkaWN0IGRlZmF1bHQKKwl2YWx1ZXMuCisJKGNpZF9mYWNlX29wZW4pOiBEbyB0aGUgc2FuaXRpemluZy4KKwlGaXggc29tZSB0cmFjaW5nIG1lc3NhZ2VzLgorCisyMDE4LTA3LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGNmXSBGaXggaGFuZGxpbmcgb2YgdGhlIHVuZGVmaW5lZCBnbHlwaC4KKworCVRoaXMgY2hhbmdlIG1ha2VzIHRoZSBkcml2ZXIgdXNlIHRoZSBgZGVmYXVsdENoYXInIHByb3BlcnR5IG9mIFBDRgorCWZpbGVzLgorCisJKiBzcmMvcGNmL3BjZi5oIChQQ0ZfRmFjZVJlYyk6IENoYW5nZSB0eXBlIG9mIGBkZWZhdWx0Q2hhcicgdG8KKwl1bnNpZ25lZC4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfZW5jb2RpbmdzKTogUmVhZCBgZGVmYXVsdENoYXInIGFzCisJdW5zaWduZWQuCisJVmFsaWRhdGUgYGRlZmF1bHRDaGFyJy4KKwlJZiBgZGVmYXVsdENoYXInIGRvZXNuJ3QgcG9pbnQgdG8gZ2x5cGggaW5kZXggemVybywgc3dhcCBnbHlwaHMgd2l0aAorCWluZGV4IHplcm8gYW5kIGluZGV4IGBkZWZhdWx0Q2hhcicgYW5kIGFkanVzdCB0aGUgZW5jb2RpbmdzCisJYWNjb3JkaW5nbHkuCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX2NtYXBfY2hhcl9pbmRleCwgcGNmX2NtYXBfY2hhcl9uZXh0LAorCVBDRl9HbHlwaF9Mb2FkKTogVW5kbyBjaGFuZ2UgZnJvbSAyMDAyLTA2LTE2IHdoaWNoIGFsd2F5cyBlbmZvcmNlZAorCXRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGZvbnQgdG8gYmUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyLgorCisyMDE4LTA3LTIwICBBcm1pbiBIYXNpdHprYSAgPHByaW5jZS5jaGVydXNrZXJAZ21haWwuY29tPgorCisJTW92ZSB0aGUgbGVnYWN5IGZ1enogdGFyZ2V0IHRvIHRoZSBgZnJlZXR5cGUtdGVzdGluZycgcmVwb3NpdG9yeS4KKworCUl0IGNhbiBub3cgYmUgZm91bmQgYXQKKworCSAgaHR0cHM6Ly9naXRodWIuY29tL2ZyZWV0eXBlL2ZyZWV0eXBlMi10ZXN0aW5nL3RyZWUvbWFzdGVyL2Z1enppbmcvc3JjL2xlZ2FjeQorCisJKiBzcmMvdG9vbHMvZnRmdXp6ZXI6IFJlbW92ZSB0aGlzIGZvbGRlciBhbmQgaXRzIGNvbnRlbnRzIGZyb20gdGhlCisJcmVwb3NpdG9yeS4KKworMjAxOC0wNy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQXZvaWQgbGVmdC1zaGlmdCBvZiBuZWdhdGl2ZSBudW1iZXJzICgjNTQzMjIpLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9zbG90X2xvYWQpOiBVc2UgbXVsdGlwbGljYXRpb24uCisKKzIwMTgtMDctMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFsbG93IEZUX0VOQ09ESU5HX05PTkUgZm9yIGBGVF9TZWxlY3RfQ2hhcm1hcCcuCisKKwlUaGlzIGlzIGEgdmFsaWQgZW5jb2RpbmcgdGFnIGZvciBCREYsIFBDRiwgYW5kIFdpbmRvd3MgRk5ULCBhbmQKKwl0aGVyZSBpcyBubyByZWFzb24gdG8gZGlzYWxsb3cgaXQgZm9yIHRoZXNlIGZvcm1hdHMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZWxlY3RfQ2hhcm1hcCk6IEltcGxlbWVudCBpdC4KKworMjAxOC0wNy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9lbmNvZGluZ3MpOiBUcmFjZSBgZGVmYXVsdENoYXInLgorCisyMDE4LTA3LTE2ICBBcm1pbiBIYXNpdHprYSAgPHByaW5jZS5jaGVydXNrZXJAZ21haWwuY29tPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oOiBBZGQgbWFjcm9zIGZvciBoYW5kbGluZworCWhhcm1sZXNzIG92ZXItL3VuZGVyZmxvd2luZyBgRlRfSW50JyB2YWx1ZXMuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGZpeGVkMmZsb2F0KTogRml4IG5lZ2F0aW9uIG9mCisJYChpbnQpKC0yMTQ3NDgzNjQ4KScuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NDIzCisKKzIwMTgtMDctMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfc2V0X21tX2JsZW5kKTogRml4IG9mZi1ieS1vbmUgZXJyb3IuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NDEyCisKKzIwMTgtMDctMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbik6IEluaXQgYGNib3gnLgorCisJVGFrZW4gZnJvbSBwYXRjaCAjOTY2Nywgd3JpdHRlbiBieSBTdGV2ZSBMYW5nYXNlaworCTx2b3Jsb25AZGViaWFuLm9yZz4uCisKKwlUaGlzIGZpeGVzIGEgYnVpbGQgZmFpbHVyZSAobW9zdCBwcm9iYWJseSBhIGJ1ZyBpbiBnY2MpIG9uIHBwYzY0ZWwKKwl3aGVuIGJ1aWxkaW5nIHdpdGggLU8zLgorCisyMDE4LTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggdHlwbyAoIzU0MjM4KS4KKworCSogc3JjL2Jhc2UvZnRjb2xvci5jIChGVF9QYWxldHRlX1NldF9Gb3JlZ3JvdW5kX0NvbG9yKQorCVshVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlNdOiBBZGQgcmV0dXJuIHZhbHVlLgorCisyMDE4LTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGp1c3QgdGFibGUgc2l6ZSBjb21wYXJpc29ucyAoIzU0MjQyKS4KKworCSogc3JjL3NmbnQvdHRjcGFsLmMgKHR0X2ZhY2VfbG9hZF9jcGFsKTogSW1wbGVtZW50IGl0LgorCisyMDE4LTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggbW9yZSAzMmJpdCBpc3N1ZXMgKCM1NDIwOCkuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfYmxlbmRfYnVpbGRfdmVjdG9yKTogQ29udmVydCBhc3NlcnRpb24gaW50bworCXJ1bi10aW1lIGVycm9yLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfdG9fbm9ybWFsaXplZCk6IFByb3RlY3QgYWdhaW5zdAorCW51bWVyaWMgb3ZlcmZsb3cuCisKKzIwMTgtMDctMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCAzMmJpdCBidWlsZCB3YXJuaW5ncyAoIzU0MjM5KS4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0JsZW5kKTogQWRkIGNhc3RzIHRvIGF2b2lkIHNpZ25lZAorCXZzLiB1bnNpZ25lZCBjb21wYXJpc29ucy4KKworCSogc3JiL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfZ2V0X2NvbHJfbGF5ZXIpOiBEaXR0by4KKworMjAxOC0wNy0wMiAgSmVmZiBDYXJleSAgPEplZmYuQ2FyZXlAbW9ub3R5cGUuY29tPgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChwc191bmljb2Rlc19pbml0KTogRml4IGFsbG9jIGRlYnVnZ2luZy4KKworMjAxOC0wNy0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJcy9wYWxldHRlX3R5cGVzL3BhbGV0dGVfZmxhZ3MvLgorCisJU3VnZ2VzdGVkIGJ5IEJlaGRhZC4KKworMjAxOC0wNy0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgRlRfR2V0X0NvbG9yX0dseXBoX0xheWVyJyByZXR1cm4gRlRfQm9vbC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oLCBzcmMvYmFzZS9mdG9ianMuYworCShGVF9HZXRfQ29sb3JfR2x5cGhfTGF5ZXIsIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCk6IFVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIChUVF9HZXRfQ29scl9MYXllcl9GdW5jKSwKKwlzcmMvc2ZudC90dGNvbHIuaCwgc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfZ2V0X2NvbHJfbGF5ZXIpOgorCVVwZGF0ZWQuCisKKzIwMTgtMDctMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9Db2xvcl9HbHlwaF9MYXllcik6IEd1YXJkIFNGTlQgZnVuY3Rpb24uCisKKwlSZXBvcnRlZCBieSBCZWhkYWQuCisKKzIwMTgtMDYtMjggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnR0cmlnb24uYyAoRlRfVGFuKTogSW1wcm92ZSBhY2N1cmFjeS4KKwkoRlRfVmVjdG9yX1JvdGF0ZSk6IFNpbXBsaWZ5LgorCisyMDE4LTA2LTI4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcm1hcCk6IFJvYnVzdGlmeS4KKworMjAxOC0wNi0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggbWVtb3J5IGxlYWsuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogQWRkIGluaXRpYWxpemVycy4KKwlGaXggdHlwbyBpbiBgZ290bycgZGVzdGluYXRpb24uCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05MDcxCisKKzIwMTgtMDYtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfZmFjZV92YXJ5X2N2dCk6IEFkZCBpbml0aWFsaXplcnMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05MDcwCisKKzIwMTgtMDYtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW5jcmVhc2UgcHJlY2lzaW9uIHdoaWxlIGFwcGx5aW5nIFZGIGRlbHRhcy4KKworCUl0IHR1cm5lZCBvdXQgdGhhdCB3ZSBpbmNvcnJlY3RseSByb3VuZCBDVlQgYW5kIGdseXBoIHBvaW50IGRlbHRhcworCWJlZm9yZSBhY2N1bXVsYXRpb24sIGxlYWRpbmcgdG8gc2V2ZXJlIHBvc2l0aW9uaW5nIGVycm9ycyBpZiB0aGVyZQorCWFyZSBtYW55IGRlbHRhIHZhbHVlcyB0byBzdW0gdXAuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEFraWVtIEhlbG1saW5nIDxha2llbUB1bmRlcndhcmUubmw+IGFuZCBhbmFseXplZAorCWJ5IEJlaGRhZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRkZWx0YSk6IFJldHVybiBkZWx0YXMgaW4KKwkxNi4xNiBmb3JtYXQuCisJKHR0X2ZhY2VfdmFyX2N2dCk6IENvbGxlY3QgZGVsdGFzIGluIGBjdnRfZGVsdGFzJywgd2hpY2ggaXMgYSAxNi4xNgorCWZvcm1hdCBhcnJheSwgYW5kIGFkZCB0aGUgYWNjdW11bGF0ZWQgdmFsdWVzIHRvIHRoZSBDVlQgYXQgdGhlIGVuZAorCW9mIHRoZSBmdW5jdGlvbi4KKwkoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBTdG9yZSBkYXRhIGluIGBwb2ludHNfb3JnJyBhbmQKKwlgcG9pbnRzX291dCcgaW4gMTYuMTYgZm9ybWF0LgorCUNvbGxlY3QgZGVsdGFzIGluIGBwb2ludF9kZWx0YXNfeCcgYW5kIGBwb2ludF9kZWx0YXNfeScsIHdoaWNoIGFyZQorCTE2LjE2IGZvcm1hdCBhcnJheXMsIGFuZCBhZGQgdGhlIGFjY3VtdWxhdGVkIHZhbHVlcyB0byB0aGUgZ2x5cGgKKwljb29yZGluYXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KKworMjAxOC0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTmV3IGJhc2UgZnVuY3Rpb24gYEZUX01hdHJpeF9DaGVjaycgKCM1NDAxOSkuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NYXRyaXhfQ2hlY2spOiBOZXcgYmFzZSBmdW5jdGlvbiB0byBwcm9wZXJseQorCXJlamVjdCBkZWdlbmVyYXRlIGZvbnQgbWF0cmljZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2ZvbnRfbWF0cml4KSwgc3JjL2NpZC9jaWRsb2FkLmMKKwkoY2lkX3BhcnNlX2ZvbnRfbWF0cml4KSwgc3JjL3R5cGUxL3QxbG9hZC5jICh0MV9wYXJzZV9mb250X21hdHJpeCksCisJc3JjL3R5cGU0Mi90NDJwYXJzZS5jICh0NDJfcGFyc2VfZm9udF9tYXRyaXgpOiBVc2UKKwlgRlRfTWF0cml4X0NoZWNrJy4KKworMjAxOC0wNi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHR5cG8uCisKKwlSZXBvcnRlZCBieSBCZWhkYWQuCisKKwkqIHNyYy9iYXNlL2Z0Y29sb3IuYyAoRlRfUGFsZXR0ZV9EYXRhX0dldCkKKwlbIVRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTXTogcy9hcGFsZXR0ZS9hcGFsZXR0ZV9kYXRhLy4KKworMjAxOC0wNi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJcy9GVF9QQUxFVFRFX1VTQUJMRV9XSVRIXy9GVF9QQUxFVFRFX0ZPUl8vLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y29sb3IuaCwgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgsCisJc3JjL3NmbnQvdHRjb2xyLmM6IERvIGl0LgorCisyMDE4LTA2LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IENQQUwgaGVhcCBidWZmZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD04OTY4CisKKwkqIHNyYy9zZm50L3R0Y3BhbC5jICh0dF9mYWNlX2xvYWRfY3BhbCk6IEd1YXJkIENQQUwgdmVyc2lvbiAxCisJb2Zmc2V0cy4KKworMjAxOC0wNi0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRG9oLiAgRG9uJ3QgdXNlIENQQUwgb3IgQ09MUiBkYXRhIGlmIHRhYmxlcyBhcmUgbWlzc2luZy4KKworCVJlcG9ydGVkIGJ5IEFsZXhlaS4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfZ2V0X2NvbHJfbGF5ZXIpOiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYKKwlgY29scicgaXMgTlVMTC4KKworCSogc3JjL3NmbnQvdHRjcGFsLmMgKHR0X2ZhY2VfcGFsZXR0ZV9zZXQpOiBSZXR1cm4gaW1tZWRpYXRlbHksIGlmCisJYGNwYWwnIGlzIE5VTEwuCisKKzIwMTgtMDYtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBJbnRyb2R1Y2UgYEZUX05ld19HbHlwaCcuCisKKwlUaGlzIGZ1bmN0aW9uIGZhY2lsaXRhdGVzIGFjY2VzcyB0byBmdWxsIGNhcGFiaWxpdGllcyBvZiBGcmVlVHlwZQorCXJlbmRlcmluZyBlbmdpbmUgZm9yIGN1c3RvbSBnbHlwaHMuIFRoaXMgY2FuIGJlIHF1aXRlIHVzZWZ1bCBmb3IKKwljb25zaXN0ZW50IHJlbmRlcmluZyBvZiBtYXRoZW1hdGljYWwgYW5kIGNoZW1pY2FsIGZvcm11bGFzLCBlLmcuCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTc1NzA3OAorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaCwgc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9OZXdfR2x5cGgpOiBOZXcKKwlmdW5jdGlvbi4KKworMjAxOC0wNi0xNyAgQXJtaW4gSGFzaXR6a2EgIDxwcmluY2UuY2hlcnVza2VyQGdtYWlsLmNvbT4KKworCVtiZGZdIEZpeCB1bmRlcmZsb3cgb2YgYW4gdW5zaWduZWQgdmFsdWUuCisKKwliZGZsaWIuYzoxNTYyIGNvdWxkIGJlIHJlYWNoZWQgd2l0aCBgZm9udC0+Z2x5cGhzX3VzZWQgPT0gMCcuICBUaGF0CisJY2F1c2VkIGFuIHVuZGVyZmxvdyBvZiB0aGUgdW5zaWduZWQgdmFsdWUgd2hpY2ggcmVzdWx0cyBpbiB1bmRlZmluZWQKKwliZWhhdmlvdXIuCisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfcGFyc2VfZ2x5cGhzKTogQmFpbCBvdXQgZWFybGllciB0aGFuIGJlZm9yZQorCWlmIHRoZSBgRU5DT0RJTkcnIGtleXdvcmQgY2Fubm90IGJlIGZvdW5kLgorCisyMDE4LTA2LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gQWRkIHRyYWNpbmcgZm9yIGBGVF9CaXRtYXBfQmxlbmQnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCAodHJhY2VfYml0bWFwKTogTmV3CisJZW51bWVyYXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0NPTVBPTkVOVCk6IERlZmluZS4KKwkoRlRfQml0bWFwX0JsZW5kKTogQWRkIGBGVF9UUkFDRTUnIGNhbGxzLgorCisyMDE4LTA2LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlzL3RyYWNlX2JpdG1hcC90cmFjZV9jaGVja3N1bS8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBzL2JpdG1hcC9jaGVja3N1bS8uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9DT01QT05FTlQpOiBzL3RyYWNlX2JpdG1hcC90cmFjZV9jaGVja3N1bS8uCisJQWRqdXN0IGNvZGUuCisKKzIwMTgtMDYtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggY29sb3IgZ2x5cGggbGF5ZXIgbG9hZGluZy4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKENvbHIpOiBBZGQgYHRhYmxlX3NpemUnIGZpZWxkLgorCSh0dF9mYWNlX2xvYWRfY29scik6IFNldCBpdC4KKwkodHRfZmFjZV9nZXRfY29scl9sYXllcik6IENoZWNrIHBvaW50ZXIgbGltaXQgZm9yIGxheWVyIGVudHJpZXMuCisKKzIwMTgtMDYtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggY29sb3IgcGFsZXR0ZSBsb2FkaW5nLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9ODkzMworCisJKiBzcmMvc2ZudC90dGNwYWwuYyAoQ3BhbCk6IEFkZCBgdGFibGVfc2l6ZScgZmllbGQuCisJKHR0X2ZhY2VfbG9hZF9jcGFsKTogU2V0IGl0LgorCSh0dF9mYWNlX3BhbGV0dGVfc2V0KTogQ2hlY2sgcG9pbnRlciBsaW1pdCBmb3IgY29sb3IgZW50cmllcy4KKworMjAxOC0wNi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChGVF9CaXRtYXBfQmxlbmQpOiBBdm9pZCBpbnRlZ2VyIG92ZXJmbG93LgorCisyMDE4LTA2LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgYEZUX0JpdG1hcF9CbGVuZCcgQVBJLgorCisJU3RpbGwgbWlzc2luZzogU3VwcG9ydCBmb3IgbmVnYXRpdmUgYml0bWFwIHBpdGNoIGFuZCBzdWJwaXhlbCBvZmZzZXQKKwlvZiBzb3VyY2UgYml0bWFwLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgsIHNyYy9iYXNlL2Z0Yml0bWFwLmMKKwkoRlRfQml0bWFwX0JsZW5kKTogTmV3IGZ1bmN0aW9uLgorCisyMDE4LTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZXBsYWNlIGBGVF9HZXRfR2x5cGhMYXllcnMnIHdpdGggYEZUX0dldF9Db2xvcl9HbHlwaF9MYXllcicuCisKKwlUaGlzIGF2b2lkcyBhbnkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIG9mIENPTFIgcmVsYXRlZCBzdHJ1Y3R1cmVzIGluCisJYSBnbHlwaCBzbG90LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0dseXBoX0xheWVyLCBGVF9HbHlwaF9MYXllclJlYywKKwlGVF9HZXRfR2x5cGhMYXllcnMpOiBSZW1vdmVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9Db2xyX0ludGVybmFsUmVjKTogUmVtb3ZlZC4KKwkoRlRfU2xvdF9JbnRlcm5hbFJlYyk6IFJlbW92ZSBgY29sb3JfbGF5ZXJzJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFRUX0xvYWRfQ29scl9MYXllcl9GdW5jKToKKwlSZW1vdmVkLgorCShTRk5UX0ludGVyZmFjZSwgRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKTogUmVtb3ZlCisJYGxvYWRfY29scl9sYXllcicuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaF9zbG90X2RvbmUpOiBVcGRhdGVkLgorCShGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBVc2UgYEZUX0dldF9Db2xvcl9HbHlwaF9MYXllcicuCisJKEZUX0dldF9HbHlwaExheWVycyk6IFJlbW92ZWQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfaW50ZXJmYWNlKTogVXBkYXRlZC4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfbG9hZF9jb2xyX2xheWVycyk6IFJlbW92ZWQuCisJKiBzcmMvc2ZudC90dGNvbHIuaDogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisKKzIwMTgtMDYtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByb3ZpZGUgaXRlcmF0aXZlIEFQSSB0byBhY2Nlc3MgYENPTFInIGRhdGEuCisKKwlUaGlzIHNvbHV0aW9uIGRvZXNuJ3Qgc3RvcmUgYW55IGRhdGEgaW4gYW4gYEZUX0dseXBoU2xvdCcgb2JqZWN0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xheWVySXRlcmF0b3IpOiBOZXcgc3RydWN0dXJlLgorCShGVF9HZXRfQ29sb3JfR2x5cGhfTGF5ZXIpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIChUVF9HZXRfQ29scl9MYXllcl9GdW5jKTogTmV3CisJZnVuY3Rpb24gdHlwZS4KKwkoU0ZOVF9JbnRlcmZhY2UsIEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSk6IEFkZCBpdC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0dldF9Db2xvcl9HbHlwaF9MYXllcik6IEltcGxlbWVudCBpdC4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfZ2V0X2NvbHJfbGF5ZXIpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvc2ZudC90dGNvbHIuaDogVXBkYXRlZC4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9pbnRlcmZhY2UpOiBVcGRhdGVkLgorCisyMDE4LTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgZ2x5cGggaW5kZXggYW5kIGdseXBoIGxvYWQgZmxhZ3MgdG8gZ2x5cGggc2xvdC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9HbHlwaFNsb3RSZWMpOiBSZW5hbWUgdW51c2VkCisJYHJlc2VydmVkJyBmaWVsZCB0byBgZ2x5cGhfaW5kZXgnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9TbG90X0ludGVybmFsUmVjKTogQWRkCisJYGxvYWRfZmxhZ3MnIGZpZWxkLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFNldCBuZXcgZmllbGRzLgorCisyMDE4LTA2LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gTW92ZSBgQ1BBTCcgc3R1ZmYgaW50byBzZXBhcmF0ZSBmaWxlcy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSBgdHRjcGFsLmgnLgorCSogc3JjL3NmbnQvc2ZudC5jOiBJbmNsdWRlIGB0dGNwYWwuYycuCisKKwkqIHNyYy9zZm50L3R0Y29sci5jLCBzcmMvc2ZudC90dGNvbHIuaDogTW92ZSBDUEFMIHN0dWZmIHRvIC4uLgorCSogc3JjL3NmbnQvdHRjcGFsLmMsIHNyYy9zZm50L3R0Y3BhbC5jOiAuLi4gdGhlc2UgbmV3IGZpbGVzLgorCisJKiBzcmMvc2ZudC9KYW1maWxlIChfc291cmNlcyksIHNyYy9zZm50L3J1bGVzLm1rIChTRk5UX0RSVl9TUkMpOgorCVVwZGF0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oOiBBZGQgc3VwcG9ydCBmb3IgYGNvbHInIGFuZAorCWBjcGFsJy4KKwlTb3J0IGVudHJpZXMuCisKKzIwMTgtMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBTZXBhcmF0ZSBgQ1BBTCcgYW5kIGBDT0xSJyB0YWJsZSBoYW5kbGluZy4KKworCUxhdGVyIG9uIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGUgYFNWRycgdGFibGUgYWxzbywgd2hpY2ggbmVlZHMgYENQQUwnCisJKGJ1dCBub3QgYENPTFInKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFNGTlRfSW50ZXJmYWNlKTogQWRkIGBsb2FkX2NwYWwnCisJYW5kIGBmcmVlX2NwYWwnIGZpZWxkcy4KKwkoRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBSZXBsYWNlCisJYGNvbHJfYW5kX2NwYWwnIGZpZWxkcyB3aXRoIGBjcGFsJyBhbmQgYGNvbHInLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2ludGVyZmFjZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSwgc2ZudF9kb25lX2ZhY2UpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dGNvbHIuYyAoQ29sciwgQ3BhbCk6IEFkZCBgdGFibGUnIGZpZWxkLgorCShDb2xyQ3BhbCk6IFJlbW92ZWQuCisJKHR0X2ZhY2VfbG9hZF9jb2xyKTogU3BsaXQgb2ZmIENQQUwgaGFuZGxpbmcgaW50by4uLgorCSh0dF9mYWNlX2xvYWRfY3BhbCk6IC4uLiB0aGlzIG5ldyBmdW5jdGlvbi4KKwkodHRfZmFjZV9mcmVlX2NvbHIpOiBTcGxpdCBvZmYgQ1BBTCBoYW5kbGluZyBpbnRvLi4uCisJKHR0X2ZhY2VfZnJlZV9jcGFsKTogLi4uIHRoaXMgbmV3IGZ1bmN0aW9uLgorCSh0dF9mYWNlX2xvYWRfY29scl9sYXllcnMsIHR0X2ZhY2VfcGFsZXR0ZV9zZXQpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC90dGNvbHIuaDogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisKKzIwMTgtMDYtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggYHNpemVvZicgdGhpbmtvLgorCisJKiBzcmMvc2ZudC90dGNvbHIuYyAodHRfZmFjZV9sb2FkX2NvbHIsIHR0X2ZhY2VfcGFsZXR0ZV9zZXQpOiBEb24ndAorCXVzZSBgc2l6ZW9mJyBmb3IgY29tcHV0aW5nIGFycmF5IGxpbWl0LgorCisyMDE4LTA2LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaW5pc2ggQ1BBTC9DT0xSIHN1cHBvcnQgKDQvNCkuCisKKwkqIHNyYy9zZm50L3R0Y29sci5jICh0dF9mYWNlX2ZpbmRfY29sb3IpOiBSZW1vdmVkLgorCSh0dF9mYWNlX2NvbHJfYmxlbmRfbGF5ZXIpOiBVc2UgYGZhY2UtPnBhbGV0dGUnIGluc3RlYWQgb2YgY2FsbGluZworCWB0dF9mYWNlX2ZpbmRfY29sb3InLgorCVVzZSBhbmQgc2V0IHRleHQgZm9yZWdyb3VuZCBjb2xvci4KKworMjAxOC0wNi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRmluaXNoIENQQUwvQ09MUiBzdXBwb3J0ICgzLzQpLgorCisJKiBzcmMvYmFzZS9mdGNvbG9yLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ILgorCShGVF9QYWxldHRlX1NlbGVjdCwgRlRfUGFsZXR0ZV9TZXRfRm9yZWdyb3VuZF9Db2xvcik6IEltcGxlbWVudAorCWZ1bmN0aW9ucy4KKworMjAxOC0wNi0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRmluaXNoIENQQUwvQ09MUiBzdXBwb3J0ICgyLzQpLgorCisJKiBzcmMvc2ZudC90dGNvbHIuYyAodHRfZmFjZV9wYWxldHRlX3NldCk6IE5ldyBmdW5jdGlvbi4KKwkodHRfZmFjZV9sb2FkX2NvbHIpOiBBbGxvY2F0ZSBgZmFjZS0+cGFsZXR0ZScgYW5kIGNhbGwKKwlgdHRfZmFjZV9wYWxldHRlX3NldCcuCisJQWRqdXN0IHJldHVybiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZXJyb3IuCisKKwkqIHNyYy9zZm50L3R0Y29sci5oOiBVcGRhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfU2V0X1BhbGV0dGVfRnVuYyk6IE5ldworCWZ1bmN0aW9uIHR5cGUuCisJKFNGTlRfSW50ZXJmYWNlLCBGVF9ERUZJTkVfU0ZOVF9JTlRFUkZBQ0UpOiBBZGQgaXQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfaW50ZXJmYWNlKSwgc3JjL3NmbnQvc2ZvYmpzLmMKKwkoc2ZudF9kb25lX2ZhY2UpOiBVcGRhdGVkLgorCisyMDE4LTA2LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaW5pc2ggQ1BBTC9DT0xSIHN1cHBvcnQgKDEvNCkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKTogTmV3IGZpZWxkcworCWBwYWxldHRlX2luZGV4JywgYHBhbGV0dGUnLCBgaGF2ZV9mb3JlZ3JvdW5kX2NvbG9yJyBhbmQKKwlgZm9yZWdyb3VuZF9jb2xvcicuCisKKzIwMTgtMDYtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBNaW5vci4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfbG9hZF9jb2xyX2xheWVycyk6CisJcy9wYWxldHRlX2luZGV4L3BhbGV0dGVfZW50cnlfaW5kZXgvIGZvciBjb25zaXN0ZW5jeS4KKwlBZGp1c3QgcmV0dXJuIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBlcnJvci4KKworMjAxOC0wNi0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Jhc3Rlcl0gQ2xlYW4gdXAuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoYmxhY2tfVFdvcmtlciwgU0NBTEVELCBTZXRfSGlnaF9QcmVjaXNpb24pOgorCUNsZWFuIHVwIGFmdGVyIDUtbGV2ZWwgZ3JheSByZW1vdmFsICg4ZGM4NjM1ODc0KS4KKwkoVmVydGljYWxfU3dlZXBfU3Bhbik6IEJlIGJyaWVmLgorCisyMDE4LTA2LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvc2ZudC90dGNvbHIuYyAodHRfZmFjZV9sb2FkX2NvbHIsIHR0X2ZhY2VfbG9hZF9jb2xyX2xheWVycywKKwl0dF9mYWNlX2NvbHJfYmxlbmRfbGF5ZXIpOiBBZGQgYE5VTEwnIGluaXRpYWxpemVycy4KKworMjAxOC0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJcy9GVF9QYWxldHRlL0ZUX1BhbGV0dGVfRGF0YS8sIHMvcGFsZXR0ZS9wYWxldHRlX2RhdGEvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y29sb3IuaCwgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgsCisJc3JjL2Jhc2UvZnRjb2xvci5jLCBzcmMvc2ZudC9zZm9ianMuYywgc3JjL3NmbnQvdHRjb2xyLmM6IFVwZGF0ZWQuCisKKzIwMTgtMDYtMTAgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCUNNYWtlTGlzdHM6IGFsc28gYWNjZXB0IElPU19QTEFURk9STT1TSU1VTEFUT1I2NAorCisJVGhpcyBtaWdodCBiZSBuZWVkZWQgdG8gYnVpbGQgRnJlZVR5cGUgZm9yIHRoZSBpT1Mgc2ltdWxhdG9yLiBTZWUKKwlodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy9pbmRleC5waHA/NTQwNDguIFBhdGNoIGNvbnRyaWJ1dGVkCisJYnkgU3RldmUgUm9iaW5zb24uCisKKwkqIENNYWtlTGlzdHMudHh0OiBBY2NlcHQgSU9TX1BMQVRGT1JNPVNJTVVMQVRPUjY0CisKKzIwMTgtMDYtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcGxlbWVudCBgRlRfUGFsZXR0ZV9HZXQnLgorCisJKiBzcmMvYmFzZS9mdGNvbG9yLmM6IE5ldyBmaWxlLgorCisJKiBzcmMvYmFzZS9KYW1lZmlsZSAoX3NvdXJjZXMpLCBzcmMvYmFzZS9ydWxlcy5tayAoQkFTRV9TUkMpLAorCXNyYy9iYXNlL2Z0YmFzZS5jOiBBZGQgYGZ0Y29sb3IuYycuCisKKzIwMTgtMDYtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRjb2xyLmMgKHR0X2ZhY2VfbG9hZF9jb2xyKTogSW1wcm92ZSBvdmVyZmxvdyBjaGVja3MuCisKKzIwMTgtMDYtMDkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtyYXN0ZXJdIERlYWwgd2l0aCBwaXRjaCBzaWduIGVhcmxpZXIuCisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoYmxhY2tfVFdvcmtlcik6IFJlbW92ZSB1bnVzZWQgYHRyYWNlRycsCisJcy9iVGFyZ2V0L2JPcmlnaW4vLgorCShSZW5kZXJfR2x5cGgpOiBTZXQgYHJhcy5iT3JpZ2luJyBhdCB0aGUgYm90dG9tLWxlZnQgY29ybmVyLgorCShWZXJ0aWNhbF9Td2VlcF9Jbml0LCB7VmVydGljYWwsSG9yaXpvbnRhbH1fU3dlZXBfe1NwYW4sRHJvcH0pOgorCVVwZGF0ZWQgYWNjb3JkaW5nbHkuCisKKzIwMTgtMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBSZWFkIGBDUEFMJyB2ZXJzaW9uIDEgdGFibGVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsLnR0dHlwZXMuaDogSW5jbHVkZSBGVF9DT0xPUl9ILgorCShUVF9GYWNlUmVjKTogQWRkIGBwYWxldHRlJyBmaWVsZC4KKworCSogc3JjL3NmbnQvdHRjb2xyLmM6IEluY2x1ZGUgRlRfQ09MT1JfSC4KKwkoQ3BhbCk6IFJlbW92ZSBhbGwgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBuZXcgYHBhbGV0dGUnIGZpZWxkIGluCisJYFRUX0ZhY2VSZWMnLgorCSh0dF9mYWNlX2xvYWRfY29scik6IFVwZGF0ZWQuCisJUmVhZCBgQ1BBTCcgdmVyc2lvbiAxIGRhdGEuCisJKHR0X2ZhY2VfbG9hZF9jb2xyX2xheWVycywgdHRfZmFjZV9maW5kX2NvbG9yKTogVXBkYXRlZC4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfZG9uZV9mYWNlKTogRnJlZSBnbHlwaCBjb2xvciBwYWxldHRlIGRhdGEuCisKKzIwMTgtMDYtMDcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBBUEkgZm9yIEhhcm1vbnkgTENEIHJlbmRlcmluZy4KKworCVRoaXMgaW50cm9kdWNlcyBgRlRfTGlicmFyeV9TZXRMY2RHZW9tZXRyeScgZm9yIHNldHRpbmcgdXAgYXJiaXRyYXJ5CisJTENEIHN1YnBpeGVsIGdlb21ldHJ5IGluY2x1ZGluZyBub24tc3RyaXBlZCBwYXR0ZXJucy4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoRlRfTGlicmFyeV9TZXRMY2RHZW9tZXRyeSk6IE5ldyBmdW5jdGlvbi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaDogRG9jdW1lbnQgaXQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmg6IE1pbm9yLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmg6IE1pbm9yLgorCisyMDE4LTA2LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlmdGNvbG9yLmg6IFJlZGVzaWduIEFQSS4KKworCVdoaWxlIGdvaW5nIHRvIGltcGxlbWVudCBpdCBJIG5vdGljZWQgdGhhdCBJIG5lZWQgYWNjZXNzIHRvIG1vc3Qgb2YKKwl0aGUgYENQQUwnIGVsZW1lbnRzOyBJIHRodXMgcGxhbiB0byBhZGQgYSBgY3BhbCcgZmllbGQgdG8KKwlgVFRfRmFjZVJlYycsIHdoaWNoIG1ha2VzIG1vc3Qgb2YgdGhlIHByZXZpb3VzbHkgc3VnZ2VzdGVkIEFQSQorCWZ1bmN0aW9ucyBvYnNvbGV0ZSBiZWNhdXNlIHRoZSBmaWVsZHMgd2lsbCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlLgorCisyMDE4LTA2LTA2ICBQYXJ0aCBXYXp1cmthciAgPHBhcnRod2F6dXJrYXJAZ21haWwuY29tPgorCisJW2JkZiwgcGNmXSBSZW1vdmUgZGVwcmVjYXRlZCBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgZmxhZy4KKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogUmVtb3ZlIGRlcHJlY2F0ZWQKKwlGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgZmxhZy4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9sb2FkX2ZvbnQpOiBSZW1vdmUgZGVwcmVjYXRlZAorCUZUX0ZBQ0VfRkxBR19GQVNUX0dMWVBIUyBmbGFnLgorCisyMDE4LTA2LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc21vb3RoLCByYXN0ZXJdIExpbWl0IGJpdG1hcCBzaXplICgjNTQwMTkpLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgW1NUQU5EQUxPTkVdIChGVF9PdXRsaW5lX0dldF9DQm94KTogQWRkCisJZnVuY3Rpb24uCisJWyFTVEFOREFMT05FXTogSW5jbHVkZSBGVF9PVVRMSU5FX0guCisJKGZ0X2JsYWNrX3JlbmRlcik6IENvbXB1dGUgQ0JveCBhbmQgcmVqZWN0IGdseXBocyBsYXJnZXIgdGhhbgorCTB4RkZGRiB4IDB4RkZGRi4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmFzdGVyX3JlbmRlcik6IFJlamVjdCBnbHlwaHMgbGFyZ2VyCisJdGhhbiAweEZGRkYgeCAweEZGRkYuCisKKzIwMTgtMDYtMDMgIEFybWluIEhhc2l0emthICA8cHJpbmNlLmNoZXJ1c2tlckBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2NvbnZlcnRfZ2x5cGgpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKworMjAxOC0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZ2xuYW1lcy5weSAobWFpbik6IEVtaXQgaGVhZGVyIGluIGBsaWdodCcgY29tbWVudCBzdHlsZS4KKworMjAxOC0wNi0wMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gQXR0ZW1wdCB0byBtaXRpZ2F0ZSBidWcgIzU0MDE5LgorCisJVGhlIHJvYnVzdCByZW5kZXJpbmcgb2YgZXN0cmEgbGFyZ2UgZ2x5cGhzIGNhbWUgd2l0aCB1bmJlYXJhYmxlIGNvc3QuCisJVGhlIG9sZCB3YXkgb2YgYmlzZWN0aW5nIHNob3VsZCBmYWlsIGJ1dCBmYWlsIGZhc3Rlci4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfY29udmVydF9nbHlwaCk6IFN3aXRjaCBiYWNrIHRvIGJpc2VjdGluZworCWluIHktZGlyZWN0aW9uLgorCisyMDE4LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTUlSUCk6IFVzZSBTVUJfTE9ORzsgYXZvaWQgRlRfQUJTLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9ODcwNgorCisyMDE4LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9hdXRvZml0L2Fmd2FycC5oOiBVc2UgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICgjNTQwMzMpLgorCisyMDE4LTA1LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoYmxhY2tfVFdvcmtlcl8pOiBSZW1vdmUgYGdUYXJnZXQnIGZpZWxkLgorCisJVGhpcyBpcyBubyBsb25nZXIgdXNlZC4KKworMjAxOC0wNS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEdldCBjb2xvcnMgZnJvbSBgQ1BBTCcgdGFibGUgaW4gcmlnaHQgb3JkZXIgKCM1NDAxNSkuCisKKwkqIHNyYy9zZm50L3R0Y29sci5jICh0dF9mYWNlX2ZpbmRfY29sb3IpOiBGaXggaXQuCisKKzIwMTgtMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCWZ0Y29sb3IuaDogSW1wcm92ZSBBUEkgZGVzaWduLCBmaXggdHlwb3MgKCM1NDAxMSwgIzU0MDE0KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNvbG9yLmggKEZUX1BhbGV0dGVfR2V0X05hbWVzKTogUmVwbGFjZSB3aXRoLi4uCisJKEZUX1BhbGV0dGVfR2V0X05hbWVfSURzKTogLi4uIHRoaXMgZnVuY3Rpb24uCisJKEZUX1BhbGV0dGVfR2V0X0VudHJ5X05hbWVzKTogUmVwbGFjZSB3aXRoLi4uCisJKEZUX1BhbGV0dGVfR2V0X0VudHJ5X05hbWVfSURzKTogLi4uIHRoaXMgZnVuY3Rpb24KKwlzL0ZUX1BhbGV0dGVfU2V0X0ZvcmVncm91bmRfQ09sb3IvRlRfUGFsZXR0ZV9TZXRfRm9yZWdyb3VuZF9Db2xvci8uCisKKzIwMTgtMDUtMzAgIEFybWluIEhhc2l0emthICA8cHJpbmNlLmNoZXJ1c2tlckBnbWFpbC5jb20+CisKKwlCZWF1dGlmeSBhM2NmZWQ1ZTg3MjMyYzkzM2JkYzY0ZjQzZThlYmViY2ZkMThiNDFiLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IE1vdmUgdGhlCisJaW5pdGlhbGlzYXRpb25hbmQgZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzIGludG8gdGhlIGlmLWJsb2NrLgorCisyMDE4LTA1LTMwICBBcm1pbiBIYXNpdHprYSAgPHByaW5jZS5jaGVydXNrZXJAZ21haWwuY29tPgorCisJRml4IHBvaW50ZXIgdW5kZXJmbG93LgorCisJVGhlIGRlY2xhcmF0aW9uIG9mIGBlZGdlMicgY2FuIGJlIHJlYWNoZWQgd2l0aCBgZWRnZTEgPT0gTlVMTCcgYW5kCisJYGF4aXMtPmVkZ2VzID09IDAnIHdoaWNoIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW91ci4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiBJbml0aWFsaXNlIGBlZGdlMicKKwlhZnRlciBjaGVja2luZyBgYXhpcy0+bnVtX2VkZ2VzID4gMScuICBgZWRnZTEgIT0gTlVMTCcgY2FuIGJlIGFzc3VtZWQuCisKKzIwMTgtMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVZhcmlvdXMgbWlub3IgY29sb3IgZml4ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX0NPTE9SX0gpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0NvbHJfSW50ZXJuYWwpOiBDaGFuZ2UKKwl0eXBlIG9mIGBsb2FkX2ZsYWdzJyB0byBgRlRfSW50MzInLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfTG9hZF9Db2xyX0xheWVyX0Z1bmMpOiBDaGFuZ2UKKwl0eXBlIG9mIGBpZHgnIHRvIGBGVF9VSW50Jy4KKwkoVFRfQmxlbmRfQ29scl9GdW5jKTogQ2hhbmdlIHR5cGUgb2YgYGNvbG9yX2luZGV4JyB0byBgRlRfVUludCcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBDaGFuZ2UgdHlwZSBvZgorCWBsb2FkX2ZsYWdzJyB0byBgRlRfSW50MzInLgorCisJKiBzcmMvc2ZudC90dGNvbHIuYyAoZmluZF9iYXNlX2dseXBoX3JlY29yZCwKKwl0dF9mYWNlX2xvYWRfY29scl9sYXllcnMpOiBDaGFuZ2UgdHlwZSBvZiBgZ2x5cGhfaWQnIHRvIGBGVF9VSW50Jy4KKwkodHRfZmFjZV9maW5kX2NvbG9yLCB0dF9mYWNlX2NvbHJfYmxlbmRfbGF5ZXIpOiBDaGFuZ2UgdHlwZSBvZgorCWBjb2xvcl9pbmRleCcgdG8gYEZUX1VJbnQnLgorCUZpeCBzaWduZWRuZXNzIGFuZCB0eXBlIGlzc3Vlcy4KKworCSogc3JjL3NmbnQvdHRjb2xyLmg6IFVwZGF0ZWQuCisKKzIwMTgtMDUtMjUgIE5pa2hpbCBSYW1ha3Jpc2huYW4gIDxyYW1ha3Jpc2huYW4ubmlraGlsQGdtYWlsLmNvbT4KKworCVtkb2NtYWtlcl0gRml4IG1pc3NpbmcgYERlZmluZWQgaW4gKC4uLiknIHVuZGVyIFdpbmRvd3MvQ3lnd2luLgorCisJVGhpcyBwbGF0Zm9ybSB1c2VzIGJhY2tzbGFzaGVzIGZvciBwYXRocywgd2hpY2ggZG9jbWFrZXIgZGlkbid0CisJdW5kZXJzdGFuZCBjb3JyZWN0bHkuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgKEh0bWxGb3JtYXR0ZXI6OmJsb2NrRW50ZXIpOiBVc2UKKwlgb3MucGF0aC5ub3JtcGF0aCcgdG8gbm9ybWFsaXplIHRoZSBwYXRoIGZvciB0aGUgcGxhdGZvcm0gYmVpbmcKKwl1c2VkLgorCisyMDE4LTA1LTI0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBGb3JtYWxpemUgSGFybW9ueSBMQ0QgcmVuZGVyaW5nLgorCisJVGhpcyBnZW5lcmFsaXplcyBtYWdpYyBvdXRsaW5lIHNoaWZ0cyB0aGF0IG1ha2UgSGFybW9ueSBMQ0QKKwlyZW5kZXJpbmcgd29yayBpbiB0ZXJtcyBvZiBwcmVjaXNlIHR3by1kaW1lbnNpb25hbCBSR0Igc3VicGl4ZWwKKwlwb3NpdGlvbnMuIFRoZXNlIGNvb3JkaW5hdGVzIGFyZSBub3cgc2V0IGluIHRpbWUgb2YgdGhlIGBzbW9vdGgnCisJbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBsYXRlciB1c2VkIHRvIHNoaWZ0IGEgZ2x5cGggb3V0bGluZSBmb3IKKwlyZW5kZXJpbmcuIEZUX1JFTkRFUl9NT0RFX0xDRCBhbmQgRlRfUkVOREVSX01PREVfTENEX1YgdXNlIHRoZSBzYW1lCisJY29vcmRpbmF0ZXMuIFRoZSBsZXR0ZXIsIGhvd2V2ZXIsIHJvdGF0ZXMgdGhlbSBiZWZvcmUgdXNpbmcuCisJVGhlIExDRCBiaXRtYXAgcGFkZGluZyBpcyBhbHNvIGNhbGN1bGF0ZWQgdXNpbmcgdGhlc2UgY29vcmRpbmF0ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0xpYnJhcnlSZWMpOiBOZXcgYXJyYXkgZmllbGQKKwlgbGNkX2dlb21ldHJ5Jy4KKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKGZ0X2xjZF9wYWRkaW5nKTogUmV3b3JrZWQuCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X3ByZXNldF9iaXRtYXApOiBVcGRhdGVkIGFjY29yZGluZ2x5LgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgWyFGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR10KKwkoZnRfc21vb3RoX2luaXQpOiBJbml0aWFsaXplIGBsY2RfZ2VvbWV0cnknLgorCShmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBGb3JtYWxpemUgb3V0bGluZSBzaGlmdHMuCisKKzIwMTgtMDUtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUmVqZWN0IGVsZW1lbnRzIG9mIGNvbXBvc2l0ZXMgd2l0aCBpbnZhbGlkIGdseXBoIGluZGljZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD04NDEzCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfQ29tcG9zaXRlX0dseXBoKTogSW1wbGVtZW50IGl0LgorCisyMDE4LTA1LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogVHJhY2UgIyBvZiBwb2ludHMuCisKKzIwMTgtMDUtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGNvbG9yLmg6IE5ldyBmaWxlLgorCisJVGhpcyBpcyBhbiBpbnRlcmZhY2UgdG8gdGhlIGBDUEFMJyBPcGVuVHlwZSB0YWJsZS4gIE5vCisJaW1wbGVtZW50YXRpb24geWV0LgorCisyMDE4LTA1LTE4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEZUX01TQik6IFZlcmlmaWVkIGBfTVNDX1ZFUicuCisKKwlBY3R1YWxseSBgX0JpdFNjYW5SZXZlcnNlJyBpcyBhdmFpbGFibGUgc2luY2UgVlMyMDA1LgorCisyMDE4LTA1LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEZUX01TQik6IFVzZSBgX01TQ19WRVInIHZhbHVlLgorCisJT2xkZXIgVkMgdmVyc2lvbnMgZG9uJ3QgcHJvdmlkZSBgX0JpdFNjYW5SZXZlcnNlJy4gIFdlIHRlc3QgZm9yIFZDCisJMjAxMy4KKworCVJlcG9ydGVkIGJ5IEpvaG4gRW1tYXMgPGpvaG5AY3JlYXRpdmVwb3N0LmNvLnVrPi4KKworMjAxOC0wNS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJcy9pbmxpbmUvX19pbmxpbmUvIGZvciBNU1ZDLgorCisJUmVwb3J0ZWQgYnkgSm9obiBFbW1hcyA8am9obkBjcmVhdGl2ZXBvc3QuY28udWs+LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChGVF9NU0IpIFtfTVNDX1ZFUl06IERvIGl0LgorCisyMDE4LTA1LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgZnVuY3Rpb24gYEZUX0dldF9HbHlwaExheWVycycgdG8gYWNjZXNzIGBDT0xSJyB0YWJsZSBkYXRhLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9HbHlwaF9MYXllclJlYyk6IE1vdmUgdGhpcworCXN0cnVjdHVyZSB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9HbHlwaF9MYXllclJlYyk6IC4uLiB0aGlzCisJaGVhZGVyIGZpbGUuCisJKEZUX0dseXBoX0xheWVyKTogTmV3IHR5cGVkZWYuCisJVXBkYXRlIGNvZGUgdG8gdXNlIGl0IHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfR2V0X0dseXBoTGF5ZXJzKTogTmV3IGZ1bmN0aW9uLgorCisyMDE4LTA1LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gRml4IG1vbm8gYml0bWFwIHByZXNldHRpbmcgKCM1Mzg5NikuCisKKwlJdCBpcyByYXRoZXIgZnVuZGFtZW50YWwgdG8gc2V0IG1vbm9jaHJvbWUgYml0bWFwIGJhc2VkIG9uIHJvdW5kZWQKKwlDQm94IGJlY2F1c2UgdGhlIGIvdyByYXN0ZXJpemVyIHR1cm5zIG9uIHBpeGVscyB3aGVuIHRoZWlyIGNlbnRlcnMgYXJlCisJaW5zaWRlIHRoZSBnbHlwaCBvdXRsaW5lLiBUaGUgZHJvcG91dCBjb250cm9sIGlzIHVucHJlZGljdGFibGUgYW5kIGNhbgorCWRpc3RvcnQgbmFycm93IGdseXBocyBpZiB0aGUgYml0bWFwIGlzIHRvbyB3aWRlLgorCisJUmVwb3J0ZWQgYnkgQ2hyaXMgTGlkZGVsbC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKTogSWYgQkJveCBib3VuZGFyaWVzCisJYXJlIHRvbyBjbG9zZSwgYWRqdXN0IHRoZW0gYmVmb3JlIHJvdW5kaW5nLgorCisyMDE4LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEZpeCBjb21waWxlciB3YXJuaW5nICgjNTM5MTUpLgorCisJKiBzcmMvcHNhdXgvcHNmdC5jIChjZjJfZnJlZVQxU2VhY0NvbXBvbmVudCk6IERvIGl0LgorCisyMDE4LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IG1lbW9yeSBsZWFrIGluIGhhbmRsaW5nIGBDT0xSJyBkYXRhLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKTogRnJlZSBvbGQgYGxheWVycycgYXJyYXkKKwliZWZvcmUgcmVhc3NpZ25pbmcgYWxsb2NhdGVkIG1lbW9yeS4KKwlPbmx5IGFsbG9jYXRlIGBjb2xvcl9sYXllcnMnIGlmIHdlIGRvbid0IGhhdmUgb25lIGFscmVhZHkuCisKKzIwMTgtMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBJZiBgQ09MUicgaXMgcHJlc2VudCwgZG9uJ3QgYXNzdW1lIHRoYXQgYWxsIGdseXBocyB1c2UgaXQuCisKKwkqIHNyYy9zZm50L3R0Y29sci5jICh0dF9mYWNlX2xvYWRfY29scl9sYXllcnMpOiBSZXR1cm4gRlRfRXJyX09rIGlmCisJY3VycmVudCBnbHlwaCBpcyBub3QgYSBgQ09MUicgYmFzZSBnbHlwaC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IERvbid0IGFsbG9jYXRlCisJYGNvbG9yX2xheWVycycgaWYgdGhlcmUgYXJlIG5vIGNvbG9yIGxheWVycy4KKworMjAxOC0wNS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IEZpeCBzaWduYXR1cmUgb2YgYHBpeGVsX21vZGVzJy4KKworMjAxOC0wNS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUHJvdmlkZSBkdW1teSBmdW5jdGlvbnMgaWYgYFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUycgaXMgbm90IHNldC4KKworCSogc3JjL2Jhc2UvZnRzbmFtZXMuYyBbIVRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FU106IEltcGxlbWVudCBpdC4KKworMjAxOC0wNS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IEltcHJvdmUgdHJhY2luZy4KKworMjAxOC0wNS0xMyAgU2hhbyBZdSBaaGFuZyAgPHNoYW96aGFuZ0BmYi5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBQcmVsaW1pbmFyeSBzdXBwb3J0IG9mIGNvbG91cmVkIGxheWVyIG91dGxpbmVzICgjNDQ2ODkpLgorCisJVGhpcyBjb21taXQgZW5hYmxlcyBPcGVuVHlwZSdzIENPTFIvQ1BBTCB0YWJsZSBoYW5kbGluZzsgYSB0eXBpY2FsCisJYXBwbGljYXRpb24gYXJlIGNvbG9yIGVtb2ppcyB0aGF0IGNhbiBiZSBzY2FsZWQgdG8gYW55IHNpemUuCisKKwlJZiB0aGUgY29sb3IgcGFsZXR0ZSBkb2VzIG5vdCBleGlzdCBvciBpcyBpbnZhbGlkLCB0aGUgcmVuZGVyaW5nCisJc3RlcCByYXN0ZXJpemVzIHRoZSBvdXRsaW5lIGluc3RlYWQuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorCWFzc3VtZXMgdGhhdCB0aGUgZm9yZWdyb3VuZCBpcyBibGFjay4KKworCUVuYWJsZSB0aGlzIGJ5IGRlZmluaW5nIG9wdGlvbiBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUy4KKworCVRoZXJlIGFyZSBzdGlsbCBzb21lIGlzc3VlcyB3aXRoIG1ldHJpY3M7IGFkZGl0aW9uYWxseSwgYW4gQVBJIHRvCisJZmV0Y2ggY29sb3IgbGF5ZXJzIGlzIG1pc3NpbmcuCisKKwkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0dseXBoX0xheWVyUmVjLAorCUZUX0NvbHJfSW50ZXJuYWxSZWMpOiBOZXcgc3RydWN0dXJlcy4KKwkoRlRfU2xvdF9JbnRlcm5hbFJlYyk6IEFkZCBgY29sb3JfbGF5ZXJzJyBmaWVsZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmggKFRUX0xvYWRfQ29scl9MYXllcl9GdW5jLAorCVRUX0JsZW5kX0NvbHJfRnVuYyk6IE5ldyBmdW5jdGlvbiB0eXBlcy4KKwkoU0ZOVF9JbnRlcmZhY2UpOiBBZGQgYGxvYWRfY29scicsIGBmcmVlX2NvbHInLCBgbG9hZF9jb2xyX2xheWVyJywKKwlhbmQgYGNvbHJfYmxlbmQnIGZpZWxkcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBBZGQKKwlgY29scl9hbmRfY3BhbCcgZmllbGQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0YWdzLiAoVFRBR19DT0xSLCBUVEFHX0NQQUwpOiBOZXcKKwltYWNyb3MuCisKKwkqIHNyYy9zZm50L3R0Y29sci5jLCBzcmMvc2ZudC90dGNvbHIuaDogTmV3IGZpbGVzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X2RvbmUsIEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCk6CisJSGFuZGxlIGdseXBoIGNvbG9yIGxheWVycy4KKworCSogc3JjL3NmbnQvSmFtZmlsZSAoX3NvdXJjZXMpLCBzcmMvc2ZudC9ydWxlcy5tayAoU0ZOVF9EUlZfU1JDKTogQWRkCisJYHR0Y29sci5jJy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSBgdHRjb2xyLmgnLgorCShQVVRfQ09MT1JfTEFZRVJTKTogTmV3IG1hY3JvLgorCVVwZGF0ZSBjYWxsIHRvIGBGVF9ERUZJTkVfU0ZOVF9JTlRFUkZBQ0UnLgorCisJKiBzcmMvc2ZudC9zZm50LmM6IEluY2x1ZGUgYHR0Y29sci5jJy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogTG9hZCBgQ09MUicgYW5kIGBDUEFMJyB0YWJsZXMuCisJKHNmbnRfZG9uZV9mYWNlKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IEhhbmRsZSBjb2xvciBsYXllcnMuCisKKzIwMTgtMDUtMTIgIEFya2FkeSBTaGFwa2luICA8YXJrYWR5LnNoYXBraW5AZ21haWwuY29tPgorCisJVXNlIE1TIFZDKysncyBfQml0U2NhblJldmVyc2UgdG8gY2FsY3VsYXRlIE1TQiAocGF0Y2ggIzk2MzYpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChGVF9NU0IpIFtfTVNDX1ZFUl06IEltcGxlbWVudAorCWl0LgorCisyMDE4LTA1LTEwICBBbGFuIENvb3BlcnNtaXRoICA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorCisJRml4IERMTCBjb21waWxhdGlvbiBvbiBTb2xhcmlzLgorCisJQUNfQ09NUElMRV9JRkVMU0Ugb25seSB0cmllcyB0byBjb21waWxlIGEgYCouYycgdG8gYSBgKi5vJy4gIFRoZQorCVNvbGFyaXMgU3R1ZGlvIDEyLjEgdGhyb3VnaCAxMi41IGNvbXBpbGVycyBzZWUgdGhlCisJYC1mdmlzaWJpbGl0eT1oaWRkZW4nIGZsYWcsIGJ1dCBpZ25vcmUgaXQgd2l0aCBhIHdhcm5pbmcgb2Y6CisKKwkgIGNjOiBXYXJuaW5nOiBPcHRpb24gLWZ2aXNpYmlsaXR5PWhpZGRlbiBwYXNzZWQgdG8gbGQsCisJICAgICAgICAgICAgICAgaWYgbGQgaXMgaW52b2tlZCwgaWdub3JlZCBvdGhlcndpc2UKKworCUFDX0xJTktfSUZFTFNFIGRvZXMgdGhlIGNvbXBpbGUgYW5kIHRoZW4gdHJpZXMgdG8gbGluayB0aGUgcmVzdWx0LAorCWF0IHdoaWNoIHBvaW50IHRoZSBTb2xhcmlzIGxpbmtlciB3aWxsIGlzc3VlIGFuIGVycm9yOgorCisJICBsZDogZmF0YWw6IG9wdGlvbiAnLWZ2aXNpYmlsaXR5PWhpZGRlbicgaXMgaW5jb21wYXRpYmxlIHdpdGgKKwkgICAgICBidWlsZGluZyBhIGR5bmFtaWMgZXhlY3V0YWJsZQorCisJSWYgd2UgZG9uJ3QgdXNlIEFDX0xJTktfSUZFTFNFIHRvIGNhdGNoIHRoZSBlcnJvciwgdGhlbiBjb25maWd1cmUKKwl3aWxsIGZhaWwgZnVydGhlciB0ZXN0cyB3aGljaCBhdHRlbXB0IHRvIGxpbmssIHN1Y2ggYXMgdGhvc2UgdGVzdGluZworCWRlcGVuZGVuY2llcyBsaWtlIGBsaWJiejInLgorCisJQWxzbywgZG9uJ3QgdHJ5IGFkZGluZyBgLWZ2aXNpYmlsaXR5JyBpZiB3ZSBoYXZlIGFscmVhZHkgYWRkZWQKKwlgLXhsZHNjb3BlJywganVzdCB1c2Ugb25lIG9mIHRoZW0sIHNpbmNlIFN1biBTdHVkaW8gMTIgYW5kIGVhcmxpZXIKKwljb21waWxlcnMgb25seSBpc3N1ZSBhIHdhcm5pbmcsIGFuZCBkb24ndCB0cnkgcGFzc2luZyB0aHJvdWdoIHRvIHRoZQorCWxpbmtlciB0byBnZW5lcmF0ZSBhbiBlcnJvciwgc28gQUNfTElOS19JRkVMU0UgZG9lc24ndCBjYXRjaCB0aGVtLgorCisJVGVzdGVkIG9uIFNvbGFyaXMgMTEuNCBiZXRhIHdpdGggY29tcGlsZXIgdmVyc2lvbnM6CisKKwkgIFN1biBTdHVkaW8gOCAoU3VuIEMgNS41KQorCSAgU3VuIFN0dWRpbyAxMCAoU3VuIEMgNS43KQorCSAgU3VuIFN0dWRpbyAxMSAoU3VuIEMgNS44KQorCSAgU3VuIFN0dWRpbyAxMiAoU3VuIEMgNS45KQorCSAgU3VuIFN0dWRpbyAxMi4xIChTdW4gQyA1LjEwKQorCSAgT3JhY2xlIFNvbGFyaXMgU3R1ZGlvIDEyLjIgKFN1biBDIDUuMTEpCisJICBPcmFjbGUgU29sYXJpcyBTdHVkaW8gMTIuMyAoU3VuIEMgNS4xMikKKwkgIE9yYWNsZSBTb2xhcmlzIFN0dWRpbyAxMi40IChTdW4gQyA1LjEzKQorCSAgT3JhY2xlIERldmVsb3BlciBTdHVkaW8gMTIuNSAoU3VuIEMgNS4xNCkKKwkgIE9yYWNsZSBEZXZlbG9wZXIgU3R1ZGlvIDEyLjYgKFN1biBDIDUuMTUpCisJICBnY2MgNS41LjAKKwkgIGdjYyA3LjMuMAorCisJYW5kIHZlcmlmaWVkIHRoZSBsaWJmcmVldHlwZS5zby42IGdlbmVyYXRlZCBieSBlYWNoIG9mIHRob3NlCisJY29tcGlsZXJzIGV4cG9ydGVkIHRoZSBzYW1lIHNldCBvZiBzeW1ib2xzLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBJbXBsZW1lbnQgaXQuCisKKzIwMTgtMDUtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBdm9pZCBwb3RlbnRpYWwgU0VHViBpZiBydW5uaW5nIG91dCBvZiBtZW1vcnkuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IFNoYWlsZXNoIE1pc3RyeSA8c2hhaWxlc2gubWlzdHJ5QGhvdG1haWwuY28udWs+LgorCisJKiBzcmMvYXV0b2ZpdC9hZnNoYXBlci5jIChhZl9zaGFwZXJfYnVmX2NyZWF0ZSwKKwlhZl9zaGFwZXJfYnVmX2Rlc3Ryb3kpIFshRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlpdOiBEb24ndAorCWFsbG9jYXRlIGFuZCBmcmVlIGEgZm91ci1ieXRlIGJ1ZmZlci4gIEluc3RlYWQsIG1ha2UgdGhvc2UgZnVuY3Rpb25zCisJbm8tb3BzOyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGEgcG9pbnRlciB0byBhIGJ1ZmZlcgorCWluc3RlYWQuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2luaXRfd2lkdGhzLAorCWFmX2Nqa19tZXRyaWNzX2luaXRfYmx1ZXMsIGFmX2Nqa19tZXRyaWNzX2NoZWNrX2RpZ2l0cyksCisJc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2luaXRfd2lkdGhzLAorCWFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcywgYWZfbGF0aW5fbWV0cmljc19jaGVja19kaWdpdHMpCisJWyFGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWl06IFVzZSBwb2ludGVyIHRvIGxvY2FsIHZhcmlhYmxlIGZvcgorCWBzaGFwZXJfYnVmJy4KKworMjAxOC0wNS0wNyAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJW2NtYWtlXSBBbGxvdyB1c2luZyBwcm9qZWN0IGFzIHN1YmZvbGRlciBpbiBvdGhlciBwcm9qZWN0LgorCisJKiBDTWFrZUxpc3RzLnR4dDogVGVzdCBmb3IgQ01ha2UgYnVpbGQgZGlyZWN0b3J5IGJlaW5nIGRpZmZlcmVudAorCWZyb20gc291cmNlIGRpcmVjdG9yeS4gIFByb3ZpZGUgb3RoZXIgcGFydHMgb2YgdGhlIGJ1aWxkIHN5c3RlbQorCWFjY2VzcyB0aGUgZnVsbCBpbmNsdWRlIGRpcmVjdG9yeS4KKworMjAxOC0wNS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2J1aWxkXSBTdXBwcmVzcyBjb25maWd1cmUncyBgbm90aGluZyB0byBiZSBkb25lJyBtZXNzYWdlLgorCisJVGhpcyBpcyBkdWUgdG8gY2FsbGluZyB0aGUgY29uZmlndXJlIHNjcmlwdCB2aWEgYG1ha2UnICh3aXRoaW4gdGhlCisJdG9wLWxldmVsIGBjb25maWd1cmUnIHdyYXBwZXIgc2NyaXB0KS4gIFRoZSBzYW1lIGNhbiBoYXBwZW4gZm9yIGFsbAorCW90aGVyIHNlY29uZGFyeSBtYWtlIHRhcmdldHMgdGhhdCBhcmUgdXNlZCB0byBvbmx5IG1vZGlmeSB0aGUKKwlwcmltYXJ5IG9uZSwgZS5nLiwgYG1ha2Ugc2V0dXAgZGV2ZWwnLgorCisJKiBidWlsZHMvZG9zL2RldGVjdC5tayAoZW14LCB0dXJib2MsIHdhdGNvbSwgYm9ybGFuZGMsIGJvcmxhbmRjMTYpLAorCWJ1aWxkcy9vczIvZGV0ZWN0ICh2aXN1YWxhZ2UsIHdhdGNvbSwgYm9ybGFuZGMsIGRldmVsKSwKKwlidWlsZHMvdW5peC9kZXRlY3QubWsgKGRldmVsLCBsY2MsIHVuaXgpLCBidWlsZHMvd2luZG93cy9kZXRlY3QubWsKKwkodmlzdWFsYywgd2F0Y29tLCB2aXN1YWxhZ2UsIGxjYywgbWluZ3czMiwgYmNjMzIsIGRldmVsLWJjYywKKwlkZXZlbC1nY2MpOiBVc2Ugbm8tb3AgcmVjaXBlLgorCisyMDE4LTA1LTA0ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJU3VwcG9ydCBzeW1ib2wgdmlzaWJpbGl0eSBmZWF0dXJlcyBvZiBTdW4gLyBPcmFjbGUgQyBjb21waWxlcnMuCisKKwlSZXBvcnRlZCBieSBLaXlvc2hpIEthbmF6YXdhOgorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxOC0wNS9tc2cwMDAwOC5odG1sCisJVGhhbmtzIHRvIHRoZSBzdWdnZXN0aW9ucyBieSBBbGV4ZWkgYW5kIEFsYW4gQ29vcGVyc21pdGguCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENoZWNrIGlmICIteGxkc2NvcGU9aGlkZGVuIiBpcworCWFjY2VwdGVkLCBhbmQgaWYgc28sIGl0IGlzIGFkZGVkIHRvIENGTEFHUy4gIFRoaXMgaXMgdGhlIG9wdGlvbgorCW1ha2luZyBTdW4gLyBPcmFjbGUgQyBjb21waWxlcnMgaGlkZSB0aGUgc3ltYm9scyBmcm9tIGdsb2JhbAorCXNjb3BlLgorCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogVXNlICJfX2dsb2JhbCIgcHJlZml4CisJZm9yIEZUX0VYUE9SVCgpIG1hY3JvLCBpZiBTdW5Qcm8gQyBpcyBuZXdlciB0aGFuIFN1biBPTkUKKwlTdHVkaW8gOCAoMjAwMykuCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogRGl0dG8uCisJKiBidWlsZHMvdm1zL2Z0Y29uZmlnLmg6IERpdHRvLgorCisyMDE4LTA1LTAyICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+CisKKwlVbmJyZWFrIENNYWtlIFdpbmRvd3MgaW5zdGFsbGF0aW9uCisKKwkqIENNYWtlTGlzdHMudHh0OiBHZW5lcmF0ZSBmdGNvbmZpZy5oIG9uIG5vbi1VTklYLgorCisyMDE4LTA1LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgRlRfQ09ORklHX09QVElPTl9QSUMgYW5kIHJlbGF0ZWQgY29kZS4KKworCSovKiBbRlRfQ09ORklHX09QVElPTl9QSUNdOiBSZW1vdmUgYWxsIGNvZGUgZ3VhcmRlZCBieSB0aGlzCisJcHJlcHJvY2Vzc29yIHN5bWJvbC4KKworCSovKjogUmVwbGFjZSBgWFhYX0dFVCcgbWFjcm9zICh3aGljaCBjb3VsZCBiZSBlaXRoZXIgYSBmdW5jdGlvbiBpbgorCVBJQyBtb2RlIG9yIGFuIGFycmF5IGluIG5vbi1QSUMgbW9kZSkgd2l0aCBgeHh4JyBhcnJheXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaCwgc3JjL2F1dG9maXQvYWZwaWMuYywKKwlzcmMvYXV0b2ZpdC9hZnBpYy5oLCBzcmMvYmFzZS9iYXNlcGljLmMsIHNyYy9iYXNlL2Jhc2VwaWMuaCwKKwlzcmMvYmFzZS9mdHBpYy5jLCBzcmMvY2ZmL2NmZnBpYy5jLCBzcmMvY2ZmL2NmZnBpYy5oLAorCXNyYy9wc2hpbnRlci9wc2hwaWMuYywgc3JjL3BzaGludGVyL3BzaHBpYy5oLCBzcmMvcHNuYW1lcy9wc3BpYy5jLAorCXNyYy9wc25hbWVzL3BzcGljLmgsIHNyYy9yYXN0ZXIvcmFzdHBpYy5jLCBzcmMvcmFzdGVyL3Jhc3RwaWMuaCwKKwlzcmMvc2ZudC9zZm50cGljLmMsIHNyYy9zZm50L3NmbnRwaWMuaCwgc3JjL3Ntb290aC9mdHNwaWMuYywKKwlzcmMvc21vb3RoL2Z0c3BpYy5oLCBzcmMvdHJ1ZXR5cGUvdHRwaWMuYywgc3JjL3RydWV0eXBlL3R0cGljLmg6CisJUmVtb3ZlZC4KKworMjAxOC0wNS0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuOS4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItOS0xJy4KKworCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuOS4xLgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCisJc3JjL2Jhc2UvZnR2ZXIucmMsIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuOS8yLjkuMS8sIHMvMjkvMjkxLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMjI6MToxNi4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDEuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmg6IFVzZSBGVF9CRUdJTl9IRUFERVIgYW5kIEZUX0VORF9IRUFERVIuCisKKzIwMTgtMDQtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFub3RoZXIgZml4IGZvciBoYW5kbGluZyBpbnZhbGlkIGZvcm1hdCAyIGNtYXBzLgorCisJU2lnaC4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTgwMDMKKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAyX2NoYXJfbmV4dCk6IEFkanVzdCBjb25kaXRpb24gdG8gYXZvaWQKKwlhbiBlbmRsZXNzIGxvb3AuCisKKzIwMTgtMDQtMjQgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgorCisJW2Jhc2VdIEF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gbGNkIGZpbHRlcmluZyBjb2RlICgjNTM3MjcpLgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChmdF9sY2RfZmlsdGVyX2ZpciwgX2Z0X2xjZF9maWx0ZXJfbGVnYWN5KToKKwlFbnN1cmUgYGhlaWdodCA+IDAnLgorCisyMDE4LTA0LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9EZWNvbXBvc2UpOiBJbXByb3ZlIGVycm9yIHRyYWNpbmcuCisKKzIwMTgtMDQtMjIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBGaXggYml0bWFwIGVtYm9sZGVuaW5nLgorCisJQnVnIGludHJvZHVjZWQgYWZ0ZXIgcmVsZWFzZSAyLjguCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKTogV2UgdXNlCisJYEZUX1FBTExPQ19NVUxUJywgd2hpY2ggZG9lc24ndCB6ZXJvIG91dCB0aGUgYnVmZmVyLiAgQWRqdXN0IHRoZQorCWJpdG1hcCBjb3B5aW5nIGNvZGUgdG8gdGFrZSBjYXJlIG9mIHRoaXMgZmFjdC4KKworMjAxOC0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQW5vdGhlciBmaXggZm9yIGhhbmRsaW5nIGludmFsaWQgZm9ybWF0IDIgY21hcHMuCisKKwlUaGUgcHJldmlvdXMgY29tbWl0IHdhcyBpbmNvbXBsZXRlLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzkyOAorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDJfY2hhcl9uZXh0KTogQWRqdXN0IGNvbmRpdGlvbiB0byBhdm9pZAorCWFuIGVuZGxlc3MgbG9vcC4KKworMjAxOC0wNC0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEdlb3JnaWFuIE10YXZydWxpIGNoYXJhY3RlcnMuCisKKwlUaGlzIHdpbGwgYmUgcGFydCBvZiB0aGUgZm9ydGhjb21pbmcgVW5pY29kZSAxMS4wLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE10YXZydWxpLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE10YXZydWxpIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworMjAxOC0wNC0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGhhbmRsaW5nIG9mIGludmFsaWQgZm9ybWF0IDIgY21hcHMuCisKKwlUaGUgcHJvYmxlbSB3YXMgaW50cm9kdWNlZCBhZnRlciB0aGUgbGFzdCByZWxlYXNlLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzgyOAorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDJfY2hhcl9uZXh0KTogQXZvaWQgZW5kbGVzcyBsb29wLgorCisyMDE4LTA0LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3cgaXNzdWVzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzczOQorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0NFSUxJTkcpOiBVc2UgRlRfUElYX0NFSUxfTE9ORy4KKworMjAxOC0wNC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTc3MTgKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NSVJQKTogVXNlIEFERF9MT05HLgorCisyMDE4LTA0LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYnVpbGRdIFVzZSBgaW5mbycgZnVuY3Rpb24gb2YgbWFrZSAzLjgxLgorCisJKiBjb25maWd1cmUsIGRvY3MvSU5TVEFMTCwgZG9jcy9JTlNUQUxMLkNST1NTLCBkb2NzL0lOU1RBTEwuR05VLAorCWRvY3MvSU5TVEFMTC5VTklYLCBkb2NzL01BS0VQUDogQnVtcCBtYWtlIHZlcnNpb24gcmVxdWlyZW1lbnRzLgorCisJKiBidWlsZHMvZGV0ZWN0Lm1rIChzdGRfc2V0dXApOiBSZXBsYWNlIGBlY2hvJyB3aXRoIGBpbmZvJy4KKwkoZG9zX3NldHVwKTogUmVtb3ZlZC4KKwkqIGJ1aWxkcy91bml4L2luc3RhbGwubWssIGJ1aWxkcy9tb2R1bGVzLm1rLCBidWlsZHMvZG9zL2RldGVjdC5taywKKwlidWlsZHMvd2luZG93cy9kZXRlY3QubWssIGJ1aWxkcy9vczIvZGV0ZWN0Lm1rOiBVcGRhdGVkLgorCSogYnVpbGRzL25ld2xpbmU6IE5vIGxvbmdlciBuZWVkZWQuCisKKzIwMTgtMDQtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV06IExpbWl0IGBTTE9PUCcgYnl0ZWNvZGUgYXJndW1lbnQgdG8gMTYgYml0cy4KKworCVRoaXMgZml4ZXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzcwNworCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NMT09QKTogRG8gaXQuCisKKzIwMTgtMDQtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD03NjUyCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTURBUCk6IFVzZSBTVUJfTE9ORy4KKworMjAxOC0wNC0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFVwZGF0ZSB0byBVbmljb2RlIDExLjAuMC4KKworCUJ1dCBubyBzdXBwb3J0IG5ldyBzY3JpcHRzICh2b2x1bnRlZXJzIHdlbGNvbWVkKS4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYyAoYWZfYXJhYl9ub25iYXNlX3VuaXJhbmdlcywKKwlhZl9iZW5nX25vbmJhc2VfdW5pcmFuZ2VzLCBhZl9jYWttX25vbmJhc2VfdW5pcmFuZ2VzLAorCWFmX2RldmFfbm9uYmFzZV91bmlyYW5nZXMsIGFmX2dlb3JfdW5pcmFuZ2VzLAorCWFmX2d1anJfbm9uYmFzZV91bmlyYW5nZXMsIGFmX21seW1fbm9uYmFzZV91bmlyYW5nZXMsCisJYWZfbmtvb19ub25iYXNlX3VuaXJhbmdlcywgYWZfdGVsdV9ub25iYXNlX3VuaXJhbmdlcywKKwlhZl9oYW5pX3VuaXJhbmdlcyk6IEFkZCBuZXcgZGF0YS4KKworMjAxOC0wNC0xMCAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJKiBDTWFrZUxpc3RzLnR4dCwgYnVpbGRzL2NtYWtlL0ZpbmRIYXJmQnV6ei5jbWFrZTogRXh0ZW5zaXZlCisJbW9kZXJuaXphdGlvbiBtZWFzdXJlcy4KKworCVRoaXMgYnJpbmdzIHVwIHRoZSBtaW5pbXVtIHJlcXVpcmVkIENNYWtlIHZlcnNpb24gdG8gMi44LjEyLgorCisJVGhlIGluc3RhbGxhdGlvbiBwYXRocyBmb2xsb3cgdGhlIEdOVSBkZWZhdWx0cyBub3csIGUuZy4gaW5zdGFsbGluZyBvbiBhCisJNjQgYml0IGhvc3Qgd2lsbCBwbGFjZSBiaW5hcmllcyBpbnRvIHRoZSBsaWI2NC8gZm9sZGVyIG9uIGUuZy4gRmVkb3JhLgorCisJU3ltYm9scyBhcmUgaGlkZGVuIGJ5IGRlZmF1bHQgKGUuZy4gYC1mdmlzaWJpbGl0eT1oaWRkZW4nIG9uIEdDQykuCisKKwlDTWFrZSB3aWxsIG5vIGxvbmdlciBsb29rIGZvciBhIEMrKyBjb21waWxlci4KKworCUxpYnJhcnkgYW5kIC5zbyB2ZXJzaW9uIG5vdyBtYXRjaCB0aGUgQXV0b3Rvb2xzIGJ1aWxkLgorCisJQ29tbWVudHMgaW4gdGhlIGJ1aWxkIGZpbGUgYW5kIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgbm93IHVzZSBwbGF0Zm9ybQorCWFnbm9zdGljIGV4YW1wbGUgY29tbWFuZHMuCisKKwlmdG9wdGlvbi5oIGFuZCBmdGNvbmZpZy5oIGFyZSB3cml0dGVuIGRpcmVjdGx5IHdpdGhvdXQgYSByZWR1bmRhbnQgYC1uZXcnCisJY29weS4KKworCUV4dGVybmFsIGRlcGVuZGVuY2llcyBhcmUgZXhwcmVzc2VkIGFzIG9wdGlvbigpcyBhbmQgd2lsbCB0dXJuIHVwIGFzIHN1Y2gKKwlpbiBjbWFrZS1ndWkuCisKKwlJbnRlcm5hbDogUHJvcGVydGllcyBzdWNoIGFzIGRlcGVuZGVuY2llcyBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcyBhcmUgbm93CisJcHJpdmF0ZWx5IHNldCBvbiB0aGUgZnJlZXR5cGUgbGlicmFyeSBpbnN0ZWFkIG9mIGdsb2JhbGx5LgorCisJVGhlIENQYWNrIGRlZmluaXRpb25zIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB0aGUgYG1ha2UgZGlzdCcgaGFzIGJlZW4KKwlyZW1vdmVkLiBTb3VyY2UgcGFja2FnZXMgZ2VuZXJhdGVkIHdpdGggQ1BhY2sgZG9uJ3QgY29udGFpbiBBdXRvdG9vbHMKKwlmaWxlcyBhbmQgYXJlbid0IHVzZWQgYnkgdGhlIG1haW50YWluZXJzIGFueXdheS4KKworCU9uIFdpbmRvd3MsIHNyYy9iYXNlL2Z0dmVyLnJjIGlzIGNvbXBpbGVkIHRvIGRlY29yYXRlIHRoZSBsaWJyYXJ5IHdpdGgKKwl2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisKKwlBIHBrZy1jb25maWcgZmlsZSBpcyBub3cgZ2VuZXJhdGVkIGFuZCBpbnN0YWxsZWQuCisKKzIwMTgtMDQtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD03NDUzCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChSb3VuZF9TdXBlciwgUm91bmRfU3VwZXJfNDUpOiBVc2UKKwlBRERfTE9ORyBhbmQgU1VCX0xPTkcuCisKKzIwMTgtMDQtMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVt3aW5kb3dzLCB3aW5jZV0gQ2xlYW4gdXAgbGVnYWN5IHByb2plY3QgZmlsZXMuCisKKwkqIGJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwOiBSZW1vdmUgcGVyLWZpbGUgY29tcGlsZSBmbGFncy4KKworMjAxOC0wNC0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHlwZTFdIFNhbml0aXplIGBCbHVlRnV6eicgYW5kIGBCbHVlU2hpZnQnLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzM3MQorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogU2FuaXRpemUKKwlgcHJpdi0+Ymx1ZV9zaGlmdCcgYW5kIGBwcml2LT5ibHVlX2Z1enonIHRvIGF2b2lkIG92ZXJmbG93cyBsYXRlcgorCW9uLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX09wZW5fRmFjZSk6IERpdHRvLgorCisyMDE4LTA0LTA0ICBCZW4gV2FnbmVyICA8YnVuZ2VtYW5AZ29vZ2xlLmNvbT4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0cmlja19uYW1lcyk6IEFkZCAzIHRyaWNreSBmb250cyAoIzUzNTU0KSwKKwlgREZIZWktTWQtSEstQkYnLCBgREZLYWlTaHUtTWQtSEstQkYnIGFuZCBgREZNaW5nLUJkLUhLLUJGJy4KKwkodHRfY2hlY2tfdHJpY2t5bmVzc19zZm50X2lkcyk6IEFkZCBjaGVja3N1bXMgZm9yIDMgdHJpY2t5IGZvbnRzCisJaW4gYWJvdmUuCisKKzIwMTgtMDQtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3RvcGxldmVsLm1rICh3b3JrKTogVXNlICQoU0VQKS4KKworCVRoaXMgZml4ZXMgdGhlIGBtYWtlIHJlZmRvYycgdXNpbmcgQ3lnd2luOiAkKENBVCkgaXMgYHR5cGUnIG9uIHRoaXMKKwlwbGF0Zm9ybSwgYW5kIHRoaXMgcHJvZ3JhbSBvbmx5IHVuZGVyc3RhbmRzIGJhY2tzbGFzaGVzIGluIHBhdGhzLgorCisJUmVwb3J0ZWQgYnkgTmlraGlsIFJhbWFrcmlzaG5hbiA8cmFtYWtyaXNobmFuLm5pa2hpbEBnbWFpbC5jb20+LgorCisyMDE4LTAzLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBtZW1vcnkgbGVhayAob25seSBpZiB0cmFjaW5nIGlzIG9uKS4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1ZhcikgW0ZUX0RFQlVHX0xFVkVMX1RSQUNFfTogRml4CisJaXQuCisKKzIwMTgtMDMtMjMgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgorCisJW3NmbnRdIENvcnJlY3RseSBoYW5kbGUgbWlzc2luZyBiaXRtYXBzIGluIHNiaXggZm9ybWF0ICgjNTM0MDQpLgorCisJKiBzcmMvc2ZudC90dGZzYml0LmMgKHR0X2ZhY2VfbG9hZF9zYml4X2ltYWdlKTogRml4IHJldHVybiB2YWx1ZS4KKworMjAxOC0wMy0yMyAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBhZHZhbmNlIG9mIGVtcHR5IGdseXBocyBpbiBiaXRtYXAgZm9udHMgKCM1MzM5MykuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpOiBBcHBseSBzY2FsaW5nIHRvIG1ldHJpY3MKKwlmb3IgZW1wdHkgYml0bWFwcy4KKworMjAxOC0wMy0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGBmdGxjZGZpbC5jJyBhbmQgYGZ0Zm50Zm10LmMnIGZyb20gYnVpbGQgZmlsZXMgKCM1MzQxNSkuCisKKwlidWlsZHMvYW1pZ2EvbWFrZWZpbGUsIGJ1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQsCisJYnVpbGRzL2FtaWdhL3NtYWtlZmlsZSwgYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0LAorCWJ1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dCwKKwlidWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0LAorCWJ1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcCwgYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLmZpbHRlcnMsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwgdm1zX21ha2UuY29tOiBEbyBpdC4KKworMjAxOC0wMy0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDJfdmFsaWRhdGUpOiBGaXggcG90ZW50aWFsIG51bWVyaWMKKwlvdmVyZmxvdy4KKworMjAxOC0wMy0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNtYXAgZm9ybWF0IDIgaGFuZGxpbmcgKCM1MzMyMCkuCisKKwlUaGUgcGF0Y2ggaW50cm9kdWNlZCBmb3IgIzUyNjQ2IHdhcyBub3QgY29ycmVjdC4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAyX2NoYXJfbmV4dCk6IEFkanVzdCBjb25kaXRpb24uCisKKzIwMTgtMDMtMTAgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCSogQ01ha2VMaXN0cy50eHQgKEJBU0VfU1JDUyk6IFVwZGF0ZSB0byBjaGFuZ2VzIGZyb20gMjAxOC0wMy0wNS4KKworMjAxOC0wMy0wOSAgQ2h1bi13ZWkgRmFuICA8ZmFuYzk5OUB5YWhvby5jb20udHc+CisKKwkqIENNYWtlTGlzdHMudHh0IFt3aW4zMl06IEFsbG93IE1TVkMgRExMIGJ1aWxkcyAoIzUzMjg3KS4KKworCURvIG5vdCBsaW1pdCBETEwgYnVpbGRzIHRvIE1pbkdXLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUKKwlgX19kZWNsc3BlYyhkbGxleHBvcnQpJyBkaXJlY3RpdmVzIGluIGBmdGNvbmZpZy5oJy4KKwlBbHNvIHN1cHByZXNzIG1vcmUgd2FybmluZ3MgZm9yIFBPU0lYIGZ1bmN0aW9ucy4KKworMjAxOC0wMy0wOCAgSHVnaCBNY01hc3RlciAgPGh1Z2gubWNtYXN0ZXJAb3V0bG9vay5jb20+CisKKwlNYWtlIGluc3RhbGxhdGlvbiBvZiBgZnJlZXR5cGUtY29uZmlnJyBvcHRpb25hbCAoIzUzMDkzKS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQWRkIG9wdGlvbiBgLS1lbmFibGUtZnJlZXR5cGUtY29uZmlnJworCWFuZCBzZXQgYElOU1RBTExfRlQyX0NPTkZJRycuCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbiAoSU5TVEFMTF9GVDJfQ09ORklHKTogRGVmaW5lLgorCSogYnVpbGRzL3VuaXgvaW5zdGFsbC5tayAoaW5zdGFsbCk6IEhhbmRsZSBpdC4KKworMjAxOC0wMy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgZnRsY2RmaWwuYycgcGFydCBvZiB0aGUgYGJhc2UnIG1vZHVsZS4KKworCWBmdG9ianMuYycgbmVlZHMgYGZ0X2xjZF9wYWRkaW5nJy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgZHVodWFucGVuZyA8NTQ4NzA4ODgwQHFxLmNvbT4uCisKKwkqIG1vZHVsZXMuY2ZnIChCQVNFX0VYVEVOU0lPTlMpOiBEb24ndCBpbmNsdWRlIGBmdGxjZGZpbC5jJy4KKworCSogc3JjL2Jhc2UvZnRiYXNlLmM6IEluY2x1ZGUgYGZ0bGNkZmlsLmMnLgorCSogc3JjL2Jhc2UvcnVsZXMubWsgKEJBU0VfU1JDKTogQWRkIGBmdGxjZGZpbC5jJy4KKwkqIHNyYy9iYXNlL0phbWZpbGUgKF9zb3VyY2VzKTogQWRqdXN0ZWQuCisKKwkqIGRvY3MvSU5TVEFMTC5BTlk6IFVwZGF0ZWQuCisKKzIwMTgtMDMtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2UgYGZ0Zm50Zm10LmMnIHBhcnQgb2YgdGhlIGBiYXNlJyBtb2R1bGUuCisKKwlgZnRvYmpzLmMnIG5lZWRzIGBGVF9HZXRfRm9udF9Gb3JtYXQnLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBkdWh1YW5wZW5nIDw1NDg3MDg4ODBAcXEuY29tPi4KKworCSogbW9kdWxlcy5jZmcgKEJBU0VfRVhURU5TSU9OUyk6IERvbid0IGluY2x1ZGUgYGZ0Zm50Zm10LmMnLgorCisJKiBzcmMvYmFzZS9mdGJhc2UuYzogSW5jbHVkZSBgZnRmbnRmbXQuYycuCisJKiBzcmMvYmFzZS9ydWxlcy5tayAoQkFTRV9TUkMpOiBBZGQgYGZ0Zm50Zm10LmMnLgorCSogc3JjL2Jhc2UvSmFtZmlsZSAoX3NvdXJjZXMpOiBBZGp1c3RlZC4KKworCSogZG9jcy9JTlNUQUxMLkFOWTogVXBkYXRlZC4KKworMjAxOC0wMy0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogRml4IHRyYWNpbmcgYXJndW1lbnRzLgorCisyMDE4LTAyLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IE5lZWQgSGFyZkJ1enogMS4zLjAgb3IgbmV3ZXIuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4uCisKKzIwMTgtMDItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBQcmVmZXIgYENCRFQnL2BDQkxDJyBvdmVyIGBnbHlmJyB0YWJsZSAoIzUzMTU0KS4KKworMjAxOC0wMi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93IGlzc3Vlcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTYwMjcKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NU0lSUCwgSW5zX01JQVAsIEluc19NSVJQKTogVXNlCisJU1VCX0xPTkc7IGF2b2lkIEZUX0FCUy4KKworMjAxOC0wMi0wNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3VuaXhdIFVzZSAtZnZpc2liaWxpdHk9aGlkZGVuLgorCisJSXQgaXMgbm93IHdpZGVseSByZWNvbW1lbmRlZCB0aGF0IEVMRiBzaGFyZWQgbGlicmFyaWVzIGhpZGUgc3ltYm9scworCWV4Y2VwdCB0aG9zZSB3aXRoIGV4cGxpY2l0IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpLgorCVRoaXMgaXMgc3VwcG9ydGVkIGJ5IGFsbCBtYWpvciBjb21waWxlcnMgYW5kIHNob3VsZCByYXRoZXIgYmUgYW4KKwlvcHRpb24gaW4gbGlidG9vbC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQWRkIC1mdmlzaWJpbGl0eT1oaWRkZW4gdG8gQ0ZMQUdTLgorCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9FWFBPUlQpOiBVc2UgdmlzaWJpbGl0eQorCWF0dHJpYnV0ZS4KKwogMjAxOC0wMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCiAJW3RydWV0eXBlXSBCZXR0ZXIgcHJvdGVjdGlvbiBhZ2FpbnN0IGludmFsaWQgVkYgZGF0YS4KQEAgLTE1MCw3ICsxOTE2LDcgQEAKIAkoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMC4KIAogCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDIyOjA6MTYuCi0JKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9QQVRDSCk6IFNldCB0byAxLgorCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMC4KIAogMjAxOC0wMS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCkBAIC0xMDA3LDcgKzI3NzMsNyBAQAogCiAJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNTE0LgogCi0JKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBFeGxpY2l0bHkgc2lnbmVkIGhlaWdodC4KKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IEV4cGxpY2l0bHkgc2lnbmVkIGhlaWdodC4KIAkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogRGl0dG8uCiAJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X3ByZXNldF9iaXRtYXApOiBFeHBsaWNpdGx5IHVuc2lnbmVkCiAJc3VidHJhY3Rpb24uCkBAIC0xOTI2LDMxMjkgKzM2OTIsMTAgQEAKIAkqIGJ1aWxkL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2o6IFVzZSBNYXhTcGVlZCAoLzAyKQogCW9wdGltaXphdGlvbiBmb3IgUmVsZWFzZSBjb25maWd1cmF0aW9uIHRocm91Z2hvdXQgdGhlIHByb2plY3QuCiAKLTIwMTctMDktMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogVmVyc2lvbiAyLjguMSByZWxlYXNlZC4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTgtMScuCi0KLQkqIGRvY3MvVkVSU0lPTi5UWFQ6IEFkZCBlbnRyeSBmb3IgdmVyc2lvbiAyLjguMS4KLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KLQotCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAotCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuOC8yLjguMS8sIHMvMjgvMjgxLy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxLgotCi0JKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMjE6MDoxNS4KLQkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDEuCi0KLTIwMTctMDktMTMgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+Ci0KLQlbc2ZudF0gbG93ZXN0IGdjYyBmb3IgdmVjdG9ycyAoZTFkMDI0OWUpIGlzIGNoYW5nZWQgdG8gNC43LgotCi0JX19idWlsdGluX3NodWZmbGUoKSB3YXMgaW50cm9kdWNlZCBpbiBnY2MtNC43LiAgVGhlIGxvd2VzdAotCWdjYyB0byBlbmFibGUgdmVjdG9yIG9wZXJhdGlvbiBpcyBkZWxheWVkIGZyb20gNC42IHRvIDQuNy4KLQotCSogc3JjL3NmbnQvcG5nc2hpbS5jIChwcmVtdWx0aXBseV9kYXRhKTogRml4IGNwcC1tYWNybyB0bwotCWVuYWJsZSB0aGUgdmVjdG9yIG9wZXJhdGlvbiwgdG8gY2hhbmdlIHRoZSBsb3dlc3QgZ2NjIHZlcnNpb24KLQlmcm9tIDQuNiB0byA0LjcuCi0KLTIwMTctMDktMTMgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+Ci0KLQlbY2FjaGVdIEZpeCBhIHBvc3NpYmxlIG92ZXJmbG93IGJ5IHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24uCi0KLQlJbXByb3ZlIHRoZSBjb2RlIGJ5IDVkM2ZmMDU2MTVkZGE2ZDEzMjVlZDYxMjM4MWExN2EwZGYwNGM5NzUgLAotCWlzc3VlcyBhcmUgZm91bmQgYnkgQmVoZGFkIEVzZmFoYm9kIGFuZCBXZXJuZXIgTGVtYmVyZy4KLQotCSogc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgKEZUQ19JbWFnZUNhY2hlX0xvb2t1cCk6IFJlcGxhY2UKLQlhIHN1YnRyYWN0aW9uIHRvIGNoZWNrIGhpZ2hlciBiaXQgYnkgYSBiaXQgb3BlcmF0aW9uLAotCWFuZCBjcHAtY29uZGl0aW9uYWxpemUgZm9yIGFwcHJvcHJpYXRlIHN5c3RlbXMuICBBZGQgYmV0dGVyCi0JZG9jdW1lbnRhdGlvbiB0byB0aGUgY29tbWVudC4KLQkoRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyKTogRGl0dG8uCi0JKEZUQ19TQml0Q2FjaGVfTG9va3VwKTogRGl0dG8uCi0JKEZUQ19TQml0Q2FjaGVfTG9va3VwU2NhbGVyKTogRGl0dG8uCi0KLTIwMTctMDktMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVthdXRvZml0XSBSZWFsbHkgZml4ICM0MTMzNCAoIzUyMDAwKS4KLQotCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKTogU2V0Ci0JYHNlZ21lbnQtPmRlbHRhJyBldmVyeXdoZXJlLgotCi0yMDE3LTA5LTEyICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgotCi0JW2F1dG9maXQsIHNmbnRdIEZpeCBmb3IgYG1ha2UgbXVsdGknLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNoYXBlci5jOiBJbmNsdWRlIEZUX0FEVkFOQ0VfSCwgdG8gdXNlCi0JRlRfR2V0X0FkdmFuY2UoKSBpbiBpdC4KLQkqIHNyYy9zZm50L3R0Y21hcC5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICi0JdG8gdXNlIFBTX1VuaWNvZGVzIGluIGl0LCBhbHNvIGluY2x1ZGUgYHR0cG9zdC5oJyB0byB1c2UKLQl0dF9mYWNlX2dldF9wc19uYW1lKCkgaW4gaXQuCi0KLTIwMTctMDktMTEgIEF6enVybyAgPGF6enVyb0B0ZWFtLW1lZGlhcG9ydGFsLmNvbT4KLQotCVtidWlsZF0gSW1wcm92ZSBidWlsZHMgd2l0aCBkaWZmZXJlbnQgTVMgVmlzdWFsIFN0dWRpbyB2ZXJzaW9ucy4KLQotCSogYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2o6IFN3aXRjaCBwbGF0Zm9ybSB0b29sc2V0Ci0JYWNjb3JkaW5nIHRvIHRoZSBWaXN1YWwgU3R1ZGlvIHZlcnNpb24uCi0KLTIwMTctMDktMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3NmbnQvdHRrZXJuLmMgKHR0X2ZhY2VfbG9hZF9rZXJuKTogUmVqZWN0IGZvcm1hdCAyIHRhYmxlcy4KLQotCVJlcG9ydGVkIGJ5IEJlaGRhZC4KLQotMjAxNy0wOS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2F1dG9maXRdIEltcHJvdmUgY29tbXVuaWNhdGlvbiB3aXRoIGZ0Z3JpZC4KLQotCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQpOgotCVByb3ZpZGUgdmFsdWVzIGluIGZvbnQgdW5pdHMuCi0KLTIwMTctMDktMDggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+Ci0KLQlbYmFzZV0gUmVtb3ZlIGEgY2hlY2sgZm9yIHJlc291cmNlIElEIGluIHRoZSByZXNvdXJjZSBmb3JrIGRyaXZlci4KLQotCUxhc3RSZXNvcnQuZGZvbnQgaGFzIGEgbWFyZ2luYWwgcmVzb3VyY2UgSUQgMHhGRkZGIGZvciBzZm50Ci0JcmVzb3VyY2UuICBJbnNpZGUgTWFjaW50b3NoOiBNb3JlIE1hY2ludG9zaCBUb29sYm94LCBgUmVzb3VyY2UgSURzJwotCSgxLTQ2KSwgdGVsbHMgdGhhdCBzb21lIElEcyBhcmUgcmVzZXJ2ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4KLQlGcmVlVHlwZTIganVzdCB1c2VzIHJlc291cmNlIElEIHRvIHNvcnQgdGhlIGZyYWdtZW50ZWQgcmVzb3VyY2UuCi0JVG8gYWNjZXB0IHRoZSBtYXJnaW5hbCBmb250cywgdGhlIGNoZWNraW5nIGlzIHJlbW92ZWQuCi0KLQkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAoRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMpOiBSZW1vdmUgcmVzX2lkCi0JdmFsaWRpdHkgY2hlY2ssIGZpeCBhIHRyYWNlIG1lc3NhZ2UgZm9ybWF0LgotCi0yMDE3LTA5LTA4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgotCi0JW3NmbnQsIHRydWV0eXBlXSBSZWdpc3RlciB0aGUgdGFncyBmb3IgbWFyZ2luYWwgZm9udHMuCi0KLQlUaGUgZmlyc3QgMzJiaXQgb2Ygc3RhbmRhcmQgVHJ1ZVR5cGUgdmFyaWFudHMgaXMgMHgwMDAxMDAwMCwKLQlgT1RUTycsIGB0dGNmJywgYHRydWUnIG9yIGB0eXAxJy4gIDIgbWFyZ2luYWwgZGZvbnRzIG9uIGxlZ2FjeSBNYWMKLQlPUyBYLCBLZXlib2FyZC5kZm9udCBhbmQgTGFzdFJlc29ydC5kZm9udCwgaGF2ZSB0aGUgc2ZudCByZXNvdXJjZXMKLQlzdGFydGluZyAweEE1IGZvbGxvd2VkIGJ5IGBrYmQnIG9yIGBsc3QnLiAgQ29uc2lkZXJpbmcgdGhlIGZvbGxvd2luZwotCWRhdGEgY291bGQgYmUgcGFyc2VkIGFzIGNvbnZlbnRpb25hbCBUcnVlVHlwZSBmb250cywgdGhlIGhlYWRlcgotCWNoZWNraW5nIGlzIHVwZGF0ZWQgdG8gYWxsb3cgdGhlc2UgdGFncy4gIEl0IHNlZW1zIHRoYXQgcmVjZW50IE1hYwotCU9TIFggaGFzIGFscmVhZHkgc3dpdGNoZWQgdG8gbm9ybWFsIFRURiBmb3IgdGhlc2UgZm9udHMuCi0KLQlTZWUgdGhlIGRpc2N1c3Npb24gYXQKLQlodHRwOi8vdTg4Lm4yNC5xdWVlbnN1LmNhL2V4aWZ0b29sL2ZvcnVtL2luZGV4LnBocD90b3BpYz0zOTMxLjAKLQotCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR18weEE1a2JkLCBUVEFHXzB4QTVsc3QpOiBOZXcgaGVhZGVyCi0JdGFncyBmb3IgS2V5Ym9hcmQuZGZvbnQgYW5kIExhc3RSZXNvcnQuZGZvbnQuCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9vcGVuX2ZvbnQpOiBBY2NlcHQgdGhlIHNmbnQgcmVzb3VyY2UKLQlzdGFydHMgd2l0aCBUVEFHXzB4QTVrYmQgb3IgVFRBR18weEE1bHN0LgotCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBBY2NlcHQgdGhlIGZhY2Ugd2l0aCB0aGUKLQlmb3JtYXQgdGFnIGlzIFRUQUdfMHhBNWtiZCBvciBUVEFHXzB4QTVsc3QuCi0KLTIwMTctMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUZpeCBtdWx0aXBsZSBjYWxscyBvZiBgRlRfQml0bWFwX0NvbnZlcnQnLgotCi0JVGhlIGRvY3VtZW50YXRpb24gb2YgYEZUX0JpdG1hcF9Db252ZXJ0JyBzYXlzIHRoYXQgbXVsdGlwbGUgY2FsbHMgZG8KLQlwcm9wZXIgcmVhbGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgRlRfQml0bWFwIG9iamVjdC4gIEhvd2V2ZXIsIHRoaXMKLQlmYWlsZWQgZm9yIHRoZSBzZXF1ZW5jZQotCi0JICBub24tZW1wdHkgYml0bWFwCi0JICBlbXB0eSBiaXRtYXAKLQkgIG5vbi1lbXB0eSBiaXRtYXAKLQotCVJlYXNvbiB3YXMgdGhhdCBgRlRfQml0bWFwX0NvbnZlcnQnIG9ubHkgcmVhbGxvY2F0ZWQgdGhlIGJpdG1hcAotCWJ1ZmZlciBpZiBpdCBiZWNhbWUgdG9vIHNtYWxsOyBpdCBkaWRuJ3QgbWFrZSB0aGUgYnVmZmVyIHNtYWxsZXIuCi0JRm9yIGFuIGVtcHR5IGJpdG1hcCBmb2xsb3dpbmcgYSBub24tZW1wdHkgb25lLCBvbmx5IHRoZSBidWZmZXIKLQlkaW1lbnNpb24gZ290IHNldCB0byB6ZXJvLCB3aXRob3V0IGRlYWxsb2NhdGlvbi4gIElmIHRoZSBuZXh0IGNhbGwKLQl3YXMgYSBub24tZW1wdHkgYnVmZmVyIGFnYWluLCBhbiBhc3NlcnRpb24gaW4gYGZ0X21lbV9xcmVhbGxvYycgd2FzCi0JdHJpZ2dlcmVkLgotCi0JKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChGVF9CaXRtYXBfQ29udmVydCk6IEFsd2F5cyByZWFsbG9jYXRlIHRhcmdldAotCWJ1ZmZlciB0byB0aGUgY29ycmVjdCBzaXplLgotCi0JKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgotCi0yMDE3LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmRmXSBGaXggc2l6ZSBhbmQgcmVzb2x1dGlvbiBoYW5kbGluZy4KLQotCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogVXNlIGBTSVpFJyB2YWx1ZXMgaWYKLQlgUE9JTlRfU0laRScsIGBSRVNPTFVUSU9OX1gnLCBvciBgUkVTT0xVVElPTl9ZJyBwcm9wZXJ0aWVzIGFyZQotCW1pc3NpbmcuCi0KLQkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCi0KLTIwMTctMDgtMjUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVN3YXAgYEFMTE9DX01VTFQnIGFyZ3VtZW50cyAoIzUxODMzKS4KLQotCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOiBVcGRhdGVkLgotCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCi0JKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBVcGRhdGVkLgotCi0yMDE3LTA4LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gRml4IGNsYW5nIGNvbXBpbGF0aW9uICgjNTE3ODgpLgotCi0JKiBzcmMvc2ZudC9wbmdzaGltLmMgKHByZW11bHRpcGx5X2RhdGEpOiBVc2UgdmVjdG9ycyBpbnN0ZWFkIG9mCi0Jc2NhbGFycy4KLQkodmVjdG9yX3NodWZmbGUpOiBOZXcgbWFjcm8gdG8gdGFrZSBjYXJlIG9mIGEgZGlmZmVyZW50IGJ1aWx0LWluCi0JZnVuY3Rpb24gbmFtZSBvbiBjbGFuZy4KLQotMjAxNy0wOC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIERvbid0IHplcm8gb3V0IGFsbG9jYXRlZCBtZW1vcnkgdHdpY2UgKCM1MTgxNikuCi0KLQlQYXRjaCBhcHBsaWVkIGZyb20gYnVnIHJlcG9ydC4KLQotCSogc3JjL2Jhc2UvZnR1dGlsLmMgKGZ0X21lbV9xcmVhbGxvYyk6IFVzZSBsb3ctbGV2ZWwgYWxsb2NhdGlvbiB0bwotCWF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgotCi0yMDE3LTA4LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3cuCi0KLQlDaGFuZ2VzIHRyaWdnZXJlZCBieQotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zMTA3Ci0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTURSUCwgSW5zX01JUlAsIEluc19BTElHTlBUUyk6IFVzZQotCU5FR19MT05HLgotCi0yMDE3LTA4LTE3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc2ZudF0gQXZvaWQgc3ludGhldGljIHVuaWNvZGUgZm9yIHN5bWJvbCBmb250cyB3aXRoIFBVQS4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTc1NDU3NAotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBDaGVjayBmb3IgRlRfRU5DT0RJTkdfTVNfU1lNQk9MLgotCi0yMDE3LTA4LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IEZpeCBjb21waWxlciB3YXJuaW5ncy4KLQotMjAxNy0wOC0xNSAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+Ci0KLQlbc2ZudF0gU3BlZWQgdXAgUE5HIGltYWdlIGxvYWRpbmcuCi0KLQlUaGlzIHJlZHVjZXMgdGhlIG92ZXJoZWFkIG9mIGBwcmVtdWx0aXBseV9kYXRhJyBieSA2MCUuCi0KLQkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IFByb3ZpZGUgY29kZSB3aGljaCB1c2VzCi0JZ2NjJ3MgKGFuZCBjbGFuZydzKSBgdmVjdG9yX2J5dGUnIGF0dHJpYnV0ZSB0byBwcm9jZXNzIDQgcGl4ZWxzIGF0IGEKLQl0aW1lLgotCi0yMDE3LTA4LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudCwgdHJ1ZXR5cGVdIEltcHJvdmUgaGFuZGxpbmcgb2YgbWlzc2luZyBzYml0cy4KLQotCVJlcXVlc3RlZCBieSBCZWhkYWQuCi0KLQlNb2Rlcm4gYml0bWFwLW9ubHkgU0ZOVHMgbGlrZSBgTm90b0NvbG9yRW1vamkudHRmJyBkb24ndCBjb250YWluCi0JZW50cmllcyBpbiB0aGUgYml0bWFwIHN0cmlrZShzKSBmb3IgZW1wdHkgZ2x5cGhzLiAgSW5zdGVhZCwgdGhleQotCXJlbHkgdGhhdCBhIHNwYWNlIGdseXBoIGdldHMgY3JlYXRlZCBmcm9tIHRoZSBmb250J3MgbWV0cmljcyBkYXRhLgotCVRoaXMgY29tbWl0IG1ha2VzIEZyZWVUeXBlIGJlaGF2ZSBhY2NvcmRpbmdseS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oIChGVF9FcnJfTWlzc2luZ19CaXRtYXApOiBOZXcgZXJyb3IKLQljb2RlLgotCi0JKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UpOiBDaGFuZ2UgZXJyb3IgY29kZXMKLQl0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBhIG1pc3NpbmcgYml0bWFwIGluIGEgY29tcG9zaXRlIGFuZCBhCi0Jc2ltcGxlIG1pc3NpbmcgYml0bWFwLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKTogRm9yIGEgbWlzc2luZyBiaXRtYXAgKGluIGEKLQliaXRtYXAtb25seSBmb250KSwgc3ludGhlc2l6ZSBhbiBlbXB0eSBiaXRtYXAgZ2x5cGggaWYgbWV0cmljcyBhcmUKLQlhdmFpbGFibGUuCi0KLTIwMTctMDgtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiYXNlXSBNaW5vciBBUEkgaW1wcm92ZW1lbnQgZm9yIGRlZmF1bHQgdmFyaWF0aW9uIGF4aXMgc2V0dGluZy4KLQotCSogc3JjL2Jhc2UvZnRtbS5jIChGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzLAotCUZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLCBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsCi0JRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyk6IEFsbG93IGNvb3Jkcz09TlVMTCBpZiBudW1fY29vcmRzPT0wLgotCi0JKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCi0KLTIwMTctMDgtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwc25hbWVzXSBSZWFsbHkgZml4IGlzc3VlICM0OTk0OS4KLQotCVdlIG5vdyB1c2UgYSBzZXBhcmF0ZSBwcmVwcm9jZXNzb3IgbWFjcm8gdG8gaGFuZGxlIGJvdGggZGVmaW5pdGlvbgotCWFuZCBkZWNsYXJhdGlvbiBvZiB0aGUgZ2x5cGggbmFtZSBhcnJheXMuCi0KLQkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKERFRklORV9QU19UQUJMRV9EQVRBKTogTmV3IG1hY3JvLgotCi0JKiBzcmMvdG9vbHMvZ2xuYW1lcy5weSAoU3RyaW5nVGFibGU6OmR1bXAsCi0JU3RyaW5nVGFibGU6OmR1bXBfc3VibGlzdCk6IFVzZSBgREVGSU5FX1BTX1RBQkxFX0RBVEEnLgotCShkdW1wX2VuY29kaW5nKTogRGl0dG8uCi0JKG1haW4pOiBVc2UgYHdiJyBtb2RlIGZvciB3cml0aW5nIHRoZSBvdXRwdXQgZmlsZSwgd2hpY2ggd29ya3Mgb24KLQlXaW5kb3dzIGFsc28uCi0KLQkqIHNyYy9wc25hbWVzL3BzdGFibGVzLmg6IFJlZ2VuZXJhdGVkLgotCi0yMDE3LTA4LTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc21vb3RoXSBIYXJtb255IExDRCByZW5kZXJpbmcuCi0KLQlUaGlzIGlzIGEgbmV3IHRlY2hub2xvZ3kgZm9yIExDRC1vcHRpbWl6ZWQgcmVuZGVyaW5nLiBJdCBjYXBpdGFsaXplcwotCW9uIHRoZSBmYWN0IHRoYXQgZWFjaCBjb2xvciBjaGFubmVsIGdyaWQgaXMgc2hpZnRlZCBieSBhIHRoaXJkIG9mIGEKLQlwaXhlbC4gIFRoZXJlZm9yZSBpdCBpcyBsb2dpY2FsIHRvIHJlbmRlciAzIHNlcGFyYXRlIG1vbm9jaHJvbWUKLQliaXRtYXBzIHNoaWZ0aW5nIHRoZSBvdXRsaW5lIGJ5IDEvMyBwaXhlbCwgYW5kIHRoZW4gY29tYmluZSB0aGVtLgotCUltcG9ydGFudGx5LCB0aGUgcmVzdWx0aW5nIG91dHB1dCBkb2VzIG5vdCByZXF1aXJlIGFkZGl0aW9uYWwgTENECi0JZmlsdGVyaW5nLgotCi0JKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYykKLQlbIUZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HXTogSW1wbGVtZW50IG5ldyBMQ0Qtb3B0aW1pemVkCi0JcmVuZGVyaW5nLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgsIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCwKLQlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCBkZXZlbC9mdG9wdGlvbi5oOiBVcGRhdGVkCi0JZG9jdW1lbnRhdGlvbi4KLQotMjAxNy0wOC0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IENsZWFuIHVwLgotCi0yMDE3LTA4LTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zZm50L3R0cG9zdC5jIChmb3JtYXQpOiBVc2Ugb3RzcGVjLWNvbXBsaWFudCB2ZXJzaW9ucy4KLQotMjAxNy0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93LgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OAotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0FMSUdOUlApOiBVc2UgTkVHX0xPTkcuCi0KLTIwMTctMDgtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiYXNlLCB0cnVldHlwZV0gTmV3IGZ1bmN0aW9uIGBGVF9HZXRfVmFyX0F4aXNfRmxhZ3MnLgotCi0JVGhlIHJlc2VydmVkIGBmbGFncycgZmllbGQgZ290IGEgdmFsdWUgaW4gT3BlblR5cGUgdmVyc2lvbiAxLjguMjsKLQl1bmZvcnR1bmF0ZWx5LCB0aGUgcHVibGljIGBGVF9WYXJfQXhpcycgc3RydWN0dXJlIG1pc3NlcyB0aGUKLQljb3JyZXNwb25kaW5nIGVsZW1lbnQuICBTaW5jZSB3ZSBjYW4ndCBhZGQgYSBuZXcgZmllbGQsIHdlIGFkZCBhbgotCWFjY2VzcyBmdW5jdGlvbi4KLQotCSogc3JjL2Jhc2UvZnRtbS5jIChGVF9HZXRfVmFyX0F4aXNfRmxhZ3MpOiBOZXcgZnVuY3Rpb24uCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIChGVF9WQVJfQVhJU19GTEFHX0hJRERFTik6IE5ldyBtYWNyby4KLQlVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogSW5jcmVhc2UgYWxsb2NhdGVkIG1lbW9yeQotCW9mIGBtbXZhcicgdG8gaG9sZCBheGlzIGZsYWdzLgotCUZpbGwgdGhlIGF4aXMgZmxhZ3MgYXJyYXkuCi0KLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KLQotMjAxNy0wOC0wMyAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgotCi0JW3RydWV0eXBlXSBGaXggbWV0cmljcyBvZiBCL1cgaGludGluZyBpbiB2NDAgbW9kZS4KLQotCVBoYW50b20gcG9pbnRzIGFyZSBub3cgc2F2ZWQgb3V0c2lkZSB2NDAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQltb2RlLiAgVGhpcyBmaXhlcyB0aGUganVtcGluZyBnbHlwaHMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiB2MzUgYW5kCi0JdjQwIG1vbm9jaHJvbWUgbW9kZS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfSGludF9HbHlwaCk6IEZpeCBpbnZlcnNlZCBib29sIGxvZ2ljLgotCi0yMDE3LTA4LTAzICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+Ci0KLQlbdHJ1ZXR5cGVdIERvIG5vdCBzZXQgYW55IENsZWFyVHlwZSBmbGFncyBpbiB2NDAgbW9ub2Nocm9tZSBtb2RlLgotCi0JVGhpcyBmaXhlcyB3ZWlyZCBiZWhhdmlvciBvZiBpbnN0cnVjdGlvbnMgdGhhdCByZXN1bHRlZCBpbiByZW5kZXJpbmcKLQlkaWZmZXJlbmNlcyBiZXR3ZWVuIHYzNSBhbmQgdjQwIGluIG1vbm9jaHJvbWUgbW9kZSwgZS5nLiwgaW4KLQlgdGltZXNiaS50dGYnLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0dFVElORk8pCi0JW1RUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMXTogQ2hlY2sKLQlgc3VicGl4ZWxfaGludGluZ19sZWFuJy4KLQotMjAxNy0wOC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogRml4IHRoaW5rby4KLQotMjAxNy0wOC0wMSAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZpeCBsb2FkaW5nIG9mIG5hbWVkIGluc3RhbmNlcy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IFByZXNlcnZlIGZpbGUgcG9zaXRpb24KLQl3aGlsZSBsb2FkaW5nIHRoZSBgYXZhcicgdGFibGUuCi0KLTIwMTctMDgtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50LCB0cnVldHlwZV0gTWlub3IgYWRqdXN0bWVudHMgZm9yIE9wZW5UeXBlIDEuOC4yLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBUaGUgdW5pdHMgcGVyIEVNIHZhbHVlIGhhcyBub3cKLQkodGlnaHRlcikgbGltaXRzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogVGhlIG5ldyBPcGVuVHlwZQotCXZlcnNpb24gZXhwbGljaXRseSBhbGxvd3MgYWxsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhlIG51bWJlciBvZgotCWNvbnRvdXJzIGlmIHdlIGhhdmUgYSBjb21wb3NpdGUgZ2x5cGggKHRoaXMgaXMgZm9yIGJldHRlciBiYWNrd2FyZHMKLQljb21wYXRpYmlsaXR5IEkgZ3Vlc3MpLCBidXQgaXQgc3RpbGwgcmVjb21tZW5kcyB2YWx1ZSAtMS4KLQotMjAxNy0wNy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gSW50ZWdlciBvdmVyZmxvdy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI3MzgKLQotCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQsCi0JY2YyX2dseXBocGF0aF9jdXJ2ZVRvKTogVXNlIEFERF9JTlQzMi4KLQotMjAxNy0wNy0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIEZpeCBtZW1vcnkgbGVhay4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTczODM2MgotCi0JKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dldF9HbHlwaCk6IERvIHByb3BlciBkZWFsbG9jYXRpb24gaW4gY2FzZQotCW9mIGVycm9yLgotCi0yMDE3LTA3LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmFzZV0gSW50ZWdlciBvdmVyZmxvdy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI1NzMKLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzKTogVXNlCi0JRlRfUElYX0NFSUxfTE9ORyBhbmQgRlRfUElYX1JPVU5EX0xPTkcuCi0KLTIwMTctMDctMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9nZXRfbG9jYXRpb24pOiBPZmYtYnktb25lIHR5cG8uCi0KLQlBbHNvIGltcHJvdmUgdHJhY2luZyBtZXNzYWdlLgotCi0JUHJvYmxlbSByZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03Mzg5MTkKLQotMjAxNy0wNy0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gSW50ZWdlciBvdmVyZmxvdy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI1MTcKLQotCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfY2FwdHVyZSk6IFVzZSBTVUJfSU5UMzIuCi0KLTIwMTctMDctMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXBfdW5pY29kZV9jbGFzc19yZWMpOiBGaXggd2FybmluZy4KLQotMjAxNy0wNy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChGVF9TdHJlYW1fU2Vla1NldCk6IEZpeCB3YXJuaW5nICgjNTEzOTUpLgotCi0yMDE3LTA3LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFByZXZlbnQgYWRkcmVzcyBvdmVyZmxvdyAoIzUxMzY1KS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoRlRfU3RyZWFtX1NlZWtTZXQpOiBBZGQgZ3VhcmQuCi0KLTIwMTctMDctMDMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoZnRfbGNkX2ZpbHRlcl9maXIpOiBJbXByb3ZlIGNvZGUuCi0KLTIwMTctMDctMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI0NTUKLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19TQ0ZTKTogVXNlIFNVQl9MT05HLgotCi0yMDE3LTA3LTAxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IElnbm9yZSBOb19Vbmljb2RlX0dseXBoX05hbWUuCi0KLTIwMTctMDYtMjggIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgotCi0JQXZvaWQgTWljcm9zb2Z0IGNvbXBpbGVyIHdhcm5pbmdzICgjNTEzMzEpLgotCi0JV2hpbGUgY2xhbmcncyBzYW5pdGl6ZXIgcmVjb21tZW5kcyBhIGNhc3QgdG8gdW5zaWduZWQgZm9yIHNhZmUKLQluZWdhdGlvbiAodG8gaGFuZGxlIC1JTlRfTUlOKSwgYm90aCBNU1ZDIGFuZCBWaXN1YWxjIGVtaXQgd2FybmluZwotCUM0MTQ2IGlmIGFuIHVuc2lnbmVkIHZhbHVlIGdldHMgbmVnYXRlZC4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoTkVHX0xPTkcsIE5FR19JTlQzMiksCi0Jc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX01PVkVfU0lHTik6IFJlcGxhY2UgbmVnYXRpb24gd2l0aCBhCi0Jc3VidHJhY3Rpb24uCi0KLTIwMTctMDYtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2NmZi9jZmZwYXJzZS5jIChkb19maXhlZCk6IEZpeCB0eXBvLgotCi0JU3BvdHRlZCBieSBjaHJpcyA8Y2hyaXNAZ2NqZC5vcmc+LgotCi0yMDE3LTA2LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjM4NAotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjM5MQotCi0JKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTXVsRGl2LCBGVF9NdWxEaXZfTm9fUm91bmQsIEZUX0RpdkZpeCk6IFVzZQotCU5FR19MT05HLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1N4VlRMKTogVXNlIE5FR19MT05HLgotCi0yMDE3LTA2LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjM2NAotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lTRUNUKTogVXNlIE5FR19MT05HLgotCi0yMDE3LTA2LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzIzCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzI4Ci0KLQkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2NhcHR1cmUpOiBVc2UgQUREX0lOVDMyIGFuZAotCVNVQl9JTlQzMi4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19TRFBWVEwpOiBVc2UgU1VCX0xPTkcgYW5kIE5FR19MT05HLgotCi0yMDE3LTA2LTIxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc2ZudF0gU3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCBpZiBvbmUgaXMgbWlzc2luZy4KLQotCSogc3JjL3NmbnQvdHRjbWFwLmggKHR0X2NtYXBfdW5pY29kZV9jbGFzc19yZWMpOiBEZWNsYXJlIGl0LgotCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2dldF9nbHlwaF9uYW1lLCB0dF9jbWFwX3VuaWNvZGVfaW5pdCwKLQl0dF9jbWFwX3VuaWNvZGVfZG9uZSwgdHRfY21hcF91bmljb2RlX2NoYXJfaW5kZXgsCi0JdHRfY21hcF91bmljb2RlX2NoYXJfbmV4dCwgdHRfY21hcF91bmljb2RlX2NsYXNzX3JlYyk6IEltcGxlbWVudAotCXN5bnRoZXRpYyBVbmljb2RlIGNoYXJtYXAgY2xhc3MuCi0JKHR0X2dldF9jbWFwX2luZm8pOiBNYWtlIHN1cmUgdGhlIGNhbGxiYWNrIGlzIGF2YWlsYWJsZS4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKQotCVtGVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVNdOiBJZiBVbmljb2RlIGNoYXJtYXAgaXMgbWlzc2luZywKLQlzeW50aGVzaXplIG9uZS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDogRG9jdW1lbnQgaXQuCi0JKiBkZXZlbC9mdG9wdGlvbi5oOiBEaXR0by4KLQotMjAxNy0wNi0yMCAgVG9ueSBUaGVvZG9yZSAgPHRvbnl0QGxvZ3lzdC5jb20+Ci0KLQlGaXggcGtnLWNvbmZpZyBpbiBmcmVldHlwZS1jb25maWcgZm9yIGNyb3NzLWNvbXBpbGluZyAoIzUxMjc0KS4KLQotCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKFBLR19DT05GSUcpOiBOZXcgdmFyaWFibGUuCi0JKGZyZWV0eXBlLWNvbmZpZyk6IFVzZSBpdCBpbiBzZWQgZXhwcmVzc2lvbi4KLQotCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluOiBzL3BrZy1jb25maWcvJVBLR19DT05GSUclLy4KLQotMjAxNy0wNi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjMwMAotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjMxMwotCi0JKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2FkanVzdEhpbnRzKTogVXNlIEFERF9JTlQzMi4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19BQlMpOiBBdm9pZCBGVF9BQlMuCi0KLTIwMTctMDYtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtiYXNlLCBzbW9vdGhdIExDRCBmaWx0ZXJpbmcgY2xlYW51cHMuCi0KLQkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKGZ0X2xjZF9maWx0ZXJfZmlyLCBfZnRfbGNkX2ZpbHRlcl9sZWdhY3kpOgotCUNsZWFuIHVwLCBzdGFydCBmaWx0ZXJpbmcgZnJvbSB0aGUgYm90dG9tLWxlZnQgb3JpZ2luLgotCi0JKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IFVwZGF0ZWQuCi0KLTIwMTctMDYtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjcwCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjc2Ci0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfTURSUCwgX2l1cF93b3JrZXJfaW50ZXJwb2xhdGUpOiBVc2UKLQlBRERfTE9ORyBhbmQgU1VCX0xPTkcuCi0KLTIwMTctMDYtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiZGYsIGNmZl0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjQ0Ci0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjYxCi0KLQkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IFJlcGxhY2UgY2FsbHMgdG8gRlRfQUJTIHdpdGgKLQlkaXJlY3QgY29kZSB0byBhdm9pZCB2YWx1ZSBuZWdhdGlvbi4KLQotCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfY2FwdHVyZSk6IFVzZSBTVUJfSU5UMzIgYW5kCi0JQUREX0lOVDMyLgotCi0yMDE3LTA2LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCk6IERvbid0IHNldCBhY3RpdmUgZW5jb2RpbmcuCi0KLQlGcmVlVHlwZSBvbmx5IHNldHMgYSBkZWZhdWx0IGFjdGl2ZSBlbmNvZGluZyBmb3IgVW5pY29kZS4KLQotMjAxNy0wNi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjIxNgotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjIxOAotCi0JKiBzcmMvY2ZmL2NmMmZpeGVkLmggKGNmMl9maXhlZEFicyk6IFVzZSBORUdfSU5UMzIuCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVApOiBVc2UgU1VCX0xPTkcuCi0KLTIwMTctMDYtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjIwMAotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjIxMAotCi0JKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2luc2VydEhpbnQpOiBVc2UgU1VCX0lOVDMyIGFuZAotCUFERF9JTlQzMi4KLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZFZNT1ZFVE8+OiBVc2UKLQlBRERfSU5UMzIuCi0KLTIwMTctMDYtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IFRUX1NldF9WYXJfRGVzaWduLgotCi0JUmVwb3J0ZWQgYnkgTmlrb2xhdXMgV2F4d2VpbGVyIDxtYWRpZ2Vuc0BnbWFpbC5jb20+LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfVmFyX0Rlc2lnbik6IENvcnJlY3RseSBoYW5kbGUgdGhlCi0JY2FzZSB3aGVyZSB3ZSBoYXZlIGxlc3MgaW5wdXQgY29vcmRpbmF0ZXMgdGhhbiBheGVzLgotCi0yMDE3LTA2LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXZGaXgpOiBGaXggZW1iYXJyYXNzaW5nIHR5cG8uCi0KLQlCdWcgaW50cm9kdWNlZCAyMDE3LTA1LTI4LgotCi0yMDE3LTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTQ0Ci0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTUxCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTUzCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTczCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTg2Ci0KLQkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2luaXQpOiBVc2UgU1VCX0lOVDMyLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUm91bmRfTm9uZSwgUm91bmRfVG9fR3JpZCwKLQlSb3VuZF9Ub19IYWxmX0dyaWQsIFJvdW5kX0Rvd25fVG9fR3JpZCwgUm91bmRfVXBfVG9fR3JpZCwKLQlSb3VuZF9Ub19Eb3VibGVfR3JpZCwgUm91bmRfU3VwZXIsIFJvdW5kX1N1cGVyXzQ1KTogVXNlIEFERF9MT05HLAotCVNVQl9MT05HLCBORUdfTE9ORywgRlRfUElYX1JPVU5EX0xPTkcsIEZUX1BJWF9DRUlMX0xPTkcsCi0JRlRfUEFEX1JPVU5EX0xPTkcKLQkoSW5zX1N4VlRMLCBJbnNfTUlSUCk6IFVzZSBTVUJfTE9ORy4KLQkoX2l1cF93b3JrZXJfc2hpZnQpOiBVc2UgU1VCX0xPTkcgYW5kIEFERF9MT05HLgotCi0yMDE3LTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlQcm92aWRlIG1vcmUgbWFjcm9zIGZvciBmbG9vcmluZywgY2VpbGluZywgYW5kIHJvdW5kaW5nLgotCi0JVGhlc2UgdmVyc2lvbnMgZG9uJ3QgcHJvZHVjZSBydW4tdGltZSBlcnJvcnMgZHVlIHRvIGludGVnZXIKLQlvdmVyZmxvdy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaDogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0guCi0JKEZUX1BBRF9ST1VORF9MT05HLCBGVF9QQURfQ0VJTF9MT05HLCBGVF9QSVhfUk9VTkRfTE9ORywKLQlGVF9QSVhfQ0VJTF9MT05HKTogTmV3IG1hY3Jvcy4KLQkoRlRfUEFEX1JPVU5EX0lOVDMyLCBGVF9QQURfQ0VJTF9JTlQzMiwgRlRfUElYX1JPVU5EX0lOVDMyLAotCUZUX1BJWF9DRUlMX0lOVDMyKTogTmV3IG1hY3Jvcy4KLQotMjAxNy0wNi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JUmVtb3ZlIHVudXNlZCBtYWNyb3MuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEFERF9JTlQsIFNVQl9JTlQsIE1VTF9JTlQsCi0JTkVHX0lOVCk6IERlbGV0ZWQuCi0KLTIwMTctMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSovKjogUmVtb3ZlIGBPVkVSRkxPV18nIHByZWZpeC4KLQotCVRoaXMgaW5jcmVhc2VzIHJlYWRhYmlsaXR5LgotCi0yMDE3LTA2LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTMzCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTM3Ci0KLQkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRfaW5pdCk6IFVzZSBPVkVSRkxPV19TVUJfSU5UMzIuCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChQUk9KRUNULCBEVUFMUFJPSik6IFVzZQotCU9WRVJGTE9XX1NVQl9MT05HLgotCi0yMDE3LTA2LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBJbnRlZ2VyIG92ZXJmbG93cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxMDkKLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxMTAKLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxMjIKLQotCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfaW5pdCk6IFVzZSBPVkVSRkxPV19TVUJfSU5UMzIuCi0KLQkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRtYXBfbWFwKTogU3luY2hyb25pemUgaWYtZWxzZQotCWJyYW5jaGVzLgotCi0yMDE3LTA2LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBJbnRlZ2VyIG92ZXJmbG93LgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA4OQotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2JsZW5kX2RvQmxlbmQpOiBVc2VyIE9WRVJGTE9XX0FERF9JTlQzMi4KLQotMjAxNy0wNi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3NQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA4OAotCi0JKiBzcmMvY2ZmL2NmMmZvbnQuYyAoY2YyX2ZvbnRfc2V0dXApOiBVc2UgT1ZFUkZMT1dfTVVMX0lOVDMyLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lTRUNUKTogVXNlIE9WRVJGTE9XX01VTF9MT05HLAotCU9WRVJGTE9XX0FERF9MT05HLCBhbmQgT1ZFUkZMT1dfU1VCX0xPTkcuCi0KLTIwMTctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiYXNlLCBjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNjAKLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNjIKLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNjMKLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNjgKLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9ncmlkX2ZpdF9tZXRyaWNzKTogVXNlCi0JT1ZFUkZMT1dfQUREX0xPTkcgYW5kIE9WRVJGTE9XX1NVQl9MT05HLgotCi0JKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19jYXB0dXJlKSwgc3JjL2NmZi9jZjJoaW50cy5jCi0JKGNmMl9oaW50bWFwX2FkanVzdEhpbnRzKTogVXNlIE9WRVJGTE9XX1NVQl9JTlQzMi4KLQotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoY29tcHV0ZV9nbHlwaF9tZXRyaWNzKTogVXNlcgotCU9WRVJGTE9XX1NVQl9MT05HLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoRGlyZWN0X01vdmUsIERpcmVjdF9Nb3ZlX09yaWcsCi0JRGlyZWN0X01vdmVfWCwgRGlyZWN0X01vdmVfWSwgRGlyZWN0X01vdmVfT3JpZ19YLAotCURpcmVjdF9Nb3ZlX09yaWdfWSwgTW92ZV9acDJfUG9pbnQsIEluc19NU0lSUCk6IFVzZQotCU9WRVJGTE9XX0FERF9MT05HIGFuZCBPVkVSRkxPV19TVUJfTE9ORy4KLQotMjAxNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IEZpeCBwa2ctY29uZmlnIHRlc3QgKCM1MTE2MikuCi0KLQlQYXRjaCBkaXJlY3RseSB0YWtlbiBmcm9tIGJ1ZyByZXBvcnQuCi0KLTIwMTctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiZGZdIFN5bmNocm9uaXplIHNhbml0eSBjaGVja3Mgd2l0aCBwY2YgZHJpdmVyLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA1NAotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA1OAotCi0JKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBDaGVjayBmb250IGFzY2VudCBhbmQgZGVzY2VudC4KLQlDaGVjayBBVkVSQUdFX1dJRFRILCBQT0lOVF9TSVpFLCBQSVhFTF9TSVpFLCBSRVNPTFVUSU9OX1gsIGFuZAotCVJFU09MVVRJT05fWSBwcm9wZXJ0aWVzLgotCi0yMDE3LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDQ3Ci0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDU3Ci0KLQkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRtYXBfbWFwKTogVXNlIE9WRVJGTE9XX1NVQl9JTlQzMi4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19BREQpOiBVc2UgT1ZFUkZMT1dfQUREX0xPTkcuCi0JKEluc19TVUIpOiBVc2UgT1ZFUkZMT1dfU1VCX0xPTkcuCi0JKEluc19ORUcpOiBVc2UgTkVHX0xPTkcuCi0KLTIwMTctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCWZ0Y2FsYy5oOiBBdm9pZCBsZWZ0LXNoaWZ0IG9mIG5lZ2F0aXZlIG51bWJlcnMuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDU1Ci0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKElOVF9UT19GMjZET1Q2LAotCUlOVF9UT19GMkRPVDE0LCBJTlRfVE9fRklYRUQsIEYyRE9UMTRfVE9fRklYRUQpOiBVc2UgbXVsdGlwbGljYXRpb24uCi0KLTIwMTctMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEV2ZW4gbW9yZSBpbnRlZ2VyIG92ZXJmbG93cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNDYKLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfZG9TdGVtcywgY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IFVzZQotCU9WRVJGTE9XX0FERF9JTlQzMi4KLQotMjAxNy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gTW9yZSBpbnRlZ2VyIG92ZXJmbG93cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwMzIKLQotCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfaW5pdCk6IFVzZSBPVkVSRkxPV19TVUJfSU5UMzIuCi0KLTIwMTctMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiZGZdIERvbid0IGxlZnQtc2hpZnQgbmVnYXRpdmUgbnVtYmVycy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwMzEKLQotCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogVXNlIG11bHRpcGxpY2F0aW9uLgotCi0yMDE3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmRmXSBGaXggaW50ZWdlciBzY2FubmluZyByb3V0aW5lcy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwMjkKLQotCSogc3JjL2JkZi9iZGZsaWIuYyAoX2JkZl9hdG91bCwgX2JkZl9hdG9sLCBfYmRmX2F0b3VzLCBfYmRmX2F0b3MpOgotCVN0b3Agc2Nhbm5pbmcgaWYgcmVzdWx0IHdvdWxkIG92ZXJmbG93LgotCi0yMDE3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBGaXggaW50ZWdlciBvdmVyZmxvd3MuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDI3Ci0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDI4Ci0KLQkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRtYXBfaW5zZXJ0SGludCksIHNyYy9jZmYvY2YyaW50cnAuYwotCShjZjJfZG9GbGV4KTogVXNlIE9WRVJGTE9XX0FERF9JTlQzMiBhbmQgT1ZFUkZMT1dfU1VCX0lOVDMyLgotCi0yMDE3LTA2LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc21vb3RoXSBTb21lIDMyYml0IGludGVnZXIgb3ZlcmZsb3cgcnVuLXRpbWUgZXJyb3JzLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyBbU1RBTkRBTE9ORV0gKE9WRVJGTE9XX0FERF9MT05HLAotCU9WRVJGTE9XX1NVQl9MT05HLCBPVkVSRkxPV19NVUxfTE9ORywgTkVHX0xPTkcpOiBOZXcgbWFjcm9zLgotCVshU1RBTkRBTE9ORV06IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgotCShncmF5X3JlbmRlcl9jdWJpYyk6IFVzZSB0aG9zZSBtYWNyb3Mgd2hlcmUgYXBwcm9wcmlhdGUuCi0KLTIwMTctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HZXRfR2x5cGgpOiBDaGVjayBgc2xvdC0+YWR2YW5jZScuCi0KLTIwMTctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwc2F1eF0gMzJiaXQgaW50ZWdlciBvdmVyZmxvdyB0dW4tdGltZSBlcnJvcnMgKCM0NjE0OSkuCi0KLQkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogVXNlCi0JT1ZFUkZMT1dfQUREX0xPTkcgYW5kIE9WRVJGTE9XX1NVQl9MT05HIHdoZXJlIGFwcHJvcHJpYXRlLgotCi0yMDE3LTA2LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9SdW5JbnMpOiBBZGp1c3QgbG9vcCBjb3VudGVyIGFnYWluLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSBNYXJlayBLYcWhw61rIDxta2FzaWtAcmVkaGF0LmNvbT4uCi0KLQlUaGUgcHJvYmxlbWF0aWMgZm9udCB0aGF0IGV4Y2VlZHMgdGhlIG9sZCBsaW1pdCBpcyBQYWRhdWstQm9sZCwKLQl2ZXJzaW9uIDMuMDAyLCBjb250YWluaW5nIGJ5dGVjb2RlIGdlbmVyYXRlZCBieSBhIGJ1Z2d5IHZlcnNpb24gb2YKLQl0dGZhdXRvaGludC4KLQotMjAxNy0wNS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gMzJiaXQgaW50ZWdlciBvdmVyZmxvdyBydW4tdGltZSBlcnJvcnMgMi8yICgjNDYxNDkpLgotCi0JVGhpcyBjb21taXQgaGFuZGxlcyB0aGUgbmV3IGVuZ2luZS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoT1ZFUkZMT1dfQUREX0lOVDMyLAotCU9WRVJGTE9XX1NVQl9JTlQzMiwgT1ZFUkZMT1dfTVVMX0lOVDMyLCBORUdfSU5ULCBORUdfTE9ORywKLQlORUdfSU5UMzIpOiBOZXcgbWFjcm9zLgotCi0JKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9nZXRTY2FsZUFuZEhpbnRGbGFnKTogVXNlIE9WRVJGTE9XX0FERF9JTlQzMi4KLQotCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfZ2V0V2luZGluZ01vbWVudHVtLCBjZjJfaGludF9pbml0LAotCWNmMl9oaW50bWFwX21hcCwgY2YyX2dseXBocGF0aF9oaW50UG9pbnQsCi0JY2YyX2dseXBocGF0aF9jb21wdXRlSW50ZXJzZWN0aW9uLCBjZjJfZ2x5cGhwYXRoX2NvbXB1dGVPZmZzZXQsCi0JY2YyX2dseXBocGF0aF9saW5lVG8sIGNmMl9nbHlwaHBhdGhfY3VydmVUbyk6IFVzZQotCU9WRVJGTE9XX0FERF9JTlQzMiwgT1ZFUkZMT1dfU1VCX0lOVDMyLCBPVkVSRkxPV19NVUxfSU5UMzIsIGFuZAotCU5FR19JTlQzMiB3aGVyZSBhcHByb3ByaWF0ZS4KLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfZG9GbGV4LCBjZjJfZG9CbGVuZCwKLQljZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogRGl0dG8uCi0JQWxzbyBhZGQgc29tZSBvdGhlciBjb2RlIHdoZXJlIG5lZWRlZCB0byBhdm9pZCBvdmVyZmxvdy4KLQotMjAxNy0wNS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gMzJiaXQgaW50ZWdlciBvdmVyZmxvdyBydW4tdGltZSBlcnJvcnMgMS8yICgjNDYxNDkpLgotCi0JVGhpcyBjb21taXQgaGFuZGxlcyB0aGUgb2xkIGVuZ2luZS4KLQotCSogc3JjL2NmZi9jZmZnbG9hZC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KLQkoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBVc2UgT1ZFUkZMT1dfQUREX0xPTkcgYW5kCi0JT1ZFUkZMT1dfU1VCX0xPTkcgd2hlcmUgbmVlZGVkLgotCi0JKiBzcmMvY2ZmL2NmZnBhcnNlLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgotCShwb3dlcl90ZW5fbGltaXRzKTogTmV3IHN0YXRpYyBhcnJheS4KLQkoZG9fZml4ZWQpOiBVc2UgaXQgdG8gcHJldmVudCBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvdy4KLQkoY2ZmX3BhcnNlcl9ydW4pOiBVc2UgT1ZFUkZMT1dfQUREX0xPTkcuCi0KLTIwMTctMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwc2F1eF0gQ29ycmVjdGx5IGhhbmRsZSBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgbnVtYmVyIHNpZ25zLgotCi0JKiBzcmMvcHNhdXgvcHNjb252LmMgKFBTX0NvbnZfU3RydG9sLCBQU19Db252X1RvRml4ZWQpOiBSZXR1cm4gemVybwotCWlmIHdlIGVuY291bnRlciBtb3JlIHRoYW4gYSBzaW5nbGUgc2lnbi4KLQotMjAxNy0wNS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3BjZl0gMzJiaXQgaW50ZWdlciBvdmVyZmxvdyBydW4tdGltZSBlcnJvcnMgKCM0NjE0OSkuCi0KLQkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfZ2V0X2FjY2VsKTogQWRkIHNhbml0eSBjaGVja3MgZm9yCi0JYGZvbnRBc2NlbnQnIGFuZCBgZm9udERlc2NlbnQnLgotCShwY2ZfbG9hZF9mb250KTogQWRkIHNhbml0eSBjaGVja3MgZm9yIGdsb2JhbCBoZWlnaHQuCi0JQWRkIHNhbml0eSBjaGVja3MgZm9yIEFWRVJBR0VfV0lEVEgsIFBPSU5UX1NJWkUsIFBJWEVMX1NJWkUsCi0JUkVTT0xVVElPTl9YLCBhbmQgUkVTT0xVVElPTl9ZIHByb3BlcnRpZXMuCi0KLTIwMTctMDUtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUhhbmRsZSBzb21lIGludGVnZXIgb3ZlcmZsb3cgcnVuLXRpbWUgZXJyb3JzICgjNDYxNDksICM0ODk3OSkuCi0KLQlUaGlzIGNvbW1pdCAobWFpbmx5IGZvciAzMmJpdCBDUFVzKSBpcyB0aGUgZmlyc3Qgb2YgYSBzZXJpZXMgb2YKLQlzaW1pbGFyIGNvbW1pdHMgdG8gaGFuZGxlIGtub3duIGludGVnZXIgb3ZlcmZsb3dzLiAgQmFzaWNhbGx5LCBhbGwKLQlvZiB0aGVtIGFyZSBoYXJtbGVzcywgc2luY2UgdGhleSBhZmZlY3QgcmVuZGVyaW5nIG9mIGdseXBocyBvbmx5LAotCW5vdCBwb3Npbmcgc2VjdXJpdHkgdGhyZWF0cy4gIEl0IGlzIGV4cGVjdGVkIHRoYXQgZnV6enlpbmcgd2lsbCBzaG93Ci0JdXAgbW9yZSBvdmVyZmxvd3MsIHRvIGJlIGZpeGVkIGluIGR1ZSBjb3Vyc2UuCi0KLQlUaGUgaWRlYSBpcyB0byBtYXJrIHBsYWNlcyB3aGVyZSBvdmVyZmxvd3MgY2FuIG9jY3VyLCB1c2luZyBtYWNyb3MKLQl0aGF0IHNpbXBseSBjYXN0IHRvIHVuc2lnbmVkIGludGVnZXJzLCBiZWNhdXNlIG92ZXJmbG93IGFyaXRobWV0aWMKLQlpcyB3ZWxsIGRlZmluZWQgaW4gdGhpcyBjYXNlLiAgRG9pbmcgc28gc3VwcHJlc3NlcyBydW4tdGltZSBlcnJvcnMKLQlvZiBzYW5pdGl6ZXJzIHdpdGhvdXQgYWRkaW5nIGNvbXB1dGF0aW9uYWwgb3ZlcmhlYWQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKE9WRVJGTE9XX0FERF9JTlQsCi0JT1ZFUkZMT1dfU1VCX0lOVCwgT1ZFUkZMT1dfTVVMX0lOVCwgT1ZFUkZMT1dfQUREX0xPTkcsCi0JT1ZFUkZMT1dfU1VCX0xPTkcsIE9WRVJGTE9XX01VTF9MT05HKTogTmV3IG1hY3Jvcy4KLQotCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX1JvdW5kRml4LCBGVF9DZWlsRml4LCBGVF9NYXRyaXhfTXVsdGlwbHksCi0JRlRfTWF0cml4X011bHRpcGx5X1NjYWxlZCwgRlRfVmVjdG9yX1RyYW5zZm9ybV9TY2FsZWQsCi0JZnRfY29ybmVyX29yaWVudGF0aW9uKTogVXNlIG5ldyBtYWNyb3MuCi0KLQkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24pOiBVc2UgbmV3IG1hY3Jvcy4KLQotMjAxNy0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChGTE9BVF9UT19GSVhFRCk6IFJlbW92ZS4KLQotCVRoaXMgbWFjcm8gaXMgbm90IHVzZWQuCi0KLTIwMTctMDUtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIHMvY2YyX2Zsb2F0VG9GaXhlZC9jZjJfZG91YmxlVG9GaXhlZC8uCi0KLQlUaGUgbmV3IG5hbWUgYmV0dGVyIGRlc2NyaWJlcyB3aGF0IHRoZSBtYWNybyBhY3R1YWxseSBkb2VzOwotCWFkZGl0aW9uYWxseSwgd2UgZG9uJ3QgbmVlZCBhIHRyYWlsaW5nIGBmJyBmb3IgbGl0ZXJhbHMgKHRoZXJlIHdhcwotCW9ubHkgYSBzaW5nbGUgc3VjaCBpbnN0YW5jZSBpbiB0aGUgY29kZSwgYnV0IHRoaXMgY2F1c2VkIGEgY2xhbmcKLQl3YXJuaW5nIGJlY2F1c2UgdGhlIG1hY3JvIGl0c2VsZiB1c2VzIGBkb3VibGUnIGxpdGVyYWxzKS4KLQotCSogc3JjL2NmZi9jZjJibHVlcy5jLCBzcmMvY2ZmL2NmMmJsdWVzLmgsIHNyYy9jZmYvY2YyZml4ZWQuaCwKLQlzcmMvY2ZmL2NmMmZvbnQuYywgc3JjL2NmZi9jZjJoaW50cy5jOiBVcGRhdGVkLgotCi0yMDE3LTA1LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlGaXggbmVnYXRpb24gb2YgSU5UX01JTiBhbmQgTE9OR19NSU4gKCM0NjE0OSkuCi0KLQkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NT1ZFX1NJR04pOiBBZGQgYXJndW1lbnQgdG8gcGFzcyB1bnNpZ25lZAotCXZhbHVlLCB0byBiZSB1c2VkIGFzIHRoZSByZXN1bHQuCi0JKEZUX011bERpdiwgRlRfTXVsRGl2X05vX1JvdW5kLCBGVF9EaXZGaXgsIEZUX011bEZpeCwKLQlGVF9WZWN0b3JfTm9ybUxlbik6IFVwZGF0ZWQuCi0KLTIwMTctMDUtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IGhhbmRsaW5nIG9mIGRlc2lnbiBjb29yZGluYXRlcyAoIzUxMTI3KS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfc2V0X21tX2JsZW5kKTogQ29tcHV0ZSBhbGwgZGVzaWduCi0JY29vcmRpbmF0ZXMgaWYgd2UgaGF2ZSB0byBjcmVhdGUgdGhlIGBibGVuZHMtPmNvb3JkJyBhcnJheS4KLQkoVFRfR2V0X01NX0JsZW5kLCBUVF9HZXRfVmFyX0Rlc2lnbik6IFNlbGVjdCBkZWZhdWx0IGluc3RhbmNlCi0JY29vcmRpbmF0ZXMgaWYgbm8gaW5zdGFuY2UgaXMgc2VsZWN0ZWQgeWV0LgotCi0yMDE3LTA1LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmRmLCBwY2ZdIFN1cHBvcnQgSVNPNjQ2LjE5OTEtSVJWIGNoYXJhY3RlciBlbmNvZGluZyAoYWthIEFTQ0lJKS4KLQotCVByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyZWsgS2HFocOtayA8bWthc2lrQHJlZGhhdC5jb20+LCBjZi4KLQotCSAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xNDUxNzk1Ci0KLQkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCksIHNyYy9wY2YvcGNmZHJpdnIuYwotCShQQ0ZfRmFjZV9Jbml0KTogSW1wbGVtZW50IGl0LgotCi0yMDE3LTA1LTIwICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+Ci0KLQlbdHJ1ZXR5cGVdIEFsd2F5cyB1c2UgaW50ZXJwcmV0ZXIgdjM1IGZvciBCL1cgcmVuZGVyaW5nICgjNTEwNTEpLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9sb2FkZXJfaW5pdCkKLQlbVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUxdOiBBZGp1c3QKLQlgc3VicGl4ZWxfaGludGluZ19sZWFuJywgYGdyYXlzY2FsZV9jbGVhcnR5cGUnLCBhbmQKLQlgdmVydGljYWxfbGNkX2xlYW4nIGFjY29yZGluZ2x5LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0dFVElORk8pOiBVcGRhdGVkLgotCShUVF9SdW5JbnMpOiBVcGRhdGUgYGJhY2t3YXJkX2NvbXBhdGliaWxpdHknIGZsYWcuCi0KLTIwMTctMDUtMjAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIEltcGxlbWVudCBtaW5pbWFsIGR5bmFtaWMgcGFkZGluZyBmb3IgTENEIGZpbHRlcmluZy4KLQotCUV4dHJhIGJpdG1hcCBwYWRkaW5nIGZvciBMQ0QgZmlsdGVyaW5nIGRlcGVuZHMgb24gdGhlIGZpbHRlci4gIFRoZQotCWRlZmF1bHQgNS10YXAgZmlsdGVyIG5lZWRzIDIgZXh0cmEgc3VicGl4ZWxzLiAgVGhlIGxpZ2h0IDMtdGFwIGZpbHRlcgotCW5lZWRzIG9ubHkgMSBleHRyYSBzdWJwaXhlbC4gIFRoaXMgc3BhY2UgY291bGQgYmUgYWxyZWFkeSBhdmFpbGFibGUKLQlkdWUgdG8gcm91bmRpbmcuICBJbiBvcmRlciB0byBvcHRpbWl6ZSB0aGUgcGFkZGluZywgd2Ugbm93IGV4cGFuZAotCUNCb3ggZm9yIHRoZSBnaXZlbiBmaWx0ZXIgd2VpZ2h0cyBiZWZvcmUgcm91bmRpbmcuCi0KLQlUaGlzIGNoYW5nZSBicmVha3MgY3VycmVudCBTa2lhIChhbmQgRmlyZWZveCkuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0xpYnJhcnlSZWMpCi0JW0ZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HXTogUmVtb3ZlIGBsY2RfZXh0cmEnIGZpZWxkLgotCi0JKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMsCi0JRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIpOiBSZW1vdmUgYGxjZF9leHRyYScgaW5pdGlhbGl6YXRpb25zLgotCi0JKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEltcGxlbWVudCBkeW1hbmljCi0JTENEIHBhZGRpbmcuCi0KLTIwMTctMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBSZXR1cm4gcHJvcGVyIHNjYWxpbmcgdmFsdWVzIGZvciBTQklYIGJpdG1hcHMuCi0KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpOiBJbXBsZW1lbnQgaXQuCi0KLTIwMTctMDUtMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IGVycm9yIGhhbmRsaW5nIGZvciBlbWJlZGRlZCBiaXRtYXBzLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSBIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0dseXBoKQotCVtUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNdOiBIYW5kbGUgZXJyb3IgaWYgZm9udCBpcyBub3QKLQlzY2FsYWJsZS4KLQotMjAxNy0wNS0xNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW2F1dG9maXRdIE1ha2UgYXV0b2hpbnQgd2FycGluZyBOT1JNQUwgb3B0aW9uLgotCi0JVGhpcyBtb3ZlcyB3YXJwaW5nIG9wdGlvbiBmcm9tIExJR0hUIHRvIE5PUk1BTCBtb2RlLiAgVGhpcyBtYWtlcyBMSUdIVAotCXRydWx5IHZvaWQgb2YgaGludGluZyBpbiB4LWRpcmVjdGlvbiwgd2l0aCBsZWZ0IHNpZGUgYmVhcmluZyBuZXZlcgotCWNoYW5nZWQgYW5kIHJpZ2h0IHNpZGUgYmVhcmluZyBvbmx5IGFsdGVyZWQgYnkgYWR2YW5jZSByb3VuZGluZy4KLQlUaGVyZWZvcmUsIExJR0hUIGlzIG5vdyByZWFkeSB0byByZXR1cm4gZnJhY3Rpb25hbCBhZHZhbmNlLiAgQXMgYQotCU5PUk1BTCBvcHRpb24sIHdhcnBpbmcgc3Vic3RpdHV0ZXMgbm9ybWFsIGhpbnRpbmcuCi0KLQkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50c19hcHBseSk6IFVwZGF0ZWQuCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2FwcGx5KTogVXBkYXRlZC4KLQkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9oaW50c19hcHBseSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2dseXBoKTogSGFuZGxlIHdhcnBpbmcKLQlwaGFudG9tIHBvaW50cyBhcyBub3JtYWwuCi0KLTIwMTctMDUtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVJlbW92ZSByZW1uYW50cyBvZiByYXN0ZXIgcG9vbC4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfTGlicmFyeVJlYyk6IFJlbW92ZQotCWByYXN0ZXJfcG9vbCcgYW5kIGByYXN0ZXJfcG9vbF9zaXplJyBmaWVsZHMuCi0KLQkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9OZXdfTGlicmFyeSksIHNyYy9yYXN0ZXIvZnRyZW5kMS5jCi0JKGZ0X3Jhc3RlcjFfaW5pdCksIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX2luaXQpOiBVcGRhdGVkLgotCi0yMDE3LTA1LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIFZlcnNpb24gMi44IHJlbGVhc2VkLgotCT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTgnLgotCi0JKiBkb2NzL1ZFUlNJT04uVFhUOiBBZGQgZW50cnkgZm9yIHZlcnNpb24gMi44LgotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0JKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwKLQlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAotCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAotCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi43LjEvMi44Lywgcy8yNzEvMjgvLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX01JTk9SKTogU2V0IHRvIDguCi0JKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDAuCi0KLQkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAyMDowOjE0LgotCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fTUlOT1IpOiBTZXQgdG8gOC4KLQkoVkVSU0lPTl9QQVRDSCk6IFNldCB0byAwLgotCi0yMDE3LTA1LTEyICBIaW4tVGFrIExldW5nICA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JRml4IGBGVF9VSU5UX1RPX1BPSU5URVInIG1hY3JvIGZvciBXaW5kb3dzLgotCi0JKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwgYnVpbGRzL3Ztcy9mdGNvbmZpZy5oLAotCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX1VJTlRfVE9fUE9JTlRFUikgW19XSU42NF06Ci0JRml4IGRlZmluaXRpb24uCi0KLTIwMTctMDUtMTEgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIENoYWttYSBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQ2hha21hLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIENoYWttYSBzdGFuZGFyZCBjaGFyYWN0ZXIuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBDaGFrbWEgZGF0YS4KLQotMjAxNy0wNS0xMCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKLQotCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgS2F5YWggTGkgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEtheWFoIExpLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEtheWFoIExpIHN0YW5kYXJkIGNoYXJhY3Rlci4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEtheWFoIExpIGRhdGEuCi0KLTIwMTctMDUtMTAgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEJhbXVtIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBCYW11bS4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBCYW11bSBzdGFuZGFyZCBjaGFyYWN0ZXIuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBCYW11bSBkYXRhLgotCi0yMDE3LTA1LTEwICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBTYXVyYXNodHJhIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBTYXVyYXNodHJhLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFNhdXJhc2h0cmEgc3RhbmRhcmQgY2hhcmFjdGVyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgU2F1cmFzaHRyYQotCWRhdGEuCi0KLTIwMTctMDUtMTAgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEJ1aGlkIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBCdWhpZC4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBCdWhpZCBzdGFuZGFyZCBjaGFyYWN0ZXIuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBCdWhpZCBkYXRhLgotCi0yMDE3LTA1LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBTaGF2aWFuIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBTaGF2aWFuLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFNoYXZpYW4gc3RhbmRhcmQgY2hhcmFjdGVyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgU2hhdmlhbiBkYXRhLgotCi0yMDE3LTA1LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBWYWkgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFZhaS4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBWYWkgc3RhbmRhcmQgY2hhcmFjdGVyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgVmFpIGRhdGEuCi0KLTIwMTctMDUtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIE9zbWFueWEgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE9zbWFueWEuCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgT3NtYW55YSBzdGFuZGFyZCBjaGFyYWN0ZXIuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBPc21hbnlhIGRhdGEuCi0KLTIwMTctMDUtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIENvcHRpYyBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQ29wdGljLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIENvcHRpYyBzdGFuZGFyZCBjaGFyYWN0ZXIuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBDb3B0aWMgZGF0YS4KLQotMjAxNy0wNS0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKLQotCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQ2FyaWFuIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBDYXJpYW4uCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQ2FyaWFuIHN0YW5kYXJkIGNoYXJhY3Rlci4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIENhcmlhbiBkYXRhLgotCi0yMDE3LTA1LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEFkZCB0cmlja3kgZm9udCBgREZHaXJsLVc2LVdJTi1CRicgKGZyb20gRHluYWxhYikuCi0KLQlSZXBvcnRlZCBieSBSb3kgVGFtIDxyb3l0YW1AZ21haWwuY29tPi4KLQotCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzX2ZhbWlseSk6IEltcGxlbWVudCBpdC4KLQotMjAxNy0wNS0wNyAgUm95IFRhbSAgPHJveXRhbUBnbWFpbC5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTW9yZSB0cmlja3kgZm9udHMgKG1haW5seSBmcm9tIER5bmFsYWIpLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3NfZmFtaWx5LAotCXR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMpOiBBZGQgdGhlbS4KLQotMjAxNy0wNS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBZGQgdHJpY2t5IGZvbnQgYERMQ0hheU1lZGl1bScgKGZyb20gRHluYWxhYikuCi0KLQlSZXBvcnRlZCBieSBSb3kgVGFtIDxyb3l0YW1AZ21haWwuY29tPi4KLQotCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzX2ZhbWlseSk6IEltcGxlbWVudCBpdC4KLQotMjAxNy0wNS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKi8qOiBzL2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5L2JhY2t3YXJkIGNvbXBhdGliaWxpdHkvLgotCi0yMDE3LTA1LTAzICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBVbmlmaWVkIENhbmFkaWFuIFN5bGxhYmljcyBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgVW5pZmllZCBDYW5hZGlhbgotCVN5bGxhYmljcy4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBVbmlmaWVkIENhbmFkaWFuIFN5bGxhYmljcyBzdGFuZGFyZAotCWNoYXJhY3Rlci4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFVuaWZpZWQKLQlDYW5hZGlhbiBTeWxsYWJpY3MgZGF0YS4KLQotMjAxNy0wNS0wMyAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gQWRkIGJsdWUtem9uZSBzdXBwb3J0IGZvciBTdW5kYW5lc2Ugc2NyaXB0LgotCi0JVGhpcyBlc3NlbnRpYWxseSBtb3ZlcyB0aGUgU3VuZGFuZXNlIHNjcmlwdCBmcm9tIHRoZSBgSW5kaWMnIGhpbnRlcgotCXRvIHRoZSBgTGF0aW4nIGhpbnRlci4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBTdW5kYW5lc2UuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBTdW5kYW5lc2Ugc3RhbmRhcmQgY2hhcmFjdGVyIGFuZCBtb3ZlCi0JZGF0YSBvdXQgb2YgQUZfQ09ORklHX09QVElPTl9JTkRJQyBibG9jay4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYzogTW92ZSBTdW5kYW5lc2UgZGF0YSBvdXQgb2YKLQlBRl9DT05GSUdfT1BUSU9OX0lORElDIGJsb2NrLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBVcGRhdGUgU3VuZGFuZXNlIGRhdGE7IGluIHBhcnRpY3VsYXIsIHVzZQotCUFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLgotCi0yMDE3LTA1LTAzICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBBdmVzdGFuIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBBdmVzdGFuLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEF2ZXN0YW4gc3RhbmRhcmQgY2hhcmFjdGVyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQXZlc3RhbiBkYXRhLgotCi0yMDE3LTA1LTAyICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KLQotCVt0cnVldHlwZV0gTWFrZSBgSVVQJyBndmFyIGRlbHRhcyBkbyB0aGUgc2FtZSBhcyBBcHBsZSAoIzUwODMyKS4KLQotCVdoZW4gcG9pbnRzIGFyZSBub3QgdG91Y2hlZCBieSBndmFyIGludGVycG9sYXRpb24gZGVsdGFzLCBGcmVlVHlwZQotCWdhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgcmVzdWx0IHRoYW4gQXBwbGUncyBDb3JlVGV4dC4KLQotCVRoZSBPcGVuVHlwZSB3b3JraW5nIGdyb3VwIHdpbGwgdXBkYXRlIHRoZSBzcGVjaWZpY2F0aW9uIHRvIGRvY3VtZW50Ci0JdGhlIGZvbGxvd2luZyBiZWhhdmlvdXI6IElmIHRoZSB0d28gcG9pbnRzIHdpdGggZGVsdGFzIHRvIHRoZSBgbGVmdCcKLQlhbmQgYHJpZ2h0JyBvZiB0aGUgdW50b3VjaGVkIHBvaW50IGhhdmUgdGhlIHNhbWUgY29vcmRpbmF0ZSwgdGhlbgotCXRoZSBpbmZlcnJlZCBkZWx0YSBmb3IgdGhlIHVudG91Y2hlZCBwb2ludCBzaG91bGQgYmUgemVyby4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfZGVsdGFfaW50ZXJwb2xhdGUpOiBJbXBsZW1lbnQgbmV3Ci0JYmVoYXZpb3VyLgotCi0yMDE3LTA1LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gUmVtb3ZlIGBzbGlnaHQnIGF1dG8taGludCBtb2RlIGFnYWluLgotCi0JQSBwb2xsIG9uIGZyZWV0eXBlLWRldmVsIGZhdm91cmVkIGNoYW5nZXMgZGlyZWN0bHkgYXBwbGllZCB0bwotCWBsaWdodCcuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9UQVJHRVRfU0xJR0hULAotCUZUX1JFTkRFUl9NT0RFX1NMSUdIVCk6IFJlbW92ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50c19pbml0KSwgc3JjL2F1dG9maXQvYWZsYXRpbi5jCi0JKGFmX2xhdGluX2hpbnRzX2luaXQpLCBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jCi0JKGFmX2xhdGluMl9oaW50c19pbml0KTogUmV2ZXJ0IGNoYW5nZSBmcm9tIDIwMTctMDQtMjIuCi0KLQkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2dseXBoKSBSZW1vdmUgcmVmZXJlbmNlcyB0bwotCUZUX1JFTkRFUl9NT0RFX1NMSUdIVC4KLQlbQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1NdOiBFbmFibGUgVHJ1ZVR5cGUtbGlrZSBtZXRyaWNzCi0JdW5jb25kaXRpb25hbGx5LgotCi0JKiBzcmMvYmFzZS9mdGFkdmFuYy5jIChMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyk6IFJldmVydCBjaGFuZ2UgZnJvbQotCTIwMTctMDQtMjIuCi0KLQkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogUmV2ZXJ0IGNoYW5nZSBmcm9tIDIwMTctMDQtMjIuCi0KLQkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzX2hpbnRzX2FwcGx5KTogUmV2ZXJ0IGNoYW5nZSBmcm9tCi0JMjAxNy0wNC0yMi4KLQotCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyKTogUmV2ZXJ0IGNoYW5nZSBmcm9tCi0JMjAxNy0wNC0yMi4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE3LTA0LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gRml4IG1ldHJpY3MgY29tcHV0YXRpb24uCi0KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmt1cyBUcmlwcGVsc2RvcmYgPG1hcmt1c0B0cmlwcGVsc2RvcmYuZGU+IGFuZAotCU5pa29sYXVzIFdheHdlaWxlciA8bWFkaWdlbnNAZ21haWwuY29tPi4KLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1JlcXVlc3RfU2l6ZSk6IFRyaWdnZXIgcmVjb21wdXRhdGlvbiBvZgotCWF1dG8taGludGVyIG1ldHJpY3MuICBXaXRob3V0IHRoaXMgY2hhbmdlLCBtdWx0aXBsZSBzaXplIGNoYW5naW5nCi0JY2FsbHMgZm9yIGEgc2luZ2xlIGZhY2UgZmFpbC4KLQotMjAxNy0wNC0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogUHJvcGVybHkgY2hlY2sgYGVycm9yJy4KLQotCVJlcG9ydGVkIGJ5IEVhcm5lc3RseSA8emliZW9uQGdvb2dsZW1haWwuY29tPiBpbgotCi0JICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTctMDQvbXNnMDAwMzEuaHRtbAotCi0yMDE3LTA0LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlJbnRyb2R1Y2UgQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgY29uZmlndXJhdGlvbiBvcHRpb24uCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKLQkoQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MpOiBOZXcgb3B0aW9uLCBjb21tZW50ZWQgb3V0IGJ5Ci0JZGVmYXVsdC4KLQotCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiBVc2UKLQlBRl9DT05GSUdfT1BUSU9OX1RUX1NJWkVfTUVUUklDUyB0byBndWFyZCB0aGUgY29ycmVzcG9uZGluZyBjb2RlLgotCi0yMDE3LTA0LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfUmVuZGVyX01vZGUpOiBGaXggb3JkZXIuCi0KLQlUaGlzIHJldGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQotCU5vdGVkIGJ5IEFsZXhlaS4KLQotMjAxNy0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBEbyBsaW5lYXIgc2NhbGluZyBmb3IgRlRfTE9BRF9OT19ISU5USU5HICgjNTA0NzApLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmggKFRUX1NpemVSZWMpOiBBZGQgZmllbGQgYGhpbnRlZF9tZXRyaWNzJyB0bwotCWhvbGQgaGludGVkIG1ldHJpY3MuCi0JTWFrZSBgbWV0cmljcycgYSBwb2ludGVyIHNvIHRoYXQgYHR0X2dseXBoX2xvYWQnIGNhbiBlYXNpbHkgc3dpdGNoCi0JYmV0d2VlbiBtZXRyaWNzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogVXBkYXRlZC4KLQkodHRfZ2x5cGhfbG9hZCk6IFVzZSB0b3AtbGV2ZWwgbWV0cmljcyBpZiBGVF9MT0FEX05PX0hJTlRJTkcgaXMKLQl1c2VkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoLCBUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwKLQlUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQsIGxvYWRfdHJ1ZXR5cGVfZ2x5cGgsCi0JY29tcHV0ZV9nbHlwaF9tZXRyaWNzLCBUVF9Mb2FkX0dseXBoKTogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX0xvYWRfQ29udGV4dCk6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9yZXNldCk6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5jIChzcGhfc2V0X3R3ZWFrcyk6IFVwZGF0ZWQuCi0KLTIwMTctMDQtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUFkZCBuZXcgYHNsaWdodCcgYXV0by1oaW50aW5nIG1vZGUuCi0KLQlUaGlzIG1vZGUgdXNlcyBmcmFjdGlvbmFsIGFkdmFuY2Ugd2lkdGhzIGFuZCBkb2Vzbid0IHNjYWxlIGdseXBocwotCWhvcml6b250YWxseSwgb25seSBhcHBseWluZyB2ZXJ0aWNhbCBzY2FsaW5nIGFuZCBoaW50aW5nLgotCi0JQXQgdGhlIHNhbWUgdGltZSwgdGhlIGJlaGF2aW91ciBvZiB0aGUgYGxpZ2h0JyBhdXRvLWhpbnRlciBnZXRzCi0JcmVzdG9yZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IEJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwKLQlzY2FsaW5nIGlzIGFnYWluIGJhc2VkIG9uIHJvdW5kZWQgbWV0cmljcyB2YWx1ZXMgKHRoaXMgd2FzIGNoYW5nZWQKLQlpbiBhIGNvbW1pdCBmcm9tIDIwMTctMDMtMzAgYXMgYSBzaWRlIGVmZmVjdCkuICBUbyBiZSBtb3JlIHByZWNpc2UsCi0JdGhlIGJlaGF2aW91ciBpcyByZXN0b3JlZCBmb3IgVHJ1ZVR5cGUgZm9udHMgb25seTsgZm9yIG90aGVyIGZvbnQKLQlmb3JtYXRzIGxpa2UgVHlwZSAxLCB0aGlzIGlzIGEgbmV3IGZlYXR1cmUgb2YgdGhlIGBsaWdodCcgaGludGluZwotCW1vZGUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9UQVJHRVRfU0xJR0hUKTogTmV3IG1hY3JvLgotCShGVF9SRU5ERVJfTU9ERV9TTElHSFQpOiBOZXcgcmVuZGVyIG1vZGUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1NpemVfSW50ZXJuYWxSZWMpOiBBZGQKLQlgYXV0b2hpbnRfbW9kZScgYW5kIGBhdXRvaGludF9tZXRyaWNzJyBmaWVsZHMuCi0KLQkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50c19pbml0KSwgc3JjL2F1dG9maXQvYWZsYXRpbi5jCi0JKGFmX2xhdGluX2hpbnRzX2luaXQpLCBzcmMvYXV0b2ZpdC9hZmxhdGluMiAoYWZfbGF0aW4yX2hpbnRzX2luaXQpOgotCVVwZGF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9lbWJvbGRlbl9nbHlwaF9pbl9zbG90KTogVXNlCi0JYGF1dG9oaW50X21ldHJpY3MnLgotCShhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IHMvaW50ZXJuYWwvc2xvdF9pbnRlcm5hbC8uCi0JSW5pdGlhbGl6ZSBgYXV0b2hpbnRfbWV0cmljcycgYW5kIGBhdXRvaGludF9tb2RlJyBkZXBlbmRpbmcgb24KLQljdXJyZW50IGF1dG8taGludCBtb2RlLgotCVVzZSBgYXV0b2hpbnRfbWV0cmljcycuCi0JVXBkYXRlZC4KLQotCSogc3JjL2Jhc2UvZnRhZHZhbmMuYyAoTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0spOiBVcGRhdGVkLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCi0JKEZUX05ld19TaXplKTogQWxsb2NhdGUgYGludGVybmFsJyBvYmplY3QuCi0KLQkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKHBzX2hpbnRzX2FwcGx5KTogVXBkYXRlZC4KLQotCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyKTogVXBkYXRlZC4KLQotMjAxNy0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JSW50cm9kdWNlIGBGVF9TaXplX0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUuCi0KLQlXZSBhcmUgZ29pbmcgdG8gZXh0ZW5kIHRoaXMgbGF0ZXIgb24uCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1NpemVfSW50ZXJuYWxSZWMpOiBOZXcKLQlzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZSBmaWVsZCBgbW9kdWxlX2RhdGEnLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTmV3X1NpemUpOiBBbGxvY2F0ZSBgaW50ZXJuYWwnIGZpZWxkIG9mCi0JYEZUX1NpemUnIHN0cnVjdHVyZS4KLQotCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfYnVpbGRlcl9pbml0LCBjZmZfZGVjb2Rlcl9wcmVwYXJlKTogVXNlCi0JYHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YScgaW5zdGVhZCBvZiBgc2l6ZS0+aW50ZXJuYWwnLgotCi0JKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX3NpemVfZG9uZSk6IERlYWxsb2NhdGUgYG1vZHVsZV9kYXRhJy4KLQkoY2ZmX3NpemVfaW5pdCwgY2ZmX3NpemVfc2VsZWN0LCBjZmZfc2l6ZV9yZXF1ZXN0KTogVXNlCi0JYHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YScgaW5zdGVhZCBvZiBgc2l6ZS0+aW50ZXJuYWwnLgotCi0JKiBzcmMvY2lmL2NpZG9ianMuYyAoY2lkX3NpemVfZG9uZSwgY2lkX3NpemVfaW5pdCwKLQljaWRfc2l6ZV9yZXF1ZXN0KTogVXNlIGBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEnIGluc3RlYWQgb2YKLQlgc2l6ZS0+aW50ZXJuYWwnLgotCi0JKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHQxX2J1aWxkZXJfaW5pKTogVXNlCi0JYHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YScgaW5zdGVhZCBvZiBgc2l6ZS0+aW50ZXJuYWwnLgotCi0JKiBzcmMvdHlwZTEvdDFvYmpzLmMgKFQxX1NpemVfRG9uZSwgVDFfU2l6ZV9Jbml0LCBUMV9TaXplX1JlcXVlc3QpOgotCVVzZSBgc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhJyBpbnN0ZWFkIG9mIGBzaXplLT5pbnRlcm5hbCcuCi0KLTIwMTctMDQtMjEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCSogc3JjL3Ntb290aC9mdHNtb290aC5oOiBSZW1vdmUgdW51c2VkIGd1YXJkcyBhbmQgZGVjbGFyYXRpb24uCi0KLTIwMTctMDQtMTYgIEhpbi1UYWsgTGV1bmcgIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQlGaXggdHJhY2luZyBtZXNzYWdlcy4KLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleCwKLQlGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0LCBGVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyKTogUHJpbnQKLQljb3JyZWN0IGZ1bmN0aW9uIG5hbWUuCi0KLTIwMTctMDQtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIE9sZCBUdXJraWMgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE9sZCBUdXJraWMuCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgT2xkIFR1cmtpYyBzdGFuZGFyZCBjaGFyYWN0ZXJzLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgT2xkIFR1cmtpYyBkYXRhLgotCi0yMDE3LTA0LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBHb3RoaWMgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEdvdGhpYy4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBHb3RoaWMgc3RhbmRhcmQgY2hhcmFjdGVycy4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEdvdGhpYyBkYXRhLgotCi0yMDE3LTA0LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBDeXByaW90IHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBDeXByaW90LgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEN5cHJpb3Qgc3RhbmRhcmQgY2hhcmFjdGVycy4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEN5cHJpb3QgZGF0YS4KLQotMjAxNy0wNC0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKLQotCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgRGVzZXJldCBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgRGVzZXJldC4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBEZXNlcmV0IHN0YW5kYXJkIGNoYXJhY3RlcnMuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBEZXNlcmV0IGRhdGEuCi0KLTIwMTctMDQtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVthdXRvZml0XSBGaXggaW52YWxpZCBjaGFyYWN0ZXIgcmFuZ2UgZGVzY3JpcHRpb24gKCM1MDc0NSkuCi0KLQlBbHNvIHJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTEwMzQKLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYyAoYWZfZ2xhZ19ub25iYXNlX3VuaXJhbmdlcyk6IEZpeCB0eXBvIGluCi0JcmVjZW50IGNvbW1pdC4KLQotMjAxNy0wNC0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Z0ZnV6emVyXSBGaXggY2xhbmcgd2FybmluZ3MuCi0KLQkqIHNyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYyAoTExWTUZ1enplclRlc3RPbmVJbnB1dCk6IEFkZAotCWNhc3RzLgotCi0yMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBMaXN1IHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBMaXN1LgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIExpc3Ugc3RhbmRhcmQgY2hhcmFjdGVycy4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIExpc3UgZGF0YS4KLQotMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKLQotCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgT3NhZ2Ugc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE9zYWdlLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE9zYWdlIHN0YW5kYXJkIGNoYXJhY3RlcnMuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBPc2FnZSBkYXRhLgotCi0yMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBHbGFnb2xpdGljIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBHbGFnb2xpdGljLgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEdsYWdvbGl0aWMgc3RhbmRhcmQgY2hhcmFjdGVycy4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEdsYWdvbGl0aWMgZGF0YS4KLQotMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKLQotCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgVGFpIFZpZXQgc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFRhaSBWaWV0LgotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFRhaSBWaWV0IHN0YW5kYXJkIGNoYXJhY3RlcnMuCi0KLQkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBUYWkgVmlldCBkYXRhLgotCi0yMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZwotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBUaWZpbmFnaCBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgVGlmaW5hZ2guCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgVGlmaW5hZ2ggc3RhbmRhcmQgY2hhcmFjdGVycy4KLQotCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFRpZmluYWdoIGRhdGEuCi0KLTIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCi0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIE4nS28gc2NyaXB0LgotCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE4nS28uCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgTidLbyBzdGFuZGFyZCBjaGFyYWN0ZXJzLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgTidLbyBkYXRhLgotCi0yMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+Ci0KLQlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEFkbGFtIHNjcmlwdC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBBZGxhbS4KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLQkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBBZGxhbSBzdGFuZGFyZCBjaGFyYWN0ZXJzLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQWRsYW0gZGF0YS4KLQotMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgotCi0JW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBPbCBDaGlraSBzY3JpcHQuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgT2wgQ2hpa2kuCi0JKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgT2wgQ2hpa2kgc3RhbmRhcmQgY2hhcmFjdGVyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgT2wgQ2hpa2kgZGF0YS4KLQotMjAxNy0wNC0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBdm9pZCByZWV4ZWN1dGlvbiBvZiBgZnBnbScgYW5kIGBwcmVwJyBpbiBjYXNlIG9mIGVycm9yLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9OTgxCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCAoRlRfRXJyX0RFRl9Jbl9HbHlmX0J5dGVjb2RlKTogTmV3Ci0JZXJyb3IgY29kZS4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19GREVGLCBJbnNfSURFRik6IFByb2hpYml0IGV4ZWN1dGlvbgotCW9mIHRoZXNlIHR3byBvcGNvZGVzIGluIGBnbHlmJyBieXRlY29kZS4KLQkoVFRfUnVuSW5zKTogRG9uJ3QgZW5mb3JjZSByZWV4ZWN1dGlvbiBvZiBgZnBnbScgYW5kIGBwcmVwJyBieXRlY29kZQotCWluIGNhc2Ugb2YgZXJyb3Igc2luY2UgZnVuY3Rpb24gdGFibGVzIGNhbiBubyBsb25nZXIgYmUgbW9kaWZpZWQKLQkoZHVlIHRvIHRoZSBjaGFuZ2VzIGluIGBJbnNfRkRFRicgYW5kIGBJbnNfSURFRicpLiAgVGhpcyBjaGFuZ2UgY2FuCi0JZW5vcm1vdXNseSBzcGVlZCB1cCBoYW5kbGluZyBvZiBicm9rZW4gZm9udHMuCi0KLTIwMTctMDQtMDIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVthdXRvZml0XSBEaXNhYmxlIG1ldHJpY3MgYWRqdXN0bWVudCBmb3IgYEZUX0xPQURfVEFSR0VUX0xDRCcuCi0KLQkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfaW5pdCk6IFVwZGF0ZWQuCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfaGludHNfaW5pdCk6IERpdHRvLgotCi0yMDE3LTA0LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmM6IEluY2x1ZGUgRlRfQ09ORklHX0NPTkZJR19ILgotCi0JT3RoZXJ3aXNlIEZUX1VJTlRfVE9fUE9JTlRFUiBtaWdodCBub3QgYmUgZGVmaW5lZC4KLQotCVByb2JsZW0gcmVwb3J0ZWQgYnkgQWxleGVpLgotCi0yMDE3LTAzLTMxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbYXV0b2ZpdF0gRGlzYWJsZSBzdGVtIGFkanVzdG1lbnQgZm9yIGBGVF9MT0FEX1RBUkdFVF9MQ0QnLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xPQURfVEFSR0VUX0xDRCk6IERvY3VtZW50IGl0LgotCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2luaXQpOiBVcGRhdGVkLgotCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19pbml0KTogRGl0dG8uCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfaGludHNfaW5pdCk6IERpdHRvLgotCi0yMDE3LTAzLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogSW1wcm92ZSBmaXggZnJvbSAyMDE3LTAxLTA0LgotCi0JQWxsb3cgQ0ZGcyBjb250YWluaW5nIGEgc2luZ2xlIGZvbnQgdG8gaGF2ZSBhbiBlbXB0eSBmb250IG5hbWUuCi0KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IOW8teS/iuiKnSA8NDE4MDkyNjI1QHFxLmNvbT4gaW4KLQotCSAgaHR0cHM6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDE3LTAzL21zZzAwMDc0Lmh0bWwKLQotMjAxNy0wMy0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvY2ZmL2NmZnBhcnNlLmggKENGRjJfREVGQVVMVF9TVEFDSyk6IFNldCB0byA1MTMgYWxzby4KLQotCVJlcXVlc3RlZCBieSBEYXZlIEFybm9sZC4KLQotMjAxNy0wMy0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBGaXggSFZBUiBhbmQgVlZBUiBoYW5kbGluZyAoIzUwNjc4KS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfaHZhZHZhbmNlX2FkanVzdCk6IEhhbmRsZQotCWdseXBoIGluZGljZXMgbGFyZ2VyIHRoYW4gYG1hcENvdW50JyBhcyBkZXNjcmliZWQgaW4gdGhlCi0Jc3BlY2lmaWNhdGlvbi4KLQotMjAxNy0wMy0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBbGxvdyBsaW5lYXIgc2NhbGluZyBmb3IgdW5oaW50ZWQgcmVuZGVyaW5nICgjNTA0NzApLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogUmV2ZXJ0IGNoYW5nZSBmcm9tCi0JMjAxMS0wNy0xNjsgdGhlIGludGVuZGVkIG1ldHJpY3MgZml4IHNlZW1zIG5vdyB0byBiZSBpbXBsZW1lbnRlZCBpbgotCWEgZGlmZmVyZW50IHdheSwgbWFraW5nIHRoZSBwYXRjaCB1bm5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB0aGlzCi0JY2hhbmdlIHdhcyB1c3VhbGx5IHBhdGNoZWQgb3V0IGJ5IGFsbCBtYWpvciBHTlUvTGludXggZGlzdHJpYnV0aW9ucwotCWR1ZSB0byBoZWF2eSBzaWRlIGVmZmVjdHMuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGNvbXB1dGVfZ2x5cGhfbWV0cmljcywgVFRfTG9hZF9HbHlwaCk6Ci0JUmVmZXIgdG8gdGhlIG1ldHJpY3Mgb2YgdGhlIGBUVF9TaXplJyBvYmplY3QuCi0KLTIwMTctMDMtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IHRoaW5rbyByZWxhdGVkIHRvIFBTIG5hbWUgb2YgZGVmYXVsdCBuYW1lZCBpbnN0YW5jZS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IGBzdHJpZCcgYW5kIGBwc2lkJyBhcmUKLQluYW1lIElEIHZhbHVlcywgbm90IGluZGljZXMgaW50byB0aGUgYXJyYXkgb2YgbmFtZSBlbnRyaWVzLgotCi0yMDE3LTAzLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2lkLCB0cnVldHlwZV0gRG9uJ3QgdXNlIGBpbmRleCcgYXMgYSB2YXJpYWJsZSBuYW1lLgotCi0JQXQgbGVhc3Qgb24gRnJlZUJTRCB0aGVyZSBpcyBhIGdsb2JhbCBkZWNsYXJhdGlvbiBvZiBgaW5kZXgnIGluIGZpbGUKLQlgL3Vzci9pbmNsdWRlL3N0cmluZ3MuaCcuCi0KLQkqIHNyYy9jZmYvY2YyaW50cnAuYywgc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogcy9pbmRleC9pZHgvIHdoZXJlCi0JYXBwcm9wcmlhdGUuCi0KLTIwMTctMDMtMjcgIFdvamNpZWNoIE1hbXJhayAgPHdtYW1yYWtAZ21haWwuY29tPgotCi0JW3NmbnRdIE1pbm9yIGltcHJvdmVtZW50IGZvciBoYW5kbGluZyBrZXJuIHRhYmxlcy4KLQotCSogc3JjL3NmbnQvdHRrZXJuLmMgKHR0X2ZhY2VfbG9hZF9rZXJuKTogRG9uJ3QgY2hlY2sgZm9yCi0JY3Jvc3Mtc3RyZWFtIGtlcm5pbmcgdGFibGVzIHNpbmNlIHdlIHJlamVjdCBmb3JtYXQgMiB0YWJsZXMgbGF0ZXIKLQlvbiBhbnl3YXlzLgotCU1vZGlmeSBjb2RlIGZvciBsaW1pdCB0ZXN0Li4uCi0JKHR0X2ZhY2VfZ2V0X2tlcm5pbmcpOiAuLi4gdG8gYXZvaWQgYSBsaW1pdCB0ZXN0IGhlcmUuCi0KLTIwMTctMDMtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwY2ZdIEZpeCBjb21waWxlciB3YXJuaW5ncy4KLQotCVJlcG9ydGVkIGJ5IEFsZXhhbmRlciBIZWRnZXMgPGFoZWRnZXNAc3R1ZGVudC5ldGh6LmNoPi4KLQotCSogc3JjL3BjZi9wY2Zkcml2ci5jIChwY2ZfcHJvcGVydHlfc2V0LCBwY2ZfcHJvcGVydHlfZ2V0KTogVGFnCi0JYHByb3BlcnR5X25hbWUnIHdpdGggYEZUX1VOVVNFRCcgd2hlcmUgbmVjZXNzYXJ5LgotCi0yMDE3LTAzLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfYnVpbGRlcl9jbG9zZV9jb250b3VyKTogQWRkIHNhZmV0eSBndWFyZC4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk0MQotCi0yMDE3LTAzLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbcHNhdXhdIEJldHRlciBwcm90ZWN0IGBmbGV4JyBoYW5kbGluZy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTkzNQotCi0JKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncykKLQk8Y2FsbG90aGVyc3Vicj46IFNpbmNlIHRoZXJlIGlzIG5vdCBhIHNpbmdsZSBmbGV4IG9wZXJhdG9yIGJ1dCBhCi0Jc2VyaWVzIG9mIHN1YnJvdXRpbmUgY2FsbHMsIG1hbGZvcm1lZCBmb250cyBjYW4gY2FsbCBhcmJpdHJhcnkgb3RoZXIKLQlvcGVyYXRvcnMgYWZ0ZXIgdGhlIHN0YXJ0IG9mIGEgZmxleCwgcG9zc2libHkgYWRkaW5nIHBvaW50cy4gIEZvcgotCXRoaXMgcmVhc29uIHdlIGhhdmUgdG8gY2hlY2sgdGhlIGF2YWlsYWJsZSBudW1iZXIgb2YgcG9pbnRzIGJlZm9yZQotCWluc2VydGluZyBhIHBvaW50LgotCi0yMDE3LTAzLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gRml4IGNoZWNrIGZvciBkZWZhdWx0IG5hbWVkIGluc3RhbmNlLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBBIGBmaXhlZCcgbnVtYmVyIG5lZWRzIGZvdXIKLQlieXRlcywgbm90IHR3by4uLgotCi0yMDE3LTAzLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlNYWtlIE1NIGZvbnRzIHdvcmsgKGFnYWluKS4KLQotCSogc3JjL2Jhc2UvZnRtbS5jIChGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywKLQlGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsIEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOiBJZ25vcmUKLQlyZXR1cm4gdmFsdWUgb2YgYGZ0X2ZhY2VfZ2V0X212YXJfc2VydmljZSc7IGluc3RlYWQsIGNoZWNrIHdoZXRoZXIgYQotCXNlcnZpY2UgaXMgYWN0dWFsbHkgcmV0dXJuZWQuCi0KLTIwMTctMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gU29tZSB2YXJpYWJsZSByZW5hbWluZ3MuCi0KLQlUb28gbXVjaCBsb2NhbCB2YXJpYWJsZXMgaG9sZGluZyBkaWZmZXJlbnQgc3RydWN0dXJlcyB3ZXJlIGNhbGxlZAotCWBtZXRyaWNzJy4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfc2VsZWN0KTogcy9tZXRyaWNzL3NpemVfbWV0cmljcy8uCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2dldF9tZXRyaWNzX2luY3Jfb3ZlcnJpZGVzLAotCWNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IHMvbWV0cmljcy9pbmNyX21ldHJpY3MvLgotCShsb2FkX3NiaXRfaW1hZ2UpOiBzL21ldHJpY3Mvc2JpdF9tZXRyaWNzLy4KLQotCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3J1bl9mcGdtKTogcy9tZXRyaWNzL3NpemVfbWV0cmljcy8uCi0JKHR0X3NpemVfaW5pdF9ieXRlY29kZSk6IHMvbWV0cmljcy90dF9tZXRyaWNzLy4KLQkodHRfc2l6ZV9yZXNldCk6IHMvbWV0cmljcy9zaXplX21ldHJpY3MvLgotCi0yMDE3LTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gRG9uJ3QgYWRkIGluc3RhbmNlcyB0byBub24tdmFyaWF0aW9uIGZvbnRzLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBGaXggaXQuCi0KLTIwMTctMDMtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfYnVpbGRlcl9pbml0KTogQWRkIHNhZmV0eSBndWFyZCAoIzUwNTc4KS4KLQotMjAxNy0wMy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JSW50cm9kdWNlIEZUX1VJTlRfVE9fUE9JTlRFUiBtYWNybyAoIzUwNTYwKS4KLQotCVdlIGhhdmUgdG8gbWFrZSBhIHNlcGFyYXRlIGNhc2UgZm9yIFdpbmRvd3MgNjQncyBMTFA2NCBkYXRhIG1vZGVsLgotCi0JKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbiwgYnVpbGRzL3Ztcy9mdGNvbmZpZy5oLAotCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX1VJTlRfVE9fUE9JTlRFUik6IE5ldyBtYWNyby4KLQotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IFVzZSBpdC4KLQotMjAxNy0wMy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogQWRqdXN0IGxvb3AgY291bnRlciAoIzUwNTczKS4KLQotCVRoZSBwcm9ibGVtYXRpYyBmb250IHRoYXQgZXhjZWVkcyB0aGUgb2xkIGxpbWl0IGlzIExhdG8tUmVndWxhciwKLQl2ZXJzaW9uIDIuMDA3LCBjb250YWluaW5nIGJ5dGVjb2RlIGdlbmVyYXRlZCBieSBhIGJ1Z2d5IHZlcnNpb24gb2YKLQl0dGZhdXRvaGludC4KLQotMjAxNy0wMy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBbm90aGVyIGxpbWl0YXRpb24gZm9yIGJ5dGVjb2RlIGxvb3AgY291bnQgbWF4aW11bS4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTkwMAotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogTGltaXQgYGxvb3BjYWxsX2NvdW50ZXJfbWF4JwotCWJ5IG51bWJlciBvZiBnbHlwaHMgYWxzby4KLQotMjAxNy0wMy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Z0ZnV6emVyXSBNaW5vciBpbXByb3ZlbWVudC4KLQotCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjOiBEb24ndCBzZXQgaW50ZXJtZWRpYXRlIGF4aXMgaWYKLQliaXRtYXAgc3RyaWtlcyBhcmUgYWN0aXZlLgotCi0yMDE3LTAzLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlJbXByb3ZlIGBtYWtlIG11bHRpJy4KLQotCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYzogR3VhcmQgZmlsZSB3aXRoIEZUX09QVElPTl9BVVRPRklUMi4KLQotCSogc3JjL2Jhc2UvZnRtYWMuYzogR3VhcmQgbW9yZSBwYXJ0cyBvZiB0aGUgZmlsZSB3aXRoIEZUX01BQ0lOVE9TSC4KLQotCSogc3JjL3BzYXV4L2FmbXBhcnNlLmM6IEd1YXJkIGZpbGUgd2l0aCBUMV9DT05GSUdfT1BUSU9OX05PX0FGTS4KLQotCSogc3JjL3NmbnQvcG5nc2hpbS5jOiBHdWFyZCBmaWxlIHdpdGgKLQlUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgYWxzby4KLQotCSogc3JjL3NmbnQvdHRiZGYuYzogQXZvaWQgZW1wdHkgc291cmNlIGZpbGUuCi0JKiBzcmMvc2ZudC90dHBvc3QuYzogR3VhcmQgZmlsZSB3aXRoCi0JVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTLgotCSogc3JjL3NmbnQvdHRzYml0LmM6IEd1YXJkIGZpbGUgd2l0aAotCVRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYywgc3JjL3RydWV0eXBlL3R0aW50ZXJwLmM6IEF2b2lkIGVtcHR5Ci0Jc291cmNlIGZpbGUuCi0KLQkqIHNyYy90cnVldHlwZS90dHN1YnBpeC5jOiBHdWFyZCBmaWxlIHdpdGgKLQlUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgYWxzby4KLQotCSogc3JjL3R5cGUxL3QxYWZtLmM6IEd1YXJkIGZpbGUgd2l0aCBUMV9DT05GSUdfT1BUSU9OX05PX0FGTS4KLQotCSogc3JjL2F1dG9maXQvYXV0b2ZpdC5jLCBzcmMvYmFzZS9mdGJhc2UuYywgc3JjL2NhY2hlL2Z0Y2FjaGUuYywKLQlzcmMvY2ZmL2NmZi5jLCBzcmMvY2lkL3R5cGUxY2lkLmMsIHNyYy9neHZhbGlkL2d4dmFsaWQuYywKLQlzcmMvcGNmL3BjZi5jLCBzcmMvcGZyL3Bmci5jLCBzcmMvcHNhdXgvcHNhdXguYywKLQlzcmMvcHNoaW50ZXIvcHNoaW50ZXIuYywgc3JjL3BzbmFtZXMvcHNuYW1lcy5jLCBzcmMvcmFzdGVyL3Jhc3Rlci5jLAotCXNyYy9zZm50L3NmbnQuYywgc3JjL3Ntb290aC9zbW9vdGguYywgc3JjL3RydWV0eXBlL3RydWV0eXBlLmMsCi0Jc3JjL3R5cGUxL3R5cGUxLmMsIHNyYy90eXBlNDIvdHlwZTQyLmM6IFJlbW92ZSBjb25kaXRpb25hbHM7IHNvcnQKLQllbnRyaWVzLgotCi0yMDE3LTAzLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlGaXhlcyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCi0KLQkqIHNyYy9hdXRvZml0L2FmY2prLmMsIHNyYy9hdXRvZml0L2FmaW5kaWMuYzogSW5jbHVkZSBgYWZjamsuaCcKLQllYXJsaWVyLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBQdXQgYG1lbW9yeScgdmFyaWFibGUgaW50bwotCVRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgYmxvY2suCi0JKHNmbnRfZG9uZV9mYWNlKTogUHJvdGVjdCBzb21lIGNvZGUgd2l0aAotCVRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc2JpeF9pbWFnZSk6IFJlbW92ZSBjb21waWxlcgotCXdhcm5pbmcuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogUHV0IGB0bXAnIHZhcmlhYmxlCi0JaW50byBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgYmxvY2suCi0KLQkodHRfbG9hZGVyX2luaXQpOiBQdXQgYGVycm9yJyB2YXJpYWJsZSBpbnRvCi0JVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGJsb2NrLgotCi0yMDE3LTAzLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlGaXggcHJlcHJvY2Vzc29yIHdhcm5pbmcuCi0KLQkqIGRldmVsL2Z0b3B0aW9uLmgsIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6IFRlc3Qgd2hldGhlcgotCVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpcyBkZWZpbmVkIGJlZm9yZSBjaGVja2luZyBpdHMKLQl2YWx1ZS4KLQotMjAxNy0wMy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JYG1ha2UgbXVsdGknIGZpeGVzOyBjb21waWxlciB3YXJuaW5ncy4KLQotCSogc3JjL2Jhc2UvZnRzbmFtZXMuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ILgotCi0JKiBzcmMvY2ZmL2NmZm9ianMuYyBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEluY2x1ZGUKLQlGVF9NVUxUSVBMRV9NQVNURVJTX0ggYW5kIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ILgotCi0JKiBzcmMvc2ZudC9zZmRyaXZlci5jIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSW5jbHVkZQotCUZUX01VTFRJUExFX01BU1RFUlNfSCBhbmQgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0guCi0JKGdldF93aW5fc3RyaW5nLCBnZXRfYXBwbGVfc3RyaW5nKTogSW5pdGlhbGl6ZSBgcmVzdWx0Jy4KLQotMjAxNy0wMy0xNyAgRGF2ZSBBcm5vbGQgPGRhcm5vbGRAYWRvYmUuY29tPgotCi0JW2NmZl0gRml4IHBvdGVudGlhbCBidWdzIGluIGRlZmF1bHQgTkRWIGZvciBDRkYyLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2JsZW5kX2J1aWxkX3ZlY3Rvcik6IEV4cGxpY2l0bHkgYnVpbGQgYmxlbmQKLQl2ZWN0b3Igd2hlbiBgbGVuTkRWJyBpcyB6ZXJvOyBkb24ndCByZWx5IG9uIHplcm8taW5pdC4KLQlTYXZlIGBsZW5ORFYnIGFzIHBhcnQgb2YgY2FjaGUga2V5IGV2ZW4gd2hlbiBgbGVuTkRWJyBpcyB6ZXJvLgotCi0yMDE3LTAzLTE3ICBEYXZlIEFybm9sZCA8ZGFybm9sZEBhZG9iZS5jb20+Ci0KLQlbY2ZmXSBGaXggQ0ZGMiBzdGFjayBhbGxvY2F0aW9uLgotCi0JKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZXJfaW5pdCkgYWRkIDEgZm9yIG9wZXJhdG9yLgotCi0yMDE3LTAzLTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2RvbmVfYmxlbmQpOiBGcmVlIGB2dmFyX3RhYmxlJy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTg4MwotCi0yMDE3LTAzLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlSZW1vdmUgY2xhbmcgY29tcGlsZXIgd2FybmluZ3MgKCM1MDU0OCkuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKTogTWFrZQotCWB2YXJfcG9zdHNjcmlwdF9wcmVmaXhfbGVuJyB1bnNpZ25lZC4KLQotCSogc3JjL2F1dG9maXQvYWZ3YXJwLmMgKGFmX3dhcnBlcl9jb21wdXRlX2xpbmVfYmVzdCk6IFJlbW92ZQotCXJlZHVuZGFudCBhc3NpZ25tZW50LgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX3N1YmZvbnRfbG9hZCk6IEFkZCBjYXN0cy4KLQotCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfYmxlbmQpOiBSZW1vdmUgcmVkdW5kYW50IGFzc2lnbm1lbnQuCi0KLQkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGZtaXgzMiwgbXVybXVyX2hhc2hfM18xMjgpOiBBZGQgYHN0YXRpYycKLQlrZXl3b3JkLgotCUFkZCBjYXN0cy4KLQkoZml4ZWQyZmxvYXQpOiBBZGQgY2FzdC4KLQkoc2ZudF9nZXRfdmFyX3BzX25hbWUpOiBNYWtlIGBwJyBhbHdheXMgaW5pdGlhbGl6ZWQuCi0JQWRkIGNhc3RzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogQWRkIGNhc3RzLgotCi0yMDE3LTAzLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbZnRmdXp6ZXJdIExpbWl0IG51bWJlciBvZiB0ZXN0ZWQgZmFjZXMgYW5kIGluc3RhbmNlcy4KLQotCVRoaXMgaXMgaW5zcGlyZWQgYnkgdGhlIGRpc2N1c3Npb24gaW4gYW5kIGFuYWx5c2lzIG9mCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTg1OQotCi0JKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBVc2Ugb25seQotCXVwIHRvIDIwIGZhY2UgaW5kaWNlcy4KLQlVc2Ugb25seSB1cCB0byAyMCBpbnN0YW5jZSBpbmRpY2VzLgotCi0yMDE3LTAzLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYzogSW1wcm92ZSByZWFkYWJpbGl0eTsgZm9ybWF0dGluZy4KLQotMjAxNy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEltcGxlbWVudCBQUyBuYW1lcyBmb3IgZm9udCBpbnN0YW5jZXMgWzMvM10uCi0KLQlFdmVyeXRoaW5nIGlzIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IE5ldyBmaWVsZHMKLQlgdmFyX3Bvc3RzY3JpcHRfcHJlZml4JyBhbmQgYHZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4nLgotCi0JKiBzcmMvc2ZudC9zZmRyaXZlci5jOiBJbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ILgotCShzZm50X2lzX2FscGhhbnVtZXJpYyk6IE5ldyB3cmFwcGVyZnVuY3Rpb24gZm9yIGBmdF9pc2FsbnVtJy4KLQkoZ2V0X3dpbl9zdHJpbmcsIGdldF9hcHBsZV9zdHJpbmcpOiBSZW1vdmUgYGNvbnN0JyBmcm9tIHJldHVybgotCXZhbHVlLgotCShNQVhfVkFMVUVfREVTQ1JJUFRPUl9MRU4sIE1BWF9QU19OQU1FX0xFTik6IE5ldyBtYWNyb3MuCi0JKGhleGRpZ2l0cyk6IE5ldyBhcnJheS4KLQkoc2ZudF9nZXRfdmFyX3BzX25hbWUpOiBOZXcgZnVuY3Rpb24sIGltcGxlbWVudGluZyBBZG9iZSBUZWNoTm90ZQotCTU5MDIgdG8gY29uc3RydWN0IGEgUFMgbmFtZSBmb3IgYSB2YXJpYXRpb24gZm9udCBpbnN0YW5jZS4KLQkoc2ZudF9nZXRfcHNfbmFtZSk6IENhbGwgYHNmbnRfZ2V0X3Zhcl9wc19uYW1lJyBmb3IgZm9udCBpbnN0YW5jZXMuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2RvbmVfZmFjZSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X3NldF9tbV9ibGVuZCk6IFJlc2V0Ci0JYGZhY2UtPnBvc3RzY3JpcHRfbmFtZScgdG8gdHJpZ2dlciByZWNhbGN1bGF0aW9uIGZvciBuZXcgaW5zdGFuY2UKLQlwYXJhbWV0ZXJzLgotCi0yMDE3LTAzLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gSW1wbGVtZW50IFBTIG5hbWVzIGZvciBmb250IGluc3RhbmNlcyBbMi8zXS4KLQotCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoZml4MmZsb2F0KSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06Ci0JTmV3IGZ1bmN0aW9uIHRvIGZpbmQgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIGEgMTYuMTYKLQlmcmFjdGlvbmFsIG51bWJlci4KLQotMjAxNy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEltcGxlbWVudCBQUyBuYW1lcyBmb3IgZm9udCBpbnN0YW5jZXMgWzEvM10uCi0KLQlBZGQgMTI4Yml0IE11cm11ckhhc2ggMyBmdW5jdGlvbi4KLQotCUV2ZXJ5dGhpbmcgaXMgZ3VhcmRlZCB3aXRoIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCi0KLQkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKFJPVEwzMik6IE5ldyBtYWNyby4KLQkoZm1peDMyLCBtdXJtdXJfaGFzaF8zXzEyOCk6IE5ldyBmdW5jdGlvbnMuCi0KLTIwMTctMDMtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gSWdub3JlIGludmFsaWQgTVZBUiB0YWdzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9ODM4Ci0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX212YXIpOiBJZ25vcmUgdmFsdWUgYW5kIGVtaXQKLQl3YXJuaW5nIGZvciBpbnZhbGlkIHRhZ3MuCi0JKHR0X2FwcGx5X212YXIpOiBJZ25vcmUgaW52YWxpZCB0YWdzLgotCi0yMDE3LTAzLTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFN0b3JlIGFuZCB1c2UgZGVzaWduIGNvb3JkaW5hdGVzIGFsc28uCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIChGVF9HZXRfVmFyX0JsZW5kX0Z1bmMpOgotCUFkZCBgbm9ybWFsaXplZGNvb3JkcycgYXJndW1lbnQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX0JsZW5kUmVjKTogQWRkIGBjb29yZHMnIGZpZWxkIHRvIHN0b3JlCi0JdGhlIGRlc2lnbiBjb29yZGluYXRlcyBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS4KLQlVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfTU1fQmxlbmQpOiBNb3ZlIGZ1bmN0aW9uYWxpdHkgdG8uLi4KLQkodHRfc2V0X21tX2JsZW5kKTogLi4uIE5ldyBmdW5jdGlvbi4KLQlDb252ZXJ0IGRhdGEgaW4gYG5vcm1hbGl6ZWRjb29yZHMnIGFycmF5IHRvIGBjb29yZHMnIGFycmF5IG9uCi0JZGVtYW5kLgotCShUVF9TZXRfVmFyX0Rlc2lnbik6IFN0b3JlIGFyZ3VtZW50IGRhdGEgaW4gYGNvb3JkcycgYXJyYXkuCi0JKFRUX0dldF9WYXJfRGVzaWduKTogR2V0IGRhdGEgZnJvbSBgY29vcmRzJyBhcnJheS4KLQkodHRfZ2V0X3Zhcl9ibGVuZCk6IFVwZGF0ZWQuCi0JKHR0X2RvbmVfYmxlbmQpOiBVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYywgc3JjL2NmZi9jZmZsb2FkLmggKGNmZl9nZXRfdmFyX2JsZW5kKTogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZ2V0Tm9ybWFsaXplZFZlY3Rvcik6IFVwZGF0ZWQuCi0KLQkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogVXBkYXRlZC4KLQotMjAxNy0wMy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0Jc3JjL3RydWV0eXBlL3R0Z3h2YXIuW2NoXTogcy9hdmFyX2NoZWNrZWQvYXZhcl9sb2FkZWQvLgotCi0yMDE3LTAzLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gQW5vdGhlciBmaXggZm9yIGJ1Z2d5IHZhcmlhdGlvbiBmb250cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTc1OQotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBXaGlsZSBzZXR0aW5nIG51bWJlciBvZgotCWluc3RhbmNlcyB0byB6ZXJvIGZvciBgQ0ZGJyBmb250cyB0YWJsZSwgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8KLQlgQ0ZGMicgcHJlc2VudCBhbHNvICh3aGljaCBnZXRzIHByaW9yaXR5KS4KLQotMjAxNy0wMy0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEltcHJvdmUgaGFuZGxpbmcgZm9yIGJ1Z2d5IHZhcmlhdGlvbiBmb250cy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTczOAotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBXaGlsZSBzZXR0aW5nIG51bWJlciBvZgotCWluc3RhbmNlcyB0byB6ZXJvIGZvciBgQ0ZGJyBmb250cyB0YWJsZSwgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8KLQlgZ2x5ZicgdGFibGUgcHJlc2VudCBhbHNvICh3aGljaCBnZXRzIHByaW9yaXR5KS4KLQotMjAxNy0wMy0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnQsIHRydWV0eXBlXSBBbHdheXMgcHJvdmlkZSBkZWZhdWx0IGluc3RhbmNlLgotCi0JQXMgZG9jdW1lbnRlZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiwgYW4gZW50cnkgZm9yIHRoZQotCWRlZmF1bHQgaW5zdGFuY2UgbWF5IGJlIG9taXR0ZWQgaW4gdGhlIG5hbWVkIGluc3RhbmNlIHRhYmxlLiAgSW4KLQlwYXJ0aWN1bGFyIHRoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZXJlIGlzIG5vIG5hbWVkIGluc3RhbmNlIHRhYmxlCi0JaW4gdGhlIGZvbnQgd2UgYWN0dWFsbHkgZG8gaGF2ZSBhIG5hbWVkIGluc3RhbmNlLCBuYW1lbHkgdGhlIGRlZmF1bHQKLQlpbnN0YW5jZS4KLQotCUZvciBjb25zaXN0ZW5jeSwgd2UgYWx3YXlzIHdhbnQgdGhlIGRlZmF1bHQgaW5zdGFuY2UgaW4gb3VyIGxpc3Qgb2YKLQluYW1lZCBpbnN0YW5jZXMuICBJZiBpdCBpcyBtaXNzaW5nLCB3ZSB0cnkgdG8gc3ludGhlc2l6ZSBpdC4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogQ2hlY2sgd2hldGhlciB0aGUgZGVmYXVsdAotCWluc3RhbmNlIGlzIGluIHRoZSB0YWJsZSBvZiBuYW1lZCBpbnN0YW5jZXMuICBPdGhlcndpc2UgYWRqdXN0Ci0JbnVtYmVyIG9mIGluc3RhbmNlcy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYzogSW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSC4KLQkoVFRfR2V0X01NX1Zhcik6IFVzZSBgZmFjZS0+cm9vdC5zdHlsZV9mbGFncycgYXMgdGhlIG51bWJlciBvZiBuYW1lZAotCWluc3RhbmNlcy4KLQlTeXRoZXNpemUgYSBuYW1lZCBpbnN0YW5jZSBlbnRyeSBpZiBuZWNlc3NhcnkuCi0JKHR0X2RvbmVfYmxlbmQpOiBGcmVlIGBub3JtYWxpemVkX3N0eWxlY29vcmRzJy4KLQotMjAxNy0wMy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIFJlbW92ZSByZWR1bmRhbnQgY29kZS4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogUmVtb3ZlIHNlY29uZCB0ZXN0IGZvcgotCWBudW1faW5zdGFuY2VzJywgd2hpY2ggd2lsbCBhbHdheXMgc3VjY2VlZC4KLQotMjAxNy0wMy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEFkZCBgZ2V0X25hbWVfaWQnIHNlcnZpY2UuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIChUVF9HZXRfTmFtZV9JRF9GdW5jKTogTmV3Ci0JdHlwZWRlZi4KLQkoU0ZOVF9JbnRlcmZhY2UpOiBBZGQgYGdldF9uYW1lX2lkJyBmaWVsZC4KLQkoRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKTogVXBkYXRlZC4KLQotCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2VhcmNoX25hbWVfaWQpOiBSZW5hbWUgdG8uLi4KLQkoc2ZudF9nZXRfbmFtZV9pZCk6IC4uLiB0aGlzLgotCShzZm50X2dldF9wc19uYW1lLCBzZm50X2ludGVyZmFjZSk6IFVwZGF0ZWQuCi0KLTIwMTctMDMtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTWFrZSBgVFRfU2V0X01NX0JsZW5kJyBzZXQgbmFtZWQgaW5zdGFuY2UgaW5kZXguCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX0JsZW5kKTogTmV3IGFycmF5Ci0JYG5vcm1hbGl6ZWRfc3R5bGVjb29yZHMnLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogQWxsb2NhdGUgYW5kIGZpbGwKLQlgbm9ybWFsaXplZF9zdHlsZWNvb3JkcycuCi0JKFRUX1NldF9NTV9CbGVuZCk6IENoZWNrIGluc3RhbmNlIHR1cGxlIGFuZCBhZGp1c3QgYGZhY2VfaW5kZXgnCi0JYWNjb3JkaW5nbHkuCi0KLTIwMTctMDMtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gU3BsaXQgb2ZmIGRlc2lnbmVyL25vcm1hbGl6ZWQgY29udmVyc2lvbiByb3V0aW5lcy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X1Zhcl9EZXNpZ24pOiBTcGxpdCBvZmYgY29udmVyc2lvbgotCWNvZGUgZGVzaWduZXItPm5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMgdG8uLi4KLQkoZnRfdmFyX3RvX25vcm1hbGl6ZWQpOiAuLi4gTmV3IGZ1bmN0aW9uLgotCShUVF9HZXRfVmFyX0Rlc2lnbik6IFNwbGl0IG9mZiBjb252ZXJzaW9uIGNvZGUgbm9ybWFsaXplZC0+ZGVzaWduZXIKLQljb29yZGluYXRlcyB0by4uLgotCShmdF92YXJfdG9fZGVzaWduKTogLi4uIE5ldyBmdW5jdGlvbi4KLQotMjAxNy0wMi0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEZ1cnRoZXIgZ2VuZXJhbGl6ZSBgc2ZudF9nZXRfcHNfbmFtZSc7IHJlcG9ydCBpbnZhbGlkIGRhdGEuCi0KLQkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfcHNfbWFwKTogTmV3IGFycmF5LgotCShzZm50X2lzX3Bvc3RzY3JpcHQpOiBOZXcgZnVuY3Rpb24uCi0JKGNoYXJfdHlwZV9mdW5jKTogTmV3IHR5cGVkZWYuCi0JKGdldF93aW5fc3RyaW5nLCBnZXRfYXBwbGVfc3RyaW5nKTogQWRkIGFyZ3VtZW50IHRvIHNwZWNpZnkKLQljaGFyYWN0ZXIgY2hlY2tpbmcgZnVuY3Rpb24uCi0JQWRkIGFyZ3VtZW50IHdoZXRoZXIgYXJndW1lbnQgY2hlY2tpbmcgZmFpbHVyZXMgc2hvdWxkIGJlIHJlcG9ydGVkLgotCVVwZGF0ZSBjYWxsZXJzLgotCShzZWFyY2hfbmFtZV9pZCk6IEZpeCByZXR1cm4gdmFsdWUuCi0KLTIwMTctMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBTcGxpdCBvZmYgYW5vdGhlciBiaXQgb2YgYHNmbnRfZ2V0X3BzX25hbWUnLgotCi0JKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9wc19uYW1lKTogU3BsaXQgb2ZmIHNvbWUKLQlmdW5jdGlvbmFsaXR5IGludG8uLi4KLQkoc2VhcmNoX25hbWVfaWQpOiAuLi4gTmV3IGZ1bmN0aW9uLgotCi0yMDE3LTAyLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gTW9kdWxhcml6ZSBgc2ZudF9nZXRfcHNfbmFtZScuCi0KLQkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X3BzX25hbWUpOiBTcGxpdCBvZmYgc29tZQotCWZ1bmN0aW9uYWxpdHkgaW50by4uLgotCShJU19XSU4sIElTX0FQUExFKTogLi4uIE5ldyBtYWNyb3MuCi0JKGdldF93aW5fc3RyaW5nLCBnZXRfYXBwbGVfc3RyaW5nKTogLi4uIE5ldyBmdW5jdGlvbnMuCi0KLTIwMTctMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTWlub3IgaW1wcm92ZW1lbnQuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAotCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBSZW1vdmUgdW5uZWNlc3NhcnkgdGVzdHMuCi0KLTIwMTctMDItMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2UpOiBzL2lzQ0ZGMi9pc19jZmYyLy4KLQotCUZvciBvcnRob2dvbmFsaXR5IHdpdGggb3RoZXIgc3RydWN0dXJlIGZpZWxkIG5hbWVzLgotCi0JVXBkYXRlIGFsbCB1c2Vycy4KLQotMjAxNy0wMi0yMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9obGluZSk6IEltcHJvdmUgY29kZS4KLQotMjAxNy0wMi0yMCAgRG9taW5payBSw7Z0dHNjaGVzICA8ZHJvdHRAZ29vZ2xlLmNvbT4KLQotCUZpeCBzb21lIGB0dG5hbWVpZC5oJyBlbnRyaWVzICgjNTAzMTMpLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6Ci0Jcy9UVF9NU19MQU5HSURfU1BBTklTSF9JTlRFUk5BVElPTkFMX1NPUlQvVFRfTVNfTEFOR0lEX1NQQU5JU0hfU1BBSU5fSU5URVJOQVRJT05BTF9TT1JULywKLQlzL1RUX01TX0xBTkdJRF9NT05HT0xJQU5fTU9OR09MSUFfTU9OR09MSUEvVFRfTVNfTEFOR0lEX01PTkdPTElBTl9NT05HT0xJQV9NT05HT0xJQU4vLgotCi0yMDE3LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBGaW5pc2ggc3VwcG9ydCBmb3IgYHJhbmRvbScgb3BlcmF0b3IuCi0KLQkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX1N1YkZvbnRSZWMpOiBBZGQgYHJhbmRvbScgZmllbGQuCi0KLQkqIHNyYy9jZmYvY2Zmb2Jqcy5jOiBVcGRhdGVkLgotCShjZmZfZHJpdmVyX2luaXQpOiBJbml0aWFsaXplIHJhbmRvbSBzZWVkIHZhbHVlLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX3JhbmRvbSk6IE5ldyBmdW5jdGlvbi4KLQkoY2ZmX3N1YmZvbnRfbG9hZCk6IEFkZCBgZmFjZScgYXJndW1lbnQuCi0JVXBkYXRlIGFsbCBjYWxsZXJzLgotCUluaXRpYWxpemUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBhIHByb3BlciBzZWVkIHZhbHVlLgotCShjZmZfZm9udF9sb2FkKTogQWRkIGBmYWNlJyBhcmd1bWVudC4KLQlVcGRhdGUgYWxsIGNhbGxlcnMuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmMmludHJwLmMgKENGMl9GSVhNRSk6IFJlbW92ZWQuCi0JKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjZjJfZXNjUkFORE9NPjogSW1wbGVtZW50IG9wY29kZS4KLQotCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IERvbid0Ci0JaW5pdGlhbGl6ZSByYW5kb20gc2VlZCB2YWx1ZS4KLQk8Y2ZmX29wX3JhbmRvbT46IFVzZSBuZXcgcmFuZG9tIHNlZWQgZnJhbWV3b3JrLgotCi0yMDE3LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBTYW5pdGl6ZSBgaW5pdGlhbFJhbmRvbVNlZWQnLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogTWFrZQotCWBpbml0aWFsX3JhbmRvbV9zZWVkJyB2YWx1ZSBhbHdheXMgcG9zaXRpdmUuCi0KLTIwMTctMDItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEludHJvZHVjZSBgcmFuZG9tLXNlZWQnIHByb3BlcnR5ICgyLzIpLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYzogSW5jbHVkZSBgRlRfQ0ZGX0RSSVZFUl9IJy4KLQkob3Blbl9mYWNlKTogSW5pdGlhbGl6ZSBgZmFjZS0+aW50ZXJuYWwtPnJhbmRvbV9zZWVkJy4KLQkoRlRfRmFjZV9Qcm9wZXJ0aWVzKTogSGFuZGxlIGBGVF9QQVJBTV9UQUdfUkFORE9NX1NFRUQnLgotCi0JKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wcm9wZXJ0eV9zZXQpOiBIYW5kbGUgYHJhbmRvbS1zZWVkJwotCXByb3BlcnR5LgotCi0yMDE3LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBJbnRyb2R1Y2UgYHJhbmRvbS1zZWVkJyBwcm9wZXJ0eSAoMS8yKS4KLQotCVdlIG5lZWQgdGhpcyBmb3Igc3VwcG9ydCBvZiB0aGUgYHJhbmRvbScgb3BlcmF0b3IuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaCAoRlRfUEFSQU1fVEFHX1JBTkRPTV9TRUVEKTogTmV3IG1hY3JvLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKTogTmV3Ci0JZmllbGQgYHJhbmRvbV9zZWVkJy4KLQotCSogc3JjL2NmZi9jZmZvYmpzLmggKENGRl9Ecml2ZXJSZWMpOiBOZXcgZmllbGQgYHJhbmRvbV9zZWVkJy4KLQotMjAxNy0wMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JUmVtb3ZlIGNsYW5nIHdhcm5pbmdzLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3NvcnRfYmx1ZSk6IEFkZCBtaXNzaW5nIGBzdGF0aWMnCi0Ja2V5d29yZC4KLQotCSogc3JjL2Jhc2UvZnRtbS5jIChGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywKLQlGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsIEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOgotCUluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMuCi0KLTIwMTctMDItMTYgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JQWRkIGZhY2UgcHJvcGVydHkgZm9yIHN0ZW0gZGFya2VuaW5nLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaCAoRlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HKTogTmV3Ci0JbWFjcm8uCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0ZhY2VfSW50ZXJuYWxSZWMpOiBBZGQKLQlgbm9fc3RlbV9kYXJrZW5pbmcnIGZpZWxkLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCksCi0Jc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoYWZfcHJvcGVydHlfc2V0KTogVXBkYXRlZC4KLQotCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEluY2x1ZGUgRlRfQVVUT0hJTlRFUl9ILgotCShmdF9vcGVuX2ZhY2VfaW50ZXJuYWwpOiBVcGRhdGVkLgotCShGVF9GYWNlX1Byb3BlcnRpZXMpOiBIYW5kbGUgRlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HLgotCi0JKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHJvcGVydHlfc2V0KTogVXBkYXRlZC4KLQotMjAxNy0wMi0xNiAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlBZGQgZmFjZSBwcm9wZXJ0eSBmb3IgTENEIGZpbHRlciB3ZWlnaHRzLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmggKEZUX1BBUkFNX1RBR19MQ0RfRklMVEVSX1dFSUdIVFMsCi0JRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMpOiBOZXcgbWFjcm9zLgotCShGVF9MY2RGaXZlVGFwRmlsdGVyKTogTmV3IHR5cGVkZWYuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRvYmpzLmggKEZUX0ZhY2VfSW50ZXJuYWxSZWMpCi0JW0ZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HXTogQWRkIGBsY2Rfd2VpZ2h0cycgZmllbGQuCi0JKEZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jKTogQ2hhbmdlIHRoaXJkIGFyZ3VtZW50IHRvIHdlaWdodHMgYXJyYXkuCi0JKGZ0X2xjZF9maWx0ZXJfZmlyKTogTmV3IHByb3RvdHlwZS4KLQkoRlRfTGlicmFyeVJlYyk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKF9mdF9sY2RfZmlsdGVyX2Zpcik6IFJlbmFtZWQgdG8uLi4KLQkoZnRfbGNkX2ZpbHRlcl9maXIpOiAuLi4gdGhpcyBiYXNlIGZ1bmN0aW9uLgotCVVwZGF0ZWQuCi0JKF9mdF9sY2RfZmlsdGVyX2xlZ2FjeSk6IFVwZGF0ZWQuCi0JKEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0cywgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIpOiBVcGRhdGVkLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfb3Blbl9mYWNlX2ludGVybmFsKTogVXBkYXRlZC4KLQkoRlRfRmFjZV9Qcm9wZXJ0aWVzKTogSGFuZGxlIEZUX1BBUkFNX1RBR19MQ0RfRklMVEVSX1dFSUdIVFMuCi0KLQkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKQotCVtGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IEhhbmRsZSBMQ0Qgd2VpZ2h0cyBmcm9tCi0JYEZUX0ZhY2VfSW50ZXJuYWwnLgotCi0yMDE3LTAyLTE0ICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUFkZCBuZXcgZnVuY3Rpb24gYEZUX0ZhY2VfUHJvcGVydGllcycuCi0KLQlUaGlzIGNvbW1pdCBwcm92aWRlcyB0aGUgZnJhbWV3b3JrLCB0byBiZSBmaWxsZWQgd2l0aCBzb21ldGhpbmcKLQl1c2VmdWwgaW4gdGhlIG5leHQgY29tbWl0cy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9GYWNlX1Byb3BlcnRpZXMpOiBEZWNsYXJlLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfRmFjZV9Qcm9wZXJ0aWVzKTogTmV3IGZ1bmN0aW9uLgotCi0yMDE3LTAyLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gUHJldmVudCBvdmVybGFwcGluZyBibHVlIHpvbmVzLgotCi0JUHJvYmxlbSByZXBvcnRlZCBhcwotCi0JICBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2ZvbnRzL2lzc3Vlcy82MzIKLQotCVRoZSBmb250IGluIHF1ZXN0aW9uIChOdW5pdG8pIGhhcyB2YWx1ZXMgNzA1IGFuZCA3MTMgZm9yIHRoZQotCXJlZmVyZW5jZSBhbmQgb3ZlcnNob290IHZhbHVlcywgcmVzcGVjdGl2ZWx5LCBvZiB0aGUgZmlyc3QgYmx1ZQotCXpvbmUuICBCbHVlIHpvbmUgMiwgaG93ZXZlciwgaGFzIHZhbHVlIDcxMCBmb3IgYm90aCB0aGUgcmVmZXJlbmNlCi0JYW5kIG92ZXJzaG9vdC4gIEF0IDEycHBlbSwgcmVmZXJlbmNlIGFuZCBvdmVyc2hvb3Qgb2YgYmx1ZSB6b25lIDAKLQliZWNvbWVzIDhweCwgd2hpbGUgYmx1ZSB6b25lIDIgYmVjb21lcyA5cHguCi0KLQlBIHBlY3VsaWFyaXR5IG9mIHRoaXMgZm9udCBpcyB0aGF0IHRoZSB0b3BzIG9mIGlzb2xhdGVkIHZlcnRpY2FsCi0Jc3RlbXMgbGlrZSBgTicgaGF2ZSBhIHNsaWdodCBvdmVyc2hvb3QgYWxzby4gIFRoZSBhdXRvLWhpbnRlciB0cmllcwotCXRvIGZpbmQgdGhlIG5lYXJlc3QgYmx1ZSB6b25lIHVzaW5nIHRoZSAqb3JpZ2luYWwqIGNvb3JkaW5hdGVzLiAgRm9yCi0JdmVydGljYWwgc3RlbXMsIHRoaXMgaXMgdmFsdWUgNzEzLiAgRm9yIG5vcm1hbCBob3Jpem9udGFsIHRvcHMgbGlrZQotCWluIGNoYXJhY3RlciBgRScsIHRoaXMgaXMgdmFsdWUgNzEwLiAgU2luY2UgdmFsdWUgNzEzIGlzIG1hcHBlZCB0bwotCThweCBidXQgdmFsdWUgNzEwIHRvIDlweCwgYE4nIGFuZCBzaW1pbGFyIGNoYXJhY3RlcnMgYXJlIG9uZSBwaXhlbAotCWhpZ2hlciB0aGFuIGBFJywgd2hpY2ggbG9va3MgdmVyeSBiYWQuCi0KLQlUaGlzIGNvbW1pdCBzYW5pdGl6ZXMgYmx1ZSB6b25lcyB0byBhdm9pZCBzdWNoIGEgYmVoYXZpb3VyLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX3NvcnRfYmx1ZSk6IE5ldyBmdW5jdGlvbi4KLQkoYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzKTogU29ydCBibHVlIHZhbHVlcyBhbmQgcmVtb3ZlIG92ZXJsYXBzLgotCi0yMDE3LTAyLTEyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3N3ZWVwKTogSW1wcm92ZSBjb2RlLgotCi0yMDE3LTAyLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEltcGxlbWVudCBgVlZBUicgdGFibGUgc3VwcG9ydC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCAoR1hfSFZhclRhYmxlKTogUmVuYW1lZCB0by4uLgotCShHWF9IVlZhclRhYmxlKTogLi4uVGhpcy4KLQkoR1hfQmxlbmQpOiBBZGQgZmllbGRzIGZvciBgVlZBUicgdGFibGUgaGFuZGxpbmcuCi0JT3RoZXIgbWlub3IgdXBkYXRlcy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfaHZhcik6IFJlbmFtZWQgdG8uLi4KLQkoZnRfdmFyX2xvYWRfaHZ2YXIpOiAuLi5UaGlzLgotCUhhbmRsZSBWVkFSIGxvYWRpbmcgYWxzbyAoY29udHJvbGxlZCBieSBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlcikuCi0JKHR0X2hhZHZhbmNlX2FkanVzdCk6IFJlbmFtZWQgdG8uLi4KLQkodHRfaHZhZHZhbmNlX2FkanVzdCk6IC4uLlRoaXMuCi0JSGFuZGxlIGFwcGxpY2F0aW9uIG9mIGFkdmFuY2UgaGVpZ2h0IGFsc28gKGNvbnRyb2xsZWQgYnkgYW4KLQlhZGRpdGlvbmFsIHBhcmFtZXRlcikuCi0JKHR0X2hhZHZhbmNlX2FkanVzdCwgdHRfdmFkdmFuY2VfYWRqdXN0KTogV3JhcHBlcnMgZm9yCi0JYHR0X2h2YWR2YW5jZV9hZGp1c3QnLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMpOiBVcGRhdGVkLgotCi0yMDE3LTAyLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gVXNlIGJldHRlciBibHVlIHpvbmUgY2hhcmFjdGVycyBmb3IgbG93ZXJjYXNlIGxhdGluLgotCi0JVGhlIG51bWJlciBvZiBsb3dlcmNhc2UgY2hhcmFjdGVycyBmb3IgY29tcHV0aW5nIHRoZSB0b3AgZmxhdCBibHVlCi0Jem9uZSB2YWx1ZSB3YXMgdG9vIHNtYWxsIChpbiBtb3N0IGNhc2VzIG9ubHkgYHgnIGFuZCBgeicpLiAgSWYgb25lCi0Jb2YgdGhlIHR3byBjaGFyYWN0ZXJzIGhhcyBhIGxhcmdlIHNlcmlmLCBzYXksIGl0IGNhbiBoYXBwZW4gdGhhdAotCUZyZWVUeXBlIG11c3Qgc2VsZWN0IGJldHdlZW4gdHdvIGRpZmZlcmVudCB2YWx1ZXMsIGhhdmluZyBhIDUwJQotCWNoYW5jZSB0byB1c2UgdGhlIHdyb25nIG9uZS4gIEFzIGEgcmVzdWx0LCByZW5kZXJpbmcgYXQgbGFyZ2VyIFBQRU0KLQl2YWx1ZXMgY291bGQgeWllbGQgdW5ldmVuIGxvd2VyY2FzZSBnbHlwaCBoZWlnaHRzLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSBDaHJpc3RvcGggS29lYmVybGluIDxjaHJpc3RvcGhAa29lLmJlcmxpbj4uCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQgKEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMKTogUmVwbGFjZWQKLQl3aXRoLi4uCi0JKEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX1RPUCwgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfQk9UVE9NKToKLQkuLi4gTmV3LCBleHRlbmRlZCBzZXRzLgotCShBRl9CTFVFX1NUUklOR1NFVF9MQVROKTogVXBkYXRlZC4KLQotCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNjci9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KLQotMjAxNy0wMi0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JTWFrZSBgZnJlZXR5cGUtY29uZmlnJyBhIHdyYXBwZXIgb2YgYHBrZy1jb25maWcnIGlmIHBvc3NpYmxlLgotCi0JQmFzZWQgb24gaWRlYXMgdGFrZW4gZnJvbQotCi0JICBodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9jZ2l0L3JwbXMvZnJlZXR5cGUuZ2l0L3RyZWUvZnJlZXR5cGUtbXVsdGlsaWIucGF0Y2gKLQkgIGh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2NnaXQvcnBtcy9mcmVldHlwZS5naXQvdHJlZS9mcmVldHlwZS0yLjUuMy1mcmVldHlwZS1jb25maWctcHJlZml4LnBhdGNoCi0KLQkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogUmV3cml0dGVuLiAgVXNlIGBwa2ctY29uZmlnJyB0bwotCXNldCBvdXRwdXQgdmFyaWFibGVzIGlmIHByb2dyYW0gaXMgYXZhaWxhYmxlLgotCi0JKiBkb2NzL0NIQU5HRVMsIGRvY3MvZnJlZXR5cGUtY29uZmlnLjE6IFVwZGF0ZWQuCi0KLTIwMTctMDItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGZyZWV0eXBlLWNvbmZpZyk6IEZpeCBwZXJtaXNzaW9ucy4KLQotMjAxNy0wMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvYXV0b2ZpdC9hZmdsb2JhbC5jIChhZl9mYWNlX2dsb2JhbHNfZnJlZSk6IEVyYXNlIHVzZWxlc3MgY29kZS4KLQotMjAxNy0wMi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oIChGVF9HQVNQX1NZTU1FVFJJQ19HUklERklUKTogRml4IHZhbHVlLgotCi0JUmVwb3J0ZWQgYnkgQmVoZGFkLgotCi0yMDE3LTAyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZpeCBNVkFSIHBvc3QtYWN0aW9uIGhhbmRsaW5nLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NTA5Ci0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9yZXNldCk6IERvIG5vdGhpbmcgZm9yIENGRjIuICBUaGlzCi0JaXMgaW1wb3J0YW50IHRvIG1ha2UgYHR0X3NpemVfcmVzZXRfaXRlcmF0b3InIChjYWxsZWQgaW4KLQlgdHRfYXBwbHlfbXZhcicpIGFsd2F5cyB3b3JrLgotCi0yMDE3LTAyLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlNYWtlIGNvbXBpbGF0aW9uIHdpdGggRlRfQ09ORklHX09QVElPTl9QSUMgd29yayBhZ2Fpbi4KLQotCUFsbCBjb2RlIGNvbW1pdHRlZCBoZXJlIGlzIGd1YXJkZWQgd2l0aCBgRlRfQ09ORklHX09QVElPTl9QSUMnLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmgKLQkoRlRfREVGSU5FX1NFUlZJQ0VfTUVUUklDU1ZBUklBVElPTlNSRUMpOiBSZW1vdmUgdHJhaWxpbmcgc2VtaWNvbG9uLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfZWRnZXMsCi0JYWZfbGF0aW5faGludF9lZGdlcyk6IFByb3ZpZGUgYGdsb2JhbHMnIHZhcmlhYmxlLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IFJlbW92ZSBzaGFkb3dpbmcKLQl2YXJpYWJsZS4KLQotCSogc3JjL2F1dG9maXQvYWZtb2R1bGUuYyAoQUZfU0NSSVBUX0NMQVNTRVNfR0VULAotCUFGX1NUWUxFX0NMQVNTRVNfR0VUKTogUmVkZWZpbmUuCi0KLQkqIHNyYy9hdXRvZml0L2FmdHlwZXMuaCAoQUZfREVGSU5FX1dSSVRJTkdfU1lTVEVNX0NMQVNTKTogRml4IHR5cG8uCi0KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoQ0ZGX0ZJRUxEX0JMRU5EKTogUHJvdmlkZSBpdC4KLQotCSogc3JjL2NmZi9jZmZwaWMuaCAoQ2ZmTW9kdWxlUElDKTogRml4IHR5cG8uCi0KLTIwMTctMDEtMzEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX3NjYW5saW5lKTogSW1wcm92ZSBjb2RlLgotCi0yMDE3LTAxLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBQcm92aWRlIG1ldHJpY3MgdmFyaWF0aW9uIHNlcnZpY2UgaW50ZXJmYWNlICgjNTAxOTYpLgotCi0JT25seSBub3cgSSd2ZSBnb3QgYW4gT1RGIHdpdGggYW4gSFZBUiB0YWJsZSBmb3IgdGVzdGluZy4uLgotCi0JVGhlIGNvZGUgaW4gYGZ0bW0uYycgdXNlcyBgRlRfRkFDRV9MT09LVVBfU0VSVklDRScgdG8gZ2V0IHRoZQotCW1ldHJpY3MgdmFyaWF0aW9ucyBpbnRlcmZhY2UuICBIb3dldmVyLCB0aGlzIGRpZG4ndCB3b3JrIHdpdGgKLQlgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFJyB1c2VkIGluIGBzZm50X2luaXRfZmFjZScuCi0KLQkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ILgotCShjZmZfaGFkdmFuY2VfYWRqdXN0LCBjZmZfbWV0cmljc19hZGp1c3QpOiBXcmFwcGVyIGZ1bmN0aW9ucyBmb3IKLQltZXRyaWMgc2VydmljZSBmdW5jdGlvbnMgZnJvbSB0aGUgYHRydWV0eXBlJyBtb2R1bGUuCi0JKGNmZl9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucyk6IE5ldyBzZXJ2aWNlLgotCShjZmZfc2VydmljZXMpOiBVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmZnBpYy5oIChDRkZfU0VSVklDRV9NRVRSSUNTX1ZBUl9HRVQpOiBOZXcgbWFjcm8uCi0JW0ZUX0NPTkZJR19PUFRJT05fUElDXTogU3luY2hyb25pemUgY29kZS4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogUmVwbGFjZSBjYWxsIHRvCi0JRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFIHdpdGggYGZ0X21vZHVsZV9nZXRfc2VydmljZScgdG8gYWx3YXlzCi0JbG9hZCB0aGUgc2VydmljZSBmcm9tIHRoZSBgdHJ1ZXR5cGUnIG1vZHVsZS4KLQotMjAxNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JQWRkIGZyYW1ld29yayB0byBzdXBwb3J0IHNlcnZpY2VzIHdpdGggOSBmdW5jdGlvbnMuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzkpOgotCU5ldyBtYWNyby4KLQotMjAxNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIEZpeCBlcnJvciBoYW5kaW5nIGluIE1NIGZ1bmN0aW9ucy4KLQotCSogc3JjL2Jhc2UvZnRtbS5jIChGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywKLQlGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsIEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOgotCUltcGxlbWVudCBpdC4KLQotMjAxNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBGaXggc2FuaXR5IGNoZWNrIGZvciBgZ3ZhcicgdGFibGUgKCM1MDE4NCkuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2d2YXIpOiBUaGVyZSBtaWdodCBiZSBtaXNzaW5nCi0JdmFyaWF0aW9uIGRhdGEgZm9yIHNvbWUgZ2x5cGhzLgotCi0yMDE3LTAxLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gQXZvaWQgdW5pbml0aWFsaXplZCBqdW1wcyAoIzUwMTkxKS4KLQotCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX21ldHJpY3NfY2hlY2tfZGlnaXRzKSwKLQlzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfY2hlY2tfZGlnaXRzKTogSW5pdGlhbGl6ZQotCWBhZHZhbmNlJy4KLQotMjAxNy0wMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0Jcy9HQjIzMTIvUFJDLy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9FTkNPRElOR19QUkMpOiBOZXcgZW51bSB2YWx1ZS4KLQkoRlRfRU5DT0RJTkdfR0IyMzEyKTogRGVwcmVjYXRlZC4KLQotCSogaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oIChUVF9NU19JRF9QUkMpOiBOZXcgbWFjcm8uCi0JKFRUX01TX0lEX0dCMjMxMik6IERlcHJlY2F0ZWQuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2ZpbmRfZW5jb2RpbmcpOiBVcGRhdGVkLgotCi0JKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCi0KLTIwMTctMDEtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtiYXNlXSBBZGQgYEZUX0dldF9TZm50X0xhbmdUYWcnIGZ1bmN0aW9uLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmggKEZUX1NmbnRMYW5nVGFnKTogTmV3IHN0cnVjdHVyZS4KLQkoRlRfR2V0X1NmbnRfTGFuZ1RhZyk6IE5ldyBkZWNsYXJhdGlvbi4KLQotCSogc3JjL2Jhc2UvZnRzbmFtZXMuYyAoRlRfR2V0X1NmbnRfTGFuZ1RhZyk6IE5ldyBmdW5jdGlvbi4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE3LTAxLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gU3VwcG9ydCBgbmFtZScgdGFibGUgZm9ybWF0IDEuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9MYW5nVGFnUmVjKTogTmV3Ci0Jc3RydWN0dXJlLgotCShUVF9OYW1lVGFibGVSZWMpOiBBZGQgZmllbGRzIGBudW1MYW5nVGFnUmVjb3JkcycgYW5kIGBsYW5nVGFncycuCi0KLQkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbmFtZSk6IEFkZCBzdXBwb3J0IGZvciBsYW5ndWFnZQotCXRhZ3MuCi0JUmVkdWNlIGFycmF5IHNpemUgb2YgbmFtZSBzdHJpbmdzIGluIGNhc2Ugb2YgaW52YWxpZCBlbnRyaWVzLgotCSh0dF9mYWNlX2ZyZWVfbmFtZSk6IFVwZGF0ZWQuCi0KLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KLQotMjAxNy0wMS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIHMvVFRfTmFtZUVudHJ5L1RUX05hbWUvLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfTmFtZUVudHJ5UmVjKTogUmVuYW1lZAotCXRvLi4uCi0JKFRUX05hbWVSZWMpOiBUaGlzLgotCShUVF9OYW1lVGFibGVSZWMpOiBVcGRhdGVkLgotCi0JKiBzcmMvYmFzZS9mdHNuYW1lcy5jIChGVF9HZXRfU2ZudF9OYW1lKTogVXBkYXRlZC4KLQotCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9nZXRfcHNfbmFtZSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jICh0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fdXRmMTYsCi0JdHRfbmFtZV9lbnRyeV9hc2NpaV9mcm9tX290aGVyKTogUmVuYW1lZCB0by4uLgotCSh0dF9uYW1lX2FzY2lpX2Zyb21fdXRmMTYsIHR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV9vdGhlcik6IFRoaXMsCi0JcmVzcGVjdGl2ZWx5LgotCShUVF9OYW1lRW50cnlfQ29udmVydEZ1bmMpOiBSZW5hbWVkIHRvLi4uCi0JKFRUX05hbWVfQ29udmVydEZ1bmMpOiBUaGlzLgotCSh0dF9mYWNlX2dldF9uYW1lKTogVXBkYXRlZC4KLQotCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9uYW1lLCB0dF9mYWNlX2ZyZWVfbmFtZSk6Ci0JVXBkYXRlZC4KLQotMjAxNy0wMS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEZpeCBQb3N0c2NyaXB0IG5hbWUgc2VydmljZSBmb3Igc3ltYm9sIGZvbnRzLgotCi0JKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9wc19uYW1lKTogQWNjZXB0IFBJRC9FSUQ9My8wCi0JZW50cmllcyBhbHNvLgotCi0yMDE3LTAxLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZvciBPcGVuVHlwZSAxLjc6IHMvcHJlZmVycmVkL3R5cG9ncmFwaGljLyAoc3ViKWZhbWlseS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCi0JKEZUX1BBUkFNX1RBR19JR05PUkVfVFlQT0dSQVBISUNfRkFNSUxZLAotCUZUX1BBUkFNX1RBR19JR05PUkVfVFlQT0dSQVBISUNfU1VCRkFNSUxZKTogTmV3IG1hY3Jvcy4KLQkoRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfRkFNSUxZLAotCUZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWSk6IERlcHJlY2F0ZWQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaCAoVFRfTkFNRV9JRF9UWVBPR1JBUEhJQ19GQU1JTFksCi0JVFRfTkFNRV9JRF9UWVBPR1JBUEhJQ19TVUJGQU1JTFkpOiBOZXcgbWFjcm9zLgotCShUVF9OQU1FX0lEX1BSRUZFUlJFRF9GQU1JTFksIFRUX05BTUVfSURfUFJFRkVSUkVEX1NVQkZBTUlMWSk6Ci0JRGVwcmVjYXRlZC4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogVXBkYXRlZC4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE3LTAxLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmFzZV0gQWRkIGBGVF9TZXRfRGVmYXVsdF9Qcm9wZXJ0aWVzJyAoIzQ5MTg3KS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oOiBBZGQgZGVjbGFyYXRpb24uCi0KLQkqIHNyYy9iYXNlL2Z0aW5pdC5jIChmdF9zZXRfZGVmYXVsdF9wcm9wZXJ0aWVzKTogUmVuYW1lZCB0by4uLgotCShGVF9TZXRfRGVmYXVsdF9Qcm9wZXJ0aWVzKTogLi4uIHRoaXMuCi0JKEZUX0luaXRfRnJlZVR5cGUpOiBVcGRhdGVkLgotCi0JKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCi0KLTIwMTctMDEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTWlub3IgdXBkYXRlcyBmb3IgT3BlblR5cGUgMS44LjEuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX01WYXJUYWJsZSk6IGBheGlzQ291bnQnIGhhcyBiZWVuCi0JcmVtb3ZlZCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uOyBpdCBpcyBub3cgcmVzZXJ2ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX212YXIpOiBVcGRhdGVkLgotCShHWF9GVmFyX0hlYWQpOiBSZW1vdmUgYGNvdW50U2l6ZVBhaXJzJzsgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YQotCWZpZWxkIGluIHRoZSBgTVZBUicgdGFibGUgaXMgbm93IHJlc2VydmVkLgotCShmdmFyX2ZpZWxkcyk6IFVwZGF0ZWQuCi0KLTIwMTctMDEtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gQXZvaWQgc2VnZmF1bHQgZm9yIGludmFsaWQgdmFyaWF0aW9uIGRhdGEuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2l0ZW1fdmFyaWF0aW9uX3N0b3JlKTogQXNzdXJlCi0JYGl0ZW1Db3VudCcgaXMgbm90IHplcm8uCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD00NDEKLQotMjAxNy0wMS0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogQWRqdXN0IGxvb3AgZGV0ZWN0b3IgbGltaXRzLgotCi0yMDE3LTAxLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaDogVXBkYXRlZCB0byBPcGVuVHlwZSAxLjguMS4KLQotCShUVF9BUFBMRV9JRF9GVUxMX1VOSUNPREUpOiBOZXcgbWFjcm8uCi0KLQkoVFRfTVNfTEFOR0lEX0JPU05JQU5fQk9TTklBX0hFUlpfQ1lSSUxMSUMsCi0JVFRfTVNfTEFOR0lEX1VQUEVSX1NPUkJJQU5fR0VSTUFOWSwKLQlUVF9NU19MQU5HSURfTE9XRVJfU09SQklBTl9HRVJNQU5ZLCBUVF9NU19MQU5HSURfSVJJU0hfSVJFTEFORCwKLQlUVF9NU19MQU5HSURfSU5VS1RJVFVUX0NBTkFEQV9MQVRJTiwgVFRfTVNfTEFOR0lEX0JBU0hLSVJfUlVTU0lBLAotCVRUX01TX0xBTkdJRF9MVVhFTUJPVVJHSVNIX0xVWEVNQk9VUkcsCi0JVFRfTVNfTEFOR0lEX0dSRUVOTEFORElDX0dSRUVOTEFORCwgVFRfTVNfTEFOR0lEX01BUFVEVU5HVU5fQ0hJTEUsCi0JVFRfTVNfTEFOR0lEX01PSEFXS19NT0hBV0ssIFRUX01TX0xBTkdJRF9CUkVUT05fRlJBTkNFLAotCVRUX01TX0xBTkdJRF9PQ0NJVEFOX0ZSQU5DRSwgVFRfTVNfTEFOR0lEX0NPUlNJQ0FOX0ZSQU5DRSwKLQlUVF9NU19MQU5HSURfQUxTQVRJQU5fRlJBTkNFLCBUVF9NU19MQU5HSURfWUFLVVRfUlVTU0lBLAotCVRUX01TX0xBTkdJRF9LSUNIRV9HVUFURU1BTEEsIFRUX01TX0xBTkdJRF9LSU5ZQVJXQU5EQV9SV0FOREEsCi0JVFRfTVNfTEFOR0lEX1dPTE9GX1NFTkVHQUwsIFRUX01TX0xBTkdJRF9EQVJJX0FGR0hBTklTVEFOKTogTmV3Ci0JbWFjcm9zLgotCi0JKFRUX01TX0xBTkdJRF9TRVJCSUFOX0JPU05JQV9IRVJaX0NZUklMTElDKTogRml4IHZhbHVlLgotCi0JKFRUX01TX0xBTkdJRF9HRVJNQU5fTElFQ0hURU5TVEVJTiwgVFRfTVNfTEFOR0lEX0NBVEFMQU5fQ0FUQUxBTiwKLQlUVF9NU19MQU5HSURfQ0hJTkVTRV9NQUNBTywgVFRfTVNfTEFOR0lEX1NQQU5JU0hfU1BBSU5fTU9ERVJOX1NPUlQsCi0JVFRfTVNfTEFOR0lEX0tPUkVBTl9LT1JFQSwgVFRfTVNfTEFOR0lEX1JPTUFOU0hfU1dJVFpFUkxBTkQsCi0JVFRfTVNfTEFOR0lEX1NMT1ZFTklBTl9TTE9WRU5JQSwgVFRfTVNfTEFOR0lEX0JBU1FVRV9CQVNRVUUsCi0JVFRfTVNfTEFOR0lEX1NFVFNXQU5BX1NPVVRIX0FGUklDQSwKLQlUVF9NU19MQU5HSURfSVNJWEhPU0FfU09VVEhfQUZSSUNBLAotCVRUX01TX0xBTkdJRF9JU0laVUxVX1NPVVRIX0FGUklDQSwgVFRfTVNfTEFOR0lEX0tBWkFLSF9LQVpBS0hTVEFOLAotCVRUX01TX0xBTkdJRF9LWVJHWVpfS1lSR1laU1RBTiwgVFRfTVNfTEFOR0lEX0tJU1dBSElMSV9LRU5ZQSwKLQlUVF9NU19MQU5HSURfVEFUQVJfUlVTU0lBLCBUVF9NU19MQU5HSURfT0RJQV9JTkRJQSwKLQlUVF9NU19MQU5HSURfTU9OR09MSUFOX1BSQywgVFRfTVNfTEFOR0lEX1RJQkVUQU5fUFJDLAotCVRUX01TX0xBTkdJRF9XRUxTSF9VTklURURfS0lOR0RPTSwgVFRfTVNfTEFOR0lEX0dBTElDSUFOX0dBTElDSUFOLAotCVRUX01TX0xBTkdJRF9TSU5IQUxBX1NSSV9MQU5LQSwgVFRfTVNfTEFOR0lEX1RBTUFaSUdIVF9BTEdFUklBLAotCVRUX01TX0xBTkdJRF9TRVNPVEhPX1NBX0xFQk9BX1NPVVRIX0FGUklDQSwgVFRfTVNfTEFOR0lEX1lJX1BSQywKLQlUVF9NU19MQU5HSURfVUlHSFVSX1BSQyk6IE5ldyBhbGlhc2VzLgotCi0JUmVtb3ZlIGNvbW1lbnRlZCBvdXQgY29kZS4KLQotCShUVF9OQU1FX0lEX0xJR0hUX0JBQ0tHUk9VTkQsIFRUX05BTUVfSURfREFSS19CQUNLR1JPVU5ELAotCVRUX05BTUVfSURfVkFSSUFUSU9OU19QUkVGSVgpOiBOZXcgbWFjcm9zLgotCi0JKEhBVkVfTElNSVRfT05fSURFTlRTKTogUmVtb3ZlIG1hY3JvICh3aGljaCB3YXMgdXNlbGVzcyBzaW5jZSBtYW55Ci0JeWVhcnMpLCB1c2UgZ3VhcmRlZCBsb25nIG1hY3JvcyBieSBkZWZhdWx0IGFuZCBkZWZpbmUgc2hvcnQgdmVyc2lvbnMKLQlhcyBhbGlhc2VzIGZvciB0aGUgbG9uZyBvbmVzLgotCi0yMDE3LTAxLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2FwcGx5X3Zhcik6IEhhbmRsZSB1bmRlcmxpbmUgcGFyYW1ldGVycwotCWFsc28uCi0KLTIwMTctMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X29wZW5fZmFjZV9pbnRlcm5hbCk6IEltcHJvdmUgdHJhY2luZy4KLQotMjAxNy0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBY3R1YWxseSB1c2UgbWV0cmljcyB2YXJpYXRpb24gc2VydmljZS4KLQotCSogc3JjL2Jhc2UvZnRtbS5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0guCi0JKGZ0X2ZhY2VfZ2V0X212YXJfc2VydmljZSk6IE5ldyBhdXhpbGlhcnkgZnVuY3Rpb24gdG8gbG9vayB1cAotCW1ldHJpY3MgdmFyaWF0aW9uIHNlcnZpY2UuCi0JKEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLCBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsCi0JRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyk6IENhbGwgbWV0cmljcyB2YXJpYXRpb24gc2VydmljZS4KLQotCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBVc2UgbWV0cmljcyB2YXJpYXRpb25zIGZvcgotCW5hbWVkIGluc3RhbmNlcy4KLQotMjAxNy0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBQcm92aWRlIG1ldHJpY3MgdmFyaWF0aW9uIHNlcnZpY2UuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaAotCShGVF9NZXRyaWNzX0FkanVzdF9GdW5jKTogUmVkdWNlIG51bWJlciBvZiBuZWNlc3NhcnkgcGFyYW1ldGVycy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYzogSW5jbHVkZSBGVF9MSVNUX0guCi0JKHR0X3NpemVfcmVzZXRfaXRlcmF0b3IpOiBOZXcgYXV4aWxpYXJ5IGZ1bmN0aW9uIGZvci4uLgotCSh0dF9hcHBseV92YXIpOiBOZXcgZnVuY3Rpb24uCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmg6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucyk6IEFkZAotCWB0dF9hcHBseV9tdmFyJy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaCAoRlRfU2VydmljZUNhY2hlKTogQWRkIG1ldHJpY3MKLQl2YXJpYXRpb24gc2VydmljZS4KLQotMjAxNy0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBQYXJzZSBgTVZBUicgdGFibGUuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKE1WQVJfVEFHX1hYWCk6IE5ldyBtYWNyb3MgZm9yIE1WQVIgdGFncy4KLQkoR1hfVmFsdWUsIEdYX01WYXJUYWJsZSk6IE5ldyBzdHJ1Y3R1cmVzLgotCShHWF9CbGVuZCk6IEFkZCBpdC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoR1hfVkFMVUVfU0laRSwgR1hfVkFMVUVfQ0FTRSwKLQlHWF9HQVNQX0NBU0UpOiBOZXcgbWFjcm9zLgotCShmdF92YXJfZ2V0X3ZhbHVlX3BvaW50ZXIpOiBOZXcgYXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIGdldCBhIHBvaW50ZXIKLQl0byBhIHZhbHVlIGZyb20gdmFyaW91cyBTRk5UIHRhYmxlcyBhbHJlYWR5IHN0b3JlZCBpbiBgVFRfRmFjZScuCi0JKGZ0X3Zhcl9sb2FkX212YXIpOiBOZXcgZnVuY3Rpb24uCi0JKFRUX0dldF9NTV9WYXIpOiBDYWxsIGl0LgotCSh0dF9kb25lX2JsZW5kKTogVXBkYXRlZC4KLQotMjAxNy0wMS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBNb3JlIHByZXBhcmF0aW9ucyBmb3IgTVZBUiBzdXBwb3J0LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcmVzZXQpOiBBZGQgYXJndW1lbnQgdG8gbWFrZQotCWZ1bmN0aW9uIG9ubHkgcmVjb21wdXRlIGFzY2VuZGVyLCBkZXNjZW5kZXIsIGFuZCBoZWlnaHQuCi0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuaDogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfc2VsZWN0LCB0dF9zaXplX3JlcXVlc3QpOgotCVVwZGF0ZWQuCi0KLTIwMTctMDEtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwY2ZdIERpc2FibGUgbG9uZyBmYW1pbHkgbmFtZXMgYnkgZGVmYXVsdC4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAotCShQQ0ZfQ09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FUyk6IENvbW1lbnQgb3V0LgotCi0yMDE3LTAxLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbcGNmXSBNYWtlIGxvbmcgZmFtaWx5IG5hbWVzIGNvbmZpZ3VyYWJsZS4KLQotCVRoZSBjaGFuZ2UgZnJvbSAyMDE2LTA5LTI5IHdhcyB0b28gcmFkaWNhbCAoZXhjZXB0IGZvciBwZW9wbGUgdXNpbmcKLQl0aGUgb3BlblN1U0UgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbikuICBUbyBhbWVsaW9yYXRlIHRoZSBzaXR1YXRpb24sCi0JUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMgZ2V0cyBpbnRyb2R1Y2VkIHdoaWNoIGNvbnRyb2xzCi0JdGhlIGZlYXR1cmU7IGlmIHNldCwgYSBuZXcgUENGIHByb3BlcnR5IG9wdGlvbgotCWBuby1sb25nLWZhbWlseS1uYW1lcycgY2FuIGJlIHVzZWQgdG8gc3dpdGNoIHRoaXMgZmVhdHVyZSBvZmYuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmgKLQkoUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMpOiBOZXcgb3B0aW9uLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0cGNmZHJ2Lmg6IE5ldyBoZWFkZXIgZmlsZSAob25seSBjb250YWluaW5nCi0JY29tbWVudHMgY3VycmVudGx5LCB1c2VkIGZvciBidWlsZGluZyB0aGUgZG9jdW1lbnRhdGlvbikuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggKEZUX1BDRl9EUklWRVJfSCk6IE5ldyBtYWNyby4KLQotCSogc3JjL3BjZi9wY2YuaCAoUENGX0RyaXZlcik6IEFkZCBgbm9fbG9uZ19mYW1pbHlfbmFtZXMnIGZpZWxkLgotCi0JKiBzcmMvcGNmL3BjZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0ggYW5kCi0JRlRfUENGX0RSSVZFUl9ILgotCShwY2ZfcHJvcGVydHlfc2V0LCBwY2ZfcHJvcGVydHlfZ2V0KTogTmV3IGZ1bmN0aW9ucy4KLQkocGNmX3NlcnZpY2VfcHJvcGVydGllcyk6IE5ldyBzZXJ2aWNlLgotCShwY2Zfc2VydmljZXMpOiBVcGRhdGVkLgotCShwY2ZfZHJpdmVyX2luaXQpIFtQQ0ZfQ09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FU106IEhhbmRsZQotCWBub19sb25nX2ZhbWlseV9uYW1lcycuCi0KLQkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfbG9hZF9mb250KTogSGFuZGxlIGBub19sb25nX2ZhbWlseV9uYW1lcycKLQlhbmQgUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMuCi0KLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KLQotMjAxNy0wMS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3BjZl0gSW50cm9kdWNlIGEgZHJpdmVyIHN0cnVjdHVyZS4KLQotCVRvIGJlIGZpbGxlZCBsYXRlciBvbiB3aXRoIHNvbWV0aGluZyB1c2VmdWwuCi0KLQkqIHNyYy9wY2YvcGNmLmggKFBDRl9Ecml2ZXIpOiBOZXcgc3RydWN0dXJlLgotCi0JKiBzcmMvcGNmL3BjZmRyaXZyLmMgKHBjZl9kcml2ZXJfaW5pdCwgcGNmX2RyaXZlcl9kb25lKTogTmV3IGR1bW15Ci0JZnVuY3Rpb25zLgotCShwY2ZfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KLQotMjAxNy0wMS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBZ2FpbiBzb21lIEdYIGNvZGUgc2h1ZmZsaW5nLgotCi0JV2UgbmVlZCB0aGlzIGxhdGVyIG9uIGZvciBNVkFSIGFsc28uCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2hhZHZhbmNlX2FkanVzdCk6IFNwbGl0IG9mZiBjb21wdXRpbmcKLQlhbiBpdGVtIHN0b3JlIHZhcmlhdGlvbiBkZWx0YSBpbnRvLi4uCi0JKGZ0X3Zhcl9nZXRfaXRlbV9kZWx0YSk6IC4uLm5ldyBmdW5jdGlvbi4KLQotMjAxNy0wMS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBZGp1c3QgZm9udCB2YXJpYXRpb24gZmxhZ3MgZm9yIE1WQVIuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GQUNFX0ZMQUdfVkFSX1hYWCk6Ci0JUmVtb3ZlIGFsbCBmbGFncyByZWxhdGVkIHRvIE1WQVI7IHJlcGxhY2UgaXQgd2l0aC4uLgotCShUVF9GQUNFX0ZMQUdfVkFSX01WQVIpOiAuLi50aGlzIG5ldyBtYWNyby4KLQkoVFRfRmFjZSk6IFJlbW92ZSBgbXZhcl9zdXBwb3J0JyBmaWVsZCAod2hpY2ggd2FzIHN0aWxsIHVudXNlZCkuCi0KLTIwMTctMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTW9yZSBHWCBjb2RlIHNodWZmbGluZy4KLQotCVdlIG5lZWQgdGhpcyBsYXRlciBvbiBmb3IgTVZBUiBhbHNvLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogU3BsaXQgb2ZmIGhhbmRsaW5nIG9mIGl0ZW0KLQl2YXJpYXRpb24gc3RvcmUgaW50by4uLgotCShmdF92YXJfZG9uZV9pdGVtX3ZhcmlhdGlvbl9zdG9yZSk6IC4uLm5ldyBmdW5jdGlvbi4KLQotMjAxNy0wMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBNb3JlIGdlbmVyYWxpemF0aW9uIG9mIEdYIHN0dWZmLgotCi0JV2UgbmVlZCB0aGlzIGxhdGVyIG9uIGZvciBNVkFSIGFsc28uCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2RlbHRhX3NldF9pbmRleF9tYXBwaW5nKTogQWRkCi0JcGFyYW1ldGVycyBmb3IgZGVsdGEtc2V0IGluZGV4IG1hcHBpbmcgYW5kIGl0ZW0gdmFyaWF0aW9uIHN0b3JlLgotCShmdF92YXJfbG9hZF9pdGVtX3ZhcmlhdGlvbl9zdG9yZSk6IEFkZCBwYXJhbWV0ZXIgZm9yIGl0ZW0gdmFyaWF0aW9uCi0Jc3RvcmUuCi0Jcy9odmFyRGF0YS92YXJEYXRhLy4KLQlNb3ZlIGFsbG9jYXRpb24gb2YgYGh2YXJfdGFibGUnIHRvLi4uCi0JKGZ0X3Zhcl9sb2FkX2h2YXIpOiAuLi50aGlzIGZ1bmN0aW9uLgotCVVwZGF0ZWQuCi0KLTIwMTctMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gU29tZSBHWCBzdHJ1Y3R1cmUgcmVuYW1lcyBmb3IgZ2VuZXJhbGl6YXRpb24uCi0KLQlXZSBuZWVkIHRoaXMgbGF0ZXIgb24gZm9yIE1WQVIgYWxzby4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCAoR1hfSFZhckRhdGEpOiBSZW5hbWVkIHRvLi4uCi0JKEdYX0l0ZW1WYXJEYXRhKTogLi4udGhpcy4KLQkoR1hfSFZhclJlZ2lvbik6IFJlbmFtZWQgdG8uLi4KLQkoR1hfVmFyUmVnaW9uKTogLi4udGhpcy4KLQkoR1hfSFZTdG9yZSk6IFJlbmFtZWQgdG8uLi4KLQkoR1hfSXRlbVZhclN0b3JlKTogLi4udGhpcy4KLQkoR1hfV2lkdGhNYXApOiBSZW5hbWVkIHRvLi4uCi0JKEdYX0RlbHRhU2V0SWR4TWFwKTogLi4udGhpcy4KLQotCShHWF9IVmFyVGFibGUpOiBVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jOiBVcGRhdGVkLgotCi0yMDE3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIENvZGUgc2h1ZmZsaW5nLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9odmFyKTogU3BsaXQgb2ZmIGxvYWRpbmcgb2YKLQlpdGVtIHZhcmlhdGlvbiBzdG9yZSBhbmQgZGVsdGEgc2V0IGluZGV4IG1hcHBpbmcgaW50by4uLgotCShmdF92YXJfbG9hZF9pdGVtX3ZhcmlhdGlvbl9zdG9yZSwKLQlmdF92YXJfbG9hZF9kZWx0YV9zZXRfaW5kZXhfbWFwcGluZyk6IC4uLm5ldyBmdW5jdGlvbnMuCi0KLTIwMTctMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gQWRkIEhWQVIgYWNjZXNzIHdpdGhvdXQgYWR2YW5jZSB3aWR0aCBtYXAuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2h2YXIpOiBIYW5kbGUgY2FzZSB3aGVyZQotCWBvZmZzZXRUb0FkdmFuY2VXaWR0aE1hcHBpbmcnIGlzIHplcm8uCi0JKHR0X2hhZHZhbmNlX2FkanVzdCk6IEltcGxlbWVudCBkaXJlY3QgZGVsdGFTZXQgYWNjZXNzIGJ5IGdseXBoCi0JaW5kZXguCi0KLTIwMTctMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwY2ZdIFJldmlzZSBkcml2ZXIuCi0KLQlUaGlzIGNvbW1pdCBpbXByb3ZlcyB0cmFjaW5nIGFuZCBoYW5kbGluZyBvZiBtYWxmb3JtZWQgZm9udHMuICBJbgotCXBhcnRpY3VsYXIsIHRoZSBjaGFuZ2VzIHRvIGBwY2ZfZ2V0X3Byb3BlcnRpZXMnIGZpeAotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNzkKLQotCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHRhYmxlTmFtZXMpOiBVc2UgbG9uZyBuYW1lcyBmb3IgYmV0dGVyCi0JcmVhZGFiaWxpdHkuCi0JKHBjZl9yZWFkX1RPQyk6IEFsbG93IGF0IG1vc3QgOSB0YWJsZXMuCi0JKHBjZl9nZXRfcHJvcGVydGllcyk6IEFsbG93IGF0IG1vc3QgMjU2IHByb3BlcnRpZXMuCi0JTGltaXQgc3RyaW5ncyBhcnJheSBsZW5ndGggdG8gMjU2ICogKDY1NTM2ICsgMSkgYnl0ZXMuCi0JQmV0dGVyIHRyYWNpbmcuCi0JKHBjZl9nZXRfbWV0cmljKTogVHJhY2UgbWV0cmljIGRhdGEuCi0JKHBjZl9nZXRfbWV0cmljcyk6IEFsbG93IGF0IG1vc3QgNjU1MzYgbWV0cmljcy4KLQlGaXggY29tcGFyaXNvbiBvZiBgbWV0cmljcy0+YXNjZW50JyBhbmQgYG1ldHJpY3MtPmRlc2NlbnQnIHRvIGF2b2lkCi0JcG90ZW50aWFsIG92ZXJmbG93LgotCUJldHRlciB0cmFjaW5nLgotCShwY2ZfZ2V0X2JpdG1hcHMpOiBBbGxvdyBhdCBtb3N0IDY1NTM2IGJpdG1hcHMuCi0JQmV0dGVyIHRyYWNpbmcuCi0JKHBjZl9nZXRfZW5jb2RpbmdzLCBwY2ZfZ2V0X2FjY2VsKTogQmV0dGVyIHRyYWNpbmcuCi0KLQkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0dseXBoX0xvYWQpOiBEb24ndCB0cmFjZSBgZm9ybWF0JyBkZXRhaWxzLgotCVRoZXNlIGFyZSBub3cgc2hvd24gYnkgYHBjZl9nZXRfYml0bWFwcycuCi0KLTIwMTctMDEtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfRmFjZV9Jbml0KTogVHJhY2UgY29tcHJlc3Npb24gZm9ybWF0LgotCi0yMDE3LTAxLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBNb3JlIGNvbnNpc3RlbmN5IGNoZWNrcyBmb3IgcHVyZSBDRkZzLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4Ci0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogQ2hlY2sgZWxlbWVudCBudW1iZXIgYW5kIHNpemUKLQlvZiBOYW1lIGFuZCBUb3AgRElDVCBpbmRpY2VzLgotCi0yMDE3LTAxLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gTWlub3IgdHJhY2luZyBpbXByb3ZlbWVudC4KLQotCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpLCBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKLQkodHRfZmFjZV9pbml0KTogSW5kZW50IGZpcnN0IHRyYWNpbmcgbWVzc2FnZSBmcm9tIFNGTlQgZHJpdmVyLgotCi0yMDE3LTAxLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFZhcmlvdXMgbWlub3IgZml4ZXMuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfU2ltcGxlX0dseXBoKTogQ2hlY2sgaW5zdHJ1Y3Rpb24KLQlzaXplIG9ubHkgaWYgd2UgZG8gbmF0aXZlIGhpbnRpbmcuCi0JKFRUX0xvYWRfR2x5cGgpOiBUcmFjZSByZXR1cm5lZCBlcnJvciBjb2RlLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcnVuX2ZwZ20sIHR0X3NpemVfcnVuX3ByZXApOiBUcmFjZQotCXJldHVybmVkIGVycm9yIGNvZGUuCi0JKHR0X3NpemVfcmVhZHlfYnl0ZWNvZGUpOiBEb24ndCBydW4gYHByZXAnIHRhYmxlIGlmIGBmcGdtJyB0YWJsZSBpcwotCWludmFsaWQuCi0KLTIwMTctMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBEb24ndCBmYWlsIGlmIFBDTFQsIEVCTEMgKGFuZCBzaW1pbGFyIHRhYmxlcykgYXJlIGludmFsaWQuCi0KLQlUaGVzZSB0YWJsZXMgYXJlIG9wdGlvbmFsLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBJbXBsZW1lbnQgaXQuCi0KLTIwMTctMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfbnVtKTogU2ltcGxpZnkuCi0KLTIwMTctMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVZhcmlvdXMgZml4ZXMgZm9yIGNsYW5nJ3MgdW5kZWZpbmVkIGJlaGF2aW91ciBzYW5pdGl6ZXIuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChGVF9mZG90MTRUb0ZpeGVkKTogRml4IGNhc3RpbmcuCi0JKGNmZl9ibGVuZF9kb0JsZW5kKTogRG9uJ3QgbGVmdC1zaGlmdCBuZWdhdGl2ZSBudW1iZXJzLgotCUhhbmRsZSA1LWJ5dGUgbnVtYmVycyBieXRlIGJ5IGJ5dGUgdG8gYXZvaWQgYWxpZ25tZW50IGlzc3Vlcy4KLQotCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfbnVtKTogSGFuZGxlIDUtYnl0ZSBudW1iZXJzIGJ5dGUgYnkKLQlieXRlIHRvIGF2b2lkIGFsaWdubWVudCBpc3N1ZXMuCi0KLQkqIHNyYy9jaWQvY2lkbG9hZCAoY2lkX3JlYWRfc3VicnMpOiBEbyBub3RoaW5nIGlmIHdlIGRvbid0IGhhdmUgYW55Ci0Jc3VicnMuCi0KLQkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVfcGFyc2VfY2hhcnN0cmluZyk6IEZpeCB0cmFjaW5nLgotCi0JKiBzcmMvdG9vbHMvZ2xuYW1lcy5weSAobWFpbik6IFB1dCBgREVGSU5FX1BTVEFCTEVTJyBndWFyZCBhcm91bmQKLQlkZWZpbml0aW9uIG9mIGBmdF9nZXRfYWRvYmVfZ2x5cGhfaW5kZXgnLgotCi0JKiBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oOiBSZWdlbmVyYXRlZC4KLQotCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuYzogSW5jbHVkZSBgcHN0YWJsZXMuaCcgdHdpY2UgdG8gZ2V0IGJvdGgKLQlkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbi4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoRlRfZmRvdDE0VG9GaXhlZCwgRlRfaW50VG9GaXhlZCk6IEZpeAotCWNhc3RpbmcuCi0KLTIwMTctMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEhhbmRsZSBtdWx0aXBsZSBgYmxlbmQnIG9wZXJhdG9ycyBpbiBhIHJvdyBjb3JyZWN0bHkuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNjgKLQotCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9ibGVuZF9kb0JsZW5kKTogQWRqdXN0IGBwYXJzZXItPnN0YWNrJwotCXBvaW50ZXJzIGludG8gYHN1YkZvbnQtPmJsZW5kX3N0YWNrJyBhZnRlciByZWFsbG9jYXRpb24uCi0KLTIwMTctMDEtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBSZXR1cm4gY29ycmVjdCBudW1iZXIgb2YgbmFtZWQgaW5zdGFuY2VzIGZvciBUVENzLgotCi0JV2l0aG91dCB0aGlzIHBhdGNoLCByZXF1ZXN0aW5nIGluZm9ybWF0aW9uIGZvciBmYWNlIGluZGV4IE4gcmV0dXJuZWQKLQl0aGUgZGF0YSBmb3IgZmFjZSBpbmRleCBOKzEgKG9yIGluZGV4IDApLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBDb3JyZWN0bHkgYWRqdXN0IGBmYWNlX2luZGV4JwotCWZvciBuZWdhdGl2ZSBgZmFjZV9pbnN0YW5jZV9pbmRleCcgdmFsdWVzLgotCi0yMDE2LTEyLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqLyo6IFVzZSBoZXggbnVtYmVycyBmb3IgZXJyb3JzIGluIHRyYWNpbmcgbWVzc2FnZXMuCi0KLTIwMTYtMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gQ2hlY2sgYXhpcyBjb3VudCBpbiBIVkFSIHRhYmxlLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzYyCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2h2YXIpOiBDaGVjayBheGlzIGNvdW50LgotCShmdF92YXJfbG9hZF9hdmFyKTogRml4IHRyYWNpbmcgbWVzc2FnZS4KLQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDE2LTIwMTggYnkKK0NvcHlyaWdodCAyMDE3LTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yMSBiL0NoYW5nZUxvZy4yMQppbmRleCAwMTg4M2YxLi4xYWRjODE3IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjEKKysrIGIvQ2hhbmdlTG9nLjIxCkBAIC02OTk1LDcgKzY5OTUsNyBAQAogCiAyMDAyLTA5LTA4ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CiAKLQlWYXJpb3VzIHVwZGF0ZXMgdG8gY29ycmVjdGx5IHN1cHBvcnQgc3ViLXBpeGVsIHJlbmRlcmluZy4KKwlWYXJpb3VzIHVwZGF0ZXMgdG8gY29ycmVjdGx5IHN1cHBvcnQgc3VicGl4ZWwgcmVuZGVyaW5nLgogCiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oOiBBZGQgdHdvIHJlbmRlcmVycyBmb3IgTENELgogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjQgYi9DaGFuZ2VMb2cuMjQKaW5kZXggNzY2MWFlZS4uNDRhYmM0MCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjI0CisrKyBiL0NoYW5nZUxvZy4yNApAQCAtNzQ0LDcgKzc0NCw3IEBACiAKIDIwMTMtMDEtMTYgIERhdmlkICdEaWdpdCcgVHVybmVyICA8ZGlnaXRAZ29vZ2xlLmNvbT4KIAotCVt0cnVldHlwZV0gSW1wcm92ZSBzdWItcGl4ZWwgY29kZS4KKwlbdHJ1ZXR5cGVdIEltcHJvdmUgc3VicGl4ZWwgY29kZS4KIAogCVRoaXMgcGF0Y2hlcyBmaXhlcyBtYW55IGlzc3VlcyB3aXRoIHRoZSB0dHN1YnBpeCBpbXBsZW1lbnRhdGlvbi4KIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjI4IGIvQ2hhbmdlTG9nLjI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMWZmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuMjgKQEAgLTAsMCArMSwzMTM2IEBACisyMDE3LTA5LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIFZlcnNpb24gMi44LjEgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi04LTEnLgorCisJKiBkb2NzL1ZFUlNJT04uVFhUOiBBZGQgZW50cnkgZm9yIHZlcnNpb24gMi44LjEuCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjgvMi44LjEvLCBzLzI4LzI4MS8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDIxOjA6MTUuCisJKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9QQVRDSCk6IFNldCB0byAxLgorCisyMDE3LTA5LTEzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3NmbnRdIGxvd2VzdCBnY2MgZm9yIHZlY3RvcnMgKGUxZDAyNDllKSBpcyBjaGFuZ2VkIHRvIDQuNy4KKworCV9fYnVpbHRpbl9zaHVmZmxlKCkgd2FzIGludHJvZHVjZWQgaW4gZ2NjLTQuNy4gIFRoZSBsb3dlc3QKKwlnY2MgdG8gZW5hYmxlIHZlY3RvciBvcGVyYXRpb24gaXMgZGVsYXllZCBmcm9tIDQuNiB0byA0LjcuCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IEZpeCBjcHAtbWFjcm8gdG8KKwllbmFibGUgdGhlIHZlY3RvciBvcGVyYXRpb24sIHRvIGNoYW5nZSB0aGUgbG93ZXN0IGdjYyB2ZXJzaW9uCisJZnJvbSA0LjYgdG8gNC43LgorCisyMDE3LTA5LTEzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2NhY2hlXSBGaXggYSBwb3NzaWJsZSBvdmVyZmxvdyBieSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uLgorCisJSW1wcm92ZSB0aGUgY29kZSBieSA1ZDNmZjA1NjE1ZGRhNmQxMzI1ZWQ2MTIzODFhMTdhMGRmMDRjOTc1ICwKKwlpc3N1ZXMgYXJlIGZvdW5kIGJ5IEJlaGRhZCBFc2ZhaGJvZCBhbmQgV2VybmVyIExlbWJlcmcuCisKKwkqIHNyYy9jYWNoZS9mdGNiYXNpYy5jIChGVENfSW1hZ2VDYWNoZV9Mb29rdXApOiBSZXBsYWNlCisJYSBzdWJ0cmFjdGlvbiB0byBjaGVjayBoaWdoZXIgYml0IGJ5IGEgYml0IG9wZXJhdGlvbiwKKwlhbmQgY3BwLWNvbmRpdGlvbmFsaXplIGZvciBhcHByb3ByaWF0ZSBzeXN0ZW1zLiAgQWRkIGJldHRlcgorCWRvY3VtZW50YXRpb24gdG8gdGhlIGNvbW1lbnQuCisJKEZUQ19JbWFnZUNhY2hlX0xvb2t1cFNjYWxlcik6IERpdHRvLgorCShGVENfU0JpdENhY2hlX0xvb2t1cCk6IERpdHRvLgorCShGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlcik6IERpdHRvLgorCisyMDE3LTA5LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gUmVhbGx5IGZpeCAjNDEzMzQgKCM1MjAwMCkuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyk6IFNldAorCWBzZWdtZW50LT5kZWx0YScgZXZlcnl3aGVyZS4KKworMjAxNy0wOS0xMiAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVthdXRvZml0LCBzZm50XSBGaXggZm9yIGBtYWtlIG11bHRpJy4KKworCSogc3JjL2F1dG9maXQvYWZzaGFwZXIuYzogSW5jbHVkZSBGVF9BRFZBTkNFX0gsIHRvIHVzZQorCUZUX0dldF9BZHZhbmNlKCkgaW4gaXQuCisJKiBzcmMvc2ZudC90dGNtYXAuYzogSW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorCXRvIHVzZSBQU19Vbmljb2RlcyBpbiBpdCwgYWxzbyBpbmNsdWRlIGB0dHBvc3QuaCcgdG8gdXNlCisJdHRfZmFjZV9nZXRfcHNfbmFtZSgpIGluIGl0LgorCisyMDE3LTA5LTExICBBenp1cm8gIDxhenp1cm9AdGVhbS1tZWRpYXBvcnRhbC5jb20+CisKKwlbYnVpbGRdIEltcHJvdmUgYnVpbGRzIHdpdGggZGlmZmVyZW50IE1TIFZpc3VhbCBTdHVkaW8gdmVyc2lvbnMuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOiBTd2l0Y2ggcGxhdGZvcm0gdG9vbHNldAorCWFjY29yZGluZyB0byB0aGUgVmlzdWFsIFN0dWRpbyB2ZXJzaW9uLgorCisyMDE3LTA5LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2Vybik6IFJlamVjdCBmb3JtYXQgMiB0YWJsZXMuCisKKwlSZXBvcnRlZCBieSBCZWhkYWQuCisKKzIwMTctMDktMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBJbXByb3ZlIGNvbW11bmljYXRpb24gd2l0aCBmdGdyaWQuCisKKwkqIHNyYy9hdXRvZml0L2FmaGludHMuYyAoYWZfZ2x5cGhfaGludHNfZ2V0X3NlZ21lbnRfb2Zmc2V0KToKKwlQcm92aWRlIHZhbHVlcyBpbiBmb250IHVuaXRzLgorCisyMDE3LTA5LTA4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW2Jhc2VdIFJlbW92ZSBhIGNoZWNrIGZvciByZXNvdXJjZSBJRCBpbiB0aGUgcmVzb3VyY2UgZm9yayBkcml2ZXIuCisKKwlMYXN0UmVzb3J0LmRmb250IGhhcyBhIG1hcmdpbmFsIHJlc291cmNlIElEIDB4RkZGRiBmb3Igc2ZudAorCXJlc291cmNlLiAgSW5zaWRlIE1hY2ludG9zaDogTW9yZSBNYWNpbnRvc2ggVG9vbGJveCwgYFJlc291cmNlIElEcycKKwkoMS00NiksIHRlbGxzIHRoYXQgc29tZSBJRHMgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCisJRnJlZVR5cGUyIGp1c3QgdXNlcyByZXNvdXJjZSBJRCB0byBzb3J0IHRoZSBmcmFnbWVudGVkIHJlc291cmNlLgorCVRvIGFjY2VwdCB0aGUgbWFyZ2luYWwgZm9udHMsIHRoZSBjaGVja2luZyBpcyByZW1vdmVkLgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKTogUmVtb3ZlIHJlc19pZAorCXZhbGlkaXR5IGNoZWNrLCBmaXggYSB0cmFjZSBtZXNzYWdlIGZvcm1hdC4KKworMjAxNy0wOS0wOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtzZm50LCB0cnVldHlwZV0gUmVnaXN0ZXIgdGhlIHRhZ3MgZm9yIG1hcmdpbmFsIGZvbnRzLgorCisJVGhlIGZpcnN0IDMyYml0IG9mIHN0YW5kYXJkIFRydWVUeXBlIHZhcmlhbnRzIGlzIDB4MDAwMTAwMDAsCisJYE9UVE8nLCBgdHRjZicsIGB0cnVlJyBvciBgdHlwMScuICAyIG1hcmdpbmFsIGRmb250cyBvbiBsZWdhY3kgTWFjCisJT1MgWCwgS2V5Ym9hcmQuZGZvbnQgYW5kIExhc3RSZXNvcnQuZGZvbnQsIGhhdmUgdGhlIHNmbnQgcmVzb3VyY2VzCisJc3RhcnRpbmcgMHhBNSBmb2xsb3dlZCBieSBga2JkJyBvciBgbHN0Jy4gIENvbnNpZGVyaW5nIHRoZSBmb2xsb3dpbmcKKwlkYXRhIGNvdWxkIGJlIHBhcnNlZCBhcyBjb252ZW50aW9uYWwgVHJ1ZVR5cGUgZm9udHMsIHRoZSBoZWFkZXIKKwljaGVja2luZyBpcyB1cGRhdGVkIHRvIGFsbG93IHRoZXNlIHRhZ3MuICBJdCBzZWVtcyB0aGF0IHJlY2VudCBNYWMKKwlPUyBYIGhhcyBhbHJlYWR5IHN3aXRjaGVkIHRvIG5vcm1hbCBUVEYgZm9yIHRoZXNlIGZvbnRzLgorCisJU2VlIHRoZSBkaXNjdXNzaW9uIGF0CisJaHR0cDovL3U4OC5uMjQucXVlZW5zdS5jYS9leGlmdG9vbC9mb3J1bS9pbmRleC5waHA/dG9waWM9MzkzMS4wCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggKFRUQUdfMHhBNWtiZCwgVFRBR18weEE1bHN0KTogTmV3IGhlYWRlcgorCXRhZ3MgZm9yIEtleWJvYXJkLmRmb250IGFuZCBMYXN0UmVzb3J0LmRmb250LgorCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfb3Blbl9mb250KTogQWNjZXB0IHRoZSBzZm50IHJlc291cmNlCisJc3RhcnRzIHdpdGggVFRBR18weEE1a2JkIG9yIFRUQUdfMHhBNWxzdC4KKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KTogQWNjZXB0IHRoZSBmYWNlIHdpdGggdGhlCisJZm9ybWF0IHRhZyBpcyBUVEFHXzB4QTVrYmQgb3IgVFRBR18weEE1bHN0LgorCisyMDE3LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggbXVsdGlwbGUgY2FsbHMgb2YgYEZUX0JpdG1hcF9Db252ZXJ0Jy4KKworCVRoZSBkb2N1bWVudGF0aW9uIG9mIGBGVF9CaXRtYXBfQ29udmVydCcgc2F5cyB0aGF0IG11bHRpcGxlIGNhbGxzIGRvCisJcHJvcGVyIHJlYWxsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IEZUX0JpdG1hcCBvYmplY3QuICBIb3dldmVyLCB0aGlzCisJZmFpbGVkIGZvciB0aGUgc2VxdWVuY2UKKworCSAgbm9uLWVtcHR5IGJpdG1hcAorCSAgZW1wdHkgYml0bWFwCisJICBub24tZW1wdHkgYml0bWFwCisKKwlSZWFzb24gd2FzIHRoYXQgYEZUX0JpdG1hcF9Db252ZXJ0JyBvbmx5IHJlYWxsb2NhdGVkIHRoZSBiaXRtYXAKKwlidWZmZXIgaWYgaXQgYmVjYW1lIHRvbyBzbWFsbDsgaXQgZGlkbid0IG1ha2UgdGhlIGJ1ZmZlciBzbWFsbGVyLgorCUZvciBhbiBlbXB0eSBiaXRtYXAgZm9sbG93aW5nIGEgbm9uLWVtcHR5IG9uZSwgb25seSB0aGUgYnVmZmVyCisJZGltZW5zaW9uIGdvdCBzZXQgdG8gemVybywgd2l0aG91dCBkZWFsbG9jYXRpb24uICBJZiB0aGUgbmV4dCBjYWxsCisJd2FzIGEgbm9uLWVtcHR5IGJ1ZmZlciBhZ2FpbiwgYW4gYXNzZXJ0aW9uIGluIGBmdF9tZW1fcXJlYWxsb2MnIHdhcworCXRyaWdnZXJlZC4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoRlRfQml0bWFwX0NvbnZlcnQpOiBBbHdheXMgcmVhbGxvY2F0ZSB0YXJnZXQKKwlidWZmZXIgdG8gdGhlIGNvcnJlY3Qgc2l6ZS4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAxNy0wOS0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IHNpemUgYW5kIHJlc29sdXRpb24gaGFuZGxpbmcuCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IFVzZSBgU0laRScgdmFsdWVzIGlmCisJYFBPSU5UX1NJWkUnLCBgUkVTT0xVVElPTl9YJywgb3IgYFJFU09MVVRJT05fWScgcHJvcGVydGllcyBhcmUKKwltaXNzaW5nLgorCisJKiBkb2NzL0NIQU5HRVM6IERvY3VtZW50IGl0LgorCisyMDE3LTA4LTI1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlTd2FwIGBBTExPQ19NVUxUJyBhcmd1bWVudHMgKCM1MTgzMykuCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKGZ0X2JpdG1hcF9hc3N1cmVfYnVmZmVyKTogVXBkYXRlZC4KKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCSogc3JjL3Jhc3Rlci9mdHJlbmQxLmMgKGZ0X3Jhc3RlcjFfcmVuZGVyKTogVXBkYXRlZC4KKworMjAxNy0wOC0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEZpeCBjbGFuZyBjb21waWxhdGlvbiAoIzUxNzg4KS4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChwcmVtdWx0aXBseV9kYXRhKTogVXNlIHZlY3RvcnMgaW5zdGVhZCBvZgorCXNjYWxhcnMuCisJKHZlY3Rvcl9zaHVmZmxlKTogTmV3IG1hY3JvIHRvIHRha2UgY2FyZSBvZiBhIGRpZmZlcmVudCBidWlsdC1pbgorCWZ1bmN0aW9uIG5hbWUgb24gY2xhbmcuCisKKzIwMTctMDgtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBEb24ndCB6ZXJvIG91dCBhbGxvY2F0ZWQgbWVtb3J5IHR3aWNlICgjNTE4MTYpLgorCisJUGF0Y2ggYXBwbGllZCBmcm9tIGJ1ZyByZXBvcnQuCisKKwkqIHNyYy9iYXNlL2Z0dXRpbC5jIChmdF9tZW1fcXJlYWxsb2MpOiBVc2UgbG93LWxldmVsIGFsbG9jYXRpb24gdG8KKwlhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KKworMjAxNy0wOC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93LgorCisJQ2hhbmdlcyB0cmlnZ2VyZWQgYnkKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzEwNworCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01EUlAsIEluc19NSVJQLCBJbnNfQUxJR05QVFMpOiBVc2UKKwlORUdfTE9ORy4KKworMjAxNy0wOC0xNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3NmbnRdIEF2b2lkIHN5bnRoZXRpYyB1bmljb2RlIGZvciBzeW1ib2wgZm9udHMgd2l0aCBQVUEuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03NTQ1NzQKKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogQ2hlY2sgZm9yIEZUX0VOQ09ESU5HX01TX1NZTUJPTC4KKworMjAxNy0wOC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKHByZW11bHRpcGx5X2RhdGEpOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTctMDgtMTUgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3NmbnRdIFNwZWVkIHVwIFBORyBpbWFnZSBsb2FkaW5nLgorCisJVGhpcyByZWR1Y2VzIHRoZSBvdmVyaGVhZCBvZiBgcHJlbXVsdGlwbHlfZGF0YScgYnkgNjAlLgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKHByZW11bHRpcGx5X2RhdGEpOiBQcm92aWRlIGNvZGUgd2hpY2ggdXNlcworCWdjYydzIChhbmQgY2xhbmcncykgYHZlY3Rvcl9ieXRlJyBhdHRyaWJ1dGUgdG8gcHJvY2VzcyA0IHBpeGVscyBhdCBhCisJdGltZS4KKworMjAxNy0wOC0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnQsIHRydWV0eXBlXSBJbXByb3ZlIGhhbmRsaW5nIG9mIG1pc3Npbmcgc2JpdHMuCisKKwlSZXF1ZXN0ZWQgYnkgQmVoZGFkLgorCisJTW9kZXJuIGJpdG1hcC1vbmx5IFNGTlRzIGxpa2UgYE5vdG9Db2xvckVtb2ppLnR0ZicgZG9uJ3QgY29udGFpbgorCWVudHJpZXMgaW4gdGhlIGJpdG1hcCBzdHJpa2UocykgZm9yIGVtcHR5IGdseXBocy4gIEluc3RlYWQsIHRoZXkKKwlyZWx5IHRoYXQgYSBzcGFjZSBnbHlwaCBnZXRzIGNyZWF0ZWQgZnJvbSB0aGUgZm9udCdzIG1ldHJpY3MgZGF0YS4KKwlUaGlzIGNvbW1pdCBtYWtlcyBGcmVlVHlwZSBiZWhhdmUgYWNjb3JkaW5nbHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCAoRlRfRXJyX01pc3NpbmdfQml0bWFwKTogTmV3IGVycm9yCisJY29kZS4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2ltYWdlKTogQ2hhbmdlIGVycm9yIGNvZGVzCisJdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gYSBtaXNzaW5nIGJpdG1hcCBpbiBhIGNvbXBvc2l0ZSBhbmQgYQorCXNpbXBsZSBtaXNzaW5nIGJpdG1hcC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCk6IEZvciBhIG1pc3NpbmcgYml0bWFwIChpbiBhCisJYml0bWFwLW9ubHkgZm9udCksIHN5bnRoZXNpemUgYW4gZW1wdHkgYml0bWFwIGdseXBoIGlmIG1ldHJpY3MgYXJlCisJYXZhaWxhYmxlLgorCisyMDE3LTA4LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gTWlub3IgQVBJIGltcHJvdmVtZW50IGZvciBkZWZhdWx0IHZhcmlhdGlvbiBheGlzIHNldHRpbmcuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcywKKwlGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLAorCUZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOiBBbGxvdyBjb29yZHM9PU5VTEwgaWYgbnVtX2Nvb3Jkcz09MC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE3LTA4LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNuYW1lc10gUmVhbGx5IGZpeCBpc3N1ZSAjNDk5NDkuCisKKwlXZSBub3cgdXNlIGEgc2VwYXJhdGUgcHJlcHJvY2Vzc29yIG1hY3JvIHRvIGhhbmRsZSBib3RoIGRlZmluaXRpb24KKwlhbmQgZGVjbGFyYXRpb24gb2YgdGhlIGdseXBoIG5hbWUgYXJyYXlzLgorCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChERUZJTkVfUFNfVEFCTEVfREFUQSk6IE5ldyBtYWNyby4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHkgKFN0cmluZ1RhYmxlOjpkdW1wLAorCVN0cmluZ1RhYmxlOjpkdW1wX3N1Ymxpc3QpOiBVc2UgYERFRklORV9QU19UQUJMRV9EQVRBJy4KKwkoZHVtcF9lbmNvZGluZyk6IERpdHRvLgorCShtYWluKTogVXNlIGB3YicgbW9kZSBmb3Igd3JpdGluZyB0aGUgb3V0cHV0IGZpbGUsIHdoaWNoIHdvcmtzIG9uCisJV2luZG93cyBhbHNvLgorCisJKiBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oOiBSZWdlbmVyYXRlZC4KKworMjAxNy0wOC0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gSGFybW9ueSBMQ0QgcmVuZGVyaW5nLgorCisJVGhpcyBpcyBhIG5ldyB0ZWNobm9sb2d5IGZvciBMQ0Qtb3B0aW1pemVkIHJlbmRlcmluZy4gSXQgY2FwaXRhbGl6ZXMKKwlvbiB0aGUgZmFjdCB0aGF0IGVhY2ggY29sb3IgY2hhbm5lbCBncmlkIGlzIHNoaWZ0ZWQgYnkgYSB0aGlyZCBvZiBhCisJcGl4ZWwuICBUaGVyZWZvcmUgaXQgaXMgbG9naWNhbCB0byByZW5kZXIgMyBzZXBhcmF0ZSBtb25vY2hyb21lCisJYml0bWFwcyBzaGlmdGluZyB0aGUgb3V0bGluZSBieSAxLzMgcGl4ZWwsIGFuZCB0aGVuIGNvbWJpbmUgdGhlbS4KKwlJbXBvcnRhbnRseSwgdGhlIHJlc3VsdGluZyBvdXRwdXQgZG9lcyBub3QgcmVxdWlyZSBhZGRpdGlvbmFsIExDRAorCWZpbHRlcmluZy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpCisJWyFGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IEltcGxlbWVudCBuZXcgTENELW9wdGltaXplZAorCXJlbmRlcmluZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oLCBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCwgZGV2ZWwvZnRvcHRpb24uaDogVXBkYXRlZAorCWRvY3VtZW50YXRpb24uCisKKzIwMTctMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBDbGVhbiB1cC4KKworMjAxNy0wOC0wOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc2ZudC90dHBvc3QuYyAoZm9ybWF0KTogVXNlIG90c3BlYy1jb21wbGlhbnQgdmVyc2lvbnMuCisKKzIwMTctMDgtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTI4NjgKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19BTElHTlJQKTogVXNlIE5FR19MT05HLgorCisyMDE3LTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZSwgdHJ1ZXR5cGVdIE5ldyBmdW5jdGlvbiBgRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzJy4KKworCVRoZSByZXNlcnZlZCBgZmxhZ3MnIGZpZWxkIGdvdCBhIHZhbHVlIGluIE9wZW5UeXBlIHZlcnNpb24gMS44LjI7CisJdW5mb3J0dW5hdGVseSwgdGhlIHB1YmxpYyBgRlRfVmFyX0F4aXMnIHN0cnVjdHVyZSBtaXNzZXMgdGhlCisJY29ycmVzcG9uZGluZyBlbGVtZW50LiAgU2luY2Ugd2UgY2FuJ3QgYWRkIGEgbmV3IGZpZWxkLCB3ZSBhZGQgYW4KKwlhY2Nlc3MgZnVuY3Rpb24uCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzKTogTmV3IGZ1bmN0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaCAoRlRfVkFSX0FYSVNfRkxBR19ISURERU4pOiBOZXcgbWFjcm8uCisJVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEluY3JlYXNlIGFsbG9jYXRlZCBtZW1vcnkKKwlvZiBgbW12YXInIHRvIGhvbGQgYXhpcyBmbGFncy4KKwlGaWxsIHRoZSBheGlzIGZsYWdzIGFycmF5LgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTctMDgtMDMgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gRml4IG1ldHJpY3Mgb2YgQi9XIGhpbnRpbmcgaW4gdjQwIG1vZGUuCisKKwlQaGFudG9tIHBvaW50cyBhcmUgbm93IHNhdmVkIG91dHNpZGUgdjQwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisJbW9kZS4gIFRoaXMgZml4ZXMgdGhlIGp1bXBpbmcgZ2x5cGhzIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdjM1IGFuZAorCXY0MCBtb25vY2hyb21lIG1vZGUuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0hpbnRfR2x5cGgpOiBGaXggaW52ZXJzZWQgYm9vbCBsb2dpYy4KKworMjAxNy0wOC0wMyAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBEbyBub3Qgc2V0IGFueSBDbGVhclR5cGUgZmxhZ3MgaW4gdjQwIG1vbm9jaHJvbWUgbW9kZS4KKworCVRoaXMgZml4ZXMgd2VpcmQgYmVoYXZpb3Igb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgcmVzdWx0ZWQgaW4gcmVuZGVyaW5nCisJZGlmZmVyZW5jZXMgYmV0d2VlbiB2MzUgYW5kIHY0MCBpbiBtb25vY2hyb21lIG1vZGUsIGUuZy4sIGluCisJYHRpbWVzYmkudHRmJy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19HRVRJTkZPKQorCVtUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTF06IENoZWNrCisJYHN1YnBpeGVsX2hpbnRpbmdfbGVhbicuCisKKzIwMTctMDgtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEZpeCB0aGlua28uCisKKzIwMTctMDgtMDEgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3RydWV0eXBlXSBGaXggbG9hZGluZyBvZiBuYW1lZCBpbnN0YW5jZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBQcmVzZXJ2ZSBmaWxlIHBvc2l0aW9uCisJd2hpbGUgbG9hZGluZyB0aGUgYGF2YXInIHRhYmxlLgorCisyMDE3LTA4LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudCwgdHJ1ZXR5cGVdIE1pbm9yIGFkanVzdG1lbnRzIGZvciBPcGVuVHlwZSAxLjguMi4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogVGhlIHVuaXRzIHBlciBFTSB2YWx1ZSBoYXMgbm93CisJKHRpZ2h0ZXIpIGxpbWl0cy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IFRoZSBuZXcgT3BlblR5cGUKKwl2ZXJzaW9uIGV4cGxpY2l0bHkgYWxsb3dzIGFsbCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSBudW1iZXIgb2YKKwljb250b3VycyBpZiB3ZSBoYXZlIGEgY29tcG9zaXRlIGdseXBoICh0aGlzIGlzIGZvciBiZXR0ZXIgYmFja3dhcmRzCisJY29tcGF0aWJpbGl0eSBJIGd1ZXNzKSwgYnV0IGl0IHN0aWxsIHJlY29tbWVuZHMgdmFsdWUgLTEuCisKKzIwMTctMDctMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yNzM4CisKKwkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2dseXBocGF0aF9jb21wdXRlT2Zmc2V0LAorCWNmMl9nbHlwaHBhdGhfY3VydmVUbyk6IFVzZSBBRERfSU5UMzIuCisKKzIwMTctMDctMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBGaXggbWVtb3J5IGxlYWsuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03MzgzNjIKKworCSogc3JjL2Jhc2UvZnRnbHlwaC5jIChGVF9HZXRfR2x5cGgpOiBEbyBwcm9wZXIgZGVhbGxvY2F0aW9uIGluIGNhc2UKKwlvZiBlcnJvci4KKworMjAxNy0wNy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yNTczCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaHNsb3RfZ3JpZF9maXRfbWV0cmljcyk6IFVzZQorCUZUX1BJWF9DRUlMX0xPTkcgYW5kIEZUX1BJWF9ST1VORF9MT05HLgorCisyMDE3LTA3LTEyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfZ2V0X2xvY2F0aW9uKTogT2ZmLWJ5LW9uZSB0eXBvLgorCisJQWxzbyBpbXByb3ZlIHRyYWNpbmcgbWVzc2FnZS4KKworCVByb2JsZW0gcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzM4OTE5CisKKzIwMTctMDctMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yNTE3CisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2NhcHR1cmUpOiBVc2UgU1VCX0lOVDMyLgorCisyMDE3LTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjKTogRml4IHdhcm5pbmcuCisKKzIwMTctMDctMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoRlRfU3RyZWFtX1NlZWtTZXQpOiBGaXggd2FybmluZyAoIzUxMzk1KS4KKworMjAxNy0wNy0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBQcmV2ZW50IGFkZHJlc3Mgb3ZlcmZsb3cgKCM1MTM2NSkuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX1N0cmVhbV9TZWVrU2V0KTogQWRkIGd1YXJkLgorCisyMDE3LTA3LTAzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKGZ0X2xjZF9maWx0ZXJfZmlyKTogSW1wcm92ZSBjb2RlLgorCisyMDE3LTA3LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yNDU1CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0NGUyk6IFVzZSBTVUJfTE9ORy4KKworMjAxNy0wNy0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBJZ25vcmUgTm9fVW5pY29kZV9HbHlwaF9OYW1lLgorCisyMDE3LTA2LTI4ICBCZW4gV2FnbmVyICA8YnVuZ2VtYW5AZ29vZ2xlLmNvbT4KKworCUF2b2lkIE1pY3Jvc29mdCBjb21waWxlciB3YXJuaW5ncyAoIzUxMzMxKS4KKworCVdoaWxlIGNsYW5nJ3Mgc2FuaXRpemVyIHJlY29tbWVuZHMgYSBjYXN0IHRvIHVuc2lnbmVkIGZvciBzYWZlCisJbmVnYXRpb24gKHRvIGhhbmRsZSAtSU5UX01JTiksIGJvdGggTVNWQyBhbmQgVmlzdWFsYyBlbWl0IHdhcm5pbmcKKwlDNDE0NiBpZiBhbiB1bnNpZ25lZCB2YWx1ZSBnZXRzIG5lZ2F0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKE5FR19MT05HLCBORUdfSU5UMzIpLAorCXNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NT1ZFX1NJR04pOiBSZXBsYWNlIG5lZ2F0aW9uIHdpdGggYQorCXN1YnRyYWN0aW9uLgorCisyMDE3LTA2LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoZG9fZml4ZWQpOiBGaXggdHlwby4KKworCVNwb3R0ZWQgYnkgY2hyaXMgPGNocmlzQGdjamQub3JnPi4KKworMjAxNy0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzODQKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzOTEKKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX011bERpdiwgRlRfTXVsRGl2X05vX1JvdW5kLCBGVF9EaXZGaXgpOiBVc2UKKwlORUdfTE9ORy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19TeFZUTCk6IFVzZSBORUdfTE9ORy4KKworMjAxNy0wNi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzNjQKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JU0VDVCk6IFVzZSBORUdfTE9ORy4KKworMjAxNy0wNi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjMyMworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjMyOAorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19jYXB0dXJlKTogVXNlIEFERF9JTlQzMiBhbmQKKwlTVUJfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0RQVlRMKTogVXNlIFNVQl9MT05HIGFuZCBORUdfTE9ORy4KKworMjAxNy0wNi0yMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3NmbnRdIFN5bnRoZXNpemUgYSBVbmljb2RlIGNoYXJtYXAgaWYgb25lIGlzIG1pc3NpbmcuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5oICh0dF9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjKTogRGVjbGFyZSBpdC4KKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9nZXRfZ2x5cGhfbmFtZSwgdHRfY21hcF91bmljb2RlX2luaXQsCisJdHRfY21hcF91bmljb2RlX2RvbmUsIHR0X2NtYXBfdW5pY29kZV9jaGFyX2luZGV4LAorCXR0X2NtYXBfdW5pY29kZV9jaGFyX25leHQsIHR0X2NtYXBfdW5pY29kZV9jbGFzc19yZWMpOiBJbXBsZW1lbnQKKwlzeW50aGV0aWMgVW5pY29kZSBjaGFybWFwIGNsYXNzLgorCSh0dF9nZXRfY21hcF9pbmZvKTogTWFrZSBzdXJlIHRoZSBjYWxsYmFjayBpcyBhdmFpbGFibGUuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSkKKwlbRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTXTogSWYgVW5pY29kZSBjaGFybWFwIGlzIG1pc3NpbmcsCisJc3ludGhlc2l6ZSBvbmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6IERvY3VtZW50IGl0LgorCSogZGV2ZWwvZnRvcHRpb24uaDogRGl0dG8uCisKKzIwMTctMDYtMjAgIFRvbnkgVGhlb2RvcmUgIDx0b255dEBsb2d5c3QuY29tPgorCisJRml4IHBrZy1jb25maWcgaW4gZnJlZXR5cGUtY29uZmlnIGZvciBjcm9zcy1jb21waWxpbmcgKCM1MTI3NCkuCisKKwkqIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChQS0dfQ09ORklHKTogTmV3IHZhcmlhYmxlLgorCShmcmVldHlwZS1jb25maWcpOiBVc2UgaXQgaW4gc2VkIGV4cHJlc3Npb24uCisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogcy9wa2ctY29uZmlnLyVQS0dfQ09ORklHJS8uCisKKzIwMTctMDYtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzMDAKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzMTMKKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9hZGp1c3RIaW50cyk6IFVzZSBBRERfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfQUJTKTogQXZvaWQgRlRfQUJTLgorCisyMDE3LTA2LTE3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZSwgc21vb3RoXSBMQ0QgZmlsdGVyaW5nIGNsZWFudXBzLgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChmdF9sY2RfZmlsdGVyX2ZpciwgX2Z0X2xjZF9maWx0ZXJfbGVnYWN5KToKKwlDbGVhbiB1cCwgc3RhcnQgZmlsdGVyaW5nIGZyb20gdGhlIGJvdHRvbS1sZWZ0IG9yaWdpbi4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBVcGRhdGVkLgorCisyMDE3LTA2LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjI3MAorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjI3NgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01EUlAsIF9pdXBfd29ya2VyX2ludGVycG9sYXRlKTogVXNlCisJQUREX0xPTkcgYW5kIFNVQl9MT05HLgorCisyMDE3LTA2LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmLCBjZmZdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjI0NAorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjI2MQorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBSZXBsYWNlIGNhbGxzIHRvIEZUX0FCUyB3aXRoCisJZGlyZWN0IGNvZGUgdG8gYXZvaWQgdmFsdWUgbmVnYXRpb24uCisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2NhcHR1cmUpOiBVc2UgU1VCX0lOVDMyIGFuZAorCUFERF9JTlQzMi4KKworMjAxNy0wNi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBEb24ndCBzZXQgYWN0aXZlIGVuY29kaW5nLgorCisJRnJlZVR5cGUgb25seSBzZXRzIGEgZGVmYXVsdCBhY3RpdmUgZW5jb2RpbmcgZm9yIFVuaWNvZGUuCisKKzIwMTctMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyMTYKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyMTgKKworCSogc3JjL2NmZi9jZjJmaXhlZC5oIChjZjJfZml4ZWRBYnMpOiBVc2UgTkVHX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lQKTogVXNlIFNVQl9MT05HLgorCisyMDE3LTA2LTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyMDAKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyMTAKKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9pbnNlcnRIaW50KTogVXNlIFNVQl9JTlQzMiBhbmQKKwlBRERfSU5UMzIuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRWTU9WRVRPPjogVXNlCisJQUREX0lOVDMyLgorCisyMDE3LTA2LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBUVF9TZXRfVmFyX0Rlc2lnbi4KKworCVJlcG9ydGVkIGJ5IE5pa29sYXVzIFdheHdlaWxlciA8bWFkaWdlbnNAZ21haWwuY29tPi4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X1Zhcl9EZXNpZ24pOiBDb3JyZWN0bHkgaGFuZGxlIHRoZQorCWNhc2Ugd2hlcmUgd2UgaGF2ZSBsZXNzIGlucHV0IGNvb3JkaW5hdGVzIHRoYW4gYXhlcy4KKworMjAxNy0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfRGl2Rml4KTogRml4IGVtYmFycmFzc2luZyB0eXBvLgorCisJQnVnIGludHJvZHVjZWQgMjAxNy0wNS0yOC4KKworMjAxNy0wNi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjE0NAorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjE1MQorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjE1MworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjE3MworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjE4NgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19pbml0KTogVXNlIFNVQl9JTlQzMi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFJvdW5kX05vbmUsIFJvdW5kX1RvX0dyaWQsCisJUm91bmRfVG9fSGFsZl9HcmlkLCBSb3VuZF9Eb3duX1RvX0dyaWQsIFJvdW5kX1VwX1RvX0dyaWQsCisJUm91bmRfVG9fRG91YmxlX0dyaWQsIFJvdW5kX1N1cGVyLCBSb3VuZF9TdXBlcl80NSk6IFVzZSBBRERfTE9ORywKKwlTVUJfTE9ORywgTkVHX0xPTkcsIEZUX1BJWF9ST1VORF9MT05HLCBGVF9QSVhfQ0VJTF9MT05HLAorCUZUX1BBRF9ST1VORF9MT05HCisJKEluc19TeFZUTCwgSW5zX01JUlApOiBVc2UgU1VCX0xPTkcuCisJKF9pdXBfd29ya2VyX3NoaWZ0KTogVXNlIFNVQl9MT05HIGFuZCBBRERfTE9ORy4KKworMjAxNy0wNi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUHJvdmlkZSBtb3JlIG1hY3JvcyBmb3IgZmxvb3JpbmcsIGNlaWxpbmcsIGFuZCByb3VuZGluZy4KKworCVRoZXNlIHZlcnNpb25zIGRvbid0IHByb2R1Y2UgcnVuLXRpbWUgZXJyb3JzIGR1ZSB0byBpbnRlZ2VyCisJb3ZlcmZsb3cuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCShGVF9QQURfUk9VTkRfTE9ORywgRlRfUEFEX0NFSUxfTE9ORywgRlRfUElYX1JPVU5EX0xPTkcsCisJRlRfUElYX0NFSUxfTE9ORyk6IE5ldyBtYWNyb3MuCisJKEZUX1BBRF9ST1VORF9JTlQzMiwgRlRfUEFEX0NFSUxfSU5UMzIsIEZUX1BJWF9ST1VORF9JTlQzMiwKKwlGVF9QSVhfQ0VJTF9JTlQzMik6IE5ldyBtYWNyb3MuCisKKzIwMTctMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlbW92ZSB1bnVzZWQgbWFjcm9zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChBRERfSU5ULCBTVUJfSU5ULCBNVUxfSU5ULAorCU5FR19JTlQpOiBEZWxldGVkLgorCisyMDE3LTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IFJlbW92ZSBgT1ZFUkZMT1dfJyBwcmVmaXguCisKKwlUaGlzIGluY3JlYXNlcyByZWFkYWJpbGl0eS4KKworMjAxNy0wNi0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjEzMworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjEzNworCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50X2luaXQpOiBVc2UgT1ZFUkZMT1dfU1VCX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUFJPSkVDVCwgRFVBTFBST0opOiBVc2UKKwlPVkVSRkxPV19TVUJfTE9ORy4KKworMjAxNy0wNi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTA5CisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTEwCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMTIyCisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2luaXQpOiBVc2UgT1ZFUkZMT1dfU1VCX0lOVDMyLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX21hcCk6IFN5bmNocm9uaXplIGlmLWVsc2UKKwlicmFuY2hlcy4KKworMjAxNy0wNi0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gSW50ZWdlciBvdmVyZmxvdy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwODkKKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9ibGVuZF9kb0JsZW5kKTogVXNlciBPVkVSRkxPV19BRERfSU5UMzIuCisKKzIwMTctMDYtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNzUKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwODgKKworCSogc3JjL2NmZi9jZjJmb250LmMgKGNmMl9mb250X3NldHVwKTogVXNlIE9WRVJGTE9XX01VTF9JTlQzMi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JU0VDVCk6IFVzZSBPVkVSRkxPV19NVUxfTE9ORywKKwlPVkVSRkxPV19BRERfTE9ORywgYW5kIE9WRVJGTE9XX1NVQl9MT05HLgorCisyMDE3LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZSwgY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDYwCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDYyCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDYzCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDY4CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaHNsb3RfZ3JpZF9maXRfbWV0cmljcyk6IFVzZQorCU9WRVJGTE9XX0FERF9MT05HIGFuZCBPVkVSRkxPV19TVUJfTE9ORy4KKworCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfY2FwdHVyZSksIHNyYy9jZmYvY2YyaGludHMuYworCShjZjJfaGludG1hcF9hZGp1c3RIaW50cyk6IFVzZSBPVkVSRkxPV19TVUJfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IFVzZXIKKwlPVkVSRkxPV19TVUJfTE9ORy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKERpcmVjdF9Nb3ZlLCBEaXJlY3RfTW92ZV9PcmlnLAorCURpcmVjdF9Nb3ZlX1gsIERpcmVjdF9Nb3ZlX1ksIERpcmVjdF9Nb3ZlX09yaWdfWCwKKwlEaXJlY3RfTW92ZV9PcmlnX1ksIE1vdmVfWnAyX1BvaW50LCBJbnNfTVNJUlApOiBVc2UKKwlPVkVSRkxPV19BRERfTE9ORyBhbmQgT1ZFUkZMT1dfU1VCX0xPTkcuCisKKzIwMTctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluOiBGaXggcGtnLWNvbmZpZyB0ZXN0ICgjNTExNjIpLgorCisJUGF0Y2ggZGlyZWN0bHkgdGFrZW4gZnJvbSBidWcgcmVwb3J0LgorCisyMDE3LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBTeW5jaHJvbml6ZSBzYW5pdHkgY2hlY2tzIHdpdGggcGNmIGRyaXZlci4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNTQKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNTgKKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogQ2hlY2sgZm9udCBhc2NlbnQgYW5kIGRlc2NlbnQuCisJQ2hlY2sgQVZFUkFHRV9XSURUSCwgUE9JTlRfU0laRSwgUElYRUxfU0laRSwgUkVTT0xVVElPTl9YLCBhbmQKKwlSRVNPTFVUSU9OX1kgcHJvcGVydGllcy4KKworMjAxNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA0NworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA1NworCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX21hcCk6IFVzZSBPVkVSRkxPV19TVUJfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfQUREKTogVXNlIE9WRVJGTE9XX0FERF9MT05HLgorCShJbnNfU1VCKTogVXNlIE9WRVJGTE9XX1NVQl9MT05HLgorCShJbnNfTkVHKTogVXNlIE5FR19MT05HLgorCisyMDE3LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlmdGNhbGMuaDogQXZvaWQgbGVmdC1zaGlmdCBvZiBuZWdhdGl2ZSBudW1iZXJzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA1NQorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChJTlRfVE9fRjI2RE9UNiwKKwlJTlRfVE9fRjJET1QxNCwgSU5UX1RPX0ZJWEVELCBGMkRPVDE0X1RPX0ZJWEVEKTogVXNlIG11bHRpcGxpY2F0aW9uLgorCisyMDE3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBFdmVuIG1vcmUgaW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDQ2CisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2RvU3RlbXMsIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBVc2UKKwlPVkVSRkxPV19BRERfSU5UMzIuCisKKzIwMTctMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIE1vcmUgaW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDMyCisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2luaXQpOiBVc2UgT1ZFUkZMT1dfU1VCX0lOVDMyLgorCisyMDE3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmRmXSBEb24ndCBsZWZ0LXNoaWZ0IG5lZ2F0aXZlIG51bWJlcnMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDMxCisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IFVzZSBtdWx0aXBsaWNhdGlvbi4KKworMjAxNy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRml4IGludGVnZXIgc2Nhbm5pbmcgcm91dGluZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDI5CisKKwkqIHNyYy9iZGYvYmRmbGliLmMgKF9iZGZfYXRvdWwsIF9iZGZfYXRvbCwgX2JkZl9hdG91cywgX2JkZl9hdG9zKToKKwlTdG9wIHNjYW5uaW5nIGlmIHJlc3VsdCB3b3VsZCBvdmVyZmxvdy4KKworMjAxNy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRml4IGludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjAyNworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjAyOAorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9oaW50bWFwX2luc2VydEhpbnQpLCBzcmMvY2ZmL2NmMmludHJwLmMKKwkoY2YyX2RvRmxleCk6IFVzZSBPVkVSRkxPV19BRERfSU5UMzIgYW5kIE9WRVJGTE9XX1NVQl9JTlQzMi4KKworMjAxNy0wNi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gU29tZSAzMmJpdCBpbnRlZ2VyIG92ZXJmbG93IHJ1bi10aW1lIGVycm9ycy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgW1NUQU5EQUxPTkVdIChPVkVSRkxPV19BRERfTE9ORywKKwlPVkVSRkxPV19TVUJfTE9ORywgT1ZFUkZMT1dfTVVMX0xPTkcsIE5FR19MT05HKTogTmV3IG1hY3Jvcy4KKwlbIVNUQU5EQUxPTkVdOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KKwkoZ3JheV9yZW5kZXJfY3ViaWMpOiBVc2UgdGhvc2UgbWFjcm9zIHdoZXJlIGFwcHJvcHJpYXRlLgorCisyMDE3LTA2LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2V0X0dseXBoKTogQ2hlY2sgYHNsb3QtPmFkdmFuY2UnLgorCisyMDE3LTA2LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIDMyYml0IGludGVnZXIgb3ZlcmZsb3cgdHVuLXRpbWUgZXJyb3JzICgjNDYxNDkpLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFVzZQorCU9WRVJGTE9XX0FERF9MT05HIGFuZCBPVkVSRkxPV19TVUJfTE9ORyB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAxNy0wNi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogQWRqdXN0IGxvb3AgY291bnRlciBhZ2Fpbi4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgTWFyZWsgS2HFocOtayA8bWthc2lrQHJlZGhhdC5jb20+LgorCisJVGhlIHByb2JsZW1hdGljIGZvbnQgdGhhdCBleGNlZWRzIHRoZSBvbGQgbGltaXQgaXMgUGFkYXVrLUJvbGQsCisJdmVyc2lvbiAzLjAwMiwgY29udGFpbmluZyBieXRlY29kZSBnZW5lcmF0ZWQgYnkgYSBidWdneSB2ZXJzaW9uIG9mCisJdHRmYXV0b2hpbnQuCisKKzIwMTctMDUtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIDMyYml0IGludGVnZXIgb3ZlcmZsb3cgcnVuLXRpbWUgZXJyb3JzIDIvMiAoIzQ2MTQ5KS4KKworCVRoaXMgY29tbWl0IGhhbmRsZXMgdGhlIG5ldyBlbmdpbmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKE9WRVJGTE9XX0FERF9JTlQzMiwKKwlPVkVSRkxPV19TVUJfSU5UMzIsIE9WRVJGTE9XX01VTF9JTlQzMiwgTkVHX0lOVCwgTkVHX0xPTkcsCisJTkVHX0lOVDMyKTogTmV3IG1hY3Jvcy4KKworCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZ2V0U2NhbGVBbmRIaW50RmxhZyk6IFVzZSBPVkVSRkxPV19BRERfSU5UMzIuCisKKwkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2dldFdpbmRpbmdNb21lbnR1bSwgY2YyX2hpbnRfaW5pdCwKKwljZjJfaGludG1hcF9tYXAsIGNmMl9nbHlwaHBhdGhfaGludFBvaW50LAorCWNmMl9nbHlwaHBhdGhfY29tcHV0ZUludGVyc2VjdGlvbiwgY2YyX2dseXBocGF0aF9jb21wdXRlT2Zmc2V0LAorCWNmMl9nbHlwaHBhdGhfbGluZVRvLCBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8pOiBVc2UKKwlPVkVSRkxPV19BRERfSU5UMzIsIE9WRVJGTE9XX1NVQl9JTlQzMiwgT1ZFUkZMT1dfTVVMX0lOVDMyLCBhbmQKKwlORUdfSU5UMzIgd2hlcmUgYXBwcm9wcmlhdGUuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2RvRmxleCwgY2YyX2RvQmxlbmQsCisJY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IERpdHRvLgorCUFsc28gYWRkIHNvbWUgb3RoZXIgY29kZSB3aGVyZSBuZWVkZWQgdG8gYXZvaWQgb3ZlcmZsb3cuCisKKzIwMTctMDUtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIDMyYml0IGludGVnZXIgb3ZlcmZsb3cgcnVuLXRpbWUgZXJyb3JzIDEvMiAoIzQ2MTQ5KS4KKworCVRoaXMgY29tbWl0IGhhbmRsZXMgdGhlIG9sZCBlbmdpbmUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0guCisJKGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogVXNlIE9WRVJGTE9XX0FERF9MT05HIGFuZAorCU9WRVJGTE9XX1NVQl9MT05HIHdoZXJlIG5lZWRlZC4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KKwkocG93ZXJfdGVuX2xpbWl0cyk6IE5ldyBzdGF0aWMgYXJyYXkuCisJKGRvX2ZpeGVkKTogVXNlIGl0IHRvIHByZXZlbnQgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3cuCisJKGNmZl9wYXJzZXJfcnVuKTogVXNlIE9WRVJGTE9XX0FERF9MT05HLgorCisyMDE3LTA1LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIENvcnJlY3RseSBoYW5kbGUgc2VxdWVuY2VzIG9mIG11bHRpcGxlIG51bWJlciBzaWducy4KKworCSogc3JjL3BzYXV4L3BzY29udi5jIChQU19Db252X1N0cnRvbCwgUFNfQ29udl9Ub0ZpeGVkKTogUmV0dXJuIHplcm8KKwlpZiB3ZSBlbmNvdW50ZXIgbW9yZSB0aGFuIGEgc2luZ2xlIHNpZ24uCisKKzIwMTctMDUtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwY2ZdIDMyYml0IGludGVnZXIgb3ZlcmZsb3cgcnVuLXRpbWUgZXJyb3JzICgjNDYxNDkpLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2dldF9hY2NlbCk6IEFkZCBzYW5pdHkgY2hlY2tzIGZvcgorCWBmb250QXNjZW50JyBhbmQgYGZvbnREZXNjZW50Jy4KKwkocGNmX2xvYWRfZm9udCk6IEFkZCBzYW5pdHkgY2hlY2tzIGZvciBnbG9iYWwgaGVpZ2h0LgorCUFkZCBzYW5pdHkgY2hlY2tzIGZvciBBVkVSQUdFX1dJRFRILCBQT0lOVF9TSVpFLCBQSVhFTF9TSVpFLAorCVJFU09MVVRJT05fWCwgYW5kIFJFU09MVVRJT05fWSBwcm9wZXJ0aWVzLgorCisyMDE3LTA1LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlIYW5kbGUgc29tZSBpbnRlZ2VyIG92ZXJmbG93IHJ1bi10aW1lIGVycm9ycyAoIzQ2MTQ5LCAjNDg5NzkpLgorCisJVGhpcyBjb21taXQgKG1haW5seSBmb3IgMzJiaXQgQ1BVcykgaXMgdGhlIGZpcnN0IG9mIGEgc2VyaWVzIG9mCisJc2ltaWxhciBjb21taXRzIHRvIGhhbmRsZSBrbm93biBpbnRlZ2VyIG92ZXJmbG93cy4gIEJhc2ljYWxseSwgYWxsCisJb2YgdGhlbSBhcmUgaGFybWxlc3MsIHNpbmNlIHRoZXkgYWZmZWN0IHJlbmRlcmluZyBvZiBnbHlwaHMgb25seSwKKwlub3QgcG9zaW5nIHNlY3VyaXR5IHRocmVhdHMuICBJdCBpcyBleHBlY3RlZCB0aGF0IGZ1enp5aW5nIHdpbGwgc2hvdworCXVwIG1vcmUgb3ZlcmZsb3dzLCB0byBiZSBmaXhlZCBpbiBkdWUgY291cnNlLgorCisJVGhlIGlkZWEgaXMgdG8gbWFyayBwbGFjZXMgd2hlcmUgb3ZlcmZsb3dzIGNhbiBvY2N1ciwgdXNpbmcgbWFjcm9zCisJdGhhdCBzaW1wbHkgY2FzdCB0byB1bnNpZ25lZCBpbnRlZ2VycywgYmVjYXVzZSBvdmVyZmxvdyBhcml0aG1ldGljCisJaXMgd2VsbCBkZWZpbmVkIGluIHRoaXMgY2FzZS4gIERvaW5nIHNvIHN1cHByZXNzZXMgcnVuLXRpbWUgZXJyb3JzCisJb2Ygc2FuaXRpemVycyB3aXRob3V0IGFkZGluZyBjb21wdXRhdGlvbmFsIG92ZXJoZWFkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChPVkVSRkxPV19BRERfSU5ULAorCU9WRVJGTE9XX1NVQl9JTlQsIE9WRVJGTE9XX01VTF9JTlQsIE9WRVJGTE9XX0FERF9MT05HLAorCU9WRVJGTE9XX1NVQl9MT05HLCBPVkVSRkxPV19NVUxfTE9ORyk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9Sb3VuZEZpeCwgRlRfQ2VpbEZpeCwgRlRfTWF0cml4X011bHRpcGx5LAorCUZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQsIEZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkLAorCWZ0X2Nvcm5lcl9vcmllbnRhdGlvbik6IFVzZSBuZXcgbWFjcm9zLgorCisJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKTogVXNlIG5ldyBtYWNyb3MuCisKKzIwMTctMDUtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoRkxPQVRfVE9fRklYRUQpOiBSZW1vdmUuCisKKwlUaGlzIG1hY3JvIGlzIG5vdCB1c2VkLgorCisyMDE3LTA1LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBzL2NmMl9mbG9hdFRvRml4ZWQvY2YyX2RvdWJsZVRvRml4ZWQvLgorCisJVGhlIG5ldyBuYW1lIGJldHRlciBkZXNjcmliZXMgd2hhdCB0aGUgbWFjcm8gYWN0dWFsbHkgZG9lczsKKwlhZGRpdGlvbmFsbHksIHdlIGRvbid0IG5lZWQgYSB0cmFpbGluZyBgZicgZm9yIGxpdGVyYWxzICh0aGVyZSB3YXMKKwlvbmx5IGEgc2luZ2xlIHN1Y2ggaW5zdGFuY2UgaW4gdGhlIGNvZGUsIGJ1dCB0aGlzIGNhdXNlZCBhIGNsYW5nCisJd2FybmluZyBiZWNhdXNlIHRoZSBtYWNybyBpdHNlbGYgdXNlcyBgZG91YmxlJyBsaXRlcmFscykuCisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYywgc3JjL2NmZi9jZjJibHVlcy5oLCBzcmMvY2ZmL2NmMmZpeGVkLmgsCisJc3JjL2NmZi9jZjJmb250LmMsIHNyYy9jZmYvY2YyaGludHMuYzogVXBkYXRlZC4KKworMjAxNy0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IG5lZ2F0aW9uIG9mIElOVF9NSU4gYW5kIExPTkdfTUlOICgjNDYxNDkpLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTU9WRV9TSUdOKTogQWRkIGFyZ3VtZW50IHRvIHBhc3MgdW5zaWduZWQKKwl2YWx1ZSwgdG8gYmUgdXNlZCBhcyB0aGUgcmVzdWx0LgorCShGVF9NdWxEaXYsIEZUX011bERpdl9Ob19Sb3VuZCwgRlRfRGl2Rml4LCBGVF9NdWxGaXgsCisJRlRfVmVjdG9yX05vcm1MZW4pOiBVcGRhdGVkLgorCisyMDE3LTA1LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBoYW5kbGluZyBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgKCM1MTEyNykuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X3NldF9tbV9ibGVuZCk6IENvbXB1dGUgYWxsIGRlc2lnbgorCWNvb3JkaW5hdGVzIGlmIHdlIGhhdmUgdG8gY3JlYXRlIHRoZSBgYmxlbmRzLT5jb29yZCcgYXJyYXkuCisJKFRUX0dldF9NTV9CbGVuZCwgVFRfR2V0X1Zhcl9EZXNpZ24pOiBTZWxlY3QgZGVmYXVsdCBpbnN0YW5jZQorCWNvb3JkaW5hdGVzIGlmIG5vIGluc3RhbmNlIGlzIHNlbGVjdGVkIHlldC4KKworMjAxNy0wNS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZiwgcGNmXSBTdXBwb3J0IElTTzY0Ni4xOTkxLUlSViBjaGFyYWN0ZXIgZW5jb2RpbmcgKGFrYSBBU0NJSSkuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmVrIEthxaHDrWsgPG1rYXNpa0ByZWRoYXQuY29tPiwgY2YuCisKKwkgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MTc5NQorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpLCBzcmMvcGNmL3BjZmRyaXZyLmMKKwkoUENGX0ZhY2VfSW5pdCk6IEltcGxlbWVudCBpdC4KKworMjAxNy0wNS0yMCAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBBbHdheXMgdXNlIGludGVycHJldGVyIHYzNSBmb3IgQi9XIHJlbmRlcmluZyAoIzUxMDUxKS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfbG9hZGVyX2luaXQpCisJW1RUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMXTogQWRqdXN0CisJYHN1YnBpeGVsX2hpbnRpbmdfbGVhbicsIGBncmF5c2NhbGVfY2xlYXJ0eXBlJywgYW5kCisJYHZlcnRpY2FsX2xjZF9sZWFuJyBhY2NvcmRpbmdseS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19HRVRJTkZPKTogVXBkYXRlZC4KKwkoVFRfUnVuSW5zKTogVXBkYXRlIGBiYWNrd2FyZF9jb21wYXRpYmlsaXR5JyBmbGFnLgorCisyMDE3LTA1LTIwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBJbXBsZW1lbnQgbWluaW1hbCBkeW5hbWljIHBhZGRpbmcgZm9yIExDRCBmaWx0ZXJpbmcuCisKKwlFeHRyYSBiaXRtYXAgcGFkZGluZyBmb3IgTENEIGZpbHRlcmluZyBkZXBlbmRzIG9uIHRoZSBmaWx0ZXIuICBUaGUKKwlkZWZhdWx0IDUtdGFwIGZpbHRlciBuZWVkcyAyIGV4dHJhIHN1YnBpeGVscy4gIFRoZSBsaWdodCAzLXRhcCBmaWx0ZXIKKwluZWVkcyBvbmx5IDEgZXh0cmEgc3VicGl4ZWwuICBUaGlzIHNwYWNlIGNvdWxkIGJlIGFscmVhZHkgYXZhaWxhYmxlCisJZHVlIHRvIHJvdW5kaW5nLiAgSW4gb3JkZXIgdG8gb3B0aW1pemUgdGhlIHBhZGRpbmcsIHdlIG5vdyBleHBhbmQKKwlDQm94IGZvciB0aGUgZ2l2ZW4gZmlsdGVyIHdlaWdodHMgYmVmb3JlIHJvdW5kaW5nLgorCisJVGhpcyBjaGFuZ2UgYnJlYWtzIGN1cnJlbnQgU2tpYSAoYW5kIEZpcmVmb3gpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9MaWJyYXJ5UmVjKQorCVtGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IFJlbW92ZSBgbGNkX2V4dHJhJyBmaWVsZC4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzLAorCUZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKTogUmVtb3ZlIGBsY2RfZXh0cmEnIGluaXRpYWxpemF0aW9ucy4KKworCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBJbXBsZW1lbnQgZHltYW5pYworCUxDRCBwYWRkaW5nLgorCisyMDE3LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gUmV0dXJuIHByb3BlciBzY2FsaW5nIHZhbHVlcyBmb3IgU0JJWCBiaXRtYXBzLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzKTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA1LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBlcnJvciBoYW5kbGluZyBmb3IgZW1iZWRkZWQgYml0bWFwcy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfTG9hZF9HbHlwaCkKKwlbVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTXTogSGFuZGxlIGVycm9yIGlmIGZvbnQgaXMgbm90CisJc2NhbGFibGUuCisKKzIwMTctMDUtMTUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVthdXRvZml0XSBNYWtlIGF1dG9oaW50IHdhcnBpbmcgTk9STUFMIG9wdGlvbi4KKworCVRoaXMgbW92ZXMgd2FycGluZyBvcHRpb24gZnJvbSBMSUdIVCB0byBOT1JNQUwgbW9kZS4gIFRoaXMgbWFrZXMgTElHSFQKKwl0cnVseSB2b2lkIG9mIGhpbnRpbmcgaW4geC1kaXJlY3Rpb24sIHdpdGggbGVmdCBzaWRlIGJlYXJpbmcgbmV2ZXIKKwljaGFuZ2VkIGFuZCByaWdodCBzaWRlIGJlYXJpbmcgb25seSBhbHRlcmVkIGJ5IGFkdmFuY2Ugcm91bmRpbmcuCisJVGhlcmVmb3JlLCBMSUdIVCBpcyBub3cgcmVhZHkgdG8gcmV0dXJuIGZyYWN0aW9uYWwgYWR2YW5jZS4gIEFzIGEKKwlOT1JNQUwgb3B0aW9uLCB3YXJwaW5nIHN1YnN0aXR1dGVzIG5vcm1hbCBoaW50aW5nLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfYXBwbHkpOiBVcGRhdGVkLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19hcHBseSk6IFVwZGF0ZWQuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluMi5jIChhZl9sYXRpbjJfaGludHNfYXBwbHkpOiBVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IEhhbmRsZSB3YXJwaW5nCisJcGhhbnRvbSBwb2ludHMgYXMgbm9ybWFsLgorCisyMDE3LTA1LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgcmVtbmFudHMgb2YgcmFzdGVyIHBvb2wuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0xpYnJhcnlSZWMpOiBSZW1vdmUKKwlgcmFzdGVyX3Bvb2wnIGFuZCBgcmFzdGVyX3Bvb2xfc2l6ZScgZmllbGRzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTmV3X0xpYnJhcnkpLCBzcmMvcmFzdGVyL2Z0cmVuZDEuYworCShmdF9yYXN0ZXIxX2luaXQpLCBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9pbml0KTogVXBkYXRlZC4KKworMjAxNy0wNS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuOCByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi04Jy4KKworCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuOC4KKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNy4xLzIuOC8sIHMvMjcxLzI4Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUik6IFNldCB0byA4LgorCShGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAwLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMjA6MDoxNC4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX01JTk9SKTogU2V0IHRvIDguCisJKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMC4KKworMjAxNy0wNS0xMiAgSGluLVRhayBMZXVuZyAgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCUZpeCBgRlRfVUlOVF9UT19QT0lOVEVSJyBtYWNybyBmb3IgV2luZG93cy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9VSU5UX1RPX1BPSU5URVIpIFtfV0lONjRdOgorCUZpeCBkZWZpbml0aW9uLgorCisyMDE3LTA1LTExICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBDaGFrbWEgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIENoYWttYS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBDaGFrbWEgc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQ2hha21hIGRhdGEuCisKKzIwMTctMDUtMTAgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEtheWFoIExpIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBLYXlhaCBMaS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBLYXlhaCBMaSBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBLYXlhaCBMaSBkYXRhLgorCisyMDE3LTA1LTEwICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBCYW11bSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQmFtdW0uCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQmFtdW0gc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQmFtdW0gZGF0YS4KKworMjAxNy0wNS0xMCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgU2F1cmFzaHRyYSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgU2F1cmFzaHRyYS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBTYXVyYXNodHJhIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFNhdXJhc2h0cmEKKwlkYXRhLgorCisyMDE3LTA1LTEwICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBCdWhpZCBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQnVoaWQuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQnVoaWQgc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQnVoaWQgZGF0YS4KKworMjAxNy0wNS0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgU2hhdmlhbiBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgU2hhdmlhbi4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBTaGF2aWFuIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFNoYXZpYW4gZGF0YS4KKworMjAxNy0wNS0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgVmFpIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBWYWkuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgVmFpIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFZhaSBkYXRhLgorCisyMDE3LTA1LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBPc21hbnlhIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBPc21hbnlhLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE9zbWFueWEgc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgT3NtYW55YSBkYXRhLgorCisyMDE3LTA1LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBDb3B0aWMgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIENvcHRpYy4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBDb3B0aWMgc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQ29wdGljIGRhdGEuCisKKzIwMTctMDUtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIENhcmlhbiBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQ2FyaWFuLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIENhcmlhbiBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBDYXJpYW4gZGF0YS4KKworMjAxNy0wNS0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBBZGQgdHJpY2t5IGZvbnQgYERGR2lybC1XNi1XSU4tQkYnIChmcm9tIER5bmFsYWIpLgorCisJUmVwb3J0ZWQgYnkgUm95IFRhbSA8cm95dGFtQGdtYWlsLmNvbT4uCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHkpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMDUtMDcgIFJveSBUYW0gIDxyb3l0YW1AZ21haWwuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1vcmUgdHJpY2t5IGZvbnRzIChtYWlubHkgZnJvbSBEeW5hbGFiKS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzX2ZhbWlseSwKKwl0dF9jaGVja190cmlja3luZXNzX3NmbnRfaWRzKTogQWRkIHRoZW0uCisKKzIwMTctMDUtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWRkIHRyaWNreSBmb250IGBETENIYXlNZWRpdW0nIChmcm9tIER5bmFsYWIpLgorCisJUmVwb3J0ZWQgYnkgUm95IFRhbSA8cm95dGFtQGdtYWlsLmNvbT4uCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHkpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMDUtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSovKjogcy9iYWNrd2FyZHMgY29tcGF0aWJpbGl0eS9iYWNrd2FyZCBjb21wYXRpYmlsaXR5Ly4KKworMjAxNy0wNS0wMyAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgVW5pZmllZCBDYW5hZGlhbiBTeWxsYWJpY3Mgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFVuaWZpZWQgQ2FuYWRpYW4KKwlTeWxsYWJpY3MuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgVW5pZmllZCBDYW5hZGlhbiBTeWxsYWJpY3Mgc3RhbmRhcmQKKwljaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBVbmlmaWVkCisJQ2FuYWRpYW4gU3lsbGFiaWNzIGRhdGEuCisKKzIwMTctMDUtMDMgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFkZCBibHVlLXpvbmUgc3VwcG9ydCBmb3IgU3VuZGFuZXNlIHNjcmlwdC4KKworCVRoaXMgZXNzZW50aWFsbHkgbW92ZXMgdGhlIFN1bmRhbmVzZSBzY3JpcHQgZnJvbSB0aGUgYEluZGljJyBoaW50ZXIKKwl0byB0aGUgYExhdGluJyBoaW50ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgU3VuZGFuZXNlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgU3VuZGFuZXNlIHN0YW5kYXJkIGNoYXJhY3RlciBhbmQgbW92ZQorCWRhdGEgb3V0IG9mIEFGX0NPTkZJR19PUFRJT05fSU5ESUMgYmxvY2suCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmM6IE1vdmUgU3VuZGFuZXNlIGRhdGEgb3V0IG9mCisJQUZfQ09ORklHX09QVElPTl9JTkRJQyBibG9jay4KKworCSogc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogVXBkYXRlIFN1bmRhbmVzZSBkYXRhOyBpbiBwYXJ0aWN1bGFyLCB1c2UKKwlBRl9XUklUSU5HX1NZU1RFTV9MQVRJTi4KKworMjAxNy0wNS0wMyAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQXZlc3RhbiBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQXZlc3Rhbi4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBBdmVzdGFuIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEF2ZXN0YW4gZGF0YS4KKworMjAxNy0wNS0wMiAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1ha2UgYElVUCcgZ3ZhciBkZWx0YXMgZG8gdGhlIHNhbWUgYXMgQXBwbGUgKCM1MDgzMikuCisKKwlXaGVuIHBvaW50cyBhcmUgbm90IHRvdWNoZWQgYnkgZ3ZhciBpbnRlcnBvbGF0aW9uIGRlbHRhcywgRnJlZVR5cGUKKwlnYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlc3VsdCB0aGFuIEFwcGxlJ3MgQ29yZVRleHQuCisKKwlUaGUgT3BlblR5cGUgd29ya2luZyBncm91cCB3aWxsIHVwZGF0ZSB0aGUgc3BlY2lmaWNhdGlvbiB0byBkb2N1bWVudAorCXRoZSBmb2xsb3dpbmcgYmVoYXZpb3VyOiBJZiB0aGUgdHdvIHBvaW50cyB3aXRoIGRlbHRhcyB0byB0aGUgYGxlZnQnCisJYW5kIGByaWdodCcgb2YgdGhlIHVudG91Y2hlZCBwb2ludCBoYXZlIHRoZSBzYW1lIGNvb3JkaW5hdGUsIHRoZW4KKwl0aGUgaW5mZXJyZWQgZGVsdGEgZm9yIHRoZSB1bnRvdWNoZWQgcG9pbnQgc2hvdWxkIGJlIHplcm8uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2RlbHRhX2ludGVycG9sYXRlKTogSW1wbGVtZW50IG5ldworCWJlaGF2aW91ci4KKworMjAxNy0wNS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFJlbW92ZSBgc2xpZ2h0JyBhdXRvLWhpbnQgbW9kZSBhZ2Fpbi4KKworCUEgcG9sbCBvbiBmcmVldHlwZS1kZXZlbCBmYXZvdXJlZCBjaGFuZ2VzIGRpcmVjdGx5IGFwcGxpZWQgdG8KKwlgbGlnaHQnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xPQURfVEFSR0VUX1NMSUdIVCwKKwlGVF9SRU5ERVJfTU9ERV9TTElHSFQpOiBSZW1vdmVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfaW5pdCksIHNyYy9hdXRvZml0L2FmbGF0aW4uYworCShhZl9sYXRpbl9oaW50c19pbml0KSwgc3JjL2F1dG9maXQvYWZsYXRpbjIuYworCShhZl9sYXRpbjJfaGludHNfaW5pdCk6IFJldmVydCBjaGFuZ2UgZnJvbSAyMDE3LTA0LTIyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCkgUmVtb3ZlIHJlZmVyZW5jZXMgdG8KKwlGVF9SRU5ERVJfTU9ERV9TTElHSFQuCisJW0FGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTXTogRW5hYmxlIFRydWVUeXBlLWxpa2UgbWV0cmljcworCXVuY29uZGl0aW9uYWxseS4KKworCSogc3JjL2Jhc2UvZnRhZHZhbmMuYyAoTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0spOiBSZXZlcnQgY2hhbmdlIGZyb20KKwkyMDE3LTA0LTIyLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFJldmVydCBjaGFuZ2UgZnJvbSAyMDE3LTA0LTIyLgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jIChwc19oaW50c19hcHBseSk6IFJldmVydCBjaGFuZ2UgZnJvbQorCTIwMTctMDQtMjIuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcik6IFJldmVydCBjaGFuZ2UgZnJvbQorCTIwMTctMDQtMjIuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNy0wNC0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBtZXRyaWNzIGNvbXB1dGF0aW9uLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBNYXJrdXMgVHJpcHBlbHNkb3JmIDxtYXJrdXNAdHJpcHBlbHNkb3JmLmRlPiBhbmQKKwlOaWtvbGF1cyBXYXh3ZWlsZXIgPG1hZGlnZW5zQGdtYWlsLmNvbT4uCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZXF1ZXN0X1NpemUpOiBUcmlnZ2VyIHJlY29tcHV0YXRpb24gb2YKKwlhdXRvLWhpbnRlciBtZXRyaWNzLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgbXVsdGlwbGUgc2l6ZSBjaGFuZ2luZworCWNhbGxzIGZvciBhIHNpbmdsZSBmYWNlIGZhaWwuCisKKzIwMTctMDQtMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfcmVxdWVzdCk6IFByb3Blcmx5IGNoZWNrIGBlcnJvcicuCisKKwlSZXBvcnRlZCBieSBFYXJuZXN0bHkgPHppYmVvbkBnb29nbGVtYWlsLmNvbT4gaW4KKworCSAgaHR0cHM6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDE3LTA0L21zZzAwMDMxLmh0bWwKKworMjAxNy0wNC0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW50cm9kdWNlIEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisJKEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTKTogTmV3IG9wdGlvbiwgY29tbWVudGVkIG91dCBieQorCWRlZmF1bHQuCisKKwkqIHNyYy9hdXRvZml0L2FmbG9hZGVyLmMgKGFmX2xvYWRlcl9sb2FkX2dseXBoKTogVXNlCisJQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgdG8gZ3VhcmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZS4KKworMjAxNy0wNC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX1JlbmRlcl9Nb2RlKTogRml4IG9yZGVyLgorCisJVGhpcyByZXRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKwlOb3RlZCBieSBBbGV4ZWkuCisKKzIwMTctMDQtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRG8gbGluZWFyIHNjYWxpbmcgZm9yIEZUX0xPQURfTk9fSElOVElORyAoIzUwNDcwKS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChUVF9TaXplUmVjKTogQWRkIGZpZWxkIGBoaW50ZWRfbWV0cmljcycgdG8KKwlob2xkIGhpbnRlZCBtZXRyaWNzLgorCU1ha2UgYG1ldHJpY3MnIGEgcG9pbnRlciBzbyB0aGF0IGB0dF9nbHlwaF9sb2FkJyBjYW4gZWFzaWx5IHN3aXRjaAorCWJldHdlZW4gbWV0cmljcy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfcmVxdWVzdCk6IFVwZGF0ZWQuCisJKHR0X2dseXBoX2xvYWQpOiBVc2UgdG9wLWxldmVsIG1ldHJpY3MgaWYgRlRfTE9BRF9OT19ISU5USU5HIGlzCisJdXNlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfSGludF9HbHlwaCwgVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgsCisJVFRfUHJvY2Vzc19Db21wb3NpdGVfQ29tcG9uZW50LCBsb2FkX3RydWV0eXBlX2dseXBoLAorCWNvbXB1dGVfZ2x5cGhfbWV0cmljcywgVFRfTG9hZF9HbHlwaCk6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9Mb2FkX0NvbnRleHQpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcmVzZXQpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyAoc3BoX3NldF90d2Vha3MpOiBVcGRhdGVkLgorCisyMDE3LTA0LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgbmV3IGBzbGlnaHQnIGF1dG8taGludGluZyBtb2RlLgorCisJVGhpcyBtb2RlIHVzZXMgZnJhY3Rpb25hbCBhZHZhbmNlIHdpZHRocyBhbmQgZG9lc24ndCBzY2FsZSBnbHlwaHMKKwlob3Jpem9udGFsbHksIG9ubHkgYXBwbHlpbmcgdmVydGljYWwgc2NhbGluZyBhbmQgaGludGluZy4KKworCUF0IHRoZSBzYW1lIHRpbWUsIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGBsaWdodCcgYXV0by1oaW50ZXIgZ2V0cworCXJlc3RvcmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBCb3RoIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsCisJc2NhbGluZyBpcyBhZ2FpbiBiYXNlZCBvbiByb3VuZGVkIG1ldHJpY3MgdmFsdWVzICh0aGlzIHdhcyBjaGFuZ2VkCisJaW4gYSBjb21taXQgZnJvbSAyMDE3LTAzLTMwIGFzIGEgc2lkZSBlZmZlY3QpLiAgVG8gYmUgbW9yZSBwcmVjaXNlLAorCXRoZSBiZWhhdmlvdXIgaXMgcmVzdG9yZWQgZm9yIFRydWVUeXBlIGZvbnRzIG9ubHk7IGZvciBvdGhlciBmb250CisJZm9ybWF0cyBsaWtlIFR5cGUgMSwgdGhpcyBpcyBhIG5ldyBmZWF0dXJlIG9mIHRoZSBgbGlnaHQnIGhpbnRpbmcKKwltb2RlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xPQURfVEFSR0VUX1NMSUdIVCk6IE5ldyBtYWNyby4KKwkoRlRfUkVOREVSX01PREVfU0xJR0hUKTogTmV3IHJlbmRlciBtb2RlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9TaXplX0ludGVybmFsUmVjKTogQWRkCisJYGF1dG9oaW50X21vZGUnIGFuZCBgYXV0b2hpbnRfbWV0cmljcycgZmllbGRzLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfaW5pdCksIHNyYy9hdXRvZml0L2FmbGF0aW4uYworCShhZl9sYXRpbl9oaW50c19pbml0KSwgc3JjL2F1dG9maXQvYWZsYXRpbjIgKGFmX2xhdGluMl9oaW50c19pbml0KToKKwlVcGRhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfZW1ib2xkZW5fZ2x5cGhfaW5fc2xvdCk6IFVzZQorCWBhdXRvaGludF9tZXRyaWNzJy4KKwkoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiBzL2ludGVybmFsL3Nsb3RfaW50ZXJuYWwvLgorCUluaXRpYWxpemUgYGF1dG9oaW50X21ldHJpY3MnIGFuZCBgYXV0b2hpbnRfbW9kZScgZGVwZW5kaW5nIG9uCisJY3VycmVudCBhdXRvLWhpbnQgbW9kZS4KKwlVc2UgYGF1dG9oaW50X21ldHJpY3MnLgorCVVwZGF0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jLmMgKExPQURfQURWQU5DRV9GQVNUX0NIRUNLKTogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCShGVF9OZXdfU2l6ZSk6IEFsbG9jYXRlIGBpbnRlcm5hbCcgb2JqZWN0LgorCisJKiBzcmMvcHNoaW50ZXIvcHNoYWxnby5jIChwc19oaW50c19hcHBseSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcik6IFVwZGF0ZWQuCisKKzIwMTctMDQtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUludHJvZHVjZSBgRlRfU2l6ZV9JbnRlcm5hbFJlYycgc3RydWN0dXJlLgorCisJV2UgYXJlIGdvaW5nIHRvIGV4dGVuZCB0aGlzIGxhdGVyIG9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9TaXplX0ludGVybmFsUmVjKTogTmV3CisJc3RydWN0dXJlIHdpdGggYSBzaW5nbGUgZmllbGQgYG1vZHVsZV9kYXRhJy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19TaXplKTogQWxsb2NhdGUgYGludGVybmFsJyBmaWVsZCBvZgorCWBGVF9TaXplJyBzdHJ1Y3R1cmUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2J1aWxkZXJfaW5pdCwgY2ZmX2RlY29kZXJfcHJlcGFyZSk6IFVzZQorCWBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEnIGluc3RlYWQgb2YgYHNpemUtPmludGVybmFsJy4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9zaXplX2RvbmUpOiBEZWFsbG9jYXRlIGBtb2R1bGVfZGF0YScuCisJKGNmZl9zaXplX2luaXQsIGNmZl9zaXplX3NlbGVjdCwgY2ZmX3NpemVfcmVxdWVzdCk6IFVzZQorCWBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEnIGluc3RlYWQgb2YgYHNpemUtPmludGVybmFsJy4KKworCSogc3JjL2NpZi9jaWRvYmpzLmMgKGNpZF9zaXplX2RvbmUsIGNpZF9zaXplX2luaXQsCisJY2lkX3NpemVfcmVxdWVzdCk6IFVzZSBgc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhJyBpbnN0ZWFkIG9mCisJYHNpemUtPmludGVybmFsJy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jICh0MV9idWlsZGVyX2luaSk6IFVzZQorCWBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEnIGluc3RlYWQgb2YgYHNpemUtPmludGVybmFsJy4KKworCSogc3JjL3R5cGUxL3Qxb2Jqcy5jIChUMV9TaXplX0RvbmUsIFQxX1NpemVfSW5pdCwgVDFfU2l6ZV9SZXF1ZXN0KToKKwlVc2UgYHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YScgaW5zdGVhZCBvZiBgc2l6ZS0+aW50ZXJuYWwnLgorCisyMDE3LTA0LTIxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguaDogUmVtb3ZlIHVudXNlZCBndWFyZHMgYW5kIGRlY2xhcmF0aW9uLgorCisyMDE3LTA0LTE2ICBIaW4tVGFrIExldW5nICA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJRml4IHRyYWNpbmcgbWVzc2FnZXMuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgsCisJRlRfRmFjZV9HZXRDaGFyVmFyaWFudElzRGVmYXVsdCwgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhcik6IFByaW50CisJY29ycmVjdCBmdW5jdGlvbiBuYW1lLgorCisyMDE3LTA0LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBPbGQgVHVya2ljIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBPbGQgVHVya2ljLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE9sZCBUdXJraWMgc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE9sZCBUdXJraWMgZGF0YS4KKworMjAxNy0wNC0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgR290aGljIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBHb3RoaWMuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgR290aGljIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBHb3RoaWMgZGF0YS4KKworMjAxNy0wNC0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQ3lwcmlvdCBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQ3lwcmlvdC4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBDeXByaW90IHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBDeXByaW90IGRhdGEuCisKKzIwMTctMDQtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIERlc2VyZXQgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIERlc2VyZXQuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgRGVzZXJldCBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgRGVzZXJldCBkYXRhLgorCisyMDE3LTA0LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gRml4IGludmFsaWQgY2hhcmFjdGVyIHJhbmdlIGRlc2NyaXB0aW9uICgjNTA3NDUpLgorCisJQWxzbyByZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0xMDM0CisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMgKGFmX2dsYWdfbm9uYmFzZV91bmlyYW5nZXMpOiBGaXggdHlwbyBpbgorCXJlY2VudCBjb21taXQuCisKKzIwMTctMDQtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdGZ1enplcl0gRml4IGNsYW5nIHdhcm5pbmdzLgorCisJKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBBZGQKKwljYXN0cy4KKworMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgTGlzdSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgTGlzdS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBMaXN1IHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBMaXN1IGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIE9zYWdlIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBPc2FnZS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBPc2FnZSBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgT3NhZ2UgZGF0YS4KKworMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgR2xhZ29saXRpYyBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgR2xhZ29saXRpYy4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBHbGFnb2xpdGljIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBHbGFnb2xpdGljIGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFRhaSBWaWV0IHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBUYWkgVmlldC4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBUYWkgVmlldCBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgVGFpIFZpZXQgZGF0YS4KKworMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgVGlmaW5hZ2ggc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFRpZmluYWdoLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFRpZmluYWdoIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBUaWZpbmFnaCBkYXRhLgorCisyMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBOJ0tvIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBOJ0tvLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE4nS28gc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE4nS28gZGF0YS4KKworMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBBZGxhbSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgQWRsYW0uCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQWRsYW0gc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEFkbGFtIGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgT2wgQ2hpa2kgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIE9sIENoaWtpLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIE9sIENoaWtpIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE9sIENoaWtpIGRhdGEuCisKKzIwMTctMDQtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQXZvaWQgcmVleGVjdXRpb24gb2YgYGZwZ20nIGFuZCBgcHJlcCcgaW4gY2FzZSBvZiBlcnJvci4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTk4MQorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggKEZUX0Vycl9ERUZfSW5fR2x5Zl9CeXRlY29kZSk6IE5ldworCWVycm9yIGNvZGUuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfRkRFRiwgSW5zX0lERUYpOiBQcm9oaWJpdCBleGVjdXRpb24KKwlvZiB0aGVzZSB0d28gb3Bjb2RlcyBpbiBgZ2x5ZicgYnl0ZWNvZGUuCisJKFRUX1J1bklucyk6IERvbid0IGVuZm9yY2UgcmVleGVjdXRpb24gb2YgYGZwZ20nIGFuZCBgcHJlcCcgYnl0ZWNvZGUKKwlpbiBjYXNlIG9mIGVycm9yIHNpbmNlIGZ1bmN0aW9uIHRhYmxlcyBjYW4gbm8gbG9uZ2VyIGJlIG1vZGlmaWVkCisJKGR1ZSB0byB0aGUgY2hhbmdlcyBpbiBgSW5zX0ZERUYnIGFuZCBgSW5zX0lERUYnKS4gIFRoaXMgY2hhbmdlIGNhbgorCWVub3Jtb3VzbHkgc3BlZWQgdXAgaGFuZGxpbmcgb2YgYnJva2VuIGZvbnRzLgorCisyMDE3LTA0LTAyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYXV0b2ZpdF0gRGlzYWJsZSBtZXRyaWNzIGFkanVzdG1lbnQgZm9yIGBGVF9MT0FEX1RBUkdFVF9MQ0QnLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2luaXQpOiBVcGRhdGVkLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX2hpbnRzX2luaXQpOiBEaXR0by4KKworMjAxNy0wNC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jOiBJbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSC4KKworCU90aGVyd2lzZSBGVF9VSU5UX1RPX1BPSU5URVIgbWlnaHQgbm90IGJlIGRlZmluZWQuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEFsZXhlaS4KKworMjAxNy0wMy0zMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2F1dG9maXRdIERpc2FibGUgc3RlbSBhZGp1c3RtZW50IGZvciBgRlRfTE9BRF9UQVJHRVRfTENEJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9MT0FEX1RBUkdFVF9MQ0QpOiBEb2N1bWVudCBpdC4KKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19oaW50c19pbml0KTogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfaW5pdCk6IERpdHRvLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX2hpbnRzX2luaXQpOiBEaXR0by4KKworMjAxNy0wMy0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IEltcHJvdmUgZml4IGZyb20gMjAxNy0wMS0wNC4KKworCUFsbG93IENGRnMgY29udGFpbmluZyBhIHNpbmdsZSBmb250IHRvIGhhdmUgYW4gZW1wdHkgZm9udCBuYW1lLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSDlvLXkv4roip0gPDQxODA5MjYyNUBxcS5jb20+IGluCisKKwkgIGh0dHBzOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNy0wMy9tc2cwMDA3NC5odG1sCisKKzIwMTctMDMtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5oIChDRkYyX0RFRkFVTFRfU1RBQ0spOiBTZXQgdG8gNTEzIGFsc28uCisKKwlSZXF1ZXN0ZWQgYnkgRGF2ZSBBcm5vbGQuCisKKzIwMTctMDMtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IEhWQVIgYW5kIFZWQVIgaGFuZGxpbmcgKCM1MDY3OCkuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2h2YWR2YW5jZV9hZGp1c3QpOiBIYW5kbGUKKwlnbHlwaCBpbmRpY2VzIGxhcmdlciB0aGFuIGBtYXBDb3VudCcgYXMgZGVzY3JpYmVkIGluIHRoZQorCXNwZWNpZmljYXRpb24uCisKKzIwMTctMDMtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWxsb3cgbGluZWFyIHNjYWxpbmcgZm9yIHVuaGludGVkIHJlbmRlcmluZyAoIzUwNDcwKS4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NpemVfcmVxdWVzdCk6IFJldmVydCBjaGFuZ2UgZnJvbQorCTIwMTEtMDctMTY7IHRoZSBpbnRlbmRlZCBtZXRyaWNzIGZpeCBzZWVtcyBub3cgdG8gYmUgaW1wbGVtZW50ZWQgaW4KKwlhIGRpZmZlcmVudCB3YXksIG1ha2luZyB0aGUgcGF0Y2ggdW5uZWNlc3NhcnkuICBOb3RlIHRoYXQgdGhpcworCWNoYW5nZSB3YXMgdXN1YWxseSBwYXRjaGVkIG91dCBieSBhbGwgbWFqb3IgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMKKwlkdWUgdG8gaGVhdnkgc2lkZSBlZmZlY3RzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MsIFRUX0xvYWRfR2x5cGgpOgorCVJlZmVyIHRvIHRoZSBtZXRyaWNzIG9mIHRoZSBgVFRfU2l6ZScgb2JqZWN0LgorCisyMDE3LTAzLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCB0aGlua28gcmVsYXRlZCB0byBQUyBuYW1lIG9mIGRlZmF1bHQgbmFtZWQgaW5zdGFuY2UuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBgc3RyaWQnIGFuZCBgcHNpZCcgYXJlCisJbmFtZSBJRCB2YWx1ZXMsIG5vdCBpbmRpY2VzIGludG8gdGhlIGFycmF5IG9mIG5hbWUgZW50cmllcy4KKworMjAxNy0wMy0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NpZCwgdHJ1ZXR5cGVdIERvbid0IHVzZSBgaW5kZXgnIGFzIGEgdmFyaWFibGUgbmFtZS4KKworCUF0IGxlYXN0IG9uIEZyZWVCU0QgdGhlcmUgaXMgYSBnbG9iYWwgZGVjbGFyYXRpb24gb2YgYGluZGV4JyBpbiBmaWxlCisJYC91c3IvaW5jbHVkZS9zdHJpbmdzLmgnLgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMsIHNyYy90cnVldHlwZS90dGdsb2FkLmM6IHMvaW5kZXgvaWR4LyB3aGVyZQorCWFwcHJvcHJpYXRlLgorCisyMDE3LTAzLTI3ICBXb2pjaWVjaCBNYW1yYWsgIDx3bWFtcmFrQGdtYWlsLmNvbT4KKworCVtzZm50XSBNaW5vciBpbXByb3ZlbWVudCBmb3IgaGFuZGxpbmcga2VybiB0YWJsZXMuCisKKwkqIHNyYy9zZm50L3R0a2Vybi5jICh0dF9mYWNlX2xvYWRfa2Vybik6IERvbid0IGNoZWNrIGZvcgorCWNyb3NzLXN0cmVhbSBrZXJuaW5nIHRhYmxlcyBzaW5jZSB3ZSByZWplY3QgZm9ybWF0IDIgdGFibGVzIGxhdGVyCisJb24gYW55d2F5cy4KKwlNb2RpZnkgY29kZSBmb3IgbGltaXQgdGVzdC4uLgorCSh0dF9mYWNlX2dldF9rZXJuaW5nKTogLi4uIHRvIGF2b2lkIGEgbGltaXQgdGVzdCBoZXJlLgorCisyMDE3LTAzLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGNmXSBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKwlSZXBvcnRlZCBieSBBbGV4YW5kZXIgSGVkZ2VzIDxhaGVkZ2VzQHN0dWRlbnQuZXRoei5jaD4uCisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAocGNmX3Byb3BlcnR5X3NldCwgcGNmX3Byb3BlcnR5X2dldCk6IFRhZworCWBwcm9wZXJ0eV9uYW1lJyB3aXRoIGBGVF9VTlVTRUQnIHdoZXJlIG5lY2Vzc2FyeS4KKworMjAxNy0wMy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHQxX2J1aWxkZXJfY2xvc2VfY29udG91cik6IEFkZCBzYWZldHkgZ3VhcmQuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05NDEKKworMjAxNy0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBCZXR0ZXIgcHJvdGVjdCBgZmxleCcgaGFuZGxpbmcuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05MzUKKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpCisJPGNhbGxvdGhlcnN1YnI+OiBTaW5jZSB0aGVyZSBpcyBub3QgYSBzaW5nbGUgZmxleCBvcGVyYXRvciBidXQgYQorCXNlcmllcyBvZiBzdWJyb3V0aW5lIGNhbGxzLCBtYWxmb3JtZWQgZm9udHMgY2FuIGNhbGwgYXJiaXRyYXJ5IG90aGVyCisJb3BlcmF0b3JzIGFmdGVyIHRoZSBzdGFydCBvZiBhIGZsZXgsIHBvc3NpYmx5IGFkZGluZyBwb2ludHMuICBGb3IKKwl0aGlzIHJlYXNvbiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBhdmFpbGFibGUgbnVtYmVyIG9mIHBvaW50cyBiZWZvcmUKKwlpbnNlcnRpbmcgYSBwb2ludC4KKworMjAxNy0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEZpeCBjaGVjayBmb3IgZGVmYXVsdCBuYW1lZCBpbnN0YW5jZS4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogQSBgZml4ZWQnIG51bWJlciBuZWVkcyBmb3VyCisJYnl0ZXMsIG5vdCB0d28uLi4KKworMjAxNy0wMy0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBNTSBmb250cyB3b3JrIChhZ2FpbikuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLCBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKTogSWdub3JlCisJcmV0dXJuIHZhbHVlIG9mIGBmdF9mYWNlX2dldF9tdmFyX3NlcnZpY2UnOyBpbnN0ZWFkLCBjaGVjayB3aGV0aGVyIGEKKwlzZXJ2aWNlIGlzIGFjdHVhbGx5IHJldHVybmVkLgorCisyMDE3LTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFNvbWUgdmFyaWFibGUgcmVuYW1pbmdzLgorCisJVG9vIG11Y2ggbG9jYWwgdmFyaWFibGVzIGhvbGRpbmcgZGlmZmVyZW50IHN0cnVjdHVyZXMgd2VyZSBjYWxsZWQKKwlgbWV0cmljcycuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCk6IHMvbWV0cmljcy9zaXplX21ldHJpY3MvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jICh0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcywKKwljb21wdXRlX2dseXBoX21ldHJpY3MpOiBzL21ldHJpY3MvaW5jcl9tZXRyaWNzLy4KKwkobG9hZF9zYml0X2ltYWdlKTogcy9tZXRyaWNzL3NiaXRfbWV0cmljcy8uCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfc2l6ZV9ydW5fZnBnbSk6IHMvbWV0cmljcy9zaXplX21ldHJpY3MvLgorCSh0dF9zaXplX2luaXRfYnl0ZWNvZGUpOiBzL21ldHJpY3MvdHRfbWV0cmljcy8uCisJKHR0X3NpemVfcmVzZXQpOiBzL21ldHJpY3Mvc2l6ZV9tZXRyaWNzLy4KKworMjAxNy0wMy0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIERvbid0IGFkZCBpbnN0YW5jZXMgdG8gbm9uLXZhcmlhdGlvbiBmb250cy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogRml4IGl0LgorCisyMDE3LTAzLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2J1aWxkZXJfaW5pdCk6IEFkZCBzYWZldHkgZ3VhcmQgKCM1MDU3OCkuCisKKzIwMTctMDMtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUludHJvZHVjZSBGVF9VSU5UX1RPX1BPSU5URVIgbWFjcm8gKCM1MDU2MCkuCisKKwlXZSBoYXZlIHRvIG1ha2UgYSBzZXBhcmF0ZSBjYXNlIGZvciBXaW5kb3dzIDY0J3MgTExQNjQgZGF0YSBtb2RlbC4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9VSU5UX1RPX1BPSU5URVIpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBVc2UgaXQuCisKKzIwMTctMDMtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEFkanVzdCBsb29wIGNvdW50ZXIgKCM1MDU3MykuCisKKwlUaGUgcHJvYmxlbWF0aWMgZm9udCB0aGF0IGV4Y2VlZHMgdGhlIG9sZCBsaW1pdCBpcyBMYXRvLVJlZ3VsYXIsCisJdmVyc2lvbiAyLjAwNywgY29udGFpbmluZyBieXRlY29kZSBnZW5lcmF0ZWQgYnkgYSBidWdneSB2ZXJzaW9uIG9mCisJdHRmYXV0b2hpbnQuCisKKzIwMTctMDMtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQW5vdGhlciBsaW1pdGF0aW9uIGZvciBieXRlY29kZSBsb29wIGNvdW50IG1heGltdW0uCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05MDAKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IExpbWl0IGBsb29wY2FsbF9jb3VudGVyX21heCcKKwlieSBudW1iZXIgb2YgZ2x5cGhzIGFsc28uCisKKzIwMTctMDMtMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdGZ1enplcl0gTWlub3IgaW1wcm92ZW1lbnQuCisKKwkqIHNyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYzogRG9uJ3Qgc2V0IGludGVybWVkaWF0ZSBheGlzIGlmCisJYml0bWFwIHN0cmlrZXMgYXJlIGFjdGl2ZS4KKworMjAxNy0wMy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSW1wcm92ZSBgbWFrZSBtdWx0aScuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmM6IEd1YXJkIGZpbGUgd2l0aCBGVF9PUFRJT05fQVVUT0ZJVDIuCisKKwkqIHNyYy9iYXNlL2Z0bWFjLmM6IEd1YXJkIG1vcmUgcGFydHMgb2YgdGhlIGZpbGUgd2l0aCBGVF9NQUNJTlRPU0guCisKKwkqIHNyYy9wc2F1eC9hZm1wYXJzZS5jOiBHdWFyZCBmaWxlIHdpdGggVDFfQ09ORklHX09QVElPTl9OT19BRk0uCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYzogR3VhcmQgZmlsZSB3aXRoCisJVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTIGFsc28uCisKKwkqIHNyYy9zZm50L3R0YmRmLmM6IEF2b2lkIGVtcHR5IHNvdXJjZSBmaWxlLgorCSogc3JjL3NmbnQvdHRwb3N0LmM6IEd1YXJkIGZpbGUgd2l0aAorCVRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUy4KKwkqIHNyYy9zZm50L3R0c2JpdC5jOiBHdWFyZCBmaWxlIHdpdGgKKwlUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMsIHNyYy90cnVldHlwZS90dGludGVycC5jOiBBdm9pZCBlbXB0eQorCXNvdXJjZSBmaWxlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYzogR3VhcmQgZmlsZSB3aXRoCisJVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGFsc28uCisKKwkqIHNyYy90eXBlMS90MWFmbS5jOiBHdWFyZCBmaWxlIHdpdGggVDFfQ09ORklHX09QVElPTl9OT19BRk0uCisKKwkqIHNyYy9hdXRvZml0L2F1dG9maXQuYywgc3JjL2Jhc2UvZnRiYXNlLmMsIHNyYy9jYWNoZS9mdGNhY2hlLmMsCisJc3JjL2NmZi9jZmYuYywgc3JjL2NpZC90eXBlMWNpZC5jLCBzcmMvZ3h2YWxpZC9neHZhbGlkLmMsCisJc3JjL3BjZi9wY2YuYywgc3JjL3Bmci9wZnIuYywgc3JjL3BzYXV4L3BzYXV4LmMsCisJc3JjL3BzaGludGVyL3BzaGludGVyLmMsIHNyYy9wc25hbWVzL3BzbmFtZXMuYywgc3JjL3Jhc3Rlci9yYXN0ZXIuYywKKwlzcmMvc2ZudC9zZm50LmMsIHNyYy9zbW9vdGgvc21vb3RoLmMsIHNyYy90cnVldHlwZS90cnVldHlwZS5jLAorCXNyYy90eXBlMS90eXBlMS5jLCBzcmMvdHlwZTQyL3R5cGU0Mi5jOiBSZW1vdmUgY29uZGl0aW9uYWxzOyBzb3J0CisJZW50cmllcy4KKworMjAxNy0wMy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4ZXMgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLgorCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jLCBzcmMvYXV0b2ZpdC9hZmluZGljLmM6IEluY2x1ZGUgYGFmY2prLmgnCisJZWFybGllci4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogUHV0IGBtZW1vcnknIHZhcmlhYmxlIGludG8KKwlUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUIGJsb2NrLgorCShzZm50X2RvbmVfZmFjZSk6IFByb3RlY3Qgc29tZSBjb2RlIHdpdGgKKwlUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UpOiBSZW1vdmUgY29tcGlsZXIKKwl3YXJuaW5nLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IFB1dCBgdG1wJyB2YXJpYWJsZQorCWludG8gVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGJsb2NrLgorCisJKHR0X2xvYWRlcl9pbml0KTogUHV0IGBlcnJvcicgdmFyaWFibGUgaW50bworCVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiBibG9jay4KKworMjAxNy0wMy0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IHByZXByb2Nlc3NvciB3YXJuaW5nLgorCisJKiBkZXZlbC9mdG9wdGlvbi5oLCBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBUZXN0IHdoZXRoZXIKKwlUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCBiZWZvcmUgY2hlY2tpbmcgaXRzCisJdmFsdWUuCisKKzIwMTctMDMtMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCWBtYWtlIG11bHRpJyBmaXhlczsgY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9iYXNlL2Z0c25hbWVzLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSC4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBJbmNsdWRlCisJRlRfTVVMVElQTEVfTUFTVEVSU19IIGFuZCBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSC4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEluY2x1ZGUKKwlGVF9NVUxUSVBMRV9NQVNURVJTX0ggYW5kIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ILgorCShnZXRfd2luX3N0cmluZywgZ2V0X2FwcGxlX3N0cmluZyk6IEluaXRpYWxpemUgYHJlc3VsdCcuCisKKzIwMTctMDMtMTcgIERhdmUgQXJub2xkIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCVtjZmZdIEZpeCBwb3RlbnRpYWwgYnVncyBpbiBkZWZhdWx0IE5EViBmb3IgQ0ZGMi4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9ibGVuZF9idWlsZF92ZWN0b3IpOiBFeHBsaWNpdGx5IGJ1aWxkIGJsZW5kCisJdmVjdG9yIHdoZW4gYGxlbk5EVicgaXMgemVybzsgZG9uJ3QgcmVseSBvbiB6ZXJvLWluaXQuCisJU2F2ZSBgbGVuTkRWJyBhcyBwYXJ0IG9mIGNhY2hlIGtleSBldmVuIHdoZW4gYGxlbk5EVicgaXMgemVyby4KKworMjAxNy0wMy0xNyAgRGF2ZSBBcm5vbGQgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW2NmZl0gRml4IENGRjIgc3RhY2sgYWxsb2NhdGlvbi4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VyX2luaXQpIGFkZCAxIGZvciBvcGVyYXRvci4KKworMjAxNy0wMy0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogRnJlZSBgdnZhcl90YWJsZScuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD04ODMKKworMjAxNy0wMy0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIGNsYW5nIGNvbXBpbGVyIHdhcm5pbmdzICgjNTA1NDgpLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IE1ha2UKKwlgdmFyX3Bvc3RzY3JpcHRfcHJlZml4X2xlbicgdW5zaWduZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmd2FycC5jIChhZl93YXJwZXJfY29tcHV0ZV9saW5lX2Jlc3QpOiBSZW1vdmUKKwlyZWR1bmRhbnQgYXNzaWdubWVudC4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9zdWJmb250X2xvYWQpOiBBZGQgY2FzdHMuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2JsZW5kKTogUmVtb3ZlIHJlZHVuZGFudCBhc3NpZ25tZW50LgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChmbWl4MzIsIG11cm11cl9oYXNoXzNfMTI4KTogQWRkIGBzdGF0aWMnCisJa2V5d29yZC4KKwlBZGQgY2FzdHMuCisJKGZpeGVkMmZsb2F0KTogQWRkIGNhc3QuCisJKHNmbnRfZ2V0X3Zhcl9wc19uYW1lKTogTWFrZSBgcCcgYWx3YXlzIGluaXRpYWxpemVkLgorCUFkZCBjYXN0cy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEFkZCBjYXN0cy4KKworMjAxNy0wMy0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0ZnV6emVyXSBMaW1pdCBudW1iZXIgb2YgdGVzdGVkIGZhY2VzIGFuZCBpbnN0YW5jZXMuCisKKwlUaGlzIGlzIGluc3BpcmVkIGJ5IHRoZSBkaXNjdXNzaW9uIGluIGFuZCBhbmFseXNpcyBvZgorCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD04NTkKKworCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjIChMTFZNRnV6emVyVGVzdE9uZUlucHV0KTogVXNlIG9ubHkKKwl1cCB0byAyMCBmYWNlIGluZGljZXMuCisJVXNlIG9ubHkgdXAgdG8gMjAgaW5zdGFuY2UgaW5kaWNlcy4KKworMjAxNy0wMy0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2M6IEltcHJvdmUgcmVhZGFiaWxpdHk7IGZvcm1hdHRpbmcuCisKKzIwMTctMDMtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBJbXBsZW1lbnQgUFMgbmFtZXMgZm9yIGZvbnQgaW5zdGFuY2VzIFszLzNdLgorCisJRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBOZXcgZmllbGRzCisJYHZhcl9wb3N0c2NyaXB0X3ByZWZpeCcgYW5kIGB2YXJfcG9zdHNjcmlwdF9wcmVmaXhfbGVuJy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYzogSW5jbHVkZSBGVF9UUlVFVFlQRV9JRFNfSC4KKwkoc2ZudF9pc19hbHBoYW51bWVyaWMpOiBOZXcgd3JhcHBlcmZ1bmN0aW9uIGZvciBgZnRfaXNhbG51bScuCisJKGdldF93aW5fc3RyaW5nLCBnZXRfYXBwbGVfc3RyaW5nKTogUmVtb3ZlIGBjb25zdCcgZnJvbSByZXR1cm4KKwl2YWx1ZS4KKwkoTUFYX1ZBTFVFX0RFU0NSSVBUT1JfTEVOLCBNQVhfUFNfTkFNRV9MRU4pOiBOZXcgbWFjcm9zLgorCShoZXhkaWdpdHMpOiBOZXcgYXJyYXkuCisJKHNmbnRfZ2V0X3Zhcl9wc19uYW1lKTogTmV3IGZ1bmN0aW9uLCBpbXBsZW1lbnRpbmcgQWRvYmUgVGVjaE5vdGUKKwk1OTAyIHRvIGNvbnN0cnVjdCBhIFBTIG5hbWUgZm9yIGEgdmFyaWF0aW9uIGZvbnQgaW5zdGFuY2UuCisJKHNmbnRfZ2V0X3BzX25hbWUpOiBDYWxsIGBzZm50X2dldF92YXJfcHNfbmFtZScgZm9yIGZvbnQgaW5zdGFuY2VzLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9kb25lX2ZhY2UpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9zZXRfbW1fYmxlbmQpOiBSZXNldAorCWBmYWNlLT5wb3N0c2NyaXB0X25hbWUnIHRvIHRyaWdnZXIgcmVjYWxjdWxhdGlvbiBmb3IgbmV3IGluc3RhbmNlCisJcGFyYW1ldGVycy4KKworMjAxNy0wMy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEltcGxlbWVudCBQUyBuYW1lcyBmb3IgZm9udCBpbnN0YW5jZXMgWzIvM10uCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKGZpeDJmbG9hdCkgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOgorCU5ldyBmdW5jdGlvbiB0byBmaW5kIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiBhIDE2LjE2CisJZnJhY3Rpb25hbCBudW1iZXIuCisKKzIwMTctMDMtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBJbXBsZW1lbnQgUFMgbmFtZXMgZm9yIGZvbnQgaW5zdGFuY2VzIFsxLzNdLgorCisJQWRkIDEyOGJpdCBNdXJtdXJIYXNoIDMgZnVuY3Rpb24uCisKKwlFdmVyeXRoaW5nIGlzIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChST1RMMzIpOiBOZXcgbWFjcm8uCisJKGZtaXgzMiwgbXVybXVyX2hhc2hfM18xMjgpOiBOZXcgZnVuY3Rpb25zLgorCisyMDE3LTAzLTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIElnbm9yZSBpbnZhbGlkIE1WQVIgdGFncy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTgzOAorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9tdmFyKTogSWdub3JlIHZhbHVlIGFuZCBlbWl0CisJd2FybmluZyBmb3IgaW52YWxpZCB0YWdzLgorCSh0dF9hcHBseV9tdmFyKTogSWdub3JlIGludmFsaWQgdGFncy4KKworMjAxNy0wMy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBTdG9yZSBhbmQgdXNlIGRlc2lnbiBjb29yZGluYXRlcyBhbHNvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaCAoRlRfR2V0X1Zhcl9CbGVuZF9GdW5jKToKKwlBZGQgYG5vcm1hbGl6ZWRjb29yZHMnIGFyZ3VtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oIChHWF9CbGVuZFJlYyk6IEFkZCBgY29vcmRzJyBmaWVsZCB0byBzdG9yZQorCXRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UuCisJVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X01NX0JsZW5kKTogTW92ZSBmdW5jdGlvbmFsaXR5IHRvLi4uCisJKHR0X3NldF9tbV9ibGVuZCk6IC4uLiBOZXcgZnVuY3Rpb24uCisJQ29udmVydCBkYXRhIGluIGBub3JtYWxpemVkY29vcmRzJyBhcnJheSB0byBgY29vcmRzJyBhcnJheSBvbgorCWRlbWFuZC4KKwkoVFRfU2V0X1Zhcl9EZXNpZ24pOiBTdG9yZSBhcmd1bWVudCBkYXRhIGluIGBjb29yZHMnIGFycmF5LgorCShUVF9HZXRfVmFyX0Rlc2lnbik6IEdldCBkYXRhIGZyb20gYGNvb3JkcycgYXJyYXkuCisJKHR0X2dldF92YXJfYmxlbmQpOiBVcGRhdGVkLgorCSh0dF9kb25lX2JsZW5kKTogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMsIHNyYy9jZmYvY2ZmbG9hZC5oIChjZmZfZ2V0X3Zhcl9ibGVuZCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IpOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IFVwZGF0ZWQuCisKKzIwMTctMDMtMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCXNyYy90cnVldHlwZS90dGd4dmFyLltjaF06IHMvYXZhcl9jaGVja2VkL2F2YXJfbG9hZGVkLy4KKworMjAxNy0wMy0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEFub3RoZXIgZml4IGZvciBidWdneSB2YXJpYXRpb24gZm9udHMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD03NTkKKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogV2hpbGUgc2V0dGluZyBudW1iZXIgb2YKKwlpbnN0YW5jZXMgdG8gemVybyBmb3IgYENGRicgZm9udHMgdGFibGUsIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vCisJYENGRjInIHByZXNlbnQgYWxzbyAod2hpY2ggZ2V0cyBwcmlvcml0eSkuCisKKzIwMTctMDMtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBJbXByb3ZlIGhhbmRsaW5nIGZvciBidWdneSB2YXJpYXRpb24gZm9udHMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD03MzgKKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogV2hpbGUgc2V0dGluZyBudW1iZXIgb2YKKwlpbnN0YW5jZXMgdG8gemVybyBmb3IgYENGRicgZm9udHMgdGFibGUsIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vCisJYGdseWYnIHRhYmxlIHByZXNlbnQgYWxzbyAod2hpY2ggZ2V0cyBwcmlvcml0eSkuCisKKzIwMTctMDMtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50LCB0cnVldHlwZV0gQWx3YXlzIHByb3ZpZGUgZGVmYXVsdCBpbnN0YW5jZS4KKworCUFzIGRvY3VtZW50ZWQgaW4gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24sIGFuIGVudHJ5IGZvciB0aGUKKwlkZWZhdWx0IGluc3RhbmNlIG1heSBiZSBvbWl0dGVkIGluIHRoZSBuYW1lZCBpbnN0YW5jZSB0YWJsZS4gIEluCisJcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBubyBuYW1lZCBpbnN0YW5jZSB0YWJsZQorCWluIHRoZSBmb250IHdlIGFjdHVhbGx5IGRvIGhhdmUgYSBuYW1lZCBpbnN0YW5jZSwgbmFtZWx5IHRoZSBkZWZhdWx0CisJaW5zdGFuY2UuCisKKwlGb3IgY29uc2lzdGVuY3ksIHdlIGFsd2F5cyB3YW50IHRoZSBkZWZhdWx0IGluc3RhbmNlIGluIG91ciBsaXN0IG9mCisJbmFtZWQgaW5zdGFuY2VzLiAgSWYgaXQgaXMgbWlzc2luZywgd2UgdHJ5IHRvIHN5bnRoZXNpemUgaXQuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IENoZWNrIHdoZXRoZXIgdGhlIGRlZmF1bHQKKwlpbnN0YW5jZSBpcyBpbiB0aGUgdGFibGUgb2YgbmFtZWQgaW5zdGFuY2VzLiAgT3RoZXJ3aXNlIGFkanVzdAorCW51bWJlciBvZiBpbnN0YW5jZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmM6IEluY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0guCisJKFRUX0dldF9NTV9WYXIpOiBVc2UgYGZhY2UtPnJvb3Quc3R5bGVfZmxhZ3MnIGFzIHRoZSBudW1iZXIgb2YgbmFtZWQKKwlpbnN0YW5jZXMuCisJU3l0aGVzaXplIGEgbmFtZWQgaW5zdGFuY2UgZW50cnkgaWYgbmVjZXNzYXJ5LgorCSh0dF9kb25lX2JsZW5kKTogRnJlZSBgbm9ybWFsaXplZF9zdHlsZWNvb3JkcycuCisKKzIwMTctMDMtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBSZW1vdmUgcmVkdW5kYW50IGNvZGUuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IFJlbW92ZSBzZWNvbmQgdGVzdCBmb3IKKwlgbnVtX2luc3RhbmNlcycsIHdoaWNoIHdpbGwgYWx3YXlzIHN1Y2NlZWQuCisKKzIwMTctMDMtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBBZGQgYGdldF9uYW1lX2lkJyBzZXJ2aWNlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCAoVFRfR2V0X05hbWVfSURfRnVuYyk6IE5ldworCXR5cGVkZWYuCisJKFNGTlRfSW50ZXJmYWNlKTogQWRkIGBnZXRfbmFtZV9pZCcgZmllbGQuCisJKEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNlYXJjaF9uYW1lX2lkKTogUmVuYW1lIHRvLi4uCisJKHNmbnRfZ2V0X25hbWVfaWQpOiAuLi4gdGhpcy4KKwkoc2ZudF9nZXRfcHNfbmFtZSwgc2ZudF9pbnRlcmZhY2UpOiBVcGRhdGVkLgorCisyMDE3LTAzLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1ha2UgYFRUX1NldF9NTV9CbGVuZCcgc2V0IG5hbWVkIGluc3RhbmNlIGluZGV4LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oIChHWF9CbGVuZCk6IE5ldyBhcnJheQorCWBub3JtYWxpemVkX3N0eWxlY29vcmRzJy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEFsbG9jYXRlIGFuZCBmaWxsCisJYG5vcm1hbGl6ZWRfc3R5bGVjb29yZHMnLgorCShUVF9TZXRfTU1fQmxlbmQpOiBDaGVjayBpbnN0YW5jZSB0dXBsZSBhbmQgYWRqdXN0IGBmYWNlX2luZGV4JworCWFjY29yZGluZ2x5LgorCisyMDE3LTAzLTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFNwbGl0IG9mZiBkZXNpZ25lci9ub3JtYWxpemVkIGNvbnZlcnNpb24gcm91dGluZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1NldF9WYXJfRGVzaWduKTogU3BsaXQgb2ZmIGNvbnZlcnNpb24KKwljb2RlIGRlc2lnbmVyLT5ub3JtYWxpemVkIGNvb3JkaW5hdGVzIHRvLi4uCisJKGZ0X3Zhcl90b19ub3JtYWxpemVkKTogLi4uIE5ldyBmdW5jdGlvbi4KKwkoVFRfR2V0X1Zhcl9EZXNpZ24pOiBTcGxpdCBvZmYgY29udmVyc2lvbiBjb2RlIG5vcm1hbGl6ZWQtPmRlc2lnbmVyCisJY29vcmRpbmF0ZXMgdG8uLi4KKwkoZnRfdmFyX3RvX2Rlc2lnbik6IC4uLiBOZXcgZnVuY3Rpb24uCisKKzIwMTctMDItMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGdXJ0aGVyIGdlbmVyYWxpemUgYHNmbnRfZ2V0X3BzX25hbWUnOyByZXBvcnQgaW52YWxpZCBkYXRhLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X3BzX21hcCk6IE5ldyBhcnJheS4KKwkoc2ZudF9pc19wb3N0c2NyaXB0KTogTmV3IGZ1bmN0aW9uLgorCShjaGFyX3R5cGVfZnVuYyk6IE5ldyB0eXBlZGVmLgorCShnZXRfd2luX3N0cmluZywgZ2V0X2FwcGxlX3N0cmluZyk6IEFkZCBhcmd1bWVudCB0byBzcGVjaWZ5CisJY2hhcmFjdGVyIGNoZWNraW5nIGZ1bmN0aW9uLgorCUFkZCBhcmd1bWVudCB3aGV0aGVyIGFyZ3VtZW50IGNoZWNraW5nIGZhaWx1cmVzIHNob3VsZCBiZSByZXBvcnRlZC4KKwlVcGRhdGUgY2FsbGVycy4KKwkoc2VhcmNoX25hbWVfaWQpOiBGaXggcmV0dXJuIHZhbHVlLgorCisyMDE3LTAyLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gU3BsaXQgb2ZmIGFub3RoZXIgYml0IG9mIGBzZm50X2dldF9wc19uYW1lJy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9nZXRfcHNfbmFtZSk6IFNwbGl0IG9mZiBzb21lCisJZnVuY3Rpb25hbGl0eSBpbnRvLi4uCisJKHNlYXJjaF9uYW1lX2lkKTogLi4uIE5ldyBmdW5jdGlvbi4KKworMjAxNy0wMi0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIE1vZHVsYXJpemUgYHNmbnRfZ2V0X3BzX25hbWUnLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9wc19uYW1lKTogU3BsaXQgb2ZmIHNvbWUKKwlmdW5jdGlvbmFsaXR5IGludG8uLi4KKwkoSVNfV0lOLCBJU19BUFBMRSk6IC4uLiBOZXcgbWFjcm9zLgorCShnZXRfd2luX3N0cmluZywgZ2V0X2FwcGxlX3N0cmluZyk6IC4uLiBOZXcgZnVuY3Rpb25zLgorCisyMDE3LTAyLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yIGltcHJvdmVtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwKKwlsb2FkX3RydWV0eXBlX2dseXBoKTogUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzLgorCisyMDE3LTAyLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlKTogcy9pc0NGRjIvaXNfY2ZmMi8uCisKKwlGb3Igb3J0aG9nb25hbGl0eSB3aXRoIG90aGVyIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KKworCVVwZGF0ZSBhbGwgdXNlcnMuCisKKzIwMTctMDItMjIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfaGxpbmUpOiBJbXByb3ZlIGNvZGUuCisKKzIwMTctMDItMjAgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRyb3R0QGdvb2dsZS5jb20+CisKKwlGaXggc29tZSBgdHRuYW1laWQuaCcgZW50cmllcyAoIzUwMzEzKS4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oOgorCXMvVFRfTVNfTEFOR0lEX1NQQU5JU0hfSU5URVJOQVRJT05BTF9TT1JUL1RUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX0lOVEVSTkFUSU9OQUxfU09SVC8sCisJcy9UVF9NU19MQU5HSURfTU9OR09MSUFOX01PTkdPTElBX01PTkdPTElBL1RUX01TX0xBTkdJRF9NT05HT0xJQU5fTU9OR09MSUFfTU9OR09MSUFOLy4KKworMjAxNy0wMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRmluaXNoIHN1cHBvcnQgZm9yIGByYW5kb20nIG9wZXJhdG9yLgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9TdWJGb250UmVjKTogQWRkIGByYW5kb20nIGZpZWxkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYzogVXBkYXRlZC4KKwkoY2ZmX2RyaXZlcl9pbml0KTogSW5pdGlhbGl6ZSByYW5kb20gc2VlZCB2YWx1ZS4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9yYW5kb20pOiBOZXcgZnVuY3Rpb24uCisJKGNmZl9zdWJmb250X2xvYWQpOiBBZGQgYGZhY2UnIGFyZ3VtZW50LgorCVVwZGF0ZSBhbGwgY2FsbGVycy4KKwlJbml0aWFsaXplIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHdpdGggYSBwcm9wZXIgc2VlZCB2YWx1ZS4KKwkoY2ZmX2ZvbnRfbG9hZCk6IEFkZCBgZmFjZScgYXJndW1lbnQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZjJpbnRycC5jIChDRjJfRklYTUUpOiBSZW1vdmVkLgorCShjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2VzY1JBTkRPTT46IEltcGxlbWVudCBvcGNvZGUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBEb24ndAorCWluaXRpYWxpemUgcmFuZG9tIHNlZWQgdmFsdWUuCisJPGNmZl9vcF9yYW5kb20+OiBVc2UgbmV3IHJhbmRvbSBzZWVkIGZyYW1ld29yay4KKworMjAxNy0wMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gU2FuaXRpemUgYGluaXRpYWxSYW5kb21TZWVkJy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9sb2FkX3ByaXZhdGVfZGljdCk6IE1ha2UKKwlgaW5pdGlhbF9yYW5kb21fc2VlZCcgdmFsdWUgYWx3YXlzIHBvc2l0aXZlLgorCisyMDE3LTAyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbnRyb2R1Y2UgYHJhbmRvbS1zZWVkJyBwcm9wZXJ0eSAoMi8yKS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEluY2x1ZGUgYEZUX0NGRl9EUklWRVJfSCcuCisJKG9wZW5fZmFjZSk6IEluaXRpYWxpemUgYGZhY2UtPmludGVybmFsLT5yYW5kb21fc2VlZCcuCisJKEZUX0ZhY2VfUHJvcGVydGllcyk6IEhhbmRsZSBgRlRfUEFSQU1fVEFHX1JBTkRPTV9TRUVEJy4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHJvcGVydHlfc2V0KTogSGFuZGxlIGByYW5kb20tc2VlZCcKKwlwcm9wZXJ0eS4KKworMjAxNy0wMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gSW50cm9kdWNlIGByYW5kb20tc2VlZCcgcHJvcGVydHkgKDEvMikuCisKKwlXZSBuZWVkIHRoaXMgZm9yIHN1cHBvcnQgb2YgdGhlIGByYW5kb20nIG9wZXJhdG9yLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmggKEZUX1BBUkFNX1RBR19SQU5ET01fU0VFRCk6IE5ldyBtYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfRmFjZV9JbnRlcm5hbFJlYyk6IE5ldworCWZpZWxkIGByYW5kb21fc2VlZCcuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5oIChDRkZfRHJpdmVyUmVjKTogTmV3IGZpZWxkIGByYW5kb21fc2VlZCcuCisKKzIwMTctMDItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVJlbW92ZSBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9zb3J0X2JsdWUpOiBBZGQgbWlzc2luZyBgc3RhdGljJworCWtleXdvcmQuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLCBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKToKKwlJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzLgorCisyMDE3LTAyLTE2ICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBmYWNlIHByb3BlcnR5IGZvciBzdGVtIGRhcmtlbmluZy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmggKEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORyk6IE5ldworCW1hY3JvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKTogQWRkCisJYG5vX3N0ZW1fZGFya2VuaW5nJyBmaWVsZC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpLAorCXNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX3Byb3BlcnR5X3NldCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jOiBJbmNsdWRlIEZUX0FVVE9ISU5URVJfSC4KKwkoZnRfb3Blbl9mYWNlX2ludGVybmFsKTogVXBkYXRlZC4KKwkoRlRfRmFjZV9Qcm9wZXJ0aWVzKTogSGFuZGxlIEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORy4KKworCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX3Byb3BlcnR5X3NldCk6IFVwZGF0ZWQuCisKKzIwMTctMDItMTYgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIGZhY2UgcHJvcGVydHkgZm9yIExDRCBmaWx0ZXIgd2VpZ2h0cy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oIChGVF9QQVJBTV9UQUdfTENEX0ZJTFRFUl9XRUlHSFRTLAorCUZUX0xDRF9GSUxURVJfRklWRV9UQVBTKTogTmV3IG1hY3Jvcy4KKwkoRlRfTGNkRml2ZVRhcEZpbHRlcik6IE5ldyB0eXBlZGVmLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0b2Jqcy5oIChGVF9GYWNlX0ludGVybmFsUmVjKQorCVtGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklOR106IEFkZCBgbGNkX3dlaWdodHMnIGZpZWxkLgorCShGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyk6IENoYW5nZSB0aGlyZCBhcmd1bWVudCB0byB3ZWlnaHRzIGFycmF5LgorCShmdF9sY2RfZmlsdGVyX2Zpcik6IE5ldyBwcm90b3R5cGUuCisJKEZUX0xpYnJhcnlSZWMpOiBVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChfZnRfbGNkX2ZpbHRlcl9maXIpOiBSZW5hbWVkIHRvLi4uCisJKGZ0X2xjZF9maWx0ZXJfZmlyKTogLi4uIHRoaXMgYmFzZSBmdW5jdGlvbi4KKwlVcGRhdGVkLgorCShfZnRfbGNkX2ZpbHRlcl9sZWdhY3kpOiBVcGRhdGVkLgorCShGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMsIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKTogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X29wZW5fZmFjZV9pbnRlcm5hbCk6IFVwZGF0ZWQuCisJKEZUX0ZhY2VfUHJvcGVydGllcyk6IEhhbmRsZSBGVF9QQVJBTV9UQUdfTENEX0ZJTFRFUl9XRUlHSFRTLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYykKKwlbRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBIYW5kbGUgTENEIHdlaWdodHMgZnJvbQorCWBGVF9GYWNlX0ludGVybmFsJy4KKworMjAxNy0wMi0xNCAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgbmV3IGZ1bmN0aW9uIGBGVF9GYWNlX1Byb3BlcnRpZXMnLgorCisJVGhpcyBjb21taXQgcHJvdmlkZXMgdGhlIGZyYW1ld29yaywgdG8gYmUgZmlsbGVkIHdpdGggc29tZXRoaW5nCisJdXNlZnVsIGluIHRoZSBuZXh0IGNvbW1pdHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRmFjZV9Qcm9wZXJ0aWVzKTogRGVjbGFyZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0ZhY2VfUHJvcGVydGllcyk6IE5ldyBmdW5jdGlvbi4KKworMjAxNy0wMi0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFByZXZlbnQgb3ZlcmxhcHBpbmcgYmx1ZSB6b25lcy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9mb250cy9pc3N1ZXMvNjMyCisKKwlUaGUgZm9udCBpbiBxdWVzdGlvbiAoTnVuaXRvKSBoYXMgdmFsdWVzIDcwNSBhbmQgNzEzIGZvciB0aGUKKwlyZWZlcmVuY2UgYW5kIG92ZXJzaG9vdCB2YWx1ZXMsIHJlc3BlY3RpdmVseSwgb2YgdGhlIGZpcnN0IGJsdWUKKwl6b25lLiAgQmx1ZSB6b25lIDIsIGhvd2V2ZXIsIGhhcyB2YWx1ZSA3MTAgZm9yIGJvdGggdGhlIHJlZmVyZW5jZQorCWFuZCBvdmVyc2hvb3QuICBBdCAxMnBwZW0sIHJlZmVyZW5jZSBhbmQgb3ZlcnNob290IG9mIGJsdWUgem9uZSAwCisJYmVjb21lcyA4cHgsIHdoaWxlIGJsdWUgem9uZSAyIGJlY29tZXMgOXB4LgorCisJQSBwZWN1bGlhcml0eSBvZiB0aGlzIGZvbnQgaXMgdGhhdCB0aGUgdG9wcyBvZiBpc29sYXRlZCB2ZXJ0aWNhbAorCXN0ZW1zIGxpa2UgYE4nIGhhdmUgYSBzbGlnaHQgb3ZlcnNob290IGFsc28uICBUaGUgYXV0by1oaW50ZXIgdHJpZXMKKwl0byBmaW5kIHRoZSBuZWFyZXN0IGJsdWUgem9uZSB1c2luZyB0aGUgKm9yaWdpbmFsKiBjb29yZGluYXRlcy4gIEZvcgorCXZlcnRpY2FsIHN0ZW1zLCB0aGlzIGlzIHZhbHVlIDcxMy4gIEZvciBub3JtYWwgaG9yaXpvbnRhbCB0b3BzIGxpa2UKKwlpbiBjaGFyYWN0ZXIgYEUnLCB0aGlzIGlzIHZhbHVlIDcxMC4gIFNpbmNlIHZhbHVlIDcxMyBpcyBtYXBwZWQgdG8KKwk4cHggYnV0IHZhbHVlIDcxMCB0byA5cHgsIGBOJyBhbmQgc2ltaWxhciBjaGFyYWN0ZXJzIGFyZSBvbmUgcGl4ZWwKKwloaWdoZXIgdGhhbiBgRScsIHdoaWNoIGxvb2tzIHZlcnkgYmFkLgorCisJVGhpcyBjb21taXQgc2FuaXRpemVzIGJsdWUgem9uZXMgdG8gYXZvaWQgc3VjaCBhIGJlaGF2aW91ci4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9zb3J0X2JsdWUpOiBOZXcgZnVuY3Rpb24uCisJKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IFNvcnQgYmx1ZSB2YWx1ZXMgYW5kIHJlbW92ZSBvdmVybGFwcy4KKworMjAxNy0wMi0xMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9zd2VlcCk6IEltcHJvdmUgY29kZS4KKworMjAxNy0wMi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXBsZW1lbnQgYFZWQVInIHRhYmxlIHN1cHBvcnQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX0hWYXJUYWJsZSk6IFJlbmFtZWQgdG8uLi4KKwkoR1hfSFZWYXJUYWJsZSk6IC4uLlRoaXMuCisJKEdYX0JsZW5kKTogQWRkIGZpZWxkcyBmb3IgYFZWQVInIHRhYmxlIGhhbmRsaW5nLgorCU90aGVyIG1pbm9yIHVwZGF0ZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2h2YXIpOiBSZW5hbWVkIHRvLi4uCisJKGZ0X3Zhcl9sb2FkX2h2dmFyKTogLi4uVGhpcy4KKwlIYW5kbGUgVlZBUiBsb2FkaW5nIGFsc28gKGNvbnRyb2xsZWQgYnkgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIpLgorCSh0dF9oYWR2YW5jZV9hZGp1c3QpOiBSZW5hbWVkIHRvLi4uCisJKHR0X2h2YWR2YW5jZV9hZGp1c3QpOiAuLi5UaGlzLgorCUhhbmRsZSBhcHBsaWNhdGlvbiBvZiBhZHZhbmNlIGhlaWdodCBhbHNvIChjb250cm9sbGVkIGJ5IGFuCisJYWRkaXRpb25hbCBwYXJhbWV0ZXIpLgorCSh0dF9oYWR2YW5jZV9hZGp1c3QsIHR0X3ZhZHZhbmNlX2FkanVzdCk6IFdyYXBwZXJzIGZvcgorCWB0dF9odmFkdmFuY2VfYWRqdXN0Jy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zKTogVXBkYXRlZC4KKworMjAxNy0wMi0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFVzZSBiZXR0ZXIgYmx1ZSB6b25lIGNoYXJhY3RlcnMgZm9yIGxvd2VyY2FzZSBsYXRpbi4KKworCVRoZSBudW1iZXIgb2YgbG93ZXJjYXNlIGNoYXJhY3RlcnMgZm9yIGNvbXB1dGluZyB0aGUgdG9wIGZsYXQgYmx1ZQorCXpvbmUgdmFsdWUgd2FzIHRvbyBzbWFsbCAoaW4gbW9zdCBjYXNlcyBvbmx5IGB4JyBhbmQgYHonKS4gIElmIG9uZQorCW9mIHRoZSB0d28gY2hhcmFjdGVycyBoYXMgYSBsYXJnZSBzZXJpZiwgc2F5LCBpdCBjYW4gaGFwcGVuIHRoYXQKKwlGcmVlVHlwZSBtdXN0IHNlbGVjdCBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgdmFsdWVzLCBoYXZpbmcgYSA1MCUKKwljaGFuY2UgdG8gdXNlIHRoZSB3cm9uZyBvbmUuICBBcyBhIHJlc3VsdCwgcmVuZGVyaW5nIGF0IGxhcmdlciBQUEVNCisJdmFsdWVzIGNvdWxkIHlpZWxkIHVuZXZlbiBsb3dlcmNhc2UgZ2x5cGggaGVpZ2h0cy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgQ2hyaXN0b3BoIEtvZWJlcmxpbiA8Y2hyaXN0b3BoQGtvZS5iZXJsaW4+LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0IChBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTCk6IFJlcGxhY2VkCisJd2l0aC4uLgorCShBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9UT1AsIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0JPVFRPTSk6CisJLi4uIE5ldywgZXh0ZW5kZWQgc2V0cy4KKwkoQUZfQkxVRV9TVFJJTkdTRVRfTEFUTik6IFVwZGF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzY3IvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKzIwMTctMDItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2UgYGZyZWV0eXBlLWNvbmZpZycgYSB3cmFwcGVyIG9mIGBwa2ctY29uZmlnJyBpZiBwb3NzaWJsZS4KKworCUJhc2VkIG9uIGlkZWFzIHRha2VuIGZyb20KKworCSAgaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvY2dpdC9ycG1zL2ZyZWV0eXBlLmdpdC90cmVlL2ZyZWV0eXBlLW11bHRpbGliLnBhdGNoCisJICBodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9jZ2l0L3JwbXMvZnJlZXR5cGUuZ2l0L3RyZWUvZnJlZXR5cGUtMi41LjMtZnJlZXR5cGUtY29uZmlnLXByZWZpeC5wYXRjaAorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IFJld3JpdHRlbi4gIFVzZSBgcGtnLWNvbmZpZycgdG8KKwlzZXQgb3V0cHV0IHZhcmlhYmxlcyBpZiBwcm9ncmFtIGlzIGF2YWlsYWJsZS4KKworCSogZG9jcy9DSEFOR0VTLCBkb2NzL2ZyZWV0eXBlLWNvbmZpZy4xOiBVcGRhdGVkLgorCisyMDE3LTAyLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L3VuaXgtZGVmLmluIChmcmVldHlwZS1jb25maWcpOiBGaXggcGVybWlzc2lvbnMuCisKKzIwMTctMDItMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX2ZyZWUpOiBFcmFzZSB1c2VsZXNzIGNvZGUuCisKKzIwMTctMDItMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCAoRlRfR0FTUF9TWU1NRVRSSUNfR1JJREZJVCk6IEZpeCB2YWx1ZS4KKworCVJlcG9ydGVkIGJ5IEJlaGRhZC4KKworMjAxNy0wMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggTVZBUiBwb3N0LWFjdGlvbiBoYW5kbGluZy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTUwOQorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X3NpemVfcmVzZXQpOiBEbyBub3RoaW5nIGZvciBDRkYyLiAgVGhpcworCWlzIGltcG9ydGFudCB0byBtYWtlIGB0dF9zaXplX3Jlc2V0X2l0ZXJhdG9yJyAoY2FsbGVkIGluCisJYHR0X2FwcGx5X212YXInKSBhbHdheXMgd29yay4KKworMjAxNy0wMi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBjb21waWxhdGlvbiB3aXRoIEZUX0NPTkZJR19PUFRJT05fUElDIHdvcmsgYWdhaW4uCisKKwlBbGwgY29kZSBjb21taXR0ZWQgaGVyZSBpcyBndWFyZGVkIHdpdGggYEZUX0NPTkZJR19PUFRJT05fUElDJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oCisJKEZUX0RFRklORV9TRVJWSUNFX01FVFJJQ1NWQVJJQVRJT05TUkVDKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzLAorCWFmX2xhdGluX2hpbnRfZWRnZXMpOiBQcm92aWRlIGBnbG9iYWxzJyB2YXJpYWJsZS4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiBSZW1vdmUgc2hhZG93aW5nCisJdmFyaWFibGUuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKEFGX1NDUklQVF9DTEFTU0VTX0dFVCwKKwlBRl9TVFlMRV9DTEFTU0VTX0dFVCk6IFJlZGVmaW5lLgorCisJKiBzcmMvYXV0b2ZpdC9hZnR5cGVzLmggKEFGX0RFRklORV9XUklUSU5HX1NZU1RFTV9DTEFTUyk6IEZpeCB0eXBvLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKENGRl9GSUVMRF9CTEVORCk6IFByb3ZpZGUgaXQuCisKKwkqIHNyYy9jZmYvY2ZmcGljLmggKENmZk1vZHVsZVBJQyk6IEZpeCB0eXBvLgorCisyMDE3LTAxLTMxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9zY2FubGluZSk6IEltcHJvdmUgY29kZS4KKworMjAxNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gUHJvdmlkZSBtZXRyaWNzIHZhcmlhdGlvbiBzZXJ2aWNlIGludGVyZmFjZSAoIzUwMTk2KS4KKworCU9ubHkgbm93IEkndmUgZ290IGFuIE9URiB3aXRoIGFuIEhWQVIgdGFibGUgZm9yIHRlc3RpbmcuLi4KKworCVRoZSBjb2RlIGluIGBmdG1tLmMnIHVzZXMgYEZUX0ZBQ0VfTE9PS1VQX1NFUlZJQ0UnIHRvIGdldCB0aGUKKwltZXRyaWNzIHZhcmlhdGlvbnMgaW50ZXJmYWNlLiAgSG93ZXZlciwgdGhpcyBkaWRuJ3Qgd29yayB3aXRoCisJYEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRScgdXNlZCBpbiBgc2ZudF9pbml0X2ZhY2UnLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSC4KKwkoY2ZmX2hhZHZhbmNlX2FkanVzdCwgY2ZmX21ldHJpY3NfYWRqdXN0KTogV3JhcHBlciBmdW5jdGlvbnMgZm9yCisJbWV0cmljIHNlcnZpY2UgZnVuY3Rpb25zIGZyb20gdGhlIGB0cnVldHlwZScgbW9kdWxlLgorCShjZmZfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMpOiBOZXcgc2VydmljZS4KKwkoY2ZmX3NlcnZpY2VzKTogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZwaWMuaCAoQ0ZGX1NFUlZJQ0VfTUVUUklDU19WQVJfR0VUKTogTmV3IG1hY3JvLgorCVtGVF9DT05GSUdfT1BUSU9OX1BJQ106IFN5bmNocm9uaXplIGNvZGUuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IFJlcGxhY2UgY2FsbCB0bworCUZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSB3aXRoIGBmdF9tb2R1bGVfZ2V0X3NlcnZpY2UnIHRvIGFsd2F5cworCWxvYWQgdGhlIHNlcnZpY2UgZnJvbSB0aGUgYHRydWV0eXBlJyBtb2R1bGUuCisKKzIwMTctMDEtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBmcmFtZXdvcmsgdG8gc3VwcG9ydCBzZXJ2aWNlcyB3aXRoIDkgZnVuY3Rpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIChGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM5KToKKwlOZXcgbWFjcm8uCisKKzIwMTctMDEtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBGaXggZXJyb3IgaGFuZGluZyBpbiBNTSBmdW5jdGlvbnMuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLCBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKToKKwlJbXBsZW1lbnQgaXQuCisKKzIwMTctMDEtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IHNhbml0eSBjaGVjayBmb3IgYGd2YXInIHRhYmxlICgjNTAxODQpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9ndmFyKTogVGhlcmUgbWlnaHQgYmUgbWlzc2luZworCXZhcmlhdGlvbiBkYXRhIGZvciBzb21lIGdseXBocy4KKworMjAxNy0wMS0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEF2b2lkIHVuaW5pdGlhbGl6ZWQganVtcHMgKCM1MDE5MSkuCisKKwkqIHNyYy9hdXRvZml0L2FmY2prLmMgKGFmX2Nqa19tZXRyaWNzX2NoZWNrX2RpZ2l0cyksCisJc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX2NoZWNrX2RpZ2l0cyk6IEluaXRpYWxpemUKKwlgYWR2YW5jZScuCisKKzIwMTctMDEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCXMvR0IyMzEyL1BSQy8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRU5DT0RJTkdfUFJDKTogTmV3IGVudW0gdmFsdWUuCisJKEZUX0VOQ09ESU5HX0dCMjMxMik6IERlcHJlY2F0ZWQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaCAoVFRfTVNfSURfUFJDKTogTmV3IG1hY3JvLgorCShUVF9NU19JRF9HQjIzMTIpOiBEZXByZWNhdGVkLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9maW5kX2VuY29kaW5nKTogVXBkYXRlZC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE3LTAxLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gQWRkIGBGVF9HZXRfU2ZudF9MYW5nVGFnJyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oIChGVF9TZm50TGFuZ1RhZyk6IE5ldyBzdHJ1Y3R1cmUuCisJKEZUX0dldF9TZm50X0xhbmdUYWcpOiBOZXcgZGVjbGFyYXRpb24uCisKKwkqIHNyYy9iYXNlL2Z0c25hbWVzLmMgKEZUX0dldF9TZm50X0xhbmdUYWcpOiBOZXcgZnVuY3Rpb24uCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNy0wMS0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFN1cHBvcnQgYG5hbWUnIHRhYmxlIGZvcm1hdCAxLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfTGFuZ1RhZ1JlYyk6IE5ldworCXN0cnVjdHVyZS4KKwkoVFRfTmFtZVRhYmxlUmVjKTogQWRkIGZpZWxkcyBgbnVtTGFuZ1RhZ1JlY29yZHMnIGFuZCBgbGFuZ1RhZ3MnLgorCisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX25hbWUpOiBBZGQgc3VwcG9ydCBmb3IgbGFuZ3VhZ2UKKwl0YWdzLgorCVJlZHVjZSBhcnJheSBzaXplIG9mIG5hbWUgc3RyaW5ncyBpbiBjYXNlIG9mIGludmFsaWQgZW50cmllcy4KKwkodHRfZmFjZV9mcmVlX25hbWUpOiBVcGRhdGVkLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTctMDEtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBzL1RUX05hbWVFbnRyeS9UVF9OYW1lLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX05hbWVFbnRyeVJlYyk6IFJlbmFtZWQKKwl0by4uLgorCShUVF9OYW1lUmVjKTogVGhpcy4KKwkoVFRfTmFtZVRhYmxlUmVjKTogVXBkYXRlZC4KKworCSogc3JjL2Jhc2UvZnRzbmFtZXMuYyAoRlRfR2V0X1NmbnRfTmFtZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X3BzX25hbWUpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAodHRfbmFtZV9lbnRyeV9hc2NpaV9mcm9tX3V0ZjE2LAorCXR0X25hbWVfZW50cnlfYXNjaWlfZnJvbV9vdGhlcik6IFJlbmFtZWQgdG8uLi4KKwkodHRfbmFtZV9hc2NpaV9mcm9tX3V0ZjE2LCB0dF9uYW1lX2VudHJ5X2FzY2lpX2Zyb21fb3RoZXIpOiBUaGlzLAorCXJlc3BlY3RpdmVseS4KKwkoVFRfTmFtZUVudHJ5X0NvbnZlcnRGdW5jKTogUmVuYW1lZCB0by4uLgorCShUVF9OYW1lX0NvbnZlcnRGdW5jKTogVGhpcy4KKwkodHRfZmFjZV9nZXRfbmFtZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbmFtZSwgdHRfZmFjZV9mcmVlX25hbWUpOgorCVVwZGF0ZWQuCisKKzIwMTctMDEtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggUG9zdHNjcmlwdCBuYW1lIHNlcnZpY2UgZm9yIHN5bWJvbCBmb250cy4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9nZXRfcHNfbmFtZSk6IEFjY2VwdCBQSUQvRUlEPTMvMAorCWVudHJpZXMgYWxzby4KKworMjAxNy0wMS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGb3IgT3BlblR5cGUgMS43OiBzL3ByZWZlcnJlZC90eXBvZ3JhcGhpYy8gKHN1YilmYW1pbHkuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaAorCShGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWSwKKwlGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX1NVQkZBTUlMWSk6IE5ldyBtYWNyb3MuCisJKEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWSwKKwlGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9TVUJGQU1JTFkpOiBEZXByZWNhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmggKFRUX05BTUVfSURfVFlQT0dSQVBISUNfRkFNSUxZLAorCVRUX05BTUVfSURfVFlQT0dSQVBISUNfU1VCRkFNSUxZKTogTmV3IG1hY3Jvcy4KKwkoVFRfTkFNRV9JRF9QUkVGRVJSRURfRkFNSUxZLCBUVF9OQU1FX0lEX1BSRUZFUlJFRF9TVUJGQU1JTFkpOgorCURlcHJlY2F0ZWQuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFVwZGF0ZWQuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNy0wMS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIEFkZCBgRlRfU2V0X0RlZmF1bHRfUHJvcGVydGllcycgKCM0OTE4NykuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaDogQWRkIGRlY2xhcmF0aW9uLgorCisJKiBzcmMvYmFzZS9mdGluaXQuYyAoZnRfc2V0X2RlZmF1bHRfcHJvcGVydGllcyk6IFJlbmFtZWQgdG8uLi4KKwkoRlRfU2V0X0RlZmF1bHRfUHJvcGVydGllcyk6IC4uLiB0aGlzLgorCShGVF9Jbml0X0ZyZWVUeXBlKTogVXBkYXRlZC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE3LTAxLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1pbm9yIHVwZGF0ZXMgZm9yIE9wZW5UeXBlIDEuOC4xLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oIChHWF9NVmFyVGFibGUpOiBgYXhpc0NvdW50JyBoYXMgYmVlbgorCXJlbW92ZWQgZnJvbSB0aGUgc3BlY2lmaWNhdGlvbjsgaXQgaXMgbm93IHJlc2VydmVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9tdmFyKTogVXBkYXRlZC4KKwkoR1hfRlZhcl9IZWFkKTogUmVtb3ZlIGBjb3VudFNpemVQYWlycyc7IHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKKwlmaWVsZCBpbiB0aGUgYE1WQVInIHRhYmxlIGlzIG5vdyByZXNlcnZlZC4KKwkoZnZhcl9maWVsZHMpOiBVcGRhdGVkLgorCisyMDE3LTAxLTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEF2b2lkIHNlZ2ZhdWx0IGZvciBpbnZhbGlkIHZhcmlhdGlvbiBkYXRhLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9pdGVtX3ZhcmlhdGlvbl9zdG9yZSk6IEFzc3VyZQorCWBpdGVtQ291bnQnIGlzIG5vdCB6ZXJvLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NDQxCisKKzIwMTctMDEtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEFkanVzdCBsb29wIGRldGVjdG9yIGxpbWl0cy4KKworMjAxNy0wMS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmg6IFVwZGF0ZWQgdG8gT3BlblR5cGUgMS44LjEuCisKKwkoVFRfQVBQTEVfSURfRlVMTF9VTklDT0RFKTogTmV3IG1hY3JvLgorCisJKFRUX01TX0xBTkdJRF9CT1NOSUFOX0JPU05JQV9IRVJaX0NZUklMTElDLAorCVRUX01TX0xBTkdJRF9VUFBFUl9TT1JCSUFOX0dFUk1BTlksCisJVFRfTVNfTEFOR0lEX0xPV0VSX1NPUkJJQU5fR0VSTUFOWSwgVFRfTVNfTEFOR0lEX0lSSVNIX0lSRUxBTkQsCisJVFRfTVNfTEFOR0lEX0lOVUtUSVRVVF9DQU5BREFfTEFUSU4sIFRUX01TX0xBTkdJRF9CQVNIS0lSX1JVU1NJQSwKKwlUVF9NU19MQU5HSURfTFVYRU1CT1VSR0lTSF9MVVhFTUJPVVJHLAorCVRUX01TX0xBTkdJRF9HUkVFTkxBTkRJQ19HUkVFTkxBTkQsIFRUX01TX0xBTkdJRF9NQVBVRFVOR1VOX0NISUxFLAorCVRUX01TX0xBTkdJRF9NT0hBV0tfTU9IQVdLLCBUVF9NU19MQU5HSURfQlJFVE9OX0ZSQU5DRSwKKwlUVF9NU19MQU5HSURfT0NDSVRBTl9GUkFOQ0UsIFRUX01TX0xBTkdJRF9DT1JTSUNBTl9GUkFOQ0UsCisJVFRfTVNfTEFOR0lEX0FMU0FUSUFOX0ZSQU5DRSwgVFRfTVNfTEFOR0lEX1lBS1VUX1JVU1NJQSwKKwlUVF9NU19MQU5HSURfS0lDSEVfR1VBVEVNQUxBLCBUVF9NU19MQU5HSURfS0lOWUFSV0FOREFfUldBTkRBLAorCVRUX01TX0xBTkdJRF9XT0xPRl9TRU5FR0FMLCBUVF9NU19MQU5HSURfREFSSV9BRkdIQU5JU1RBTik6IE5ldworCW1hY3Jvcy4KKworCShUVF9NU19MQU5HSURfU0VSQklBTl9CT1NOSUFfSEVSWl9DWVJJTExJQyk6IEZpeCB2YWx1ZS4KKworCShUVF9NU19MQU5HSURfR0VSTUFOX0xJRUNIVEVOU1RFSU4sIFRUX01TX0xBTkdJRF9DQVRBTEFOX0NBVEFMQU4sCisJVFRfTVNfTEFOR0lEX0NISU5FU0VfTUFDQU8sIFRUX01TX0xBTkdJRF9TUEFOSVNIX1NQQUlOX01PREVSTl9TT1JULAorCVRUX01TX0xBTkdJRF9LT1JFQU5fS09SRUEsIFRUX01TX0xBTkdJRF9ST01BTlNIX1NXSVRaRVJMQU5ELAorCVRUX01TX0xBTkdJRF9TTE9WRU5JQU5fU0xPVkVOSUEsIFRUX01TX0xBTkdJRF9CQVNRVUVfQkFTUVVFLAorCVRUX01TX0xBTkdJRF9TRVRTV0FOQV9TT1VUSF9BRlJJQ0EsCisJVFRfTVNfTEFOR0lEX0lTSVhIT1NBX1NPVVRIX0FGUklDQSwKKwlUVF9NU19MQU5HSURfSVNJWlVMVV9TT1VUSF9BRlJJQ0EsIFRUX01TX0xBTkdJRF9LQVpBS0hfS0FaQUtIU1RBTiwKKwlUVF9NU19MQU5HSURfS1lSR1laX0tZUkdZWlNUQU4sIFRUX01TX0xBTkdJRF9LSVNXQUhJTElfS0VOWUEsCisJVFRfTVNfTEFOR0lEX1RBVEFSX1JVU1NJQSwgVFRfTVNfTEFOR0lEX09ESUFfSU5ESUEsCisJVFRfTVNfTEFOR0lEX01PTkdPTElBTl9QUkMsIFRUX01TX0xBTkdJRF9USUJFVEFOX1BSQywKKwlUVF9NU19MQU5HSURfV0VMU0hfVU5JVEVEX0tJTkdET00sIFRUX01TX0xBTkdJRF9HQUxJQ0lBTl9HQUxJQ0lBTiwKKwlUVF9NU19MQU5HSURfU0lOSEFMQV9TUklfTEFOS0EsIFRUX01TX0xBTkdJRF9UQU1BWklHSFRfQUxHRVJJQSwKKwlUVF9NU19MQU5HSURfU0VTT1RIT19TQV9MRUJPQV9TT1VUSF9BRlJJQ0EsIFRUX01TX0xBTkdJRF9ZSV9QUkMsCisJVFRfTVNfTEFOR0lEX1VJR0hVUl9QUkMpOiBOZXcgYWxpYXNlcy4KKworCVJlbW92ZSBjb21tZW50ZWQgb3V0IGNvZGUuCisKKwkoVFRfTkFNRV9JRF9MSUdIVF9CQUNLR1JPVU5ELCBUVF9OQU1FX0lEX0RBUktfQkFDS0dST1VORCwKKwlUVF9OQU1FX0lEX1ZBUklBVElPTlNfUFJFRklYKTogTmV3IG1hY3Jvcy4KKworCShIQVZFX0xJTUlUX09OX0lERU5UUyk6IFJlbW92ZSBtYWNybyAod2hpY2ggd2FzIHVzZWxlc3Mgc2luY2UgbWFueQorCXllYXJzKSwgdXNlIGd1YXJkZWQgbG9uZyBtYWNyb3MgYnkgZGVmYXVsdCBhbmQgZGVmaW5lIHNob3J0IHZlcnNpb25zCisJYXMgYWxpYXNlcyBmb3IgdGhlIGxvbmcgb25lcy4KKworMjAxNy0wMS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9hcHBseV92YXIpOiBIYW5kbGUgdW5kZXJsaW5lIHBhcmFtZXRlcnMKKwlhbHNvLgorCisyMDE3LTAxLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9vcGVuX2ZhY2VfaW50ZXJuYWwpOiBJbXByb3ZlIHRyYWNpbmcuCisKKzIwMTctMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWN0dWFsbHkgdXNlIG1ldHJpY3MgdmFyaWF0aW9uIHNlcnZpY2UuCisKKwkqIHNyYy9iYXNlL2Z0bW0uYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ILgorCShmdF9mYWNlX2dldF9tdmFyX3NlcnZpY2UpOiBOZXcgYXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIGxvb2sgdXAKKwltZXRyaWNzIHZhcmlhdGlvbiBzZXJ2aWNlLgorCShGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLAorCUZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOiBDYWxsIG1ldHJpY3MgdmFyaWF0aW9uIHNlcnZpY2UuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KTogVXNlIG1ldHJpY3MgdmFyaWF0aW9ucyBmb3IKKwluYW1lZCBpbnN0YW5jZXMuCisKKzIwMTctMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJvdmlkZSBtZXRyaWNzIHZhcmlhdGlvbiBzZXJ2aWNlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmgKKwkoRlRfTWV0cmljc19BZGp1c3RfRnVuYyk6IFJlZHVjZSBudW1iZXIgb2YgbmVjZXNzYXJ5IHBhcmFtZXRlcnMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmM6IEluY2x1ZGUgRlRfTElTVF9ILgorCSh0dF9zaXplX3Jlc2V0X2l0ZXJhdG9yKTogTmV3IGF1eGlsaWFyeSBmdW5jdGlvbiBmb3IuLi4KKwkodHRfYXBwbHlfdmFyKTogTmV3IGZ1bmN0aW9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMpOiBBZGQKKwlgdHRfYXBwbHlfbXZhcicuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX1NlcnZpY2VDYWNoZSk6IEFkZCBtZXRyaWNzCisJdmFyaWF0aW9uIHNlcnZpY2UuCisKKzIwMTctMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUGFyc2UgYE1WQVInIHRhYmxlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oIChNVkFSX1RBR19YWFgpOiBOZXcgbWFjcm9zIGZvciBNVkFSIHRhZ3MuCisJKEdYX1ZhbHVlLCBHWF9NVmFyVGFibGUpOiBOZXcgc3RydWN0dXJlcy4KKwkoR1hfQmxlbmQpOiBBZGQgaXQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEdYX1ZBTFVFX1NJWkUsIEdYX1ZBTFVFX0NBU0UsCisJR1hfR0FTUF9DQVNFKTogTmV3IG1hY3Jvcy4KKwkoZnRfdmFyX2dldF92YWx1ZV9wb2ludGVyKTogTmV3IGF1eGlsaWFyeSBmdW5jdGlvbiB0byBnZXQgYSBwb2ludGVyCisJdG8gYSB2YWx1ZSBmcm9tIHZhcmlvdXMgU0ZOVCB0YWJsZXMgYWxyZWFkeSBzdG9yZWQgaW4gYFRUX0ZhY2UnLgorCShmdF92YXJfbG9hZF9tdmFyKTogTmV3IGZ1bmN0aW9uLgorCShUVF9HZXRfTU1fVmFyKTogQ2FsbCBpdC4KKwkodHRfZG9uZV9ibGVuZCk6IFVwZGF0ZWQuCisKKzIwMTctMDEtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gTW9yZSBwcmVwYXJhdGlvbnMgZm9yIE1WQVIgc3VwcG9ydC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3Jlc2V0KTogQWRkIGFyZ3VtZW50IHRvIG1ha2UKKwlmdW5jdGlvbiBvbmx5IHJlY29tcHV0ZSBhc2NlbmRlciwgZGVzY2VuZGVyLCBhbmQgaGVpZ2h0LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCwgdHRfc2l6ZV9yZXF1ZXN0KToKKwlVcGRhdGVkLgorCisyMDE3LTAxLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGNmXSBEaXNhYmxlIGxvbmcgZmFtaWx5IG5hbWVzIGJ5IGRlZmF1bHQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMpOiBDb21tZW50IG91dC4KKworMjAxNy0wMS0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gTWFrZSBsb25nIGZhbWlseSBuYW1lcyBjb25maWd1cmFibGUuCisKKwlUaGUgY2hhbmdlIGZyb20gMjAxNi0wOS0yOSB3YXMgdG9vIHJhZGljYWwgKGV4Y2VwdCBmb3IgcGVvcGxlIHVzaW5nCisJdGhlIG9wZW5TdVNFIEdOVS9MaW51eCBkaXN0cmlidXRpb24pLiAgVG8gYW1lbGlvcmF0ZSB0aGUgc2l0dWF0aW9uLAorCVBDRl9DT05GSUdfT1BUSU9OX0xPTkdfRkFNSUxZX05BTUVTIGdldHMgaW50cm9kdWNlZCB3aGljaCBjb250cm9scworCXRoZSBmZWF0dXJlOyBpZiBzZXQsIGEgbmV3IFBDRiBwcm9wZXJ0eSBvcHRpb24KKwlgbm8tbG9uZy1mYW1pbHktbmFtZXMnIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0aGlzIGZlYXR1cmUgb2ZmLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oLCBkZXZlbC9mdG9wdGlvbi5oCisJKFBDRl9DT05GSUdfT1BUSU9OX0xPTkdfRkFNSUxZX05BTUVTKTogTmV3IG9wdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdHBjZmRydi5oOiBOZXcgaGVhZGVyIGZpbGUgKG9ubHkgY29udGFpbmluZworCWNvbW1lbnRzIGN1cnJlbnRseSwgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGRvY3VtZW50YXRpb24pLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9QQ0ZfRFJJVkVSX0gpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy9wY2YvcGNmLmggKFBDRl9Ecml2ZXIpOiBBZGQgYG5vX2xvbmdfZmFtaWx5X25hbWVzJyBmaWVsZC4KKworCSogc3JjL3BjZi9wY2Zkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19IIGFuZAorCUZUX1BDRl9EUklWRVJfSC4KKwkocGNmX3Byb3BlcnR5X3NldCwgcGNmX3Byb3BlcnR5X2dldCk6IE5ldyBmdW5jdGlvbnMuCisJKHBjZl9zZXJ2aWNlX3Byb3BlcnRpZXMpOiBOZXcgc2VydmljZS4KKwkocGNmX3NlcnZpY2VzKTogVXBkYXRlZC4KKwkocGNmX2RyaXZlcl9pbml0KSBbUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVNdOiBIYW5kbGUKKwlgbm9fbG9uZ19mYW1pbHlfbmFtZXMnLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IEhhbmRsZSBgbm9fbG9uZ19mYW1pbHlfbmFtZXMnCisJYW5kIFBDRl9DT05GSUdfT1BUSU9OX0xPTkdfRkFNSUxZX05BTUVTLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTctMDEtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtwY2ZdIEludHJvZHVjZSBhIGRyaXZlciBzdHJ1Y3R1cmUuCisKKwlUbyBiZSBmaWxsZWQgbGF0ZXIgb24gd2l0aCBzb21ldGhpbmcgdXNlZnVsLgorCisJKiBzcmMvcGNmL3BjZi5oIChQQ0ZfRHJpdmVyKTogTmV3IHN0cnVjdHVyZS4KKworCSogc3JjL3BjZi9wY2Zkcml2ci5jIChwY2ZfZHJpdmVyX2luaXQsIHBjZl9kcml2ZXJfZG9uZSk6IE5ldyBkdW1teQorCWZ1bmN0aW9ucy4KKwkocGNmX2RyaXZlcl9jbGFzcyk6IFVwZGF0ZWQuCisKKzIwMTctMDEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWdhaW4gc29tZSBHWCBjb2RlIHNodWZmbGluZy4KKworCVdlIG5lZWQgdGhpcyBsYXRlciBvbiBmb3IgTVZBUiBhbHNvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9oYWR2YW5jZV9hZGp1c3QpOiBTcGxpdCBvZmYgY29tcHV0aW5nCisJYW4gaXRlbSBzdG9yZSB2YXJpYXRpb24gZGVsdGEgaW50by4uLgorCShmdF92YXJfZ2V0X2l0ZW1fZGVsdGEpOiAuLi5uZXcgZnVuY3Rpb24uCisKKzIwMTctMDEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWRqdXN0IGZvbnQgdmFyaWF0aW9uIGZsYWdzIGZvciBNVkFSLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRkFDRV9GTEFHX1ZBUl9YWFgpOgorCVJlbW92ZSBhbGwgZmxhZ3MgcmVsYXRlZCB0byBNVkFSOyByZXBsYWNlIGl0IHdpdGguLi4KKwkoVFRfRkFDRV9GTEFHX1ZBUl9NVkFSKTogLi4udGhpcyBuZXcgbWFjcm8uCisJKFRUX0ZhY2UpOiBSZW1vdmUgYG12YXJfc3VwcG9ydCcgZmllbGQgKHdoaWNoIHdhcyBzdGlsbCB1bnVzZWQpLgorCisyMDE3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1vcmUgR1ggY29kZSBzaHVmZmxpbmcuCisKKwlXZSBuZWVkIHRoaXMgbGF0ZXIgb24gZm9yIE1WQVIgYWxzby4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfZG9uZV9ibGVuZCk6IFNwbGl0IG9mZiBoYW5kbGluZyBvZiBpdGVtCisJdmFyaWF0aW9uIHN0b3JlIGludG8uLi4KKwkoZnRfdmFyX2RvbmVfaXRlbV92YXJpYXRpb25fc3RvcmUpOiAuLi5uZXcgZnVuY3Rpb24uCisKKzIwMTctMDEtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gTW9yZSBnZW5lcmFsaXphdGlvbiBvZiBHWCBzdHVmZi4KKworCVdlIG5lZWQgdGhpcyBsYXRlciBvbiBmb3IgTVZBUiBhbHNvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9kZWx0YV9zZXRfaW5kZXhfbWFwcGluZyk6IEFkZAorCXBhcmFtZXRlcnMgZm9yIGRlbHRhLXNldCBpbmRleCBtYXBwaW5nIGFuZCBpdGVtIHZhcmlhdGlvbiBzdG9yZS4KKwkoZnRfdmFyX2xvYWRfaXRlbV92YXJpYXRpb25fc3RvcmUpOiBBZGQgcGFyYW1ldGVyIGZvciBpdGVtIHZhcmlhdGlvbgorCXN0b3JlLgorCXMvaHZhckRhdGEvdmFyRGF0YS8uCisJTW92ZSBhbGxvY2F0aW9uIG9mIGBodmFyX3RhYmxlJyB0by4uLgorCShmdF92YXJfbG9hZF9odmFyKTogLi4udGhpcyBmdW5jdGlvbi4KKwlVcGRhdGVkLgorCisyMDE3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFNvbWUgR1ggc3RydWN0dXJlIHJlbmFtZXMgZm9yIGdlbmVyYWxpemF0aW9uLgorCisJV2UgbmVlZCB0aGlzIGxhdGVyIG9uIGZvciBNVkFSIGFsc28uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmggKEdYX0hWYXJEYXRhKTogUmVuYW1lZCB0by4uLgorCShHWF9JdGVtVmFyRGF0YSk6IC4uLnRoaXMuCisJKEdYX0hWYXJSZWdpb24pOiBSZW5hbWVkIHRvLi4uCisJKEdYX1ZhclJlZ2lvbik6IC4uLnRoaXMuCisJKEdYX0hWU3RvcmUpOiBSZW5hbWVkIHRvLi4uCisJKEdYX0l0ZW1WYXJTdG9yZSk6IC4uLnRoaXMuCisJKEdYX1dpZHRoTWFwKTogUmVuYW1lZCB0by4uLgorCShHWF9EZWx0YVNldElkeE1hcCk6IC4uLnRoaXMuCisKKwkoR1hfSFZhclRhYmxlKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYzogVXBkYXRlZC4KKworMjAxNy0wMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBDb2RlIHNodWZmbGluZy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfaHZhcik6IFNwbGl0IG9mZiBsb2FkaW5nIG9mCisJaXRlbSB2YXJpYXRpb24gc3RvcmUgYW5kIGRlbHRhIHNldCBpbmRleCBtYXBwaW5nIGludG8uLi4KKwkoZnRfdmFyX2xvYWRfaXRlbV92YXJpYXRpb25fc3RvcmUsCisJZnRfdmFyX2xvYWRfZGVsdGFfc2V0X2luZGV4X21hcHBpbmcpOiAuLi5uZXcgZnVuY3Rpb25zLgorCisyMDE3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEFkZCBIVkFSIGFjY2VzcyB3aXRob3V0IGFkdmFuY2Ugd2lkdGggbWFwLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9odmFyKTogSGFuZGxlIGNhc2Ugd2hlcmUKKwlgb2Zmc2V0VG9BZHZhbmNlV2lkdGhNYXBwaW5nJyBpcyB6ZXJvLgorCSh0dF9oYWR2YW5jZV9hZGp1c3QpOiBJbXBsZW1lbnQgZGlyZWN0IGRlbHRhU2V0IGFjY2VzcyBieSBnbHlwaAorCWluZGV4LgorCisyMDE3LTAxLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGNmXSBSZXZpc2UgZHJpdmVyLgorCisJVGhpcyBjb21taXQgaW1wcm92ZXMgdHJhY2luZyBhbmQgaGFuZGxpbmcgb2YgbWFsZm9ybWVkIGZvbnRzLiAgSW4KKwlwYXJ0aWN1bGFyLCB0aGUgY2hhbmdlcyB0byBgcGNmX2dldF9wcm9wZXJ0aWVzJyBmaXgKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9Mzc5CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jICh0YWJsZU5hbWVzKTogVXNlIGxvbmcgbmFtZXMgZm9yIGJldHRlcgorCXJlYWRhYmlsaXR5LgorCShwY2ZfcmVhZF9UT0MpOiBBbGxvdyBhdCBtb3N0IDkgdGFibGVzLgorCShwY2ZfZ2V0X3Byb3BlcnRpZXMpOiBBbGxvdyBhdCBtb3N0IDI1NiBwcm9wZXJ0aWVzLgorCUxpbWl0IHN0cmluZ3MgYXJyYXkgbGVuZ3RoIHRvIDI1NiAqICg2NTUzNiArIDEpIGJ5dGVzLgorCUJldHRlciB0cmFjaW5nLgorCShwY2ZfZ2V0X21ldHJpYyk6IFRyYWNlIG1ldHJpYyBkYXRhLgorCShwY2ZfZ2V0X21ldHJpY3MpOiBBbGxvdyBhdCBtb3N0IDY1NTM2IG1ldHJpY3MuCisJRml4IGNvbXBhcmlzb24gb2YgYG1ldHJpY3MtPmFzY2VudCcgYW5kIGBtZXRyaWNzLT5kZXNjZW50JyB0byBhdm9pZAorCXBvdGVudGlhbCBvdmVyZmxvdy4KKwlCZXR0ZXIgdHJhY2luZy4KKwkocGNmX2dldF9iaXRtYXBzKTogQWxsb3cgYXQgbW9zdCA2NTUzNiBiaXRtYXBzLgorCUJldHRlciB0cmFjaW5nLgorCShwY2ZfZ2V0X2VuY29kaW5ncywgcGNmX2dldF9hY2NlbCk6IEJldHRlciB0cmFjaW5nLgorCisJKiBzcmMvcGNmL3BjZmRyaXZyLmMgKFBDRl9HbHlwaF9Mb2FkKTogRG9uJ3QgdHJhY2UgYGZvcm1hdCcgZGV0YWlscy4KKwlUaGVzZSBhcmUgbm93IHNob3duIGJ5IGBwY2ZfZ2V0X2JpdG1hcHMnLgorCisyMDE3LTAxLTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9wY2YvcGNmZHJpdnIuYyAoUENGX0ZhY2VfSW5pdCk6IFRyYWNlIGNvbXByZXNzaW9uIGZvcm1hdC4KKworMjAxNy0wMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gTW9yZSBjb25zaXN0ZW5jeSBjaGVja3MgZm9yIHB1cmUgQ0ZGcy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM3OAorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2ZvbnRfbG9hZCk6IENoZWNrIGVsZW1lbnQgbnVtYmVyIGFuZCBzaXplCisJb2YgTmFtZSBhbmQgVG9wIERJQ1QgaW5kaWNlcy4KKworMjAxNy0wMS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIE1pbm9yIHRyYWNpbmcgaW1wcm92ZW1lbnQuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KSwgc3JjL3RydWV0eXBlL3R0b2Jqcy5jCisJKHR0X2ZhY2VfaW5pdCk6IEluZGVudCBmaXJzdCB0cmFjaW5nIG1lc3NhZ2UgZnJvbSBTRk5UIGRyaXZlci4KKworMjAxNy0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBWYXJpb3VzIG1pbm9yIGZpeGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX1NpbXBsZV9HbHlwaCk6IENoZWNrIGluc3RydWN0aW9uCisJc2l6ZSBvbmx5IGlmIHdlIGRvIG5hdGl2ZSBoaW50aW5nLgorCShUVF9Mb2FkX0dseXBoKTogVHJhY2UgcmV0dXJuZWQgZXJyb3IgY29kZS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3J1bl9mcGdtLCB0dF9zaXplX3J1bl9wcmVwKTogVHJhY2UKKwlyZXR1cm5lZCBlcnJvciBjb2RlLgorCSh0dF9zaXplX3JlYWR5X2J5dGVjb2RlKTogRG9uJ3QgcnVuIGBwcmVwJyB0YWJsZSBpZiBgZnBnbScgdGFibGUgaXMKKwlpbnZhbGlkLgorCisyMDE3LTAxLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRG9uJ3QgZmFpbCBpZiBQQ0xULCBFQkxDIChhbmQgc2ltaWxhciB0YWJsZXMpIGFyZSBpbnZhbGlkLgorCisJVGhlc2UgdGFibGVzIGFyZSBvcHRpb25hbC4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogSW1wbGVtZW50IGl0LgorCisyMDE3LTAxLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX251bSk6IFNpbXBsaWZ5LgorCisyMDE3LTAxLTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlWYXJpb3VzIGZpeGVzIGZvciBjbGFuZydzIHVuZGVmaW5lZCBiZWhhdmlvdXIgc2FuaXRpemVyLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoRlRfZmRvdDE0VG9GaXhlZCk6IEZpeCBjYXN0aW5nLgorCShjZmZfYmxlbmRfZG9CbGVuZCk6IERvbid0IGxlZnQtc2hpZnQgbmVnYXRpdmUgbnVtYmVycy4KKwlIYW5kbGUgNS1ieXRlIG51bWJlcnMgYnl0ZSBieSBieXRlIHRvIGF2b2lkIGFsaWdubWVudCBpc3N1ZXMuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX251bSk6IEhhbmRsZSA1LWJ5dGUgbnVtYmVycyBieXRlIGJ5CisJYnl0ZSB0byBhdm9pZCBhbGlnbm1lbnQgaXNzdWVzLgorCisJKiBzcmMvY2lkL2NpZGxvYWQgKGNpZF9yZWFkX3N1YnJzKTogRG8gbm90aGluZyBpZiB3ZSBkb24ndCBoYXZlIGFueQorCXN1YnJzLgorCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAodDFfZGVjb2RlX3BhcnNlX2NoYXJzdHJpbmcpOiBGaXggdHJhY2luZy4KKworCSogc3JjL3Rvb2xzL2dsbmFtZXMucHkgKG1haW4pOiBQdXQgYERFRklORV9QU1RBQkxFUycgZ3VhcmQgYXJvdW5kCisJZGVmaW5pdGlvbiBvZiBgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4Jy4KKworCSogc3JjL3BzbmFtZXMvcHN0YWJsZXMuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmM6IEluY2x1ZGUgYHBzdGFibGVzLmgnIHR3aWNlIHRvIGdldCBib3RoCisJZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX2Zkb3QxNFRvRml4ZWQsIEZUX2ludFRvRml4ZWQpOiBGaXgKKwljYXN0aW5nLgorCisyMDE3LTAxLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBIYW5kbGUgbXVsdGlwbGUgYGJsZW5kJyBvcGVyYXRvcnMgaW4gYSByb3cgY29ycmVjdGx5LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzY4CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfYmxlbmRfZG9CbGVuZCk6IEFkanVzdCBgcGFyc2VyLT5zdGFjaycKKwlwb2ludGVycyBpbnRvIGBzdWJGb250LT5ibGVuZF9zdGFjaycgYWZ0ZXIgcmVhbGxvY2F0aW9uLgorCisyMDE3LTAxLTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gUmV0dXJuIGNvcnJlY3QgbnVtYmVyIG9mIG5hbWVkIGluc3RhbmNlcyBmb3IgVFRDcy4KKworCVdpdGhvdXQgdGhpcyBwYXRjaCwgcmVxdWVzdGluZyBpbmZvcm1hdGlvbiBmb3IgZmFjZSBpbmRleCBOIHJldHVybmVkCisJdGhlIGRhdGEgZm9yIGZhY2UgaW5kZXggTisxIChvciBpbmRleCAwKS4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogQ29ycmVjdGx5IGFkanVzdCBgZmFjZV9pbmRleCcKKwlmb3IgbmVnYXRpdmUgYGZhY2VfaW5zdGFuY2VfaW5kZXgnIHZhbHVlcy4KKworMjAxNi0xMi0zMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBVc2UgaGV4IG51bWJlcnMgZm9yIGVycm9ycyBpbiB0cmFjaW5nIG1lc3NhZ2VzLgorCisyMDE2LTEyLTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIENoZWNrIGF4aXMgY291bnQgaW4gSFZBUiB0YWJsZS4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM2MgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9odmFyKTogQ2hlY2sgYXhpcyBjb3VudC4KKwkoZnRfdmFyX2xvYWRfYXZhcik6IEZpeCB0cmFjaW5nIG1lc3NhZ2UuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAxNi0yMDE4IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCitMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQoraW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKK2Z1bGx5LgorCisKK0xvY2FsIFZhcmlhYmxlczoKK3ZlcnNpb24tY29udHJvbDogbmV2ZXIKK2NvZGluZzogdXRmLTgKK0VuZDoKZGlmZiAtLWdpdCBhL0phbWZpbGUgYi9KYW1maWxlCmluZGV4IGE5ZWIzOTYuLjkwNzhhNWYgMTAwNjQ0Ci0tLSBhL0phbWZpbGUKKysrIGIvSmFtZmlsZQpAQCAtMjEwLDcgKzIxMCw3IEBACiB7CiAgIHB5dGhvbiAkKEZUMl9TUkMpL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5CiAgICAgICAgICAtLXByZWZpeD1mdDIKLSAgICAgICAgIC0tdGl0bGU9RnJlZVR5cGUtMi45CisgICAgICAgICAtLXRpdGxlPUZyZWVUeXBlLTIuOS4xCiAgICAgICAgICAtLW91dHB1dD0kKERPQ19ESVIpCiAgICAgICAgICAkKEZUMl9JTkNMVURFKS9mcmVldHlwZS8qLmgKICAgICAgICAgICQoRlQyX0lOQ0xVREUpL2ZyZWV0eXBlL2NvbmZpZy8qLmgKZGlmZiAtLWdpdCBhL01FVEFEQVRBIGIvTUVUQURBVEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5N2Q2NgotLS0gL2Rldi9udWxsCisrKyBiL01FVEFEQVRBCkBAIC0wLDAgKzEsMTggQEAKK25hbWU6ICJmcmVldHlwZSIKK2Rlc2NyaXB0aW9uOiAiRnJlZVR5cGUgaXMgYSBmcmVlbHkgYXZhaWxhYmxlIHNvZnR3YXJlIGxpYnJhcnkgdG8gcmVuZGVyIGZvbnRzLiIKK3RoaXJkX3BhcnR5IHsKKyAgdXJsIHsKKyAgICB0eXBlOiBIT01FUEFHRQorICAgIHZhbHVlOiAiaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnLyIKKyAgfQorICB1cmwgeworICAgIHR5cGU6IEdJVAorICAgIHZhbHVlOiAiZ2l0Oi8vZ2l0LnN2Lm5vbmdudS5vcmcvZnJlZXR5cGUvZnJlZXR5cGUyLmdpdCIKKyAgfQorICB2ZXJzaW9uOiAiOTZiNWU1MDA5MDljZmNlMzlmZjc4ZmVhYmVmZDgwNjNhMjI5Yjk1MSIKKyAgbGFzdF91cGdyYWRlX2RhdGUgeworICAgIHllYXI6IDIwMTgKKyAgICBtb250aDogNworICAgIGRheTogMjcKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDFlN2VhOTcuLmMyM2I5OWUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNSArMSw1IEBACi0gIEZyZWVUeXBlIDIuOQotICA9PT09PT09PT09PT0KKyAgRnJlZVR5cGUgMi45LjEKKyAgPT09PT09PT09PT09PT0KIAogICBIb21lcGFnZTogaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnCiAKQEAgLTI0LDkgKzI0LDkgQEAKIAogICBhbmQgZG93bmxvYWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXMuCiAKLSAgICBmcmVldHlwZS1kb2MtMi45LnRhci5iejIKLSAgICBmcmVldHlwZS1kb2MtMi45LnRhci5negotICAgIGZ0ZG9jMjkuemlwCisgICAgZnJlZXR5cGUtZG9jLTIuOS4xLnRhci5iejIKKyAgICBmcmVldHlwZS1kb2MtMi45LjEudGFyLmd6CisgICAgZnRkb2MyOTEuemlwCiAKICAgVG8gdmlldyB0aGUgZG9jdW1lbnRhdGlvbiBvbmxpbmUsIGdvIHRvCiAKZGlmZiAtLWdpdCBhL1JFQURNRS5hbmRyb2lkIGIvUkVBRE1FLmFuZHJvaWQKaW5kZXggNDY4NDg2Ni4uYTJmNTAyMCAxMDA2NDQKLS0tIGEvUkVBRE1FLmFuZHJvaWQKKysrIGIvUkVBRE1FLmFuZHJvaWQKQEAgLTMsOCArMyw2IEBACiBUaGVyZSBhcmUgdGhlIGZvbGxvd2luZyBsb2NhbCBtb2RpZmljYXRpb25zOgogCiBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGRpc2FibGVkIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg6Ci0gIHQxCi0gIHQxY2lkCiAgIHBmcgogICB0NDIKICAgd2luZm50CkBAIC0zMSwzICsyOSw4IEBACiAqIFVwbG9hZCB0aGUgY2hhbmdlcy4KICAgZXg6IGdpdCBwdXNoIG9yaWdpbiBIRUFEOnJlZnMvZm9yL21hc3RlcgogKiBHZXJyaXQgd2lsbCBydW4gdGhlIHRleHQgcmVsYXRlZCB0ZXN0cy4KKworTk9URToKKyBTaW5jZSBDaHJvbWl1bSB1cGRhdGVzIEZyZWVUeXBlIG1vcmUgZnJlcXVlbnRseSwgeW91IGNhbiBjaGVjayB0aGUgZm9sbG93aW5nIFVSTCBmb3IgdGhlaXIgY2hhbmdlcworIGFuZCBsYXRlc3QgbWVyZ2VzOgorIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMvK2xvZy9tYXN0ZXIvdGhpcmRfcGFydHkvZnJlZXR5cGUKZGlmZiAtLWdpdCBhL1JFQURNRS52ZXJzaW9uIGIvUkVBRE1FLnZlcnNpb24KaW5kZXggMTA1MTY4OC4uZjBmMWY3OCAxMDA2NDQKLS0tIGEvUkVBRE1FLnZlcnNpb24KKysrIGIvUkVBRE1FLnZlcnNpb24KQEAgLTEsMyArMSwzIEBACi1VUkw6IGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2ZyZWV0eXBlL2ZyZWV0eXBlMi5naXQvY29tbWl0Lz9pZD0wMzZiZGMwYzlhNGZiNTViNGZlNWE3Mjc2ZTk3YjcwYjk1YzhhMjYwCi1WZXJzaW9uOiAwMzZiZGMwYzlhNGZiNTViNGZlNWE3Mjc2ZTk3YjcwYjk1YzhhMjYwCitVUkw6IGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2ZyZWV0eXBlL2ZyZWV0eXBlMi5naXQvY29tbWl0Lz9pZD05NmI1ZTUwMDkwOWNmY2UzOWZmNzhmZWFiZWZkODA2M2EyMjliOTUxCitWZXJzaW9uOiAyLjkuMSAuLjk2YjVlNTAwOTA5Y2ZjZTM5ZmY3OGZlYWJlZmQ4MDYzYTIyOWI5NTEgCiBCdWdDb21wb25lbnQ6IDc1OTcwCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2EvbWFrZWZpbGUgYi9idWlsZHMvYW1pZ2EvbWFrZWZpbGUKaW5kZXggNjM2NzQzOC4uNmE3NzAwYSAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL21ha2VmaWxlCisrKyBiL2J1aWxkcy9hbWlnYS9tYWtlZmlsZQpAQCAtOTYsOSArOTYsNiBAQAogZnRjaWQucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRjaWQuYwogCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAogCi1mdGZudGZtdC5wcGMubzogJChGVFNSQykvYmFzZS9mdGZudGZtdC5jCi0JJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8Ci0KIGZ0ZnN0eXBlLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0ZnN0eXBlLmMKIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKIApAQCAtMTExLDkgKzEwOCw2IEBACiBmdGd4dmFsLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0Z3h2YWwuYwogCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAogCi1mdGxjZGZpbC5wcGMubzogJChGVFNSQykvYmFzZS9mdGxjZGZpbC5jCi0JJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8Ci0KIGZ0bW0ucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRtbS5jCiAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CiAKQEAgLTI3MCw4ICsyNjQsOCBAQAogCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAogCiBCQVNFUFBDID0gZnRiYXNlLnBwYy5vIGZ0YmJveC5wcGMubyBmdGJkZi5wcGMubyBmdGJpdG1hcC5wcGMubyBmdGNpZC5wcGMubyBcCi0JICBmdGZudGZtdC5wcGMub2Z0ZnN0eXBlLnBwYy5vIGZ0Z2FzcC5wcGMubyBmdGdseXBoLnBwYy5vICAgICAgICAgIFwKLQkgIGZ0Z3h2YWwucHBjLm8gZnRsY2RmaWwucHBjLm8gZnRtbS5wcGMubyBmdG90dmFsLnBwYy5vICAgICAgICAgICAgXAorCSAgb2Z0ZnN0eXBlLnBwYy5vIGZ0Z2FzcC5wcGMubyBmdGdseXBoLnBwYy5vICAgICAgICAgICAgICAgICAgICAgICBcCisJICBmdGd4dmFsLnBwYy5vIGZ0bW0ucHBjLm8gZnRvdHZhbC5wcGMubyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgIGZ0cGF0ZW50LnBwYy5vIGZ0cGZyLnBwYy5vIGZ0c3Ryb2tlLnBwYy5vIGZ0c3ludGgucHBjLm8gICAgICAgICAgXAogCSAgZnR0eXBlMS5wcGMubyBmdHdpbmZudC5wcGMubwogCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0IGIvYnVpbGRzL2FtaWdhL21ha2VmaWxlLm9zNAppbmRleCBjMDdlMTgxLi4wZDM0MGNmIDEwMDY0NAotLS0gYS9idWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0CisrKyBiL2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQKQEAgLTk5LDkgKzk5LDYgQEAKIGZ0ZGVidWdwdXJlLnBwYy5vOiBzcmMvYmFzZS9mdGRlYnVnLmMKIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgc3JjL2Jhc2UvZnRkZWJ1Zy5jCiAKLWZ0Zm50Zm10LnBwYy5vOiBGVDpzcmMvYmFzZS9mdGZudGZtdC5jCi0JJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGZudGZtdC5jCi0KIGZ0ZnN0eXBlLnBwYy5vOiBGVDpzcmMvYmFzZS9mdGZzdHlwZS5jCiAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGZzdHlwZS5jCiAKQEAgLTExNCw5ICsxMTEsNiBAQAogZnRneHZhbC5wcGMubzogRlQ6c3JjL2Jhc2UvZnRneHZhbC5jCiAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdGd4dmFsLmMKIAotZnRsY2RmaWwucHBjLm86IEZUOnNyYy9iYXNlL2Z0bGNkZmlsLmMKLQkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgL0ZUL3NyYy9iYXNlL2Z0bGNkZmlsLmMKLQogZnRtbS5wcGMubzogRlQ6c3JjL2Jhc2UvZnRtbS5jCiAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvYmFzZS9mdG1tLmMKIApAQCAtMjc0LDggKzI2OCw4IEBACiAJJChDQykgLWMgJChDRkxBR1MpIC1vICRAIC9GVC9zcmMvb3R2YWxpZC9vdHZhbGlkLmMKIAogQkFTRSA9IGZ0YmFzZS5wcGMubyBmdGJib3gucHBjLm8gZnRiZGYucHBjLm8gZnRiaXRtYXAucHBjLm8gZnRjaWQucHBjLm8gXAotICAgICAgIGZ0Zm50Zm10LnBwYy5vIGZ0ZnN0eXBlLnBwYy5vIGZ0Z2FzcC5wcGMubyBmdGdseXBoLnBwYy5vICAgICAgICAgXAotICAgICAgIGZ0Z3h2YWwucHBjLm8gZnRsY2RmaWwucHBjLm8gZnRtbS5wcGMubyBmdG90dmFsLnBwYy5vICAgICAgICAgICAgXAorICAgICAgIGZ0ZnN0eXBlLnBwYy5vIGZ0Z2FzcC5wcGMubyBmdGdseXBoLnBwYy5vICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZ0Z3h2YWwucHBjLm8gZnRtbS5wcGMubyBmdG90dmFsLnBwYy5vICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGZ0cGF0ZW50LnBwYy5vIGZ0cGZyLnBwYy5vIGZ0c3Ryb2tlLnBwYy5vIGZ0c3ludGgucHBjLm8gICAgICAgICAgXAogICAgICAgIGZ0dHlwZTEucHBjLm8gZnR3aW5mbnQucHBjLm8KIApkaWZmIC0tZ2l0IGEvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZSBiL2J1aWxkcy9hbWlnYS9zbWFrZWZpbGUKaW5kZXggMjlhMzFlNC4uZjVkZTMwOCAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZQorKysgYi9idWlsZHMvYW1pZ2Evc21ha2VmaWxlCkBAIC00Miw4ICs0Miw4IEBACiAjIChhbmQgZWl0aGVyIGZ0ZGVidWcubyBvciBmdGRlYnVncHVyZS5vIGlmIHlvdSBlbmFibGVkIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yCiAjIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgpLgogCi1PQkpCQVNFID0gZnRiYXNlLm8gZnRiYm94Lm8gZnRiZGYubyBmdGJpdG1hcC5vIGZ0Y2lkLm8gZnRmbnRmbXQubyBmdGZzdHlwZS5vIFwKLQkgIGZ0Z2FzcC5vIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRsY2RmaWwubyBmdG1tLm8gZnRvdHZhbC5vICAgICAgICAgICBcCitPQkpCQVNFID0gZnRiYXNlLm8gZnRiYm94Lm8gZnRiZGYubyBmdGJpdG1hcC5vIGZ0Y2lkLm8gZnRmc3R5cGUubyAgICAgIFwKKwkgIGZ0Z2FzcC5vIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRtbS5vIGZ0b3R2YWwubyAgICAgICAgICAgICAgICBcCiAJICBmdHBhdGVudC5vIGZ0cGZyLm8gZnRzdHJva2UubyBmdHN5bnRoLm8gZnR0eXBlMS5vIGZ0d2luZm50Lm8KIAogT0JKU1lTVEVNID0gZnRzeXN0ZW0ubyBmdHN5c3RlbXB1cmUubwpAQCAtMTMzLDggKzEzMyw2IEBACiAJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiBmdGNpZC5vOiAkKENPUkUpYmFzZS9mdGNpZC5jCiAJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8Ci1mdGZudGZtdC5vOiAkKENPUkUpYmFzZS9mdGZudGZtdC5jCi0Jc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiBmdGZzdHlwZS5vOiAkKENPUkUpYmFzZS9mdGZzdHlwZS5jCiAJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiBmdGdhc3AubzogJChDT1JFKWJhc2UvZnRnYXNwLmMKQEAgLTE0Myw4ICsxNDEsNiBAQAogCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAogZnRneHZhbC5vOiAkKENPUkUpYmFzZS9mdGd4dmFsLmMKIAlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKLWZ0bGNkZmlsLm86ICQoQ09SRSliYXNlL2Z0bGNkZmlsLmMKLQlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIGZ0bW0ubzogJChDT1JFKWJhc2UvZnRtbS5jCiAJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiBmdG90dmFsLm86ICQoQ09SRSliYXNlL2Z0b3R2YWwuYwpkaWZmIC0tZ2l0IGEvYnVpbGRzL2NtYWtlL0ZpbmRIYXJmQnV6ei5jbWFrZSBiL2J1aWxkcy9jbWFrZS9GaW5kSGFyZkJ1enouY21ha2UKaW5kZXggZjM5NGI4Mi4uZWUwZDUyZSAxMDA2NDQKLS0tIGEvYnVpbGRzL2NtYWtlL0ZpbmRIYXJmQnV6ei5jbWFrZQorKysgYi9idWlsZHMvY21ha2UvRmluZEhhcmZCdXp6LmNtYWtlCkBAIC0zMSw0MiArMzEsNTEgQEAKICMgSEFSRkJVWlpfTElCUkFSSUVTIC0gY29udGFpbmcgdGhlIEhhcmZCdXp6IGxpYnJhcnkKIAogaW5jbHVkZShGaW5kUGtnQ29uZmlnKQorcGtnX2NoZWNrX21vZHVsZXMoUENfSEFSRkJVWlogUVVJRVQgaGFyZmJ1enopCiAKLXBrZ19jaGVja19tb2R1bGVzKFBDX0hBUkZCVVpaIGhhcmZidXp6Pj0wLjkuNykKLQotZmluZF9wYXRoKEhBUkZCVVpaX0lOQ0xVREVfRElSUyBOQU1FUyBoYi5oCi0gICAgSElOVFMgJHtQQ19IQVJGQlVaWl9JTkNMVURFX0RJUlN9ICR7UENfSEFSRkJVWlpfSU5DTFVERURJUn0KK2ZpbmRfcGF0aChIQVJGQlVaWl9JTkNMVURFX0RJUlMKKyAgICBOQU1FUyBoYi5oCisgICAgSElOVFMgJHtQQ19IQVJGQlVaWl9JTkNMVURFRElSfQorICAgICAgICAgICR7UENfSEFSRkJVWlpfSU5DTFVERV9ESVJTfQorICAgIFBBVEhfU1VGRklYRVMgaGFyZmJ1enoKICkKIAogZmluZF9saWJyYXJ5KEhBUkZCVVpaX0xJQlJBUklFUyBOQU1FUyBoYXJmYnV6egotICAgIEhJTlRTICR7UENfSEFSRkJVWlpfTElCUkFSWV9ESVJTfSAke1BDX0hBUkZCVVpaX0xJQkRJUn0KKyAgICBISU5UUyAke1BDX0hBUkZCVVpaX0xJQkRJUn0KKyAgICAgICAgICAke1BDX0hBUkZCVVpaX0xJQlJBUllfRElSU30KICkKIAotIyBIYXJmQnV6eiAwLjkuMTggc3BsaXQgSUNVIHN1cHBvcnQgaW50byBhIHNlcGFyYXRlIGhhcmZidXp6LWljdSBsaWJyYXJ5LgotaWYgKCIke1BDX0hBUkZCVVpaX1ZFUlNJT059IiBWRVJTSU9OX0dSRUFURVIgIjAuOS4xNyIpCi0gICAgaWYgKEhhcmZCdXp6X0ZJTkRfUkVRVUlSRUQpCi0gICAgICAgIHNldChfSEFSRkJVWlpfUkVRVUlSRUQgUkVRVUlSRUQpCi0gICAgZWxzZSAoKQotICAgICAgICBzZXQoX0hBUkZCVVpaX1JFUVVJUkVEICIiKQoraWYgKEhBUkZCVVpaX0lOQ0xVREVfRElSUykKKyAgICBpZiAoRVhJU1RTICIke0hBUkZCVVpaX0lOQ0xVREVfRElSU30vaGItdmVyc2lvbi5oIikKKyAgICAgICAgZmlsZShSRUFEICIke0hBUkZCVVpaX0lOQ0xVREVfRElSU30vaGItdmVyc2lvbi5oIiBfaGFyZmJ1enpfdmVyc2lvbl9jb250ZW50KQorCisgICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiI2RlZmluZSArSEJfVkVSU0lPTl9TVFJJTkcgK1wiKFswLTldK1xcLlswLTldK1xcLlswLTldKylcIiIgX2R1bW15ICIke19oYXJmYnV6el92ZXJzaW9uX2NvbnRlbnR9IikKKyAgICAgICAgc2V0KEhBUkZCVVpaX1ZFUlNJT04gIiR7Q01BS0VfTUFUQ0hfMX0iKQogICAgIGVuZGlmICgpCi0gICAgcGtnX2NoZWNrX21vZHVsZXMoUENfSEFSRkJVWlpfSUNVIGhhcmZidXp6LWljdT49MC45LjE4ICR7X0hBUkZCVVpaX1JFUVVJUkVEfSkKLSAgICBmaW5kX2xpYnJhcnkoSEFSRkJVWlpfSUNVX0xJQlJBUklFUyBOQU1FUyBoYXJmYnV6ei1pY3UKLSAgICAgICAgSElOVFMgJHtQQ19IQVJGQlVaWl9JQ1VfTElCUkFSWV9ESVJTfSAke1BDX0hBUkZCVVpaX0lDVV9MSUJESVJ9Ci0gICAgKQotICAgIGlmIChIQVJGQlVaWl9JQ1VfTElCUkFSSUVTKQotICAgICAgICBsaXN0KEFQUEVORCBIQVJGQlVaWl9MSUJSQVJJRVMgIiR7SEFSRkJVWlpfSUNVX0xJQlJBUklFU30iKQotICAgIGVuZGlmICgpCi0gICAgc2V0KF9IQVJGQlVaWl9FWFRSQV9SRVFVSVJFRF9WQVIgIkhBUkZCVVpaX0lDVV9MSUJSQVJJRVMiKQotZWxzZSAoKQotICAgIHNldChfSEFSRkJVWlpfRVhUUkFfUkVRVUlSRURfVkFSICIiKQorZW5kaWYgKCkKKworaWYgKCIke2hhcmZidXp6X0ZJTkRfVkVSU0lPTn0iIFZFUlNJT05fR1JFQVRFUiAiJHtIQVJGQlVaWl9WRVJTSU9OfSIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUmVxdWlyZWQgdmVyc2lvbiAoIiAke2hhcmZidXp6X0ZJTkRfVkVSU0lPTn0gIikgaXMgaGlnaGVyIHRoYW4gZm91bmQgdmVyc2lvbiAoIiAke0hBUkZCVVpaX1ZFUlNJT059ICIpIikKIGVuZGlmICgpCiAKIGluY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCi1GSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoSGFyZkJ1enogREVGQVVMVF9NU0cgSEFSRkJVWlpfSU5DTFVERV9ESVJTCi0gICAgSEFSRkJVWlpfTElCUkFSSUVTICR7X0hBUkZCVVpaX0VYVFJBX1JFUVVJUkVEX1ZBUn0pCitGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoCisgICAgaGFyZmJ1enogCisgICAgICAgIFJFUVVJUkVEX1ZBUlMgSEFSRkJVWlpfSU5DTFVERV9ESVJTIEhBUkZCVVpaX0xJQlJBUklFUworICAgICAgICBWRVJTSU9OX1ZBUiBIQVJGQlVaWl9WRVJTSU9OKQogCiBtYXJrX2FzX2FkdmFuY2VkKAotICAgIEhBUkZCVVpaX0lDVV9MSUJSQVJJRVMKICAgICBIQVJGQlVaWl9JTkNMVURFX0RJUlMKICAgICBIQVJGQlVaWl9MSUJSQVJJRVMKICkKKworIyBBbGxvd3MgZWFzeSBsaW5raW5nIGFzIGluIAorIyAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhmcmVldHlwZSBQUklWQVRFIEhhcmZidXp6OjpIYXJmYnV6eikKK2lmIChOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4xKQorICAgIGlmIChIQVJGQlVaWl9GT1VORCBBTkQgTk9UIFRBUkdFVCBIYXJmYnV6ejo6SGFyZmJ1enopCisgICAgICAgIGFkZF9saWJyYXJ5KEhhcmZidXp6OjpIYXJmYnV6eiBJTlRFUkZBQ0UgSU1QT1JURUQpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcygKKyAgICAgICAgICAgIEhhcmZidXp6OjpIYXJmYnV6eiBQUk9QRVJUSUVTCisgICAgICAgICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7SEFSRkJVWlpfSU5DTFVERV9ESVJTfSIpCisgICAgZW5kaWYgKCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9idWlsZHMvZGV0ZWN0Lm1rIGIvYnVpbGRzL2RldGVjdC5tawppbmRleCA3NzFmYzMxLi5lYjdmNzk3IDEwMDY0NAotLS0gYS9idWlsZHMvZGV0ZWN0Lm1rCisrKyBiL2J1aWxkcy9kZXRlY3QubWsKQEAgLTEwMSw1NyArMTAxLDI4IEBACiAgIC5QSE9OWTogc2V0dXAKIGVuZGlmCiAKLSMgVGhlIGZvbGxvd2luZyB0YXJnZXRzIGFyZSBlcXVpdmFsZW50LCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGV5IHVzZQotIyBhIHNsaWdodGx5IGRpZmZlcmVudCBzeW50YXggZm9yIHRoZSBgZWNobycgY29tbWFuZC4KKyMgRmxhc2ggb3V0IGFuZCBjb3B5IHJ1bGVzLgogIwotIyBzdGRfc2V0dXA6IGRlZmluZWQgZm9yIG1vc3QgKGkuZS4gVW5peC1saWtlKSBwbGF0Zm9ybXMKLSMgZG9zX3NldHVwOiBkZWZpbmVkIGZvciBEb3MtaXNoIHBsYXRmb3JtcyBsaWtlIERvcywgV2luZG93cyAmIE9TLzIKLSMKLS5QSE9OWTogc3RkX3NldHVwIGRvc19zZXR1cAorLlBIT05ZOiBzdGRfc2V0dXAKIAogc3RkX3NldHVwOgotCUBlY2hvICIiCi0JQGVjaG8gIiQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uIgotCUBlY2hvICIiCi0JQGVjaG8gIlRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQ6IgotCUBlY2hvICIiCi0JQGVjaG8gIiAgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICQoUExBVEZPUk0pIgotCUBlY2hvICIgIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgICAkKENDKSIKLQlAZWNobyAiICBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSAgICAgJChCVUlMRF9ESVIpIgotCUBlY2hvICIgIGNvbmZpZ3VyYXRpb24gcnVsZXMgICAgICAgICAkKENPTkZJR19SVUxFUykiCi0JQGVjaG8gIiIKLQlAZWNobyAiSWYgdGhpcyBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHlvdXIgc3lzdGVtIG9yIHNldHRpbmdzIHBsZWFzZSByZW1vdmUgdGhlIGZpbGUiCi0JQGVjaG8gIlxgJChDT05GSUdfTUspJyBmcm9tIHRoaXMgZGlyZWN0b3J5IHRoZW4gcmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBoZWxwLiIKLQlAZWNobyAiIgotCUBlY2hvICJPdGhlcndpc2UsIHNpbXBseSB0eXBlIFxgJChNQUtFKScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnksIgotCUBlY2hvICJvciBcYCQoTUFLRSkgcmVmZG9jJyB0byBidWlsZCB0aGUgQVBJIHJlZmVyZW5jZSAodGhpcyBuZWVkcyBweXRob24gPj0gMi42KS4iCi0JQGVjaG8gIiIKLQlAJChDT1BZKSAkKENPTkZJR19SVUxFUykgJChDT05GSUdfTUspCi0KLQotIyBTcGVjaWFsIGNhc2UgZm9yIERvcywgV2luZG93cywgT1MvMiwgd2hlcmUgZWNobyAiIiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IQotIwotIyBGb3IgYGNtZC5leGUnLCB3ZSB1c2UgMHhGRiBhcyBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgYSBwcm90ZWN0ZWQKLSMgc3BhY2UuCi0jCi1kb3Nfc2V0dXA6Ci0JQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQotCUBlY2hvICQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uCi0JQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQotCUBlY2hvIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQ6Ci0JQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQotCUBlY2hvICAgcGxhdGZvcm3///////////////////////////8kKFBMQVRGT1JNKQotCUBlY2hvICAgY29tcGlsZXL///////////////////////////8kKENDKQotCUBlY2hvICAgY29uZmlndXJhdGlvbiBkaXJlY3Rvcnn///////8kKHN1YnN0IC8sJChTRVApLCQoQlVJTERfRElSKSkKLQlAZWNobyAgIGNvbmZpZ3VyYXRpb24gcnVsZXP/////////////JChzdWJzdCAvLCQoU0VQKSwkKENPTkZJR19SVUxFUykpCi0JQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQotCUBlY2hvIElmIHRoaXMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB5b3VyIHN5c3RlbSBvciBzZXR0aW5ncyBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlCi0JQGVjaG8gJyQoQ09ORklHX01LKScgZnJvbSB0aGlzIGRpcmVjdG9yeSB0aGVuIHJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgaGVscC4KLQlAdHlwZSBidWlsZHMkKFNFUCluZXdsaW5lCi0JQGVjaG8gT3RoZXJ3aXNlLCBzaW1wbHkgdHlwZSAnbWFrZScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnkuCi0JQGVjaG8gb3IgJ21ha2UgcmVmZG9jJyB0byBidWlsZCB0aGUgQVBJIHJlZmVyZW5jZSAodGhpcyBuZWVkcyBhdCBsZWFzdCBweXRob24gMi42KS4KLQlAdHlwZSBidWlsZHMkKFNFUCluZXdsaW5lCi0JQCQoQ09QWSkgJChzdWJzdCAvLCQoU0VQKSwkKENPTkZJR19SVUxFUykgJChDT05GSUdfTUspKSA+IG51bAorCSQoaW5mbyApCisJJChpbmZvICQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uKQorCSQoaW5mbyApCisJJChpbmZvIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIHVzZWQ6KQorCSQoaW5mbyApCisJJChpbmZvICQoZW1wdHkpICBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgJChQTEFURk9STSkpCisJJChpbmZvICQoZW1wdHkpICBjb21waWxlciAgICAgICAgICAgICAgICAgICAgJChDQykpCisJJChpbmZvICQoZW1wdHkpICBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSAgICAgJChzdWJzdCAvLCQoU0VQKSwkKEJVSUxEX0RJUikpKQorCSQoaW5mbyAkKGVtcHR5KSAgY29uZmlndXJhdGlvbiBydWxlcyAgICAgICAgICQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpKSkKKwkkKGluZm8gKQorCSQoaW5mbyBJZiB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8geW91ciBzeXN0ZW0gb3Igc2V0dGluZ3MgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZSkKKwkkKGluZm8gYCQoQ09ORklHX01LKScgZnJvbSB0aGlzIGRpcmVjdG9yeSB0aGVuIHJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgaGVscC4pCisJJChpbmZvICkKKwkkKGluZm8gT3RoZXJ3aXNlLCBzaW1wbHkgdHlwZSBgJChNQUtFKScgYWdhaW4gdG8gYnVpbGQgdGhlIGxpYnJhcnksKQorCSQoaW5mbyBvciBgJChNQUtFKSByZWZkb2MnIHRvIGJ1aWxkIHRoZSBBUEkgcmVmZXJlbmNlICh0aGlzIG5lZWRzIHB5dGhvbiA+PSAyLjYpLikKKwkkKGluZm8gKQorCUAkKENPUFkpICQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpICQoQ09ORklHX01LKSkKIAogCiAjIEVPRgpkaWZmIC0tZ2l0IGEvYnVpbGRzL2Rvcy9kZXRlY3QubWsgYi9idWlsZHMvZG9zL2RldGVjdC5tawppbmRleCA1NWIwZTc2Li4xNGQ4YzAzIDEwMDY0NAotLS0gYS9idWlsZHMvZG9zL2RldGVjdC5taworKysgYi9idWlsZHMvZG9zL2RldGVjdC5tawpAQCAtODAsMzYgKzgwLDQ2IEBACiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgZW14LCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgIyBFTVggZ2NjCiAgICAgQ09ORklHX0ZJTEUgOj0gZG9zLWVteC5tawogICAgIENDICAgICAgICAgIDo9IGdjYwotICAgIGVteDogc2V0dXAKKwogICAgIC5QSE9OWTogZW14CisgICAgZW14OiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgdHVyYm9jLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBUdXJibyBDCiAgICAgQ09ORklHX0ZJTEUgOj0gZG9zLXRjYy5tawogICAgIENDICAgICAgICAgIDo9IHRjYwotICAgIHR1cmJvYzogc2V0dXAKKwogICAgIC5QSE9OWTogdHVyYm9jCisgICAgdHVyYm9jOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgd2F0Y29tLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBXYXRjb20gQy9DKysKICAgICBDT05GSUdfRklMRSA6PSBkb3Mtd2F0Lm1rCiAgICAgQ0MgICAgICAgICAgOj0gd2NjMzg2Ci0gICAgd2F0Y29tOiBzZXR1cAorCiAgICAgLlBIT05ZOiB3YXRjb20KKyAgICB3YXRjb206IHNldHVwCisJICAgIEBjZCAuCiAgIGVuZGlmCiAKICAgaWZuZXEgKCQoZmluZHN0cmluZyBib3JsYW5kYywkKE1BS0VDTURHT0FMUykpLCkgICAjIEJvcmxhbmQgQy9DKysgMzItYml0CiAgICAgQ09ORklHX0ZJTEUgOj0gZG9zLWJjYy5tawogICAgIENDICAgICAgICAgIDo9IGJjYzMyCi0gICAgYm9ybGFuZGM6IHNldHVwCisKICAgICAuUEhPTlk6IGJvcmxhbmRjCisgICAgYm9ybGFuZGM6IHNldHVwCisJICAgIEBjZCAuCiAgIGVuZGlmCiAKICAgaWZuZXEgKCQoZmluZHN0cmluZyBib3JsYW5kYzE2LCQoTUFLRUNNREdPQUxTKSksKSAjIEJvcmxhbmQgQy9DKysgMTYtYml0CiAgICAgQ09ORklHX0ZJTEUgOj0gZG9zLWJjYy5tawogICAgIENDICAgICAgICAgIDo9IGJjYwotICAgIGJvcmxhbmRjMTY6IHNldHVwCisKICAgICAuUEhPTlk6IGJvcmxhbmRjMTYKKyAgICBib3JsYW5kYzE2OiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgYmFzaCwkKFNIRUxMKSksKSAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYmFzaApAQCAtMTMzLDcgKzE0Myw3IEBACiAgICAgICBDT1BZIDo9IGNvcHkKICAgICBlbmRpZiAgIyB0ZXN0IE5UCiAKLSAgICBzZXR1cDogZG9zX3NldHVwCisgICAgc2V0dXA6IHN0ZF9zZXR1cAogICBlbmRpZgogCiBlbmRpZiAgICAgIyB0ZXN0IFBMQVRGT1JNIGRvcwpkaWZmIC0tZ2l0IGEvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dCBiL2J1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19jZm0ubWFrZS50eHQKaW5kZXggYzBhNTVmNS4uYjc0NTY1ZiAxMDA2NDQKLS0tIGEvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2NmbS5tYWtlLnR4dAorKysgYi9idWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfY2ZtLm1ha2UudHh0CkBAIC0zOCw3ICszOCw2IEBACiAJCQkJICA6c3JjOmJhc2U6ZnRiZGYuYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRiaXRtYXAuYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRkZWJ1Zy5jIFx4QjYKLQkJCQkgIDpzcmM6YmFzZTpmdGZudGZtdC5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGZzdHlwZS5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGdseXBoLmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0Z3h2YWwuYyBceEI2CkBAIC04Myw3ICs4Miw2IEBACiAJCQkJICAie09iakRpcn1mdGJkZi5jLm8iIFx4QjYKIAkJCQkgICJ7T2JqRGlyfWZ0Yml0bWFwLmMubyIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRkZWJ1Zy5jLm8iIFx4QjYKLQkJCQkgICJ7T2JqRGlyfWZ0Zm50Zm10LmMubyIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRmc3R5cGUuYy5vIiBceEI2CiAJCQkJICAie09iakRpcn1mdGdseXBoLmMubyIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRneHZhbC5jLm8iIFx4QjYKQEAgLTE2MSw3ICsxNTksNiBAQAogIntPYmpEaXJ9ZnRiZGYuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGJkZi5jCiAie09iakRpcn1mdGJpdG1hcC5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0Yml0bWFwLmMKICJ7T2JqRGlyfWZ0ZGVidWcuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGRlYnVnLmMKLSJ7T2JqRGlyfWZ0Zm50Zm10LmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRmbnRmbXQuYwogIntPYmpEaXJ9ZnRmc3R5cGUuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGZzdHlwZS5jCiAie09iakRpcn1mdGdseXBoLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRnbHlwaC5jCiAie09iakRpcn1mdGd4dmFsLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRneHZhbC5jCmRpZmYgLS1naXQgYS9idWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0IGIvYnVpbGRzL21hYy9GcmVlVHlwZS5tNjhrX2Zhci5tYWtlLnR4dAppbmRleCBlOWI3ZjZmLi5kODgwZGRiIDEwMDY0NAotLS0gYS9idWlsZHMvbWFjL0ZyZWVUeXBlLm02OGtfZmFyLm1ha2UudHh0CisrKyBiL2J1aWxkcy9tYWMvRnJlZVR5cGUubTY4a19mYXIubWFrZS50eHQKQEAgLTM3LDcgKzM3LDYgQEAKIAkJCQkgIDpzcmM6YmFzZTpmdGJkZi5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGJpdG1hcC5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGRlYnVnLmMgXHhCNgotCQkJCSAgOnNyYzpiYXNlOmZ0Zm50Zm10LmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0Z2x5cGguYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRneHZhbC5jIFx4QjYKQEAgLTgyLDcgKzgxLDYgQEAKIAkJCQkgICJ7T2JqRGlyfWZ0YmRmLmMubyIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRiaXRtYXAuYy5vIiBceEI2CiAJCQkJICAie09iakRpcn1mdGRlYnVnLmMubyIgXHhCNgotCQkJCSAgIntPYmpEaXJ9ZnRmbnRmbXQuYy5vIiBceEI2CiAJCQkJICAie09iakRpcn1mdGZzdHlwZS5jLm8iIFx4QjYKIAkJCQkgICJ7T2JqRGlyfWZ0Z2x5cGguYy5vIiBceEI2CiAJCQkJICAie09iakRpcn1mdGd4dmFsLmMubyIgXHhCNgpAQCAtMTYwLDcgKzE1OCw2IEBACiAie09iakRpcn1mdGJkZi5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0YmRmLmMKICJ7T2JqRGlyfWZ0Yml0bWFwLmMubyIgXHhDNCA6c3JjOmJhc2U6ZnRiaXRtYXAuYwogIntPYmpEaXJ9ZnRkZWJ1Zy5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0ZGVidWcuYwotIntPYmpEaXJ9ZnRmbnRmbXQuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGZudGZtdC5jCiAie09iakRpcn1mdGZzdHlwZS5jLm8iIFx4QzQgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMKICJ7T2JqRGlyfWZ0Z2x5cGguYy5vIiBceEM0IDpzcmM6YmFzZTpmdGdseXBoLmMKICJ7T2JqRGlyfWZ0Z3h2YWwuYy5vIiBceEM0IDpzcmM6YmFzZTpmdGd4dmFsLmMKZGlmZiAtLWdpdCBhL2J1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dCBiL2J1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NhcmJvbi5tYWtlLnR4dAppbmRleCA5ZWIxZGFjLi4xZmE4YzMwIDEwMDY0NAotLS0gYS9idWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jYXJib24ubWFrZS50eHQKKysrIGIvYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2FyYm9uLm1ha2UudHh0CkBAIC0zOCw3ICszOCw2IEBACiAJCQkJICA6c3JjOmJhc2U6ZnRiZGYuYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRiaXRtYXAuYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRkZWJ1Zy5jIFx4QjYKLQkJCQkgIDpzcmM6YmFzZTpmdGZudGZtdC5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGZzdHlwZS5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGdseXBoLmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0Z3h2YWwuYyBceEI2CkBAIC04Myw3ICs4Miw2IEBACiAJCQkJICAie09iakRpcn1mdGJkZi5jLngiIFx4QjYKIAkJCQkgICJ7T2JqRGlyfWZ0Yml0bWFwLmMueCIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRkZWJ1Zy5jLngiIFx4QjYKLQkJCQkgICJ7T2JqRGlyfWZ0Zm50Zm10LmMueCIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRmc3R5cGUuYy54IiBceEI2CiAJCQkJICAie09iakRpcn1mdGdseXBoLmMueCIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRneHZhbC5jLngiIFx4QjYKQEAgLTE2NCw3ICsxNjIsNiBAQAogIntPYmpEaXJ9ZnRiZGYuYy54IiBceEM0IDpzcmM6YmFzZTpmdGJkZi5jCiAie09iakRpcn1mdGJpdG1hcC5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0Yml0bWFwLmMKICJ7T2JqRGlyfWZ0ZGVidWcuYy54IiBceEM0IDpzcmM6YmFzZTpmdGRlYnVnLmMKLSJ7T2JqRGlyfWZ0Zm50Zm10LmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRmbnRmbXQuYwogIntPYmpEaXJ9ZnRmc3R5cGUuYy54IiBceEM0IDpzcmM6YmFzZTpmdGZzdHlwZS5jCiAie09iakRpcn1mdGdseXBoLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRnbHlwaC5jCiAie09iakRpcn1mdGd4dmFsLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRneHZhbC5jCmRpZmYgLS1naXQgYS9idWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0IGIvYnVpbGRzL21hYy9GcmVlVHlwZS5wcGNfY2xhc3NpYy5tYWtlLnR4dAppbmRleCAwNjI3ZWVhLi4yNTUwMTkwIDEwMDY0NAotLS0gYS9idWlsZHMvbWFjL0ZyZWVUeXBlLnBwY19jbGFzc2ljLm1ha2UudHh0CisrKyBiL2J1aWxkcy9tYWMvRnJlZVR5cGUucHBjX2NsYXNzaWMubWFrZS50eHQKQEAgLTM4LDcgKzM4LDYgQEAKIAkJCQkgIDpzcmM6YmFzZTpmdGJkZi5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGJpdG1hcC5jIFx4QjYKIAkJCQkgIDpzcmM6YmFzZTpmdGRlYnVnLmMgXHhCNgotCQkJCSAgOnNyYzpiYXNlOmZ0Zm50Zm10LmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMgXHhCNgogCQkJCSAgOnNyYzpiYXNlOmZ0Z2x5cGguYyBceEI2CiAJCQkJICA6c3JjOmJhc2U6ZnRneHZhbC5jIFx4QjYKQEAgLTgzLDcgKzgyLDYgQEAKIAkJCQkgICJ7T2JqRGlyfWZ0YmRmLmMueCIgXHhCNgogCQkJCSAgIntPYmpEaXJ9ZnRiaXRtYXAuYy54IiBceEI2CiAJCQkJICAie09iakRpcn1mdGRlYnVnLmMueCIgXHhCNgotCQkJCSAgIntPYmpEaXJ9ZnRmbnRmbXQuYy54IiBceEI2CiAJCQkJICAie09iakRpcn1mdGZzdHlwZS5jLngiIFx4QjYKIAkJCQkgICJ7T2JqRGlyfWZ0Z2x5cGguYy54IiBceEI2CiAJCQkJICAie09iakRpcn1mdGd4dmFsLmMueCIgXHhCNgpAQCAtMTY0LDcgKzE2Miw2IEBACiAie09iakRpcn1mdGJkZi5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0YmRmLmMKICJ7T2JqRGlyfWZ0Yml0bWFwLmMueCIgXHhDNCA6c3JjOmJhc2U6ZnRiaXRtYXAuYwogIntPYmpEaXJ9ZnRkZWJ1Zy5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0ZGVidWcuYwotIntPYmpEaXJ9ZnRmbnRmbXQuYy54IiBceEM0IDpzcmM6YmFzZTpmdGZudGZtdC5jCiAie09iakRpcn1mdGZzdHlwZS5jLngiIFx4QzQgOnNyYzpiYXNlOmZ0ZnN0eXBlLmMKICJ7T2JqRGlyfWZ0Z2x5cGguYy54IiBceEM0IDpzcmM6YmFzZTpmdGdseXBoLmMKICJ7T2JqRGlyfWZ0Z3h2YWwuYy54IiBceEM0IDpzcmM6YmFzZTpmdGd4dmFsLmMKZGlmZiAtLWdpdCBhL2J1aWxkcy9tb2R1bGVzLm1rIGIvYnVpbGRzL21vZHVsZXMubWsKaW5kZXggZTFlZGIxNy4uOWE3YTRhMCAxMDA2NDQKLS0tIGEvYnVpbGRzL21vZHVsZXMubWsKKysrIGIvYnVpbGRzL21vZHVsZXMubWsKQEAgLTQxLDcgKzQxLDcgQEAKIAogZGVmaW5lIEZUTU9EVUxFX0hfSU5JVAogJChSRU1PVkVfTU9EVUxFKQotQC1lY2hvIEdlbmVyYXRpbmcgbW9kdWxlcyBsaXN0IGluICQoRlRNT0RVTEVfSCkuLi4KKyQoaW5mbyBHZW5lcmF0aW5nIG1vZHVsZXMgbGlzdCBpbiAkKEZUTU9EVUxFX0gpLi4uKQogJChPUEVOX01PRFVMRSkvKiBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuICovJChDTE9TRV9NT0RVTEUpCiBlbmRlZgogCkBAIC01Niw3ICs1Niw3IEBACiAKIGRlZmluZSBGVE1PRFVMRV9IX0RPTkUKICQoT1BFTl9NT0RVTEUpLyogRU9GICovJChDTE9TRV9NT0RVTEUpCi1AZWNobyBkb25lLgorJChpbmZvIGRvbmUuKQogZW5kZWYKIAogCmRpZmYgLS1naXQgYS9idWlsZHMvbmV3bGluZSBiL2J1aWxkcy9uZXdsaW5lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjEzNzg5Li4wMDAwMDAwCi0tLSBhL2J1aWxkcy9uZXdsaW5lCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotCmRpZmYgLS1naXQgYS9idWlsZHMvb3MyL2RldGVjdC5tayBiL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCmluZGV4IDJlZGI4ZDQuLjVhODBhMjIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCisrKyBiL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCkBAIC00MCwzMiArNDAsNDAgQEAKICAgaWZuZXEgKCQoZmluZHN0cmluZyB2aXN1YWxhZ2UsJChNQUtFQ01ER09BTFMpKSwpICAgICAjIFZpc3VhbCBBZ2UgQysrCiAgICAgQ09ORklHX0ZJTEUgOj0gb3MyLWljYy5tawogICAgIENDICAgICAgICAgIDo9IGljYwotICAgIHZpc3VhbGFnZTogc2V0dXAKKwogICAgIC5QSE9OWTogdmlzdWFsYWdlCisgICAgdmlzdWFsYWdlOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgd2F0Y29tLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgIyBXYXRjb20gQy9DKysKICAgICBDT05GSUdfRklMRSA6PSBvczItd2F0Lm1rCiAgICAgQ0MgICAgICAgICAgOj0gd2NjMzg2Ci0gICAgd2F0Y29tOiBzZXR1cAorCiAgICAgLlBIT05ZOiB3YXRjb20KKyAgICB3YXRjb206IHNldHVwCisJICAgIEBjZCAuCiAgIGVuZGlmCiAKICAgaWZuZXEgKCQoZmluZHN0cmluZyBib3JsYW5kYywkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIEJvcmxhbmQgQysrIDMyLWJpdAogICAgIENPTkZJR19GSUxFIDo9IG9zMi1iY2MubWsKICAgICBDQyAgICAgICAgICA6PSBiY2MzMgotICAgIGJvcmxhbmRjOiBzZXR1cAorCiAgICAgLlBIT05ZOiBib3JsYW5kYworICAgIGJvcmxhbmRjOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICAgIyBkZXZlbG9wbWVudCB0YXJnZXQKICAgICBDT05GSUdfRklMRSA6PSBvczItZGV2Lm1rCiAgICAgQ0MgICAgICAgICAgOj0gZ2NjCi0gICAgZGV2ZWw6IHNldHVwCisKICAgICAuUEhPTlk6IGRldmVsCisgICAgZGV2ZWw6IHNldHVwCisJICAgIEBjZCAuCiAgIGVuZGlmCiAKLSAgc2V0dXA6IGRvc19zZXR1cAorICBzZXR1cDogc3RkX3NldHVwCiAKIGVuZGlmICAgIyB0ZXN0IFBMQVRGT1JNIG9zMgogCmRpZmYgLS1naXQgYS9idWlsZHMvc3ltYmlhbi9mcmVldHlwZS5tbXAgYi9idWlsZHMvc3ltYmlhbi9mcmVldHlwZS5tbXAKaW5kZXggZDNiOTVlZi4uNGU0YTA0MSAxMDA2NDQKLS0tIGEvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wCisrKyBiL2J1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcApAQCAtMjgsMTMgKzI4LDExIEBACiBzb3VyY2UgZnRiZGYuYwogc291cmNlIGZ0Yml0bWFwLmMKIHNvdXJjZSBmdGNpZC5jCi1zb3VyY2UgZnRmbnRmbXQuYwogc291cmNlIGZ0ZnN0eXBlLmMKIHNvdXJjZSBmdGdhc3AuYwogc291cmNlIGZ0Z2x5cGguYwogc291cmNlIGZ0Z3h2YWwuYwogc291cmNlIGZ0aW5pdC5jCi1zb3VyY2UgZnRsY2RmaWwuYwogc291cmNlIGZ0bW0uYwogc291cmNlIGZ0b3R2YWwuYwogc291cmNlIGZ0cGF0ZW50LmMKZGlmZiAtLWdpdCBhL2J1aWxkcy90b3BsZXZlbC5tayBiL2J1aWxkcy90b3BsZXZlbC5tawppbmRleCBmNTFhZDE2Li43Y2UwZWQ4IDEwMDY0NAotLS0gYS9idWlsZHMvdG9wbGV2ZWwubWsKKysrIGIvYnVpbGRzL3RvcGxldmVsLm1rCkBAIC0xNzIsNyArMTcyLDggQEAKICMgZ2V0IEZyZWVUeXBlIHZlcnNpb24gc3RyaW5nLCB1c2luZyBhCiAjIHBvb3IgbWFuJ3MgYHNlZCcgZW11bGF0aW9uIHdpdGggbWFrZSdzIGJ1aWx0LWluIHN0cmluZyBmdW5jdGlvbnMKICMKLXdvcmsgOj0gJChzdHJpcCAkKHNoZWxsICQoQ0FUKSAkKFRPUF9ESVIpL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCkpCit3b3JrIDo9ICQoc3RyaXAgJChzaGVsbCAkKENBVCkgXAorICAgICAgICAgICAgICAgICAgJChzdWJzdCAvLCQoU0VQKSwkKFRPUF9ESVIpL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCkpKQogd29yayA6PSAkKHN1YnN0IHwseCwkKHdvcmspKQogd29yayA6PSAkKHN1YnN0ICQoc3BhY2UpLHwsJCh3b3JrKSkKIHdvcmsgOj0gJChzdWJzdCBcI2RlZmluZXxGUkVFVFlQRV9NQUpPUnwsJChzcGFjZSksJCh3b3JrKSkKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgYi9idWlsZHMvdW5peC9jb25maWd1cmUucmF3CmluZGV4IGQ3NmMzMjQuLmYxOGJiM2QgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcKKysrIGIvYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdwpAQCAtMTcsNyArMTcsNyBAQAogCiAjIERvbid0IGZvcmdldCB0byB1cGRhdGUgYGRvY3MvVkVSU0lPTlMuVFhUJyEKIAotdmVyc2lvbl9pbmZvPScyMjowOjE2JwordmVyc2lvbl9pbmZvPScyMjoxOjE2JwogQUNfU1VCU1QoW3ZlcnNpb25faW5mb10pCiBmdF92ZXJzaW9uPWBlY2hvICR2ZXJzaW9uX2luZm8gfCB0ciA6IC5gCiBBQ19TVUJTVChbZnRfdmVyc2lvbl0pCkBAIC0xNzcsNiArMTc3LDE1IEBACiAKIENQUEZMQUdTPSIke29yaWdfQ1BQRkxBR1N9IgogCitBQ19BUkdfRU5BQkxFKFtmcmVldHlwZS1jb25maWddLAorICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZnJlZXR5cGUtY29uZmlnXSwgW2luc3RhbGwgZnJlZXR5cGUtY29uZmlnXSksCisgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgeWVzKSBlbmFibGVfZnJlZXR5cGVfY29uZmlnPSJUUlVFIiA7OworICAgIG5vKSAgZW5hYmxlX2ZyZWV0eXBlX2NvbmZpZz0iRkFMU0UiIDs7CisgICAgKikgICBBQ19NU0dfRVJST1IoW3Vua25vd24gdmFsdWUgJyR7ZW5hYmxldmFsfScgcGFzc2VkIHdpdGggLS1lbmFibGUtZnJlZXR5cGUtY29uZmlnXSkgOzsKKyAgIGVzYWNdLCBbZW5hYmxlX2ZyZWV0eXBlX2NvbmZpZz0iRkFMU0UiXSkKKworQUNfU1VCU1QoSU5TVEFMTF9GVDJfQ09ORklHLCBbJGVuYWJsZV9mcmVldHlwZV9jb25maWddKQogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIApAQCAtMjk5LDYgKzMwOCwzMCBAQAogQUNfU1VCU1QoW1hYX0FOU0lGTEFHU10pCiAKIAorIyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHNoYXJlZCBsaWJyYXJpZXMgaGlkZSBzeW1ib2xzIGV4Y2VwdCB0aG9zZSB3aXRoCisjIGV4cGxpY2l0IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpLgorIworZm91bmRfdmlzaWJpbGl0eV9mbGFnPW5vCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtZnZpc2liaWxpdHk9aGlkZGVuIGNvbXBpbGVyIGZsYWddKQorb3JpZ19DRkxBR1M9IiR7Q0ZMQUdTfSIKK0NGTEFHUz0iJHtDRkxBR1N9IC1mdmlzaWJpbGl0eT1oaWRkZW4iCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICAgICAgICAgICBbZm91bmRfdmlzaWJpbGl0eV9mbGFnPXllcworICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgICAgICAgICAgICAgICBbQ0ZMQUdTPSIke29yaWdfQ0ZMQUdTfSIKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0pCisKK2lmIHRlc3QgIiR7Zm91bmRfdmlzaWJpbGl0eV9mbGFnfSIgPSAibm8iOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIC14bGRzY29wZT1oaWRkZW4gY29tcGlsZXIgZmxhZ10pCisgIG9yaWdfQ0ZMQUdTPSIke0NGTEFHU30iCisgIENGTEFHUz0iJHtDRkxBR1N9IC14bGRzY29wZT1oaWRkZW4iCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgICAgICAgICAgICAgW2ZvdW5kX3Zpc2liaWxpdHlfZmxhZz15ZXMKKyAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgICAgICAgICAgICAgICAgIFtDRkxBR1M9IiR7b3JpZ19DRkxBR1N9IgorICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubyldKQorZmkKKwogIyBBbGwgbGlicmFyeSB0ZXN0cyBiZWxvdyB0cnkgYHBrZy1jb25maWcnIGZpcnN0LiAgSWYgdGhhdCBmYWlscywgYSBmdW5jdGlvbgogIyBmcm9tIHRoZSBsaWJyYXJ5IGlzIHRlc3RlZCBpbiB0aGUgdHJhZGl0aW9uYWwgYXV0b2NvbmYgd2F5ICh6bGliLCBiemlwMiksCiAjIG9yIGEgY29uZmlnIHNjcmlwdCBpcyBjYWxsZWQgKGxpYnBuZykuCkBAIC00NzUsNyArNTA4LDcgQEAKIAogaGF2ZV9oYXJmYnV6ej1ubwogaWYgdGVzdCB4IiR3aXRoX2hhcmZidXp6IiA9IHh5ZXMgLW8geCIkd2l0aF9oYXJmYnV6eiIgPSB4YXV0bzsgdGhlbgotICBoYXJmYnV6el9wa2c9ImhhcmZidXp6ID49IDAuOS4yMSIKKyAgaGFyZmJ1enpfcGtnPSJoYXJmYnV6eiA+PSAxLjMuMCIKICAgaGF2ZV9oYXJmYnV6el9wa2c9bm8KIAogICBpZiB0ZXN0IHgiJEhBUkZCVVpaX0NGTEFHUyIgPSB4IC1hIHgiJEhBUkZCVVpaX0xJQlMiID0geDsgdGhlbgpkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rIGIvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rCmluZGV4IDU0ZGFhMDcuLjVmOWI5ZTIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2RldGVjdC5taworKysgYi9idWlsZHMvdW5peC9kZXRlY3QubWsKQEAgLTQwLDggKzQwLDEwIEBACiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwsJChNQUtFQ01ER09BTFMpKSwpCiAgICAgQ09ORklHX0ZJTEUgOj0gdW5peC1kZXYubWsKICAgICBDQyAgICAgICAgICA6PSBnY2MKLSAgICBkZXZlbDogc2V0dXAKKwogICAgIC5QSE9OWTogZGV2ZWwKKyAgICBkZXZlbDogc2V0dXAKKwkgICAgQDoKICAgZWxzZQogCiAgICAgIyBJZiBgbGNjJyBpcyB0aGUgcmVxdWVzdGVkIHRhcmdldCwgd2UgdXNlIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uCkBAIC01MCw4ICs1MiwxMCBAQAogICAgIGlmbmVxICgkKGZpbmRzdHJpbmcgbGNjLCQoTUFLRUNNREdPQUxTKSksKQogICAgICAgQ09ORklHX0ZJTEUgOj0gdW5peC1sY2MubWsKICAgICAgIENDICAgICAgICAgIDo9IGxjYwotICAgICAgbGNjOiBzZXR1cAorCiAgICAgICAuUEhPTlk6IGxjYworICAgICAgbGNjOiBzZXR1cAorCSAgICAgIEA6CiAgICAgZWxzZQogCiAgICAgICAjIElmIGEgVW5peCBwbGF0Zm9ybSBpcyBkZXRlY3RlZCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgY2FsbGVkIGFuZApAQCAtNjgsOSArNzIsMTEgQEAKICAgICAgICMgcGxhdGZvcm0pLgogICAgICAgIwogICAgICAgQ09ORklHX0ZJTEUgOj0gdW5peC5tawotICAgICAgdW5peDogc2V0dXAKICAgICAgIG11c3RfY29uZmlndXJlIDo9IDEKKwogICAgICAgLlBIT05ZOiB1bml4CisgICAgICB1bml4OiBzZXR1cAorCSAgICAgIEA6CiAgICAgZW5kaWYKICAgZW5kaWYKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4gYi9idWlsZHMvdW5peC9mdGNvbmZpZy5pbgppbmRleCBjYTkwNTg4Li5jZGI3ZjIyIDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC9mdGNvbmZpZy5pbgorKysgYi9idWlsZHMvdW5peC9mdGNvbmZpZy5pbgpAQCAtNDU0LDkgKzQ1NCw5IEBACiAjZW5kaWYgLyogIUZUX0JBU0VfREVGICovCiAKIAotICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMLCBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSAgICAgKi8KLSAgLyogICBzcGVjaWFsIGF0dHJpYnV0ZSBpbiBmcm9udCBPUiBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgZnVuY3Rpb24gICAgICovCi0gIC8qICAgZGVjbGFyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMIG9yIERTTyB3aXRoIGhpZGRlbiB2aXNpYmlsaXR5ICAgICAgKi8KKyAgLyogICBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSBzcGVjaWFsIGF0dHJpYnV0ZSBpbiBmcm9udCBPUiBhZnRlciAgICovCisgIC8qICAgdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBUd28gbWFjcm9zIGFyZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUgdG8gZGVmaW5lICAgICAgICovCiAgIC8qICAgZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IEZUX0VYUE9SVCBhbmQgRlRfRVhQT1JUX0RFRi4gICAgICAgICAgICAqLwpAQCAtNDg3LDIxICs0ODcsMzAgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWZuZGVmIEZUX0VYUE9SVAogCi0jaWZkZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQorCisjaWYgZGVmaW5lZCggX1dJTjMyICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAorI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0CisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImRlZmF1bHQiICkgKSkgIHgKKyNlbGlmIGRlZmluZWQoIF9fU1VOUFJPX0MgKSAmJiBfX1NVTlBST19DID49IDB4NTUwCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2dsb2JhbCAgeAorI2VsaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQogI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICJDIiAgeAogI2Vsc2UKICNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAogI2VuZGlmCiAKLSNpZmRlZiBfV0lOMzIKLSNpZiBkZWZpbmVkKCBGVDJfQlVJTERfTElCUkFSWSApICYmIFwKLSAgICAoIGRlZmluZWQoIF9ETEwgKSB8fCBkZWZpbmVkKCBETExfRVhQT1JUICkgKQotI3VuZGVmIEZUX0VYUE9SVAotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsZXhwb3J0ICkgIHgKLSNlbGlmIGRlZmluZWQoIEZUMl9ETExJTVBPUlQgKQotI3VuZGVmIEZUX0VYUE9SVAorI2Vsc2UKKworI2lmIGRlZmluZWQoIF9XSU4zMiApICYmIGRlZmluZWQoIERMTF9JTVBPUlQgKQogI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsaW1wb3J0ICkgIHgKKyNlbGlmIGRlZmluZWQoIF9fY3BsdXNwbHVzICkKKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIHgKICNlbmRpZgorCiAjZW5kaWYKIAogI2VuZGlmIC8qICFGVF9FWFBPUlQgKi8KZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2luc3RhbGwubWsgYi9idWlsZHMvdW5peC9pbnN0YWxsLm1rCmluZGV4IGQ4OTA2NGUuLmMwOGMzYjcgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2luc3RhbGwubWsKKysrIGIvYnVpbGRzL3VuaXgvaW5zdGFsbC5tawpAQCAtMzksOSArMzksMTEgQEAKIAkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGJpbmRpcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGRhdGFkaXIpL2FjbG9jYWwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICQoREVTVERJUikkKGRhdGFkaXIpL2FjbG9jYWwKK2lmZXEgKCQoSU5TVEFMTF9GVDJfQ09ORklHKSxUUlVFKQorCSQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQoYmluZGlyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xCitlbmRpZgogCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUFJPSkVDVF9MSUJSQVJZKSAkKERFU1RESVIpJChsaWJkaXIpCiAJLWZvciBQIGluICQoUFVCTElDX0gpIDsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01Miw3ICs1NCw3IEBACiAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICQkUCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mcmVldHlwZTIvZnJlZXR5cGUvY29uZmlnIDsgXAogICAgICAgICBkb25lCi0JJChJTlNUQUxMX0RBVEEpICQoVE9QX0RJUikvaW5jbHVkZS9mdDJidWlsZC5oICBcCisJJChJTlNUQUxMX0RBVEEpICQoVE9QX0RJUikvaW5jbHVkZS9mdDJidWlsZC5oICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mdDJidWlsZC5oCiAJJChJTlNUQUxMX0RBVEEpICQoT0JKX0JVSUxEKS9mdGNvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApAQCAtNjAsMTQgKzYyLDE2IEBACiAgICAgICAgICAgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCiAJJChJTlNUQUxMX0RBVEEpICQoT0JKX0JVSUxEKS9mdG9wdGlvbi5oICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAotCSQoSU5TVEFMTF9TQ1JJUFQpIC1tIDc1NSAkKE9CSl9CVUlMRCkvZnJlZXR5cGUtY29uZmlnIFwKLSAgICAgICAgICAkKERFU1RESVIpJChiaW5kaXIpL2ZyZWV0eXBlLWNvbmZpZwotCSQoSU5TVEFMTF9TQ1JJUFQpIC1tIDY0NCAkKEJVSUxEX0RJUikvZnJlZXR5cGUyLm00IFwKKwkkKElOU1RBTExfU0NSSVBUKSAtbSA2NDQgJChCVUlMRF9ESVIpL2ZyZWV0eXBlMi5tNCAgICAgICAgICAgICBcCiAgICAgICAgICAgJChERVNURElSKSQoZGF0YWRpcikvYWNsb2NhbC9mcmVldHlwZTIubTQKLQkkKElOU1RBTExfU0NSSVBUKSAtbSA2NDQgJChPQkpfQlVJTEQpL2ZyZWV0eXBlMi5wYyBcCisJJChJTlNUQUxMX1NDUklQVCkgLW0gNjQ0ICQoT0JKX0JVSUxEKS9mcmVldHlwZTIucGMgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL2ZyZWV0eXBlMi5wYwotCSQoSU5TVEFMTF9EQVRBKSAkKFRPUF9ESVIpL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEgXAoraWZlcSAoJChJTlNUQUxMX0ZUMl9DT05GSUcpLFRSVUUpCisJJChJTlNUQUxMX1NDUklQVCkgLW0gNzU1ICQoT0JKX0JVSUxEKS9mcmVldHlwZS1jb25maWcgICAgICAgICAgXAorICAgICAgICAgICQoREVTVERJUikkKGJpbmRpcikvZnJlZXR5cGUtY29uZmlnCisJJChJTlNUQUxMX0RBVEEpICQoVE9QX0RJUikvZG9jcy9mcmVldHlwZS1jb25maWcuMSAgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9mcmVldHlwZS1jb25maWcuMQorZW5kaWYKIAogCiB1bmluc3RhbGw6CkBAIC04MCw3ICs4NCw3IEBACiAKIAogY2hlY2s6Ci0JQGVjaG8gVGhlcmUgaXMgbm8gdmFsaWRhdGlvbiBzdWl0ZSBmb3IgdGhpcyBwYWNrYWdlLgorCSQoaW5mbyBUaGVyZSBpcyBubyB2YWxpZGF0aW9uIHN1aXRlIGZvciB0aGlzIHBhY2thZ2UuKQogCiAKIC5QSE9OWTogY2xlYW5fcHJvamVjdF91bml4IGRpc3RjbGVhbl9wcm9qZWN0X3VuaXgKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L3VuaXgtZGVmLmluIGIvYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4KaW5kZXggMDU5YTA2MS4uNjk1NzA1MyAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4KKysrIGIvYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4KQEAgLTE0NSw2ICsxNDUsOSBAQAogCWNobW9kIGEtdyAkQC50bXAKIAltdiAkQC50bXAgJEAKIAorIyBkZWZpbmVzIHdoZXRoZXIgd2Ugc2hvdWxkIGluc3RhbGwgYGZyZWV0eXBlLWNvbmZpZycgb3Igbm90CitJTlNUQUxMX0ZUMl9DT05GSUcgPSBASU5TVEFMTF9GVDJfQ09ORklHQAorCiBhbGwgaW5zdGFsbDogJChPQkpfQlVJTEQpL2ZyZWV0eXBlLWNvbmZpZyBcCiAgICAgICQoT0JKX0JVSUxEKS9mcmVldHlwZTIucGMKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIGIvYnVpbGRzL3Ztcy9mdGNvbmZpZy5oCmluZGV4IGQ4N2VhNjkuLjczM2IwOWIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy92bXMvZnRjb25maWcuaAorKysgYi9idWlsZHMvdm1zL2Z0Y29uZmlnLmgKQEAgLTQwNiw5ICs0MDYsOSBAQAogI2VuZGlmIC8qICFGVF9CQVNFX0RFRiAqLwogCiAKLSAgLyogICBXaGVuIGNvbXBpbGluZyBGcmVlVHlwZSBhcyBhIERMTCwgc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgICAgICovCi0gIC8qICAgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uICAgICAqLwotICAvKiAgIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBXaGVuIGNvbXBpbGluZyBGcmVlVHlwZSBhcyBhIERMTCBvciBEU08gd2l0aCBoaWRkZW4gdmlzaWJpbGl0eSAgICAgICovCisgIC8qICAgc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgICAqLworICAvKiAgIHRoZSByZXR1cm4gdHlwZSBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgICAqLwogICAvKiAgIGV4cG9ydGVkIGxpYnJhcnkgZnVuY3Rpb25zOiBGVF9FWFBPUlQgYW5kIEZUX0VYUE9SVF9ERUYuICAgICAgICAgICAgKi8KQEAgLTQzOSwyMSArNDM5LDMwIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmbmRlZiBGVF9FWFBPUlQKIAotI2lmZGVmIF9fY3BsdXNwbHVzCisjaWZkZWYgRlQyX0JVSUxEX0xJQlJBUlkKKworI2lmIGRlZmluZWQoIF9XSU4zMiApICYmIGRlZmluZWQoIERMTF9FWFBPUlQgKQorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsZXhwb3J0ICkgIHgKKyNlbGlmIGRlZmluZWQoIF9fR05VQ19fICkgJiYgX19HTlVDX18gPj0gNAorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19hdHRyaWJ1dGVfXygoIHZpc2liaWxpdHkoICJkZWZhdWx0IiApICkpICB4CisjZWxpZiBkZWZpbmVkKCBfX1NVTlBST19DICkgJiYgX19TVU5QUk9fQyA+PSAweDU1MAorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19nbG9iYWwgIHgKKyNlbGlmIGRlZmluZWQoIF9fY3BsdXNwbHVzICkKICNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAiQyIgIHgKICNlbHNlCiAjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIHgKICNlbmRpZgogCi0jaWZkZWYgX1dJTjMyCi0jaWYgZGVmaW5lZCggRlQyX0JVSUxEX0xJQlJBUlkgKSAmJiBcCi0gICAgKCBkZWZpbmVkKCBfRExMICkgfHwgZGVmaW5lZCggRExMX0VYUE9SVCApICkKLSN1bmRlZiBGVF9FWFBPUlQKLSNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGV4cG9ydCApICB4Ci0jZWxpZiBkZWZpbmVkKCBGVDJfRExMSU1QT1JUICkKLSN1bmRlZiBGVF9FWFBPUlQKKyNlbHNlCisKKyNpZiBkZWZpbmVkKCBfV0lOMzIgKSAmJiBkZWZpbmVkKCBETExfSU1QT1JUICkKICNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGltcG9ydCApICB4CisjZWxpZiBkZWZpbmVkKCBfX2NwbHVzcGx1cyApCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIkMiICB4CisjZWxzZQorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4CiAjZW5kaWYKKwogI2VuZGlmCiAKICNlbmRpZiAvKiAhRlRfRVhQT1JUICovCmRpZmYgLS1naXQgYS9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qCmluZGV4IDIxNTAyOGEuLjFjYTQ1YTggMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qCisrKyBiL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5LmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTEubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0xODEsNyArMTgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzIxLDcgKzMyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNULmxpYiIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTQwMSw3ICs0MDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00MjEsNyArNDIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTQ2MSw3ICs0NjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00ODEsNyArNDgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTAxLDcgKzUwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC01MjEsNyArNTIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTU0MSw3ICs1NDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTYxLDcgKzU2MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC01ODEsNyArNTgxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTYwMSw3ICs2MDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNjIxLDcgKzYyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02NDEsNyArNjQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTY2MSw3ICs2NjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNjgxLDcgKzY4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC03MDEsNyArNzAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5MU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTcyMSw3ICs3MjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTc1OCw3ICs3NTgsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNzczLDU4NSArNzczLDE4IEBACiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyI+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmFzZS5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlxmdGRlYnVnLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCiAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyI+DQpAQCAtMTM1OSw3NzQgKzc5MiwxOCBAQAogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYyI+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xsendcZnRsencuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWx0ZXIgTmFtZT0iRlRfTU9EVUxFUyI+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmJveC5jIj4NCkBAIC0yMTM1LDEzOSArODEyLDkgQEAKICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jIj4NCiAgICAgICAgIDwvRmlsZT4NCi0gICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyI+DQotICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYyI+DQogICAgICAgICA8L0ZpbGU+DQotICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiPg0KLSAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIj4NCiAgICAgICAgIDwvRmlsZT4NCkBAIC0yMjgyLDE1NDAgKzgyOSwyOCBAQAogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMiPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwZnJccGZyLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzYXV4XHBzYXV4LmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzbmFtZXNccHNtb2R1bGUuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccmFzdGVyXHJhc3Rlci5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICA8L0ZpbHRlcj4NCiAgICAgPC9GaWx0ZXI+DQpAQCAtMzgzNiw0ICs4NzEsNCBAQAogICA8L0ZpbGVzPg0KICAgPEdsb2JhbHM+DQogICA8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwgYi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwKaW5kZXggMjY3MjQxNS4uMDJhMWNhZiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbApAQCAtMjEsMTQgKzIxLDE0IEBACiAgIDxsaT5QUEMvU1AgV002IChXaW5kb3dzIE1vYmlsZSA2KTwvbGk+CiA8L3VsPgogCi1JdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkgc291cmNlczo8L3A+CitJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkuMSBzb3VyY2VzOjwvcD4KIAogPHVsPgogICA8cHJlPgotICAgIGZyZWV0eXBlMjkubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjlfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjlNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCi0gICAgZnJlZXR5cGUyOU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgICBmcmVldHlwZTI5MS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgogPC91bD4KIAogPHA+QmUgc3VyZSB0byBleHRyYWN0IHRoZSBmaWxlcyB3aXRoIHRoZSBXaW5kb3dzIChDUitMRikgbGluZSBlbmRpbmdzLiAgWklQCmRpZmYgLS1naXQgYS9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qCmluZGV4IDliZTg1ODguLjdhNTQ0NWUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qCisrKyBiL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qCkBAIC04OCw3ICs4OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5LmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTEubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2Niw3ICsyNjYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5LmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTEubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTUzMyw3ICs1MzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNjIxLDcgKzYyMSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNzA5LDcgKzcwOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtODg1LDcgKzg4NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtOTczLDcgKzk3Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5TVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5U1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVC5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xNDEwLDcgKzE0MTAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxU1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTQ5Nyw3ICsxNDk3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5U1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE1ODQsNyArMTU4NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVC5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xNjY4LDcgKzE2NjgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE3NTMsNyArMTc1Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTgzOCw3ICsxODM4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xOTIzLDcgKzE5MjMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIwMDgsNyArMjAwOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjA5Myw3ICsyMDkzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMTc4LDcgKzIxNzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjYzLDcgKzIyNjMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMzQ4LDcgKzIzNDgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNDMzLDcgKzI0MzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNTE4LDcgKzI1MTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNjg5LDcgKzI2ODksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNzc1LDcgKzI3NzUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yODYxLDcgKzI4NjEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yOTQ3LDcgKzI5NDcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMDMzLDcgKzMwMzMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMTE5LDcgKzMxMTksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOTFNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMjA1LDcgKzMyMDUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkxTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMyNzksNyArMzI3OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5MU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMzMTMsMTExNSArMzMxMywxNCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmRmXGJkZi5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiDQpAQCAtNDQzMCw4NTQgKzMzMjksMTMgQEAKIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZnRkZWJ1Zy5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8VG9vbA0KIAkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCiAJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCiAJCQkJCS8+DQogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQpAQCAtNTI5MywxNzEwICszMzUxLDE4IEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzdHJva2UuYyINCkBAIC03MDA1LDg1NiArMzM3MSwxMCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iRlRfTU9EVUxFUyINCkBAIC03ODcyLDQ0MyArMzM5MiwxMiBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYyINCkBAIC04MzM3LDUxMjYgKzM0MjYsNTAgQEAKIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlMVx0eXBlMS5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x3aW5mb250c1x3aW5mbnQuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQk8L0ZpbHRlcj4NCiAJCTwvRmlsdGVyPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbAppbmRleCAxOGYyYTQ4Li5mN2EzNTgzIDEwMDY0NAotLS0gYS9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgPGxpPlBQQy9TUCBXTTYgKFdpbmRvd3MgTW9iaWxlIDYpPC9saT4KIDwvdWw+CiAKLUl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuOSBzb3VyY2VzOjwvcD4KK0l0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuOS4xIHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxwcmU+Ci0gICAgZnJlZXR5cGUyOS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyOV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyOU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5TVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlMjkxLmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CiA8L3VsPgogCiA8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL2RldGVjdC5tayBiL2J1aWxkcy93aW5kb3dzL2RldGVjdC5tawppbmRleCBiMDQ3ZTAyLi4wNWIwZTZhIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy9kZXRlY3QubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvZGV0ZWN0Lm1rCkBAIC05NSwyMiArOTUsMjIgQEAKIAogICBpZm5lcSAoJChmaW5kc3RyaW5nIGxpc3QsJChNQUtFQ01ER09BTFMpKSwpICAjIHRlc3QgZm9yIHRoZSAibGlzdCIgdGFyZ2V0CiAgICAgZHVtcF90YXJnZXRfbGlzdDoKLQkgICAgQGVjaG8g/wotCSAgICBAZWNobyAkKFBST0pFQ1RfVElUTEUpIGJ1aWxkIHN5c3RlbSAtLSBzdXBwb3J0ZWQgY29tcGlsZXJzCi0JICAgIEBlY2hvIP8KLQkgICAgQGVjaG8gU2V2ZXJhbCBjb21tYW5kLWxpbmUgY29tcGlsZXJzIGFyZSBzdXBwb3J0ZWQgb24gV2luMzI6Ci0JICAgIEBlY2hvIP8KLQkgICAgQGVjaG8g//9tYWtlIHNldHVw////////////////////////////Z2NjICh3aXRoIE1pbmd3KQotCSAgICBAZWNobyD//21ha2Ugc2V0dXAgdmlzdWFsY/////////////////9NaWNyb3NvZnQgVmlzdWFsIEMrKwotCSAgICBAZWNobyD//21ha2Ugc2V0dXAgYmNjMzL///////////////////9Cb3JsYW5kIEMvQysrCi0JICAgIEBlY2hvIP//bWFrZSBzZXR1cCBsY2P//////////////////////1dpbjMyLUxDQwotCSAgICBAZWNobyD//21ha2Ugc2V0dXAgaW50ZWxj//////////////////9JbnRlbCBDL0MrKwotCSAgICBAZWNobyD/CisJICAgICQoaW5mbyApCisJICAgICQoaW5mbyAkKFBST0pFQ1RfVElUTEUpIGJ1aWxkIHN5c3RlbSAtLSBzdXBwb3J0ZWQgY29tcGlsZXJzKQorCSAgICAkKGluZm8gKQorCSAgICAkKGluZm8gU2V2ZXJhbCBjb21tYW5kLWxpbmUgY29tcGlsZXJzIGFyZSBzdXBwb3J0ZWQgb24gV2luMzI6KQorCSAgICAkKGluZm8gKQorCSAgICAkKGluZm8gJChlbXB0eSkgIG1ha2Ugc2V0dXAgICAgICAgICAgICAgICAgICAgICBnY2MgKHdpdGggTWluZ3cpKQorCSAgICAkKGluZm8gJChlbXB0eSkgIG1ha2Ugc2V0dXAgdmlzdWFsYyAgICAgICAgICAgICBNaWNyb3NvZnQgVmlzdWFsIEMrKykKKwkgICAgJChpbmZvICQoZW1wdHkpICBtYWtlIHNldHVwIGJjYzMyICAgICAgICAgICAgICAgQm9ybGFuZCBDL0MrKykKKwkgICAgJChpbmZvICQoZW1wdHkpICBtYWtlIHNldHVwIGxjYyAgICAgICAgICAgICAgICAgV2luMzItTENDKQorCSAgICAkKGluZm8gJChlbXB0eSkgIG1ha2Ugc2V0dXAgaW50ZWxjICAgICAgICAgICAgICBJbnRlbCBDL0MrKykKKwkgICAgJChpbmZvICkKIAogICAgIHNldHVwOiBkdW1wX3RhcmdldF9saXN0CiAgICAgLlBIT05ZOiBkdW1wX3RhcmdldF9saXN0IGxpc3QKICAgZWxzZQotICAgIHNldHVwOiBkb3Nfc2V0dXAKKyAgICBzZXR1cDogc3RkX3NldHVwCiAgIGVuZGlmCiAKICAgIyBhZGRpdGlvbmFsbHksIHdlIHByb3ZpZGUgaG9va3MgZm9yIHZhcmlvdXMgb3RoZXIgY29tcGlsZXJzCkBAIC0xMTgsNjQgKzExOCw4MiBAQAogICBpZm5lcSAoJChmaW5kc3RyaW5nIHZpc3VhbGMsJChNQUtFQ01ER09BTFMpKSwpICAgICAjIFZpc3VhbCBDL0MrKwogICAgIENPTkZJR19GSUxFIDo9IHczMi12Y2MubWsKICAgICBDQyAgICAgICAgICA6PSBjbAotICAgIHZpc3VhbGM6IHNldHVwCisKICAgICAuUEhPTlk6IHZpc3VhbGMKKyAgICB2aXN1YWxjOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgaW50ZWxjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICMgSW50ZWwgQy9DKysKICAgICBDT05GSUdfRklMRSA6PSB3MzItaW50bC5tawogICAgIENDICAgICAgICAgIDo9IGNsCi0gICAgdmlzdWFsYzogc2V0dXAKKwogICAgIC5QSE9OWTogaW50ZWxjCisgICAgdmlzdWFsYzogc2V0dXAKKwkgICAgQGNkIC4KICAgZW5kaWYKIAogICBpZm5lcSAoJChmaW5kc3RyaW5nIHdhdGNvbSwkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIFdhdGNvbSBDL0MrKwogICAgIENPTkZJR19GSUxFIDo9IHczMi13YXQubWsKICAgICBDQyAgICAgICAgICA6PSB3Y2MzODYKLSAgICB3YXRjb206IHNldHVwCisKICAgICAuUEhPTlk6IHdhdGNvbQorICAgIHdhdGNvbTogc2V0dXAKKwkgICAgQGNkIC4KICAgZW5kaWYKIAogICBpZm5lcSAoJChmaW5kc3RyaW5nIHZpc3VhbGFnZSwkKE1BS0VDTURHT0FMUykpLCkgICAjIFZpc3VhbCBBZ2UgQysrCiAgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWljYy5tawogICAgIENDICAgICAgICAgIDo9IGljYwotICAgIHZpc3VhbGFnZTogc2V0dXAKKwogICAgIC5QSE9OWTogdmlzdWFsYWdlCisgICAgdmlzdWFsYWdlOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgbGNjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgICMgTENDLVdpbjMyCiAgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWxjYy5tawogICAgIENDICAgICAgICAgIDo9IGxjYwotICAgIGxjYzogc2V0dXAKKwogICAgIC5QSE9OWTogbGNjCisgICAgbGNjOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgbWluZ3czMiwkKE1BS0VDTURHT0FMUykpLCkgICAgICMgbWluZ3czMgogICAgIENPTkZJR19GSUxFIDo9IHczMi1taW5ndzMyLm1rCiAgICAgQ0MgICAgICAgICAgOj0gZ2NjCi0gICAgbWluZ3czMjogc2V0dXAKKwogICAgIC5QSE9OWTogbWluZ3czMgorICAgIG1pbmd3MzI6IHNldHVwCisJICAgIEBjZCAuCiAgIGVuZGlmCiAKICAgaWZuZXEgKCQoZmluZHN0cmluZyBiY2MzMiwkKE1BS0VDTURHT0FMUykpLCkgICAgICAgIyBCb3JsYW5kIEMrKwogICAgIENPTkZJR19GSUxFIDo9IHczMi1iY2MubWsKICAgICBDQyAgICAgICAgICA6PSBiY2MzMgotICAgIGJjYzMyOiBzZXR1cAorCiAgICAgLlBIT05ZOiBiY2MzMgorICAgIGJjYzMyOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtYmNjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CiAgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWJjY2QubWsKICAgICBDQyAgICAgICAgICA6PSBiY2MzMgotICAgIGRldmVsLWJjYzogc2V0dXAKKwogICAgIC5QSE9OWTogZGV2ZWwtYmNjCisgICAgZGV2ZWwtYmNjOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiAgIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtZ2NjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CiAgICAgQ09ORklHX0ZJTEUgOj0gdzMyLWRldi5tawogICAgIENDICAgICAgICAgIDo9IGdjYwotICAgIGRldmVsLWdjYzogc2V0dXAKKwogICAgIC5QSE9OWTogZGV2ZWwtZ2NjCisgICAgZGV2ZWwtZ2NjOiBzZXR1cAorCSAgICBAY2QgLgogICBlbmRpZgogCiBlbmRpZiAgICMgdGVzdCBQTEFURk9STSB3aW5kb3dzCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvagppbmRleCAzODZkNzlkLi5iMWUyYWU2IDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qCisrKyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2oKQEAgLTE2LDcgKzE2LDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDVcZnJlZXR5cGUyOS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDVcZnJlZXR5cGUyOVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkxU1QubGliIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDVcZnJlZXR5cGUyOVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI5MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTE2LDEwNSArMTE2LDE4IEBACiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xhdXRvZml0XGF1dG9maXQuYyI+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjYWNoZVxmdGNhY2hlLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlxmdGRlYnVnLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIiAvPg0KKyAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSIgLz4NCiAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyI+DQpAQCAtMjIyLDEyNiArMTM1LDE4IEBACiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2FzcC5jIj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzdHJva2UuYyI+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeXN0ZW0uYyI+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgIDwvRmlsZT4NCiAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICA8L0ZpbGU+DQogICAgICAgPEZpbHRlciBOYW1lPSJGVF9NT0RVTEVTIj4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiZGYuYyI+DQpAQCAtMzUwLDI3ICsxNTUsNyBAQAogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Y2lkLmMiPg0KICAgICAgICAgPC9GaWxlPg0KLSAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIj4NCi0gICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiPg0KICAgICAgICAgPC9GaWxlPg0KQEAgLTM4MCw4ICsxNjUsNiBAQAogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMiPg0KICAgICAgICAgPC9GaWxlPg0KLSAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGxjZGZpbC5jIj4NCi0gICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIj4NCkBAIC0zODksMjQ0ICsxNzIsMjggQEAKICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jIj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyI+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KICAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIyIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1Z3xXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjAiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICAgICAgICA8VG9vbCBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIiBPcHRpbWl6YXRpb249IjIiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiAvPg0KLSAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24gTmFtZT0iRGVidWd8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbiBOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgICAgICAgPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiIEJhc2ljUnVudGltZUNoZWNrcz0iMyIgLz4NCi0gICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uIE5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiPg0KLSAgICAgICAgICAgIDxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMCIgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIiBCYXNpY1J1bnRpbWVDaGVja3M9IjMiIC8+DQotICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgICA8L0ZpbGU+DQogICAgICAgPC9GaWx0ZXI+DQogICAgIDwvRmlsdGVyPg0KQEAgLTY0Nyw0ICsyMTQsNCBAQAogICA8L0ZpbGVzPg0KICAgPEdsb2JhbHM+DQogICA8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCmluZGV4IGEyNWU2NzQuLmM1ZTE4MmUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCkBAIC0xMSwxNCArMTEsMTQgQEAKIAogPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdCBmaWxlcyBmb3IgVmlzdWFsIEMrKywgbmFtZWQKIDx0dD5mcmVldHlwZS52Y3Byb2o8L3R0PiwgYW5kIFZpc3VhbCBTdHVkaW8sIGNhbGxlZCA8dHQ+ZnJlZXR5cGUuc2xuPC90dD4uICBJdAotY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45IHNvdXJjZXM6PC9wPgorY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45LjEgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTI5LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjlNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CisgICAgZnJlZXR5cGUyOTEubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2oKaW5kZXggZjJkMWZlNy4uZjUyNmNkMiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvagorKysgYi9idWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qCkBAIC03MCw3ICs3MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyOS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5TVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5U1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjlfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTM2NSw3ICszNjUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5TVRfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDczLDIwMyArNDczLDE0IEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIg0KQEAgLTY3OCwxMzkgKzQ4OSwxMyBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZ0ZGVidWcuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTxUb29sDQogCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQogCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQogCQkJCQkvPg0KIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KQEAgLTgyNiwyNzAgKzUxMSwxOCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRpbml0LmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiDQpAQCAtMTA5OCwxMzYgKzUzMSwxMCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iRlRfTU9EVUxFUyINCkBAIC0xMjQ1LDc1ICs1NTIsOCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiDQpAQCAtMTMzMiwxMCArNTcyLDYgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTM1MCw4MDYgKzU4Niw1MCBAQAogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwY2ZccGNmLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwZnJccGZyLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNoaW50ZXJccHNoaW50ZXIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzbmFtZXNccHNtb2R1bGUuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNmbnRcc2ZudC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjaWRcdHlwZTFjaWQuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwgYi9idWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbAppbmRleCBlMGZkZjJkLi4yNWM2ZjliIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbApAQCAtMTEsMTQgKzExLDE0IEBACiAKIDxwPlRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHByb2plY3QgZmlsZXMgZm9yIFZpc3VhbCBDKyssIG5hbWVkCiA8dHQ+ZnJlZXR5cGUudmNwcm9qPC90dD4sIGFuZCBWaXN1YWwgU3R1ZGlvLCBjYWxsZWQgPHR0PmZyZWV0eXBlLnNsbjwvdHQ+LiAgSXQKLWNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuOSBzb3VyY2VzOjwvcD4KK2NvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuOS4xIHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxwcmU+Ci0gICAgZnJlZXR5cGUyOS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyOV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyOU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5TVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlMjkxLmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CiA8L3VsPgogCiA8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKaW5kZXggZWFkZGNmZC4uNzA1MmM2YyAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKQEAgLTM0LDM1ICszNCwzNSBAQAogICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQogICA8L0l0ZW1Hcm91cD4NCi0gICAgPCEtLQ0KKyAgPCEtLQ0KICAgICBTd2l0Y2ggdGhlIFBsYXRmb3JtVG9vbHNldCBiYXNlZCBvbiB0aGUgVmlzdWFsIFN0dWRpbyBWZXJzaW9uDQogLS0+DQotPFByb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cD4NCiAgICAgPCEtLSBBc3N1bWUgVmlzdWFsIFN0dWRpbyAyMDEwIC8gNC4wIGFzIHRoZSBkZWZhdWx0IC0tPg0KICAgICA8VmlzdWFsU3R1ZGlvVmVyc2lvbiBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnJyI+NC4wPC9WaXN1YWxTdHVkaW9WZXJzaW9uPg0KLTwvUHJvcGVydHlHcm91cD4NCi08IS0tIFZpc3VhbCBTdHVkaW8gMjAxMCAoNC4wKSAtLT4NCi08UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnNC4wJyI+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8IS0tIFZpc3VhbCBTdHVkaW8gMjAxMCAoNC4wKSAtLT4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoVmlzdWFsU3R1ZGlvVmVyc2lvbiknID09ICc0LjAnIj4NCiAgICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotPC9Qcm9wZXJ0eUdyb3VwPg0KLTwhLS0gVmlzdWFsIFN0dWRpbyAyMDEzICgxMi4wKSAtLT4NCi08UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnMTIuMCciPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPCEtLSBWaXN1YWwgU3R1ZGlvIDIwMTMgKDEyLjApIC0tPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChWaXN1YWxTdHVkaW9WZXJzaW9uKScgPT0gJzEyLjAnIj4NCiAgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotPC9Qcm9wZXJ0eUdyb3VwPg0KLTwhLS0gVmlzdWFsIFN0dWRpbyAyMDE1ICgxNC4wKSAtLT4NCi08UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnMTQuMCciPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPCEtLSBWaXN1YWwgU3R1ZGlvIDIwMTUgKDE0LjApIC0tPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChWaXN1YWxTdHVkaW9WZXJzaW9uKScgPT0gJzE0LjAnIj4NCiAgICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotPC9Qcm9wZXJ0eUdyb3VwPg0KLTwhLS0gVmlzdWFsIFN0dWRpbyAyMDE3ICgxNS4wKSAtLT4NCi08UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnMTUuMCciPg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPCEtLSBWaXN1YWwgU3R1ZGlvIDIwMTcgKDE1LjApIC0tPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChWaXN1YWxTdHVkaW9WZXJzaW9uKScgPT0gJzE1LjAnIj4NCiAgICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRvb2xzZXQ+DQotPC9Qcm9wZXJ0eUdyb3VwPg0KLTwhLS0NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDwhLS0NCiAgICAgRW5kIG9mOiBTd2l0Y2ggdGhlIFBsYXRmb3JtVG9vbHNldCBiYXNlZCBvbiB0aGUgVmlzdWFsIFN0dWRpbyBWZXJzaW9uDQogLS0+DQogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+DQotICAgICA8UHJvamVjdEd1aWQ+ezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn08L1Byb2plY3RHdWlkPg0KLSAgICAgPFJvb3ROYW1lc3BhY2U+RnJlZVR5cGU8L1Jvb3ROYW1lc3BhY2U+DQorICAgIDxQcm9qZWN0R3VpZD57NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfTwvUHJvamVjdEd1aWQ+DQorICAgIDxSb290TmFtZXNwYWNlPkZyZWVUeXBlPC9Sb290TmFtZXNwYWNlPg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgPENsQ29tcGlsZT4NCiAgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtETExfRVhQT1JUOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCiAgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCiAgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztfRExMOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgPENsQ29tcGlsZT4NCiAgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTtETExfRVhQT1JUOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCiAgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCiAgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztfRExMOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtMjM0LDcgKzIzNCw3IEBACiAgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQogICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztfRExMOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQogICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztfRExMOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO0RMTF9FWFBPUlQ7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtMzk4LDEzICszOTgsMTEgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmRmLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiaXRtYXAuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0b3R2YWwuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jIiAvPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLmZpbHRlcnMgYi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvai5maWx0ZXJzCmluZGV4IDBiZTE3NmIuLjM0NWUxZjEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ouZmlsdGVycwpAQCAtOTUsOSArOTUsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRjaWQuYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0ZnN0eXBlLmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQpAQCAtMTEwLDkgKzEwNyw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYyI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQpAQCAtMTM5LDIzICsxMzMsOCBAQAogICAgIDwvQ2xDb21waWxlPg0KICAgPC9JdGVtR3JvdXA+DQogICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRjb25maWcuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRoZWFkZXIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRtb2R1bGUuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRvcHRpb24uaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRzdGRsaWIuaCI+DQotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnR2ZXIucmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvUmVzb3VyY2VDb21waWxlPg0KICAgPC9JdGVtR3JvdXA+DQotPC9Qcm9qZWN0Pg0KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sCmluZGV4IDg2Nzc1MTEuLjYzNGVhOTMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sCkBAIC0xMiw3ICsxMiw3IEBACiA8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBmb3IKIFZpc3VhbCZuYnNwO0MrKyZuYnNwOzIwMTAgb3IgbmV3ZXIsIG5hbWVkIDx0dD5mcmVldHlwZS5zbG48L3R0PiwKIGFuZCA8dHQ+ZnJlZXR5cGUudmN4cHJvajwvdHQ+LiAgSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMKLWZyb20gdGhlIEZyZWVUeXBlIDIuOSBzb3VyY2VzOjwvcD4KK2Zyb20gdGhlIEZyZWVUeXBlIDIuOS4xIHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxsaT5mcmVldHlwZS5kbGwgdXNpbmcgJ1JlbGVhc2UnIG9yICdEZWJ1ZycgY29uZmlndXJhdGlvbnM8L2xpPgpAQCAtMzMsNyArMzMsNyBAQAogaHJlZj0iaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RkMzkzNTc0JTI4dj12cy4xMDAlMjkuYXNweCI+bXNidWlsZDwvYT4uPC9wPgogCiA8cD5UbyBsaW5rIHlvdXIgZXhlY3V0YWJsZSB3aXRoIEZyZWVUeXBlIERMTCwgeW91IG1heSB3YW50IHRvIGRlZmluZQotRlQyX0RMTElNUE9SVCBzbyB0aGF0IHRoZSBpbXBvcnRlZCBmdW5jdGlvbnMgYXJlIGFwcHJvcHJpYXRlbHkKK0RMTF9JTVBPUlQgc28gdGhhdCB0aGUgaW1wb3J0ZWQgZnVuY3Rpb25zIGFyZSBhcHByb3ByaWF0ZWx5CiBhdHRyaWJ1dGVkIHdpdGggPHR0PmRsbGltcG9ydDx0dD4uPC9wPgogCiA8L2JvZHk+CmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwCmluZGV4IDc2ZDZlOTEuLmRhYzNkMjUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwCkBAIC01NCw3ICs1NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KICMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTEubGliIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc4LDcgKzc4LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQogIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIE11bHRpdGhyZWFkZWQiDQogDQpAQCAtMTAyLDggKzEwMiw4IEBACiAjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyOV9ELmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyOTFfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBNdWx0aXRocmVhZGVkIg0KIA0KQEAgLTEyNiw4ICsxMjYsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjkubGliIg0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyOTEubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIFNpbmdsZXRocmVhZGVkIg0KIA0KQEAgLTE1MSw4ICsxNTEsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCi0jIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlTVC5saWIiDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTEubGliIg0KKyMgQUREIExJQjMyIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVC5saWIiDQogIyBTVUJUUkFDVCBMSUIzMiAvbm9sb2dvDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWcgU2luZ2xldGhyZWFkZWQiDQpAQCAtMTc3LDggKzE3Nyw4IEBACiAjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlTVF9ELmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MV9ELmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiANCiAhRU5ESUYNCiANCkBAIC0yMDAsMTcgKzIwMCwxNCBAQAogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcYmRmXGJkZi5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRiYXNlLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0yMzAsMTQgKzIyNyw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGxjZGZpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0cGF0ZW50LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yNTEsMTggKzI0MCwxNSBAQAogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXGZ0ZGVidWcuYw0KICMgQUREIENQUCAvWmUNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMjc1LDcgKzI2MSw2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMjg0LDcgKzI2OSw2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTMwNSw3ICsyODksNiBAQAogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMzE4LDcgKzMwMSw2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xwY2ZccGNmLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0zMjcsNTcgKzMwOSw0NiBAQAogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNccHNoaW50ZXJccHNoaW50ZXIuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNccHNuYW1lc1xwc21vZHVsZS5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHNmbnRcc2ZudC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCmluZGV4IDZjMGI3NjEuLmRkMGM0MTggMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCkBAIC02OSw3ICs2OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIxOSw3ICsyMTksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDcyLDIwMyArNDcyLDE0IEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIg0KQEAgLTY4NSwxMzkgKzQ5NiwxMyBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZ0ZGVidWcuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTxUb29sDQogCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQogCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQogCQkJCQkvPg0KIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KQEAgLTgyNSwyNzAgKzUxMCwxOCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRpbml0LmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiDQpAQCAtMTA5NywxMzYgKzUzMCwxMCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iRlRfTU9EVUxFUyINCkBAIC0xMjQ0LDc1ICs1NTEsOCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiDQpAQCAtMTMzMSwxMCArNTcxLDYgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTM0OSw4MDYgKzU4NSw1MCBAQAogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwY2ZccGNmLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwZnJccGZyLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNoaW50ZXJccHNoaW50ZXIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzbmFtZXNccHNtb2R1bGUuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHNmbnRcc2ZudC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjaWRcdHlwZTFjaWQuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCTwvRmlsdGVyPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sCmluZGV4IDMyY2ViYzYuLmMwNjExZDIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwKQEAgLTExLDE0ICsxMSwxNCBAQAogCiA8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgQysrLCBuYW1lZAogPHR0PmZyZWV0eXBlLmRzcDwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkIDx0dD5mcmVldHlwZS5zbG48L3R0Pi4gIEl0Ci1jb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkgc291cmNlczo8L3A+Citjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkuMSBzb3VyY2VzOjwvcD4KIAogPHVsPgogICA8cHJlPgotICAgIGZyZWV0eXBlMjkubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjlfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjlNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCi0gICAgZnJlZXR5cGUyOU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgICBmcmVldHlwZTI5MS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOTFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgogPC91bD4KIAogPHA+QmUgc3VyZSB0byBleHRyYWN0IHRoZSBmaWxlcyB3aXRoIHRoZSBXaW5kb3dzIChDUitMRikgbGluZSBlbmRpbmdzLiAgWklQCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AKaW5kZXggMTlkN2M0NS4uNWZlMmI1YSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcApAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOS5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03OCw3ICs3OCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KICMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MV9ELmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIg0KIA0KQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjlfRC5saWIiDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjkxX0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1UX0QubGliIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgTXVsdGl0aHJlYWRlZCINCiANCkBAIC0xMjYsOCArMTI2LDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYlxmcmVldHlwZTI5LmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjkxLmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFNVC5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCiANCkBAIC0xNTEsOCArMTUxLDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOS5saWIiDQotIyBBREQgTElCMzIgL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCisjIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxU1QubGliIg0KICMgU1VCVFJBQ1QgTElCMzIgL25vbG9nbw0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkIg0KQEAgLTE3Nyw4ICsxNzcsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxU1RfRC5saWIiDQogDQogIUVORElGDQogDQpAQCAtMjAwLDE3ICsyMDAsMTQgQEAKICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGJkZlxiZGYuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcY2ZmXGNmZi5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0YmFzZS5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMjMwLDEwICsyMjcsNiBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI0MywxOCArMjM2LDE1IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xjYWNoZVxmdGNhY2hlLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cZnRkZWJ1Zy5jDQogIyBBREQgQ1BQIC9aZQ0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0yNjcsMTEgKzI1Nyw2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0aW5pdC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0yODAsNyArMjY1LDYgQEAKICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMzA1LDcgKzI4OSw2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0c3lzdGVtLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0zMTgsNyArMzAxLDYgQEAKICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHBjZlxwY2YuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTMyNyw1NyArMzA5LDQ2IEBACiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jDQotIyBTVUJUUkFDVCBDUFAgL0ZyDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcY2lkXHR5cGUxY2lkLmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCiBTT1VSQ0U9Li5cLi5cLi5cc3JjXHR5cGU0Mlx0eXBlNDIuYw0KLSMgU1VCVFJBQ1QgQ1BQIC9Gcg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMNCi0jIFNVQlRSQUNUIENQUCAvRnINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvagppbmRleCBkMDhjZDhlLi5iNzk3MzExIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2oKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qCkBAIC04Nyw3ICs4Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIzNyw3ICsyMzcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTMwOSw3ICszMDksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQ1Niw3ICs0NTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNTM0LDcgKzUzNCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNjE5LDcgKzYxOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTcwNCw3ICs3MDQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTc4NSw3ICs3ODUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC04NjcsNyArODY3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTk1MCw3ICs5NTAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTEyODcsNyArMTI4Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTEzNjksNyArMTM2OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNjIzLDcgKzE2MjMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE3ODksNyArMTc4OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE4NzEsNyArMTg3MSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xOTU0LDcgKzE5NTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjA0MCw3ICsyMDQwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMTI1LDcgKzIxMjUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjEwLDcgKzIyMTAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTIyOTEsNyArMjI5MSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIzNzMsNyArMjM3Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNDU2LDcgKzI0NTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjU0Miw3ICsyNTQyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNjI3LDcgKzI2MjcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNzEyLDcgKzI3MTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI3OTMsNyArMjc5Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI4NzUsNyArMjg3NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yOTU4LDcgKzI5NTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzA0NCw3ICszMDQ0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxLmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMTI5LDcgKzMxMjksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMjE0LDcgKzMyMTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5MVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTMyOTUsNyArMzI5NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMzNzcsNyArMzM3Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOTFTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNDYwLDcgKzM0NjAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkxTVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzUwMiwxMjgzICszNTAyLDE0IEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIg0KQEAgLTQ3OTEsODk1ICszNTIyLDEzIEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xjYWNoZVxmdGNhY2hlLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZnRkZWJ1Zy5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQkJPFRvb2wNCiAJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz0iZmFsc2UiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9ImZhbHNlIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCiAJCQkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJmYWxzZSINCiAJCQkJCS8+DQogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQpAQCAtNTY5MSwxNzEwICszNTQwLDE4IEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyINCiAJCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzdHJva2UuYyINCkBAIC03NDAzLDg1NiArMzU2MCwxMCBAQAogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIg0KIAkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xzbW9vdGhcc21vb3RoLmMiDQogCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iRlRfTU9EVUxFUyINCkBAIC04MjcwLDQzNSArMzU4MSw4IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwZnIuYyINCkBAIC04NzE3LDEwICszNjAxLDYgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRneHZhbC5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtODczNSw1MTI2ICszNjE1LDUwIEBACiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBmclxwZnIuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXHBzYXV4XHBzYXV4LmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccHNuYW1lc1xwc21vZHVsZS5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNccmFzdGVyXHJhc3Rlci5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1x0cnVldHlwZVx0cnVldHlwZS5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYyINCiAJCQkJCT4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcdHlwZTQyXHR5cGU0Mi5jIg0KIAkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMiDQogCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8UG9ja2V0IFBDIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFBvY2tldCBQQyAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxQb2NrZXQgUEMgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFNtYXJ0cGhvbmUgMjAwMyAoQVJNVjQpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8U21hcnRwaG9uZSAyMDAzIChBUk1WNCkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxTbWFydHBob25lIDIwMDMgKEFSTVY0KSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA1LjAgUG9ja2V0IFBDIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBQb2NrZXQgUEMgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFBvY2tldCBQQyBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDUuMCBTbWFydHBob25lIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW5kb3dzIE1vYmlsZSA1LjAgU21hcnRwaG9uZSBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNS4wIFNtYXJ0cGhvbmUgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFByb2Zlc3Npb25hbCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luZG93cyBNb2JpbGUgNiBQcm9mZXNzaW9uYWwgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgUHJvZmVzc2lvbmFsIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW5kb3dzIE1vYmlsZSA2IFN0YW5kYXJkIFNESyAoQVJNVjRJKSINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbmRvd3MgTW9iaWxlIDYgU3RhbmRhcmQgU0RLIChBUk1WNEkpIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnIE11bHRpdGhyZWFkZWR8V2luZG93cyBNb2JpbGUgNiBTdGFuZGFyZCBTREsgKEFSTVY0SSkiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbAppbmRleCAzYjMzOTBhLi5kNWEzY2EzIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwKQEAgLTIxLDE0ICsyMSwxNCBAQAogICA8bGk+UFBDL1NQIFdNNiAoV2luZG93cyBNb2JpbGUgNik8L2xpPgogPC91bD4KIAotSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45IHNvdXJjZXM6PC9wPgorSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45LjEgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTI5LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI5TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjlNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CisgICAgZnJlZXR5cGUyOTEubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjkxX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5MU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDhlZTBkNDAuLmY5ZDIxODYgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI5LDcgKzI5LDcgQEAKIGZpCiAKIGlmIHRlc3QgInhgJE1BS0UgLXYgMj4vZGV2L251bGwgfCBlZ3JlcCAnR05VfG1ha2VwcCdgIiA9IHg7IHRoZW4KLSAgZWNobyAiR05VIG1ha2UgKD49IDMuODApIG9yIG1ha2VwcCAoPj0gMS4xOSkgaXMgcmVxdWlyZWQgdG8gYnVpbGQgRnJlZVR5cGUyLiIgPiYyCisgIGVjaG8gIkdOVSBtYWtlICg+PSAzLjgxKSBvciBtYWtlcHAgKD49IDIuMCkgaXMgcmVxdWlyZWQgdG8gYnVpbGQgRnJlZVR5cGUyLiIgPiYyCiAgIGVjaG8gIlBsZWFzZSB0cnkiID4mMgogICBlY2hvID4mMgogICBlY2hvICIgIE1BS0U9PEdOVSBtYWtlIGNvbW1hbmQgbmFtZT4gJDAiID4mMgpkaWZmIC0tZ2l0IGEvZGV2ZWwvZnQyYnVpbGQuaCBiL2RldmVsL2Z0MmJ1aWxkLmgKaW5kZXggMWQxNzE0MS4uYmQ0ZGRkYiAxMDA2NDQKLS0tIGEvZGV2ZWwvZnQyYnVpbGQuaAorKysgYi9kZXZlbC9mdDJidWlsZC5oCkBAIC0xLDI5ICsxLDI5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdDJidWlsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zIChkZXZlbG9wbWVudCB2ZXJzaW9uKS4gICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdDJidWlsZC5oCisgKgorICogICBGcmVlVHlwZSAyIGJ1aWxkIGFuZCBzZXR1cCBtYWNyb3MgKGRldmVsb3BtZW50IHZlcnNpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAgLyoKLSAgKiAgVGhpcyBpcyBhIGRldmVsb3BtZW50IHZlcnNpb24gb2YgPGZ0MmJ1aWxkLmg+IHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluCi0gICogIGRlYnVnIG1vZGUuICBJdHMgb25seSBkaWZmZXJlbmNlIHRvIHRoZSBkZWZhdWx0IHZlcnNpb24gaXMgdGhhdCBpdAotICAqICBpbmNsdWRlcyBhIGxvY2FsIGBmdG9wdGlvbi5oJyBoZWFkZXIgZmlsZSB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IKLSAgKiAgbWFueSBjb25maWd1cmF0aW9uIG1hY3Jvcy4KKyAgKiBUaGlzIGlzIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiA8ZnQyYnVpbGQuaD4gdG8gYnVpbGQgdGhlIGxpYnJhcnkgaW4KKyAgKiBkZWJ1ZyBtb2RlLiAgSXRzIG9ubHkgZGlmZmVyZW5jZSB0byB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHRoYXQgaXQKKyAgKiBpbmNsdWRlcyBhIGxvY2FsIGBmdG9wdGlvbi5oJyBoZWFkZXIgZmlsZSB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IKKyAgKiBtYW55IGNvbmZpZ3VyYXRpb24gbWFjcm9zLgogICAqCi0gICogIFRvIHVzZSBpdCwgc2ltcGx5IGVuc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIGZpbGUgaXMKLSAgKiAgc2Nhbm5lZCBieSB0aGUgY29tcGlsZXIgYmVmb3JlIHRoZSBkZWZhdWx0IEZyZWVUeXBlIGhlYWRlciBkaXJlY3RvcnkuCisgICogVG8gdXNlIGl0LCBzaW1wbHkgZW5zdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZSBpcworICAqIHNjYW5uZWQgYnkgdGhlIGNvbXBpbGVyIGJlZm9yZSB0aGUgZGVmYXVsdCBGcmVlVHlwZSBoZWFkZXIgZGlyZWN0b3J5LgogICAqCiAgICovCiAKZGlmZiAtLWdpdCBhL2RldmVsL2Z0b3B0aW9uLmggYi9kZXZlbC9mdG9wdGlvbi5oCmluZGV4IDFiNDYxOWUuLmM0MzRhYzEgMTAwNjQ0Ci0tLSBhL2RldmVsL2Z0b3B0aW9uLmgKKysrIGIvZGV2ZWwvZnRvcHRpb24uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRvcHRpb24uaCAoZm9yIGRldmVsb3BtZW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG1hY3JvcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRvcHRpb24uaCAoZm9yIGRldmVsb3BtZW50KQorICoKKyAqICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUT1BUSU9OX0hfCkBAIC0yNSw0NSArMjUsNDcgQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgVVNFUi1TRUxFQ1RBQkxFIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1hY3JvIGRlZmluaXRpb25zIGZvciAgICAqLwotICAvKiBhIHN0YW5kYXJkIGJ1aWxkIG9mIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gICAgKi8KLSAgLyogdXNlIHRoaXMgZmlsZSB0byBidWlsZCBwcm9qZWN0LXNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5OiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgLSBZb3UgY2FuIG1vZGlmeSB0aGlzIGZpbGUgYnkgaGFuZCwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGluICAgKi8KLSAgLyogICAgY2FzZXMgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZGlyZWN0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gWW91IGNhbiBwdXQgYSBjb3B5IG9mIHRoaXMgZmlsZSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgbW9yZSAgICAgICovCi0gIC8qICAgIHByZWNpc2VseSBpbiBgJEJVSUxEL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oJywgd2hlcmUgYCRCVUlMRCcgICAqLwotICAvKiAgICBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlzIGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSAgKi8KLSAgLyogICAgaW5jbHVkZSBwYXRoIGR1cmluZyBjb21waWxhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgYW5kIEphbWZpbGVzIHVzZSB0aGUgYnVpbGQgICAgICAgICAgKi8KLSAgLyogICAgZGlyZWN0b3J5IGBidWlsZHMvPHN5c3RlbT4nIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgICovCi0gIC8qICAgIHRoYXQgZm9yIHlvdXIgb3duIHByb2plY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gQ29weSB0aGUgZmlsZSA8ZnQyYnVpbGQuaD4gdG8gYCRCVUlMRC9mdDJidWlsZC5oJyBhbmQgbW9kaWZ5IGl0ICAgICovCi0gIC8qICAgIHNsaWdodGx5IHRvIHByZS1kZWZpbmUgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05TX0ggdXNlZCB0byAgICAgICAqLwotICAvKiAgICBsb2NhdGUgdGhpcyBmaWxlIGR1cmluZyB0aGUgYnVpbGQuICBGb3IgZXhhbXBsZSwgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8bXlmdG9wdGlvbnMuaD4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaCcgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZm9yIG1hY3JvICAgICAqLwotICAvKiAgICBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gc2ltaWxhcmx5IHByZS1kZWZpbmUgdGhlIG1hY3JvICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMgKi8KLSAgLyogICAgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGxpYnJhcnkgYXQgY29tcGlsZSB0aW1lLiAgQnkgICAgICovCi0gIC8qICAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8ZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg+LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogV2UgaGlnaGx5IHJlY29tbWVuZCB1c2luZyB0aGUgdGhpcmQgbWV0aG9kIHdoZW5ldmVyIHBvc3NpYmxlLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgIFVTRVItU0VMRUNUQUJMRSBDT05GSUdVUkFUSU9OIE1BQ1JPUworICAgKgorICAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtYWNybyBkZWZpbml0aW9ucyBmb3IKKyAgICogYSBzdGFuZGFyZCBidWlsZCBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvCisgICAqIHVzZSB0aGlzIGZpbGUgdG8gYnVpbGQgcHJvamVjdC1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeToKKyAgICoKKyAgICogLSBZb3UgY2FuIG1vZGlmeSB0aGlzIGZpbGUgYnkgaGFuZCwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGluCisgICAqICAgY2FzZXMgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUKKyAgICogICBsaWJyYXJ5IGZyb20gYSBzaW5nbGUgc291cmNlIGRpcmVjdG9yeS4KKyAgICoKKyAgICogLSBZb3UgY2FuIHB1dCBhIGNvcHkgb2YgdGhpcyBmaWxlIGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCBtb3JlCisgICAqICAgcHJlY2lzZWx5IGluIGAkQlVJTEQvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgnLCB3aGVyZSBgJEJVSUxEJworICAgKiAgIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgaXMgaW5jbHVkZWQgX2JlZm9yZV8gdGhlIEZyZWVUeXBlCisgICAqICAgaW5jbHVkZSBwYXRoIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICoKKyAgICogICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgYW5kIEphbWZpbGVzIHVzZSB0aGUgYnVpbGQKKyAgICogICBkaXJlY3RvcnkgYGJ1aWxkcy88c3lzdGVtPicgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gZWFzaWx5IGNoYW5nZQorICAgKiAgIHRoYXQgZm9yIHlvdXIgb3duIHByb2plY3RzLgorICAgKgorICAgKiAtIENvcHkgdGhlIGZpbGUgPGZ0MmJ1aWxkLmg+IHRvIGAkQlVJTEQvZnQyYnVpbGQuaCcgYW5kIG1vZGlmeSBpdAorICAgKiAgIHNsaWdodGx5IHRvIHByZS1kZWZpbmUgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05TX0ggdXNlZCB0bworICAgKiAgIGxvY2F0ZSB0aGlzIGZpbGUgZHVyaW5nIHRoZSBidWlsZC4gIEZvciBleGFtcGxlLAorICAgKgorICAgKiAgIHsKKyAgICogICAgICNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPG15ZnRvcHRpb25zLmg+CisgICAqICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg+CisgICAqICAgfQorICAgKgorICAgKiAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaCcgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZm9yIG1hY3JvCisgICAqICAgZGVmaW5pdGlvbnMuCisgICAqCisgICAqICAgTm90ZSBhbHNvIHRoYXQgeW91IGNhbiBzaW1pbGFybHkgcHJlLWRlZmluZSB0aGUgbWFjcm8KKyAgICogICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMKKyAgICogICB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCB0byB0aGUgbGlicmFyeSBhdCBjb21waWxlIHRpbWUuICBCeQorICAgKiAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8ZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg+LgorICAgKgorICAgKiBXZSBoaWdobHkgcmVjb21tZW5kIHVzaW5nIHRoZSB0aGlyZCBtZXRob2Qgd2hlbmV2ZXIgcG9zc2libGUuCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NSw0MjggKzc3LDQyNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgeW91IGVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBGcmVlVHlwZSByZWNvZ25pemVzIGFuICAgICAgICovCi0gIC8qIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBgRlJFRVRZUEVfUFJPUEVSVElFUycsIHdoaWNoIGNhbiBiZSB1c2VkICAqLwotICAvKiB0byBjb250cm9sIHRoZSB2YXJpb3VzIGZvbnQgZHJpdmVycyBhbmQgbW9kdWxlcy4gIFRoZSBjb250cm9sbGFibGUgICAgKi8KLSAgLyogcHJvcGVydGllcyBhcmUgbGlzdGVkIGluIHRoZSBzZWN0aW9uIGBDb250cm9sbGluZyBGcmVlVHlwZSBNb2R1bGVzJyAgICovCi0gIC8qIGluIHRoZSByZWZlcmVuY2UncyB0YWJsZSBvZiBjb250ZW50czsgY3VycmVudGx5IHRoZXJlIGFyZSBwcm9wZXJ0aWVzICAqLwotICAvKiBmb3IgdGhlIGF1dG8taGludGVyIChmaWxlIGBmdGF1dG9oLmgnKSwgQ0ZGIChmaWxlIGBmdGNmZmRydi5oJyksICAgICAgKi8KLSAgLyogVHJ1ZVR5cGUgKGZpbGUgYGZ0dHRkcnYuaCcpLCBhbmQgUENGIChmaWxlIGBmdHBjZmRydi5oJykuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8gKi8KLSAgLyogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIDxvcHRpb25hbCB3aGl0ZXNwYWNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICA8bW9kdWxlLW5hbWUxPiAnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgPHByb3BlcnR5LW5hbWUxPiAnPScgPHByb3BlcnR5LXZhbHVlMT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIDx3aGl0ZXNwYWNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICA8bW9kdWxlLW5hbWUyPiAnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgPHByb3BlcnR5LW5hbWUyPiAnPScgPHByb3BlcnR5LXZhbHVlMj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGUkVFVFlQRV9QUk9QRVJUSUVTPXRydWV0eXBlOmludGVycHJldGVyLXZlcnNpb249MzUgXCAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJZiB5b3UgZW5hYmxlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIEZyZWVUeXBlIHJlY29nbml6ZXMgYW4KKyAgICogZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBGUkVFVFlQRV9QUk9QRVJUSUVTJywgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgICogY29udHJvbCB0aGUgdmFyaW91cyBmb250IGRyaXZlcnMgYW5kIG1vZHVsZXMuICBUaGUgY29udHJvbGxhYmxlCisgICAqIHByb3BlcnRpZXMgYXJlIGxpc3RlZCBpbiB0aGUgc2VjdGlvbiBAcHJvcGVydGllcy4KKyAgICoKKyAgICogWW91IGhhdmUgdG8gdW5kZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrCisgICAqIHRoZSBjb25jZXB0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYW5kIHRodXMgZG9uJ3QgaGF2ZSB0aGUgYGdldGVudicKKyAgICogZnVuY3Rpb24pLCBmb3IgZXhhbXBsZSBXaW5kb3dzIENFLgorICAgKgorICAgKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8KKyAgICogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuCisgICAqCisgICAqIHsKKyAgICogICA8b3B0aW9uYWwgd2hpdGVzcGFjZT4KKyAgICogICA8bW9kdWxlLW5hbWUxPiAnOicKKyAgICogICA8cHJvcGVydHktbmFtZTE+ICc9JyA8cHJvcGVydHktdmFsdWUxPgorICAgKiAgIDx3aGl0ZXNwYWNlPgorICAgKiAgIDxtb2R1bGUtbmFtZTI+ICc6JworICAgKiAgIDxwcm9wZXJ0eS1uYW1lMj4gJz0nIDxwcm9wZXJ0eS12YWx1ZTI+CisgICAqICAgLi4uCisgICAqIH0KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogeworICAgKiAgIEZSRUVUWVBFX1BST1BFUlRJRVM9dHJ1ZXR5cGU6aW50ZXJwcmV0ZXItdmVyc2lvbj0zNSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICBhdXRvZml0dGVyOndhcnBpbmc9MQorICAgKiB9CisgICAqCisgICAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3YW50IHRvIGFjdGl2YXRlIExDRCByZW5kZXJpbmcgICAgICAgICovCi0gIC8qIHRlY2hub2xvZ3kgc2ltaWxhciB0byBDbGVhclR5cGUgaW4gdGhpcyBidWlsZCBvZiB0aGUgbGlicmFyeS4gIFRoaXMgICAqLwotICAvKiB0ZWNobm9sb2d5IHRyaXBsZXMgdGhlIHJlc29sdXRpb24gaW4gdGhlIGRpcmVjdGlvbiBjb2xvciBzdWJwaXhlbHMuICAgKi8KLSAgLyogVG8gbWl0aWdhdGUgY29sb3IgZnJpbmdlcyBpbmhlcmVudCB0byB0aGlzIHRlY2hub2xvZ3ksIHlvdSBhbHNvIG5lZWQgICovCi0gIC8qIHRvIGV4cGxpY2l0bHkgc2V0IHVwIExDRCBmaWx0ZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBjb3ZlcmVkIGJ5IHNldmVyYWwgTWljcm9zb2Z0IHBhdGVudHMgICAgICAgICovCi0gIC8qIGFuZCBzaG91bGQgbm90IGJlIGFjdGl2YXRlZCBpbiBhbnkgZGVmYXVsdCBidWlsZCBvZiB0aGUgbGlicmFyeS4gICAgICAqLwotICAvKiBXaGVuIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIEZyZWVUeXBlIG9mZmVycyBhbHRlcm5hdGl2ZSBMQ0QgICAgICAgKi8KLSAgLyogcmVuZGVyaW5nIHRlY2hub2xvZ3kgdGhhdCBwcm9kdWNlcyBleGNlbGxlbnQgb3V0cHV0IHdpdGhvdXQgTENEICAgICAgICovCi0gIC8qIGZpbHRlcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2FudCB0byBhY3RpdmF0ZSBMQ0QgcmVuZGVyaW5nCisgICAqIHRlY2hub2xvZ3kgc2ltaWxhciB0byBDbGVhclR5cGUgaW4gdGhpcyBidWlsZCBvZiB0aGUgbGlicmFyeS4gIFRoaXMKKyAgICogdGVjaG5vbG9neSB0cmlwbGVzIHRoZSByZXNvbHV0aW9uIGluIHRoZSBkaXJlY3Rpb24gY29sb3Igc3VicGl4ZWxzLgorICAgKiBUbyBtaXRpZ2F0ZSBjb2xvciBmcmluZ2VzIGluaGVyZW50IHRvIHRoaXMgdGVjaG5vbG9neSwgeW91IGFsc28gbmVlZAorICAgKiB0byBleHBsaWNpdGx5IHNldCB1cCBMQ0QgZmlsdGVyaW5nLgorICAgKgorICAgKiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGNvdmVyZWQgYnkgc2V2ZXJhbCBNaWNyb3NvZnQgcGF0ZW50cworICAgKiBhbmQgc2hvdWxkIG5vdCBiZSBhY3RpdmF0ZWQgaW4gYW55IGRlZmF1bHQgYnVpbGQgb2YgdGhlIGxpYnJhcnkuCisgICAqIFdoZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgRnJlZVR5cGUgb2ZmZXJzIGFsdGVybmF0aXZlIExDRAorICAgKiByZW5kZXJpbmcgdGVjaG5vbG9neSB0aGF0IHByb2R1Y2VzIGV4Y2VsbGVudCBvdXRwdXQgd2l0aG91dCBMQ0QKKyAgICogZmlsdGVyaW5nLgorICAgKi8KIC8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTWFueSBjb21waWxlcnMgcHJvdmlkZSBhIG5vbi1BTlNJIDY0LWJpdCBkYXRhIHR5cGUgdGhhdCBjYW4gYmUgdXNlZCAgICovCi0gIC8qIGJ5IEZyZWVUeXBlIHRvIHNwZWVkIHVwIHNvbWUgY29tcHV0YXRpb25zLiAgSG93ZXZlciwgdGhpcyB3aWxsIGNyZWF0ZSAqLwotICAvKiBzb21lIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5IGluIHN0cmljdCBBTlNJIG1vZGUuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZvciB0aGlzIHJlYXNvbiwgdGhlIHVzZSBvZiA2NC1iaXQgaW50ZWdlcnMgaXMgbm9ybWFsbHkgZGlzYWJsZWQgd2hlbiAqLwotICAvKiB0aGUgX19TVERDX18gbWFjcm8gaXMgZGVmaW5lZC4gIFlvdSBjYW4gaG93ZXZlciBkaXNhYmxlIHRoaXMgYnkgICAgICAgKi8KLSAgLyogZGVmaW5pbmcgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgaGVyZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGb3IgbW9zdCBjb21waWxlcnMsIHRoaXMgd2lsbCBvbmx5IGNyZWF0ZSBjb21waWxhdGlvbiB3YXJuaW5ncyB3aGVuICAgKi8KLSAgLyogYnVpbGRpbmcgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPYk5vdGU6IFRoZSBjb21waWxlci1zcGVjaWZpYyA2NC1iaXQgaW50ZWdlcnMgYXJlIGRldGVjdGVkIGluIHRoZSAgICAgKi8KLSAgLyogICAgICAgICBmaWxlIGBmdGNvbmZpZy5oJyBlaXRoZXIgc3RhdGljYWxseSBvciB0aHJvdWdoIHRoZSAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0IG9uIHN1cHBvcnRlZCBwbGF0Zm9ybXMuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1hbnkgY29tcGlsZXJzIHByb3ZpZGUgYSBub24tQU5TSSA2NC1iaXQgZGF0YSB0eXBlIHRoYXQgY2FuIGJlIHVzZWQKKyAgICogYnkgRnJlZVR5cGUgdG8gc3BlZWQgdXAgc29tZSBjb21wdXRhdGlvbnMuICBIb3dldmVyLCB0aGlzIHdpbGwgY3JlYXRlCisgICAqIHNvbWUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgaW4gc3RyaWN0IEFOU0kgbW9kZS4KKyAgICoKKyAgICogRm9yIHRoaXMgcmVhc29uLCB0aGUgdXNlIG9mIDY0LWJpdCBpbnRlZ2VycyBpcyBub3JtYWxseSBkaXNhYmxlZCB3aGVuCisgICAqIHRoZSBfX1NURENfXyBtYWNybyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGRpc2FibGUgdGhpcyBieQorICAgKiBkZWZpbmluZyB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCBoZXJlLgorICAgKgorICAgKiBGb3IgbW9zdCBjb21waWxlcnMsIHRoaXMgd2lsbCBvbmx5IGNyZWF0ZSBjb21waWxhdGlvbiB3YXJuaW5ncyB3aGVuCisgICAqIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgorICAgKgorICAgKiBPYk5vdGU6IFRoZSBjb21waWxlci1zcGVjaWZpYyA2NC1iaXQgaW50ZWdlcnMgYXJlIGRldGVjdGVkIGluIHRoZQorICAgKiAgICAgICAgIGZpbGUgYGZ0Y29uZmlnLmgnIGVpdGhlciBzdGF0aWNhbGx5IG9yIHRocm91Z2ggdGhlCisgICAqICAgICAgICAgYGNvbmZpZ3VyZScgc2NyaXB0IG9uIHN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAqLwogI3VuZGVmIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBkbyBub3QgdHJ5IHRvIHVzZSBhbiBhc3NlbWJsZXIgdmVyc2lvbiBvZiAgICovCi0gIC8qIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9ucyAoZS5nLiBGVF9NdWxGaXgpLiAgWW91IHNob3VsZCBvbmx5IGRvICAqLwotICAvKiB0aGF0IHRvIHZlcmlmeSB0aGF0IHRoZSBhc3NlbWJsZXIgZnVuY3Rpb24gd29ya3MgcHJvcGVybHksIG9yIHRvICAgICAgKi8KLSAgLyogZXhlY3V0ZSBiZW5jaG1hcmsgdGVzdHMgb2YgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zLiAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIGRvIG5vdCB0cnkgdG8gdXNlIGFuIGFzc2VtYmxlciB2ZXJzaW9uIG9mCisgICAqIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9ucyAoZS5nLiBGVF9NdWxGaXgpLiAgWW91IHNob3VsZCBvbmx5IGRvCisgICAqIHRoYXQgdG8gdmVyaWZ5IHRoYXQgdGhlIGFzc2VtYmxlciBmdW5jdGlvbiB3b3JrcyBwcm9wZXJseSwgb3IgdG8KKyAgICogZXhlY3V0ZSBiZW5jaG1hcmsgdGVzdHMgb2YgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zLgorICAgKi8KIC8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCB0cnkgdG8gdXNlIGFuIGlubGluZWQgYXNzZW1ibGVyIHZlcnNpb24gb2YgICovCi0gIC8qIHRoZSBgRlRfTXVsRml4JyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBgaG90c3BvdCcgd2hlbiBsb2FkaW5nIGFuZCAgICAgICAqLwotICAvKiBoaW50aW5nIGdseXBocywgYW5kIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCBhcyBmYXN0IGFzIHBvc3NpYmxlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCBpZiB5b3VyIGNvbXBpbGVyIG9yIENQVSBpcyBub3Qgc3VwcG9ydGVkLCB0aGlzIHdpbGwgZGVmYXVsdCAqLwotICAvKiB0byB0aGUgc3RhbmRhcmQgYW5kIHBvcnRhYmxlIGltcGxlbWVudGF0aW9uIGZvdW5kIGluIGBmdGNhbGMuYycuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHRyeSB0byB1c2UgYW4gaW5saW5lZCBhc3NlbWJsZXIgdmVyc2lvbiBvZgorICAgKiB0aGUgYEZUX011bEZpeCcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYGhvdHNwb3QnIHdoZW4gbG9hZGluZyBhbmQKKyAgICogaGludGluZyBnbHlwaHMsIGFuZCB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgYXMgZmFzdCBhcyBwb3NzaWJsZS4KKyAgICoKKyAgICogTm90ZSB0aGF0IGlmIHlvdXIgY29tcGlsZXIgb3IgQ1BVIGlzIG5vdCBzdXBwb3J0ZWQsIHRoaXMgd2lsbCBkZWZhdWx0CisgICAqIHRvIHRoZSBzdGFuZGFyZCBhbmQgcG9ydGFibGUgaW1wbGVtZW50YXRpb24gZm91bmQgaW4gYGZ0Y2FsYy5jJy4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fSU5MSU5FX01VTEZJWAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBMWlctY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgZm9udCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjb21wcmVzc2VkIHdpdGggdGhlICAqLwotICAvKiAgIGBjb21wcmVzcycgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGICAgKi8KLSAgLyogICBmaWxlcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIFgxMSBkaXN0cmlidXRpb25zLiAgVGhlIGltcGxlbWVudGF0aW9uICovCi0gIC8qICAgdXNlcyBOZXRCU0QncyBgem9wZW4nIHRvIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgICAqLwotICAvKiAgIChzZWUgc3JjL2x6dy9mdGd6aXAuYykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIExaVy1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4KKyAgICoKKyAgICogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBmb250IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCB0aGUKKyAgICogICBgY29tcHJlc3MnIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRgorICAgKiAgIGZpbGVzIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgWDExIGRpc3RyaWJ1dGlvbnMuICBUaGUgaW1wbGVtZW50YXRpb24KKyAgICogICB1c2VzIE5ldEJTRCdzIGB6b3BlbicgdG8gcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseQorICAgKiAgIChzZWUgc3JjL2x6dy9mdGd6aXAuYykuCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfTFpXCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEd6aXAtY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBmb250IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCB0aGUgICovCi0gIC8qICAgYGd6aXAnIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRiBmaWxlcyAqLwotICAvKiAgIHRoYXQgY29tZSB3aXRoIFhGcmVlODYuICBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBgemxpYicgdG8gICAgICAgICAgKi8KLSAgLyogICBwYXJ0aWFsbHkgdW5jb21wcmVzcyB0aGUgZmlsZSBvbiB0aGUgZmx5IChzZWUgc3JjL2d6aXAvZnRnemlwLmMpLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gIFNlZSBhbHNvICAgKi8KLSAgLyogICB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR3ppcC1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4KKyAgICoKKyAgICogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBmb250IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCB0aGUKKyAgICogICBgZ3ppcCcgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGIGZpbGVzCisgICAqICAgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGB6bGliJyB0bworICAgKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvZ3ppcC9mdGd6aXAuYykuCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgU2VlIGFsc28KKyAgICogICB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiBiZWxvdy4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX1pMSUIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWkxpYiBsaWJyYXJ5IHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgbWFjcm8gaXMgb25seSB1c2VkIHdoZW4gRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQiBpcyBkZWZpbmVkLiAgKi8KLSAgLyogICBJdCBhbGxvd3MgRnJlZVR5cGUncyBgZnRnemlwJyBjb21wb25lbnQgdG8gbGluayB0byB0aGUgc3lzdGVtJ3MgICAgICovCi0gIC8qICAgaW5zdGFsbGF0aW9uIG9mIHRoZSBaTGliIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIGxpa2UgICAqLwotICAvKiAgIFVuaXggb3IgVk1TIHdoZXJlIGl0IGdlbmVyYWxseSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSWYgeW91IGxldCBpdCB1bmRlZmluZWQsIHRoZSBjb21wb25lbnQgd2lsbCB1c2UgaXRzIG93biBjb3B5ICAgICAgICAqLwotICAvKiAgIG9mIHRoZSB6bGliIHNvdXJjZXMgaW5zdGVhZC4gIFRoZXNlIGhhdmUgYmVlbiBtb2RpZmllZCB0byBiZSAgICAgICAgKi8KLSAgLyogICBpbmNsdWRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGNvbXBvbmVudCBhbmQgKm5vdCogZXhwb3J0IGV4dGVybmFsICAgICovCi0gIC8qICAgZnVuY3Rpb24gbmFtZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gbGluayBhbnkgcHJvZ3JhbSB3aXRoIEZyZWVUeXBlICAqLwotICAvKiAgIF9hbmRfIFpMaWIgd2l0aG91dCBsaW5raW5nIGNvbmZsaWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgICAqLwotICAvKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBaTGliIGxpYnJhcnkgc2VsZWN0aW9uCisgICAqCisgICAqICAgVGhpcyBtYWNybyBpcyBvbmx5IHVzZWQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCIGlzIGRlZmluZWQuCisgICAqICAgSXQgYWxsb3dzIEZyZWVUeXBlJ3MgYGZ0Z3ppcCcgY29tcG9uZW50IHRvIGxpbmsgdG8gdGhlIHN5c3RlbSdzCisgICAqICAgaW5zdGFsbGF0aW9uIG9mIHRoZSBaTGliIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIGxpa2UKKyAgICogICBVbml4IG9yIFZNUyB3aGVyZSBpdCBnZW5lcmFsbHkgaXMgYWxyZWFkeSBhdmFpbGFibGUuCisgICAqCisgICAqICAgSWYgeW91IGxldCBpdCB1bmRlZmluZWQsIHRoZSBjb21wb25lbnQgd2lsbCB1c2UgaXRzIG93biBjb3B5CisgICAqICAgb2YgdGhlIHpsaWIgc291cmNlcyBpbnN0ZWFkLiAgVGhlc2UgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGJlCisgICAqICAgaW5jbHVkZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBjb21wb25lbnQgYW5kICpub3QqIGV4cG9ydCBleHRlcm5hbAorICAgKiAgIGZ1bmN0aW9uIG5hbWVzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGxpbmsgYW55IHByb2dyYW0gd2l0aCBGcmVlVHlwZQorICAgKiAgIF9hbmRfIFpMaWIgd2l0aG91dCBsaW5raW5nIGNvbmZsaWN0cy4KKyAgICoKKyAgICogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZQorICAgKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuCisgICAqCisgICAqICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsCisgICAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlCisgICAqICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KKyAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQnppcDItY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KLSAgLyogICBgYnppcDInIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRiAgICAgICovCi0gIC8qICAgZmlsZXMgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBsaWJiejInIHRvICAqLwotICAvKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvYnppcDIvZnRiemlwMi5jKS4gKi8KLSAgLyogICBDb250cmFyeSB0byBnemlwLCBiemlwMiBjdXJyZW50bHkgaXMgbm90IGluY2x1ZGVkIGFuZCBuZWVkIHRvIHVzZSAgICovCi0gIC8qICAgdGhlIHN5c3RlbSBhdmFpbGFibGUgYnppcDIgaW1wbGVtZW50YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQnppcDItY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuCisgICAqCisgICAqICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgZm9udCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjb21wcmVzc2VkIHdpdGggdGhlCisgICAqICAgYGJ6aXAyJyBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YKKyAgICogICBmaWxlcyB0aGF0IGNvbWUgd2l0aCBYRnJlZTg2LiAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGxpYmJ6MicgdG8KKyAgICogICBwYXJ0aWFsbHkgdW5jb21wcmVzcyB0aGUgZmlsZSBvbiB0aGUgZmx5IChzZWUgc3JjL2J6aXAyL2Z0YnppcDIuYykuCisgICAqICAgQ29udHJhcnkgdG8gZ3ppcCwgYnppcDIgY3VycmVudGx5IGlzIG5vdCBpbmNsdWRlZCBhbmQgbmVlZCB0byB1c2UKKyAgICogICB0aGUgc3lzdGVtIGF2YWlsYWJsZSBiemlwMiBpbXBsZW1lbnRhdGlvbi4KKyAgICoKKyAgICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuCisgICAqCisgICAqICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsCisgICAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlCisgICAqICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgZmlsZSBzdHJlYW0gZnVuY3Rpb25zIGFuZCB0eXBlcywgRklMRSwgICAqLwotICAvKiBmb3BlbigpIGV0Yy4gIEVuYWJsZXMgdGhlIHVzZSBvZiBzbWFsbGVyIHN5c3RlbSBsaWJyYXJpZXMgb24gZW1iZWRkZWQgKi8KLSAgLyogc3lzdGVtcyB0aGF0IGhhdmUgbXVsdGlwbGUgc3lzdGVtIGxpYnJhcmllcywgc29tZSB3aXRoIG9yIHdpdGhvdXQgICAgICovCi0gIC8qIGZpbGUgc3RyZWFtIHN1cHBvcnQsIGluIHRoZSBjYXNlcyB3aGVyZSBmaWxlIHN0cmVhbSBzdXBwb3J0IGlzIG5vdCAgICAqLwotICAvKiBuZWNlc3Nhcnkgc3VjaCBhcyBtZW1vcnkgbG9hZGluZyBvZiBmb250IGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIGZpbGUgc3RyZWFtIGZ1bmN0aW9ucyBhbmQgdHlwZXMsIEZJTEUsCisgICAqIGZvcGVuKCkgZXRjLiAgRW5hYmxlcyB0aGUgdXNlIG9mIHNtYWxsZXIgc3lzdGVtIGxpYnJhcmllcyBvbiBlbWJlZGRlZAorICAgKiBzeXN0ZW1zIHRoYXQgaGF2ZSBtdWx0aXBsZSBzeXN0ZW0gbGlicmFyaWVzLCBzb21lIHdpdGggb3Igd2l0aG91dAorICAgKiBmaWxlIHN0cmVhbSBzdXBwb3J0LCBpbiB0aGUgY2FzZXMgd2hlcmUgZmlsZSBzdHJlYW0gc3VwcG9ydCBpcyBub3QKKyAgICogbmVjZXNzYXJ5IHN1Y2ggYXMgbWVtb3J5IGxvYWRpbmcgb2YgZm9udCBmaWxlcy4KKyAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVCAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBQTkcgYml0bWFwIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgbG9hZGluZyBjb2xvciBiaXRtYXAgZ2x5cGhzIGluIHRoZSBQTkcgZm9ybWF0LiAqLwotICAvKiAgIFRoaXMgcmVxdWlyZXMgaGVscCBmcm9tIHRoZSBleHRlcm5hbCBsaWJwbmcgbGlicmFyeS4gIFVuY29tcHJlc3NlZCAgKi8KLSAgLyogICBjb2xvciBiaXRtYXBzIGRvIG5vdCBuZWVkIGFueSBleHRlcm5hbCBsaWJyYXJpZXMgYW5kIHdpbGwgYmUgICAgICAgICovCi0gIC8qICAgc3VwcG9ydGVkIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUE5HIGJpdG1hcCBzdXBwb3J0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGxvYWRpbmcgY29sb3IgYml0bWFwIGdseXBocyBpbiB0aGUgUE5HIGZvcm1hdC4KKyAgICogICBUaGlzIHJlcXVpcmVzIGhlbHAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicG5nIGxpYnJhcnkuICBVbmNvbXByZXNzZWQKKyAgICogICBjb2xvciBiaXRtYXBzIGRvIG5vdCBuZWVkIGFueSBleHRlcm5hbCBsaWJyYXJpZXMgYW5kIHdpbGwgYmUKKyAgICogICBzdXBwb3J0ZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLgorICAgKgorICAgKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LAorICAgKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VuZGVuY2UsIG92ZXJ3cml0aW5nIHRoZQorICAgKiAgIHZhbHVlIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuCisgICAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSGFyZkJ1enogc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIHVzZXMgdGhlIEhhcmZCdXp6IGxpYnJhcnkgdG8gaW1wcm92ZSBhdXRvLWhpbnRpbmcgb2YgICAgICAgKi8KLSAgLyogICBPcGVuVHlwZSBmb250cy4gIElmIGF2YWlsYWJsZSwgbWFueSBnbHlwaHMgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlICovCi0gIC8qICAgYnkgYSBmb250J3MgY2hhcmFjdGVyIG1hcCB3aWxsIGJlIGhpbnRlZCBhbHNvLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSGFyZkJ1enogc3VwcG9ydC4KKyAgICoKKyAgICogICBGcmVlVHlwZSB1c2VzIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IHRvIGltcHJvdmUgYXV0by1oaW50aW5nIG9mCisgICAqICAgT3BlblR5cGUgZm9udHMuICBJZiBhdmFpbGFibGUsIG1hbnkgZ2x5cGhzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZQorICAgKiAgIGJ5IGEgZm9udCdzIGNoYXJhY3RlciBtYXAgd2lsbCBiZSBoaW50ZWQgYWxzby4KKyAgICoKKyAgICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuCisgICAqCisgICAqICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsCisgICAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlCisgICAqICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEdseXBoIFBvc3RzY3JpcHQgTmFtZXMgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGNvbXBpbGVkIHdpdGggdGhlIGBwc25hbWVzJyBtb2R1bGUuICBUaGlzICovCi0gIC8qICAgbW9kdWxlIGlzIGluIGNoYXJnZSBvZiBjb252ZXJ0aW5nIGEgZ2x5cGggbmFtZSBzdHJpbmcgaW50byBhICAgICAgICAqLwotICAvKiAgIFVuaWNvZGUgdmFsdWUsIG9yIHJldHVybiBhIE1hY2ludG9zaCBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvciB0aGUgICAgKi8KLSAgLyogICB1c2Ugd2l0aCB0aGUgVHJ1ZVR5cGUgYHBvc3QnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFVuZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCB3YW50IGBwc25hbWVzJyBjb21waWxlZCBpbiB5b3VyICAgKi8KLSAgLyogICBidWlsZCBvZiBGcmVlVHlwZS4gIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZWZmZWN0czogICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gVGhlIFRydWVUeXBlIGRyaXZlciB3aWxsIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgZ2x5cGggbmFtZXMsICAgICAgKi8KLSAgLyogICAgIGlmIHlvdSBidWlsZCBpdCB0byBzdXBwb3J0IHBvc3RzY3JpcHQgbmFtZXMgaW4gdGhlIFRydWVUeXBlICAgICAgICovCi0gIC8qICAgICBgcG9zdCcgdGFibGUsIGJ1dCB3aWxsIG5vdCBzeW50aGVzaXplIGEgbWlzc2luZyBVbmljb2RlIGNoYXJtYXAuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgICAgICAgICovCi0gIC8qICAgICBjaGFybWFwIG91dCBvZiB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBZb3Ugd291bGQgbm9ybWFsbHkgdW5kZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIHdoZW4gYnVpbGRpbmcgICovCi0gIC8qICAgYSB2ZXJzaW9uIG9mIEZyZWVUeXBlIHRoYXQgZG9lc24ndCBjb250YWluIGEgVHlwZSAxIG9yIENGRiBkcml2ZXIuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdseXBoIFBvc3RzY3JpcHQgTmFtZXMgaGFuZGxpbmcKKyAgICoKKyAgICogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGNvbXBpbGVkIHdpdGggdGhlIGBwc25hbWVzJyBtb2R1bGUuICBUaGlzCisgICAqICAgbW9kdWxlIGlzIGluIGNoYXJnZSBvZiBjb252ZXJ0aW5nIGEgZ2x5cGggbmFtZSBzdHJpbmcgaW50byBhCisgICAqICAgVW5pY29kZSB2YWx1ZSwgb3IgcmV0dXJuIGEgTWFjaW50b3NoIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yIHRoZQorICAgKiAgIHVzZSB3aXRoIHRoZSBUcnVlVHlwZSBgcG9zdCcgdGFibGUuCisgICAqCisgICAqICAgVW5kZWZpbmUgdGhpcyBtYWNybyBpZiB5b3UgZG8gbm90IHdhbnQgYHBzbmFtZXMnIGNvbXBpbGVkIGluIHlvdXIKKyAgICogICBidWlsZCBvZiBGcmVlVHlwZS4gIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZWZmZWN0czoKKyAgICoKKyAgICogICAtIFRoZSBUcnVlVHlwZSBkcml2ZXIgd2lsbCBwcm92aWRlIGl0cyBvd24gc2V0IG9mIGdseXBoIG5hbWVzLAorICAgKiAgICAgaWYgeW91IGJ1aWxkIGl0IHRvIHN1cHBvcnQgcG9zdHNjcmlwdCBuYW1lcyBpbiB0aGUgVHJ1ZVR5cGUKKyAgICogICAgIGBwb3N0JyB0YWJsZSwgYnV0IHdpbGwgbm90IHN5bnRoZXNpemUgYSBtaXNzaW5nIFVuaWNvZGUgY2hhcm1hcC4KKyAgICoKKyAgICogICAtIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUKKyAgICogICAgIGNoYXJtYXAgb3V0IG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnRzLgorICAgKgorICAgKiAgIFlvdSB3b3VsZCBub3JtYWxseSB1bmRlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gd2hlbiBidWlsZGluZworICAgKiAgIGEgdmVyc2lvbiBvZiBGcmVlVHlwZSB0aGF0IGRvZXNuJ3QgY29udGFpbiBhIFR5cGUgMSBvciBDRkYgZHJpdmVyLgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBvc3RzY3JpcHQgTmFtZXMgdG8gVW5pY29kZSBWYWx1ZXMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGJ1aWx0IHdpdGggdGhlIGBQU05hbWVzJyBtb2R1bGUgY29tcGlsZWQgICovCi0gIC8qICAgaW4uICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBtb2R1bGUgaXMgdXNlZCB0byBjb252ZXJ0IGEgZ2x5cGggbmFtZSAqLwotICAvKiAgIGludG8gYSBVbmljb2RlIHZhbHVlLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBvcmRlciB0byAgICAgICAgKi8KLSAgLyogICBzeW50aGVzaXplIG9uIHRoZSBmbHkgYSBVbmljb2RlIGNoYXJtYXAgZnJvbSB0aGUgQ0ZGL1R5cGUgMSBkcml2ZXIgICovCi0gIC8qICAgdGhyb3VnaCBhIGJpZyB0YWJsZSBuYW1lZCB0aGUgYEFkb2JlIEdseXBoIExpc3QnIChBR0wpLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBVbmRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3Qgd2FudCB0aGUgQWRvYmUgR2x5cGggTGlzdCAgICAgICAgICovCi0gIC8qICAgY29tcGlsZWQgaW4geW91ciBgUFNOYW1lcycgbW9kdWxlLiAgVGhlIFR5cGUgMSBkcml2ZXIgd2lsbCBub3QgYmUgICAqLwotICAvKiAgIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCBvdXQgb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgKi8KLSAgLyogICBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUG9zdHNjcmlwdCBOYW1lcyB0byBVbmljb2RlIFZhbHVlcyBzdXBwb3J0CisgICAqCisgICAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBidWlsdCB3aXRoIHRoZSBgUFNOYW1lcycgbW9kdWxlIGNvbXBpbGVkCisgICAqICAgaW4uICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBtb2R1bGUgaXMgdXNlZCB0byBjb252ZXJ0IGEgZ2x5cGggbmFtZQorICAgKiAgIGludG8gYSBVbmljb2RlIHZhbHVlLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBvcmRlciB0bworICAgKiAgIHN5bnRoZXNpemUgb24gdGhlIGZseSBhIFVuaWNvZGUgY2hhcm1hcCBmcm9tIHRoZSBDRkYvVHlwZSAxIGRyaXZlcgorICAgKiAgIHRocm91Z2ggYSBiaWcgdGFibGUgbmFtZWQgdGhlIGBBZG9iZSBHbHlwaCBMaXN0JyAoQUdMKS4KKyAgICoKKyAgICogICBVbmRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3Qgd2FudCB0aGUgQWRvYmUgR2x5cGggTGlzdAorICAgKiAgIGNvbXBpbGVkIGluIHlvdXIgYFBTTmFtZXMnIG1vZHVsZS4gIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlCisgICAqICAgYWJsZSB0byBzeW50aGVzaXplIGEgVW5pY29kZSBjaGFybWFwIG91dCBvZiB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZQorICAgKiAgIGZvbnRzLgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9BRE9CRV9HTFlQSF9MSVNUCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN1cHBvcnQgZm9yIE1hYyBmb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBvdXRsaW5lIGZvbnRzIGluIE1hYyAgICAgICovCi0gIC8qICAgZm9ybWF0IChtYWMgZGZvbnQsIG1hYyByZXNvdXJjZSwgbWFjYmluYXJ5IGNvbnRhaW5pbmcgYSBtYWMgICAgICAgICAqLwotICAvKiAgIHJlc291cmNlKSBvbiBub24tTWFjIHBsYXRmb3Jtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTm90ZSB0aGF0IHRoZSBgRk9ORCcgcmVzb3VyY2UgaXNuJ3QgY2hlY2tlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFN1cHBvcnQgZm9yIE1hYyBmb250cworICAgKgorICAgKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIG91dGxpbmUgZm9udHMgaW4gTWFjCisgICAqICAgZm9ybWF0IChtYWMgZGZvbnQsIG1hYyByZXNvdXJjZSwgbWFjYmluYXJ5IGNvbnRhaW5pbmcgYSBtYWMKKyAgICogICByZXNvdXJjZSkgb24gbm9uLU1hYyBwbGF0Zm9ybXMuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZSBgRk9ORCcgcmVzb3VyY2UgaXNuJ3QgY2hlY2tlZC4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEd1ZXNzaW5nIG1ldGhvZHMgdG8gYWNjZXNzIGVtYmVkZGVkIHJlc291cmNlIGZvcmtzICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBFbmFibGUgZXh0cmEgTWFjIGZvbnRzIHN1cHBvcnQgb24gbm9uLU1hYyBwbGF0Zm9ybXMgKGUuZy4gICAgICAgICAgICovCi0gIC8qICAgR05VL0xpbnV4KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBSZXNvdXJjZSBmb3JrcyB3aGljaCBpbmNsdWRlIGZvbnRzIGRhdGEgYXJlIHN0b3JlZCBzb21ldGltZXMgaW4gICAgICovCi0gIC8qICAgbG9jYXRpb25zIHdoaWNoIHVzZXJzIG9yIGRldmVsb3BlcnMgZG9uJ3QgZXhwZWN0ZWQuICBJbiBzb21lIGNhc2VzLCAqLwotICAvKiAgIHJlc291cmNlIGZvcmtzIHN0YXJ0IHdpdGggc29tZSBvZmZzZXQgZnJvbSB0aGUgaGVhZCBvZiBhIGZpbGUuICBJbiAgKi8KLSAgLyogICBvdGhlciBjYXNlcywgdGhlIGFjdHVhbCByZXNvdXJjZSBmb3JrIGlzIHN0b3JlZCBpbiBmaWxlIGRpZmZlcmVudCAgICovCi0gIC8qICAgZnJvbSB3aGF0IHRoZSB1c2VyIHNwZWNpZmllcy4gIElmIHRoaXMgb3B0aW9uIGlzIGFjdGl2YXRlZCwgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIHRyaWVzIHRvIGd1ZXNzIHdoZXRoZXIgc3VjaCBvZmZzZXRzIG9yIGRpZmZlcmVudCBmaWxlICAgICAgKi8KLSAgLyogICBuYW1lcyBtdXN0IGJlIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5vdGUgdGhhdCBub3JtYWwsIGRpcmVjdCBhY2Nlc3Mgb2YgcmVzb3VyY2UgZm9ya3MgaXMgY29udHJvbGxlZCB2aWEgKi8KLSAgLyogICB0aGUgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMgb3B0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR3Vlc3NpbmcgbWV0aG9kcyB0byBhY2Nlc3MgZW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MKKyAgICoKKyAgICogICBFbmFibGUgZXh0cmEgTWFjIGZvbnRzIHN1cHBvcnQgb24gbm9uLU1hYyBwbGF0Zm9ybXMgKGUuZy4sIEdOVS9MaW51eCkuCisgICAqCisgICAqICAgUmVzb3VyY2UgZm9ya3Mgd2hpY2ggaW5jbHVkZSBmb250cyBkYXRhIGFyZSBzdG9yZWQgc29tZXRpbWVzIGluCisgICAqICAgbG9jYXRpb25zIHdoaWNoIHVzZXJzIG9yIGRldmVsb3BlcnMgZG9uJ3QgZXhwZWN0ZWQuICBJbiBzb21lIGNhc2VzLAorICAgKiAgIHJlc291cmNlIGZvcmtzIHN0YXJ0IHdpdGggc29tZSBvZmZzZXQgZnJvbSB0aGUgaGVhZCBvZiBhIGZpbGUuICBJbgorICAgKiAgIG90aGVyIGNhc2VzLCB0aGUgYWN0dWFsIHJlc291cmNlIGZvcmsgaXMgc3RvcmVkIGluIGZpbGUgZGlmZmVyZW50CisgICAqICAgZnJvbSB3aGF0IHRoZSB1c2VyIHNwZWNpZmllcy4gIElmIHRoaXMgb3B0aW9uIGlzIGFjdGl2YXRlZCwKKyAgICogICBGcmVlVHlwZSB0cmllcyB0byBndWVzcyB3aGV0aGVyIHN1Y2ggb2Zmc2V0cyBvciBkaWZmZXJlbnQgZmlsZQorICAgKiAgIG5hbWVzIG11c3QgYmUgdXNlZC4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgbm9ybWFsLCBkaXJlY3QgYWNjZXNzIG9mIHJlc291cmNlIGZvcmtzIGlzIGNvbnRyb2xsZWQgdmlhCisgICAqICAgdGhlIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTIG9wdGlvbi4KKyAgICovCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMKICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSwogI2VuZGlmCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFsbG93IHRoZSB1c2Ugb2YgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIHRvIGxvYWQgdHlwZWZhY2VzIHRoYXQgICAgICAqLwotICAvKiBjb250YWluIG5vIGdseXBoIGRhdGEsIGJ1dCBzdXBwbHkgaXQgdmlhIGEgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgKi8KLSAgLyogVGhpcyBpcyByZXF1aXJlZCBieSBjbGllbnRzIHN1cHBvcnRpbmcgZG9jdW1lbnQgZm9ybWF0cyB3aGljaCAgICAgICAgICovCi0gIC8qIHN1cHBseSBmb250IGRhdGEgaW5jcmVtZW50YWxseSBhcyB0aGUgZG9jdW1lbnQgaXMgcGFyc2VkLCBzdWNoICAgICAgICAqLwotICAvKiBhcyB0aGUgR2hvc3RzY3JpcHQgaW50ZXJwcmV0ZXIgZm9yIHRoZSBQb3N0U2NyaXB0IGxhbmd1YWdlLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBbGxvdyB0aGUgdXNlIG9mIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZSB0byBsb2FkIHR5cGVmYWNlcyB0aGF0CisgICAqIGNvbnRhaW4gbm8gZ2x5cGggZGF0YSwgYnV0IHN1cHBseSBpdCB2aWEgYSBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICogVGhpcyBpcyByZXF1aXJlZCBieSBjbGllbnRzIHN1cHBvcnRpbmcgZG9jdW1lbnQgZm9ybWF0cyB3aGljaAorICAgKiBzdXBwbHkgZm9udCBkYXRhIGluY3JlbWVudGFsbHkgYXMgdGhlIGRvY3VtZW50IGlzIHBhcnNlZCwgc3VjaAorICAgKiBhcyB0aGUgR2hvc3RzY3JpcHQgaW50ZXJwcmV0ZXIgZm9yIHRoZSBQb3N0U2NyaXB0IGxhbmd1YWdlLgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KLSAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sIHVzZWQgYnkgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIKKyAgICogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLgorICAgKi8KICNkZWZpbmUgRlRfUkVOREVSX1BPT0xfU0laRSAgMTYzODRMCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX01BWF9NT0RVTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbW9kdWxlcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGluIGEgc2luZ2xlICAgICovCi0gIC8qICAgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICAzMiBpcyB0aGUgZGVmYXVsdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZUX01BWF9NT0RVTEVTCisgICAqCisgICAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG1vZHVsZXMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCBpbiBhIHNpbmdsZQorICAgKiAgIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiAgMzIgaXMgdGhlIGRlZmF1bHQuCisgICAqLwogI2RlZmluZSBGVF9NQVhfTU9EVUxFUyAgMzIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVidWcgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIGNhbiBiZSBjb21waWxlZCBpbiBkZWJ1ZyBvciB0cmFjZSBtb2RlLiAgSW4gZGVidWcgbW9kZSwgICAgKi8KLSAgLyogICBlcnJvcnMgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIGBmdGRlYnVnJyBjb21wb25lbnQuICBJbiB0cmFjZSAgICAgICovCi0gIC8qICAgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZyAgICAqLwotICAvKiAgIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIEZUX0RFQlVHX0xFVkVMX0VSUk9SIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGRlYnVnIG1vZGUuICAgICAqLwotICAvKiAgIERlZmluZSBGVF9ERUJVR19MRVZFTF9UUkFDRSB0byBidWlsZCBpdCBpbiB0cmFjZSBtb2RlLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG9uJ3QgZGVmaW5lIGFueSBvZiB0aGVzZSBtYWNyb3MgdG8gY29tcGlsZSBpbiBgcmVsZWFzZScgbW9kZSEgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEbyBub3QgI3VuZGVmIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lICovCi0gIC8qICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlYnVnIGxldmVsCisgICAqCisgICAqICAgRnJlZVR5cGUgY2FuIGJlIGNvbXBpbGVkIGluIGRlYnVnIG9yIHRyYWNlIG1vZGUuICBJbiBkZWJ1ZyBtb2RlLAorICAgKiAgIGVycm9ycyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgYGZ0ZGVidWcnIGNvbXBvbmVudC4gIEluIHRyYWNlCisgICAqICAgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZworICAgKiAgIGV4ZWN1dGlvbi4KKyAgICoKKyAgICogICBEZWZpbmUgRlRfREVCVUdfTEVWRUxfRVJST1IgdG8gYnVpbGQgdGhlIGxpYnJhcnkgaW4gZGVidWcgbW9kZS4KKyAgICogICBEZWZpbmUgRlRfREVCVUdfTEVWRUxfVFJBQ0UgdG8gYnVpbGQgaXQgaW4gdHJhY2UgbW9kZS4KKyAgICoKKyAgICogICBEb24ndCBkZWZpbmUgYW55IG9mIHRoZXNlIG1hY3JvcyB0byBjb21waWxlIGluIGByZWxlYXNlJyBtb2RlIQorICAgKgorICAgKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUKKyAgICogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuCisgICAqLwogI2RlZmluZSBGVF9ERUJVR19MRVZFTF9FUlJPUgogI2RlZmluZSBGVF9ERUJVR19MRVZFTF9UUkFDRQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBdXRvZml0dGVyIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSWYgRlRfREVCVUdfQVVUT0ZJVCBpcyBkZWZpbmVkLCBGcmVlVHlwZSBwcm92aWRlcyBzb21lIG1lYW5zIHRvICAgICAqLwotICAvKiAgIGNvbnRyb2wgdGhlIGF1dG9maXR0ZXIgYmVoYXZpb3VyIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2l0aCBnbG9iYWwgKi8KLSAgLyogICBib29sZWFuIHZhcmlhYmxlcyAoY29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkICpuZXZlciogZW5hYmxlIHRoaXMgICAgICovCi0gIC8qICAgd2hpbGUgY29tcGlsaW5nIGluIGByZWxlYXNlJyBtb2RlKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIF9hZl9kZWJ1Z19kaXNhYmxlX2hvcnpfaGludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgX2FmX2RlYnVnX2Rpc2FibGVfYmx1ZV9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQWRkaXRpb25hbGx5LCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIGR1bXBzIG9mIHZhcmlvdXMgICAgICAqLwotICAvKiAgIGludGVybmFsIGF1dG9maXQgc3RydWN0dXJlcyB0byBzdGRvdXQgKHVzaW5nIGBwcmludGYnKTogICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZ2V0X3NlZ21lbnRfb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQXMgYW4gYXJndW1lbnQsIHRoZXkgdXNlIGFub3RoZXIgZ2xvYmFsIHZhcmlhYmxlOiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIF9hZl9kZWJ1Z19oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgYGZ0Z3JpZCcgZGVtbyBwcm9ncmFtIHRvIHNlZSBob3cgdGhvc2UgICAgKi8KLSAgLyogICB2YXJpYWJsZXMgYW5kIG1hY3JvcyBzaG91bGQgYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgKi8KLSAgLyogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQXV0b2ZpdHRlciBkZWJ1Z2dpbmcKKyAgICoKKyAgICogICBJZiBGVF9ERUJVR19BVVRPRklUIGlzIGRlZmluZWQsIEZyZWVUeXBlIHByb3ZpZGVzIHNvbWUgbWVhbnMgdG8KKyAgICogICBjb250cm9sIHRoZSBhdXRvZml0dGVyIGJlaGF2aW91ciBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdpdGggZ2xvYmFsCisgICAqICAgYm9vbGVhbiB2YXJpYWJsZXMgKGNvbnNlcXVlbnRseSwgeW91IHNob3VsZCAqbmV2ZXIqIGVuYWJsZSB0aGlzCisgICAqICAgd2hpbGUgY29tcGlsaW5nIGluIGByZWxlYXNlJyBtb2RlKToKKyAgICoKKyAgICogICB7CisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV9ob3J6X2hpbnRzCisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzCisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV9ibHVlX2hpbnRzCisgICAqICAgfQorICAgKgorICAgKiAgIEFkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSBkdW1wcyBvZiB2YXJpb3VzCisgICAqICAgaW50ZXJuYWwgYXV0b2ZpdCBzdHJ1Y3R1cmVzIHRvIHN0ZG91dCAodXNpbmcgYHByaW50ZicpOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQKKyAgICogICB9CisgICAqCisgICAqICAgQXMgYW4gYXJndW1lbnQsIHRoZXkgdXNlIGFub3RoZXIgZ2xvYmFsIHZhcmlhYmxlOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIF9hZl9kZWJ1Z19oaW50cworICAgKiAgIH0KKyAgICoKKyAgICogICBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGBmdGdyaWQnIGRlbW8gcHJvZ3JhbSB0byBzZWUgaG93IHRob3NlCisgICAqICAgdmFyaWFibGVzIGFuZCBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQuCisgICAqCisgICAqICAgRG8gbm90ICN1bmRlZiB0aGVzZSBtYWNyb3MgaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZQorICAgKiAgIHRoZW0gZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KKyAgICovCiAjZGVmaW5lIEZUX0RFQlVHX0FVVE9GSVQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTWVtb3J5IERlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBjb21lcyB3aXRoIGFuIGludGVncmF0ZWQgbWVtb3J5IGRlYnVnZ2VyIHRoYXQgaXMgICAgICAgKi8KLSAgLyogICBjYXBhYmxlIG9mIGRldGVjdGluZyBzaW1wbGUgZXJyb3JzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSAgICAgICovCi0gIC8qICAgZGVsZXRlcy4gIFRvIGNvbXBpbGUgaXQgd2l0aGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHlvdSAgICAgICAqLwotICAvKiAgIHNob3VsZCBkZWZpbmUgRlRfREVCVUdfTUVNT1JZIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBhY3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuICAgICAqLwotICAvKiAgIHdoZW4gdGhlIF9lbnZpcm9ubWVudF8gdmFyaWFibGUgYEZUMl9ERUJVR19NRU1PUlknIGlzIGRlZmluZWQgYWxzbyEgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgICAqLwotICAvKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNZW1vcnkgRGVidWdnaW5nCisgICAqCisgICAqICAgRnJlZVR5cGUgbm93IGNvbWVzIHdpdGggYW4gaW50ZWdyYXRlZCBtZW1vcnkgZGVidWdnZXIgdGhhdCBpcworICAgKiAgIGNhcGFibGUgb2YgZGV0ZWN0aW5nIHNpbXBsZSBlcnJvcnMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgZG91YmxlCisgICAqICAgZGVsZXRlcy4gIFRvIGNvbXBpbGUgaXQgd2l0aGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHlvdQorICAgKiAgIHNob3VsZCBkZWZpbmUgRlRfREVCVUdfTUVNT1JZIGhlcmUuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBhY3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuCisgICAqICAgd2hlbiB0aGUgX2Vudmlyb25tZW50XyB2YXJpYWJsZSBgRlQyX0RFQlVHX01FTU9SWScgaXMgZGVmaW5lZCBhbHNvIQorICAgKgorICAgKiAgIERvIG5vdCAjdW5kZWYgdGhpcyBtYWNybyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lCisgICAqICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KKyAgICovCiAjZGVmaW5lIEZUX0RFQlVHX01FTU9SWQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNb2R1bGUgZXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSWYgdGhpcyBtYWNybyBpcyBzZXQgKHdoaWNoIGlzIF9ub3RfIHRoZSBkZWZhdWx0KSwgdGhlIGhpZ2hlciBieXRlICAqLwotICAvKiAgIG9mIGFuIGVycm9yIGNvZGUgZ2l2ZXMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZXJyb3IgaGFzIG9jY3VycmVkLCAgKi8KLSAgLyogICB3aGlsZSB0aGUgbG93ZXIgYnl0ZSBpcyB0aGUgcmVhbCBlcnJvciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFNldHRpbmcgdGhpcyBtYWNybyBtYWtlcyBzZW5zZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHksIHNpbmNlICAgKi8KLSAgLyogICBpdCB3b3VsZCBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBvZiBjZXJ0YWluIHByb2dyYW1zIHRoYXQgdXNlICAgICovCi0gIC8qICAgRnJlZVR5cGUgMi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlcyBmdG1vZGVyci5oIGFuZCBmdGVycm9ycy5oLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTW9kdWxlIGVycm9ycworICAgKgorICAgKiAgIElmIHRoaXMgbWFjcm8gaXMgc2V0ICh3aGljaCBpcyBfbm90XyB0aGUgZGVmYXVsdCksIHRoZSBoaWdoZXIgYnl0ZQorICAgKiAgIG9mIGFuIGVycm9yIGNvZGUgZ2l2ZXMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZXJyb3IgaGFzIG9jY3VycmVkLAorICAgKiAgIHdoaWxlIHRoZSBsb3dlciBieXRlIGlzIHRoZSByZWFsIGVycm9yIGNvZGUuCisgICAqCisgICAqICAgU2V0dGluZyB0aGlzIG1hY3JvIG1ha2VzIHNlbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSwgc2luY2UKKyAgICogICBpdCB3b3VsZCBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBvZiBjZXJ0YWluIHByb2dyYW1zIHRoYXQgdXNlCisgICAqICAgRnJlZVR5cGUgMi4KKyAgICoKKyAgICogICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlcyBmdG1vZGVyci5oIGFuZCBmdGVycm9ycy5oLgorICAgKi8KICN1bmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBJZiB0aGlzIG1hY3JvIGlzIHNldCAod2hpY2ggaXMgX25vdF8gdGhlIGRlZmF1bHQpLCBGcmVlVHlwZTIgd2lsbCAgICovCi0gIC8qICAgYXZvaWQgY3JlYXRpbmcgY29uc3RhbnRzIHRoYXQgcmVxdWlyZSBhZGRyZXNzIGZpeHVwcy4gIEluc3RlYWQgdGhlICAqLwotICAvKiAgIGNvbnN0YW50cyB3aWxsIGJlIG1vdmVkIGludG8gYSBzdHJ1Y3QgYW5kIGFkZGl0aW9uYWwgaW50aWFsaXphdGlvbiAgKi8KLSAgLyogICBjb2RlIHdpbGwgYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFNldHRpbmcgdGhpcyBtYWNybyBpcyBuZWVkZWQgZm9yIHN5c3RlbXMgdGhhdCBwcm9oaWJpdCBhZGRyZXNzICAgICAgKi8KLSAgLyogICBmaXh1cHMsIHN1Y2ggYXMgQlJFVy4gIFtOb3RlIHRoYXQgc3RhbmRhcmQgY29tcGlsZXJzIGxpa2UgZ2NjIG9yICAgICovCi0gIC8qICAgY2xhbmcgaGFuZGxlIFBJQyBnZW5lcmF0aW9uIGF1dG9tYXRpY2FsbHk7IHlvdSBkb24ndCBoYXZlIHRvIHNldCAgICAqLwotICAvKiAgIEZUX0NPTkZJR19PUFRJT05fUElDLCB3aGljaCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgdmVyeSBzcGVjaWFsICAgICAgKi8KLSAgLyogICBjb21waWxlcnMuXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5vdGUgdGhhdCBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgZm9yIGFsbCAgICAgKi8KLSAgLyogICBtb2R1bGVzIChzZWUgYG1vZHVsZXMuY2ZnJyBmb3IgYSBjb21wbGV0ZSBsaXN0KS4gIEZvciBidWlsZGluZyB3aXRoICovCi0gIC8qICAgRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydCwgZG8gdGhlIGZvbGxvd2luZy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIDAuIENsb25lIHRoZSByZXBvc2l0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAxLiBEZWZpbmUgRlRfQ09ORklHX09QVElPTl9QSUMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgMi4gUmVtb3ZlIGFsbCBzdWJkaXJlY3RvcmllcyBpbiBgc3JjJyB0aGF0IGRvbid0IGhhdmUgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAzLiBDb21tZW50IG91dCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGVzIGluIGBtb2R1bGVzLmNmZycuICAgICAgICAqLwotICAvKiAgICAgNC4gQ29tcGlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLwogICAvKioqKiAgICAgICAgUyBGIE4gVCAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgKioqKi8KQEAgLTUwNSw1MCArNTA2LDYwIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgICAgICAgKi8KLSAgLyogZW1iZWRkZWQgYml0bWFwcyBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgU0ZOVCBtb2R1bGUgKG5hbWVseSAgICAgICAgICovCi0gIC8qIFRydWVUeXBlICYgT3BlblR5cGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgaWYgeW91IHdhbnQgdG8gc3VwcG9ydAorICAgKiBlbWJlZGRlZCBiaXRtYXBzIGluIGFsbCBmb3JtYXRzIHVzaW5nIHRoZSBTRk5UIG1vZHVsZSAobmFtZWx5CisgICAqIFRydWVUeXBlICYgT3BlblR5cGUpLgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byAgICAqLwotICAvKiBsb2FkIGFuZCBlbnVtZXJhdGUgdGhlIGdseXBoIFBvc3RzY3JpcHQgbmFtZXMgaW4gYSBUcnVlVHlwZSBvciAgICAgICAgKi8KLSAgLyogT3BlblR5cGUgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgd2hlbiB5b3UgZG8gbm90IGNvbXBpbGUgdGhlIGBQU05hbWVzJyBtb2R1bGUgYnkgdW5kZWZpbmluZyAgKi8KLSAgLyogdGhlIGFib3ZlIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUywgdGhlIGBzZm50JyBtb2R1bGUgd2lsbCAgICovCi0gIC8qIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHVzZWQgdG8gcmVhZCB0aGUgUFMgTmFtZXMgdGFibGUgZnJvbSBhIGZvbnQuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogKEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgdXNlcyBgUFNOYW1lcycgdG8gZXh0cmFjdCBnbHlwaCBuYW1lcy4pICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY29sb3VyZWQKKyAgICogb3V0bGluZXMgKGZyb20gdGhlIENPTFIvQ1BBTCB0YWJsZXMpIGluIGFsbCBmb3JtYXRzIHVzaW5nIHRoZSBTRk5UCisgICAqIG1vZHVsZSAobmFtZWx5IFRydWVUeXBlICYgT3BlblR5cGUpLgorICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8KKyAgICogbG9hZCBhbmQgZW51bWVyYXRlIHRoZSBnbHlwaCBQb3N0c2NyaXB0IG5hbWVzIGluIGEgVHJ1ZVR5cGUgb3IKKyAgICogT3BlblR5cGUgZmlsZS4KKyAgICoKKyAgICogTm90ZSB0aGF0IHdoZW4geW91IGRvIG5vdCBjb21waWxlIHRoZSBgUFNOYW1lcycgbW9kdWxlIGJ5IHVuZGVmaW5pbmcKKyAgICogdGhlIGFib3ZlIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUywgdGhlIGBzZm50JyBtb2R1bGUgd2lsbAorICAgKiBjb250YWluIGFkZGl0aW9uYWwgY29kZSB1c2VkIHRvIHJlYWQgdGhlIFBTIE5hbWVzIHRhYmxlIGZyb20gYSBmb250LgorICAgKgorICAgKiAoQnkgZGVmYXVsdCwgdGhlIG1vZHVsZSB1c2VzIGBQU05hbWVzJyB0byBleHRyYWN0IGdseXBoIG5hbWVzLikKKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTIGlmIHlvdXIgYXBwbGljYXRpb25zIG5lZWQgdG8gICAgICAgKi8KLSAgLyogYWNjZXNzIHRoZSBpbnRlcm5hbCBuYW1lIHRhYmxlIGluIGEgU0ZOVC1iYXNlZCBmb3JtYXQgbGlrZSBUcnVlVHlwZSAgICovCi0gIC8qIG9yIE9wZW5UeXBlLiAgVGhlIG5hbWUgdGFibGUgY29udGFpbnMgdmFyaW91cyBzdHJpbmdzIHVzZWQgdG8gICAgICAgICAqLwotICAvKiBkZXNjcmliZSB0aGUgZm9udCwgbGlrZSBmYW1pbHkgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuICBJdCAgICAgKi8KLSAgLyogZG9lcyBub3QgY29udGFpbiBhbnkgZ2x5cGggbmFtZSB0aG91Z2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBY2Nlc3NpbmcgU0ZOVCBuYW1lcyBpcyBkb25lIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAgICAgICAgKi8KLSAgLyogYGZ0c25hbWVzLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUyBpZiB5b3VyIGFwcGxpY2F0aW9ucyBuZWVkIHRvCisgICAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgbmFtZSB0YWJsZSBpbiBhIFNGTlQtYmFzZWQgZm9ybWF0IGxpa2UgVHJ1ZVR5cGUKKyAgICogb3IgT3BlblR5cGUuICBUaGUgbmFtZSB0YWJsZSBjb250YWlucyB2YXJpb3VzIHN0cmluZ3MgdXNlZCB0bworICAgKiBkZXNjcmliZSB0aGUgZm9udCwgbGlrZSBmYW1pbHkgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuICBJdAorICAgKiBkb2VzIG5vdCBjb250YWluIGFueSBnbHlwaCBuYW1lIHRob3VnaC4KKyAgICoKKyAgICogQWNjZXNzaW5nIFNGTlQgbmFtZXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4KKyAgICogYGZ0c25hbWVzLmgnLgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRydWVUeXBlIENNYXAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBIZXJlIHlvdSBjYW4gZmluZS10dW5lIHdoaWNoIFRydWVUeXBlIENNYXAgdGFibGUgZm9ybWF0IHNoYWxsIGJlICAgICovCi0gIC8qICAgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVHJ1ZVR5cGUgQ01hcCBzdXBwb3J0CisgICAqCisgICAqICAgSGVyZSB5b3UgY2FuIGZpbmUtdHVuZSB3aGljaCBUcnVlVHlwZSBDTWFwIHRhYmxlIGZvcm1hdCBzaGFsbCBiZQorICAgKiAgIHN1cHBvcnRlZC4KKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8wCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8yCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF80CkBAIC01NjgsMTIyICs1NzksMTMxIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgICAqLwotICAvKiBhIGJ5dGVjb2RlIGludGVycHJldGVyIGluIHRoZSBUcnVlVHlwZSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEJ5IHVuZGVmaW5pbmcgdGhpcywgeW91IHdpbGwgb25seSBjb21waWxlIHRoZSBjb2RlIG5lY2Vzc2FyeSB0byBsb2FkICAqLwotICAvKiBUcnVlVHlwZSBnbHlwaHMgd2l0aG91dCBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUsIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgICAgICAgICAqLwotICAvKiAgIGRlZmluZSBpdCBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiBpZiB5b3Ugd2FudCB0byBjb21waWxlCisgICAqIGEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaW4gdGhlIFRydWVUeXBlIGRyaXZlci4KKyAgICoKKyAgICogQnkgdW5kZWZpbmluZyB0aGlzLCB5b3Ugd2lsbCBvbmx5IGNvbXBpbGUgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGxvYWQKKyAgICogVHJ1ZVR5cGUgZ2x5cGhzIHdpdGhvdXQgaGludGluZy4KKyAgICoKKyAgICogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSwgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodAorICAgKiAgIGRlZmluZSBpdCBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgICAgICAgKi8KLSAgLyogc3VicGl4ZWwgaGludGluZyBzdXBwb3J0IGludG8gdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoaXMgbW9kaWZpZXMgdGhlICovCi0gIC8qIFRydWVUeXBlIGhpbnRpbmcgbWVjaGFuaXNtIHdoZW4gYW55dGhpbmcgYnV0IEZUX1JFTkRFUl9NT0RFX01PTk8gaXMgICAqLwotICAvKiByZXF1ZXN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEluIHBhcnRpY3VsYXIsIGl0IG1vZGlmaWVzIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciB0byBpbnRlcnByZXQgKG9yICAqLwotICAvKiBub3QpIGluc3RydWN0aW9ucyBpbiBhIGNlcnRhaW4gd2F5IHNvIHRoYXQgYWxsIFRydWVUeXBlIGZvbnRzIGxvb2sgICAgKi8KLSAgLyogbGlrZSB0aGV5IGRvIGluIGEgV2luZG93cyBDbGVhclR5cGUgKERpcmVjdFdyaXRlKSBlbnZpcm9ubWVudC4gIFNlZSAgICovCi0gIC8qIFsxXSBmb3IgYSB0ZWNobmljYWwgb3ZlcnZpZXcgb24gd2hhdCB0aGlzIG1lYW5zLiAgU2VlIGB0dGludGVycC5oJyAgICAqLwotICAvKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBMRUFOIG9wdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXJlIGFyZSB0aHJlZSBvcHRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogMS4gVGhpcyBvcHRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgSW5maW5hbGl0eScgbW9uaWtlci4gICAgICAgICAgICovCi0gIC8qICAgIENvbnRyaWJ1dGVkIGJ5IGFuIGluZGl2aWR1YWwgbmlja25hbWVkIEluZmluYWxpdHkgd2l0aCB0aGUgZ29hbCBvZiAqLwotICAvKiAgICBtYWtpbmcgVHJ1ZVR5cGUgZm9udHMgcmVuZGVyIGJldHRlciB0aGFuIG9uIFdpbmRvd3MuICBBIGhpZ2ggICAgICAgKi8KLSAgLyogICAgYW1vdW50IG9mIGNvbmZpZ3VyYWJpbGl0eSBhbmQgZmxleGliaWxpdHksIGRvd24gdG8gcnVsZXMgZm9yICAgICAgICovCi0gIC8qICAgIHNpbmdsZSBnbHlwaHMgaW4gZm9udHMsIGJ1dCBhbHNvIHZlcnkgc2xvdy4gIEl0cyBleHBlcmltZW50YWwgYW5kICAqLwotICAvKiAgICBzbG93IG5hdHVyZSBhbmQgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBsb3NpbmcgaW50ZXJlc3QgbWVhbnQgdGhhdCAgKi8KLSAgLyogICAgdGhpcyBvcHRpb24gd2FzIG5ldmVyIGVuYWJsZWQgaW4gZGVmYXVsdCBidWlsZHMuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAyLiBUaGUgbmV3IGRlZmF1bHQgbW9kZSBmb3IgdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoZSBJbmZpbmFsaXR5IGNvZGUgKi8KLSAgLyogICAgYmFzZSB3YXMgc3RyaXBwZWQgdG8gdGhlIGJhcmUgbWluaW11bSBhbmQgYWxsIGNvbmZpZ3VyYWJpbGl0eSAgICAgICovCi0gIC8qICAgIHJlbW92ZWQgaW4gdGhlIG5hbWUgb2Ygc3BlZWQgYW5kIHNpbXBsaWNpdHkuICBUaGUgY29uZmlndXJhYmlsaXR5ICAqLwotICAvKiAgICB3YXMgbWFpbmx5IGFpbWVkIGF0IGxlZ2FjeSBmb250cyBsaWtlIEFyaWFsLCBUaW1lcyBOZXcgUm9tYW4sIG9yICAgKi8KLSAgLyogICAgQ291cmllci4gIExlZ2FjeSBmb250cyBhcmUgZm9udHMgdGhhdCBtb2RpZnkgdmVydGljYWwgc3RlbXMgdG8gICAgICovCi0gIC8qICAgIGFjaGlldmUgY2xlYW4gYmxhY2stYW5kLXdoaXRlIGJpdG1hcHMuICBUaGUgbmV3IG1vZGUgZm9jdXNlcyBvbiAgICAqLwotICAvKiAgICBhcHBseWluZyBhIG1pbmltYWwgc2V0IG9mIHJ1bGVzIHRvIGFsbCBmb250cyBpbmRpc2NyaW1pbmF0ZWx5IHNvICAgKi8KLSAgLyogICAgdGhhdCBtb2Rlcm4gYW5kIHdlYiBmb250cyByZW5kZXIgd2VsbCB3aGlsZSBsZWdhY3kgZm9udHMgcmVuZGVyICAgICovCi0gIC8qICAgIG9rYXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogMy4gQ29tcGlsZSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCeSB1bmRlZmluaW5nIHRoZXNlLCB5b3UgZ2V0IHJlbmRlcmluZyBiZWhhdmlvciBsaWtlIG9uIFdpbmRvd3MgICAgICAgKi8KLSAgLyogd2l0aG91dCBDbGVhclR5cGUsIGkuZS4sIFdpbmRvd3MgWFAgd2l0aG91dCBDbGVhclR5cGUgZW5hYmxlZCBhbmQgICAgICovCi0gIC8qIFdpbjl4IChpbnRlcnByZXRlciB2ZXJzaW9uIHYzNSkuICBPciBub3QsIGRlcGVuZGluZyBvbiBob3cgbXVjaCAgICAgICAqLwotICAvKiBoaW50aW5nIGJsb29kIGFuZCB0ZXN0aW5nIHRlYXJzIHRoZSBmb250IGRlc2lnbmVyIHB1dCBpbnRvIGEgZ2l2ZW4gICAgKi8KLSAgLyogZm9udC4gIElmIHlvdSBkZWZpbmUgb25lIG9yIGJvdGggc3VicGl4ZWwgaGludGluZyBvcHRpb25zLCB5b3UgY2FuICAgICovCi0gIC8qIHN3aXRjaCBiZXR3ZWVuIGJldHdlZW4gdjM1IGFuZCB0aGUgb25lcyB5b3UgZGVmaW5lLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBvcHRpb24gcmVxdWlyZXMgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiB0byBiZSAgICAgICovCi0gIC8qIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWzFdIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaWYgeW91IHdhbnQgdG8gY29tcGlsZQorICAgKiBzdWJwaXhlbCBoaW50aW5nIHN1cHBvcnQgaW50byB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhpcyBtb2RpZmllcyB0aGUKKyAgICogVHJ1ZVR5cGUgaGludGluZyBtZWNoYW5pc20gd2hlbiBhbnl0aGluZyBidXQgRlRfUkVOREVSX01PREVfTU9OTyBpcworICAgKiByZXF1ZXN0ZWQuCisgICAqCisgICAqIEluIHBhcnRpY3VsYXIsIGl0IG1vZGlmaWVzIHRoZSBieXRlY29kZSBpbnRlcnByZXRlciB0byBpbnRlcnByZXQgKG9yCisgICAqIG5vdCkgaW5zdHJ1Y3Rpb25zIGluIGEgY2VydGFpbiB3YXkgc28gdGhhdCBhbGwgVHJ1ZVR5cGUgZm9udHMgbG9vaworICAgKiBsaWtlIHRoZXkgZG8gaW4gYSBXaW5kb3dzIENsZWFyVHlwZSAoRGlyZWN0V3JpdGUpIGVudmlyb25tZW50LiAgU2VlCisgICAqIFsxXSBmb3IgYSB0ZWNobmljYWwgb3ZlcnZpZXcgb24gd2hhdCB0aGlzIG1lYW5zLiAgU2VlIGB0dGludGVycC5oJworICAgKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBMRUFOIG9wdGlvbi4KKyAgICoKKyAgICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhbHVlcy4KKyAgICoKKyAgICogVmFsdWUgMToKKyAgICogICBUaGlzIHZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYEluZmluYWxpdHknIG1vbmlrZXIsCisgICAqICAgY29udHJpYnV0ZWQgYnkgYW4gaW5kaXZpZHVhbCBuaWNrbmFtZWQgSW5maW5hbGl0eSB3aXRoIHRoZSBnb2FsIG9mCisgICAqICAgbWFraW5nIFRydWVUeXBlIGZvbnRzIHJlbmRlciBiZXR0ZXIgdGhhbiBvbiBXaW5kb3dzLiAgQSBoaWdoCisgICAqICAgYW1vdW50IG9mIGNvbmZpZ3VyYWJpbGl0eSBhbmQgZmxleGliaWxpdHksIGRvd24gdG8gcnVsZXMgZm9yCisgICAqICAgc2luZ2xlIGdseXBocyBpbiBmb250cywgYnV0IGFsc28gdmVyeSBzbG93LiAgSXRzIGV4cGVyaW1lbnRhbCBhbmQKKyAgICogICBzbG93IG5hdHVyZSBhbmQgdGhlIG9yaWdpbmFsIGRldmVsb3BlciBsb3NpbmcgaW50ZXJlc3QgbWVhbnQgdGhhdAorICAgKiAgIHRoaXMgb3B0aW9uIHdhcyBuZXZlciBlbmFibGVkIGluIGRlZmF1bHQgYnVpbGRzLgorICAgKgorICAgKiAgIFRoZSBjb3JyZXNwb25kaW5nIGludGVycHJldGVyIHZlcnNpb24gaXMgdjM4LgorICAgKgorICAgKiBWYWx1ZSAyOgorICAgKiAgIFRoZSBuZXcgZGVmYXVsdCBtb2RlIGZvciB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhlIEluZmluYWxpdHkgY29kZQorICAgKiAgIGJhc2Ugd2FzIHN0cmlwcGVkIHRvIHRoZSBiYXJlIG1pbmltdW0gYW5kIGFsbCBjb25maWd1cmFiaWxpdHkKKyAgICogICByZW1vdmVkIGluIHRoZSBuYW1lIG9mIHNwZWVkIGFuZCBzaW1wbGljaXR5LiAgVGhlIGNvbmZpZ3VyYWJpbGl0eQorICAgKiAgIHdhcyBtYWlubHkgYWltZWQgYXQgbGVnYWN5IGZvbnRzIGxpa2UgQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgb3IKKyAgICogICBDb3VyaWVyLiAgTGVnYWN5IGZvbnRzIGFyZSBmb250cyB0aGF0IG1vZGlmeSB2ZXJ0aWNhbCBzdGVtcyB0bworICAgKiAgIGFjaGlldmUgY2xlYW4gYmxhY2stYW5kLXdoaXRlIGJpdG1hcHMuICBUaGUgbmV3IG1vZGUgZm9jdXNlcyBvbgorICAgKiAgIGFwcGx5aW5nIGEgbWluaW1hbCBzZXQgb2YgcnVsZXMgdG8gYWxsIGZvbnRzIGluZGlzY3JpbWluYXRlbHkgc28KKyAgICogICB0aGF0IG1vZGVybiBhbmQgd2ViIGZvbnRzIHJlbmRlciB3ZWxsIHdoaWxlIGxlZ2FjeSBmb250cyByZW5kZXIKKyAgICogICBva2F5LgorICAgKgorICAgKiAgIFRoZSBjb3JyZXNwb25kaW5nIGludGVycHJldGVyIHZlcnNpb24gaXMgdjQwLgorICAgKgorICAgKiBWYWx1ZSAzOgorICAgKiAgIENvbXBpbGUgYm90aCwgbWFraW5nIGJvdGggdjM4IGFuZCB2NDAgYXZhaWxhYmxlICh0aGUgbGF0dGVyIGlzIHRoZQorICAgKiAgIGRlZmF1bHQpLgorICAgKgorICAgKiBCeSB1bmRlZmluaW5nIHRoZXNlLCB5b3UgZ2V0IHJlbmRlcmluZyBiZWhhdmlvciBsaWtlIG9uIFdpbmRvd3MKKyAgICogd2l0aG91dCBDbGVhclR5cGUsIGkuZS4sIFdpbmRvd3MgWFAgd2l0aG91dCBDbGVhclR5cGUgZW5hYmxlZCBhbmQKKyAgICogV2luOXggKGludGVycHJldGVyIHZlcnNpb24gdjM1KS4gIE9yIG5vdCwgZGVwZW5kaW5nIG9uIGhvdyBtdWNoCisgICAqIGhpbnRpbmcgYmxvb2QgYW5kIHRlc3RpbmcgdGVhcnMgdGhlIGZvbnQgZGVzaWduZXIgcHV0IGludG8gYSBnaXZlbgorICAgKiBmb250LiAgSWYgeW91IGRlZmluZSBvbmUgb3IgYm90aCBzdWJwaXhlbCBoaW50aW5nIG9wdGlvbnMsIHlvdSBjYW4KKyAgICogc3dpdGNoIGJldHdlZW4gYmV0d2VlbiB2MzUgYW5kIHRoZSBvbmVzIHlvdSBkZWZpbmUgKHVzaW5nCisgICAqIGBGVF9Qcm9wZXJ0eV9TZXQnKS4KKyAgICoKKyAgICogVGhpcyBvcHRpb24gcmVxdWlyZXMgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiB0byBiZQorICAgKiBkZWZpbmVkLgorICAgKgorICAgKiBbMV0gaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4CisgICAqLwogLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgIDEgICAgICovCiAvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgMiAgICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICAgICAoIDEgfCAyICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQgdG8gY29tcGlsZSB0aGUgICAgICAgICovCi0gIC8qIFRydWVUeXBlIGdseXBoIGxvYWRlciB0byB1c2UgQXBwbGUncyBkZWZpbml0aW9uIG9mIGhvdyB0byBoYW5kbGUgICAgICAqLwotICAvKiBjb21wb25lbnQgb2Zmc2V0cyBpbiBjb21wb3NpdGUgZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFwcGxlIGFuZCBNUyBkaXNhZ3JlZSBvbiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjb21wb25lbnQgb2Zmc2V0cyAgICAqLwotICAvKiBpbiBjb21wb3NpdGVzLiAgQXBwbGUgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHNjYWxlZCBieSB0aGUgc2NhbGluZyAgKi8KLSAgLyogZmFjdG9ycyBpbiB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChyb3VnaGx5LCBpdCdzIG1vcmUgY29tcGxleCkgICAgICovCi0gIC8qIHdoaWxlIE1TIHNheXMgdGhleSBzaG91bGQgbm90LiAgT3BlblR5cGUgZGVmaW5lcyB0d28gYml0cyBpbiB0aGUgICAgICAqLwotICAvKiBjb21wb3NpdGUgZmxhZ3MgYXJyYXkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGlzYW1iaWd1YXRlLCBidXQgb2xkICAgICAgKi8KLSAgLyogZm9udHMgd2lsbCBub3QgaGF2ZSB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvZ2x5Zi5odG0gICAgICAgICAgICAgICAgKi8KLSAgLyogICBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvVHJ1ZVR5cGUtUmVmZXJlbmNlLU1hbnVhbC9STTA2L0NoYXA2Z2x5Zi5odG1sICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQgdG8gY29tcGlsZSB0aGUKKyAgICogVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIHRvIHVzZSBBcHBsZSdzIGRlZmluaXRpb24gb2YgaG93IHRvIGhhbmRsZQorICAgKiBjb21wb25lbnQgb2Zmc2V0cyBpbiBjb21wb3NpdGUgZ2x5cGhzLgorICAgKgorICAgKiBBcHBsZSBhbmQgTVMgZGlzYWdyZWUgb24gdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgY29tcG9uZW50IG9mZnNldHMKKyAgICogaW4gY29tcG9zaXRlcy4gIEFwcGxlIHNheXMgdGhhdCB0aGV5IHNob3VsZCBiZSBzY2FsZWQgYnkgdGhlIHNjYWxpbmcKKyAgICogZmFjdG9ycyBpbiB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IChyb3VnaGx5LCBpdCdzIG1vcmUgY29tcGxleCkKKyAgICogd2hpbGUgTVMgc2F5cyB0aGV5IHNob3VsZCBub3QuICBPcGVuVHlwZSBkZWZpbmVzIHR3byBiaXRzIGluIHRoZQorICAgKiBjb21wb3NpdGUgZmxhZ3MgYXJyYXkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGlzYW1iaWd1YXRlLCBidXQgb2xkCisgICAqIGZvbnRzIHdpbGwgbm90IGhhdmUgdGhlbS4KKyAgICoKKyAgICogICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtCisgICAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmdseWYuaHRtbAorICAgKi8KICN1bmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTVBPTkVOVF9PRkZTRVRfU0NBTEVECiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgICAgICAgICAqLwotICAvKiBzdXBwb3J0IGZvciBBcHBsZSdzIGRpc3RvcnRhYmxlIGZvbnQgdGVjaG5vbG9neSAoZnZhciwgZ3ZhciwgY3ZhciwgICAgKi8KLSAgLyogYW5kIGF2YXIgdGFibGVzKS4gIFRoaXMgaGFzIG1hbnkgc2ltaWxhcml0aWVzIHRvIFR5cGUgMSBNdWx0aXBsZSAgICAgICovCi0gIC8qIE1hc3RlcnMgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUKKyAgICogc3VwcG9ydCBmb3IgQXBwbGUncyBkaXN0b3J0YWJsZSBmb250IHRlY2hub2xvZ3kgKGZ2YXIsIGd2YXIsIGN2YXIsCisgICAqIGFuZCBhdmFyIHRhYmxlcykuICBUaGlzIGhhcyBtYW55IHNpbWlsYXJpdGllcyB0byBUeXBlIDEgTXVsdGlwbGUKKyAgICogTWFzdGVycyBzdXBwb3J0LgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9CREYgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciAgICAgICAgKi8KLSAgLyogYW4gZW1iZWRkZWQgYEJERiAnIHRhYmxlIHdpdGhpbiBTRk5ULWJhc2VkIGJpdG1hcCBmb3JtYXRzLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQkRGIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IKKyAgICogYW4gZW1iZWRkZWQgYEJERiAnIHRhYmxlIHdpdGhpbiBTRk5ULWJhc2VkIGJpdG1hcCBmb3JtYXRzLgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CREYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3B0aW9uIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgY29udHJvbHMgdGhlIG1heGltdW0gICAgICovCi0gIC8qIG51bWJlciBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgZm9yIGEgc2luZ2xlIHJ1biBvZiB0aGUgICAgICAqLwotICAvKiBieXRlY29kZSBpbnRlcnByZXRlciwgbmVlZGVkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuICBZb3UgZG9uJ3QgICAgKi8KLSAgLyogd2FudCB0byBjaGFuZ2UgdGhpcyBleGNlcHQgZm9yIHZlcnkgc3BlY2lhbCBzaXR1YXRpb25zIChlLmcuLCBtYWtpbmcgICovCi0gIC8qIGEgbGlicmFyeSBmdXp6ZXIgc3BlbmQgbGVzcyB0aW1lIHRvIGhhbmRsZSBicm9rZW4gZm9udHMpLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSXQgaXMgbm90IGV4cGVjdGVkIHRoYXQgdGhpcyB2YWx1ZSBpcyBldmVyIG1vZGlmaWVkIGJ5IGEgY29uZmlndXJpbmcgICovCi0gIC8qIHNjcmlwdDsgaW5zdGVhZCwgaXQgZ2V0cyBzdXJyb3VuZGVkIHdpdGggI2lmbmRlZiAuLi4gI2VuZGlmIHNvIHRoYXQgICAqLwotICAvKiB0aGUgdmFsdWUgY2FuIGJlIHNldCBhcyBhIHByZXByb2Nlc3NvciBvcHRpb24gb24gdGhlIGNvbXBpbGVyJ3MgICAgICAgKi8KLSAgLyogY29tbWFuZCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogT3B0aW9uIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgY29udHJvbHMgdGhlIG1heGltdW0KKyAgICogbnVtYmVyIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBleGVjdXRlZCBmb3IgYSBzaW5nbGUgcnVuIG9mIHRoZQorICAgKiBieXRlY29kZSBpbnRlcnByZXRlciwgbmVlZGVkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuICBZb3UgZG9uJ3QKKyAgICogd2FudCB0byBjaGFuZ2UgdGhpcyBleGNlcHQgZm9yIHZlcnkgc3BlY2lhbCBzaXR1YXRpb25zIChlLmcuLCBtYWtpbmcKKyAgICogYSBsaWJyYXJ5IGZ1enplciBzcGVuZCBsZXNzIHRpbWUgdG8gaGFuZGxlIGJyb2tlbiBmb250cykuCisgICAqCisgICAqIEl0IGlzIG5vdCBleHBlY3RlZCB0aGF0IHRoaXMgdmFsdWUgaXMgZXZlciBtb2RpZmllZCBieSBhIGNvbmZpZ3VyaW5nCisgICAqIHNjcmlwdDsgaW5zdGVhZCwgaXQgZ2V0cyBzdXJyb3VuZGVkIHdpdGggI2lmbmRlZiAuLi4gI2VuZGlmIHNvIHRoYXQKKyAgICogdGhlIHZhbHVlIGNhbiBiZSBzZXQgYXMgYSBwcmVwcm9jZXNzb3Igb3B0aW9uIG9uIHRoZSBjb21waWxlcidzCisgICAqIGNvbW1hbmQgbGluZS4KKyAgICovCiAjaWZuZGVmIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMKICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9NQVhfUlVOTkFCTEVfT1BDT0RFUyAgMTAwMDAwMEwKICNlbmRpZgpAQCAtNjk4LDU5ICs3MTgsNTkgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX01BWF9ESUNUX0RFUFRIIGlzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3QgZGljdGlvbmFyaWVzIGFuZCAgICAgICAqLwotICAvKiBhcnJheXMgaW4gdGhlIFR5cGUgMSBzdHJlYW0gKHNlZSB0MWxvYWQuYykuICBBIG1pbmltdW0gb2YgNCBpcyAgICAgICAgKi8KLSAgLyogcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVDFfTUFYX0RJQ1RfREVQVEggaXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdCBkaWN0aW9uYXJpZXMgYW5kCisgICAqIGFycmF5cyBpbiB0aGUgVHlwZSAxIHN0cmVhbSAoc2VlIHQxbG9hZC5jKS4gIEEgbWluaW11bSBvZiA0IGlzCisgICAqIHJlcXVpcmVkLgorICAgKi8KICNkZWZpbmUgVDFfTUFYX0RJQ1RfREVQVEggIDUKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVDFfTUFYX1NVQlJTX0NBTExTIGRldGFpbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5lc3RlZCBzdWItcm91dGluZSAgICovCi0gIC8qIGNhbGxzIGR1cmluZyBnbHlwaCBsb2FkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFQxX01BWF9TVUJSU19DQUxMUyBkZXRhaWxzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgc3ViLXJvdXRpbmUKKyAgICogY2FsbHMgZHVyaW5nIGdseXBoIGxvYWRpbmcuCisgICAqLwogI2RlZmluZSBUMV9NQVhfU1VCUlNfQ0FMTFMgIDE2CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX01BWF9DSEFSU1RSSU5HX09QRVJBTkRTIGlzIHRoZSBjaGFyc3RyaW5nIHN0YWNrJ3MgY2FwYWNpdHkuICBBICAgICAqLwotICAvKiBtaW5pbXVtIG9mIDE2IGlzIHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBDaGluZXNlIGZvbnQgTWluZ1RpRUctTWVkaXVtIChDTlMgMTE2NDMgY2hhcmFjdGVyIHNldCkgbmVlZHMgMjU2LiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFQxX01BWF9DSEFSU1RSSU5HX09QRVJBTkRTIGlzIHRoZSBjaGFyc3RyaW5nIHN0YWNrJ3MgY2FwYWNpdHkuICBBCisgICAqIG1pbmltdW0gb2YgMTYgaXMgcmVxdWlyZWQuCisgICAqCisgICAqIFRoZSBDaGluZXNlIGZvbnQgTWluZ1RpRUctTWVkaXVtIChDTlMgMTE2NDMgY2hhcmFjdGVyIHNldCkgbmVlZHMgMjU2LgorICAgKi8KICNkZWZpbmUgVDFfTUFYX0NIQVJTVFJJTkdTX09QRVJBTkRTICAyNTYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSAgICAgICAgICAgICovCi0gIC8qIGNvbXBpbGF0aW9uIG9mIGB0MWFmbScsIHdoaWNoIGlzIGluIGNoYXJnZSBvZiByZWFkaW5nIFR5cGUgMSBBRk0gICAgICAqLwotICAvKiBmaWxlcyBpbnRvIGFuIGV4aXN0aW5nIGZhY2UuICBOb3RlIHRoYXQgaWYgc2V0LCB0aGUgVDEgZHJpdmVyIHdpbGwgYmUgKi8KLSAgLyogdW5hYmxlIHRvIHByb2R1Y2Uga2VybmluZyBkaXN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZQorICAgKiBjb21waWxhdGlvbiBvZiBgdDFhZm0nLCB3aGljaCBpcyBpbiBjaGFyZ2Ugb2YgcmVhZGluZyBUeXBlIDEgQUZNCisgICAqIGZpbGVzIGludG8gYW4gZXhpc3RpbmcgZmFjZS4gIE5vdGUgdGhhdCBpZiBzZXQsIHRoZSBUMSBkcml2ZXIgd2lsbCBiZQorICAgKiB1bmFibGUgdG8gcHJvZHVjZSBrZXJuaW5nIGRpc3RhbmNlcy4KKyAgICovCiAjdW5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZSAgICAgICAgICAgICovCi0gIC8qIGNvbXBpbGF0aW9uIG9mIHRoZSBNdWx0aXBsZSBNYXN0ZXJzIGZvbnQgc3VwcG9ydCBpbiB0aGUgVHlwZSAxICAgICAgICAqLwotICAvKiBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlCisgICAqIGNvbXBpbGF0aW9uIG9mIHRoZSBNdWx0aXBsZSBNYXN0ZXJzIGZvbnQgc3VwcG9ydCBpbiB0aGUgVHlwZSAxCisgICAqIGRyaXZlci4KKyAgICovCiAjdW5kZWYgVDFfQ09ORklHX09QVElPTl9OT19NTV9TVVBQT1JUCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBjb250cm9scyB3aGV0aGVyIHRoZSBwcmUtQWRvYmUgVHlwZSAxICAgICAqLwotICAvKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8gICAgKi8KLSAgLyogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mICovCi0gIC8qIHRoZSB0eXBlMSBkcml2ZXIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBjb250cm9scyB3aGV0aGVyIHRoZSBwcmUtQWRvYmUgVHlwZSAxCisgICAqIGVuZ2luZSBnZXRzIGNvbXBpbGVkIGludG8gRnJlZVR5cGUuICBJZiBkZWZpbmVkLCBpdCBpcyBwb3NzaWJsZSB0bworICAgKiBzd2l0Y2ggYmV0d2VlbiB0aGUgdHdvIGVuZ2luZXMgdXNpbmcgdGhlIGBoaW50aW5nLWVuZ2luZScgcHJvcGVydHkgb2YKKyAgICogdGhlIHR5cGUxIGRyaXZlciBtb2R1bGUuCisgICAqLwogI2RlZmluZSBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKIAogCkBAIC03NjMsMTcgKzc4MywxNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVXNpbmcgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl97WCxZfXsxLDIsMyw0fSBpdCBpcyAgICAgICovCi0gIC8qIHBvc3NpYmxlIHRvIHNldCB1cCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGZvdXIgY29udHJvbCBwb2ludHMgdGhhdCAqLwotICAvKiBkZWZpbmUgdGhlIHN0ZW0gZGFya2VuaW5nIGJlaGF2aW91ciBvZiB0aGUgKG5ldykgQ0ZGIGVuZ2luZS4gIEZvciAgICAgKi8KLSAgLyogbW9yZSBkZXRhaWxzIHBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIGBkYXJrZW5pbmctcGFyYW1ldGVycycgcHJvcGVydHkgb2YgdGhlIGNmZiBkcml2ZXIgbW9kdWxlIChmaWxlICAgICAgICAqLwotICAvKiBgZnRjZmZkcnYuaCcpLCB3aGljaCBhbGxvd3MgdGhlIGNvbnRyb2wgYXQgcnVuLXRpbWUuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERvICpub3QqIHVuZGVmaW5lIHRoZXNlIG1hY3JvcyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFVzaW5nIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfe1gsWX17MSwyLDMsNH0gaXQgaXMKKyAgICogcG9zc2libGUgdG8gc2V0IHVwIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgZm91ciBjb250cm9sIHBvaW50cyB0aGF0CisgICAqIGRlZmluZSB0aGUgc3RlbSBkYXJrZW5pbmcgYmVoYXZpb3VyIG9mIHRoZSAobmV3KSBDRkYgZW5naW5lLiAgRm9yCisgICAqIG1vcmUgZGV0YWlscyBwbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKKyAgICogYGRhcmtlbmluZy1wYXJhbWV0ZXJzJyBwcm9wZXJ0eSAoZmlsZSBgZnRkcml2ZXIuaCcpLCB3aGljaCBhbGxvd3MgdGhlCisgICAqIGNvbnRyb2wgYXQgcnVuLXRpbWUuCisgICAqCisgICAqIERvICpub3QqIHVuZGVmaW5lIHRoZXNlIG1hY3JvcyEKKyAgICovCiAjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDEgICA1MDAKICNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZMSAgIDQwMAogCkBAIC03ODcsMTMgKzgwNywxMyBAQAogI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0ICAgICAwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIENGRiAgICAgICAqLwotICAvKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8gICAgKi8KLSAgLyogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mICovCi0gIC8qIHRoZSBjZmYgZHJpdmVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIENGRgorICAgKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8KKyAgICogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mCisgICAqIHRoZSBjZmYgZHJpdmVyIG1vZHVsZS4KKyAgICovCiAjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKIAogCkBAIC04MDYsMjEgKzgyNiwyMSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlcmUgYXJlIG1hbnkgUENGIGZvbnRzIGp1c3QgY2FsbGVkIGBGaXhlZCcgd2hpY2ggbG9vayBjb21wbGV0ZWx5ICAgICovCi0gIC8qIGRpZmZlcmVudCwgYW5kIHdoaWNoIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGVhY2ggb3RoZXIuICBXaGVuICAgICAgICAqLwotICAvKiBzZWxlY3RpbmcgYEZpeGVkJyBpbiBLREUgb3IgR25vbWUgb25lIGdldHMgcmVzdWx0cyB0aGF0IGFwcGVhciByYXRoZXIgKi8KLSAgLyogcmFuZG9tLCB0aGUgc3R5bGUgY2hhbmdlcyBvZnRlbiBpZiBvbmUgY2hhbmdlcyB0aGUgc2l6ZSBhbmQgb25lICAgICAgICovCi0gIC8qIGNhbm5vdCBzZWxlY3Qgc29tZSBmb250cyBhdCBhbGwuICBUaGlzIG9wdGlvbiBtYWtlcyB0aGUgUENGIG1vZHVsZSAgICAqLwotICAvKiBwcmVwZW5kIHRoZSBmb3VuZHJ5IG5hbWUgKHBsdXMgYSBzcGFjZSkgdG8gdGhlIGZhbWlseSBuYW1lLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFdlIGFsc28gY2hlY2sgd2hldGhlciB3ZSBoYXZlIGB3aWRlJyBjaGFyYWN0ZXJzOyBhbGwgcHV0IHRvZ2V0aGVyLCB3ZSAqLwotICAvKiBnZXQgZmFtaWx5IG5hbWVzIGxpa2UgYFNvbnkgRml4ZWQnIG9yIGBNaXNjIEZpeGVkIFdpZGUnLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElmIHRoaXMgb3B0aW9uIGlzIGFjdGl2YXRlZCwgaXQgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgICAgICAgICAgICAqLwotICAvKiBgbm8tbG9uZy1mYW1pbHktbmFtZXMnIHByb3BlcnR5IG9mIHRoZSBwY2YgZHJpdmVyIG1vZHVsZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGVyZSBhcmUgbWFueSBQQ0YgZm9udHMganVzdCBjYWxsZWQgYEZpeGVkJyB3aGljaCBsb29rIGNvbXBsZXRlbHkKKyAgICogZGlmZmVyZW50LCBhbmQgd2hpY2ggaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggZWFjaCBvdGhlci4gIFdoZW4KKyAgICogc2VsZWN0aW5nIGBGaXhlZCcgaW4gS0RFIG9yIEdub21lIG9uZSBnZXRzIHJlc3VsdHMgdGhhdCBhcHBlYXIgcmF0aGVyCisgICAqIHJhbmRvbSwgdGhlIHN0eWxlIGNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhlIHNpemUgYW5kIG9uZQorICAgKiBjYW5ub3Qgc2VsZWN0IHNvbWUgZm9udHMgYXQgYWxsLiAgVGhpcyBvcHRpb24gbWFrZXMgdGhlIFBDRiBtb2R1bGUKKyAgICogcHJlcGVuZCB0aGUgZm91bmRyeSBuYW1lIChwbHVzIGEgc3BhY2UpIHRvIHRoZSBmYW1pbHkgbmFtZS4KKyAgICoKKyAgICogV2UgYWxzbyBjaGVjayB3aGV0aGVyIHdlIGhhdmUgYHdpZGUnIGNoYXJhY3RlcnM7IGFsbCBwdXQgdG9nZXRoZXIsIHdlCisgICAqIGdldCBmYW1pbHkgbmFtZXMgbGlrZSBgU29ueSBGaXhlZCcgb3IgYE1pc2MgRml4ZWQgV2lkZScuCisgICAqCisgICAqIElmIHRoaXMgb3B0aW9uIGlzIGFjdGl2YXRlZCwgaXQgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUKKyAgICogYG5vLWxvbmctZmFtaWx5LW5hbWVzJyBwcm9wZXJ0eSBvZiB0aGUgcGNmIGRyaXZlciBtb2R1bGUuCisgICAqLwogI2RlZmluZSBQQ0ZfQ09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FUwogCiAKQEAgLTgzMywzNCArODUzLDU4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBDb21waWxlIGF1dG9maXQgbW9kdWxlIHdpdGggQ0pLIChDaGluZXNlLCBKYXBhbmVzZSwgS29yZWFuKSBzY3JpcHQgICAgKi8KLSAgLyogc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIENKSyAoQ2hpbmVzZSwgSmFwYW5lc2UsIEtvcmVhbikgc2NyaXB0CisgICAqIHN1cHBvcnQuCisgICAqLwogI2RlZmluZSBBRl9DT05GSUdfT1BUSU9OX0NKSwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIEluZGljIHNjcmlwdCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIGZhbGxiYWNrIEluZGljIHNjcmlwdCBzdXBwb3J0LCBjb3ZlcmluZworICAgKiBzb21lIHNjcmlwdHMgdGhhdCB0aGUgYGxhdGluJyBzdWJtb2R1bGUgb2YgdGhlIGF1dG9maXQgbW9kdWxlIGRvZXNuJ3QKKyAgICogKHlldCkgaGFuZGxlLgorICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIHdhcnAgaGludGluZy4gIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nICAgICovCi0gIC8qIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbiAqLwotICAvKiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkIChtb3JlIG9yIGxlc3MpIG9uIHRoZSAgICAgKi8KLSAgLyogZ3JpZC4gIFRvIGZpbmQgb3V0IHRoZSBvcHRpbWFsIHNjYWxpbmcgYW5kIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzICAgICovCi0gIC8qIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcyAgICAgICovCi0gIC8qIEZUX1JFTkRFUl9NT0RFX0xJR0hUOyB5b3UgY2FuIHN3aXRjaCB3YXJwaW5nIG9uIGFuZCBvZmYgd2l0aCB0aGUgICAgICAqLwotICAvKiBgd2FycGluZycgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIChzZWUgZmlsZSBgZnRhdXRvaC5oJyBmb3IgbW9yZSAgKi8KLSAgLyogaW5mb3JtYXRpb247IGJ5IGRlZmF1bHQgaXQgaXMgc3dpdGNoZWQgb2ZmKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIHdhcnAgaGludGluZy4gIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nCisgICAqIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbgorICAgKiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkIChtb3JlIG9yIGxlc3MpIG9uIHRoZQorICAgKiBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMKKyAgICogcGFyYW1ldGVyIGNvbWJpbmF0aW9ucyBhcmUgdHJpZWQgYW5kIHNjb3JlZC4KKyAgICoKKyAgICogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcworICAgKiBGVF9SRU5ERVJfTU9ERV9MSUdIVDsgeW91IGNhbiBzd2l0Y2ggd2FycGluZyBvbiBhbmQgb2ZmIHdpdGggdGhlCisgICAqIGB3YXJwaW5nJyBwcm9wZXJ0eSBvZiB0aGUgYXV0by1oaW50ZXIgKHNlZSBmaWxlIGBmdGRyaXZlci5oJyBmb3IgbW9yZQorICAgKiBpbmZvcm1hdGlvbjsgYnkgZGVmYXVsdCBpdCBpcyBzd2l0Y2hlZCBvZmYpLgorICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCiAKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFVzZSBUcnVlVHlwZS1saWtlIHNpemUgbWV0cmljcyBmb3IgYGxpZ2h0JyBhdXRvLWhpbnRpbmcuCisgICAqCisgICAqIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF2b2lkIHRoaXMgb3B0aW9uLCB3aGljaCBleGlzdHMgb25seSB0bworICAgKiBoZWxwIHNvbWUgbGVnYWN5IGFwcGxpY2F0aW9ucyByZXRhaW4gaXRzIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91cgorICAgKiB3aXRoIHJlc3BlY3QgdG8gYXV0by1oaW50ZWQgVHJ1ZVR5cGUgZm9udHMuCisgICAqCisgICAqIFRoZSB2ZXJ5IHJlYXNvbiB0aGlzIG9wdGlvbiBleGlzdHMgYXQgYWxsIGFyZSBHTlUvTGludXggZGlzdHJpYnV0aW9ucworICAgKiBsaWtlIEZlZG9yYSB0aGF0IGRpZCBub3QgdW4tcGF0Y2ggdGhlIGZvbGxvd2luZyBjaGFuZ2UgKHdoaWNoIHdhcworICAgKiBwcmVzZW50IGluIEZyZWVUeXBlIGJldHdlZW4gdmVyc2lvbnMgMi40LjYgYW5kIDIuNy4xLCBpbmNsdXNpdmUpLgorICAgKgorICAgKiB7CisgICAqICAgMjAxMS0wNy0xNiAgU3RldmVuIENodSAgPHN0ZXZlbi5mLmNodUBnbWFpbC5jb20+CisgICAqCisgICAqICAgICBbdHJ1ZXR5cGVdIEZpeCBtZXRyaWNzIG9uIHNpemUgcmVxdWVzdCBmb3Igc2NhbGFibGUgZm9udHMuCisgICAqIH0KKyAgICoKKyAgICogVGhpcyBwcm9ibGVtYXRpYyBjb21taXQgaXMgbm93IHJldmVydGVkIChtb3JlIG9yIGxlc3MpLgorICAgKi8KKy8qICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgKi8KKwogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2RvY3MvQ0hBTkdFUyBiL2RvY3MvQ0hBTkdFUwppbmRleCA5OTAxZTEwLi5hNmQwODhhIDEwMDY0NAotLS0gYS9kb2NzL0NIQU5HRVMKKysrIGIvZG9jcy9DSEFOR0VTCkBAIC0xLDMgKzEsNTAgQEAKK0NIQU5HRVMgQkVUV0VFTiAyLjkgYW5kIDIuOS4xCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBUeXBlICAxICBmb250cyAgY29udGFpbmluZyAgIGZsZXggIGZlYXR1cmVzICB3ZXJlICBub3QgIHJlbmRlcmVkCisgICAgICBjb3JyZWN0bHkgKGJ1ZyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMi45KS4KKworICAgIC0gQ1ZFLTIwMTgtNjk0MjogT2xkZXIgIEZyZWVUeXBlIHZlcnNpb25zICBjYW4gY3Jhc2ggIHdpdGggY2VydGFpbgorICAgICAgbWFsZm9ybWVkIHZhcmlhdGlvbiBmb250cy4KKworICAgICAgICBodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMTgtNjk0MgorCisKKyAgSUkuIE1JU0NFTExBTkVPVVMKKworICAgIC0gQnVnIGZpeDogTXVsdGlwbGUgY2FsbHMgdG8gYEZUX0dldF9NTV9WYXInIHJldHVybmVkIGdhcmJhZ2UuCisKKyAgICAtIFRoZSBiYXNlICBleHRlbnNpb25zIGBmdGxjZGZpbCcgYW5kICBgZnRmbnRmbXQnIGFyZSBub3cgIHBhcnQgb2YKKyAgICAgIHRoZSAgYmFzZSAgbW9kdWxlICAoYW5kICB0aHVzIG5vICBsb25nZXIgIGNvbmZpZ3VyYWJsZSAgaW4gIGZpbGUKKyAgICAgIGBtb2R1bGVzLmNmZycpLgorCisgICAgLSBFbWJvbGRlbmluZyBvZiBiaXRtYXBzIGRpZG4ndCB3b3JrIGNvcnJlY3RseSBzb21ldGltZXMsICBzaG93aW5nCisgICAgICB2YXJpb3VzIGFydGlmYWN0cyAoYnVnIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjguMSkuCisKKyAgICAtIFVzZSAgb2YgIHRoZSBgZnJlZXR5cGUtY29uZmlnJyAgc2NyaXB0ICB0byAgZ2V0IGNvbXBpbGF0aW9uICBhbmQKKyAgICAgIGxpbmtpbmcgIG9wdGlvbnMgICBpcyAgZGVwcmVjYXRlZCAgIHNpbmNlICBpdCAgIGRvZXNuJ3QgIHN1cHBvcnQKKyAgICAgIGNyb3NzLWNvbXBpbGluZywgYW1vbmcgb3RoZXIgIGRlZmljaWVuY2llcy4gIEluc3RlYWQsIHlvdSBzaG91bGQKKyAgICAgIHVzZSB0aGUgYHBrZy1jb25maWcnIGludGVyZmFjZS4KKworICAgICAgVGhlIGBjb25maWd1cmUnICBzY3JpcHQgbm8gbG9uZ2VyIGluc3RhbGxzICBgZnJlZXR5cGUtY29uZmlnJyBieQorICAgICAgZGVmYXVsdC4gIEZvciAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksICBhIG5ldyAgY29uZmlndXJlIG9wdGlvbgorICAgICAgYC0tZW5hYmxlLWZyZWV0eXBlLWNvbmZpZycgICBpcyAgcHJvdmlkZWQgICB0aGF0ICByZXZlcnRzICAgdGhpcworICAgICAgZGVjaXNpb24uCisKKyAgICAtIFRoZSBhdXRvLWhpbnRlciBzY3JpcHQgcmFuZ2VzIGhhdmUgIGJlZW4gdXBkYXRlZCBmb3IgVW5pY29kZSAxMS4KKyAgICAgIE5vIHN1cHBvcnQgIGZvciBuZXcgc2NyaXB0cyAgaGF2ZSBiZWVuIGFkZGVkLCBob3dldmVyLCAgd2l0aCB0aGUKKyAgICAgIGV4Y2VwdGlvbiBvZiBHZW9yZ2lhbiBNdGF2cnVsaS4KKworICAgIC0gU3VwcG9ydCBmb3IgY21ha2UgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAgICAtIFRoZSBuZXh0ICByZWxlYXNlIHdpbGwgIHJlbW92ZSBzdXBwb3J0IGZvciAgUG9zaXRpb24gSW5kZXBlbmRlbnQKKyAgICAgIENvZGUgIGFzICBuZWVkZWQgIGJ5ICBzeXN0ZW1zIHRoYXQgIHByb2hpYml0ICBhdXRvbWF0aWMgIGFkZHJlc3MKKyAgICAgIGZpeHVwcywgc3VjaCAgYXMgQlJFVy4gIFtDb21waWxhdGlvbiB3aXRoICBtb2Rlcm4gY29tcGlsZXJzIHRoYXQKKyAgICAgIHVzZSBmbGFncyBsaWtlIGAtZlBJQycgb3IgYC1mUElFJyBpcyBub3QgYWZmZWN0ZWQuXQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ0hBTkdFUyBCRVRXRUVOIDIuOC4xIGFuZCAyLjkKIApAQCAtODYsNiArMTMzLDcgQEAKICAgICAgIGFuZCBzd2l0Y2ggIGJldHdlZW4gaGV4YWRlY2ltYWwgYW5kIGRlY2ltYWwgIGRpc3BsYXkgb2YgaW50ZWdlcnMKICAgICAgIChrZXkgYEknKS4KIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIENIQU5HRVMgQkVUV0VFTiAyLjggYW5kIDIuOC4xCkBAIC0yODYsNyArMzM0LDcgQEAKICAgICAtIEZUX0xPQURfVEFSR0VUX0xDRCAgaXMgbm93ICBhICB2YXJpYW50IG9mICBGVF9MT0FEX1RBUkdFVF9MSUdIVDsKICAgICAgIHRoaXMgc2hvdWxkIHByb3ZpZGUgYmV0dGVyIHJlbmRlcmluZyByZXN1bHRzLgogCi0gICAgLSBBIG1vZGUgdG8gZGlzcGxheSAgbGlnaHQgYXV0by1oaW50aW5nIHdpdGggc3ViLXBpeGVsIHBvc2l0aW9uaW5nCisgICAgLSBBIG1vZGUgdG8gZGlzcGxheSAgbGlnaHQgYXV0by1oaW50aW5nIHdpdGggIHN1YnBpeGVsIHBvc2l0aW9uaW5nCiAgICAgICBoYXMgYmVlbiBhZGRlZCB0byBgZnRkaWZmJy4KIAogCkBAIC02MTYsOCArNjY0LDggQEAKIAogICAgIC0gVGhlIHNtb290aCByZW5kZXJlciBoYXMgYmVlbiBtYWRlIGZhc3Rlci4KIAotICAgIC0gVGhlIGBmdHN0cmluZycgIGRlbW8gcHJvZ3JhbSAgbm93IHN1cHBvcnRzICBzdWItcGl4ZWwgcmVuZGVyaW5nOwotICAgICAgdXNlIGtleSBgbCcgdG8gY3ljbGUgdGhyb3VnaCB0aGUgTENEIG1vZGVzLgorICAgIC0gVGhlIGBmdHN0cmluZycgZGVtbyBwcm9ncmFtIG5vdyBzdXBwb3J0cyBzdWJwaXhlbCByZW5kZXJpbmc7IHVzZQorICAgICAga2V5IGBsJyB0byBjeWNsZSB0aHJvdWdoIHRoZSBMQ0QgbW9kZXMuCiAKICAgICAtIFRoZSBgZnRzdHJpbmcnICBkZW1vIHByb2dyYW0gbm93IHN1cHBvcnRzICBjb2xvdXIgcmVuZGVyaW5nOyB1c2UKICAgICAgIHRoZSBgc3BhY2UnIGtleSB0byBjeWNsZSB0aHJvdWdoIHZhcmlvdXMgY29sb3VyIGNvbWJpbmF0aW9ucy4KQEAgLTMwNTUsMTIgKzMxMDMsMTIgQEAKICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9OTyAgIDo6IEhpbnQgYW5kIHJlbmRlciBmb3IgMS1iaXQgZGlzcGxheXMuCiAKICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEICAgIDo6IEhpbnQgYW5kIHJlbmRlciBmb3IgaG9yaXpvbnRhbCBSR0Igb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJHUiBzdWItcGl4ZWwgZGlzcGxheXMgKGxpa2UgTENECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCR1Igc3VicGl4ZWwgZGlzcGxheXMgKGxpa2UgTENECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5zKS4gIFRISVMgSVMgU1RJTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVSSU1FTlRBTCEKIAogICAgICAgICBGVF9MT0FEX1RBUkdFVF9MQ0RfViAgOjogU2FtZSBhcyBGVF9MT0FEX1RBUkdFVF9MQ0QsIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgc3ViLXBpeGVsIGRpc3BsYXlzIChsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBzdWJwaXhlbCBkaXNwbGF5cyAobGlrZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlZCBMQ0Qgc2NyZWVucykuICBUSElTIElTIFNUSUxMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFUklNRU5UQUwhCiAKZGlmZiAtLWdpdCBhL2RvY3MvSU5TVEFMTCBiL2RvY3MvSU5TVEFMTAppbmRleCBmYzI0ZWExLi43MWQ0YTA1IDEwMDY0NAotLS0gYS9kb2NzL0lOU1RBTEwKKysrIGIvZG9jcy9JTlNUQUxMCkBAIC0xNCw3ICsxNCw3IEBACiAgICAgY29tcGlsYXRpb24sICBzaW5jZSBvdGhlciBtYWtlIHRvb2xzIHdvbid0IHdvcmsgKHRoaXMgaW5jbHVkZXMgQlNECiAgICAgTWFrZSkuCiAKLSAgICBHTlUgTWFrZSBWRVJTSU9OIDMuODAgT1IgTkVXRVIgSVMgTkVFREVEIQorICAgIEdOVSBNYWtlIFZFUlNJT04gMy44MSBPUiBORVdFUiBJUyBORUVERUQhCiAKICAgICBbRm9yIGBjbWFrZScgc2VlIGJlbG93Ll0KIApAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgICBodHRwOi8vbWFrZXBwLnNvdXJjZWZvcmdlLm5ldAogCi0gICAgZm9yIG1vcmUgaW5mb3JtYXRpb247IHlvdSBuZWVkIHZlcnNpb24gMS4xOSBvciBuZXdlciwgYW5kIHlvdSBtdXN0CisgICAgZm9yIG1vcmUgaW5mb3JtYXRpb247ICB5b3UgbmVlZCB2ZXJzaW9uIDIuMCBvciBuZXdlciwgYW5kIHlvdSBtdXN0CiAgICAgcGFzcyBvcHRpb24gYC0tbm9yYy1zdWJzdGl0dXRpb24nLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuQU5ZIGIvZG9jcy9JTlNUQUxMLkFOWQppbmRleCA0N2QwODBmLi5mZGRhYzlhIDEwMDY0NAotLS0gYS9kb2NzL0lOU1RBTEwuQU5ZCisrKyBiL2RvY3MvSU5TVEFMTC5BTlkKQEAgLTM5LDExICszOSw5IEBACiAgICAgICBzcmMvYmFzZS9mdGJkZi5jICAgICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdGJkZi5oPgogICAgICAgc3JjL2Jhc2UvZnRiaXRtYXAuYyAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRiaXRtYXAuaD4KICAgICAgIHNyYy9iYXNlL2Z0Y2lkLmMgICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0Y2lkLmg+Ci0gICAgICBzcmMvYmFzZS9mdGZudGZtdC5jICAgICAtLSBvcHRpb25hbCwgc2VlIDxmdGZudGZtdC5oPgogICAgICAgc3JjL2Jhc2UvZnRmc3R5cGUuYyAgICAgLS0gb3B0aW9uYWwKICAgICAgIHNyYy9iYXNlL2Z0Z2FzcC5jICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0Z2FzcC5oPgogICAgICAgc3JjL2Jhc2UvZnRneHZhbC5jICAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRneHZhbC5oPgotICAgICAgc3JjL2Jhc2UvZnRsY2RmaWwuYyAgICAgLS0gb3B0aW9uYWwsIHNlZSA8ZnRsY2RmaWwuaD4KICAgICAgIHNyYy9iYXNlL2Z0bW0uYyAgICAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0bW0uaD4KICAgICAgIHNyYy9iYXNlL2Z0b3R2YWwuYyAgICAgIC0tIG9wdGlvbmFsLCBzZWUgPGZ0b3R2YWwuaD4KICAgICAgIHNyYy9iYXNlL2Z0cGF0ZW50LmMgICAgIC0tIG9wdGlvbmFsCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuQ1JPU1MgYi9kb2NzL0lOU1RBTEwuQ1JPU1MKaW5kZXggZTg5NzdhMS4uMjM5ZTFhOSAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLkNST1NTCisrKyBiL2RvY3MvSU5TVEFMTC5DUk9TUwpAQCAtOSw3ICs5LDcgQEAKICAgLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIEZvciBzZWxmLWJ1aWxkaW5nIHRoZSBGcmVlVHlwZSBsaWJyYXJ5ICBvbiBhIFVuaXggc3lzdGVtLCBHTlUgTWFrZQotICAgIDMuODAgb3IgbmV3ZXIgIGlzIHJlcXVpcmVkLiAgYElOU1RBTEwuVU5JWCcgY29udGFpbnMgIGhpbnRzIGhvdyB0bworICAgIDMuODEgb3IgbmV3ZXIgIGlzIHJlcXVpcmVkLiAgYElOU1RBTEwuVU5JWCcgY29udGFpbnMgIGhpbnRzIGhvdyB0bwogICAgIGNoZWNrIHRoZSBpbnN0YWxsZWQgYG1ha2UnLgogCiAgICAgVGhlIEdOVSBDICBjb21waWxlciB0byBjcm9zcy1idWlsZCB0aGUgdGFyZ2V0ICBzeXN0ZW0gaXMgcmVxdWlyZWQuCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuR05VIGIvZG9jcy9JTlNUQUxMLkdOVQppbmRleCA1MjY0NWYxLi5lMzE0ZWNmIDEwMDY0NAotLS0gYS9kb2NzL0lOU1RBTEwuR05VCisrKyBiL2RvY3MvSU5TVEFMTC5HTlUKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgICAgaHR0cDovL21ha2VwcC5zb3VyY2Vmb3JnZS5uZXQKIAotICAgIGZvciBtb3JlIGluZm9ybWF0aW9uOyB5b3UgbmVlZCB2ZXJzaW9uIDEuMTkgb3IgbmV3ZXIsIGFuZCB5b3UgbXVzdAorICAgIGZvciBtb3JlIGluZm9ybWF0aW9uOyAgeW91IG5lZWQgdmVyc2lvbiAyLjAgb3IgbmV3ZXIsIGFuZCB5b3UgbXVzdAogICAgIHBhc3Mgb3B0aW9uIGAtLW5vcmMtc3Vic3RpdHV0aW9uJy4KIAogICAgIE1ha2Ugc3VyZSB0aGF0IHlvdSBhcmUgaW52b2tpbmcgR05VIE1ha2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBieQpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgdG8gZGlzcGxheSBpdHMgdmVyc2lvbiBudW1iZXIuCiAKLSAgICBWRVJTSU9OIDMuODAgT1IgTkVXRVIgSVMgTkVFREVEIQorICAgIFZFUlNJT04gMy44MSBPUiBORVdFUiBJUyBORUVERUQhCiAKIAogICAyLiBJbnZva2UgYG1ha2UnCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuVU5JWCBiL2RvY3MvSU5TVEFMTC5VTklYCmluZGV4IGJiNTc4MzYuLmY5MmQ4MjggMTAwNjQ0Ci0tLSBhL2RvY3MvSU5TVEFMTC5VTklYCisrKyBiL2RvY3MvSU5TVEFMTC5VTklYCkBAIC0xOSw3ICsxOSw3IEBACiAgICAgICAgR05VIE1ha2UgIDx2ZXJzaW9uIG51bWJlcj4KICAgICAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgogCi0gICAgTm90ZSB0aGF0IHZlcnNpb24gIDMuODAgb3IgaGlnaGVyIGlzICpyZXF1aXJlZCogb3IgdGhlICBidWlsZCB3aWxsCisgICAgTm90ZSB0aGF0IHZlcnNpb24gIDMuODEgb3IgaGlnaGVyIGlzICpyZXF1aXJlZCogb3IgdGhlICBidWlsZCB3aWxsCiAgICAgZmFpbC4KIAogICAgIEl0IGlzIGFsc28gZmluZSB0byBoYXZlIEdOVSBNYWtlIHVuZGVyIGFub3RoZXIgbmFtZSAoZS5nLiAnZ21ha2UnKQpkaWZmIC0tZ2l0IGEvZG9jcy9NQUtFUFAgYi9kb2NzL01BS0VQUAppbmRleCA1OGVhZjU1Li5hNGQ0NGI3IDEwMDY0NAotLS0gYS9kb2NzL01BS0VQUAorKysgYi9kb2NzL01BS0VQUApAQCAtMSw1ICsxLDUgQEAKIEFzIGEgc3BlY2lhbCAgZXhjZXB0aW9uLCBGcmVlVHlwZSBjYW4gYWxzbyBiZSAgYnVpbHQgd2l0aCB0aGUgJ21ha2VwcCcKIGJ1aWxkIHRvb2wsIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9tYWtlcHAuc291cmNlZm9yZ2UubmV0LgogCi1Ob3RlLCBob3dldmVyLiB0aGF0ICB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHZlcnNpb24gIDEuMTkgYW5kIHBhc3MgdGhlCitOb3RlLCBob3dldmVyLCAgdGhhdCAgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB2ZXJzaW9uIDIuMCAgYW5kIHBhc3MgdGhlCiBvcHRpb24gLS1ub3JjLXN1YnN0aXR1dGlvbiB0byBoYXZlIGl0IHdvcmsgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvZG9jcy9WRVJTSU9OUy5UWFQgYi9kb2NzL1ZFUlNJT05TLlRYVAppbmRleCBiMGQyNWI1Li4zNzc0MTU3IDEwMDY0NAotLS0gYS9kb2NzL1ZFUlNJT05TLlRYVAorKysgYi9kb2NzL1ZFUlNJT05TLlRYVApAQCAtNTIsNiArNTIsNyBAQAogCiAgICAgcmVsZWFzZSAgICAgbGlidG9vbCAgICAgc28KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAyLjkuMSAgICAgIDIyLjEuMTYgICA2LjE2LjEKICAgICAgMi45LjAgICAgICAyMi4wLjE2ICAgNi4xNi4wCiAgICAgIDIuOC4xICAgICAgMjEuMC4xNSAgIDYuMTUuMAogICAgICAyLjguMCAgICAgIDIwLjAuMTQgICA2LjE0LjAKZGlmZiAtLWdpdCBhL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEgYi9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xCmluZGV4IGUwNjBkY2IuLjE2NGI4ZmYgMTAwNjQ0Ci0tLSBhL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEKKysrIGIvZG9jcy9mcmVldHlwZS1jb25maWcuMQpAQCAtMSw0ICsxLDQgQEAKLS5USCBGUkVFVFlQRS1DT05GSUcgMSAiSmFudWFyeSAyMDE4IiAiRnJlZVR5cGUgMi45IgorLlRIIEZSRUVUWVBFLUNPTkZJRyAxICJNYXkgMjAxOCIgIkZyZWVUeXBlIDIuOS4xIgogLgogLgogLlNIIE5BTUUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCmluZGV4IDhmZjE0M2UuLjNkMTI3ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaApAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFOU0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjb25maWcuaAorICoKKyAqICAgQU5TSS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgYXJlIHVzZWQgKi8KLSAgLyogYnkgdGhlIHJlc3Qgb2YgdGhlIGVuZ2luZS4gIE1vc3Qgb2YgdGhlIG1hY3JvcyBoZXJlIGFyZSBhdXRvbWF0aWNhbGx5ICovCi0gIC8qIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQgeW91IHNob3VsZCBub3QgbmVlZCB0byBjaGFuZ2UgaXQgdG8gICAqLwotICAvKiBwb3J0IEZyZWVUeXBlLCBleGNlcHQgdG8gY29tcGlsZSB0aGUgbGlicmFyeSB3aXRoIGEgbm9uLUFOU0kgICAgICAgICAgKi8KLSAgLyogY29tcGlsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIGhvd2V2ZXIgdGhhdCBpZiBzb21lIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgYXJlIG5lZWRlZCwgd2UgICAgICAgKi8KLSAgLyogYWR2aXNlIHlvdSB0byBwbGFjZSBhIG1vZGlmaWVkIGNvcHkgaW4geW91ciBidWlsZCBkaXJlY3RvcnkuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgYnVpbGQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYGJ1aWxkcy88c3lzdGVtPicsIGFuZCBjb250YWlucyAgICAgICAgKi8KLSAgLyogc3lzdGVtLXNwZWNpZmljIGZpbGVzIHRoYXQgYXJlIGFsd2F5cyBpbmNsdWRlZCBmaXJzdCB3aGVuIGJ1aWxkaW5nICAgICovCi0gIC8qIHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBBTlNJIHZlcnNpb24gc2hvdWxkIHN0YXkgaW4gYGluY2x1ZGUvY29uZmlnLycuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBhcmUgdXNlZAorICAgKiBieSB0aGUgcmVzdCBvZiB0aGUgZW5naW5lLiAgTW9zdCBvZiB0aGUgbWFjcm9zIGhlcmUgYXJlIGF1dG9tYXRpY2FsbHkKKyAgICogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsIGFuZCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZSBpdCB0bworICAgKiBwb3J0IEZyZWVUeXBlLCBleGNlcHQgdG8gY29tcGlsZSB0aGUgbGlicmFyeSB3aXRoIGEgbm9uLUFOU0kKKyAgICogY29tcGlsZXIuCisgICAqCisgICAqIE5vdGUgaG93ZXZlciB0aGF0IGlmIHNvbWUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkLCB3ZQorICAgKiBhZHZpc2UgeW91IHRvIHBsYWNlIGEgbW9kaWZpZWQgY29weSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICoKKyAgICogVGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyB1c3VhbGx5IGBidWlsZHMvPHN5c3RlbT4nLCBhbmQgY29udGFpbnMKKyAgICogc3lzdGVtLXNwZWNpZmljIGZpbGVzIHRoYXQgYXJlIGFsd2F5cyBpbmNsdWRlZCBmaXJzdCB3aGVuIGJ1aWxkaW5nCisgICAqIHRoZSBsaWJyYXJ5LgorICAgKgorICAgKiBUaGlzIEFOU0kgdmVyc2lvbiBzaG91bGQgc3RheSBpbiBgaW5jbHVkZS9jb25maWcvJy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgRlRDT05GSUdfSF8KICNkZWZpbmUgRlRDT05GSUdfSF8KQEAgLTQ2LDE2ICs0NiwxNiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgUExBVEZPUk0tU1BFQ0lGSUMgQ09ORklHVVJBVElPTiBNQUNST1MgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlc2UgbWFjcm9zIGNhbiBiZSB0b2dnbGVkIHRvIHN1aXQgYSBzcGVjaWZpYyBzeXN0ZW0uICBUaGUgY3VycmVudCAgICovCi0gIC8qIG9uZXMgYXJlIGRlZmF1bHRzIHVzZWQgdG8gY29tcGlsZSBGcmVlVHlwZSBpbiBhbiBBTlNJIEMgZW52aXJvbm1lbnQgICAqLwotICAvKiAoMTZiaXQgY29tcGlsZXJzIGFyZSBhbHNvIHN1cHBvcnRlZCkuICBDb3B5IHRoaXMgZmlsZSB0byB5b3VyIG93biAgICAgKi8KLSAgLyogYGJ1aWxkcy88c3lzdGVtPicgZGlyZWN0b3J5LCBhbmQgZWRpdCBpdCB0byBwb3J0IHRoZSBlbmdpbmUuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICBQTEFURk9STS1TUEVDSUZJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUworICAgKgorICAgKiBUaGVzZSBtYWNyb3MgY2FuIGJlIHRvZ2dsZWQgdG8gc3VpdCBhIHNwZWNpZmljIHN5c3RlbS4gIFRoZSBjdXJyZW50CisgICAqIG9uZXMgYXJlIGRlZmF1bHRzIHVzZWQgdG8gY29tcGlsZSBGcmVlVHlwZSBpbiBhbiBBTlNJIEMgZW52aXJvbm1lbnQKKyAgICogKDE2Yml0IGNvbXBpbGVycyBhcmUgYWxzbyBzdXBwb3J0ZWQpLiAgQ29weSB0aGlzIGZpbGUgdG8geW91ciBvd24KKyAgICogYGJ1aWxkcy88c3lzdGVtPicgZGlyZWN0b3J5LCBhbmQgZWRpdCBpdCB0byBwb3J0IHRoZSBlbmdpbmUuCisgICAqCisgICAqLwogCiAKICAgLyogVGhlcmUgYXJlIHN5c3RlbXMgKGxpa2UgdGhlIFRleGFzIEluc3RydW1lbnRzICdDNTR4KSB3aGVyZSBhIGBjaGFyJyAqLwpAQCAtMTAyLDI0ICsxMDIsMjQgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIEFVVE9NQVRJQyBDT05GSUdVUkFUSU9OIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXNlIG1hY3JvcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgb25lcyBkZWZpbmVkIGFib3ZlLiAgRG9uJ3QgdG91Y2ggICAqLwotICAvKiB0aGVpciBkZWZpbml0aW9uLCB1bmxlc3MgeW91IGtub3cgcHJlY2lzZWx5IHdoYXQgeW91IGFyZSBkb2luZy4gIE5vICAgKi8KLSAgLyogcG9ydGVyIHNob3VsZCBuZWVkIHRvIG1lc3Mgd2l0aCB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICBBVVRPTUFUSUMgQ09ORklHVVJBVElPTiBNQUNST1MKKyAgICoKKyAgICogVGhlc2UgbWFjcm9zIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBvbmVzIGRlZmluZWQgYWJvdmUuICBEb24ndCB0b3VjaAorICAgKiB0aGVpciBkZWZpbml0aW9uLCB1bmxlc3MgeW91IGtub3cgcHJlY2lzZWx5IHdoYXQgeW91IGFyZSBkb2luZy4gIE5vCisgICAqIHBvcnRlciBzaG91bGQgbmVlZCB0byBtZXNzIHdpdGggdGhlbS4KKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1hYyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGlzIGlzIHRoZSBvbmx5IG5lY2Vzc2FyeSBjaGFuZ2UsIHNvIGl0IGlzIGRlZmluZWQgaGVyZSBpbnN0ZWFkICAgICovCi0gIC8qICAgcHJvdmlkaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1hYyBzdXBwb3J0CisgICAqCisgICAqICAgVGhpcyBpcyB0aGUgb25seSBuZWNlc3NhcnkgY2hhbmdlLCBzbyBpdCBpcyBkZWZpbmVkIGhlcmUgaW5zdGVhZAorICAgKiAgIHByb3ZpZGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAqLwogI2lmIGRlZmluZWQoIF9fQVBQTEVfXyApIHx8ICggZGVmaW5lZCggX19NV0VSS1NfXyApICYmIGRlZmluZWQoIG1hY2ludG9zaCApICkKICAgLyogbm8gQ2FyYm9uIGZyYW1ld29ya3MgZm9yIDY0Yml0IDEwLjQueCAqLwogICAvKiBBdmFpbGFiaWxpdHlNYWNyb3MuaCBpcyBhdmFpbGFibGUgc2luY2UgTWFjIE9TIFggMTAuMiwgICAgICAgICovCkBAIC0xNTEsMzMgKzE1MSwzMyBAQAogI2VuZGlmCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYmFzaWNfdHlwZXMKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9JbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9JbnQxNgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB0eXBlZGVmIGZvciBhIDE2Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuCisgICAqLwogICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfSW50MTY7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHR5cGVkZWYgZm9yIGEgMTZiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9VSW50MTYKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3IgYSAxNmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuCisgICAqLwogICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBGVF9VSW50MTY7CiAKICAgLyogKi8KQEAgLTE4Niw1MCArMTg2LDUwIEBACiAgIC8qIHRoaXMgI2lmIDAgLi4uICNlbmRpZiBjbGF1c2UgaXMgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgKi8KICNpZiAwCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciBhIDMyYml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uICAgICovCi0gIC8qICAgIHRoZSBjb25maWd1cmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0ludDMyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24KKyAgICogICB0aGUgY29uZmlndXJhdGlvbi4KKyAgICovCiAgIHR5cGVkZWYgc2lnbmVkIFhYWCAgRlRfSW50MzI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VSW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdHlwZWRlZiBmb3IgYSAzMmJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uICAqLwotICAvKiAgICB0aGUgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9VSW50MzIKKyAgICoKKyAgICogICBBIHR5cGVkZWYgZm9yIGEgMzJiaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbgorICAgKiAgIHRoZSBjb25maWd1cmF0aW9uLgorICAgKi8KICAgdHlwZWRlZiB1bnNpZ25lZCBYWFggIEZUX1VJbnQzMjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ludDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uICAgICovCi0gIC8qICAgIHRoZSBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsgICAqLwotICAvKiAgICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9JbnQ2NAorICAgKgorICAgKiAgIEEgdHlwZWRlZiBmb3IgYSA2NGJpdCBzaWduZWQgaW50ZWdlciB0eXBlLiAgVGhlIHNpemUgZGVwZW5kcyBvbgorICAgKiAgIHRoZSBjb25maWd1cmF0aW9uLiAgT25seSBkZWZpbmVkIGlmIHRoZXJlIGlzIHJlYWwgNjRiaXQgc3VwcG9ydDsKKyAgICogICBvdGhlcndpc2UsIGl0IGdldHMgZW11bGF0ZWQgd2l0aCBhIHN0cnVjdHVyZSAoaWYgbmVjZXNzYXJ5KS4KKyAgICovCiAgIHR5cGVkZWYgc2lnbmVkIFhYWCAgRlRfSW50NjQ7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VSW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdHlwZWRlZiBmb3IgYSA2NGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICBUaGUgc2l6ZSBkZXBlbmRzIG9uICAqLwotICAvKiAgICB0aGUgY29uZmlndXJhdGlvbi4gIE9ubHkgZGVmaW5lZCBpZiB0aGVyZSBpcyByZWFsIDY0Yml0IHN1cHBvcnQ7ICAgKi8KLSAgLyogICAgb3RoZXJ3aXNlLCBpdCBnZXRzIGVtdWxhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgKGlmIG5lY2Vzc2FyeSkuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVUludDY0CisgICAqCisgICAqICAgQSB0eXBlZGVmIGZvciBhIDY0Yml0IHVuc2lnbmVkIGludGVnZXIgdHlwZS4gIFRoZSBzaXplIGRlcGVuZHMgb24KKyAgICogICB0aGUgY29uZmlndXJhdGlvbi4gIE9ubHkgZGVmaW5lZCBpZiB0aGVyZSBpcyByZWFsIDY0Yml0IHN1cHBvcnQ7CisgICAqICAgb3RoZXJ3aXNlLCBpdCBnZXRzIGVtdWxhdGVkIHdpdGggYSBzdHJ1Y3R1cmUgKGlmIG5lY2Vzc2FyeSkuCisgICAqLwogICB0eXBlZGVmIHVuc2lnbmVkIFhYWCAgRlRfVUludDY0OwogCiAgIC8qICovCkBAIC0yNzQsMTMgKzI3NCwxMyBAQAogI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcKICNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBIDY0LWJpdCBkYXRhIHR5cGUgbWF5IGNyZWF0ZSBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiB5b3UgY29tcGlsZSAgICAgKi8KLSAgLyogaW4gc3RyaWN0IEFOU0kgbW9kZS4gIFRvIGF2b2lkIHRoZW0sIHdlIGRpc2FibGUgb3RoZXIgNjQtYml0IGRhdGEgICAgICovCi0gIC8qIHR5cGVzIGlmIF9fU1REQ19fIGlzIGRlZmluZWQuICBZb3UgY2FuIGhvd2V2ZXIgaWdub3JlIHRoaXMgcnVsZSAgICAgICAqLwotICAvKiBieSBkZWZpbmluZyB0aGUgRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCBjb25maWd1cmF0aW9uIG1hY3JvLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBIDY0LWJpdCBkYXRhIHR5cGUgbWF5IGNyZWF0ZSBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiB5b3UgY29tcGlsZQorICAgKiBpbiBzdHJpY3QgQU5TSSBtb2RlLiAgVG8gYXZvaWQgdGhlbSwgd2UgZGlzYWJsZSBvdGhlciA2NC1iaXQgZGF0YQorICAgKiB0eXBlcyBpZiBfX1NURENfXyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGlnbm9yZSB0aGlzIHJ1bGUKKyAgICogYnkgZGVmaW5pbmcgdGhlIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgY29uZmlndXJhdGlvbiBtYWNyby4KKyAgICovCiAjZWxpZiAhZGVmaW5lZCggX19TVERDX18gKSB8fCBkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0ICkKIAogI2lmIGRlZmluZWQoIF9fU1REQ19WRVJTSU9OX18gKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKQEAgLTM0MiwxMSArMzQyLDExIEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogbWlzY2VsbGFuZW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIG1pc2NlbGxhbmVvdXMKKyAgICoKKyAgICovCiAKIAogI2RlZmluZSBGVF9CRUdJTl9TVE1OVCAgZG8gewpAQCAtNDIyLDkgKzQyMiw5IEBACiAjZW5kaWYgLyogIUZUX0JBU0VfREVGICovCiAKIAotICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMLCBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSAgICAgKi8KLSAgLyogICBzcGVjaWFsIGF0dHJpYnV0ZSBpbiBmcm9udCBPUiBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgZnVuY3Rpb24gICAgICovCi0gIC8qICAgZGVjbGFyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMIG9yIERTTyB3aXRoIGhpZGRlbiB2aXNpYmlsaXR5ICAgICAgKi8KKyAgLyogICBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSBzcGVjaWFsIGF0dHJpYnV0ZSBpbiBmcm9udCBPUiBhZnRlciAgICovCisgIC8qICAgdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBUd28gbWFjcm9zIGFyZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUgdG8gZGVmaW5lICAgICAgICovCiAgIC8qICAgZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IEZUX0VYUE9SVCBhbmQgRlRfRVhQT1JUX0RFRi4gICAgICAgICAgICAqLwpAQCAtNDU1LDIxICs0NTUsMzAgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWZuZGVmIEZUX0VYUE9SVAogCi0jaWZkZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBGVDJfQlVJTERfTElCUkFSWQorCisjaWYgZGVmaW5lZCggX1dJTjMyICkgJiYgZGVmaW5lZCggRExMX0VYUE9SVCApCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAorI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiBfX0dOVUNfXyA+PSA0CisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2F0dHJpYnV0ZV9fKCggdmlzaWJpbGl0eSggImRlZmF1bHQiICkgKSkgIHgKKyNlbGlmIGRlZmluZWQoIF9fU1VOUFJPX0MgKSAmJiBfX1NVTlBST19DID49IDB4NTUwCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2dsb2JhbCAgeAorI2VsaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQogI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICJDIiAgeAogI2Vsc2UKICNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAogI2VuZGlmCiAKLSNpZmRlZiBfV0lOMzIKLSNpZiBkZWZpbmVkKCBGVDJfQlVJTERfTElCUkFSWSApICYmIFwKLSAgICAoIGRlZmluZWQoIF9ETEwgKSB8fCBkZWZpbmVkKCBETExfRVhQT1JUICkgKQotI3VuZGVmIEZUX0VYUE9SVAotI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsZXhwb3J0ICkgIHgKLSNlbGlmIGRlZmluZWQoIEZUMl9ETExJTVBPUlQgKQotI3VuZGVmIEZUX0VYUE9SVAorI2Vsc2UKKworI2lmIGRlZmluZWQoIF9XSU4zMiApICYmIGRlZmluZWQoIERMTF9JTVBPUlQgKQogI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsaW1wb3J0ICkgIHgKKyNlbGlmIGRlZmluZWQoIF9fY3BsdXNwbHVzICkKKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIHgKICNlbmRpZgorCiAjZW5kaWYKIAogI2VuZGlmIC8qICFGVF9FWFBPUlQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oCmluZGV4IDcwMmY3N2MuLmJiOTY4MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRoZWFkZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEJ1aWxkIG1hY3JvcyBvZiB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRoZWFkZXIuaAorICoKKyAqICAgQnVpbGQgbWFjcm9zIG9mIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAjaWZuZGVmIEZUSEVBREVSX0hfCiAjZGVmaW5lIEZUSEVBREVSX0hfCkBAIC01NSw0MyArNTUsNDMgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBbGlhc2VzIGZvciB0aGUgRnJlZVR5cGUgMiBwdWJsaWMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQWxpYXNlcyBmb3IgdGhlIEZyZWVUeXBlIDIgcHVibGljIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgKgorICAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWFkZXJfZmlsZV9tYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIZWFkZXIgRmlsZSBNYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBNYWNybyBkZWZpbml0aW9ucyB1c2VkIHRvICNpbmNsdWRlIHNwZWNpZmljIGhlYWRlciBmaWxlcy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZGVmaW5lZCB0byB0aGUgbmFtZSBvZiBzcGVjaWZpYyAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGV+MiBoZWFkZXIgZmlsZXMuICBUaGV5IGNhbiBiZSB1c2VkIGRpcmVjdGx5IGluICNpbmNsdWRlICAgICovCi0gIC8qICAgIHN0YXRlbWVudHMgYXMgaW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAjaW5jbHVkZSBGVF9HTFlQSF9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyB3aHkgd2UgYXJlIG5vdyB1c2luZyBtYWNyb3MgdG8gbmFtZSAgICAgICovCi0gIC8qICAgIHB1YmxpYyBoZWFkZXIgZmlsZXMuICBUaGUgZmlyc3Qgb25lIGlzIHRoYXQgc3VjaCBtYWNyb3MgYXJlIG5vdCAgICAqLwotICAvKiAgICBsaW1pdGVkIHRvIHRoZSBpbmZhbW91cyA4LjN+bmFtaW5nIHJ1bGUgcmVxdWlyZWQgYnkgRE9TIChhbmQgICAgICAgKi8KLSAgLyogICAgYEZUX01VTFRJUExFX01BU1RFUlNfSCcgaXMgYSBsb3QgbW9yZSBtZWFuaW5nZnVsIHRoYW4gYGZ0bW0uaCcpLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgc2Vjb25kIHJlYXNvbiBpcyB0aGF0IGl0IGFsbG93cyBmb3IgbW9yZSBmbGV4aWJpbGl0eSBpbiB0aGUgICAgKi8KLSAgLyogICAgd2F5IEZyZWVUeXBlfjIgaXMgaW5zdGFsbGVkIG9uIGEgZ2l2ZW4gc3lzdGVtLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGhlYWRlcl9maWxlX21hY3JvcworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgSGVhZGVyIEZpbGUgTWFjcm9zCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBNYWNybyBkZWZpbml0aW9ucyB1c2VkIHRvICNpbmNsdWRlIHNwZWNpZmljIGhlYWRlciBmaWxlcy4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIHRvIHRoZSBuYW1lIG9mIHNwZWNpZmljCisgICAqICAgRnJlZVR5cGV+MiBoZWFkZXIgZmlsZXMuICBUaGV5IGNhbiBiZSB1c2VkIGRpcmVjdGx5IGluICNpbmNsdWRlCisgICAqICAgc3RhdGVtZW50cyBhcyBpbjoKKyAgICoKKyAgICogICB7CisgICAqICAgICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisgICAqICAgICAjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyAgICogICAgICNpbmNsdWRlIEZUX0dMWVBIX0gKKyAgICogICB9CisgICAqCisgICAqICAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyB3aHkgd2UgYXJlIG5vdyB1c2luZyBtYWNyb3MgdG8gbmFtZQorICAgKiAgIHB1YmxpYyBoZWFkZXIgZmlsZXMuICBUaGUgZmlyc3Qgb25lIGlzIHRoYXQgc3VjaCBtYWNyb3MgYXJlIG5vdAorICAgKiAgIGxpbWl0ZWQgdG8gdGhlIGluZmFtb3VzIDguM35uYW1pbmcgcnVsZSByZXF1aXJlZCBieSBET1MgKGFuZAorICAgKiAgIGBGVF9NVUxUSVBMRV9NQVNURVJTX0gnIGlzIGEgbG90IG1vcmUgbWVhbmluZ2Z1bCB0aGFuIGBmdG1tLmgnKS4KKyAgICoKKyAgICogICBUaGUgc2Vjb25kIHJlYXNvbiBpcyB0aGF0IGl0IGFsbG93cyBmb3IgbW9yZSBmbGV4aWJpbGl0eSBpbiB0aGUKKyAgICogICB3YXkgRnJlZVR5cGV+MiBpcyBpbnN0YWxsZWQgb24gYSBnaXZlbiBzeXN0ZW0uCisgICAqCisgICAqLwogCiAKICAgLyogY29uZmlndXJhdGlvbiBmaWxlcyAqLwpAQCAtNzYwLDYgKzc2MCwxOCBAQAogI2RlZmluZSBGVF9BRFZBTkNFU19IICA8ZnJlZXR5cGUvZnRhZHZhbmMuaD4KIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9DT0xPUl9ICisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlCisgICAqICAgRnJlZVR5cGV+MiBBUEkgd2hpY2ggaGFuZGxlcyB0aGUgT3BlblR5cGUgQ1BBTCB0YWJsZS4KKyAgICovCisjZGVmaW5lIEZUX0NPTE9SX0ggIDxmcmVldHlwZS9mdGNvbG9yLmg+CisKKwogICAvKiAqLwogCiAgIC8qIFRoZXNlIGhlYWRlciBmaWxlcyBkb24ndCBuZWVkIHRvIGJlIGluY2x1ZGVkIGJ5IHRoZSB1c2VyLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgKaW5kZXggOTJhZjU5My4uZTc1MTUwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCkBAIC0xLDEyICsxLDEyIEBACiAvKgotICogIFRoaXMgZmlsZSByZWdpc3RlcnMgdGhlIEZyZWVUeXBlIG1vZHVsZXMgY29tcGlsZWQgaW50byB0aGUgbGlicmFyeS4KKyAqIFRoaXMgZmlsZSByZWdpc3RlcnMgdGhlIEZyZWVUeXBlIG1vZHVsZXMgY29tcGlsZWQgaW50byB0aGUgbGlicmFyeS4KICAqCi0gKiAgSWYgeW91IHVzZSBHTlUgbWFrZSwgdGhpcyBmaWxlIElTIE5PVCBVU0VEISAgSW5zdGVhZCwgaXQgaXMgY3JlYXRlZCBpbgotICogIHRoZSBvYmplY3RzIGRpcmVjdG9yeSAobm9ybWFsbHkgYDx0b3BkaXI+L29ianMvJykgYmFzZWQgb24gaW5mb3JtYXRpb24KLSAqICBmcm9tIGA8dG9wZGlyPi9tb2R1bGVzLmNmZycuCisgKiBJZiB5b3UgdXNlIEdOVSBtYWtlLCB0aGlzIGZpbGUgSVMgTk9UIFVTRUQhICBJbnN0ZWFkLCBpdCBpcyBjcmVhdGVkIGluCisgKiB0aGUgb2JqZWN0cyBkaXJlY3RvcnkgKG5vcm1hbGx5IGA8dG9wZGlyPi9vYmpzLycpIGJhc2VkIG9uIGluZm9ybWF0aW9uCisgKiBmcm9tIGA8dG9wZGlyPi9tb2R1bGVzLmNmZycuCiAgKgotICogIFBsZWFzZSByZWFkIGBkb2NzL0lOU1RBTEwuQU5ZJyBhbmQgYGRvY3MvQ1VTVE9NSVpFJyBob3cgdG8gY29tcGlsZQotICogIEZyZWVUeXBlIHdpdGhvdXQgR05VIG1ha2UuCisgKiBQbGVhc2UgcmVhZCBgZG9jcy9JTlNUQUxMLkFOWScgYW5kIGBkb2NzL0NVU1RPTUlaRScgaG93IHRvIGNvbXBpbGUKKyAqIEZyZWVUeXBlIHdpdGhvdXQgR05VIG1ha2UuCiAgKgogICovCiAvLyBBTkRST0lEOiBjb21tZW50ZWQgb3V0IG9uZXMgYXJlIG5vdCBuZWVkZWQgZm9yIGFuZHJvaWQsIHByZXZpb3VzbHkgdGhleSB3ZXJlIGRlbGV0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCmluZGV4IGZhMGQ2NjEuLmIyZTY2ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRvcHRpb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG1hY3JvcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRvcHRpb24uaAorICoKKyAqICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUT1BUSU9OX0hfCkBAIC0yNSw0NSArMjUsNDcgQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgVVNFUi1TRUxFQ1RBQkxFIENPTkZJR1VSQVRJT04gTUFDUk9TICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1hY3JvIGRlZmluaXRpb25zIGZvciAgICAqLwotICAvKiBhIHN0YW5kYXJkIGJ1aWxkIG9mIHRoZSBGcmVlVHlwZSBsaWJyYXJ5LiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gICAgKi8KLSAgLyogdXNlIHRoaXMgZmlsZSB0byBidWlsZCBwcm9qZWN0LXNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5OiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgLSBZb3UgY2FuIG1vZGlmeSB0aGlzIGZpbGUgYnkgaGFuZCwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGluICAgKi8KLSAgLyogICAgY2FzZXMgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZGlyZWN0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gWW91IGNhbiBwdXQgYSBjb3B5IG9mIHRoaXMgZmlsZSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgbW9yZSAgICAgICovCi0gIC8qICAgIHByZWNpc2VseSBpbiBgJEJVSUxEL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oJywgd2hlcmUgYCRCVUlMRCcgICAqLwotICAvKiAgICBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlzIGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSAgKi8KLSAgLyogICAgaW5jbHVkZSBwYXRoIGR1cmluZyBjb21waWxhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgYW5kIEphbWZpbGVzIHVzZSB0aGUgYnVpbGQgICAgICAgICAgKi8KLSAgLyogICAgZGlyZWN0b3J5IGBidWlsZHMvPHN5c3RlbT4nIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgICovCi0gIC8qICAgIHRoYXQgZm9yIHlvdXIgb3duIHByb2plY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gQ29weSB0aGUgZmlsZSA8ZnQyYnVpbGQuaD4gdG8gYCRCVUlMRC9mdDJidWlsZC5oJyBhbmQgbW9kaWZ5IGl0ICAgICovCi0gIC8qICAgIHNsaWdodGx5IHRvIHByZS1kZWZpbmUgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05TX0ggdXNlZCB0byAgICAgICAqLwotICAvKiAgICBsb2NhdGUgdGhpcyBmaWxlIGR1cmluZyB0aGUgYnVpbGQuICBGb3IgZXhhbXBsZSwgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OU19IICA8bXlmdG9wdGlvbnMuaD4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaCcgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZm9yIG1hY3JvICAgICAqLwotICAvKiAgICBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgYWxzbyB0aGF0IHlvdSBjYW4gc2ltaWxhcmx5IHByZS1kZWZpbmUgdGhlIG1hY3JvICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMgKi8KLSAgLyogICAgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGxpYnJhcnkgYXQgY29tcGlsZSB0aW1lLiAgQnkgICAgICovCi0gIC8qICAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8ZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg+LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogV2UgaGlnaGx5IHJlY29tbWVuZCB1c2luZyB0aGUgdGhpcmQgbWV0aG9kIHdoZW5ldmVyIHBvc3NpYmxlLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgIFVTRVItU0VMRUNUQUJMRSBDT05GSUdVUkFUSU9OIE1BQ1JPUworICAgKgorICAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtYWNybyBkZWZpbml0aW9ucyBmb3IKKyAgICogYSBzdGFuZGFyZCBidWlsZCBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvCisgICAqIHVzZSB0aGlzIGZpbGUgdG8gYnVpbGQgcHJvamVjdC1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeToKKyAgICoKKyAgICogLSBZb3UgY2FuIG1vZGlmeSB0aGlzIGZpbGUgYnkgaGFuZCwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGluCisgICAqICAgY2FzZXMgd2hlcmUgeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUKKyAgICogICBsaWJyYXJ5IGZyb20gYSBzaW5nbGUgc291cmNlIGRpcmVjdG9yeS4KKyAgICoKKyAgICogLSBZb3UgY2FuIHB1dCBhIGNvcHkgb2YgdGhpcyBmaWxlIGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCBtb3JlCisgICAqICAgcHJlY2lzZWx5IGluIGAkQlVJTEQvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgnLCB3aGVyZSBgJEJVSUxEJworICAgKiAgIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgaXMgaW5jbHVkZWQgX2JlZm9yZV8gdGhlIEZyZWVUeXBlCisgICAqICAgaW5jbHVkZSBwYXRoIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICoKKyAgICogICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBNYWtlZmlsZXMgYW5kIEphbWZpbGVzIHVzZSB0aGUgYnVpbGQKKyAgICogICBkaXJlY3RvcnkgYGJ1aWxkcy88c3lzdGVtPicgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gZWFzaWx5IGNoYW5nZQorICAgKiAgIHRoYXQgZm9yIHlvdXIgb3duIHByb2plY3RzLgorICAgKgorICAgKiAtIENvcHkgdGhlIGZpbGUgPGZ0MmJ1aWxkLmg+IHRvIGAkQlVJTEQvZnQyYnVpbGQuaCcgYW5kIG1vZGlmeSBpdAorICAgKiAgIHNsaWdodGx5IHRvIHByZS1kZWZpbmUgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05TX0ggdXNlZCB0bworICAgKiAgIGxvY2F0ZSB0aGlzIGZpbGUgZHVyaW5nIHRoZSBidWlsZC4gIEZvciBleGFtcGxlLAorICAgKgorICAgKiAgIHsKKyAgICogICAgICNkZWZpbmUgRlRfQ09ORklHX09QVElPTlNfSCAgPG15ZnRvcHRpb25zLmg+CisgICAqICAgICAjaW5jbHVkZSA8ZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg+CisgICAqICAgfQorICAgKgorICAgKiAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaCcgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZm9yIG1hY3JvCisgICAqICAgZGVmaW5pdGlvbnMuCisgICAqCisgICAqICAgTm90ZSBhbHNvIHRoYXQgeW91IGNhbiBzaW1pbGFybHkgcHJlLWRlZmluZSB0aGUgbWFjcm8KKyAgICogICBGVF9DT05GSUdfTU9EVUxFU19IIHVzZWQgdG8gbG9jYXRlIHRoZSBmaWxlIGxpc3Rpbmcgb2YgdGhlIG1vZHVsZXMKKyAgICogICB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCB0byB0aGUgbGlicmFyeSBhdCBjb21waWxlIHRpbWUuICBCeQorICAgKiAgIGRlZmF1bHQsIHRoaXMgZmlsZSBpcyA8ZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg+LgorICAgKgorICAgKiBXZSBoaWdobHkgcmVjb21tZW5kIHVzaW5nIHRoZSB0aGlyZCBtZXRob2Qgd2hlbmV2ZXIgcG9zc2libGUuCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NSw0NDUgKzc3LDQzMCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgeW91IGVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBGcmVlVHlwZSByZWNvZ25pemVzIGFuICAgICAgICovCi0gIC8qIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBgRlJFRVRZUEVfUFJPUEVSVElFUycsIHdoaWNoIGNhbiBiZSB1c2VkICAqLwotICAvKiB0byBjb250cm9sIHRoZSB2YXJpb3VzIGZvbnQgZHJpdmVycyBhbmQgbW9kdWxlcy4gIFRoZSBjb250cm9sbGFibGUgICAgKi8KLSAgLyogcHJvcGVydGllcyBhcmUgbGlzdGVkIGluIHRoZSBzZWN0aW9uIEBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8gKi8KLSAgLyogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICA8b3B0aW9uYWwgd2hpdGVzcGFjZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgPG1vZHVsZS1uYW1lMT4gJzonICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIDxwcm9wZXJ0eS1uYW1lMT4gJz0nIDxwcm9wZXJ0eS12YWx1ZTE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICA8d2hpdGVzcGFjZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgPG1vZHVsZS1uYW1lMj4gJzonICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIDxwcm9wZXJ0eS1uYW1lMj4gJz0nIDxwcm9wZXJ0eS12YWx1ZTI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRXhhbXBsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZSRUVUWVBFX1BST1BFUlRJRVM9dHJ1ZXR5cGU6aW50ZXJwcmV0ZXItdmVyc2lvbj0zNSBcICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmluZz0xIFwgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBhdXRvZml0dGVyOndhcnBpbmc9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQU5EUk9JRDogZGlzYWJsZWQgKi8KLSAgLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJZiB5b3UgZW5hYmxlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIEZyZWVUeXBlIHJlY29nbml6ZXMgYW4KKyAgICogZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBGUkVFVFlQRV9QUk9QRVJUSUVTJywgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgICogY29udHJvbCB0aGUgdmFyaW91cyBmb250IGRyaXZlcnMgYW5kIG1vZHVsZXMuICBUaGUgY29udHJvbGxhYmxlCisgICAqIHByb3BlcnRpZXMgYXJlIGxpc3RlZCBpbiB0aGUgc2VjdGlvbiBAcHJvcGVydGllcy4KKyAgICoKKyAgICogWW91IGhhdmUgdG8gdW5kZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrCisgICAqIHRoZSBjb25jZXB0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYW5kIHRodXMgZG9uJ3QgaGF2ZSB0aGUgYGdldGVudicKKyAgICogZnVuY3Rpb24pLCBmb3IgZXhhbXBsZSBXaW5kb3dzIENFLgorICAgKgorICAgKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8KKyAgICogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuCisgICAqCisgICAqIHsKKyAgICogICA8b3B0aW9uYWwgd2hpdGVzcGFjZT4KKyAgICogICA8bW9kdWxlLW5hbWUxPiAnOicKKyAgICogICA8cHJvcGVydHktbmFtZTE+ICc9JyA8cHJvcGVydHktdmFsdWUxPgorICAgKiAgIDx3aGl0ZXNwYWNlPgorICAgKiAgIDxtb2R1bGUtbmFtZTI+ICc6JworICAgKiAgIDxwcm9wZXJ0eS1uYW1lMj4gJz0nIDxwcm9wZXJ0eS12YWx1ZTI+CisgICAqICAgLi4uCisgICAqIH0KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogeworICAgKiAgIEZSRUVUWVBFX1BST1BFUlRJRVM9dHJ1ZXR5cGU6aW50ZXJwcmV0ZXItdmVyc2lvbj0zNSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICBhdXRvZml0dGVyOndhcnBpbmc9MQorICAgKiB9CisgICAqCisgICAqLworLyogQU5EUk9JRDogZGlzYWJsZWQgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgTENEIHJlbmRlcmluZyAgICAgICAgKi8KLSAgLyogdGVjaG5vbG9neSBzaW1pbGFyIHRvIENsZWFyVHlwZSBpbiB0aGlzIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgVGhpcyAgICovCi0gIC8qIHRlY2hub2xvZ3kgdHJpcGxlcyB0aGUgcmVzb2x1dGlvbiBpbiB0aGUgZGlyZWN0aW9uIGNvbG9yIHN1YnBpeGVscy4gICAqLwotICAvKiBUbyBtaXRpZ2F0ZSBjb2xvciBmcmluZ2VzIGluaGVyZW50IHRvIHRoaXMgdGVjaG5vbG9neSwgeW91IGFsc28gbmVlZCAgKi8KLSAgLyogdG8gZXhwbGljaXRseSBzZXQgdXAgTENEIGZpbHRlcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGNvdmVyZWQgYnkgc2V2ZXJhbCBNaWNyb3NvZnQgcGF0ZW50cyAgICAgICAgKi8KLSAgLyogYW5kIHNob3VsZCBub3QgYmUgYWN0aXZhdGVkIGluIGFueSBkZWZhdWx0IGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgICAgICovCi0gIC8qIFdoZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgRnJlZVR5cGUgb2ZmZXJzIGFsdGVybmF0aXZlIExDRCAgICAgICAqLwotICAvKiByZW5kZXJpbmcgdGVjaG5vbG9neSB0aGF0IHByb2R1Y2VzIGV4Y2VsbGVudCBvdXRwdXQgd2l0aG91dCBMQ0QgICAgICAgKi8KLSAgLyogZmlsdGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3YW50IHRvIGFjdGl2YXRlIExDRCByZW5kZXJpbmcKKyAgICogdGVjaG5vbG9neSBzaW1pbGFyIHRvIENsZWFyVHlwZSBpbiB0aGlzIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LiAgVGhpcworICAgKiB0ZWNobm9sb2d5IHRyaXBsZXMgdGhlIHJlc29sdXRpb24gaW4gdGhlIGRpcmVjdGlvbiBjb2xvciBzdWJwaXhlbHMuCisgICAqIFRvIG1pdGlnYXRlIGNvbG9yIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LCB5b3UgYWxzbyBuZWVkCisgICAqIHRvIGV4cGxpY2l0bHkgc2V0IHVwIExDRCBmaWx0ZXJpbmcuCisgICAqCisgICAqIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgY292ZXJlZCBieSBzZXZlcmFsIE1pY3Jvc29mdCBwYXRlbnRzCisgICAqIGFuZCBzaG91bGQgbm90IGJlIGFjdGl2YXRlZCBpbiBhbnkgZGVmYXVsdCBidWlsZCBvZiB0aGUgbGlicmFyeS4KKyAgICogV2hlbiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBGcmVlVHlwZSBvZmZlcnMgYWx0ZXJuYXRpdmUgTENECisgICAqIHJlbmRlcmluZyB0ZWNobm9sb2d5IHRoYXQgcHJvZHVjZXMgZXhjZWxsZW50IG91dHB1dCB3aXRob3V0IExDRAorICAgKiBmaWx0ZXJpbmcuCisgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNYW55IGNvbXBpbGVycyBwcm92aWRlIGEgbm9uLUFOU0kgNjQtYml0IGRhdGEgdHlwZSB0aGF0IGNhbiBiZSB1c2VkICAgKi8KLSAgLyogYnkgRnJlZVR5cGUgdG8gc3BlZWQgdXAgc29tZSBjb21wdXRhdGlvbnMuICBIb3dldmVyLCB0aGlzIHdpbGwgY3JlYXRlICovCi0gIC8qIHNvbWUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgaW4gc3RyaWN0IEFOU0kgbW9kZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRm9yIHRoaXMgcmVhc29uLCB0aGUgdXNlIG9mIDY0LWJpdCBpbnRlZ2VycyBpcyBub3JtYWxseSBkaXNhYmxlZCB3aGVuICovCi0gIC8qIHRoZSBfX1NURENfXyBtYWNybyBpcyBkZWZpbmVkLiAgWW91IGNhbiBob3dldmVyIGRpc2FibGUgdGhpcyBieSAgICAgICAqLwotICAvKiBkZWZpbmluZyB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCBoZXJlLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZvciBtb3N0IGNvbXBpbGVycywgdGhpcyB3aWxsIG9ubHkgY3JlYXRlIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHdoZW4gICAqLwotICAvKiBidWlsZGluZyB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9iTm90ZTogVGhlIGNvbXBpbGVyLXNwZWNpZmljIDY0LWJpdCBpbnRlZ2VycyBhcmUgZGV0ZWN0ZWQgaW4gdGhlICAgICAqLwotICAvKiAgICAgICAgIGZpbGUgYGZ0Y29uZmlnLmgnIGVpdGhlciBzdGF0aWNhbGx5IG9yIHRocm91Z2ggdGhlICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBgY29uZmlndXJlJyBzY3JpcHQgb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTWFueSBjb21waWxlcnMgcHJvdmlkZSBhIG5vbi1BTlNJIDY0LWJpdCBkYXRhIHR5cGUgdGhhdCBjYW4gYmUgdXNlZAorICAgKiBieSBGcmVlVHlwZSB0byBzcGVlZCB1cCBzb21lIGNvbXB1dGF0aW9ucy4gIEhvd2V2ZXIsIHRoaXMgd2lsbCBjcmVhdGUKKyAgICogc29tZSBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSBpbiBzdHJpY3QgQU5TSSBtb2RlLgorICAgKgorICAgKiBGb3IgdGhpcyByZWFzb24sIHRoZSB1c2Ugb2YgNjQtYml0IGludGVnZXJzIGlzIG5vcm1hbGx5IGRpc2FibGVkIHdoZW4KKyAgICogdGhlIF9fU1REQ19fIG1hY3JvIGlzIGRlZmluZWQuICBZb3UgY2FuIGhvd2V2ZXIgZGlzYWJsZSB0aGlzIGJ5CisgICAqIGRlZmluaW5nIHRoZSBtYWNybyBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0IGhlcmUuCisgICAqCisgICAqIEZvciBtb3N0IGNvbXBpbGVycywgdGhpcyB3aWxsIG9ubHkgY3JlYXRlIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHdoZW4KKyAgICogYnVpbGRpbmcgdGhlIGxpYnJhcnkuCisgICAqCisgICAqIE9iTm90ZTogVGhlIGNvbXBpbGVyLXNwZWNpZmljIDY0LWJpdCBpbnRlZ2VycyBhcmUgZGV0ZWN0ZWQgaW4gdGhlCisgICAqICAgICAgICAgZmlsZSBgZnRjb25maWcuaCcgZWl0aGVyIHN0YXRpY2FsbHkgb3IgdGhyb3VnaCB0aGUKKyAgICogICAgICAgICBgY29uZmlndXJlJyBzY3JpcHQgb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4KKyAgICovCiAjdW5kZWYgRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIGRvIG5vdCB0cnkgdG8gdXNlIGFuIGFzc2VtYmxlciB2ZXJzaW9uIG9mICAgKi8KLSAgLyogcGVyZm9ybWFuY2UtY3JpdGljYWwgZnVuY3Rpb25zIChlLmcuIEZUX011bEZpeCkuICBZb3Ugc2hvdWxkIG9ubHkgZG8gICovCi0gIC8qIHRoYXQgdG8gdmVyaWZ5IHRoYXQgdGhlIGFzc2VtYmxlciBmdW5jdGlvbiB3b3JrcyBwcm9wZXJseSwgb3IgdG8gICAgICAqLwotICAvKiBleGVjdXRlIGJlbmNobWFyayB0ZXN0cyBvZiB0aGUgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMuICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgZG8gbm90IHRyeSB0byB1c2UgYW4gYXNzZW1ibGVyIHZlcnNpb24gb2YKKyAgICogcGVyZm9ybWFuY2UtY3JpdGljYWwgZnVuY3Rpb25zIChlLmcuIEZUX011bEZpeCkuICBZb3Ugc2hvdWxkIG9ubHkgZG8KKyAgICogdGhhdCB0byB2ZXJpZnkgdGhhdCB0aGUgYXNzZW1ibGVyIGZ1bmN0aW9uIHdvcmtzIHByb3Blcmx5LCBvciB0bworICAgKiBleGVjdXRlIGJlbmNobWFyayB0ZXN0cyBvZiB0aGUgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMuCisgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUiAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHRyeSB0byB1c2UgYW4gaW5saW5lZCBhc3NlbWJsZXIgdmVyc2lvbiBvZiAgKi8KLSAgLyogdGhlIGBGVF9NdWxGaXgnIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGBob3RzcG90JyB3aGVuIGxvYWRpbmcgYW5kICAgICAgICovCi0gIC8qIGhpbnRpbmcgZ2x5cGhzLCBhbmQgd2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIGFzIGZhc3QgYXMgcG9zc2libGUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTm90ZSB0aGF0IGlmIHlvdXIgY29tcGlsZXIgb3IgQ1BVIGlzIG5vdCBzdXBwb3J0ZWQsIHRoaXMgd2lsbCBkZWZhdWx0ICovCi0gIC8qIHRvIHRoZSBzdGFuZGFyZCBhbmQgcG9ydGFibGUgaW1wbGVtZW50YXRpb24gZm91bmQgaW4gYGZ0Y2FsYy5jJy4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgdHJ5IHRvIHVzZSBhbiBpbmxpbmVkIGFzc2VtYmxlciB2ZXJzaW9uIG9mCisgICAqIHRoZSBgRlRfTXVsRml4JyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBgaG90c3BvdCcgd2hlbiBsb2FkaW5nIGFuZAorICAgKiBoaW50aW5nIGdseXBocywgYW5kIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCBhcyBmYXN0IGFzIHBvc3NpYmxlLgorICAgKgorICAgKiBOb3RlIHRoYXQgaWYgeW91ciBjb21waWxlciBvciBDUFUgaXMgbm90IHN1cHBvcnRlZCwgdGhpcyB3aWxsIGRlZmF1bHQKKyAgICogdG8gdGhlIHN0YW5kYXJkIGFuZCBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBmb3VuZCBpbiBgZnRjYWxjLmMnLgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkxJTkVfTVVMRklYCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIExaVy1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBmb250IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCB0aGUgICovCi0gIC8qICAgYGNvbXByZXNzJyBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YgICAqLwotICAvKiAgIGZpbGVzIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgWDExIGRpc3RyaWJ1dGlvbnMuICBUaGUgaW1wbGVtZW50YXRpb24gKi8KLSAgLyogICB1c2VzIE5ldEJTRCdzIGB6b3BlbicgdG8gcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAgICovCi0gIC8qICAgKHNlZSBzcmMvbHp3L2Z0Z3ppcC5jKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTFpXLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZQorICAgKiAgIGBjb21wcmVzcycgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGCisgICAqICAgZmlsZXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBYMTEgZGlzdHJpYnV0aW9ucy4gIFRoZSBpbXBsZW1lbnRhdGlvbgorICAgKiAgIHVzZXMgTmV0QlNEJ3MgYHpvcGVuJyB0byBwYXJ0aWFsbHkgdW5jb21wcmVzcyB0aGUgZmlsZSBvbiB0aGUgZmx5CisgICAqICAgKHNlZSBzcmMvbHp3L2Z0Z3ppcC5jKS4KKyAgICoKKyAgICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuCisgICAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogR3ppcC1jb21wcmVzc2VkIGZpbGUgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KLSAgLyogICBgZ3ppcCcgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGIGZpbGVzICovCi0gIC8qICAgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGB6bGliJyB0byAgICAgICAgICAqLwotICAvKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvZ3ppcC9mdGd6aXAuYykuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgU2VlIGFsc28gICAqLwotICAvKiAgIHRoZSBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBHemlwLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZQorICAgKiAgIGBnemlwJyBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YgZmlsZXMKKyAgICogICB0aGF0IGNvbWUgd2l0aCBYRnJlZTg2LiAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYHpsaWInIHRvCisgICAqICAgcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAoc2VlIHNyYy9nemlwL2Z0Z3ppcC5jKS4KKyAgICoKKyAgICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICBTZWUgYWxzbworICAgKiAgIHRoZSBtYWNybyBGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCIGJlbG93LgorICAgKi8KICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBaTGliIGxpYnJhcnkgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhpcyBtYWNybyBpcyBvbmx5IHVzZWQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCIGlzIGRlZmluZWQuICAqLwotICAvKiAgIEl0IGFsbG93cyBGcmVlVHlwZSdzIGBmdGd6aXAnIGNvbXBvbmVudCB0byBsaW5rIHRvIHRoZSBzeXN0ZW0ncyAgICAgKi8KLSAgLyogICBpbnN0YWxsYXRpb24gb2YgdGhlIFpMaWIgbGlicmFyeS4gIFRoaXMgaXMgdXNlZnVsIG9uIHN5c3RlbXMgbGlrZSAgICovCi0gIC8qICAgVW5peCBvciBWTVMgd2hlcmUgaXQgZ2VuZXJhbGx5IGlzIGFscmVhZHkgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBJZiB5b3UgbGV0IGl0IHVuZGVmaW5lZCwgdGhlIGNvbXBvbmVudCB3aWxsIHVzZSBpdHMgb3duIGNvcHkgICAgICAgICovCi0gIC8qICAgb2YgdGhlIHpsaWIgc291cmNlcyBpbnN0ZWFkLiAgVGhlc2UgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGJlICAgICAgICAqLwotICAvKiAgIGluY2x1ZGVkIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29tcG9uZW50IGFuZCAqbm90KiBleHBvcnQgZXh0ZXJuYWwgICAgKi8KLSAgLyogICBmdW5jdGlvbiBuYW1lcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBsaW5rIGFueSBwcm9ncmFtIHdpdGggRnJlZVR5cGUgICovCi0gIC8qICAgX2FuZF8gWkxpYiB3aXRob3V0IGxpbmtpbmcgY29uZmxpY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAgICovCi0gIC8qICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBJZiB5b3UgdXNlIGEgYnVpbGQgc3lzdGVtIGxpa2UgY21ha2Ugb3IgdGhlIGBjb25maWd1cmUnIHNjcmlwdCwgICAgICovCi0gIC8qICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlICAgICAqLwotICAvKiAgIHZhbHVlIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBaTGliIGxpYnJhcnkgc2VsZWN0aW9uCisgICAqCisgICAqICAgVGhpcyBtYWNybyBpcyBvbmx5IHVzZWQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1VTRV9aTElCIGlzIGRlZmluZWQuCisgICAqICAgSXQgYWxsb3dzIEZyZWVUeXBlJ3MgYGZ0Z3ppcCcgY29tcG9uZW50IHRvIGxpbmsgdG8gdGhlIHN5c3RlbSdzCisgICAqICAgaW5zdGFsbGF0aW9uIG9mIHRoZSBaTGliIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIGxpa2UKKyAgICogICBVbml4IG9yIFZNUyB3aGVyZSBpdCBnZW5lcmFsbHkgaXMgYWxyZWFkeSBhdmFpbGFibGUuCisgICAqCisgICAqICAgSWYgeW91IGxldCBpdCB1bmRlZmluZWQsIHRoZSBjb21wb25lbnQgd2lsbCB1c2UgaXRzIG93biBjb3B5CisgICAqICAgb2YgdGhlIHpsaWIgc291cmNlcyBpbnN0ZWFkLiAgVGhlc2UgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGJlCisgICAqICAgaW5jbHVkZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBjb21wb25lbnQgYW5kICpub3QqIGV4cG9ydCBleHRlcm5hbAorICAgKiAgIGZ1bmN0aW9uIG5hbWVzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGxpbmsgYW55IHByb2dyYW0gd2l0aCBGcmVlVHlwZQorICAgKiAgIF9hbmRfIFpMaWIgd2l0aG91dCBsaW5raW5nIGNvbmZsaWN0cy4KKyAgICoKKyAgICogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZQorICAgKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuCisgICAqCisgICAqICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsCisgICAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlCisgICAqICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KKyAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQnppcDItY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZSAgKi8KLSAgLyogICBgYnppcDInIHByb2dyYW0uICBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIHBhcnNlIG1hbnkgb2YgdGhlIFBDRiAgICAgICovCi0gIC8qICAgZmlsZXMgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBsaWJiejInIHRvICAqLwotICAvKiAgIHBhcnRpYWxseSB1bmNvbXByZXNzIHRoZSBmaWxlIG9uIHRoZSBmbHkgKHNlZSBzcmMvYnppcDIvZnRiemlwMi5jKS4gKi8KLSAgLyogICBDb250cmFyeSB0byBnemlwLCBiemlwMiBjdXJyZW50bHkgaXMgbm90IGluY2x1ZGVkIGFuZCBuZWVkIHRvIHVzZSAgICovCi0gIC8qICAgdGhlIHN5c3RlbSBhdmFpbGFibGUgYnppcDIgaW1wbGVtZW50YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LCAgICAgKi8KLSAgLyogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlbmRlbmNlLCBvdmVyd3JpdGluZyB0aGUgICAgICovCi0gIC8qICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEJ6aXAyLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZQorICAgKiAgIGBiemlwMicgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0aGUgUENGCisgICAqICAgZmlsZXMgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBsaWJiejInIHRvCisgICAqICAgcGFydGlhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAoc2VlIHNyYy9iemlwMi9mdGJ6aXAyLmMpLgorICAgKiAgIENvbnRyYXJ5IHRvIGd6aXAsIGJ6aXAyIGN1cnJlbnRseSBpcyBub3QgaW5jbHVkZWQgYW5kIG5lZWQgdG8gdXNlCisgICAqICAgdGhlIHN5c3RlbSBhdmFpbGFibGUgYnppcDIgaW1wbGVtZW50YXRpb24uCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLgorICAgKgorICAgKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LAorICAgKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VuZGVuY2UsIG92ZXJ3cml0aW5nIHRoZQorICAgKiAgIHZhbHVlIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuCisgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMiAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIGZpbGUgc3RyZWFtIGZ1bmN0aW9ucyBhbmQgdHlwZXMsIEZJTEUsICAgKi8KLSAgLyogZm9wZW4oKSBldGMuICBFbmFibGVzIHRoZSB1c2Ugb2Ygc21hbGxlciBzeXN0ZW0gbGlicmFyaWVzIG9uIGVtYmVkZGVkICovCi0gIC8qIHN5c3RlbXMgdGhhdCBoYXZlIG11bHRpcGxlIHN5c3RlbSBsaWJyYXJpZXMsIHNvbWUgd2l0aCBvciB3aXRob3V0ICAgICAqLwotICAvKiBmaWxlIHN0cmVhbSBzdXBwb3J0LCBpbiB0aGUgY2FzZXMgd2hlcmUgZmlsZSBzdHJlYW0gc3VwcG9ydCBpcyBub3QgICAgKi8KLSAgLyogbmVjZXNzYXJ5IHN1Y2ggYXMgbWVtb3J5IGxvYWRpbmcgb2YgZm9udCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIHRvIGRpc2FibGUgdGhlIHVzZSBvZiBmaWxlIHN0cmVhbSBmdW5jdGlvbnMgYW5kIHR5cGVzLCBGSUxFLAorICAgKiBmb3BlbigpIGV0Yy4gIEVuYWJsZXMgdGhlIHVzZSBvZiBzbWFsbGVyIHN5c3RlbSBsaWJyYXJpZXMgb24gZW1iZWRkZWQKKyAgICogc3lzdGVtcyB0aGF0IGhhdmUgbXVsdGlwbGUgc3lzdGVtIGxpYnJhcmllcywgc29tZSB3aXRoIG9yIHdpdGhvdXQKKyAgICogZmlsZSBzdHJlYW0gc3VwcG9ydCwgaW4gdGhlIGNhc2VzIHdoZXJlIGZpbGUgc3RyZWFtIHN1cHBvcnQgaXMgbm90CisgICAqIG5lY2Vzc2FyeSBzdWNoIGFzIG1lbW9yeSBsb2FkaW5nIG9mIGZvbnQgZmlsZXMuCisgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0RJU0FCTEVfU1RSRUFNX1NVUFBPUlQgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUE5HIGJpdG1hcCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGxvYWRpbmcgY29sb3IgYml0bWFwIGdseXBocyBpbiB0aGUgUE5HIGZvcm1hdC4gKi8KLSAgLyogICBUaGlzIHJlcXVpcmVzIGhlbHAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicG5nIGxpYnJhcnkuICBVbmNvbXByZXNzZWQgICovCi0gIC8qICAgY29sb3IgYml0bWFwcyBkbyBub3QgbmVlZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIGFuZCB3aWxsIGJlICAgICAgICAqLwotICAvKiAgIHN1cHBvcnRlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgICAgICAgICAgICAqLwotICAvKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LCAgICAgKi8KLSAgLyogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlbmRlbmNlLCBvdmVyd3JpdGluZyB0aGUgICAgICovCi0gIC8qICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFBORyBiaXRtYXAgc3VwcG9ydC4KKyAgICoKKyAgICogICBGcmVlVHlwZSBub3cgaGFuZGxlcyBsb2FkaW5nIGNvbG9yIGJpdG1hcCBnbHlwaHMgaW4gdGhlIFBORyBmb3JtYXQuCisgICAqICAgVGhpcyByZXF1aXJlcyBoZWxwIGZyb20gdGhlIGV4dGVybmFsIGxpYnBuZyBsaWJyYXJ5LiAgVW5jb21wcmVzc2VkCisgICAqICAgY29sb3IgYml0bWFwcyBkbyBub3QgbmVlZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIGFuZCB3aWxsIGJlCisgICAqICAgc3VwcG9ydGVkIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWd1cmF0aW9uLgorICAgKgorICAgKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4KKyAgICoKKyAgICogICBJZiB5b3UgdXNlIGEgYnVpbGQgc3lzdGVtIGxpa2UgY21ha2Ugb3IgdGhlIGBjb25maWd1cmUnIHNjcmlwdCwKKyAgICogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlbmRlbmNlLCBvdmVyd3JpdGluZyB0aGUKKyAgICogICB2YWx1ZSBoZXJlIHdpdGggdGhlIGNvbmZpZ3VyZWQgb25lLgorICAgKi8KICAgLyogQU5EUk9JRDogZW5hYmxlZCAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSGFyZkJ1enogc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIHVzZXMgdGhlIEhhcmZCdXp6IGxpYnJhcnkgdG8gaW1wcm92ZSBhdXRvLWhpbnRpbmcgb2YgICAgICAgKi8KLSAgLyogICBPcGVuVHlwZSBmb250cy4gIElmIGF2YWlsYWJsZSwgbWFueSBnbHlwaHMgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlICovCi0gIC8qICAgYnkgYSBmb250J3MgY2hhcmFjdGVyIG1hcCB3aWxsIGJlIGhpbnRlZCBhbHNvLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LCAgICAgKi8KLSAgLyogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlbmRlbmNlLCBvdmVyd3JpdGluZyB0aGUgICAgICovCi0gIC8qICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEhhcmZCdXp6IHN1cHBvcnQuCisgICAqCisgICAqICAgRnJlZVR5cGUgdXNlcyB0aGUgSGFyZkJ1enogbGlicmFyeSB0byBpbXByb3ZlIGF1dG8taGludGluZyBvZgorICAgKiAgIE9wZW5UeXBlIGZvbnRzLiAgSWYgYXZhaWxhYmxlLCBtYW55IGdseXBocyBub3QgZGlyZWN0bHkgYWRkcmVzc2FibGUKKyAgICogICBieSBhIGZvbnQncyBjaGFyYWN0ZXIgbWFwIHdpbGwgYmUgaGludGVkIGFsc28uCisgICAqCisgICAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLgorICAgKgorICAgKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LAorICAgKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VuZGVuY2UsIG92ZXJ3cml0aW5nIHRoZQorICAgKiAgIHZhbHVlIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuCisgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHbHlwaCBQb3N0c2NyaXB0IE5hbWVzIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBjb21waWxlZCB3aXRoIHRoZSBgcHNuYW1lcycgbW9kdWxlLiAgVGhpcyAqLwotICAvKiAgIG1vZHVsZSBpcyBpbiBjaGFyZ2Ugb2YgY29udmVydGluZyBhIGdseXBoIG5hbWUgc3RyaW5nIGludG8gYSAgICAgICAgKi8KLSAgLyogICBVbmljb2RlIHZhbHVlLCBvciByZXR1cm4gYSBNYWNpbnRvc2ggc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3IgdGhlICAgICovCi0gIC8qICAgdXNlIHdpdGggdGhlIFRydWVUeXBlIGBwb3N0JyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBVbmRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3Qgd2FudCBgcHNuYW1lcycgY29tcGlsZWQgaW4geW91ciAgICovCi0gIC8qICAgYnVpbGQgb2YgRnJlZVR5cGUuICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6ICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIFRoZSBUcnVlVHlwZSBkcml2ZXIgd2lsbCBwcm92aWRlIGl0cyBvd24gc2V0IG9mIGdseXBoIG5hbWVzLCAgICAgICovCi0gIC8qICAgICBpZiB5b3UgYnVpbGQgaXQgdG8gc3VwcG9ydCBwb3N0c2NyaXB0IG5hbWVzIGluIHRoZSBUcnVlVHlwZSAgICAgICAqLwotICAvKiAgICAgYHBvc3QnIHRhYmxlLCBidXQgd2lsbCBub3Qgc3ludGhlc2l6ZSBhIG1pc3NpbmcgVW5pY29kZSBjaGFybWFwLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgLSBUaGUgVHlwZSAxIGRyaXZlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHN5bnRoZXNpemUgYSBVbmljb2RlICAgICAgICAqLwotICAvKiAgICAgY2hhcm1hcCBvdXQgb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udHMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgWW91IHdvdWxkIG5vcm1hbGx5IHVuZGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyB3aGVuIGJ1aWxkaW5nICAqLwotICAvKiAgIGEgdmVyc2lvbiBvZiBGcmVlVHlwZSB0aGF0IGRvZXNuJ3QgY29udGFpbiBhIFR5cGUgMSBvciBDRkYgZHJpdmVyLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBHbHlwaCBQb3N0c2NyaXB0IE5hbWVzIGhhbmRsaW5nCisgICAqCisgICAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBjb21waWxlZCB3aXRoIHRoZSBgcHNuYW1lcycgbW9kdWxlLiAgVGhpcworICAgKiAgIG1vZHVsZSBpcyBpbiBjaGFyZ2Ugb2YgY29udmVydGluZyBhIGdseXBoIG5hbWUgc3RyaW5nIGludG8gYQorICAgKiAgIFVuaWNvZGUgdmFsdWUsIG9yIHJldHVybiBhIE1hY2ludG9zaCBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvciB0aGUKKyAgICogICB1c2Ugd2l0aCB0aGUgVHJ1ZVR5cGUgYHBvc3QnIHRhYmxlLgorICAgKgorICAgKiAgIFVuZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCB3YW50IGBwc25hbWVzJyBjb21waWxlZCBpbiB5b3VyCisgICAqICAgYnVpbGQgb2YgRnJlZVR5cGUuICBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6CisgICAqCisgICAqICAgLSBUaGUgVHJ1ZVR5cGUgZHJpdmVyIHdpbGwgcHJvdmlkZSBpdHMgb3duIHNldCBvZiBnbHlwaCBuYW1lcywKKyAgICogICAgIGlmIHlvdSBidWlsZCBpdCB0byBzdXBwb3J0IHBvc3RzY3JpcHQgbmFtZXMgaW4gdGhlIFRydWVUeXBlCisgICAqICAgICBgcG9zdCcgdGFibGUsIGJ1dCB3aWxsIG5vdCBzeW50aGVzaXplIGEgbWlzc2luZyBVbmljb2RlIGNoYXJtYXAuCisgICAqCisgICAqICAgLSBUaGUgVHlwZSAxIGRyaXZlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHN5bnRoZXNpemUgYSBVbmljb2RlCisgICAqICAgICBjaGFybWFwIG91dCBvZiB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250cy4KKyAgICoKKyAgICogICBZb3Ugd291bGQgbm9ybWFsbHkgdW5kZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIHdoZW4gYnVpbGRpbmcKKyAgICogICBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYSBUeXBlIDEgb3IgQ0ZGIGRyaXZlci4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBQb3N0c2NyaXB0IE5hbWVzIHRvIFVuaWNvZGUgVmFsdWVzIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBidWlsdCB3aXRoIHRoZSBgUFNOYW1lcycgbW9kdWxlIGNvbXBpbGVkICAqLwotICAvKiAgIGluLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgbW9kdWxlIGlzIHVzZWQgdG8gY29udmVydCBhIGdseXBoIG5hbWUgKi8KLSAgLyogICBpbnRvIGEgVW5pY29kZSB2YWx1ZS4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gb3JkZXIgdG8gICAgICAgICovCi0gIC8qICAgc3ludGhlc2l6ZSBvbiB0aGUgZmx5IGEgVW5pY29kZSBjaGFybWFwIGZyb20gdGhlIENGRi9UeXBlIDEgZHJpdmVyICAqLwotICAvKiAgIHRocm91Z2ggYSBiaWcgdGFibGUgbmFtZWQgdGhlIGBBZG9iZSBHbHlwaCBMaXN0JyAoQUdMKS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVW5kZWZpbmUgdGhpcyBtYWNybyBpZiB5b3UgZG8gbm90IHdhbnQgdGhlIEFkb2JlIEdseXBoIExpc3QgICAgICAgICAqLwotICAvKiAgIGNvbXBpbGVkIGluIHlvdXIgYFBTTmFtZXMnIG1vZHVsZS4gIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlICAgKi8KLSAgLyogICBhYmxlIHRvIHN5bnRoZXNpemUgYSBVbmljb2RlIGNoYXJtYXAgb3V0IG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlICovCi0gIC8qICAgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFBvc3RzY3JpcHQgTmFtZXMgdG8gVW5pY29kZSBWYWx1ZXMgc3VwcG9ydAorICAgKgorICAgKiAgIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIDIgaXMgYnVpbHQgd2l0aCB0aGUgYFBTTmFtZXMnIG1vZHVsZSBjb21waWxlZAorICAgKiAgIGluLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgbW9kdWxlIGlzIHVzZWQgdG8gY29udmVydCBhIGdseXBoIG5hbWUKKyAgICogICBpbnRvIGEgVW5pY29kZSB2YWx1ZS4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gb3JkZXIgdG8KKyAgICogICBzeW50aGVzaXplIG9uIHRoZSBmbHkgYSBVbmljb2RlIGNoYXJtYXAgZnJvbSB0aGUgQ0ZGL1R5cGUgMSBkcml2ZXIKKyAgICogICB0aHJvdWdoIGEgYmlnIHRhYmxlIG5hbWVkIHRoZSBgQWRvYmUgR2x5cGggTGlzdCcgKEFHTCkuCisgICAqCisgICAqICAgVW5kZWZpbmUgdGhpcyBtYWNybyBpZiB5b3UgZG8gbm90IHdhbnQgdGhlIEFkb2JlIEdseXBoIExpc3QKKyAgICogICBjb21waWxlZCBpbiB5b3VyIGBQU05hbWVzJyBtb2R1bGUuICBUaGUgVHlwZSAxIGRyaXZlciB3aWxsIG5vdCBiZQorICAgKiAgIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgY2hhcm1hcCBvdXQgb2YgdGhlIGdseXBocyBmb3VuZCBpbiB0aGUKKyAgICogICBmb250cy4KKyAgICovCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdXBwb3J0IGZvciBNYWMgZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igb3V0bGluZSBmb250cyBpbiBNYWMgICAgICAqLwotICAvKiAgIGZvcm1hdCAobWFjIGRmb250LCBtYWMgcmVzb3VyY2UsIG1hY2JpbmFyeSBjb250YWluaW5nIGEgbWFjICAgICAgICAgKi8KLSAgLyogICByZXNvdXJjZSkgb24gbm9uLU1hYyBwbGF0Zm9ybXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5vdGUgdGhhdCB0aGUgYEZPTkQnIHJlc291cmNlIGlzbid0IGNoZWNrZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTdXBwb3J0IGZvciBNYWMgZm9udHMKKyAgICoKKyAgICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBvdXRsaW5lIGZvbnRzIGluIE1hYworICAgKiAgIGZvcm1hdCAobWFjIGRmb250LCBtYWMgcmVzb3VyY2UsIG1hY2JpbmFyeSBjb250YWluaW5nIGEgbWFjCisgICAqICAgcmVzb3VyY2UpIG9uIG5vbi1NYWMgcGxhdGZvcm1zLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCB0aGUgYEZPTkQnIHJlc291cmNlIGlzbid0IGNoZWNrZWQuCisgICAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHdWVzc2luZyBtZXRob2RzIHRvIGFjY2VzcyBlbWJlZGRlZCByZXNvdXJjZSBmb3JrcyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRW5hYmxlIGV4dHJhIE1hYyBmb250cyBzdXBwb3J0IG9uIG5vbi1NYWMgcGxhdGZvcm1zIChlLmcuICAgICAgICAgICAqLwotICAvKiAgIEdOVS9MaW51eCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgUmVzb3VyY2UgZm9ya3Mgd2hpY2ggaW5jbHVkZSBmb250cyBkYXRhIGFyZSBzdG9yZWQgc29tZXRpbWVzIGluICAgICAqLwotICAvKiAgIGxvY2F0aW9ucyB3aGljaCB1c2VycyBvciBkZXZlbG9wZXJzIGRvbid0IGV4cGVjdGVkLiAgSW4gc29tZSBjYXNlcywgKi8KLSAgLyogICByZXNvdXJjZSBmb3JrcyBzdGFydCB3aXRoIHNvbWUgb2Zmc2V0IGZyb20gdGhlIGhlYWQgb2YgYSBmaWxlLiAgSW4gICovCi0gIC8qICAgb3RoZXIgY2FzZXMsIHRoZSBhY3R1YWwgcmVzb3VyY2UgZm9yayBpcyBzdG9yZWQgaW4gZmlsZSBkaWZmZXJlbnQgICAqLwotICAvKiAgIGZyb20gd2hhdCB0aGUgdXNlciBzcGVjaWZpZXMuICBJZiB0aGlzIG9wdGlvbiBpcyBhY3RpdmF0ZWQsICAgICAgICAgKi8KLSAgLyogICBGcmVlVHlwZSB0cmllcyB0byBndWVzcyB3aGV0aGVyIHN1Y2ggb2Zmc2V0cyBvciBkaWZmZXJlbnQgZmlsZSAgICAgICovCi0gIC8qICAgbmFtZXMgbXVzdCBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBOb3RlIHRoYXQgbm9ybWFsLCBkaXJlY3QgYWNjZXNzIG9mIHJlc291cmNlIGZvcmtzIGlzIGNvbnRyb2xsZWQgdmlhICovCi0gIC8qICAgdGhlIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTIG9wdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEd1ZXNzaW5nIG1ldGhvZHMgdG8gYWNjZXNzIGVtYmVkZGVkIHJlc291cmNlIGZvcmtzCisgICAqCisgICAqICAgRW5hYmxlIGV4dHJhIE1hYyBmb250cyBzdXBwb3J0IG9uIG5vbi1NYWMgcGxhdGZvcm1zIChlLmcuLCBHTlUvTGludXgpLgorICAgKgorICAgKiAgIFJlc291cmNlIGZvcmtzIHdoaWNoIGluY2x1ZGUgZm9udHMgZGF0YSBhcmUgc3RvcmVkIHNvbWV0aW1lcyBpbgorICAgKiAgIGxvY2F0aW9ucyB3aGljaCB1c2VycyBvciBkZXZlbG9wZXJzIGRvbid0IGV4cGVjdGVkLiAgSW4gc29tZSBjYXNlcywKKyAgICogICByZXNvdXJjZSBmb3JrcyBzdGFydCB3aXRoIHNvbWUgb2Zmc2V0IGZyb20gdGhlIGhlYWQgb2YgYSBmaWxlLiAgSW4KKyAgICogICBvdGhlciBjYXNlcywgdGhlIGFjdHVhbCByZXNvdXJjZSBmb3JrIGlzIHN0b3JlZCBpbiBmaWxlIGRpZmZlcmVudAorICAgKiAgIGZyb20gd2hhdCB0aGUgdXNlciBzcGVjaWZpZXMuICBJZiB0aGlzIG9wdGlvbiBpcyBhY3RpdmF0ZWQsCisgICAqICAgRnJlZVR5cGUgdHJpZXMgdG8gZ3Vlc3Mgd2hldGhlciBzdWNoIG9mZnNldHMgb3IgZGlmZmVyZW50IGZpbGUKKyAgICogICBuYW1lcyBtdXN0IGJlIHVzZWQuCisgICAqCisgICAqICAgTm90ZSB0aGF0IG5vcm1hbCwgZGlyZWN0IGFjY2VzcyBvZiByZXNvdXJjZSBmb3JrcyBpcyBjb250cm9sbGVkIHZpYQorICAgKiAgIHRoZSBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUyBvcHRpb24uCisgICAqLwogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBbGxvdyB0aGUgdXNlIG9mIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZSB0byBsb2FkIHR5cGVmYWNlcyB0aGF0ICAgICAgKi8KLSAgLyogY29udGFpbiBubyBnbHlwaCBkYXRhLCBidXQgc3VwcGx5IGl0IHZpYSBhIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgICovCi0gIC8qIFRoaXMgaXMgcmVxdWlyZWQgYnkgY2xpZW50cyBzdXBwb3J0aW5nIGRvY3VtZW50IGZvcm1hdHMgd2hpY2ggICAgICAgICAqLwotICAvKiBzdXBwbHkgZm9udCBkYXRhIGluY3JlbWVudGFsbHkgYXMgdGhlIGRvY3VtZW50IGlzIHBhcnNlZCwgc3VjaCAgICAgICAgKi8KLSAgLyogYXMgdGhlIEdob3N0c2NyaXB0IGludGVycHJldGVyIGZvciB0aGUgUG9zdFNjcmlwdCBsYW5ndWFnZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBTkRST0lEOiBkaXNhYmxlZCAqLwotICAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEFsbG93IHRoZSB1c2Ugb2YgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlIHRvIGxvYWQgdHlwZWZhY2VzIHRoYXQKKyAgICogY29udGFpbiBubyBnbHlwaCBkYXRhLCBidXQgc3VwcGx5IGl0IHZpYSBhIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGNsaWVudHMgc3VwcG9ydGluZyBkb2N1bWVudCBmb3JtYXRzIHdoaWNoCisgICAqIHN1cHBseSBmb250IGRhdGEgaW5jcmVtZW50YWxseSBhcyB0aGUgZG9jdW1lbnQgaXMgcGFyc2VkLCBzdWNoCisgICAqIGFzIHRoZSBHaG9zdHNjcmlwdCBpbnRlcnByZXRlciBmb3IgdGhlIFBvc3RTY3JpcHQgbGFuZ3VhZ2UuCisgICAqLworLyogQU5EUk9JRDogZGlzYWJsZWQgKi8KKy8qICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgcmVuZGVyIHBvb2wgdXNlZCBieSB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciAgKi8KLSAgLyogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sIHVzZWQgYnkgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIKKyAgICogdG8gZG8gYWxsIG9mIGl0cyB3b3JrLgorICAgKi8KICNkZWZpbmUgRlRfUkVOREVSX1BPT0xfU0laRSAgMTYzODRMCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX01BWF9NT0RVTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgbWF4aW11bSBudW1iZXIgb2YgbW9kdWxlcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGluIGEgc2luZ2xlICAgICovCi0gIC8qICAgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICAzMiBpcyB0aGUgZGVmYXVsdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZUX01BWF9NT0RVTEVTCisgICAqCisgICAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG1vZHVsZXMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCBpbiBhIHNpbmdsZQorICAgKiAgIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiAgMzIgaXMgdGhlIGRlZmF1bHQuCisgICAqLwogI2RlZmluZSBGVF9NQVhfTU9EVUxFUyAgMzIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVidWcgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIGNhbiBiZSBjb21waWxlZCBpbiBkZWJ1ZyBvciB0cmFjZSBtb2RlLiAgSW4gZGVidWcgbW9kZSwgICAgKi8KLSAgLyogICBlcnJvcnMgYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIGBmdGRlYnVnJyBjb21wb25lbnQuICBJbiB0cmFjZSAgICAgICovCi0gIC8qICAgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZyAgICAqLwotICAvKiAgIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRGVmaW5lIEZUX0RFQlVHX0xFVkVMX0VSUk9SIHRvIGJ1aWxkIHRoZSBsaWJyYXJ5IGluIGRlYnVnIG1vZGUuICAgICAqLwotICAvKiAgIERlZmluZSBGVF9ERUJVR19MRVZFTF9UUkFDRSB0byBidWlsZCBpdCBpbiB0cmFjZSBtb2RlLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG9uJ3QgZGVmaW5lIGFueSBvZiB0aGVzZSBtYWNyb3MgdG8gY29tcGlsZSBpbiBgcmVsZWFzZScgbW9kZSEgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBEbyBub3QgI3VuZGVmIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lICovCi0gIC8qICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlYnVnIGxldmVsCisgICAqCisgICAqICAgRnJlZVR5cGUgY2FuIGJlIGNvbXBpbGVkIGluIGRlYnVnIG9yIHRyYWNlIG1vZGUuICBJbiBkZWJ1ZyBtb2RlLAorICAgKiAgIGVycm9ycyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgYGZ0ZGVidWcnIGNvbXBvbmVudC4gIEluIHRyYWNlCisgICAqICAgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZworICAgKiAgIGV4ZWN1dGlvbi4KKyAgICoKKyAgICogICBEZWZpbmUgRlRfREVCVUdfTEVWRUxfRVJST1IgdG8gYnVpbGQgdGhlIGxpYnJhcnkgaW4gZGVidWcgbW9kZS4KKyAgICogICBEZWZpbmUgRlRfREVCVUdfTEVWRUxfVFJBQ0UgdG8gYnVpbGQgaXQgaW4gdHJhY2UgbW9kZS4KKyAgICoKKyAgICogICBEb24ndCBkZWZpbmUgYW55IG9mIHRoZXNlIG1hY3JvcyB0byBjb21waWxlIGluIGByZWxlYXNlJyBtb2RlIQorICAgKgorICAgKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUKKyAgICogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuCisgICAqLwogLyogI2RlZmluZSBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLwogLyogI2RlZmluZSBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBdXRvZml0dGVyIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSWYgRlRfREVCVUdfQVVUT0ZJVCBpcyBkZWZpbmVkLCBGcmVlVHlwZSBwcm92aWRlcyBzb21lIG1lYW5zIHRvICAgICAqLwotICAvKiAgIGNvbnRyb2wgdGhlIGF1dG9maXR0ZXIgYmVoYXZpb3VyIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2l0aCBnbG9iYWwgKi8KLSAgLyogICBib29sZWFuIHZhcmlhYmxlcyAoY29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkICpuZXZlciogZW5hYmxlIHRoaXMgICAgICovCi0gIC8qICAgd2hpbGUgY29tcGlsaW5nIGluIGByZWxlYXNlJyBtb2RlKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIF9hZl9kZWJ1Z19kaXNhYmxlX2hvcnpfaGludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgX2FmX2RlYnVnX2Rpc2FibGVfYmx1ZV9oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQWRkaXRpb25hbGx5LCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIGR1bXBzIG9mIHZhcmlvdXMgICAgICAqLwotICAvKiAgIGludGVybmFsIGF1dG9maXQgc3RydWN0dXJlcyB0byBzdGRvdXQgKHVzaW5nIGBwcmludGYnKTogICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3BvaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZHVtcF9zZWdtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfZWRnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgYWZfZ2x5cGhfaGludHNfZ2V0X3NlZ21lbnRfb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQXMgYW4gYXJndW1lbnQsIHRoZXkgdXNlIGFub3RoZXIgZ2xvYmFsIHZhcmlhYmxlOiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIF9hZl9kZWJ1Z19oaW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgYGZ0Z3JpZCcgZGVtbyBwcm9ncmFtIHRvIHNlZSBob3cgdGhvc2UgICAgKi8KLSAgLyogICB2YXJpYWJsZXMgYW5kIG1hY3JvcyBzaG91bGQgYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgKi8KLSAgLyogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQXV0b2ZpdHRlciBkZWJ1Z2dpbmcKKyAgICoKKyAgICogICBJZiBGVF9ERUJVR19BVVRPRklUIGlzIGRlZmluZWQsIEZyZWVUeXBlIHByb3ZpZGVzIHNvbWUgbWVhbnMgdG8KKyAgICogICBjb250cm9sIHRoZSBhdXRvZml0dGVyIGJlaGF2aW91ciBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdpdGggZ2xvYmFsCisgICAqICAgYm9vbGVhbiB2YXJpYWJsZXMgKGNvbnNlcXVlbnRseSwgeW91IHNob3VsZCAqbmV2ZXIqIGVuYWJsZSB0aGlzCisgICAqICAgd2hpbGUgY29tcGlsaW5nIGluIGByZWxlYXNlJyBtb2RlKToKKyAgICoKKyAgICogICB7CisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV9ob3J6X2hpbnRzCisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV92ZXJ0X2hpbnRzCisgICAqICAgICBfYWZfZGVidWdfZGlzYWJsZV9ibHVlX2hpbnRzCisgICAqICAgfQorICAgKgorICAgKiAgIEFkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSBkdW1wcyBvZiB2YXJpb3VzCisgICAqICAgaW50ZXJuYWwgYXV0b2ZpdCBzdHJ1Y3R1cmVzIHRvIHN0ZG91dCAodXNpbmcgYHByaW50ZicpOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzCisgICAqICAgICBhZl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQKKyAgICogICB9CisgICAqCisgICAqICAgQXMgYW4gYXJndW1lbnQsIHRoZXkgdXNlIGFub3RoZXIgZ2xvYmFsIHZhcmlhYmxlOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIF9hZl9kZWJ1Z19oaW50cworICAgKiAgIH0KKyAgICoKKyAgICogICBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGBmdGdyaWQnIGRlbW8gcHJvZ3JhbSB0byBzZWUgaG93IHRob3NlCisgICAqICAgdmFyaWFibGVzIGFuZCBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQuCisgICAqCisgICAqICAgRG8gbm90ICN1bmRlZiB0aGVzZSBtYWNyb3MgaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZQorICAgKiAgIHRoZW0gZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KKyAgICovCiAvKiAjZGVmaW5lIEZUX0RFQlVHX0FVVE9GSVQgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTWVtb3J5IERlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZyZWVUeXBlIG5vdyBjb21lcyB3aXRoIGFuIGludGVncmF0ZWQgbWVtb3J5IGRlYnVnZ2VyIHRoYXQgaXMgICAgICAgKi8KLSAgLyogICBjYXBhYmxlIG9mIGRldGVjdGluZyBzaW1wbGUgZXJyb3JzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSAgICAgICovCi0gIC8qICAgZGVsZXRlcy4gIFRvIGNvbXBpbGUgaXQgd2l0aGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHlvdSAgICAgICAqLwotICAvKiAgIHNob3VsZCBkZWZpbmUgRlRfREVCVUdfTUVNT1JZIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBhY3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuICAgICAqLwotICAvKiAgIHdoZW4gdGhlIF9lbnZpcm9ubWVudF8gdmFyaWFibGUgYEZUMl9ERUJVR19NRU1PUlknIGlzIGRlZmluZWQgYWxzbyEgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgICAqLwotICAvKiAgIGl0IGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNZW1vcnkgRGVidWdnaW5nCisgICAqCisgICAqICAgRnJlZVR5cGUgbm93IGNvbWVzIHdpdGggYW4gaW50ZWdyYXRlZCBtZW1vcnkgZGVidWdnZXIgdGhhdCBpcworICAgKiAgIGNhcGFibGUgb2YgZGV0ZWN0aW5nIHNpbXBsZSBlcnJvcnMgbGlrZSBtZW1vcnkgbGVha3Mgb3IgZG91YmxlCisgICAqICAgZGVsZXRlcy4gIFRvIGNvbXBpbGUgaXQgd2l0aGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHlvdQorICAgKiAgIHNob3VsZCBkZWZpbmUgRlRfREVCVUdfTUVNT1JZIGhlcmUuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBhY3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuCisgICAqICAgd2hlbiB0aGUgX2Vudmlyb25tZW50XyB2YXJpYWJsZSBgRlQyX0RFQlVHX01FTU9SWScgaXMgZGVmaW5lZCBhbHNvIQorICAgKgorICAgKiAgIERvIG5vdCAjdW5kZWYgdGhpcyBtYWNybyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lCisgICAqICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KKyAgICovCiAvKiAjZGVmaW5lIEZUX0RFQlVHX01FTU9SWSAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNb2R1bGUgZXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgSWYgdGhpcyBtYWNybyBpcyBzZXQgKHdoaWNoIGlzIF9ub3RfIHRoZSBkZWZhdWx0KSwgdGhlIGhpZ2hlciBieXRlICAqLwotICAvKiAgIG9mIGFuIGVycm9yIGNvZGUgZ2l2ZXMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZXJyb3IgaGFzIG9jY3VycmVkLCAgKi8KLSAgLyogICB3aGlsZSB0aGUgbG93ZXIgYnl0ZSBpcyB0aGUgcmVhbCBlcnJvciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFNldHRpbmcgdGhpcyBtYWNybyBtYWtlcyBzZW5zZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHksIHNpbmNlICAgKi8KLSAgLyogICBpdCB3b3VsZCBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBvZiBjZXJ0YWluIHByb2dyYW1zIHRoYXQgdXNlICAgICovCi0gIC8qICAgRnJlZVR5cGUgMi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlcyBmdG1vZGVyci5oIGFuZCBmdGVycm9ycy5oLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTW9kdWxlIGVycm9ycworICAgKgorICAgKiAgIElmIHRoaXMgbWFjcm8gaXMgc2V0ICh3aGljaCBpcyBfbm90XyB0aGUgZGVmYXVsdCksIHRoZSBoaWdoZXIgYnl0ZQorICAgKiAgIG9mIGFuIGVycm9yIGNvZGUgZ2l2ZXMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZXJyb3IgaGFzIG9jY3VycmVkLAorICAgKiAgIHdoaWxlIHRoZSBsb3dlciBieXRlIGlzIHRoZSByZWFsIGVycm9yIGNvZGUuCisgICAqCisgICAqICAgU2V0dGluZyB0aGlzIG1hY3JvIG1ha2VzIHNlbnNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSwgc2luY2UKKyAgICogICBpdCB3b3VsZCBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBvZiBjZXJ0YWluIHByb2dyYW1zIHRoYXQgdXNlCisgICAqICAgRnJlZVR5cGUgMi4KKyAgICoKKyAgICogICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlcyBmdG1vZGVyci5oIGFuZCBmdGVycm9ycy5oLgorICAgKi8KICN1bmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9NT0RVTEVfRVJST1JTCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBvc2l0aW9uIEluZGVwZW5kZW50IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBJZiB0aGlzIG1hY3JvIGlzIHNldCAod2hpY2ggaXMgX25vdF8gdGhlIGRlZmF1bHQpLCBGcmVlVHlwZTIgd2lsbCAgICovCi0gIC8qICAgYXZvaWQgY3JlYXRpbmcgY29uc3RhbnRzIHRoYXQgcmVxdWlyZSBhZGRyZXNzIGZpeHVwcy4gIEluc3RlYWQgdGhlICAqLwotICAvKiAgIGNvbnN0YW50cyB3aWxsIGJlIG1vdmVkIGludG8gYSBzdHJ1Y3QgYW5kIGFkZGl0aW9uYWwgaW50aWFsaXphdGlvbiAgKi8KLSAgLyogICBjb2RlIHdpbGwgYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFNldHRpbmcgdGhpcyBtYWNybyBpcyBuZWVkZWQgZm9yIHN5c3RlbXMgdGhhdCBwcm9oaWJpdCBhZGRyZXNzICAgICAgKi8KLSAgLyogICBmaXh1cHMsIHN1Y2ggYXMgQlJFVy4gIFtOb3RlIHRoYXQgc3RhbmRhcmQgY29tcGlsZXJzIGxpa2UgZ2NjIG9yICAgICovCi0gIC8qICAgY2xhbmcgaGFuZGxlIFBJQyBnZW5lcmF0aW9uIGF1dG9tYXRpY2FsbHk7IHlvdSBkb24ndCBoYXZlIHRvIHNldCAgICAqLwotICAvKiAgIEZUX0NPTkZJR19PUFRJT05fUElDLCB3aGljaCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgdmVyeSBzcGVjaWFsICAgICAgKi8KLSAgLyogICBjb21waWxlcnMuXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5vdGUgdGhhdCBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgZm9yIGFsbCAgICAgKi8KLSAgLyogICBtb2R1bGVzIChzZWUgYG1vZHVsZXMuY2ZnJyBmb3IgYSBjb21wbGV0ZSBsaXN0KS4gIEZvciBidWlsZGluZyB3aXRoICovCi0gIC8qICAgRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydCwgZG8gdGhlIGZvbGxvd2luZy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIDAuIENsb25lIHRoZSByZXBvc2l0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAxLiBEZWZpbmUgRlRfQ09ORklHX09QVElPTl9QSUMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgMi4gUmVtb3ZlIGFsbCBzdWJkaXJlY3RvcmllcyBpbiBgc3JjJyB0aGF0IGRvbid0IGhhdmUgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAzLiBDb21tZW50IG91dCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGVzIGluIGBtb2R1bGVzLmNmZycuICAgICAgICAqLwotICAvKiAgICAgNC4gQ29tcGlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLwogICAvKioqKiAgICAgICAgUyBGIE4gVCAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgKioqKi8KQEAgLTUyMiw1MCArNTA5LDYwIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgICAgICAgKi8KLSAgLyogZW1iZWRkZWQgYml0bWFwcyBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgU0ZOVCBtb2R1bGUgKG5hbWVseSAgICAgICAgICovCi0gIC8qIFRydWVUeXBlICYgT3BlblR5cGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgaWYgeW91IHdhbnQgdG8gc3VwcG9ydAorICAgKiBlbWJlZGRlZCBiaXRtYXBzIGluIGFsbCBmb3JtYXRzIHVzaW5nIHRoZSBTRk5UIG1vZHVsZSAobmFtZWx5CisgICAqIFRydWVUeXBlICYgT3BlblR5cGUpLgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byAgICAqLwotICAvKiBsb2FkIGFuZCBlbnVtZXJhdGUgdGhlIGdseXBoIFBvc3RzY3JpcHQgbmFtZXMgaW4gYSBUcnVlVHlwZSBvciAgICAgICAgKi8KLSAgLyogT3BlblR5cGUgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgd2hlbiB5b3UgZG8gbm90IGNvbXBpbGUgdGhlIGBQU05hbWVzJyBtb2R1bGUgYnkgdW5kZWZpbmluZyAgKi8KLSAgLyogdGhlIGFib3ZlIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUywgdGhlIGBzZm50JyBtb2R1bGUgd2lsbCAgICovCi0gIC8qIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHVzZWQgdG8gcmVhZCB0aGUgUFMgTmFtZXMgdGFibGUgZnJvbSBhIGZvbnQuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogKEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgdXNlcyBgUFNOYW1lcycgdG8gZXh0cmFjdCBnbHlwaCBuYW1lcy4pICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgY29sb3VyZWQKKyAgICogb3V0bGluZXMgKGZyb20gdGhlIENPTFIvQ1BBTCB0YWJsZXMpIGluIGFsbCBmb3JtYXRzIHVzaW5nIHRoZSBTRk5UCisgICAqIG1vZHVsZSAobmFtZWx5IFRydWVUeXBlICYgT3BlblR5cGUpLgorICAgKi8KKyNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8KKyAgICogbG9hZCBhbmQgZW51bWVyYXRlIHRoZSBnbHlwaCBQb3N0c2NyaXB0IG5hbWVzIGluIGEgVHJ1ZVR5cGUgb3IKKyAgICogT3BlblR5cGUgZmlsZS4KKyAgICoKKyAgICogTm90ZSB0aGF0IHdoZW4geW91IGRvIG5vdCBjb21waWxlIHRoZSBgUFNOYW1lcycgbW9kdWxlIGJ5IHVuZGVmaW5pbmcKKyAgICogdGhlIGFib3ZlIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUywgdGhlIGBzZm50JyBtb2R1bGUgd2lsbAorICAgKiBjb250YWluIGFkZGl0aW9uYWwgY29kZSB1c2VkIHRvIHJlYWQgdGhlIFBTIE5hbWVzIHRhYmxlIGZyb20gYSBmb250LgorICAgKgorICAgKiAoQnkgZGVmYXVsdCwgdGhlIG1vZHVsZSB1c2VzIGBQU05hbWVzJyB0byBleHRyYWN0IGdseXBoIG5hbWVzLikKKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTIGlmIHlvdXIgYXBwbGljYXRpb25zIG5lZWQgdG8gICAgICAgKi8KLSAgLyogYWNjZXNzIHRoZSBpbnRlcm5hbCBuYW1lIHRhYmxlIGluIGEgU0ZOVC1iYXNlZCBmb3JtYXQgbGlrZSBUcnVlVHlwZSAgICovCi0gIC8qIG9yIE9wZW5UeXBlLiAgVGhlIG5hbWUgdGFibGUgY29udGFpbnMgdmFyaW91cyBzdHJpbmdzIHVzZWQgdG8gICAgICAgICAqLwotICAvKiBkZXNjcmliZSB0aGUgZm9udCwgbGlrZSBmYW1pbHkgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuICBJdCAgICAgKi8KLSAgLyogZG9lcyBub3QgY29udGFpbiBhbnkgZ2x5cGggbmFtZSB0aG91Z2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBY2Nlc3NpbmcgU0ZOVCBuYW1lcyBpcyBkb25lIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAgICAgICAgKi8KLSAgLyogYGZ0c25hbWVzLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUyBpZiB5b3VyIGFwcGxpY2F0aW9ucyBuZWVkIHRvCisgICAqIGFjY2VzcyB0aGUgaW50ZXJuYWwgbmFtZSB0YWJsZSBpbiBhIFNGTlQtYmFzZWQgZm9ybWF0IGxpa2UgVHJ1ZVR5cGUKKyAgICogb3IgT3BlblR5cGUuICBUaGUgbmFtZSB0YWJsZSBjb250YWlucyB2YXJpb3VzIHN0cmluZ3MgdXNlZCB0bworICAgKiBkZXNjcmliZSB0aGUgZm9udCwgbGlrZSBmYW1pbHkgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuICBJdAorICAgKiBkb2VzIG5vdCBjb250YWluIGFueSBnbHlwaCBuYW1lIHRob3VnaC4KKyAgICoKKyAgICogQWNjZXNzaW5nIFNGTlQgbmFtZXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4KKyAgICogYGZ0c25hbWVzLmgnLgorICAgKi8KICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRydWVUeXBlIENNYXAgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBIZXJlIHlvdSBjYW4gZmluZS10dW5lIHdoaWNoIFRydWVUeXBlIENNYXAgdGFibGUgZm9ybWF0IHNoYWxsIGJlICAgICovCi0gIC8qICAgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVHJ1ZVR5cGUgQ01hcCBzdXBwb3J0CisgICAqCisgICAqICAgSGVyZSB5b3UgY2FuIGZpbmUtdHVuZSB3aGljaCBUcnVlVHlwZSBDTWFwIHRhYmxlIGZvcm1hdCBzaGFsbCBiZQorICAgKiAgIHN1cHBvcnRlZC4KKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8wCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8yCiAjZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF80CkBAIC01ODUsNzYgKzU4Miw3NiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiBpZiB5b3Ugd2FudCB0byBjb21waWxlICAgKi8KLSAgLyogYSBieXRlY29kZSBpbnRlcnByZXRlciBpbiB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCeSB1bmRlZmluaW5nIHRoaXMsIHlvdSB3aWxsIG9ubHkgY29tcGlsZSB0aGUgY29kZSBuZWNlc3NhcnkgdG8gbG9hZCAgKi8KLSAgLyogVHJ1ZVR5cGUgZ2x5cGhzIHdpdGhvdXQgaGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIERvIG5vdCAjdW5kZWYgdGhpcyBtYWNybyBoZXJlLCBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0ICAgICAgICAgKi8KLSAgLyogICBkZWZpbmUgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgaWYgeW91IHdhbnQgdG8gY29tcGlsZQorICAgKiBhIGJ5dGVjb2RlIGludGVycHJldGVyIGluIHRoZSBUcnVlVHlwZSBkcml2ZXIuCisgICAqCisgICAqIEJ5IHVuZGVmaW5pbmcgdGhpcywgeW91IHdpbGwgb25seSBjb21waWxlIHRoZSBjb2RlIG5lY2Vzc2FyeSB0byBsb2FkCisgICAqIFRydWVUeXBlIGdseXBocyB3aXRob3V0IGhpbnRpbmcuCisgICAqCisgICAqICAgRG8gbm90ICN1bmRlZiB0aGlzIG1hY3JvIGhlcmUsIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQKKyAgICogICBkZWZpbmUgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpZiB5b3Ugd2FudCB0byBjb21waWxlICAgICAgICovCi0gIC8qIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCBpbnRvIHRoZSBUcnVlVHlwZSBkcml2ZXIuICBUaGlzIG1vZGlmaWVzIHRoZSAqLwotICAvKiBUcnVlVHlwZSBoaW50aW5nIG1lY2hhbmlzbSB3aGVuIGFueXRoaW5nIGJ1dCBGVF9SRU5ERVJfTU9ERV9NT05PIGlzICAgKi8KLSAgLyogcmVxdWVzdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJbiBwYXJ0aWN1bGFyLCBpdCBtb2RpZmllcyB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdG8gaW50ZXJwcmV0IChvciAgKi8KLSAgLyogbm90KSBpbnN0cnVjdGlvbnMgaW4gYSBjZXJ0YWluIHdheSBzbyB0aGF0IGFsbCBUcnVlVHlwZSBmb250cyBsb29rICAgICovCi0gIC8qIGxpa2UgdGhleSBkbyBpbiBhIFdpbmRvd3MgQ2xlYXJUeXBlIChEaXJlY3RXcml0ZSkgZW52aXJvbm1lbnQuICBTZWUgICAqLwotICAvKiBbMV0gZm9yIGEgdGVjaG5pY2FsIG92ZXJ2aWV3IG9uIHdoYXQgdGhpcyBtZWFucy4gIFNlZSBgdHRpbnRlcnAuaCcgICAgKi8KLSAgLyogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgTEVBTiBvcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFZhbHVlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHZhbHVlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYEluZmluYWxpdHknIG1vbmlrZXIsICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJpYnV0ZWQgYnkgYW4gaW5kaXZpZHVhbCBuaWNrbmFtZWQgSW5maW5hbGl0eSB3aXRoIHRoZSBnb2FsIG9mICovCi0gIC8qICAgIG1ha2luZyBUcnVlVHlwZSBmb250cyByZW5kZXIgYmV0dGVyIHRoYW4gb24gV2luZG93cy4gIEEgaGlnaCAgICAgICAqLwotICAvKiAgICBhbW91bnQgb2YgY29uZmlndXJhYmlsaXR5IGFuZCBmbGV4aWJpbGl0eSwgZG93biB0byBydWxlcyBmb3IgICAgICAgKi8KLSAgLyogICAgc2luZ2xlIGdseXBocyBpbiBmb250cywgYnV0IGFsc28gdmVyeSBzbG93LiAgSXRzIGV4cGVyaW1lbnRhbCBhbmQgICovCi0gIC8qICAgIHNsb3cgbmF0dXJlIGFuZCB0aGUgb3JpZ2luYWwgZGV2ZWxvcGVyIGxvc2luZyBpbnRlcmVzdCBtZWFudCB0aGF0ICAqLwotICAvKiAgICB0aGlzIG9wdGlvbiB3YXMgbmV2ZXIgZW5hYmxlZCBpbiBkZWZhdWx0IGJ1aWxkcy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBjb3JyZXNwb25kaW5nIGludGVycHJldGVyIHZlcnNpb24gaXMgdjM4LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVmFsdWUgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBuZXcgZGVmYXVsdCBtb2RlIGZvciB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhlIEluZmluYWxpdHkgY29kZSAqLwotICAvKiAgICBiYXNlIHdhcyBzdHJpcHBlZCB0byB0aGUgYmFyZSBtaW5pbXVtIGFuZCBhbGwgY29uZmlndXJhYmlsaXR5ICAgICAgKi8KLSAgLyogICAgcmVtb3ZlZCBpbiB0aGUgbmFtZSBvZiBzcGVlZCBhbmQgc2ltcGxpY2l0eS4gIFRoZSBjb25maWd1cmFiaWxpdHkgICovCi0gIC8qICAgIHdhcyBtYWlubHkgYWltZWQgYXQgbGVnYWN5IGZvbnRzIGxpa2UgQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgb3IgICAqLwotICAvKiAgICBDb3VyaWVyLiAgTGVnYWN5IGZvbnRzIGFyZSBmb250cyB0aGF0IG1vZGlmeSB2ZXJ0aWNhbCBzdGVtcyB0byAgICAgKi8KLSAgLyogICAgYWNoaWV2ZSBjbGVhbiBibGFjay1hbmQtd2hpdGUgYml0bWFwcy4gIFRoZSBuZXcgbW9kZSBmb2N1c2VzIG9uICAgICovCi0gIC8qICAgIGFwcGx5aW5nIGEgbWluaW1hbCBzZXQgb2YgcnVsZXMgdG8gYWxsIGZvbnRzIGluZGlzY3JpbWluYXRlbHkgc28gICAqLwotICAvKiAgICB0aGF0IG1vZGVybiBhbmQgd2ViIGZvbnRzIHJlbmRlciB3ZWxsIHdoaWxlIGxlZ2FjeSBmb250cyByZW5kZXIgICAgKi8KLSAgLyogICAgb2theS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgY29ycmVzcG9uZGluZyBpbnRlcnByZXRlciB2ZXJzaW9uIGlzIHY0MC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFZhbHVlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21waWxlIGJvdGgsIG1ha2luZyBib3RoIHYzOCBhbmQgdjQwIGF2YWlsYWJsZSAodGhlIGxhdHRlciBpcyB0aGUgKi8KLSAgLyogICAgZGVmYXVsdCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCeSB1bmRlZmluaW5nIHRoZXNlLCB5b3UgZ2V0IHJlbmRlcmluZyBiZWhhdmlvciBsaWtlIG9uIFdpbmRvd3MgICAgICAgKi8KLSAgLyogd2l0aG91dCBDbGVhclR5cGUsIGkuZS4sIFdpbmRvd3MgWFAgd2l0aG91dCBDbGVhclR5cGUgZW5hYmxlZCBhbmQgICAgICovCi0gIC8qIFdpbjl4IChpbnRlcnByZXRlciB2ZXJzaW9uIHYzNSkuICBPciBub3QsIGRlcGVuZGluZyBvbiBob3cgbXVjaCAgICAgICAqLwotICAvKiBoaW50aW5nIGJsb29kIGFuZCB0ZXN0aW5nIHRlYXJzIHRoZSBmb250IGRlc2lnbmVyIHB1dCBpbnRvIGEgZ2l2ZW4gICAgKi8KLSAgLyogZm9udC4gIElmIHlvdSBkZWZpbmUgb25lIG9yIGJvdGggc3VicGl4ZWwgaGludGluZyBvcHRpb25zLCB5b3UgY2FuICAgICovCi0gIC8qIHN3aXRjaCBiZXR3ZWVuIGJldHdlZW4gdjM1IGFuZCB0aGUgb25lcyB5b3UgZGVmaW5lICh1c2luZyAgICAgICAgICAgICAqLwotICAvKiBgRlRfUHJvcGVydHlfU2V0JykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgb3B0aW9uIHJlcXVpcmVzIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgdG8gYmUgICAgICAqLwotICAvKiBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFsxXSBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHggKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUKKyAgICogc3VicGl4ZWwgaGludGluZyBzdXBwb3J0IGludG8gdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoaXMgbW9kaWZpZXMgdGhlCisgICAqIFRydWVUeXBlIGhpbnRpbmcgbWVjaGFuaXNtIHdoZW4gYW55dGhpbmcgYnV0IEZUX1JFTkRFUl9NT0RFX01PTk8gaXMKKyAgICogcmVxdWVzdGVkLgorICAgKgorICAgKiBJbiBwYXJ0aWN1bGFyLCBpdCBtb2RpZmllcyB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdG8gaW50ZXJwcmV0IChvcgorICAgKiBub3QpIGluc3RydWN0aW9ucyBpbiBhIGNlcnRhaW4gd2F5IHNvIHRoYXQgYWxsIFRydWVUeXBlIGZvbnRzIGxvb2sKKyAgICogbGlrZSB0aGV5IGRvIGluIGEgV2luZG93cyBDbGVhclR5cGUgKERpcmVjdFdyaXRlKSBlbnZpcm9ubWVudC4gIFNlZQorICAgKiBbMV0gZm9yIGEgdGVjaG5pY2FsIG92ZXJ2aWV3IG9uIHdoYXQgdGhpcyBtZWFucy4gIFNlZSBgdHRpbnRlcnAuaCcKKyAgICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgTEVBTiBvcHRpb24uCisgICAqCisgICAqIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSB2YWx1ZXMuCisgICAqCisgICAqIFZhbHVlIDE6CisgICAqICAgVGhpcyB2YWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBJbmZpbmFsaXR5JyBtb25pa2VyLAorICAgKiAgIGNvbnRyaWJ1dGVkIGJ5IGFuIGluZGl2aWR1YWwgbmlja25hbWVkIEluZmluYWxpdHkgd2l0aCB0aGUgZ29hbCBvZgorICAgKiAgIG1ha2luZyBUcnVlVHlwZSBmb250cyByZW5kZXIgYmV0dGVyIHRoYW4gb24gV2luZG93cy4gIEEgaGlnaAorICAgKiAgIGFtb3VudCBvZiBjb25maWd1cmFiaWxpdHkgYW5kIGZsZXhpYmlsaXR5LCBkb3duIHRvIHJ1bGVzIGZvcgorICAgKiAgIHNpbmdsZSBnbHlwaHMgaW4gZm9udHMsIGJ1dCBhbHNvIHZlcnkgc2xvdy4gIEl0cyBleHBlcmltZW50YWwgYW5kCisgICAqICAgc2xvdyBuYXR1cmUgYW5kIHRoZSBvcmlnaW5hbCBkZXZlbG9wZXIgbG9zaW5nIGludGVyZXN0IG1lYW50IHRoYXQKKyAgICogICB0aGlzIG9wdGlvbiB3YXMgbmV2ZXIgZW5hYmxlZCBpbiBkZWZhdWx0IGJ1aWxkcy4KKyAgICoKKyAgICogICBUaGUgY29ycmVzcG9uZGluZyBpbnRlcnByZXRlciB2ZXJzaW9uIGlzIHYzOC4KKyAgICoKKyAgICogVmFsdWUgMjoKKyAgICogICBUaGUgbmV3IGRlZmF1bHQgbW9kZSBmb3IgdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoZSBJbmZpbmFsaXR5IGNvZGUKKyAgICogICBiYXNlIHdhcyBzdHJpcHBlZCB0byB0aGUgYmFyZSBtaW5pbXVtIGFuZCBhbGwgY29uZmlndXJhYmlsaXR5CisgICAqICAgcmVtb3ZlZCBpbiB0aGUgbmFtZSBvZiBzcGVlZCBhbmQgc2ltcGxpY2l0eS4gIFRoZSBjb25maWd1cmFiaWxpdHkKKyAgICogICB3YXMgbWFpbmx5IGFpbWVkIGF0IGxlZ2FjeSBmb250cyBsaWtlIEFyaWFsLCBUaW1lcyBOZXcgUm9tYW4sIG9yCisgICAqICAgQ291cmllci4gIExlZ2FjeSBmb250cyBhcmUgZm9udHMgdGhhdCBtb2RpZnkgdmVydGljYWwgc3RlbXMgdG8KKyAgICogICBhY2hpZXZlIGNsZWFuIGJsYWNrLWFuZC13aGl0ZSBiaXRtYXBzLiAgVGhlIG5ldyBtb2RlIGZvY3VzZXMgb24KKyAgICogICBhcHBseWluZyBhIG1pbmltYWwgc2V0IG9mIHJ1bGVzIHRvIGFsbCBmb250cyBpbmRpc2NyaW1pbmF0ZWx5IHNvCisgICAqICAgdGhhdCBtb2Rlcm4gYW5kIHdlYiBmb250cyByZW5kZXIgd2VsbCB3aGlsZSBsZWdhY3kgZm9udHMgcmVuZGVyCisgICAqICAgb2theS4KKyAgICoKKyAgICogICBUaGUgY29ycmVzcG9uZGluZyBpbnRlcnByZXRlciB2ZXJzaW9uIGlzIHY0MC4KKyAgICoKKyAgICogVmFsdWUgMzoKKyAgICogICBDb21waWxlIGJvdGgsIG1ha2luZyBib3RoIHYzOCBhbmQgdjQwIGF2YWlsYWJsZSAodGhlIGxhdHRlciBpcyB0aGUKKyAgICogICBkZWZhdWx0KS4KKyAgICoKKyAgICogQnkgdW5kZWZpbmluZyB0aGVzZSwgeW91IGdldCByZW5kZXJpbmcgYmVoYXZpb3IgbGlrZSBvbiBXaW5kb3dzCisgICAqIHdpdGhvdXQgQ2xlYXJUeXBlLCBpLmUuLCBXaW5kb3dzIFhQIHdpdGhvdXQgQ2xlYXJUeXBlIGVuYWJsZWQgYW5kCisgICAqIFdpbjl4IChpbnRlcnByZXRlciB2ZXJzaW9uIHYzNSkuICBPciBub3QsIGRlcGVuZGluZyBvbiBob3cgbXVjaAorICAgKiBoaW50aW5nIGJsb29kIGFuZCB0ZXN0aW5nIHRlYXJzIHRoZSBmb250IGRlc2lnbmVyIHB1dCBpbnRvIGEgZ2l2ZW4KKyAgICogZm9udC4gIElmIHlvdSBkZWZpbmUgb25lIG9yIGJvdGggc3VicGl4ZWwgaGludGluZyBvcHRpb25zLCB5b3UgY2FuCisgICAqIHN3aXRjaCBiZXR3ZWVuIGJldHdlZW4gdjM1IGFuZCB0aGUgb25lcyB5b3UgZGVmaW5lICh1c2luZworICAgKiBgRlRfUHJvcGVydHlfU2V0JykuCisgICAqCisgICAqIFRoaXMgb3B0aW9uIHJlcXVpcmVzIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgdG8gYmUKKyAgICogZGVmaW5lZC4KKyAgICoKKyAgICogWzFdIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweAorICAgKi8KIC8qICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICAxICAgICAgICAgKi8KIAogLyogQU5EUk9JRDogZGlzYWJsZWQgKi8KQEAgLTY2Myw1NiArNjYwLDU2IEBACiAvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgKCAxIHwgMiApICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0NPTVBPTkVOVF9PRkZTRVRfU0NBTEVEIHRvIGNvbXBpbGUgdGhlICAgICAgICAqLwotICAvKiBUcnVlVHlwZSBnbHlwaCBsb2FkZXIgdG8gdXNlIEFwcGxlJ3MgZGVmaW5pdGlvbiBvZiBob3cgdG8gaGFuZGxlICAgICAgKi8KLSAgLyogY29tcG9uZW50IG9mZnNldHMgaW4gY29tcG9zaXRlIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBcHBsZSBhbmQgTVMgZGlzYWdyZWUgb24gdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgY29tcG9uZW50IG9mZnNldHMgICAgKi8KLSAgLyogaW4gY29tcG9zaXRlcy4gIEFwcGxlIHNheXMgdGhhdCB0aGV5IHNob3VsZCBiZSBzY2FsZWQgYnkgdGhlIHNjYWxpbmcgICovCi0gIC8qIGZhY3RvcnMgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAocm91Z2hseSwgaXQncyBtb3JlIGNvbXBsZXgpICAgICAqLwotICAvKiB3aGlsZSBNUyBzYXlzIHRoZXkgc2hvdWxkIG5vdC4gIE9wZW5UeXBlIGRlZmluZXMgdHdvIGJpdHMgaW4gdGhlICAgICAgKi8KLSAgLyogY29tcG9zaXRlIGZsYWdzIGFycmF5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRpc2FtYmlndWF0ZSwgYnV0IG9sZCAgICAgICovCi0gIC8qIGZvbnRzIHdpbGwgbm90IGhhdmUgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtICAgICAgICAgICAgICAgICovCi0gIC8qICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmdseWYuaHRtbCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0NPTVBPTkVOVF9PRkZTRVRfU0NBTEVEIHRvIGNvbXBpbGUgdGhlCisgICAqIFRydWVUeXBlIGdseXBoIGxvYWRlciB0byB1c2UgQXBwbGUncyBkZWZpbml0aW9uIG9mIGhvdyB0byBoYW5kbGUKKyAgICogY29tcG9uZW50IG9mZnNldHMgaW4gY29tcG9zaXRlIGdseXBocy4KKyAgICoKKyAgICogQXBwbGUgYW5kIE1TIGRpc2FncmVlIG9uIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGNvbXBvbmVudCBvZmZzZXRzCisgICAqIGluIGNvbXBvc2l0ZXMuICBBcHBsZSBzYXlzIHRoYXQgdGhleSBzaG91bGQgYmUgc2NhbGVkIGJ5IHRoZSBzY2FsaW5nCisgICAqIGZhY3RvcnMgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCAocm91Z2hseSwgaXQncyBtb3JlIGNvbXBsZXgpCisgICAqIHdoaWxlIE1TIHNheXMgdGhleSBzaG91bGQgbm90LiAgT3BlblR5cGUgZGVmaW5lcyB0d28gYml0cyBpbiB0aGUKKyAgICogY29tcG9zaXRlIGZsYWdzIGFycmF5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRpc2FtYmlndWF0ZSwgYnV0IG9sZAorICAgKiBmb250cyB3aWxsIG5vdCBoYXZlIHRoZW0uCisgICAqCisgICAqICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9nbHlmLmh0bQorICAgKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZnbHlmLmh0bWwKKyAgICovCiAjdW5kZWYgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCBpZiB5b3Ugd2FudCB0byBpbmNsdWRlICAgICAgICAgKi8KLSAgLyogc3VwcG9ydCBmb3IgQXBwbGUncyBkaXN0b3J0YWJsZSBmb250IHRlY2hub2xvZ3kgKGZ2YXIsIGd2YXIsIGN2YXIsICAgICovCi0gIC8qIGFuZCBhdmFyIHRhYmxlcykuICBUaGlzIGhhcyBtYW55IHNpbWlsYXJpdGllcyB0byBUeXBlIDEgTXVsdGlwbGUgICAgICAqLwotICAvKiBNYXN0ZXJzIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCBpZiB5b3Ugd2FudCB0byBpbmNsdWRlCisgICAqIHN1cHBvcnQgZm9yIEFwcGxlJ3MgZGlzdG9ydGFibGUgZm9udCB0ZWNobm9sb2d5IChmdmFyLCBndmFyLCBjdmFyLAorICAgKiBhbmQgYXZhciB0YWJsZXMpLiAgVGhpcyBoYXMgbWFueSBzaW1pbGFyaXRpZXMgdG8gVHlwZSAxIE11bHRpcGxlCisgICAqIE1hc3RlcnMgc3VwcG9ydC4KKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQkRGIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgICAgICAgICovCi0gIC8qIGFuIGVtYmVkZGVkIGBCREYgJyB0YWJsZSB3aXRoaW4gU0ZOVC1iYXNlZCBiaXRtYXAgZm9ybWF0cy4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JERiBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yCisgICAqIGFuIGVtYmVkZGVkIGBCREYgJyB0YWJsZSB3aXRoaW4gU0ZOVC1iYXNlZCBiaXRtYXAgZm9ybWF0cy4KKyAgICovCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQkRGCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wdGlvbiBUVF9DT05GSUdfT1BUSU9OX01BWF9SVU5OQUJMRV9PUENPREVTIGNvbnRyb2xzIHRoZSBtYXhpbXVtICAgICAqLwotICAvKiBudW1iZXIgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIGZvciBhIHNpbmdsZSBydW4gb2YgdGhlICAgICAgKi8KLSAgLyogYnl0ZWNvZGUgaW50ZXJwcmV0ZXIsIG5lZWRlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLiAgWW91IGRvbid0ICAgICovCi0gIC8qIHdhbnQgdG8gY2hhbmdlIHRoaXMgZXhjZXB0IGZvciB2ZXJ5IHNwZWNpYWwgc2l0dWF0aW9ucyAoZS5nLiwgbWFraW5nICAqLwotICAvKiBhIGxpYnJhcnkgZnV6emVyIHNwZW5kIGxlc3MgdGltZSB0byBoYW5kbGUgYnJva2VuIGZvbnRzKS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEl0IGlzIG5vdCBleHBlY3RlZCB0aGF0IHRoaXMgdmFsdWUgaXMgZXZlciBtb2RpZmllZCBieSBhIGNvbmZpZ3VyaW5nICAqLwotICAvKiBzY3JpcHQ7IGluc3RlYWQsIGl0IGdldHMgc3Vycm91bmRlZCB3aXRoICNpZm5kZWYgLi4uICNlbmRpZiBzbyB0aGF0ICAgKi8KLSAgLyogdGhlIHZhbHVlIGNhbiBiZSBzZXQgYXMgYSBwcmVwcm9jZXNzb3Igb3B0aW9uIG9uIHRoZSBjb21waWxlcidzICAgICAgICovCi0gIC8qIGNvbW1hbmQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE9wdGlvbiBUVF9DT05GSUdfT1BUSU9OX01BWF9SVU5OQUJMRV9PUENPREVTIGNvbnRyb2xzIHRoZSBtYXhpbXVtCisgICAqIG51bWJlciBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgZm9yIGEgc2luZ2xlIHJ1biBvZiB0aGUKKyAgICogYnl0ZWNvZGUgaW50ZXJwcmV0ZXIsIG5lZWRlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLiAgWW91IGRvbid0CisgICAqIHdhbnQgdG8gY2hhbmdlIHRoaXMgZXhjZXB0IGZvciB2ZXJ5IHNwZWNpYWwgc2l0dWF0aW9ucyAoZS5nLiwgbWFraW5nCisgICAqIGEgbGlicmFyeSBmdXp6ZXIgc3BlbmQgbGVzcyB0aW1lIHRvIGhhbmRsZSBicm9rZW4gZm9udHMpLgorICAgKgorICAgKiBJdCBpcyBub3QgZXhwZWN0ZWQgdGhhdCB0aGlzIHZhbHVlIGlzIGV2ZXIgbW9kaWZpZWQgYnkgYSBjb25maWd1cmluZworICAgKiBzY3JpcHQ7IGluc3RlYWQsIGl0IGdldHMgc3Vycm91bmRlZCB3aXRoICNpZm5kZWYgLi4uICNlbmRpZiBzbyB0aGF0CisgICAqIHRoZSB2YWx1ZSBjYW4gYmUgc2V0IGFzIGEgcHJlcHJvY2Vzc29yIG9wdGlvbiBvbiB0aGUgY29tcGlsZXIncworICAgKiBjb21tYW5kIGxpbmUuCisgICAqLwogI2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX01BWF9SVU5OQUJMRV9PUENPREVTCiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fTUFYX1JVTk5BQkxFX09QQ09ERVMgIDEwMDAwMDBMCiAjZW5kaWYKQEAgLTcyNyw1OSArNzI0LDU5IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUMV9NQVhfRElDVF9ERVBUSCBpcyB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0IGRpY3Rpb25hcmllcyBhbmQgICAgICAgKi8KLSAgLyogYXJyYXlzIGluIHRoZSBUeXBlIDEgc3RyZWFtIChzZWUgdDFsb2FkLmMpLiAgQSBtaW5pbXVtIG9mIDQgaXMgICAgICAgICovCi0gIC8qIHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFQxX01BWF9ESUNUX0RFUFRIIGlzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3QgZGljdGlvbmFyaWVzIGFuZAorICAgKiBhcnJheXMgaW4gdGhlIFR5cGUgMSBzdHJlYW0gKHNlZSB0MWxvYWQuYykuICBBIG1pbmltdW0gb2YgNCBpcworICAgKiByZXF1aXJlZC4KKyAgICovCiAjZGVmaW5lIFQxX01BWF9ESUNUX0RFUFRIICA1CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX01BWF9TVUJSU19DQUxMUyBkZXRhaWxzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgc3ViLXJvdXRpbmUgICAqLwotICAvKiBjYWxscyBkdXJpbmcgZ2x5cGggbG9hZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUMV9NQVhfU1VCUlNfQ0FMTFMgZGV0YWlscyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIHN1Yi1yb3V0aW5lCisgICAqIGNhbGxzIGR1cmluZyBnbHlwaCBsb2FkaW5nLgorICAgKi8KICNkZWZpbmUgVDFfTUFYX1NVQlJTX0NBTExTICAxNgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUMV9NQVhfQ0hBUlNUUklOR19PUEVSQU5EUyBpcyB0aGUgY2hhcnN0cmluZyBzdGFjaydzIGNhcGFjaXR5LiAgQSAgICAgKi8KLSAgLyogbWluaW11bSBvZiAxNiBpcyByZXF1aXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgQ2hpbmVzZSBmb250IE1pbmdUaUVHLU1lZGl1bSAoQ05TIDExNjQzIGNoYXJhY3RlciBzZXQpIG5lZWRzIDI1Ni4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUMV9NQVhfQ0hBUlNUUklOR19PUEVSQU5EUyBpcyB0aGUgY2hhcnN0cmluZyBzdGFjaydzIGNhcGFjaXR5LiAgQQorICAgKiBtaW5pbXVtIG9mIDE2IGlzIHJlcXVpcmVkLgorICAgKgorICAgKiBUaGUgQ2hpbmVzZSBmb250IE1pbmdUaUVHLU1lZGl1bSAoQ05TIDExNjQzIGNoYXJhY3RlciBzZXQpIG5lZWRzIDI1Ni4KKyAgICovCiAjZGVmaW5lIFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyAgMjU2CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gaWYgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgICAgICAgICAgICAqLwotICAvKiBjb21waWxhdGlvbiBvZiBgdDFhZm0nLCB3aGljaCBpcyBpbiBjaGFyZ2Ugb2YgcmVhZGluZyBUeXBlIDEgQUZNICAgICAgKi8KLSAgLyogZmlsZXMgaW50byBhbiBleGlzdGluZyBmYWNlLiAgTm90ZSB0aGF0IGlmIHNldCwgdGhlIFQxIGRyaXZlciB3aWxsIGJlICovCi0gIC8qIHVuYWJsZSB0byBwcm9kdWNlIGtlcm5pbmcgZGlzdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gaWYgeW91IHdhbnQgdG8gcHJldmVudCB0aGUKKyAgICogY29tcGlsYXRpb24gb2YgYHQxYWZtJywgd2hpY2ggaXMgaW4gY2hhcmdlIG9mIHJlYWRpbmcgVHlwZSAxIEFGTQorICAgKiBmaWxlcyBpbnRvIGFuIGV4aXN0aW5nIGZhY2UuICBOb3RlIHRoYXQgaWYgc2V0LCB0aGUgVDEgZHJpdmVyIHdpbGwgYmUKKyAgICogdW5hYmxlIHRvIHByb2R1Y2Uga2VybmluZyBkaXN0YW5jZXMuCisgICAqLwogI3VuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gbWFjcm8gaWYgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgICAgICAgICAgICAqLwotICAvKiBjb21waWxhdGlvbiBvZiB0aGUgTXVsdGlwbGUgTWFzdGVycyBmb250IHN1cHBvcnQgaW4gdGhlIFR5cGUgMSAgICAgICAgKi8KLSAgLyogZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHRoZQorICAgKiBjb21waWxhdGlvbiBvZiB0aGUgTXVsdGlwbGUgTWFzdGVycyBmb250IHN1cHBvcnQgaW4gdGhlIFR5cGUgMQorICAgKiBkcml2ZXIuCisgICAqLwogI3VuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fTU1fU1VQUE9SVAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIFR5cGUgMSAgICAgKi8KLSAgLyogZW5naW5lIGdldHMgY29tcGlsZWQgaW50byBGcmVlVHlwZS4gIElmIGRlZmluZWQsIGl0IGlzIHBvc3NpYmxlIHRvICAgICovCi0gIC8qIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gZW5naW5lcyB1c2luZyB0aGUgYGhpbnRpbmctZW5naW5lJyBwcm9wZXJ0eSBvZiAqLwotICAvKiB0aGUgdHlwZTEgZHJpdmVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIFR5cGUgMQorICAgKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8KKyAgICogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5IG9mCisgICAqIHRoZSB0eXBlMSBkcml2ZXIgbW9kdWxlLgorICAgKi8KIC8qICNkZWZpbmUgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCiAKIApAQCAtNzkyLDE3ICs3ODksMTcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFVzaW5nIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfe1gsWX17MSwyLDMsNH0gaXQgaXMgICAgICAqLwotICAvKiBwb3NzaWJsZSB0byBzZXQgdXAgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBmb3VyIGNvbnRyb2wgcG9pbnRzIHRoYXQgKi8KLSAgLyogZGVmaW5lIHRoZSBzdGVtIGRhcmtlbmluZyBiZWhhdmlvdXIgb2YgdGhlIChuZXcpIENGRiBlbmdpbmUuICBGb3IgICAgICovCi0gIC8qIG1vcmUgZGV0YWlscyBwbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5IChmaWxlIGBmdGRyaXZlci5oJyksIHdoaWNoIGFsbG93cyB0aGUgKi8KLSAgLyogY29udHJvbCBhdCBydW4tdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEbyAqbm90KiB1bmRlZmluZSB0aGVzZSBtYWNyb3MhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBVc2luZyBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX3tYLFl9ezEsMiwzLDR9IGl0IGlzCisgICAqIHBvc3NpYmxlIHRvIHNldCB1cCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGZvdXIgY29udHJvbCBwb2ludHMgdGhhdAorICAgKiBkZWZpbmUgdGhlIHN0ZW0gZGFya2VuaW5nIGJlaGF2aW91ciBvZiB0aGUgKG5ldykgQ0ZGIGVuZ2luZS4gIEZvcgorICAgKiBtb3JlIGRldGFpbHMgcGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCisgICAqIGBkYXJrZW5pbmctcGFyYW1ldGVycycgcHJvcGVydHkgKGZpbGUgYGZ0ZHJpdmVyLmgnKSwgd2hpY2ggYWxsb3dzIHRoZQorICAgKiBjb250cm9sIGF0IHJ1bi10aW1lLgorICAgKgorICAgKiBEbyAqbm90KiB1bmRlZmluZSB0aGVzZSBtYWNyb3MhCisgICAqLwogI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gxICAgNTAwCiAjZGVmaW5lIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTEgICA0MDAKIApAQCAtODE2LDEzICs4MTMsMTMgQEAKICNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZNCAgICAgMAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHByZS1BZG9iZSBDRkYgICAgICAgKi8KLSAgLyogZW5naW5lIGdldHMgY29tcGlsZWQgaW50byBGcmVlVHlwZS4gIElmIGRlZmluZWQsIGl0IGlzIHBvc3NpYmxlIHRvICAgICovCi0gIC8qIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gZW5naW5lcyB1c2luZyB0aGUgYGhpbnRpbmctZW5naW5lJyBwcm9wZXJ0eSBvZiAqLwotICAvKiB0aGUgY2ZmIGRyaXZlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHByZS1BZG9iZSBDRkYKKyAgICogZW5naW5lIGdldHMgY29tcGlsZWQgaW50byBGcmVlVHlwZS4gIElmIGRlZmluZWQsIGl0IGlzIHBvc3NpYmxlIHRvCisgICAqIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gZW5naW5lcyB1c2luZyB0aGUgYGhpbnRpbmctZW5naW5lJyBwcm9wZXJ0eSBvZgorICAgKiB0aGUgY2ZmIGRyaXZlciBtb2R1bGUuCisgICAqLwogLyogI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCiAKIApAQCAtODM1LDIxICs4MzIsMjEgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXJlIGFyZSBtYW55IFBDRiBmb250cyBqdXN0IGNhbGxlZCBgRml4ZWQnIHdoaWNoIGxvb2sgY29tcGxldGVseSAgICAqLwotICAvKiBkaWZmZXJlbnQsIGFuZCB3aGljaCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlYWNoIG90aGVyLiAgV2hlbiAgICAgICAgKi8KLSAgLyogc2VsZWN0aW5nIGBGaXhlZCcgaW4gS0RFIG9yIEdub21lIG9uZSBnZXRzIHJlc3VsdHMgdGhhdCBhcHBlYXIgcmF0aGVyICovCi0gIC8qIHJhbmRvbSwgdGhlIHN0eWxlIGNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhlIHNpemUgYW5kIG9uZSAgICAgICAqLwotICAvKiBjYW5ub3Qgc2VsZWN0IHNvbWUgZm9udHMgYXQgYWxsLiAgVGhpcyBvcHRpb24gbWFrZXMgdGhlIFBDRiBtb2R1bGUgICAgKi8KLSAgLyogcHJlcGVuZCB0aGUgZm91bmRyeSBuYW1lIChwbHVzIGEgc3BhY2UpIHRvIHRoZSBmYW1pbHkgbmFtZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBXZSBhbHNvIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBgd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dldGhlciwgd2UgKi8KLSAgLyogZ2V0IGZhbWlseSBuYW1lcyBsaWtlIGBTb255IEZpeGVkJyBvciBgTWlzYyBGaXhlZCBXaWRlJy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJZiB0aGlzIG9wdGlvbiBpcyBhY3RpdmF0ZWQsIGl0IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlICAgICAgICAgICAgKi8KLSAgLyogYG5vLWxvbmctZmFtaWx5LW5hbWVzJyBwcm9wZXJ0eSBvZiB0aGUgcGNmIGRyaXZlciBtb2R1bGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlcmUgYXJlIG1hbnkgUENGIGZvbnRzIGp1c3QgY2FsbGVkIGBGaXhlZCcgd2hpY2ggbG9vayBjb21wbGV0ZWx5CisgICAqIGRpZmZlcmVudCwgYW5kIHdoaWNoIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGVhY2ggb3RoZXIuICBXaGVuCisgICAqIHNlbGVjdGluZyBgRml4ZWQnIGluIEtERSBvciBHbm9tZSBvbmUgZ2V0cyByZXN1bHRzIHRoYXQgYXBwZWFyIHJhdGhlcgorICAgKiByYW5kb20sIHRoZSBzdHlsZSBjaGFuZ2VzIG9mdGVuIGlmIG9uZSBjaGFuZ2VzIHRoZSBzaXplIGFuZCBvbmUKKyAgICogY2Fubm90IHNlbGVjdCBzb21lIGZvbnRzIGF0IGFsbC4gIFRoaXMgb3B0aW9uIG1ha2VzIHRoZSBQQ0YgbW9kdWxlCisgICAqIHByZXBlbmQgdGhlIGZvdW5kcnkgbmFtZSAocGx1cyBhIHNwYWNlKSB0byB0aGUgZmFtaWx5IG5hbWUuCisgICAqCisgICAqIFdlIGFsc28gY2hlY2sgd2hldGhlciB3ZSBoYXZlIGB3aWRlJyBjaGFyYWN0ZXJzOyBhbGwgcHV0IHRvZ2V0aGVyLCB3ZQorICAgKiBnZXQgZmFtaWx5IG5hbWVzIGxpa2UgYFNvbnkgRml4ZWQnIG9yIGBNaXNjIEZpeGVkIFdpZGUnLgorICAgKgorICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBhY3RpdmF0ZWQsIGl0IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlCisgICAqIGBuby1sb25nLWZhbWlseS1uYW1lcycgcHJvcGVydHkgb2YgdGhlIHBjZiBkcml2ZXIgbW9kdWxlLgorICAgKi8KIC8qICNkZWZpbmUgUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMgKi8KIAogCkBAIC04NjIsNTQgKzg1OSw1NiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIENKSyAoQ2hpbmVzZSwgSmFwYW5lc2UsIEtvcmVhbikgc2NyaXB0ICAgICovCi0gIC8qIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCBDSksgKENoaW5lc2UsIEphcGFuZXNlLCBLb3JlYW4pIHNjcmlwdAorICAgKiBzdXBwb3J0LgorICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9DSksKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCBmYWxsYmFjayBJbmRpYyBzY3JpcHQgc3VwcG9ydCwgY292ZXJpbmcgICAqLwotICAvKiBzb21lIHNjcmlwdHMgdGhhdCB0aGUgYGxhdGluJyBzdWJtb2R1bGUgb2YgdGhlIGF1dG9maXQgbW9kdWxlIGRvZXNuJ3QgKi8KLSAgLyogKHlldCkgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIGZhbGxiYWNrIEluZGljIHNjcmlwdCBzdXBwb3J0LCBjb3ZlcmluZworICAgKiBzb21lIHNjcmlwdHMgdGhhdCB0aGUgYGxhdGluJyBzdWJtb2R1bGUgb2YgdGhlIGF1dG9maXQgbW9kdWxlIGRvZXNuJ3QKKyAgICogKHlldCkgaGFuZGxlLgorICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIHdhcnAgaGludGluZy4gIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nICAgICovCi0gIC8qIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbiAqLwotICAvKiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkIChtb3JlIG9yIGxlc3MpIG9uIHRoZSAgICAgKi8KLSAgLyogZ3JpZC4gIFRvIGZpbmQgb3V0IHRoZSBvcHRpbWFsIHNjYWxpbmcgYW5kIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzICAgICovCi0gIC8qIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcyAgICAgICovCi0gIC8qIEZUX1JFTkRFUl9NT0RFX0xJR0hUOyB5b3UgY2FuIHN3aXRjaCB3YXJwaW5nIG9uIGFuZCBvZmYgd2l0aCB0aGUgICAgICAqLwotICAvKiBgd2FycGluZycgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIChzZWUgZmlsZSBgZnRkcml2ZXIuaCcgZm9yIG1vcmUgKi8KLSAgLyogaW5mb3JtYXRpb247IGJ5IGRlZmF1bHQgaXQgaXMgc3dpdGNoZWQgb2ZmKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ29tcGlsZSBhdXRvZml0IG1vZHVsZSB3aXRoIHdhcnAgaGludGluZy4gIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nCisgICAqIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGggd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbgorICAgKiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkIChtb3JlIG9yIGxlc3MpIG9uIHRoZQorICAgKiBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMKKyAgICogcGFyYW1ldGVyIGNvbWJpbmF0aW9ucyBhcmUgdHJpZWQgYW5kIHNjb3JlZC4KKyAgICoKKyAgICogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcworICAgKiBGVF9SRU5ERVJfTU9ERV9MSUdIVDsgeW91IGNhbiBzd2l0Y2ggd2FycGluZyBvbiBhbmQgb2ZmIHdpdGggdGhlCisgICAqIGB3YXJwaW5nJyBwcm9wZXJ0eSBvZiB0aGUgYXV0by1oaW50ZXIgKHNlZSBmaWxlIGBmdGRyaXZlci5oJyBmb3IgbW9yZQorICAgKiBpbmZvcm1hdGlvbjsgYnkgZGVmYXVsdCBpdCBpcyBzd2l0Y2hlZCBvZmYpLgorICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVc2UgVHJ1ZVR5cGUtbGlrZSBzaXplIG1ldHJpY3MgZm9yIGBsaWdodCcgYXV0by1oaW50aW5nLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF2b2lkIHRoaXMgb3B0aW9uLCB3aGljaCBleGlzdHMgb25seSB0byAqLwotICAvKiBoZWxwIHNvbWUgbGVnYWN5IGFwcGxpY2F0aW9ucyByZXRhaW4gaXRzIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91ciAgICAgKi8KLSAgLyogd2l0aCByZXNwZWN0IHRvIGF1dG8taGludGVkIFRydWVUeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgdmVyeSByZWFzb24gdGhpcyBvcHRpb24gZXhpc3RzIGF0IGFsbCBhcmUgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMgKi8KLSAgLyogbGlrZSBGZWRvcmEgdGhhdCBkaWQgbm90IHVuLXBhdGNoIHRoZSBmb2xsb3dpbmcgY2hhbmdlICh3aGljaCB3YXMgICAgICovCi0gIC8qIHByZXNlbnQgaW4gRnJlZVR5cGUgYmV0d2VlbiB2ZXJzaW9ucyAyLjQuNiBhbmQgMi43LjEsIGluY2x1c2l2ZSkuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAyMDExLTA3LTE2ICBTdGV2ZW4gQ2h1ICA8c3RldmVuLmYuY2h1QGdtYWlsLmNvbT4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgW3RydWV0eXBlXSBGaXggbWV0cmljcyBvbiBzaXplIHJlcXVlc3QgZm9yIHNjYWxhYmxlIGZvbnRzLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgcHJvYmxlbWF0aWMgY29tbWl0IGlzIG5vdyByZXZlcnRlZCAobW9yZSBvciBsZXNzKS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFVzZSBUcnVlVHlwZS1saWtlIHNpemUgbWV0cmljcyBmb3IgYGxpZ2h0JyBhdXRvLWhpbnRpbmcuCisgICAqCisgICAqIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF2b2lkIHRoaXMgb3B0aW9uLCB3aGljaCBleGlzdHMgb25seSB0bworICAgKiBoZWxwIHNvbWUgbGVnYWN5IGFwcGxpY2F0aW9ucyByZXRhaW4gaXRzIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91cgorICAgKiB3aXRoIHJlc3BlY3QgdG8gYXV0by1oaW50ZWQgVHJ1ZVR5cGUgZm9udHMuCisgICAqCisgICAqIFRoZSB2ZXJ5IHJlYXNvbiB0aGlzIG9wdGlvbiBleGlzdHMgYXQgYWxsIGFyZSBHTlUvTGludXggZGlzdHJpYnV0aW9ucworICAgKiBsaWtlIEZlZG9yYSB0aGF0IGRpZCBub3QgdW4tcGF0Y2ggdGhlIGZvbGxvd2luZyBjaGFuZ2UgKHdoaWNoIHdhcworICAgKiBwcmVzZW50IGluIEZyZWVUeXBlIGJldHdlZW4gdmVyc2lvbnMgMi40LjYgYW5kIDIuNy4xLCBpbmNsdXNpdmUpLgorICAgKgorICAgKiB7CisgICAqICAgMjAxMS0wNy0xNiAgU3RldmVuIENodSAgPHN0ZXZlbi5mLmNodUBnbWFpbC5jb20+CisgICAqCisgICAqICAgICBbdHJ1ZXR5cGVdIEZpeCBtZXRyaWNzIG9uIHNpemUgcmVxdWVzdCBmb3Igc2NhbGFibGUgZm9udHMuCisgICAqIH0KKyAgICoKKyAgICogVGhpcyBwcm9ibGVtYXRpYyBjb21taXQgaXMgbm93IHJldmVydGVkIChtb3JlIG9yIGxlc3MpLgorICAgKi8KIC8qICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgKi8KIAogICAvKiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgKaW5kZXggNDJmOWEwNi4uYTc0NGQwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCkBAIC0xLDMxICsxLDMxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHN0ZGxpYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQU5TSS1zcGVjaWZpYyBsaWJyYXJ5IGFuZCBoZWFkZXIgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uICAgKi8KLS8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRzdGRsaWIuaAorICoKKyAqICAgQU5TSS1zcGVjaWZpYyBsaWJyYXJ5IGFuZCBoZWFkZXIgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uCisgKiAgIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZ3JvdXAgYWxsICNpbmNsdWRlcyB0byB0aGUgQU5TSSBDIGxpYnJhcnkgdGhhdCAgICovCi0gIC8qIEZyZWVUeXBlIG5vcm1hbGx5IHJlcXVpcmVzLiAgSXQgYWxzbyBkZWZpbmVzIG1hY3JvcyB0byByZW5hbWUgdGhlICAgICAqLwotICAvKiBzdGFuZGFyZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIExvYWQgYSBmaWxlIHdoaWNoIGRlZmluZXMgRlRTVERMSUJfSF8gYmVmb3JlIHRoaXMgb25lIHRvIG92ZXJyaWRlIGl0LiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBncm91cCBhbGwgI2luY2x1ZGVzIHRvIHRoZSBBTlNJIEMgbGlicmFyeSB0aGF0CisgICAqIEZyZWVUeXBlIG5vcm1hbGx5IHJlcXVpcmVzLiAgSXQgYWxzbyBkZWZpbmVzIG1hY3JvcyB0byByZW5hbWUgdGhlCisgICAqIHN0YW5kYXJkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlLgorICAgKgorICAgKiBMb2FkIGEgZmlsZSB3aGljaCBkZWZpbmVzIEZUU1RETElCX0hfIGJlZm9yZSB0aGlzIG9uZSB0byBvdmVycmlkZSBpdC4KKyAgICoKKyAgICovCiAKIAogI2lmbmRlZiBGVFNURExJQl9IXwpAQCAtMzcsMjMgKzM3LDIzIEBACiAjZGVmaW5lIGZ0X3B0cmRpZmZfdCAgcHRyZGlmZl90CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBsaW1pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVUlOVF9NQVggYW5kIFVMT05HX01BWCBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNvbXB1dGUgdGhlIHNpemUgICovCi0gIC8qIG9mIGBpbnQnIGFuZCBgbG9uZycgaW4gYnl0ZXMgYXQgY29tcGlsZS10aW1lLiAgU28gZmFyLCB0aGlzIHdvcmtzICAqLwotICAvKiBmb3IgYWxsIHBsYXRmb3JtcyB0aGUgbGlicmFyeSBoYXMgYmVlbiB0ZXN0ZWQgb24uICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCBvbiB0aGUgZXh0cmVtZWx5IHJhcmUgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHByb3ZpZGUgICAgICAqLwotICAvKiBpbnRlZ2VyIHR5cGVzIHRoYXQgYXJlIF9leGFjdGx5XyAxNiBhbmQgMzIgYml0cyB3aWRlIChlLmcuIHNvbWUgICAgKi8KLSAgLyogb2xkIENyYXlzIHdoZXJlIGBpbnQnIGlzIDM2IGJpdHMpLCB3ZSBkbyBub3QgbWFrZSBhbnkgZ3VhcmFudGVlICAgICovCi0gIC8qIGFib3V0IHRoZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBGVDIgd2l0aCBhbGwgZm9udHMuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW4gdGhlc2UgY2FzZSwgYGZ0Y29uZmlnLmgnIHdpbGwgcmVmdXNlIHRvIGNvbXBpbGUgYW55d2F5IHdpdGggYSAgICovCi0gIC8qIG1lc3NhZ2UgbGlrZSBgY291bGRuJ3QgZmluZCAzMi1iaXQgdHlwZScgb3Igc29tZXRoaW5nIHNpbWlsYXIuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBsaW1pdHMKKyAgICoKKyAgICogVUlOVF9NQVggYW5kIFVMT05HX01BWCBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNvbXB1dGUgdGhlIHNpemUKKyAgICogb2YgYGludCcgYW5kIGBsb25nJyBpbiBieXRlcyBhdCBjb21waWxlLXRpbWUuICBTbyBmYXIsIHRoaXMgd29ya3MKKyAgICogZm9yIGFsbCBwbGF0Zm9ybXMgdGhlIGxpYnJhcnkgaGFzIGJlZW4gdGVzdGVkIG9uLgorICAgKgorICAgKiBOb3RlIHRoYXQgb24gdGhlIGV4dHJlbWVseSByYXJlIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBwcm92aWRlCisgICAqIGludGVnZXIgdHlwZXMgdGhhdCBhcmUgX2V4YWN0bHlfIDE2IGFuZCAzMiBiaXRzIHdpZGUgKGUuZy4gc29tZQorICAgKiBvbGQgQ3JheXMgd2hlcmUgYGludCcgaXMgMzYgYml0cyksIHdlIGRvIG5vdCBtYWtlIGFueSBndWFyYW50ZWUKKyAgICogYWJvdXQgdGhlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIEZUMiB3aXRoIGFsbCBmb250cy4KKyAgICoKKyAgICogSW4gdGhlc2UgY2FzZSwgYGZ0Y29uZmlnLmgnIHdpbGwgcmVmdXNlIHRvIGNvbXBpbGUgYW55d2F5IHdpdGggYQorICAgKiBtZXNzYWdlIGxpa2UgYGNvdWxkbid0IGZpbmQgMzItYml0IHR5cGUnIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC02OCwxMSArNjgsMTEgQEAKICNkZWZpbmUgRlRfVUxPTkdfTUFYICAgVUxPTkdfTUFYCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgYW5kIHN0cmluZyBwcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgYW5kIHN0cmluZyBwcm9jZXNzaW5nCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTkyLDExICs5MiwxMSBAQAogI2RlZmluZSBmdF9zdHJzdHIgICBzdHJzdHIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGhhbmRsaW5nCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTEwLDExICsxMTAsMTEgQEAKICNkZWZpbmUgZnRfc3ByaW50ZiAgc3ByaW50ZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGluZworICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMjIsMTEgKzEyMiwxMSBAQAogI2RlZmluZSBmdF9xc29ydCAgcXNvcnQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbgorICAgKgorICAgKi8KIAogCiAjZGVmaW5lIGZ0X3NjYWxsb2MgICBjYWxsb2MKQEAgLTEzNSwyMiArMTM1LDIyIEBACiAjZGVmaW5lIGZ0X3NyZWFsbG9jICByZWFsbG9jCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzCisgICAqCisgICAqLwogCiAKICNkZWZpbmUgZnRfc3RydG9sICBzdHJ0b2wKICNkZWZpbmUgZnRfZ2V0ZW52ICBnZXRlbnYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIGNvbnRyb2wKKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPHNldGptcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCmluZGV4IGVkYTk1ZTIuLjYyMGRmNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZyZWV0eXBlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBoaWdoLWxldmVsIEFQSSBhbmQgY29tbW9uIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZyZWV0eXBlLmgKKyAqCisgKiAgIEZyZWVUeXBlIGhpZ2gtbGV2ZWwgQVBJIGFuZCBjb21tb24gdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlJFRVRZUEVfSF8KQEAgLTM5LDU2ICszOSw1NiBAQAogCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWFkZXJfaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSdzIGhlYWRlciBpbmNsdXNpb24gc2NoZW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIb3cgY2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgaW5jbHVkZSBGcmVlVHlwZSBoZWFkZXIgZmlsZXMuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUbyBiZSBhcyBmbGV4aWJsZSBhcyBwb3NzaWJsZSAoYW5kIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMpLCAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgdXNlcyBhIHZlcnkgc3BlY2lhbCBpbmNsdXNpb24gc2NoZW1lIHRvIGxvYWQgaGVhZGVyICAgICAgICovCi0gIC8qICAgIGZpbGVzLCBmb3IgZXhhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2luY2x1ZGUgRlRfT1VUTElORV9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgY29tcGlsZXIgYW5kIGl0cyBwcmVwcm9jZXNzb3Igb25seSBuZWVkcyBhbiBpbmNsdWRlIHBhdGggdG8gZmluZCAqLwotICAvKiAgICB0aGUgZmlsZSBgZnQyYnVpbGQuaCc7IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIG5hbWVzIG9mIHRoZSBvdGhlciAgKi8KLSAgLyogICAgRnJlZVR5cGUgaGVhZGVyIGZpbGVzIGFyZSBoaWRkZW4gYnkgcHJlcHJvY2Vzc29yIG1hY3JvIG5hbWVzLCAgICAgICovCi0gIC8qICAgIGxvYWRlZCBieSBgZnQyYnVpbGQuaCcuICBUaGUgQVBJIGRvY3VtZW50YXRpb24gYWx3YXlzIGdpdmVzIHRoZSAgICAqLwotICAvKiAgICBoZWFkZXIgbWFjcm8gbmFtZSBuZWVkZWQgZm9yIGEgcGFydGljdWxhciBmdW5jdGlvbi4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgaGVhZGVyX2luY2x1c2lvbgorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgRnJlZVR5cGUncyBoZWFkZXIgaW5jbHVzaW9uIHNjaGVtZQorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgSG93IGNsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIGluY2x1ZGUgRnJlZVR5cGUgaGVhZGVyIGZpbGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVG8gYmUgYXMgZmxleGlibGUgYXMgcG9zc2libGUgKGFuZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zKSwKKyAgICogICBGcmVlVHlwZSB1c2VzIGEgdmVyeSBzcGVjaWFsIGluY2x1c2lvbiBzY2hlbWUgdG8gbG9hZCBoZWFkZXIKKyAgICogICBmaWxlcywgZm9yIGV4YW1wbGUKKyAgICoKKyAgICogICB7CisgICAqICAgICAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyAgICoKKyAgICogICAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyAgICogICAgICNpbmNsdWRlIEZUX09VVExJTkVfSAorICAgKiAgIH0KKyAgICoKKyAgICogICBBIGNvbXBpbGVyIGFuZCBpdHMgcHJlcHJvY2Vzc29yIG9ubHkgbmVlZHMgYW4gaW5jbHVkZSBwYXRoIHRvIGZpbmQKKyAgICogICB0aGUgZmlsZSBgZnQyYnVpbGQuaCc7IHRoZSBleGFjdCBsb2NhdGlvbnMgYW5kIG5hbWVzIG9mIHRoZSBvdGhlcgorICAgKiAgIEZyZWVUeXBlIGhlYWRlciBmaWxlcyBhcmUgaGlkZGVuIGJ5IEBoZWFkZXJfZmlsZV9tYWNyb3MsIGxvYWRlZCBieQorICAgKiAgIGBmdDJidWlsZC5oJy4gIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBhbHdheXMgZ2l2ZXMgdGhlIGhlYWRlciBtYWNybworICAgKiAgIG5hbWUgbmVlZGVkIGZvciBhIHBhcnRpY3VsYXIgZnVuY3Rpb24uCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlcl9hbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNlciBhbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSG93IGNsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsbG9jYXRlIEZyZWVUeXBlIGRhdGEgc3RydWN0dXJlcy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIGFuZCBwYXNzZWQgICovCi0gIC8qICAgIGFzIGFyZ3VtZW50cyBhcmUgemVyb2VkIG91dCBleGNlcHQgZm9yIHRoZSBhY3R1YWwgZGF0YS4gIEluIG90aGVyICAqLwotICAvKiAgICB3b3JkcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGBjYWxsb2MnIChvciB2YXJpYW50cyBvZiBpdCkgICAgICAgKi8KLSAgLyogICAgaW5zdGVhZCBvZiBgbWFsbG9jJyBmb3IgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIHVzZXJfYWxsb2NhdGlvbgorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgVXNlciBhbGxvY2F0aW9uCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBIb3cgY2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgYWxsb2NhdGUgRnJlZVR5cGUgZGF0YSBzdHJ1Y3R1cmVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRnJlZVR5cGUgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIGFuZCBwYXNzZWQKKyAgICogICBhcyBhcmd1bWVudHMgYXJlIHplcm9lZCBvdXQgZXhjZXB0IGZvciB0aGUgYWN0dWFsIGRhdGEuICBJbiBvdGhlcgorICAgKiAgIHdvcmRzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYGNhbGxvYycgKG9yIHZhcmlhbnRzIG9mIGl0KQorICAgKiAgIGluc3RlYWQgb2YgYG1hbGxvYycgZm9yIGFsbG9jYXRpb24uCisgICAqCisgICAqLwogCiAKIApAQCAtMTAxLDIxOSArMTAxLDIxOSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2VfaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJhc2UgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBGcmVlVHlwZX4yIGJhc2UgZm9udCBpbnRlcmZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1vc3QgaW1wb3J0YW50IHB1YmxpYyBoaWdoLWxldmVsIEFQSSAgICAqLwotICAvKiAgICBmdW5jdGlvbnMgb2YgRnJlZVR5cGV+Mi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQ2hhck1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VuY29kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1NGTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX0tFUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfSElOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0hBU19IT1JJWk9OVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9IQVNfVkVSVElDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSEFTX0tFUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0hBU19GSVhFRF9TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9IQVNfR0xZUEhfTkFNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSEFTX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSVNfU0ZOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0lTX1NDQUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9JU19GSVhFRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSVNfQ0lEX0tFWUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0lTX1RSSUNLWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9JU19OQU1FRF9JTlNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSVNfVkFSSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TVFlMRV9GTEFHX0JPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU1RZTEVfRkxBR19JVEFMSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TaXplUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2l6ZV9NZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaFNsb3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhfTWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1N1YkdseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQml0bWFwX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Jbml0X0ZyZWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRG9uZV9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRG9uZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlZmVyZW5jZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfTWVtb3J5X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZV9Qcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09wZW5fRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F0dGFjaF9GaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BdHRhY2hfU3RyZWFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9DaGFyX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfUGl4ZWxfU2l6ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVxdWVzdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NlbGVjdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NpemVfUmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTG9hZF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9DaGFyX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfRmlyc3RfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X05leHRfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9OYW1lX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Mb2FkX0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09QRU5fTUVNT1JZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PUEVOX1NUUkVBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1BFTl9QQVRITkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09QRU5fRFJJVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PUEVOX1BBUkFNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX1JFTkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9NT05PQ0hST01FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfTElORUFSX0RFU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX05PX1NDQUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9OT19ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfTk9fQklUTUFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX05PX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX05PX1JFQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9QRURBTlRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9UQVJHRVRfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfVEFSR0VUX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX1RBUkdFVF9MQ0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MT0FEX1RBUkdFVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlbmRlcl9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SZW5kZXJfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0tlcm5pbmdfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfVHJhY2tfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0dseXBoX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQ2hhck1hcFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NlbGVjdF9DaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0NoYXJtYXBfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfRlNUeXBlX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X1N1YkdseXBoX0luZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GYWNlX0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2l6ZV9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Nsb3RfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NUWUxFX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PUEVOX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTE9BRF9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xPQURfVEFSR0VUX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TVUJHTFlQSF9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRlNUWVBFX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9IQVNfRkFTVF9HTFlQSFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYmFzZV9pbnRlcmZhY2UKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIEJhc2UgSW50ZXJmYWNlCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBUaGUgRnJlZVR5cGV+MiBiYXNlIGZvbnQgaW50ZXJmYWNlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbW9zdCBpbXBvcnRhbnQgcHVibGljIGhpZ2gtbGV2ZWwgQVBJCisgICAqICAgZnVuY3Rpb25zIG9mIEZyZWVUeXBlfjIuCisgICAqCisgICAqIEBvcmRlcjoKKyAgICogICBGVF9MaWJyYXJ5CisgICAqICAgRlRfRmFjZQorICAgKiAgIEZUX1NpemUKKyAgICogICBGVF9HbHlwaFNsb3QKKyAgICogICBGVF9DaGFyTWFwCisgICAqICAgRlRfRW5jb2RpbmcKKyAgICogICBGVF9FTkNfVEFHCisgICAqCisgICAqICAgRlRfRmFjZVJlYworICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRQorICAgKiAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUworICAgKiAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSAorICAgKiAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMCisgICAqICAgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMCisgICAqICAgRlRfRkFDRV9GTEFHX0NPTE9SCisgICAqICAgRlRfRkFDRV9GTEFHX1NGTlQKKyAgICogICBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVECisgICAqICAgRlRfRkFDRV9GTEFHX1RSSUNLWQorICAgKiAgIEZUX0ZBQ0VfRkxBR19LRVJOSU5HCisgICAqICAgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMKKyAgICogICBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OCisgICAqICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTCisgICAqICAgRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTQorICAgKiAgIEZUX0ZBQ0VfRkxBR19ISU5URVIKKyAgICoKKyAgICogICBGVF9IQVNfSE9SSVpPTlRBTAorICAgKiAgIEZUX0hBU19WRVJUSUNBTAorICAgKiAgIEZUX0hBU19LRVJOSU5HCisgICAqICAgRlRfSEFTX0ZJWEVEX1NJWkVTCisgICAqICAgRlRfSEFTX0dMWVBIX05BTUVTCisgICAqICAgRlRfSEFTX0NPTE9SCisgICAqICAgRlRfSEFTX01VTFRJUExFX01BU1RFUlMKKyAgICoKKyAgICogICBGVF9JU19TRk5UCisgICAqICAgRlRfSVNfU0NBTEFCTEUKKyAgICogICBGVF9JU19GSVhFRF9XSURUSAorICAgKiAgIEZUX0lTX0NJRF9LRVlFRAorICAgKiAgIEZUX0lTX1RSSUNLWQorICAgKiAgIEZUX0lTX05BTUVEX0lOU1RBTkNFCisgICAqICAgRlRfSVNfVkFSSUFUSU9OCisgICAqCisgICAqICAgRlRfU1RZTEVfRkxBR19CT0xECisgICAqICAgRlRfU1RZTEVfRkxBR19JVEFMSUMKKyAgICoKKyAgICogICBGVF9TaXplUmVjCisgICAqICAgRlRfU2l6ZV9NZXRyaWNzCisgICAqCisgICAqICAgRlRfR2x5cGhTbG90UmVjCisgICAqICAgRlRfR2x5cGhfTWV0cmljcworICAgKiAgIEZUX1N1YkdseXBoCisgICAqCisgICAqICAgRlRfQml0bWFwX1NpemUKKyAgICoKKyAgICogICBGVF9Jbml0X0ZyZWVUeXBlCisgICAqICAgRlRfRG9uZV9GcmVlVHlwZQorICAgKgorICAgKiAgIEZUX05ld19GYWNlCisgICAqICAgRlRfRG9uZV9GYWNlCisgICAqICAgRlRfUmVmZXJlbmNlX0ZhY2UKKyAgICogICBGVF9OZXdfTWVtb3J5X0ZhY2UKKyAgICogICBGVF9GYWNlX1Byb3BlcnRpZXMKKyAgICogICBGVF9PcGVuX0ZhY2UKKyAgICogICBGVF9PcGVuX0FyZ3MKKyAgICogICBGVF9QYXJhbWV0ZXIKKyAgICogICBGVF9BdHRhY2hfRmlsZQorICAgKiAgIEZUX0F0dGFjaF9TdHJlYW0KKyAgICoKKyAgICogICBGVF9TZXRfQ2hhcl9TaXplCisgICAqICAgRlRfU2V0X1BpeGVsX1NpemVzCisgICAqICAgRlRfUmVxdWVzdF9TaXplCisgICAqICAgRlRfU2VsZWN0X1NpemUKKyAgICogICBGVF9TaXplX1JlcXVlc3RfVHlwZQorICAgKiAgIEZUX1NpemVfUmVxdWVzdFJlYworICAgKiAgIEZUX1NpemVfUmVxdWVzdAorICAgKiAgIEZUX1NldF9UcmFuc2Zvcm0KKyAgICogICBGVF9Mb2FkX0dseXBoCisgICAqICAgRlRfR2V0X0NoYXJfSW5kZXgKKyAgICogICBGVF9HZXRfRmlyc3RfQ2hhcgorICAgKiAgIEZUX0dldF9OZXh0X0NoYXIKKyAgICogICBGVF9HZXRfTmFtZV9JbmRleAorICAgKiAgIEZUX0xvYWRfQ2hhcgorICAgKgorICAgKiAgIEZUX09QRU5fTUVNT1JZCisgICAqICAgRlRfT1BFTl9TVFJFQU0KKyAgICogICBGVF9PUEVOX1BBVEhOQU1FCisgICAqICAgRlRfT1BFTl9EUklWRVIKKyAgICogICBGVF9PUEVOX1BBUkFNUworICAgKgorICAgKiAgIEZUX0xPQURfREVGQVVMVAorICAgKiAgIEZUX0xPQURfUkVOREVSCisgICAqICAgRlRfTE9BRF9NT05PQ0hST01FCisgICAqICAgRlRfTE9BRF9MSU5FQVJfREVTSUdOCisgICAqICAgRlRfTE9BRF9OT19TQ0FMRQorICAgKiAgIEZUX0xPQURfTk9fSElOVElORworICAgKiAgIEZUX0xPQURfTk9fQklUTUFQCisgICAqICAgRlRfTE9BRF9OT19BVVRPSElOVAorICAgKiAgIEZUX0xPQURfQ09MT1IKKyAgICoKKyAgICogICBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVAorICAgKiAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STQorICAgKiAgIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQKKyAgICogICBGVF9MT0FEX05PX1JFQ1VSU0UKKyAgICogICBGVF9MT0FEX1BFREFOVElDCisgICAqCisgICAqICAgRlRfTE9BRF9UQVJHRVRfTk9STUFMCisgICAqICAgRlRfTE9BRF9UQVJHRVRfTElHSFQKKyAgICogICBGVF9MT0FEX1RBUkdFVF9NT05PCisgICAqICAgRlRfTE9BRF9UQVJHRVRfTENECisgICAqICAgRlRfTE9BRF9UQVJHRVRfTENEX1YKKyAgICoKKyAgICogICBGVF9MT0FEX1RBUkdFVF9NT0RFCisgICAqCisgICAqICAgRlRfUmVuZGVyX0dseXBoCisgICAqICAgRlRfUmVuZGVyX01vZGUKKyAgICogICBGVF9HZXRfS2VybmluZworICAgKiAgIEZUX0tlcm5pbmdfTW9kZQorICAgKiAgIEZUX0dldF9UcmFja19LZXJuaW5nCisgICAqICAgRlRfR2V0X0dseXBoX05hbWUKKyAgICogICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lCisgICAqCisgICAqICAgRlRfQ2hhck1hcFJlYworICAgKiAgIEZUX1NlbGVjdF9DaGFybWFwCisgICAqICAgRlRfU2V0X0NoYXJtYXAKKyAgICogICBGVF9HZXRfQ2hhcm1hcF9JbmRleAorICAgKgorICAgKiAgIEZUX0dldF9GU1R5cGVfRmxhZ3MKKyAgICogICBGVF9HZXRfU3ViR2x5cGhfSW5mbworICAgKgorICAgKiAgIEZUX0ZhY2VfSW50ZXJuYWwKKyAgICogICBGVF9TaXplX0ludGVybmFsCisgICAqICAgRlRfU2xvdF9JbnRlcm5hbAorICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19YWFgKKyAgICogICBGVF9TVFlMRV9GTEFHX1hYWAorICAgKiAgIEZUX09QRU5fWFhYCisgICAqICAgRlRfTE9BRF9YWFgKKyAgICogICBGVF9MT0FEX1RBUkdFVF9YWFgKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1hYWAorICAgKiAgIEZUX0ZTVFlQRV9YWFgKKyAgICoKKyAgICogICBGVF9IQVNfRkFTVF9HTFlQSFMKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaF9NZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB0byBtb2RlbCB0aGUgbWV0cmljcyBvZiBhIHNpbmdsZSBnbHlwaC4gIFRoZSB2YWx1ZXMgICAgKi8KLSAgLyogICAgYXJlIGV4cHJlc3NlZCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0OyBpZiB0aGUgZmxhZyAgICAgICAgICovCi0gIC8qICAgIEBGVF9MT0FEX05PX1NDQUxFIGhhcyBiZWVuIHVzZWQgd2hpbGUgbG9hZGluZyB0aGUgZ2x5cGgsIHZhbHVlcyAgICAqLwotICAvKiAgICBhcmUgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aWR0aCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZ2x5cGgncyB3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWlnaHQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZ2x5cGgncyBoZWlnaHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpQmVhcmluZ1ggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBMZWZ0IHNpZGUgYmVhcmluZyBmb3IgaG9yaXpvbnRhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpQmVhcmluZ1kgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUb3Agc2lkZSBiZWFyaW5nIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpQWR2YW5jZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBZHZhbmNlIHdpZHRoIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0QmVhcmluZ1ggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBMZWZ0IHNpZGUgYmVhcmluZyBmb3IgdmVydGljYWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0QmVhcmluZ1kgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUb3Agc2lkZSBiZWFyaW5nIGZvciB2ZXJ0aWNhbCBsYXlvdXQuICBMYXJnZXIgcG9zaXRpdmUgdmFsdWVzICAgICovCi0gIC8qICAgICAgbWVhbiBmdXJ0aGVyIGJlbG93IHRoZSB2ZXJ0aWNhbCBnbHlwaCBvcmlnaW4uICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydEFkdmFuY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQWR2YW5jZSBoZWlnaHQgZm9yIHZlcnRpY2FsIGxheW91dC4gIFBvc2l0aXZlIHZhbHVlcyBtZWFuIHRoZSAgICAqLwotICAvKiAgICAgIGdseXBoIGhhcyBhIHBvc2l0aXZlIGFkdmFuY2UgZG93bndhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBub3QgZGlzYWJsZWQgd2l0aCBARlRfTE9BRF9OT19ISU5USU5HLCB0aGUgdmFsdWVzIHJlcHJlc2VudCAgICAgKi8KLSAgLyogICAgZGltZW5zaW9ucyBvZiB0aGUgaGludGVkIGdseXBoIChpbiBjYXNlIGhpbnRpbmcgaXMgYXBwbGljYWJsZSkuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTdHJva2luZyBhIGdseXBoIHdpdGggYW4gb3V0c2lkZSBib3JkZXIgZG9lcyBub3QgaW5jcmVhc2UgICAgICAgICAgKi8KLSAgLyogICAgYGhvcmlBZHZhbmNlJyBvciBgdmVydEFkdmFuY2UnOyB5b3UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlc2UgICovCi0gIC8qICAgIHZhbHVlcyB0byBhY2NvdW50IGZvciB0aGUgYWRkZWQgd2lkdGggYW5kIGhlaWdodC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZG9lc24ndCB1c2UgdGhlIGBWT1JHJyB0YWJsZSBkYXRhIGZvciBDRkYgZm9udHMgYmVjYXVzZSAgICovCi0gIC8qICAgIGl0IGRvZXNuJ3QgaGF2ZSBhbiBpbnRlcmZhY2UgdG8gcXVpY2tseSByZXRyaWV2ZSB0aGUgZ2x5cGggaGVpZ2h0LiAqLwotICAvKiAgICBUaGUgeX5jb29yZGluYXRlIG9mIHRoZSB2ZXJ0aWNhbCBvcmlnaW4gY2FuIGJlIHNpbXBseSBjb21wdXRlZCBhcyAgKi8KLSAgLyogICAgYHZlcnRCZWFyaW5nWSArIGhlaWdodCcgYWZ0ZXIgbG9hZGluZyBhIGdseXBoLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9HbHlwaF9NZXRyaWNzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCB0aGUgbWV0cmljcyBvZiBhIHNpbmdsZSBnbHlwaC4gIFRoZSB2YWx1ZXMKKyAgICogICBhcmUgZXhwcmVzc2VkIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbCBmb3JtYXQ7IGlmIHRoZSBmbGFnCisgICAqICAgQEZUX0xPQURfTk9fU0NBTEUgaGFzIGJlZW4gdXNlZCB3aGlsZSBsb2FkaW5nIHRoZSBnbHlwaCwgdmFsdWVzCisgICAqICAgYXJlIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzIGluc3RlYWQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgd2lkdGggOjoKKyAgICogICAgIFRoZSBnbHlwaCdzIHdpZHRoLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGdseXBoJ3MgaGVpZ2h0LgorICAgKgorICAgKiAgIGhvcmlCZWFyaW5nWCA6OgorICAgKiAgICAgTGVmdCBzaWRlIGJlYXJpbmcgZm9yIGhvcml6b250YWwgbGF5b3V0LgorICAgKgorICAgKiAgIGhvcmlCZWFyaW5nWSA6OgorICAgKiAgICAgVG9wIHNpZGUgYmVhcmluZyBmb3IgaG9yaXpvbnRhbCBsYXlvdXQuCisgICAqCisgICAqICAgaG9yaUFkdmFuY2UgOjoKKyAgICogICAgIEFkdmFuY2Ugd2lkdGggZm9yIGhvcml6b250YWwgbGF5b3V0LgorICAgKgorICAgKiAgIHZlcnRCZWFyaW5nWCA6OgorICAgKiAgICAgTGVmdCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC4KKyAgICoKKyAgICogICB2ZXJ0QmVhcmluZ1kgOjoKKyAgICogICAgIFRvcCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC4gIExhcmdlciBwb3NpdGl2ZSB2YWx1ZXMKKyAgICogICAgIG1lYW4gZnVydGhlciBiZWxvdyB0aGUgdmVydGljYWwgZ2x5cGggb3JpZ2luLgorICAgKgorICAgKiAgIHZlcnRBZHZhbmNlIDo6CisgICAqICAgICBBZHZhbmNlIGhlaWdodCBmb3IgdmVydGljYWwgbGF5b3V0LiAgUG9zaXRpdmUgdmFsdWVzIG1lYW4gdGhlCisgICAqICAgICBnbHlwaCBoYXMgYSBwb3NpdGl2ZSBhZHZhbmNlIGRvd253YXJkLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiBub3QgZGlzYWJsZWQgd2l0aCBARlRfTE9BRF9OT19ISU5USU5HLCB0aGUgdmFsdWVzIHJlcHJlc2VudAorICAgKiAgIGRpbWVuc2lvbnMgb2YgdGhlIGhpbnRlZCBnbHlwaCAoaW4gY2FzZSBoaW50aW5nIGlzIGFwcGxpY2FibGUpLgorICAgKgorICAgKiAgIFN0cm9raW5nIGEgZ2x5cGggd2l0aCBhbiBvdXRzaWRlIGJvcmRlciBkb2VzIG5vdCBpbmNyZWFzZQorICAgKiAgIGBob3JpQWR2YW5jZScgb3IgYHZlcnRBZHZhbmNlJzsgeW91IGhhdmUgdG8gbWFudWFsbHkgYWRqdXN0IHRoZXNlCisgICAqICAgdmFsdWVzIHRvIGFjY291bnQgZm9yIHRoZSBhZGRlZCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgKgorICAgKiAgIEZyZWVUeXBlIGRvZXNuJ3QgdXNlIHRoZSBgVk9SRycgdGFibGUgZGF0YSBmb3IgQ0ZGIGZvbnRzIGJlY2F1c2UKKyAgICogICBpdCBkb2Vzbid0IGhhdmUgYW4gaW50ZXJmYWNlIHRvIHF1aWNrbHkgcmV0cmlldmUgdGhlIGdseXBoIGhlaWdodC4KKyAgICogICBUaGUgeX5jb29yZGluYXRlIG9mIHRoZSB2ZXJ0aWNhbCBvcmlnaW4gY2FuIGJlIHNpbXBseSBjb21wdXRlZCBhcworICAgKiAgIGB2ZXJ0QmVhcmluZ1kgKyBoZWlnaHQnIGFmdGVyIGxvYWRpbmcgYSBnbHlwaC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9HbHlwaF9NZXRyaWNzXwogICB7CiAgICAgRlRfUG9zICB3aWR0aDsKQEAgLTMzMCw0NCArMzMwLDQ5IEBACiAgIH0gRlRfR2x5cGhfTWV0cmljczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0JpdG1hcF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIG1vZGVscyB0aGUgbWV0cmljcyBvZiBhIGJpdG1hcCBzdHJpa2UgKGkuZS4sIGEgc2V0ICAqLwotICAvKiAgICBvZiBnbHlwaHMgZm9yIGEgZ2l2ZW4gcG9pbnQgc2l6ZSBhbmQgcmVzb2x1dGlvbikgaW4gYSBiaXRtYXAgZm9udC4gKi8KLSAgLyogICAgSXQgaXMgdXNlZCBmb3IgdGhlIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkIG9mIEBGVF9GYWNlLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGVpZ2h0IDo6IFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSwgaW4gcGl4ZWxzLCBiZXR3ZWVuIHR3byAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICBjb25zZWN1dGl2ZSBiYXNlbGluZXMuICBJdCBpcyBhbHdheXMgcG9zaXRpdmUuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggIDo6IFRoZSBhdmVyYWdlIHdpZHRoLCBpbiBwaXhlbHMsIG9mIGFsbCBnbHlwaHMgaW4gdGhlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSAgIDo6IFRoZSBub21pbmFsIHNpemUgb2YgdGhlIHN0cmlrZSBpbiAyNi42IGZyYWN0aW9uYWwgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICBwb2ludHMuICBUaGlzIGZpZWxkIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeF9wcGVtIDo6IFRoZSBob3Jpem9udGFsIHBwZW0gKG5vbWluYWwgd2lkdGgpIGluIDI2LjYgZnJhY3Rpb25hbCAgICovCi0gIC8qICAgICAgICAgICAgICBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeV9wcGVtIDo6IFRoZSB2ZXJ0aWNhbCBwcGVtIChub21pbmFsIGhlaWdodCkgaW4gMjYuNiBmcmFjdGlvbmFsICAgICovCi0gIC8qICAgICAgICAgICAgICBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdpbmRvd3MgRk5UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBub21pbmFsIHNpemUgZ2l2ZW4gaW4gYSBGTlQgZm9udCBpcyBub3QgcmVsaWFibGUuICBJZiB0aGUgICAgKi8KLSAgLyogICAgICBkcml2ZXIgZmluZHMgaXQgaW5jb3JyZWN0LCBpdCBzZXRzIGBzaXplJyB0byBzb21lIGNhbGN1bGF0ZWQgICAgICovCi0gIC8qICAgICAgdmFsdWVzLCBhbmQgYHhfcHBlbScgYW5kIGB5X3BwZW0nIHRvIHRoZSBwaXhlbCB3aWR0aCBhbmQgaGVpZ2h0ICAqLwotICAvKiAgICAgIGdpdmVuIGluIHRoZSBmb250LCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRydWVUeXBlIGVtYmVkZGVkIGJpdG1hcHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGBzaXplJywgYHdpZHRoJywgYW5kIGBoZWlnaHQnIHZhbHVlcyBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUgICAgKi8KLSAgLyogICAgICBiaXRtYXAgc3RyaWtlIGl0c2VsZi4gIFRoZXkgYXJlIGNvbXB1dGVkIGZyb20gdGhlIGdsb2JhbCBmb250ICAgICovCi0gIC8qICAgICAgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfQml0bWFwX1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIG1vZGVscyB0aGUgbWV0cmljcyBvZiBhIGJpdG1hcCBzdHJpa2UgKGkuZS4sIGEgc2V0CisgICAqICAgb2YgZ2x5cGhzIGZvciBhIGdpdmVuIHBvaW50IHNpemUgYW5kIHJlc29sdXRpb24pIGluIGEgYml0bWFwIGZvbnQuCisgICAqICAgSXQgaXMgdXNlZCBmb3IgdGhlIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkIG9mIEBGVF9GYWNlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIGRpc3RhbmNlLCBpbiBwaXhlbHMsIGJldHdlZW4gdHdvCisgICAqICAgICBjb25zZWN1dGl2ZSBiYXNlbGluZXMuICBJdCBpcyBhbHdheXMgcG9zaXRpdmUuCisgICAqCisgICAqICAgd2lkdGggOjoKKyAgICogICAgIFRoZSBhdmVyYWdlIHdpZHRoLCBpbiBwaXhlbHMsIG9mIGFsbCBnbHlwaHMgaW4gdGhlCisgICAqICAgICBzdHJpa2UuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIG5vbWluYWwgc2l6ZSBvZiB0aGUgc3RyaWtlIGluIDI2LjYgZnJhY3Rpb25hbAorICAgKiAgICAgcG9pbnRzLiAgVGhpcyBmaWVsZCBpcyBub3QgdmVyeSB1c2VmdWwuCisgICAqCisgICAqICAgeF9wcGVtIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBwcGVtIChub21pbmFsIHdpZHRoKSBpbiAyNi42IGZyYWN0aW9uYWwKKyAgICogICAgIHBpeGVscy4KKyAgICoKKyAgICogICB5X3BwZW0gOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCBwcGVtIChub21pbmFsIGhlaWdodCkgaW4gMjYuNiBmcmFjdGlvbmFsCisgICAqICAgICBwaXhlbHMuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFdpbmRvd3MgRk5UOgorICAgKiAgICAgVGhlIG5vbWluYWwgc2l6ZSBnaXZlbiBpbiBhIEZOVCBmb250IGlzIG5vdCByZWxpYWJsZS4gIElmIHRoZQorICAgKiAgICAgZHJpdmVyIGZpbmRzIGl0IGluY29ycmVjdCwgaXQgc2V0cyBgc2l6ZScgdG8gc29tZSBjYWxjdWxhdGVkCisgICAqICAgICB2YWx1ZXMsIGFuZCBgeF9wcGVtJyBhbmQgYHlfcHBlbScgdG8gdGhlIHBpeGVsIHdpZHRoIGFuZCBoZWlnaHQKKyAgICogICAgIGdpdmVuIGluIHRoZSBmb250LCByZXNwZWN0aXZlbHkuCisgICAqCisgICAqICAgVHJ1ZVR5cGUgZW1iZWRkZWQgYml0bWFwczoKKyAgICogICAgIGBzaXplJywgYHdpZHRoJywgYW5kIGBoZWlnaHQnIHZhbHVlcyBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUKKyAgICogICAgIGJpdG1hcCBzdHJpa2UgaXRzZWxmLiAgVGhleSBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgZ2xvYmFsIGZvbnQKKyAgICogICAgIHBhcmFtZXRlcnMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfQml0bWFwX1NpemVfCiAgIHsKICAgICBGVF9TaG9ydCAgaGVpZ2h0OwpAQCAtMzg5LDIyNSArMzk0LDIyNSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlLiAgRWFjaCBgbGlicmFyeScgaXMgICAgICAgICovCi0gIC8qICAgIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGUgb3RoZXJzOyBpdCBpcyB0aGUgYHJvb3QnIG9mIGEgc2V0ICAqLwotICAvKiAgICBvZiBvYmplY3RzIGxpa2UgZm9udHMsIGZhY2VzLCBzaXplcywgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEl0IGFsc28gZW1iZWRzIGEgbWVtb3J5IG1hbmFnZXIgKHNlZSBARlRfTWVtb3J5KSwgYXMgd2VsbCBhcyBhICAgICAqLwotICAvKiAgICBzY2FuLWxpbmUgY29udmVydGVyIG9iamVjdCAoc2VlIEBGVF9SYXN0ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucyBpdCBpcyBlYXNpZXN0IHRvIHVzZSBvbmUgICAgICAgICAgICAqLwotICAvKiAgICBgRlRfTGlicmFyeScgb2JqZWN0IHBlciB0aHJlYWQuICBJbiBjYXNlIHRoaXMgaXMgdG9vIGN1bWJlcnNvbWUsICAgKi8KLSAgLyogICAgYSBzaW5nbGUgYEZUX0xpYnJhcnknIG9iamVjdCBhY3Jvc3MgdGhyZWFkcyBpcyBwb3NzaWJsZSBhbHNvICAgICAgICovCi0gIC8qICAgIChzaW5jZSBGcmVlVHlwZSB2ZXJzaW9uIDIuNS42KSwgYXMgbG9uZyBhcyBhIG11dGV4IGxvY2sgaXMgdXNlZCAgICAqLwotICAvKiAgICBhcm91bmQgQEZUX05ld19GYWNlIGFuZCBARlRfRG9uZV9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMaWJyYXJ5IG9iamVjdHMgYXJlIG5vcm1hbGx5IGNyZWF0ZWQgYnkgQEZUX0luaXRfRnJlZVR5cGUsIGFuZCAgICAgKi8KLSAgLyogICAgZGVzdHJveWVkIHdpdGggQEZUX0RvbmVfRnJlZVR5cGUuICBJZiB5b3UgbmVlZCByZWZlcmVuY2UtY291bnRpbmcgICovCi0gIC8qICAgIChjZi4gQEZUX1JlZmVyZW5jZV9MaWJyYXJ5KSwgdXNlIEBGVF9OZXdfTGlicmFyeSBhbmQgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfRG9uZV9MaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9MaWJyYXJ5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgaW5zdGFuY2UuICBFYWNoIGBsaWJyYXJ5JyBpcworICAgKiAgIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGUgb3RoZXJzOyBpdCBpcyB0aGUgYHJvb3QnIG9mIGEgc2V0CisgICAqICAgb2Ygb2JqZWN0cyBsaWtlIGZvbnRzLCBmYWNlcywgc2l6ZXMsIGV0Yy4KKyAgICoKKyAgICogICBJdCBhbHNvIGVtYmVkcyBhIG1lbW9yeSBtYW5hZ2VyIChzZWUgQEZUX01lbW9yeSksIGFzIHdlbGwgYXMgYQorICAgKiAgIHNjYW4tbGluZSBjb252ZXJ0ZXIgb2JqZWN0IChzZWUgQEZUX1Jhc3RlcikuCisgICAqCisgICAqICAgSW4gbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIGl0IGlzIGVhc2llc3QgdG8gdXNlIG9uZQorICAgKiAgIGBGVF9MaWJyYXJ5JyBvYmplY3QgcGVyIHRocmVhZC4gIEluIGNhc2UgdGhpcyBpcyB0b28gY3VtYmVyc29tZSwKKyAgICogICBhIHNpbmdsZSBgRlRfTGlicmFyeScgb2JqZWN0IGFjcm9zcyB0aHJlYWRzIGlzIHBvc3NpYmxlIGFsc28KKyAgICogICAoc2luY2UgRnJlZVR5cGUgdmVyc2lvbiAyLjUuNiksIGFzIGxvbmcgYXMgYSBtdXRleCBsb2NrIGlzIHVzZWQKKyAgICogICBhcm91bmQgQEZUX05ld19GYWNlIGFuZCBARlRfRG9uZV9GYWNlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBMaWJyYXJ5IG9iamVjdHMgYXJlIG5vcm1hbGx5IGNyZWF0ZWQgYnkgQEZUX0luaXRfRnJlZVR5cGUsIGFuZAorICAgKiAgIGRlc3Ryb3llZCB3aXRoIEBGVF9Eb25lX0ZyZWVUeXBlLiAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nCisgICAqICAgKGNmLiBARlRfUmVmZXJlbmNlX0xpYnJhcnkpLCB1c2UgQEZUX05ld19MaWJyYXJ5IGFuZAorICAgKiAgIEBGVF9Eb25lX0xpYnJhcnkuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9MaWJyYXJ5UmVjXyAgKkZUX0xpYnJhcnk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgbW9kdWxlX21hbmFnZW1lbnQKKyAgICoKKyAgICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSBtb2R1bGUgb2JqZWN0LiAgQSBtb2R1bGUgY2FuIGJlIGEgICAgICovCi0gIC8qICAgIGZvbnQgZHJpdmVyLCBhIHJlbmRlcmVyLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgcHJvdmlkZXMgc2VydmljZXMgICAqLwotICAvKiAgICB0byB0aGUgZm9ybWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9Nb2R1bGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgbW9kdWxlIG9iamVjdC4gIEEgbW9kdWxlIGNhbiBiZSBhCisgICAqICAgZm9udCBkcml2ZXIsIGEgcmVuZGVyZXIsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBzZXJ2aWNlcworICAgKiAgIHRvIHRoZSBmb3JtZXIuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9Nb2R1bGVSZWNfKiAgRlRfTW9kdWxlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSBmb250IGRyaXZlciBvYmplY3QuICBBIGZvbnQgZHJpdmVyICAgICovCi0gIC8qICAgIGlzIGEgbW9kdWxlIGNhcGFibGUgb2YgY3JlYXRpbmcgZmFjZXMgZnJvbSBmb250IGZpbGVzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0RyaXZlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSBmb250IGRyaXZlciBvYmplY3QuICBBIGZvbnQgZHJpdmVyCisgICAqICAgaXMgYSBtb2R1bGUgY2FwYWJsZSBvZiBjcmVhdGluZyBmYWNlcyBmcm9tIGZvbnQgZmlsZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9Ecml2ZXJSZWNfKiAgRlRfRHJpdmVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBGcmVlVHlwZSByZW5kZXJlci4gIEEgcmVuZGVyZXIgaXMgYSBtb2R1bGUgaW4gICovCi0gIC8qICAgIGNoYXJnZSBvZiBjb252ZXJ0aW5nIGEgZ2x5cGgncyBvdXRsaW5lIGltYWdlIHRvIGEgYml0bWFwLiAgSXQgICAgICAqLwotICAvKiAgICBzdXBwb3J0cyBhIHNpbmdsZSBnbHlwaCBpbWFnZSBmb3JtYXQsIGFuZCBvbmUgb3IgbW9yZSB0YXJnZXQgICAgICAgKi8KLSAgLyogICAgc3VyZmFjZSBkZXB0aHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfUmVuZGVyZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgcmVuZGVyZXIuICBBIHJlbmRlcmVyIGlzIGEgbW9kdWxlIGluCisgICAqICAgY2hhcmdlIG9mIGNvbnZlcnRpbmcgYSBnbHlwaCdzIG91dGxpbmUgaW1hZ2UgdG8gYSBiaXRtYXAuICBJdAorICAgKiAgIHN1cHBvcnRzIGEgc2luZ2xlIGdseXBoIGltYWdlIGZvcm1hdCwgYW5kIG9uZSBvciBtb3JlIHRhcmdldAorICAgKiAgIHN1cmZhY2UgZGVwdGhzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfUmVuZGVyZXJSZWNfKiAgRlRfUmVuZGVyZXI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYmFzZV9pbnRlcmZhY2UKKyAgICoKKyAgICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSB0eXBvZ3JhcGhpYyBmYWNlIG9iamVjdC4gIEEgZmFjZSBvYmplY3QgbW9kZWxzIGEgICAgICovCi0gIC8qICAgIGdpdmVuIHR5cGVmYWNlLCBpbiBhIGdpdmVuIHN0eWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZmFjZSBvYmplY3QgYWxzbyBvd25zIGEgc2luZ2xlIEBGVF9HbHlwaFNsb3Qgb2JqZWN0LCBhcyB3ZWxsICAgICAqLwotICAvKiAgICBhcyBvbmUgb3IgbW9yZSBARlRfU2l6ZSBvYmplY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZSBARlRfTmV3X0ZhY2Ugb3IgQEZUX09wZW5fRmFjZSB0byBjcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSAqLwotICAvKiAgICBhIGdpdmVuIGZpbGVwYXRoIG9yIGEgY3VzdG9tIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZSBARlRfRG9uZV9GYWNlIHRvIGRlc3Ryb3kgaXQgKGFsb25nIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gYEZUX0ZhY2UnIG9iamVjdCBjYW4gb25seSBiZSBzYWZlbHkgdXNlZCBmcm9tIG9uZSB0aHJlYWQgYXQgYSAgICovCi0gIC8qICAgIHRpbWUuICBTaW1pbGFybHksIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBgRlRfRmFjZScgd2l0aCB0aGUgICAqLwotICAvKiAgICBzYW1lIEBGVF9MaWJyYXJ5IG9iamVjdCBjYW4gb25seSBiZSBkb25lIGZyb20gb25lIHRocmVhZCBhdCBhICAgICAgKi8KLSAgLyogICAgdGltZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBmdW5jdGlvbnMgbGlrZSBARlRfTG9hZF9HbHlwaCBhbmQgaXRzICAgICovCi0gIC8qICAgIHNpYmxpbmdzIGFyZSB0aHJlYWQtc2FmZSBhbmQgZG8gbm90IG5lZWQgdGhlIGxvY2sgdG8gYmUgaGVsZCBhcyAgICAqLwotICAvKiAgICBsb25nIGFzIHRoZSBzYW1lIGBGVF9GYWNlJyBvYmplY3QgaXMgbm90IHVzZWQgZnJvbSBtdWx0aXBsZSAgICAgICAgKi8KLSAgLyogICAgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWxzbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIEBGVF9GYWNlUmVjIGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmaWVsZHMgb2YgYSBnaXZlbiBmYWNlICovCi0gIC8qICAgIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgdHlwb2dyYXBoaWMgZmFjZSBvYmplY3QuICBBIGZhY2Ugb2JqZWN0IG1vZGVscyBhCisgICAqICAgZ2l2ZW4gdHlwZWZhY2UsIGluIGEgZ2l2ZW4gc3R5bGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEEgZmFjZSBvYmplY3QgYWxzbyBvd25zIGEgc2luZ2xlIEBGVF9HbHlwaFNsb3Qgb2JqZWN0LCBhcyB3ZWxsCisgICAqICAgYXMgb25lIG9yIG1vcmUgQEZUX1NpemUgb2JqZWN0cy4KKyAgICoKKyAgICogICBVc2UgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UgdG8gY3JlYXRlIGEgbmV3IGZhY2Ugb2JqZWN0IGZyb20KKyAgICogICBhIGdpdmVuIGZpbGVwYXRoIG9yIGEgY3VzdG9tIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICBVc2UgQEZUX0RvbmVfRmFjZSB0byBkZXN0cm95IGl0IChhbG9uZyB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuCisgICAqCisgICAqICAgQW4gYEZUX0ZhY2UnIG9iamVjdCBjYW4gb25seSBiZSBzYWZlbHkgdXNlZCBmcm9tIG9uZSB0aHJlYWQgYXQgYQorICAgKiAgIHRpbWUuICBTaW1pbGFybHksIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBgRlRfRmFjZScgd2l0aCB0aGUKKyAgICogICBzYW1lIEBGVF9MaWJyYXJ5IG9iamVjdCBjYW4gb25seSBiZSBkb25lIGZyb20gb25lIHRocmVhZCBhdCBhCisgICAqICAgdGltZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBmdW5jdGlvbnMgbGlrZSBARlRfTG9hZF9HbHlwaCBhbmQgaXRzCisgICAqICAgc2libGluZ3MgYXJlIHRocmVhZC1zYWZlIGFuZCBkbyBub3QgbmVlZCB0aGUgbG9jayB0byBiZSBoZWxkIGFzCisgICAqICAgbG9uZyBhcyB0aGUgc2FtZSBgRlRfRmFjZScgb2JqZWN0IGlzIG5vdCB1c2VkIGZyb20gbXVsdGlwbGUKKyAgICogICB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuCisgICAqCisgICAqIEBhbHNvOgorICAgKiAgIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gZmFjZQorICAgKiAgIG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VSZWNfKiAgRlRfRmFjZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB0aGF0IG1vZGVscyBhIGZhY2Ugc2NhbGVkIHRvIGEgZ2l2ZW4gICAgICAgICAqLwotICAvKiAgICBjaGFyYWN0ZXIgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBARlRfRmFjZSBoYXMgb25lIF9hY3RpdmVfIEBGVF9TaXplIG9iamVjdCB0aGF0IGlzIHVzZWQgYnkgICAgICAgKi8KLSAgLyogICAgZnVuY3Rpb25zIGxpa2UgQEZUX0xvYWRfR2x5cGggdG8gZGV0ZXJtaW5lIHRoZSBzY2FsaW5nICAgICAgICAgICAgICovCi0gIC8qICAgIHRyYW5zZm9ybWF0aW9uIHRoYXQgaW4gdHVybiBpcyB1c2VkIHRvIGxvYWQgYW5kIGhpbnQgZ2x5cGhzIGFuZCAgICAqLwotICAvKiAgICBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFlvdSBjYW4gdXNlIEBGVF9TZXRfQ2hhcl9TaXplLCBARlRfU2V0X1BpeGVsX1NpemVzLCAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfUmVxdWVzdF9TaXplIG9yIGV2ZW4gQEZUX1NlbGVjdF9TaXplIHRvIGNoYW5nZSB0aGUgY29udGVudCAgICAgKi8KLSAgLyogICAgKGkuZS4sIHRoZSBzY2FsaW5nIHZhbHVlcykgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBZb3UgY2FuIHVzZSBARlRfTmV3X1NpemUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgc2l6ZSBvYmplY3RzIGZvciBhICAgKi8KLSAgLyogICAgZ2l2ZW4gQEZUX0ZhY2UsIGJ1dCB0aGV5IHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zIHVudGlsICAgICovCi0gIC8qICAgIHlvdSBhY3RpdmF0ZSBpdCB0aHJvdWdoIEBGVF9BY3RpdmF0ZV9TaXplLiAgT25seSBvbmUgc2l6ZSBjYW4gYmUgICAqLwotICAvKiAgICBhY3RpdmF0ZWQgYXQgYW55IGdpdmVuIHRpbWUgcGVyIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgQEZUX1NpemVSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuIHNpemUgKi8KLSAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfU2l6ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQgbW9kZWxzIGEgZmFjZSBzY2FsZWQgdG8gYSBnaXZlbgorICAgKiAgIGNoYXJhY3RlciBzaXplLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBBbiBARlRfRmFjZSBoYXMgb25lIF9hY3RpdmVfIEBGVF9TaXplIG9iamVjdCB0aGF0IGlzIHVzZWQgYnkKKyAgICogICBmdW5jdGlvbnMgbGlrZSBARlRfTG9hZF9HbHlwaCB0byBkZXRlcm1pbmUgdGhlIHNjYWxpbmcKKyAgICogICB0cmFuc2Zvcm1hdGlvbiB0aGF0IGluIHR1cm4gaXMgdXNlZCB0byBsb2FkIGFuZCBoaW50IGdseXBocyBhbmQKKyAgICogICBtZXRyaWNzLgorICAgKgorICAgKiAgIFlvdSBjYW4gdXNlIEBGVF9TZXRfQ2hhcl9TaXplLCBARlRfU2V0X1BpeGVsX1NpemVzLAorICAgKiAgIEBGVF9SZXF1ZXN0X1NpemUgb3IgZXZlbiBARlRfU2VsZWN0X1NpemUgdG8gY2hhbmdlIHRoZSBjb250ZW50CisgICAqICAgKGkuZS4sIHRoZSBzY2FsaW5nIHZhbHVlcykgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZS4KKyAgICoKKyAgICogICBZb3UgY2FuIHVzZSBARlRfTmV3X1NpemUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgc2l6ZSBvYmplY3RzIGZvciBhCisgICAqICAgZ2l2ZW4gQEZUX0ZhY2UsIGJ1dCB0aGV5IHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zIHVudGlsCisgICAqICAgeW91IGFjdGl2YXRlIGl0IHRocm91Z2ggQEZUX0FjdGl2YXRlX1NpemUuICBPbmx5IG9uZSBzaXplIGNhbiBiZQorICAgKiAgIGFjdGl2YXRlZCBhdCBhbnkgZ2l2ZW4gdGltZSBwZXIgZmFjZS4KKyAgICoKKyAgICogQGFsc286CisgICAqICAgU2VlIEBGVF9TaXplUmVjIGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmaWVsZHMgb2YgYSBnaXZlbiBzaXplCisgICAqICAgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2l6ZVJlY18qICBGVF9TaXplOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiBgZ2x5cGggc2xvdCcuICBBIHNsb3QgaXMgYSBjb250YWluZXIgdGhhdCBjYW4gICovCi0gIC8qICAgIGhvbGQgYW55IG9mIHRoZSBnbHlwaHMgY29udGFpbmVkIGluIGl0cyBwYXJlbnQgZmFjZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW4gb3RoZXIgd29yZHMsIGVhY2ggdGltZSB5b3UgY2FsbCBARlRfTG9hZF9HbHlwaCBvciAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9Mb2FkX0NoYXIsIHRoZSBzbG90J3MgY29udGVudCBpcyBlcmFzZWQgYnkgdGhlIG5ldyBnbHlwaCBkYXRhLCAqLwotICAvKiAgICBpLmUuLCB0aGUgZ2x5cGgncyBtZXRyaWNzLCBpdHMgaW1hZ2UgKGJpdG1hcCBvciBvdXRsaW5lKSwgYW5kICAgICAgKi8KLSAgLyogICAgb3RoZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWxzbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIEBGVF9HbHlwaFNsb3RSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGdseXBoIGZpZWxkcy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfR2x5cGhTbG90CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIGdpdmVuIGBnbHlwaCBzbG90Jy4gIEEgc2xvdCBpcyBhIGNvbnRhaW5lciB0aGF0IGNhbgorICAgKiAgIGhvbGQgYW55IG9mIHRoZSBnbHlwaHMgY29udGFpbmVkIGluIGl0cyBwYXJlbnQgZmFjZS4KKyAgICoKKyAgICogICBJbiBvdGhlciB3b3JkcywgZWFjaCB0aW1lIHlvdSBjYWxsIEBGVF9Mb2FkX0dseXBoIG9yCisgICAqICAgQEZUX0xvYWRfQ2hhciwgdGhlIHNsb3QncyBjb250ZW50IGlzIGVyYXNlZCBieSB0aGUgbmV3IGdseXBoIGRhdGEsCisgICAqICAgaS5lLiwgdGhlIGdseXBoJ3MgbWV0cmljcywgaXRzIGltYWdlIChiaXRtYXAgb3Igb3V0bGluZSksIGFuZAorICAgKiAgIG90aGVyIGNvbnRyb2wgaW5mb3JtYXRpb24uCisgICAqCisgICAqIEBhbHNvOgorICAgKiAgIFNlZSBARlRfR2x5cGhTbG90UmVjIGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBnbHlwaCBmaWVsZHMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9HbHlwaFNsb3RSZWNfKiAgRlRfR2x5cGhTbG90OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQ2hhck1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBjaGFyYWN0ZXIgbWFwICh1c3VhbGx5IGFiYnJldmlhdGVkIHRvIGBjaGFybWFwJykuICBBICovCi0gIC8qICAgIGNoYXJtYXAgaXMgdXNlZCB0byB0cmFuc2xhdGUgY2hhcmFjdGVyIGNvZGVzIGluIGEgZ2l2ZW4gZW5jb2RpbmcgICAqLwotICAvKiAgICBpbnRvIGdseXBoIGluZGV4ZXMgZm9yIGl0cyBwYXJlbnQncyBmYWNlLiAgU29tZSBmb250IGZvcm1hdHMgbWF5ICAgKi8KLSAgLyogICAgcHJvdmlkZSBzZXZlcmFsIGNoYXJtYXBzIHBlciBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFYWNoIGZhY2Ugb2JqZWN0IG93bnMgemVybyBvciBtb3JlIGNoYXJtYXBzLCBidXQgb25seSBvbmUgb2YgdGhlbSAgKi8KLSAgLyogICAgY2FuIGJlIGBhY3RpdmUnLCBwcm92aWRpbmcgdGhlIGRhdGEgdXNlZCBieSBARlRfR2V0X0NoYXJfSW5kZXggb3IgICovCi0gIC8qICAgIEBGVF9Mb2FkX0NoYXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoYXJtYXBzIGluIGEgZmFjZSBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgICovCi0gIC8qICAgIGBmYWNlLT5udW1fY2hhcm1hcHMnIGFuZCBgZmFjZS0+Y2hhcm1hcHMnIGZpZWxkcyBvZiBARlRfRmFjZVJlYy4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGN1cnJlbnRseSBhY3RpdmUgY2hhcm1hcCBpcyBhdmFpbGFibGUgYXMgYGZhY2UtPmNoYXJtYXAnLiAgICAgICovCi0gIC8qICAgIFlvdSBzaG91bGQgY2FsbCBARlRfU2V0X0NoYXJtYXAgdG8gY2hhbmdlIGl0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gYSBuZXcgZmFjZSBpcyBjcmVhdGVkIChlaXRoZXIgdGhyb3VnaCBARlRfTmV3X0ZhY2Ugb3IgICAgICAgICAqLwotICAvKiAgICBARlRfT3Blbl9GYWNlKSwgdGhlIGxpYnJhcnkgbG9va3MgZm9yIGEgVW5pY29kZSBjaGFybWFwIHdpdGhpbiAgICAgKi8KLSAgLyogICAgdGhlIGxpc3QgYW5kIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVzIGl0LiAgSWYgdGhlcmUgaXMgbm8gVW5pY29kZSAgICovCi0gIC8qICAgIGNoYXJtYXAsIEZyZWVUeXBlIGRvZXNuJ3Qgc2V0IGFuIGBhY3RpdmUnIGNoYXJtYXAuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlZSBARlRfQ2hhck1hcFJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gICAqLwotICAvKiAgICBjaGFyYWN0ZXIgbWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9DaGFyTWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIGNoYXJhY3RlciBtYXAgKHVzdWFsbHkgYWJicmV2aWF0ZWQgdG8gYGNoYXJtYXAnKS4gIEEKKyAgICogICBjaGFybWFwIGlzIHVzZWQgdG8gdHJhbnNsYXRlIGNoYXJhY3RlciBjb2RlcyBpbiBhIGdpdmVuIGVuY29kaW5nCisgICAqICAgaW50byBnbHlwaCBpbmRleGVzIGZvciBpdHMgcGFyZW50J3MgZmFjZS4gIFNvbWUgZm9udCBmb3JtYXRzIG1heQorICAgKiAgIHByb3ZpZGUgc2V2ZXJhbCBjaGFybWFwcyBwZXIgZm9udC4KKyAgICoKKyAgICogICBFYWNoIGZhY2Ugb2JqZWN0IG93bnMgemVybyBvciBtb3JlIGNoYXJtYXBzLCBidXQgb25seSBvbmUgb2YgdGhlbQorICAgKiAgIGNhbiBiZSBgYWN0aXZlJywgcHJvdmlkaW5nIHRoZSBkYXRhIHVzZWQgYnkgQEZUX0dldF9DaGFyX0luZGV4IG9yCisgICAqICAgQEZUX0xvYWRfQ2hhci4KKyAgICoKKyAgICogICBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY2hhcm1hcHMgaW4gYSBmYWNlIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQorICAgKiAgIGBmYWNlLT5udW1fY2hhcm1hcHMnIGFuZCBgZmFjZS0+Y2hhcm1hcHMnIGZpZWxkcyBvZiBARlRfRmFjZVJlYy4KKyAgICoKKyAgICogICBUaGUgY3VycmVudGx5IGFjdGl2ZSBjaGFybWFwIGlzIGF2YWlsYWJsZSBhcyBgZmFjZS0+Y2hhcm1hcCcuCisgICAqICAgWW91IHNob3VsZCBjYWxsIEBGVF9TZXRfQ2hhcm1hcCB0byBjaGFuZ2UgaXQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFdoZW4gYSBuZXcgZmFjZSBpcyBjcmVhdGVkIChlaXRoZXIgdGhyb3VnaCBARlRfTmV3X0ZhY2Ugb3IKKyAgICogICBARlRfT3Blbl9GYWNlKSwgdGhlIGxpYnJhcnkgbG9va3MgZm9yIGEgVW5pY29kZSBjaGFybWFwIHdpdGhpbgorICAgKiAgIHRoZSBsaXN0IGFuZCBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlcyBpdC4gIElmIHRoZXJlIGlzIG5vIFVuaWNvZGUKKyAgICogICBjaGFybWFwLCBGcmVlVHlwZSBkb2Vzbid0IHNldCBhbiBgYWN0aXZlJyBjaGFybWFwLgorICAgKgorICAgKiBAYWxzbzoKKyAgICogICBTZWUgQEZUX0NoYXJNYXBSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZpZWxkcyBvZiBhIGdpdmVuCisgICAqICAgY2hhcmFjdGVyIG1hcC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX0NoYXJNYXBSZWNfKiAgRlRfQ2hhck1hcDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ19UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgbWFjcm8gY29udmVydHMgZm91ci1sZXR0ZXIgdGFncyBpbnRvIGFuIHVuc2lnbmVkIGxvbmcuICBJdCBpcyAqLwotICAvKiAgICB1c2VkIHRvIGRlZmluZSBgZW5jb2RpbmcnIGlkZW50aWZpZXJzIChzZWUgQEZUX0VuY29kaW5nKS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTaW5jZSBtYW55IDE2LWJpdCBjb21waWxlcnMgZG9uJ3QgbGlrZSAzMi1iaXQgZW51bWVyYXRpb25zLCB5b3UgICAgKi8KLSAgLyogICAgc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZSAgICovCi0gIC8qICAgIHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApICB2YWx1ZSAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRvIGdldCBhIHNpbXBsZSBlbnVtZXJhdGlvbiB3aXRob3V0IGFzc2lnbmluZyBzcGVjaWFsIG51bWJlcnMuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9FTkNfVEFHCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgaW50byBhbiB1bnNpZ25lZCBsb25nLiAgSXQgaXMKKyAgICogICB1c2VkIHRvIGRlZmluZSBgZW5jb2RpbmcnIGlkZW50aWZpZXJzIChzZWUgQEZUX0VuY29kaW5nKS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2luY2UgbWFueSAxNi1iaXQgY29tcGlsZXJzIGRvbid0IGxpa2UgMzItYml0IGVudW1lcmF0aW9ucywgeW91CisgICAqICAgc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZQorICAgKiAgIHRoaXM6CisgICAqCisgICAqICAgeworICAgKiAgICAgI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApICB2YWx1ZQorICAgKiAgIH0KKyAgICoKKyAgICogICB0byBnZXQgYSBzaW1wbGUgZW51bWVyYXRpb24gd2l0aG91dCBhc3NpZ25pbmcgc3BlY2lhbCBudW1iZXJzLgorICAgKi8KIAogI2lmbmRlZiBGVF9FTkNfVEFHCiAjZGVmaW5lIEZUX0VOQ19UQUcoIHZhbHVlLCBhLCBiLCBjLCBkICkgICAgICAgICBcCkBAIC02MTksMTQ5ICs2MjQsMTUxIEBACiAjZW5kaWYgLyogRlRfRU5DX1RBRyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRW5jb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdG8gc3BlY2lmeSBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgY2hhcm1hcHMuICAgICovCi0gIC8qICAgIFVzZWQgaW4gdGhlIEBGVF9TZWxlY3RfQ2hhcm1hcCBBUEkgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZW51bWVyYXRpb24gbGlzdHMgc3BlY2lmaWMgY2hhcmFjdGVyICAgICAgICAqLwotICAvKiAgICByZXBlcnRvcmllcyAoaS5lLiwgY2hhcnNldHMpLCBhbmQgbm90IHRleHQgZW5jb2RpbmcgbWV0aG9kcyAoZS5nLiwgKi8KLSAgLyogICAgVVRGLTgsIFVURi0xNiwgZXRjLikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPdGhlciBlbmNvZGluZ3MgbWlnaHQgYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19OT05FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZW5jb2RpbmcgdmFsdWV+MCBpcyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19VTklDT0RFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgVW5pY29kZSBjaGFyYWN0ZXIgc2V0LiAgVGhpcyB2YWx1ZSBjb3ZlcnMgYWxsIHZlcnNpb25zIG9mICAgICovCi0gIC8qICAgICAgdGhlIFVuaWNvZGUgcmVwZXJ0b2lyZSwgaW5jbHVkaW5nIEFTQ0lJIGFuZCBMYXRpbi0xLiAgTW9zdCBmb250cyAqLwotICAvKiAgICAgIGluY2x1ZGUgYSBVbmljb2RlIGNoYXJtYXAsIGJ1dCBub3QgYWxsIG9mIHRoZW0uICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBVbmljb2RlIHZhbHVlIFUrMUYwMjggKGFuZCAgICAqLwotICAvKiAgICAgIHRoZSBmb250IGNvbnRhaW5zIGl0KSwgdXNlIHZhbHVlIDB4MUYwMjggYXMgdGhlIGlucHV0IHZhbHVlIGZvciAgKi8KLSAgLyogICAgICBARlRfR2V0X0NoYXJfSW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19NU19TWU1CT0wgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBNaWNyb3NvZnQgU3ltYm9sIGVuY29kaW5nLCB1c2VkIHRvIGVuY29kZSBtYXRoZW1hdGljYWwgc3ltYm9scyAgICovCi0gIC8qICAgICAgYW5kIHdpbmdkaW5ncy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bScsICAgICAgICAgKi8KLSAgLyogICAgICBgaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0nLCBhbmQgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYGh0dHA6Ly93d3cua29zdGlzLm5ldC9jaGFyc2V0cy93aW5nZGluZy5odG0nLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGlzIGVuY29kaW5nIHVzZXMgY2hhcmFjdGVyIGNvZGVzIGZyb20gdGhlIFBVQSAoUHJpdmF0ZSBVbmljb2RlICovCi0gIC8qICAgICAgQXJlYSkgaW4gdGhlIHJhbmdlIFUrRjAyMC1VK0YwRkYuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgU2hpZnQgSklTIGVuY29kaW5nIGZvciBKYXBhbmVzZS4gIE1vcmUgaW5mbyBhdCAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGlmdF9KSVMnLiAgU2VlIG5vdGUgb24gICAgICAgICAgKi8KLSAgLyogICAgICBtdWx0aS1ieXRlIGVuY29kaW5ncyBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19QUkMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byBlbmNvZGluZyBzeXN0ZW1zIG1haW5seSBmb3IgU2ltcGxpZmllZCBDaGluZXNlIGFzICovCi0gIC8qICAgICAgdXNlZCBpbiBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSAoUFJDKS4gIFRoZSBlbmNvZGluZyBsYXlvdXQgICAqLwotICAvKiAgICAgIGlzIGJhc2VkIG9uIEdCfjIzMTIgYW5kIGl0cyBzdXBlcnNldHMgR0JLIGFuZCBHQn4xODAzMC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIGFuIGVuY29kaW5nIHN5c3RlbSBmb3IgVHJhZGl0aW9uYWwgQ2hpbmVzZSBhcyAgICAgKi8KLSAgLyogICAgICB1c2VkIGluIFRhaXdhbiBhbmQgSG9uZyBLb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19XQU5TVU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgS29yZWFuIGVuY29kaW5nIHN5c3RlbSBrbm93biBhcyBFeHRlbmRlZCAgICAgICovCi0gIC8qICAgICAgV2Fuc3VuZyAoTVMgV2luZG93cyBjb2RlIHBhZ2UgOTQ5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBgaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dpbmRvd3NCZXN0Rml0L2Jlc3RmaXQ5NDkudHh0Jy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBLb3JlYW4gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAoS1N+QyA1NjAxLTE5OTIpLCB3aGljaCAgICAgICAgKi8KLSAgLyogICAgICBjb3JyZXNwb25kcyB0byBNUyBXaW5kb3dzIGNvZGUgcGFnZSAxMzYxLiAgVGhpcyBjaGFyYWN0ZXIgc2V0ICAgICovCi0gIC8qICAgICAgaW5jbHVkZXMgYWxsIHBvc3NpYmxlIEhhbmd1bCBjaGFyYWN0ZXIgY29tYmluYXRpb25zLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYSBMYXRpbi0xIGVuY29kaW5nIGFzIGRlZmluZWQgaW4gYSBUeXBlfjEgICAgICAgICAqLwotICAvKiAgICAgIFBvc3RTY3JpcHQgZm9udC4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEFkb2JlIFN0YW5kYXJkIGVuY29kaW5nLCBhcyBmb3VuZCBpbiBUeXBlfjEsIENGRiwgYW5kICAgICAgICAgICAgKi8KLSAgLyogICAgICBPcGVuVHlwZS9DRkYgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgY29kZXMuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBZG9iZSBFeHBlcnQgZW5jb2RpbmcsIGFzIGZvdW5kIGluIFR5cGV+MSwgQ0ZGLCBhbmQgT3BlblR5cGUvQ0ZGICovCi0gIC8qICAgICAgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgY29kZXMuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYSBjdXN0b20gZW5jb2RpbmcsIGFzIGZvdW5kIGluIFR5cGV+MSwgQ0ZGLCBhbmQgICAqLwotICAvKiAgICAgIE9wZW5UeXBlL0NGRiBmb250cy4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEFwcGxlIHJvbWFuIGVuY29kaW5nLiAgTWFueSBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMgY29udGFpbiAgKi8KLSAgLyogICAgICBhIGNoYXJtYXAgZm9yIHRoaXMgOC1iaXQgZW5jb2RpbmcsIHNpbmNlIG9sZGVyIHZlcnNpb25zIG9mIE1hYyAgICovCi0gIC8qICAgICAgT1MgYXJlIGFibGUgdG8gdXNlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfT0xEX0xBVElOXzIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyB2YWx1ZSBpcyBkZXByZWNhdGVkIGFuZCB3YXMgbmVpdGhlciB1c2VkIG5vciByZXBvcnRlZCBieSAgICAqLwotICAvKiAgICAgIEZyZWVUeXBlLiAgRG9uJ3QgdXNlIG9yIHRlc3QgZm9yIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX1NKSVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfU0pJUy4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0dCMjMxMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfUFJDLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfQklHNS4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX1dBTlNVTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfV0FOU1VORy4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfSk9IQUIuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCeSBkZWZhdWx0LCBGcmVlVHlwZSBhdXRvbWF0aWNhbGx5IHN5bnRoZXNpemVzIGEgVW5pY29kZSBjaGFybWFwICAgKi8KLSAgLyogICAgZm9yIFBvc3RTY3JpcHQgZm9udHMsIHVzaW5nIHRoZWlyIGdseXBoIG5hbWUgZGljdGlvbmFyaWVzLiAgICAgICAgICovCi0gIC8qICAgIEhvd2V2ZXIsIGl0IGFsc28gcmVwb3J0cyB0aGUgZW5jb2RpbmdzIGRlZmluZWQgZXhwbGljaXRseSBpbiB0aGUgICAqLwotICAvKiAgICBmb250IGZpbGUsIGZvciB0aGUgY2FzZXMgd2hlbiB0aGV5IGFyZSBuZWVkZWQsIHdpdGggdGhlIEFkb2JlICAgICAgKi8KLSAgLyogICAgdmFsdWVzIGFzIHdlbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9FTkNPRElOR19OT05FIGlzIHNldCBieSB0aGUgQkRGIGFuZCBQQ0YgZHJpdmVycyBpZiB0aGUgY2hhcm1hcCAgKi8KLSAgLyogICAgaXMgbmVpdGhlciBVbmljb2RlIG5vciBJU08tODg1OS0xIChvdGhlcndpc2UgaXQgaXMgc2V0IHRvICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX1VOSUNPREUpLiAgVXNlIEBGVF9HZXRfQkRGX0NoYXJzZXRfSUQgdG8gZmluZCBvdXQgICAgICAqLwotICAvKiAgICB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gIElmLCBmb3IgZXhhbXBsZSwgdGhlICAgICAgICAgICAgKi8KLSAgLyogICAgYGNzX3JlZ2lzdHJ5JyBmaWVsZCBpcyBgS09JOCcgYW5kIHRoZSBgY3NfZW5jb2RpbmcnIGZpZWxkIGlzIGBSJywgICovCi0gIC8qICAgIHRoZSBmb250IGlzIGVuY29kZWQgaW4gS09JOC1SLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfTk9ORSBpcyBhbHdheXMgc2V0ICh3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbikgYnkgdGhlICAgICovCi0gIC8qICAgIHdpbmZvbnRzIGRyaXZlci4gIFVzZSBARlRfR2V0X1dpbkZOVF9IZWFkZXIgYW5kIGV4YW1pbmUgdGhlICAgICAgICAqLwotICAvKiAgICBgY2hhcnNldCcgZmllbGQgb2YgdGhlIEBGVF9XaW5GTlRfSGVhZGVyUmVjIHN0cnVjdHVyZSB0byBmaW5kIG91dCAgKi8KLSAgLyogICAgd2hpY2ggZW5jb2RpbmcgaXMgcmVhbGx5IHByZXNlbnQuICBGb3IgZXhhbXBsZSwgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9XaW5GTlRfSURfQ1AxMjUxICgyMDQpIG1lYW5zIFdpbmRvd3MgY29kZSBwYWdlIDEyNTEgKGZvciAgICAgICAqLwotICAvKiAgICBSdXNzaWFuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGlmIGBwbGF0Zm9ybV9pZCcgaXMgQFRUX1BMQVRGT1JNX01BQ0lOVE9TSCAqLwotICAvKiAgICBhbmQgYGVuY29kaW5nX2lkJyBpcyBub3QgYFRUX01BQ19JRF9ST01BTicgKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gKi8KLSAgLyogICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgcGxhdGZvcm1faWQnIGlzIEBUVF9QTEFURk9STV9NQUNJTlRPU0gsIHVzZSB0aGUgZnVuY3Rpb24gICAgICAgKi8KLSAgLyogICAgQEZUX0dldF9DTWFwX0xhbmd1YWdlX0lEIHRvIHF1ZXJ5IHRoZSBNYWMgbGFuZ3VhZ2UgSUQgdGhhdCBtYXkgICAgICovCi0gIC8qICAgIGJlIG5lZWRlZCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIEFwcGxlIGVuY29kaW5nIHZhcmlhbnRzLiAgU2VlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBodHRwczovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9BUFBMRS9SZWFkbWUudHh0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0byBnZXQgYW4gaWRlYSBob3cgdG8gZG8gdGhhdC4gIEJhc2ljYWxseSwgaWYgdGhlIGxhbmd1YWdlIElEICAgICAgKi8KLSAgLyogICAgaXN+MCwgZG9uJ3QgdXNlIGl0LCBvdGhlcndpc2Ugc3VidHJhY3QgMSBmcm9tIHRoZSBsYW5ndWFnZSBJRC4gICAgICovCi0gIC8qICAgIFRoZW4gZXhhbWluZSBgZW5jb2RpbmdfaWQnLiAgSWYsIGZvciBleGFtcGxlLCBgZW5jb2RpbmdfaWQnIGlzICAgICAqLwotICAvKiAgICBgVFRfTUFDX0lEX1JPTUFOJyBhbmQgdGhlIGxhbmd1YWdlIElEIChtaW51c34xKSBpcyAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYFRUX01BQ19MQU5HSURfR1JFRUsnLCBpdCBpcyB0aGUgR3JlZWsgZW5jb2RpbmcsIG5vdCBSb21hbi4gICAgICAgICovCi0gIC8qICAgIGBUVF9NQUNfSURfQVJBQklDJyB3aXRoIGBUVF9NQUNfTEFOR0lEX0ZBUlNJJyBtZWFucyB0aGUgRmFyc2kgICAgICAqLwotICAvKiAgICB2YXJpYW50IHRoZSBBcmFiaWMgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9FbmNvZGluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQW4gZW51bWVyYXRpb24gdG8gc3BlY2lmeSBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgY2hhcm1hcHMuCisgICAqICAgVXNlZCBpbiB0aGUgQEZUX1NlbGVjdF9DaGFybWFwIEFQSSBmdW5jdGlvbi4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBlbnVtZXJhdGlvbiBsaXN0cyBzcGVjaWZpYyBjaGFyYWN0ZXIKKyAgICogICByZXBlcnRvcmllcyAoaS5lLiwgY2hhcnNldHMpLCBhbmQgbm90IHRleHQgZW5jb2RpbmcgbWV0aG9kcyAoZS5nLiwKKyAgICogICBVVEYtOCwgVVRGLTE2LCBldGMuKS4KKyAgICoKKyAgICogICBPdGhlciBlbmNvZGluZ3MgbWlnaHQgYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0VOQ09ESU5HX05PTkUgOjoKKyAgICogICAgIFRoZSBlbmNvZGluZyB2YWx1ZX4wIGlzIHJlc2VydmVkIGZvciBhbGwgZm9ybWF0cyBleGNlcHQgQkRGLCBQQ0YsCisgICAqICAgICBhbmQgV2luZG93cyBGTlQ7IHNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogICBGVF9FTkNPRElOR19VTklDT0RFIDo6CisgICAqICAgICBUaGUgVW5pY29kZSBjaGFyYWN0ZXIgc2V0LiAgVGhpcyB2YWx1ZSBjb3ZlcnMgYWxsIHZlcnNpb25zIG9mCisgICAqICAgICB0aGUgVW5pY29kZSByZXBlcnRvaXJlLCBpbmNsdWRpbmcgQVNDSUkgYW5kIExhdGluLTEuICBNb3N0IGZvbnRzCisgICAqICAgICBpbmNsdWRlIGEgVW5pY29kZSBjaGFybWFwLCBidXQgbm90IGFsbCBvZiB0aGVtLgorICAgKgorICAgKiAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBVbmljb2RlIHZhbHVlIFUrMUYwMjggKGFuZAorICAgKiAgICAgdGhlIGZvbnQgY29udGFpbnMgaXQpLCB1c2UgdmFsdWUgMHgxRjAyOCBhcyB0aGUgaW5wdXQgdmFsdWUgZm9yCisgICAqICAgICBARlRfR2V0X0NoYXJfSW5kZXguCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfTVNfU1lNQk9MIDo6CisgICAqICAgICBNaWNyb3NvZnQgU3ltYm9sIGVuY29kaW5nLCB1c2VkIHRvIGVuY29kZSBtYXRoZW1hdGljYWwgc3ltYm9scworICAgKiAgICAgYW5kIHdpbmdkaW5ncy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgICogICAgIGBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bScsCisgICAqICAgICBgaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0nLCBhbmQKKyAgICogICAgIGBodHRwOi8vd3d3Lmtvc3Rpcy5uZXQvY2hhcnNldHMvd2luZ2RpbmcuaHRtJy4KKyAgICoKKyAgICogICAgIFRoaXMgZW5jb2RpbmcgdXNlcyBjaGFyYWN0ZXIgY29kZXMgZnJvbSB0aGUgUFVBIChQcml2YXRlIFVuaWNvZGUKKyAgICogICAgIEFyZWEpIGluIHRoZSByYW5nZSBVK0YwMjAtVStGMEZGLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX1NKSVMgOjoKKyAgICogICAgIFNoaWZ0IEpJUyBlbmNvZGluZyBmb3IgSmFwYW5lc2UuICBNb3JlIGluZm8gYXQKKyAgICogICAgIGBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGlmdF9KSVMnLiAgU2VlIG5vdGUgb24KKyAgICogICAgIG11bHRpLWJ5dGUgZW5jb2RpbmdzIGJlbG93LgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX1BSQyA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gZW5jb2Rpbmcgc3lzdGVtcyBtYWlubHkgZm9yIFNpbXBsaWZpZWQgQ2hpbmVzZSBhcworICAgKiAgICAgdXNlZCBpbiBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSAoUFJDKS4gIFRoZSBlbmNvZGluZyBsYXlvdXQKKyAgICogICAgIGlzIGJhc2VkIG9uIEdCfjIzMTIgYW5kIGl0cyBzdXBlcnNldHMgR0JLIGFuZCBHQn4xODAzMC4KKyAgICoKKyAgICogICBGVF9FTkNPRElOR19CSUc1IDo6CisgICAqICAgICBDb3JyZXNwb25kcyB0byBhbiBlbmNvZGluZyBzeXN0ZW0gZm9yIFRyYWRpdGlvbmFsIENoaW5lc2UgYXMKKyAgICogICAgIHVzZWQgaW4gVGFpd2FuIGFuZCBIb25nIEtvbmcuCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfV0FOU1VORyA6OgorICAgKiAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIEtvcmVhbiBlbmNvZGluZyBzeXN0ZW0ga25vd24gYXMgRXh0ZW5kZWQKKyAgICogICAgIFdhbnN1bmcgKE1TIFdpbmRvd3MgY29kZSBwYWdlIDk0OSkuCisgICAqICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKKyAgICogICAgIGBodHRwczovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV2luZG93c0Jlc3RGaXQvYmVzdGZpdDk0OS50eHQnLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX0pPSEFCIDo6CisgICAqICAgICBUaGUgS29yZWFuIHN0YW5kYXJkIGNoYXJhY3RlciBzZXQgKEtTfkMgNTYwMS0xOTkyKSwgd2hpY2gKKyAgICogICAgIGNvcnJlc3BvbmRzIHRvIE1TIFdpbmRvd3MgY29kZSBwYWdlIDEzNjEuICBUaGlzIGNoYXJhY3RlciBzZXQKKyAgICogICAgIGluY2x1ZGVzIGFsbCBwb3NzaWJsZSBIYW5ndWwgY2hhcmFjdGVyIGNvbWJpbmF0aW9ucy4KKyAgICoKKyAgICogICBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xIDo6CisgICAqICAgICBDb3JyZXNwb25kcyB0byBhIExhdGluLTEgZW5jb2RpbmcgYXMgZGVmaW5lZCBpbiBhIFR5cGV+MQorICAgKiAgICAgUG9zdFNjcmlwdCBmb250LiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyIGNvZGVzLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIDo6CisgICAqICAgICBBZG9iZSBTdGFuZGFyZCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCBDRkYsIGFuZAorICAgKiAgICAgT3BlblR5cGUvQ0ZGIGZvbnRzLiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyIGNvZGVzLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVCA6OgorICAgKiAgICAgQWRvYmUgRXhwZXJ0IGVuY29kaW5nLCBhcyBmb3VuZCBpbiBUeXBlfjEsIENGRiwgYW5kIE9wZW5UeXBlL0NGRgorICAgKiAgICAgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgY29kZXMuCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NIDo6CisgICAqICAgICBDb3JyZXNwb25kcyB0byBhIGN1c3RvbSBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCBDRkYsIGFuZAorICAgKiAgICAgT3BlblR5cGUvQ0ZGIGZvbnRzLiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyIGNvZGVzLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIDo6CisgICAqICAgICBBcHBsZSByb21hbiBlbmNvZGluZy4gIE1hbnkgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzIGNvbnRhaW4KKyAgICogICAgIGEgY2hhcm1hcCBmb3IgdGhpcyA4LWJpdCBlbmNvZGluZywgc2luY2Ugb2xkZXIgdmVyc2lvbnMgb2YgTWFjCisgICAqICAgICBPUyBhcmUgYWJsZSB0byB1c2UgaXQuCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfT0xEX0xBVElOXzIgOjoKKyAgICogICAgIFRoaXMgdmFsdWUgaXMgZGVwcmVjYXRlZCBhbmQgd2FzIG5laXRoZXIgdXNlZCBub3IgcmVwb3J0ZWQgYnkKKyAgICogICAgIEZyZWVUeXBlLiAgRG9uJ3QgdXNlIG9yIHRlc3QgZm9yIGl0LgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX01TX1NKSVMgOjoKKyAgICogICAgIFNhbWUgYXMgRlRfRU5DT0RJTkdfU0pJUy4gIERlcHJlY2F0ZWQuCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfTVNfR0IyMzEyIDo6CisgICAqICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX1BSQy4gIERlcHJlY2F0ZWQuCisgICAqCisgICAqICAgRlRfRU5DT0RJTkdfTVNfQklHNSA6OgorICAgKiAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19CSUc1LiAgRGVwcmVjYXRlZC4KKyAgICoKKyAgICogICBGVF9FTkNPRElOR19NU19XQU5TVU5HIDo6CisgICAqICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX1dBTlNVTkcuICBEZXByZWNhdGVkLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX01TX0pPSEFCIDo6CisgICAqICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX0pPSEFCLiAgRGVwcmVjYXRlZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgZW5hYmxlcyBhIFVuaWNvZGUgY2hhcm1hcCBhbmQgdGFncyBpdCB3aXRoCisgICAqICAgRlRfRU5DT0RJTkdfVU5JQ09ERSB3aGVuIGl0IGlzIGVpdGhlciBwcm92aWRlZCBvciBjYW4gYmUgZ2VuZXJhdGVkCisgICAqICAgZnJvbSBQb3N0U2NyaXB0IGdseXBoIG5hbWUgZGljdGlvbmFyaWVzIGluIHRoZSBmb250IGZpbGUuCisgICAqICAgQWxsIG90aGVyIGVuY29kaW5ncyBhcmUgY29uc2lkZXJlZCBsZWdhY3kgYW5kIHRhZ2dlZCBvbmx5IGlmCisgICAqICAgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBmb250IGZpbGUuICBPdGhlcndpc2UsIEZUX0VOQ09ESU5HX05PTkUKKyAgICogICBpcyB1c2VkLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGJ5IHRoZSBCREYgYW5kIFBDRiBkcml2ZXJzIGlmIHRoZSBjaGFybWFwCisgICAqICAgaXMgbmVpdGhlciBVbmljb2RlIG5vciBJU08tODg1OS0xIChvdGhlcndpc2UgaXQgaXMgc2V0IHRvCisgICAqICAgRlRfRU5DT0RJTkdfVU5JQ09ERSkuICBVc2UgQEZUX0dldF9CREZfQ2hhcnNldF9JRCB0byBmaW5kIG91dAorICAgKiAgIHdoaWNoIGVuY29kaW5nIGlzIHJlYWxseSBwcmVzZW50LiAgSWYsIGZvciBleGFtcGxlLCB0aGUKKyAgICogICBgY3NfcmVnaXN0cnknIGZpZWxkIGlzIGBLT0k4JyBhbmQgdGhlIGBjc19lbmNvZGluZycgZmllbGQgaXMgYFInLAorICAgKiAgIHRoZSBmb250IGlzIGVuY29kZWQgaW4gS09JOC1SLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX05PTkUgaXMgYWx3YXlzIHNldCAod2l0aCBhIHNpbmdsZSBleGNlcHRpb24pIGJ5IHRoZQorICAgKiAgIHdpbmZvbnRzIGRyaXZlci4gIFVzZSBARlRfR2V0X1dpbkZOVF9IZWFkZXIgYW5kIGV4YW1pbmUgdGhlCisgICAqICAgYGNoYXJzZXQnIGZpZWxkIG9mIHRoZSBARlRfV2luRk5UX0hlYWRlclJlYyBzdHJ1Y3R1cmUgdG8gZmluZCBvdXQKKyAgICogICB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gIEZvciBleGFtcGxlLAorICAgKiAgIEBGVF9XaW5GTlRfSURfQ1AxMjUxICgyMDQpIG1lYW5zIFdpbmRvd3MgY29kZSBwYWdlIDEyNTEgKGZvcgorICAgKiAgIFJ1c3NpYW4pLgorICAgKgorICAgKiAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGlmIGBwbGF0Zm9ybV9pZCcgaXMgQFRUX1BMQVRGT1JNX01BQ0lOVE9TSAorICAgKiAgIGFuZCBgZW5jb2RpbmdfaWQnIGlzIG5vdCBgVFRfTUFDX0lEX1JPTUFOJyAob3RoZXJ3aXNlIGl0IGlzIHNldCB0bworICAgKiAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOKS4KKyAgICoKKyAgICogICBJZiBgcGxhdGZvcm1faWQnIGlzIEBUVF9QTEFURk9STV9NQUNJTlRPU0gsIHVzZSB0aGUgZnVuY3Rpb24KKyAgICogICBARlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgdG8gcXVlcnkgdGhlIE1hYyBsYW5ndWFnZSBJRCB0aGF0IG1heQorICAgKiAgIGJlIG5lZWRlZCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIEFwcGxlIGVuY29kaW5nIHZhcmlhbnRzLiAgU2VlCisgICAqCisgICAqICAgICBodHRwczovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9BUFBMRS9SZWFkbWUudHh0CisgICAqCisgICAqICAgdG8gZ2V0IGFuIGlkZWEgaG93IHRvIGRvIHRoYXQuICBCYXNpY2FsbHksIGlmIHRoZSBsYW5ndWFnZSBJRAorICAgKiAgIGlzfjAsIGRvbid0IHVzZSBpdCwgb3RoZXJ3aXNlIHN1YnRyYWN0IDEgZnJvbSB0aGUgbGFuZ3VhZ2UgSUQuCisgICAqICAgVGhlbiBleGFtaW5lIGBlbmNvZGluZ19pZCcuICBJZiwgZm9yIGV4YW1wbGUsIGBlbmNvZGluZ19pZCcgaXMKKyAgICogICBgVFRfTUFDX0lEX1JPTUFOJyBhbmQgdGhlIGxhbmd1YWdlIElEIChtaW51c34xKSBpcworICAgKiAgIGBUVF9NQUNfTEFOR0lEX0dSRUVLJywgaXQgaXMgdGhlIEdyZWVrIGVuY29kaW5nLCBub3QgUm9tYW4uCisgICAqICAgYFRUX01BQ19JRF9BUkFCSUMnIHdpdGggYFRUX01BQ19MQU5HSURfRkFSU0knIG1lYW5zIHRoZSBGYXJzaQorICAgKiAgIHZhcmlhbnQgdGhlIEFyYWJpYyBlbmNvZGluZy4KKyAgICovCiAgIHR5cGVkZWYgZW51bSAgRlRfRW5jb2RpbmdfCiAgIHsKICAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19OT05FLCAwLCAwLCAwLCAwICksCkBAIC04MTQsMjkgKzgyMSwzMiBAQAogI2RlZmluZSBmdF9lbmNvZGluZ19hcHBsZV9yb21hbiAgICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0NoYXJNYXBSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBiYXNlIGNoYXJtYXAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZW5jb2RpbmcgICAgOjogQW4gQEZUX0VuY29kaW5nIHRhZyBpZGVudGlmeWluZyB0aGUgY2hhcm1hcC4gIFVzZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHRoaXMgd2l0aCBARlRfU2VsZWN0X0NoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGxhdGZvcm1faWQgOjogQW4gSUQgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIHBsYXRmb3JtIGZvciB0aGUgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBlbmNvZGluZyBJRC4gIFRoaXMgY29tZXMgZGlyZWN0bHkgZnJvbSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgZ2V0cyBlbXVsYXRlZCBmb3IgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgb3RoZXIgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBlbmNvZGluZ19pZCA6OiBBIHBsYXRmb3JtIHNwZWNpZmljIGVuY29kaW5nIG51bWJlci4gIFRoaXMgYWxzbyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgZ2V0cyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkIHNpbWlsYXJseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfQ2hhck1hcFJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGJhc2UgY2hhcm1hcCBzdHJ1Y3R1cmUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBlbmNvZGluZyA6OgorICAgKiAgICAgQW4gQEZUX0VuY29kaW5nIHRhZyBpZGVudGlmeWluZyB0aGUgY2hhcm1hcC4gIFVzZQorICAgKiAgICAgdGhpcyB3aXRoIEBGVF9TZWxlY3RfQ2hhcm1hcC4KKyAgICoKKyAgICogICBwbGF0Zm9ybV9pZCA6OgorICAgKiAgICAgQW4gSUQgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIHBsYXRmb3JtIGZvciB0aGUKKyAgICogICAgIGZvbGxvd2luZyBlbmNvZGluZyBJRC4gIFRoaXMgY29tZXMgZGlyZWN0bHkgZnJvbQorICAgKiAgICAgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gYW5kIGdldHMgZW11bGF0ZWQgZm9yCisgICAqICAgICBvdGhlciBmb3JtYXRzLgorICAgKgorICAgKiAgIGVuY29kaW5nX2lkIDo6CisgICAqICAgICBBIHBsYXRmb3JtLXNwZWNpZmljIGVuY29kaW5nIG51bWJlci4gIFRoaXMgYWxzbyBjb21lcyBmcm9tIHRoZQorICAgKiAgICAgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgZ2V0cyBlbXVsYXRlZCBzaW1pbGFybHkuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfQ2hhck1hcFJlY18KICAgewogICAgIEZUX0ZhY2UgICAgICBmYWNlOwpAQCAtODU2LDIxNSArODY2LDIzMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gYEZUX0ZhY2VfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZSB0aGF0IG1vZGVscyAqLwotICAvKiAgICB0aGUgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gQEZUX0ZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzIG9mIEZyZWVUeXBlfjIgYW5kIGlzICAqLwotICAvKiAgICBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0byBjbGllbnQgYXBwbGljYXRpb25zLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9GYWNlX0ludGVybmFsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIGBGVF9GYWNlX0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUgdGhhdCBtb2RlbHMKKyAgICogICB0aGUgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gQEZUX0ZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIFRoaXMgc3RydWN0dXJlIG1pZ2h0IGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzIG9mIEZyZWVUeXBlfjIgYW5kIGlzCisgICAqICAgbm90IGdlbmVyYWxseSBhdmFpbGFibGUgdG8gY2xpZW50IGFwcGxpY2F0aW9ucy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VfSW50ZXJuYWxSZWNfKiAgRlRfRmFjZV9JbnRlcm5hbDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIHJvb3QgZmFjZSBjbGFzcyBzdHJ1Y3R1cmUuICBBIGZhY2Ugb2JqZWN0IG1vZGVscyBhICAgICAgICAqLwotICAvKiAgICB0eXBlZmFjZSBpbiBhIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fZmFjZXMgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZmFjZXMgaW4gdGhlIGZvbnQgZmlsZS4gIFNvbWUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZXMgaW4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzaW5nbGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZV9pbmRleCAgICAgICAgICA6OiBUaGlzIGZpZWxkIGhvbGRzIHR3byBkaWZmZXJlbnQgdmFsdWVzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0cyAwLTE1IGFyZSB0aGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgZmlsZSAoc3RhcnRpbmcgd2l0aCB2YWx1ZX4wKS4gIFRoZXkgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2V0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUgZmFjZSBpbiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBbU2luY2UgMi42LjFdIEJpdHMgMTYtMzAgYXJlIHJlbGV2YW50IHRvIEdYICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cyBvbmx5LCBob2xkaW5nICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lZCBpbnN0YW5jZSBpbmRleCBmb3IgdGhlIGN1cnJlbnQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlIGluZGV4IChzdGFydGluZyB3aXRoIHZhbHVlfjE7IHZhbHVlfjAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIGZvbnQgYWNjZXNzIHdpdGhvdXQgYSBuYW1lZCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlKS4gIEZvciBub24tdmFyaWF0aW9uIGZvbnRzLCBiaXRzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAxNi0zMCBhcmUgaWdub3JlZC4gIElmIHdlIGhhdmUgdGhlIHRoaXJkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgaW5zdGFuY2Ugb2YgZmFjZX40LCBzYXksIGBmYWNlX2luZGV4JyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAweDAwMDMwMDA0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDMxIGlzIGFsd2F5cyB6ZXJvICh0aGlzIGlzLCAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmYWNlX2luZGV4JyBpcyBhbHdheXMgYSBwb3NpdGl2ZSB2YWx1ZSkuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NpbmNlIDIuOV0gQ2hhbmdpbmcgdGhlIGRlc2lnbiBjb29yZGluYXRlcyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIG9yICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyBkb2VzIG5vdCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlIHRoZSBuYW1lZCBpbnN0YW5jZSBpbmRleCB2YWx1ZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IEBGVF9TZXRfTmFtZWRfSW5zdGFuY2UgZG9lcyB0aGF0KS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfZmxhZ3MgICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIHRoYXQgZ2l2ZSBpbXBvcnRhbnQgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWNlOyBzZWUgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX1hYWCBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHlsZV9mbGFncyAgICAgICAgIDo6IFRoZSBsb3dlciAxNn5iaXRzIGNvbnRhaW4gYSBzZXQgb2YgYml0ICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiB0aGUgZmFjZTsgc2VlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZUX1NUWUxFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBbU2luY2UgMi42LjFdIEJpdHMgMTYtMzAgaG9sZCB0aGUgbnVtYmVyICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmFtZWQgaW5zdGFuY2VzIGF2YWlsYWJsZSBmb3IgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZmFjZSBpZiB3ZSBoYXZlIGEgR1ggb3IgT3BlblR5cGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gKHN1Yilmb250LiAgQml0IDMxIGlzIGFsd2F5cyB6ZXJvICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgaXMsIGBzdHlsZV9mbGFncycgaXMgYWx3YXlzIGEgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlIHZhbHVlKS4gIE5vdGUgdGhhdCBhIHZhcmlhdGlvbiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGhhcyBhbHdheXMgYXQgbGVhc3Qgb25lIG5hbWVkICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsIG5hbWVseSB0aGUgZGVmYXVsdCBpbnN0YW5jZS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2dseXBocyAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZmFjZS4gIElmIHRoZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSBpcyBzY2FsYWJsZSBhbmQgaGFzIHNiaXRzIChzZWUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBudW1fZml4ZWRfc2l6ZXMnKSwgaXQgaXMgc2V0IHRvIHRoZSBudW1iZXIgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBvdXRsaW5lIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDSUQta2V5ZWQgZm9udHMgKG5vdCBpbiBhbiBTRk5UICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyKSB0aGlzIHZhbHVlIGdpdmVzIHRoZSBoaWdoZXN0IENJRCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFtaWx5X25hbWUgICAgICAgICA6OiBUaGUgZmFjZSdzIGZhbWlseSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCB1c3VhbGx5IGluIEVuZ2xpc2gsIHRoYXQgZGVzY3JpYmVzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlZmFjZSdzIGZhbWlseSAobGlrZSBgVGltZXMgTmV3ICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBSb21hbicsIGBCb2RvbmknLCBgR2FyYW1vbmQnLCBldGMpLiAgVGhpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYSBsZWFzdCBjb21tb24gZGVub21pbmF0b3IgdXNlZCB0byBsaXN0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzLiAgU29tZSBmb3JtYXRzIChUcnVlVHlwZSAmIE9wZW5UeXBlKSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGxvY2FsaXplZCBhbmQgVW5pY29kZSB2ZXJzaW9ucyBvZiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzdHJpbmcuICBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBzcGVjaWZpYyBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZW0uICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgTlVMTCAoZS5nLiwgaW4gZm9udHMgZW1iZWRkZWQgaW4gYSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgUERGIGZpbGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIHRoZSBmb250IGRvZXNuJ3QgcHJvdmlkZSBhIHNwZWNpZmljICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5IG5hbWUgZW50cnksIEZyZWVUeXBlIHRyaWVzIHRvICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemUgb25lLCBkZXJpdmluZyBpdCBmcm9tIG90aGVyIG5hbWUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHlsZV9uYW1lICAgICAgICAgIDo6IFRoZSBmYWNlJ3Mgc3R5bGUgbmFtZS4gIFRoaXMgaXMgYW4gQVNDSUkgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHVzdWFsbHkgaW4gRW5nbGlzaCwgdGhhdCBkZXNjcmliZXMgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR5cGVmYWNlJ3Mgc3R5bGUgKGxpa2UgYEl0YWxpYycsICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBCb2xkJywgYENvbmRlbnNlZCcsIGV0YykuICBOb3QgYWxsIGZvbnQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzIHByb3ZpZGUgYSBzdHlsZSBuYW1lLCBzbyB0aGlzIGZpZWxkICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgb3B0aW9uYWwsIGFuZCBjYW4gYmUgc2V0IHRvIE5VTEwuICBBcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBgZmFtaWx5X25hbWUnLCBzb21lIGZvcm1hdHMgcHJvdmlkZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgdGhpcyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLiAgQXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlIGZvcm1hdCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGludGVyZmFjZSB0byBhY2Nlc3MgdGhlbS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9maXhlZF9zaXplcyAgICAgOjogVGhlIG51bWJlciBvZiBiaXRtYXAgc3RyaWtlcyBpbiB0aGUgZmFjZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW4gaWYgdGhlIGZhY2UgaXMgc2NhbGFibGUsIHRoZXJlIG1pZ2h0ICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBiZSBiaXRtYXAgc3RyaWtlcywgd2hpY2ggYXJlIGNhbGxlZCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNiaXRzJyBpbiB0aGF0IGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXZhaWxhYmxlX3NpemVzICAgICA6OiBBbiBhcnJheSBvZiBARlRfQml0bWFwX1NpemUgZm9yIGFsbCBiaXRtYXAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlcyBpbiB0aGUgZmFjZS4gIEl0IGlzIHNldCB0byBOVUxMIGlmICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIGJpdG1hcCBzdHJpa2UuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IEZyZWVUeXBlIHRyaWVzIHRvIHNhbml0aXplIHRoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZSBkYXRhIHNpbmNlIHRoZXkgYXJlIHNvbWV0aW1lcyBzbG9wcHkgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbmNvcnJlY3QsIGJ1dCB0aGlzIGNhbiBlYXNpbHkgZmFpbC4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY2hhcm1hcHMgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgY2hhcm1hcHMgaW4gdGhlIGZhY2UuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJtYXBzICAgICAgICAgICAgOjogQW4gYXJyYXkgb2YgdGhlIGNoYXJtYXBzIG9mIHRoZSBmYWNlLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2VuZXJpYyAgICAgICAgICAgICA6OiBBIGZpZWxkIHJlc2VydmVkIGZvciBjbGllbnQgdXNlcy4gIFNlZSB0aGUgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dlbmVyaWMgdHlwZSBkZXNjcmlwdGlvbi4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmJveCAgICAgICAgICAgICAgICA6OiBUaGUgZm9udCBib3VuZGluZyBib3guICBDb29yZGluYXRlcyBhcmUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMgKHNlZSAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1bml0c19wZXJfRU0nKS4gIFRoZSBib3ggaXMgbGFyZ2UgZW5vdWdoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjb250YWluIGFueSBnbHlwaCBmcm9tIHRoZSBmb250LiAgVGh1cywgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1heCcgY2FuIGJlIHNlZW4gYXMgdGhlIGBtYXhpbXVtICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VuZGVyJywgYW5kIGBiYm94LnlNaW4nIGFzIHRoZSBgbWluaW11bSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjZW5kZXInLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBtaWdodCBiZSBvZmYgYnkgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF0IGxlYXN0KSBvbmUgcGl4ZWwgZm9yIGhpbnRlZCBmb250cy4gIFNlZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9TaXplX01ldHJpY3MgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVuaXRzX3Blcl9FTSAgICAgICAgOjogVGhlIG51bWJlciBvZiBmb250IHVuaXRzIHBlciBFTSBzcXVhcmUgZm9yICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmFjZS4gIFRoaXMgaXMgdHlwaWNhbGx5IDIwNDggZm9yICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBmb250cywgYW5kIDEwMDAgZm9yIFR5cGV+MSBmb250cy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXNjZW5kZXIgICAgICAgICAgICA6OiBUaGUgdHlwb2dyYXBoaWMgYXNjZW5kZXIgb2YgdGhlIGZhY2UsICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBGb3IgZm9udCBmb3JtYXRzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiwgaXQgaXMgc2V0IHRvICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgYmJveC55TWF4Jy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVzY2VuZGVyICAgICAgICAgICA6OiBUaGUgdHlwb2dyYXBoaWMgZGVzY2VuZGVyIG9mIHRoZSBmYWNlLCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBGb3IgZm9udCBmb3JtYXRzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiwgaXQgaXMgc2V0IHRvICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgYmJveC55TWluJy4gIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgZm9yIHZhbHVlcyBiZWxvdyB0aGUgYmFzZWxpbmUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhlaWdodCAgICAgICAgICAgICAgOjogVGhpcyB2YWx1ZSBpcyB0aGUgdmVydGljYWwgZGlzdGFuY2UgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGJhc2VsaW5lcywgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzZWQgaW4gZm9udCB1bml0cy4gIEl0IGlzIGFsd2F5cyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmUuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGdsb2JhbCBnbHlwaCBoZWlnaHQsIHVzZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhc2NlbmRlciAtIGRlc2NlbmRlcicuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9hZHZhbmNlX3dpZHRoICAgOjogVGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCwgaW4gZm9udCB1bml0cywgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gIFRoaXMgY2FuIGJlICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIG1ha2Ugd29yZCB3cmFwcGluZyBjb21wdXRhdGlvbnMgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFzdGVyLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9hZHZhbmNlX2hlaWdodCAgOjogVGhlIG1heGltdW0gYWR2YW5jZSBoZWlnaHQsIGluIGZvbnQgdW5pdHMsICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gIFRoaXMgaXMgb25seSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudCBmb3IgdmVydGljYWwgbGF5b3V0cywgYW5kIGlzIHNldCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYGhlaWdodCcgZm9yIGZvbnRzIHRoYXQgZG8gbm90IHByb3ZpZGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG1ldHJpY3MuICBPbmx5IHJlbGV2YW50IGZvciAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1bmRlcmxpbmVfcG9zaXRpb24gIDo6IFRoZSBwb3NpdGlvbiwgaW4gZm9udCB1bml0cywgb2YgdGhlICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUgbGluZSBmb3IgdGhpcyBmYWNlLiAgSXQgaXMgdGhlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyIG9mIHRoZSB1bmRlcmxpbmluZyBzdGVtLiAgT25seSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVuZGVybGluZV90aGlja25lc3MgOjogVGhlIHRoaWNrbmVzcywgaW4gZm9udCB1bml0cywgb2YgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVybGluZSBmb3IgdGhpcyBmYWNlLiAgT25seSByZWxldmFudCBmb3IgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaCAgICAgICAgICAgICAgIDo6IFRoZSBmYWNlJ3MgYXNzb2NpYXRlZCBnbHlwaCBzbG90KHMpLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgICAgICAgICAgICAgOjogVGhlIGN1cnJlbnQgYWN0aXZlIHNpemUgZm9yIHRoaXMgZmFjZS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcm1hcCAgICAgICAgICAgICA6OiBUaGUgY3VycmVudCBhY3RpdmUgY2hhcm1hcCBmb3IgdGhpcyBmYWNlLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmllbGRzIG1heSBiZSBjaGFuZ2VkIGFmdGVyIGEgY2FsbCB0byBARlRfQXR0YWNoX0ZpbGUgb3IgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9BdHRhY2hfU3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9yIGFuIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250LCB0aGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzICovCi0gIC8qICAgIGNhbiBjaGFuZ2UgYWZ0ZXIgYSBjYWxsIHRvIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyAoYW5kICAgICAqLwotICAvKiAgICBmcmllbmRzKSBpZiB0aGUgZm9udCBjb250YWlucyBhbiBgTVZBUicgdGFibGU6IGBhc2NlbmRlcicsICAgICAgICAgKi8KLSAgLyogICAgYGRlc2NlbmRlcicsIGBoZWlnaHQnLCBgdW5kZXJsaW5lX3Bvc2l0aW9uJywgYW5kICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGB1bmRlcmxpbmVfdGhpY2tuZXNzJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXNwZWNpYWxseSBmb3IgVHJ1ZVR5cGUgZm9udHMgc2VlIGFsc28gdGhlIGRvY3VtZW50YXRpb24gZm9yICAgICAgICovCi0gIC8qICAgIEBGVF9TaXplX01ldHJpY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfRmFjZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRnJlZVR5cGUgcm9vdCBmYWNlIGNsYXNzIHN0cnVjdHVyZS4gIEEgZmFjZSBvYmplY3QgbW9kZWxzIGEKKyAgICogICB0eXBlZmFjZSBpbiBhIGZvbnQgZmlsZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBudW1fZmFjZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgZmFjZXMgaW4gdGhlIGZvbnQgZmlsZS4gIFNvbWUKKyAgICogICAgIGZvbnQgZm9ybWF0cyBjYW4gaGF2ZSBtdWx0aXBsZSBmYWNlcyBpbgorICAgKiAgICAgYSBzaW5nbGUgZm9udCBmaWxlLgorICAgKgorICAgKiAgIGZhY2VfaW5kZXggOjoKKyAgICogICAgIFRoaXMgZmllbGQgaG9sZHMgdHdvIGRpZmZlcmVudCB2YWx1ZXMuCisgICAqICAgICBCaXRzIDAtMTUgYXJlIHRoZSBpbmRleCBvZiB0aGUgZmFjZSBpbiB0aGUKKyAgICogICAgIGZvbnQgZmlsZSAoc3RhcnRpbmcgd2l0aCB2YWx1ZX4wKS4gIFRoZXkKKyAgICogICAgIGFyZSBzZXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmYWNlIGluCisgICAqICAgICB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiAgICAgW1NpbmNlIDIuNi4xXSBCaXRzIDE2LTMwIGFyZSByZWxldmFudCB0byBHWAorICAgKiAgICAgYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cyBvbmx5LCBob2xkaW5nCisgICAqICAgICB0aGUgbmFtZWQgaW5zdGFuY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50CisgICAqICAgICBmYWNlIGluZGV4IChzdGFydGluZyB3aXRoIHZhbHVlfjE7IHZhbHVlfjAKKyAgICogICAgIGluZGljYXRlcyBmb250IGFjY2VzcyB3aXRob3V0IGEgbmFtZWQKKyAgICogICAgIGluc3RhbmNlKS4gIEZvciBub24tdmFyaWF0aW9uIGZvbnRzLCBiaXRzCisgICAqICAgICAxNi0zMCBhcmUgaWdub3JlZC4gIElmIHdlIGhhdmUgdGhlIHRoaXJkCisgICAqICAgICBuYW1lZCBpbnN0YW5jZSBvZiBmYWNlfjQsIHNheSwgYGZhY2VfaW5kZXgnCisgICAqICAgICBpcyBzZXQgdG8gMHgwMDAzMDAwNC4KKyAgICoKKyAgICogICAgIEJpdCAzMSBpcyBhbHdheXMgemVybyAodGhpcyBpcywKKyAgICogICAgIGBmYWNlX2luZGV4JyBpcyBhbHdheXMgYSBwb3NpdGl2ZSB2YWx1ZSkuCisgICAqCisgICAqICAgICBbU2luY2UgMi45XSBDaGFuZ2luZyB0aGUgZGVzaWduIGNvb3JkaW5hdGVzCisgICAqICAgICB3aXRoIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyBvcgorICAgKiAgICAgQEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMgZG9lcyBub3QKKyAgICogICAgIGluZmx1ZW5jZSB0aGUgbmFtZWQgaW5zdGFuY2UgaW5kZXggdmFsdWUKKyAgICogICAgIChvbmx5IEBGVF9TZXRfTmFtZWRfSW5zdGFuY2UgZG9lcyB0aGF0KS4KKyAgICoKKyAgICogICBmYWNlX2ZsYWdzIDo6CisgICAqICAgICBBIHNldCBvZiBiaXQgZmxhZ3MgdGhhdCBnaXZlIGltcG9ydGFudAorICAgKiAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhY2U7IHNlZQorICAgKiAgICAgQEZUX0ZBQ0VfRkxBR19YWFggZm9yIHRoZSBkZXRhaWxzLgorICAgKgorICAgKiAgIHN0eWxlX2ZsYWdzIDo6CisgICAqICAgICBUaGUgbG93ZXIgMTZ+Yml0cyBjb250YWluIGEgc2V0IG9mIGJpdAorICAgKiAgICAgZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3R5bGUgb2YgdGhlIGZhY2U7IHNlZQorICAgKiAgICAgQEZUX1NUWUxFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4KKyAgICoKKyAgICogICAgIFtTaW5jZSAyLjYuMV0gQml0cyAxNi0zMCBob2xkIHRoZSBudW1iZXIKKyAgICogICAgIG9mIG5hbWVkIGluc3RhbmNlcyBhdmFpbGFibGUgZm9yIHRoZQorICAgKiAgICAgY3VycmVudCBmYWNlIGlmIHdlIGhhdmUgYSBHWCBvciBPcGVuVHlwZQorICAgKiAgICAgdmFyaWF0aW9uIChzdWIpZm9udC4gIEJpdCAzMSBpcyBhbHdheXMgemVybworICAgKiAgICAgKHRoaXMgaXMsIGBzdHlsZV9mbGFncycgaXMgYWx3YXlzIGEKKyAgICogICAgIHBvc2l0aXZlIHZhbHVlKS4gIE5vdGUgdGhhdCBhIHZhcmlhdGlvbgorICAgKiAgICAgZm9udCBoYXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBuYW1lZAorICAgKiAgICAgaW5zdGFuY2UsIG5hbWVseSB0aGUgZGVmYXVsdCBpbnN0YW5jZS4KKyAgICoKKyAgICogICBudW1fZ2x5cGhzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZmFjZS4gIElmIHRoZQorICAgKiAgICAgZmFjZSBpcyBzY2FsYWJsZSBhbmQgaGFzIHNiaXRzIChzZWUKKyAgICogICAgIGBudW1fZml4ZWRfc2l6ZXMnKSwgaXQgaXMgc2V0IHRvIHRoZSBudW1iZXIKKyAgICogICAgIG9mIG91dGxpbmUgZ2x5cGhzLgorICAgKgorICAgKiAgICAgRm9yIENJRC1rZXllZCBmb250cyAobm90IGluIGFuIFNGTlQKKyAgICogICAgIHdyYXBwZXIpIHRoaXMgdmFsdWUgZ2l2ZXMgdGhlIGhpZ2hlc3QgQ0lECisgICAqICAgICB1c2VkIGluIHRoZSBmb250LgorICAgKgorICAgKiAgIGZhbWlseV9uYW1lIDo6CisgICAqICAgICBUaGUgZmFjZSdzIGZhbWlseSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSBzdHJpbmcsIHVzdWFsbHkgaW4KKyAgICogICAgIEVuZ2xpc2gsIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlZmFjZSdzIGZhbWlseSAobGlrZSBgVGltZXMgTmV3CisgICAqICAgICBSb21hbicsIGBCb2RvbmknLCBgR2FyYW1vbmQnLCBldGMpLiAgVGhpcyBpcyBhIGxlYXN0IGNvbW1vbgorICAgKiAgICAgZGVub21pbmF0b3IgdXNlZCB0byBsaXN0IGZvbnRzLiAgU29tZSBmb3JtYXRzIChUcnVlVHlwZSAmIE9wZW5UeXBlKQorICAgKiAgICAgcHJvdmlkZSBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgdGhpcyBzdHJpbmcuCisgICAqICAgICBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgZm9ybWF0LXNwZWNpZmljIGludGVyZmFjZSB0byBhY2Nlc3MKKyAgICogICAgIHRoZW0uICBDYW4gYmUgTlVMTCAoZS5nLiwgaW4gZm9udHMgZW1iZWRkZWQgaW4gYSBQREYgZmlsZSkuCisgICAqCisgICAqICAgICBJbiBjYXNlIHRoZSBmb250IGRvZXNuJ3QgcHJvdmlkZSBhIHNwZWNpZmljCisgICAqICAgICBmYW1pbHkgbmFtZSBlbnRyeSwgRnJlZVR5cGUgdHJpZXMgdG8KKyAgICogICAgIHN5bnRoZXNpemUgb25lLCBkZXJpdmluZyBpdCBmcm9tIG90aGVyIG5hbWUKKyAgICogICAgIGVudHJpZXMuCisgICAqCisgICAqICAgc3R5bGVfbmFtZSA6OgorICAgKiAgICAgVGhlIGZhY2UncyBzdHlsZSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSBzdHJpbmcsIHVzdWFsbHkgaW4KKyAgICogICAgIEVuZ2xpc2gsIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlZmFjZSdzIHN0eWxlIChsaWtlIGBJdGFsaWMnLAorICAgKiAgICAgYEJvbGQnLCBgQ29uZGVuc2VkJywgZXRjKS4gIE5vdCBhbGwgZm9udCBmb3JtYXRzIHByb3ZpZGUgYSBzdHlsZQorICAgKiAgICAgbmFtZSwgc28gdGhpcyBmaWVsZCBpcyBvcHRpb25hbCwgYW5kIGNhbiBiZSBzZXQgdG8gTlVMTC4gIEFzIGZvcgorICAgKiAgICAgYGZhbWlseV9uYW1lJywgc29tZSBmb3JtYXRzIHByb3ZpZGUgbG9jYWxpemVkIGFuZCBVbmljb2RlIHZlcnNpb25zCisgICAqICAgICBvZiB0aGlzIHN0cmluZy4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBmb3JtYXQtc3BlY2lmaWMKKyAgICogICAgIGludGVyZmFjZSB0byBhY2Nlc3MgdGhlbS4KKyAgICoKKyAgICogICBudW1fZml4ZWRfc2l6ZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYml0bWFwIHN0cmlrZXMgaW4gdGhlIGZhY2UuCisgICAqICAgICBFdmVuIGlmIHRoZSBmYWNlIGlzIHNjYWxhYmxlLCB0aGVyZSBtaWdodAorICAgKiAgICAgc3RpbGwgYmUgYml0bWFwIHN0cmlrZXMsIHdoaWNoIGFyZSBjYWxsZWQKKyAgICogICAgIGBzYml0cycgaW4gdGhhdCBjYXNlLgorICAgKgorICAgKiAgIGF2YWlsYWJsZV9zaXplcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgQEZUX0JpdG1hcF9TaXplIGZvciBhbGwgYml0bWFwCisgICAqICAgICBzdHJpa2VzIGluIHRoZSBmYWNlLiAgSXQgaXMgc2V0IHRvIE5VTEwgaWYKKyAgICogICAgIHRoZXJlIGlzIG5vIGJpdG1hcCBzdHJpa2UuCisgICAqCisgICAqICAgICBOb3RlIHRoYXQgRnJlZVR5cGUgdHJpZXMgdG8gc2FuaXRpemUgdGhlCisgICAqICAgICBzdHJpa2UgZGF0YSBzaW5jZSB0aGV5IGFyZSBzb21ldGltZXMgc2xvcHB5CisgICAqICAgICBvciBpbmNvcnJlY3QsIGJ1dCB0aGlzIGNhbiBlYXNpbHkgZmFpbC4KKyAgICoKKyAgICogICBudW1fY2hhcm1hcHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgY2hhcm1hcHMgaW4gdGhlIGZhY2UuCisgICAqCisgICAqICAgY2hhcm1hcHMgOjoKKyAgICogICAgIEFuIGFycmF5IG9mIHRoZSBjaGFybWFwcyBvZiB0aGUgZmFjZS4KKyAgICoKKyAgICogICBnZW5lcmljIDo6CisgICAqICAgICBBIGZpZWxkIHJlc2VydmVkIGZvciBjbGllbnQgdXNlcy4gIFNlZSB0aGUKKyAgICogICAgIEBGVF9HZW5lcmljIHR5cGUgZGVzY3JpcHRpb24uCisgICAqCisgICAqICAgYmJveCA6OgorICAgKiAgICAgVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlCisgICAqICAgICBleHByZXNzZWQgaW4gZm9udCB1bml0cyAoc2VlCisgICAqICAgICBgdW5pdHNfcGVyX0VNJykuICBUaGUgYm94IGlzIGxhcmdlIGVub3VnaAorICAgKiAgICAgdG8gY29udGFpbiBhbnkgZ2x5cGggZnJvbSB0aGUgZm9udC4gIFRodXMsCisgICAqICAgICBgYmJveC55TWF4JyBjYW4gYmUgc2VlbiBhcyB0aGUgYG1heGltdW0KKyAgICogICAgIGFzY2VuZGVyJywgYW5kIGBiYm94LnlNaW4nIGFzIHRoZSBgbWluaW11bQorICAgKiAgICAgZGVzY2VuZGVyJy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlCisgICAqICAgICBmb3JtYXRzLgorICAgKgorICAgKiAgICAgTm90ZSB0aGF0IHRoZSBib3VuZGluZyBib3ggbWlnaHQgYmUgb2ZmIGJ5CisgICAqICAgICAoYXQgbGVhc3QpIG9uZSBwaXhlbCBmb3IgaGludGVkIGZvbnRzLiAgU2VlCisgICAqICAgICBARlRfU2l6ZV9NZXRyaWNzIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uCisgICAqCisgICAqICAgdW5pdHNfcGVyX0VNIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGZvbnQgdW5pdHMgcGVyIEVNIHNxdWFyZSBmb3IKKyAgICogICAgIHRoaXMgZmFjZS4gIFRoaXMgaXMgdHlwaWNhbGx5IDIwNDggZm9yCisgICAqICAgICBUcnVlVHlwZSBmb250cywgYW5kIDEwMDAgZm9yIFR5cGV+MSBmb250cy4KKyAgICogICAgIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuCisgICAqCisgICAqICAgYXNjZW5kZXIgOjoKKyAgICogICAgIFRoZSB0eXBvZ3JhcGhpYyBhc2NlbmRlciBvZiB0aGUgZmFjZSwKKyAgICogICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgRm9yIGZvbnQgZm9ybWF0cworICAgKiAgICAgbm90IGhhdmluZyB0aGlzIGluZm9ybWF0aW9uLCBpdCBpcyBzZXQgdG8KKyAgICogICAgIGBiYm94LnlNYXgnLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUKKyAgICogICAgIGZvcm1hdHMuCisgICAqCisgICAqICAgZGVzY2VuZGVyIDo6CisgICAqICAgICBUaGUgdHlwb2dyYXBoaWMgZGVzY2VuZGVyIG9mIHRoZSBmYWNlLAorICAgKiAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBGb3IgZm9udCBmb3JtYXRzCisgICAqICAgICBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0bworICAgKiAgICAgYGJib3gueU1pbicuICBOb3RlIHRoYXQgdGhpcyBmaWVsZCBpcworICAgKiAgICAgbmVnYXRpdmUgZm9yIHZhbHVlcyBiZWxvdyB0aGUgYmFzZWxpbmUuCisgICAqICAgICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhpcyB2YWx1ZSBpcyB0aGUgdmVydGljYWwgZGlzdGFuY2UKKyAgICogICAgIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGJhc2VsaW5lcywKKyAgICogICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgSXQgaXMgYWx3YXlzCisgICAqICAgICBwb3NpdGl2ZS4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlCisgICAqICAgICBmb3JtYXRzLgorICAgKgorICAgKiAgICAgSWYgeW91IHdhbnQgdGhlIGdsb2JhbCBnbHlwaCBoZWlnaHQsIHVzZQorICAgKiAgICAgYGFzY2VuZGVyIC0gZGVzY2VuZGVyJy4KKyAgICoKKyAgICogICBtYXhfYWR2YW5jZV93aWR0aCA6OgorICAgKiAgICAgVGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCwgaW4gZm9udCB1bml0cywKKyAgICogICAgIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gIFRoaXMgY2FuIGJlCisgICAqICAgICB1c2VkIHRvIG1ha2Ugd29yZCB3cmFwcGluZyBjb21wdXRhdGlvbnMKKyAgICogICAgIGZhc3Rlci4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlCisgICAqICAgICBmb3JtYXRzLgorICAgKgorICAgKiAgIG1heF9hZHZhbmNlX2hlaWdodCA6OgorICAgKiAgICAgVGhlIG1heGltdW0gYWR2YW5jZSBoZWlnaHQsIGluIGZvbnQgdW5pdHMsCisgICAqICAgICBmb3IgYWxsIGdseXBocyBpbiB0aGlzIGZhY2UuICBUaGlzIGlzIG9ubHkKKyAgICogICAgIHJlbGV2YW50IGZvciB2ZXJ0aWNhbCBsYXlvdXRzLCBhbmQgaXMgc2V0CisgICAqICAgICB0byBgaGVpZ2h0JyBmb3IgZm9udHMgdGhhdCBkbyBub3QgcHJvdmlkZQorICAgKiAgICAgdmVydGljYWwgbWV0cmljcy4gIE9ubHkgcmVsZXZhbnQgZm9yCisgICAqICAgICBzY2FsYWJsZSBmb3JtYXRzLgorICAgKgorICAgKiAgIHVuZGVybGluZV9wb3NpdGlvbiA6OgorICAgKiAgICAgVGhlIHBvc2l0aW9uLCBpbiBmb250IHVuaXRzLCBvZiB0aGUKKyAgICogICAgIHVuZGVybGluZSBsaW5lIGZvciB0aGlzIGZhY2UuICBJdCBpcyB0aGUKKyAgICogICAgIGNlbnRlciBvZiB0aGUgdW5kZXJsaW5pbmcgc3RlbS4gIE9ubHkKKyAgICogICAgIHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLgorICAgKgorICAgKiAgIHVuZGVybGluZV90aGlja25lc3MgOjoKKyAgICogICAgIFRoZSB0aGlja25lc3MsIGluIGZvbnQgdW5pdHMsIG9mIHRoZQorICAgKiAgICAgdW5kZXJsaW5lIGZvciB0aGlzIGZhY2UuICBPbmx5IHJlbGV2YW50IGZvcgorICAgKiAgICAgc2NhbGFibGUgZm9ybWF0cy4KKyAgICoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIGZhY2UncyBhc3NvY2lhdGVkIGdseXBoIHNsb3QocykuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgYWN0aXZlIHNpemUgZm9yIHRoaXMgZmFjZS4KKyAgICoKKyAgICogICBjaGFybWFwIDo6CisgICAqICAgICBUaGUgY3VycmVudCBhY3RpdmUgY2hhcm1hcCBmb3IgdGhpcyBmYWNlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBGaWVsZHMgbWF5IGJlIGNoYW5nZWQgYWZ0ZXIgYSBjYWxsIHRvIEBGVF9BdHRhY2hfRmlsZSBvcgorICAgKiAgIEBGVF9BdHRhY2hfU3RyZWFtLgorICAgKgorICAgKiAgIEZvciBhbiBPcGVuVHlwZSB2YXJpYXRpb24gZm9udCwgdGhlIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcworICAgKiAgIGNhbiBjaGFuZ2UgYWZ0ZXIgYSBjYWxsIHRvIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyAoYW5kCisgICAqICAgZnJpZW5kcykgaWYgdGhlIGZvbnQgY29udGFpbnMgYW4gYE1WQVInIHRhYmxlOiBgYXNjZW5kZXInLAorICAgKiAgIGBkZXNjZW5kZXInLCBgaGVpZ2h0JywgYHVuZGVybGluZV9wb3NpdGlvbicsIGFuZAorICAgKiAgIGB1bmRlcmxpbmVfdGhpY2tuZXNzJy4KKyAgICoKKyAgICogICBFc3BlY2lhbGx5IGZvciBUcnVlVHlwZSBmb250cyBzZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICogICBARlRfU2l6ZV9NZXRyaWNzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0ZhY2VSZWNfCiAgIHsKICAgICBGVF9Mb25nICAgICAgICAgICBudW1fZmFjZXM7CkBAIC0xMTI0LDExNyArMTE1MSwxMTcgQEAKICAgfSBGVF9GYWNlUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdCBmbGFncyB1c2VkIGluIHRoZSBgZmFjZV9mbGFncycgZmllbGQgb2YgdGhlICAgICAgICAgICovCi0gIC8qICAgIEBGVF9GYWNlUmVjIHN0cnVjdHVyZS4gIFRoZXkgaW5mb3JtIGNsaWVudCBhcHBsaWNhdGlvbnMgb2YgICAgICAgICAqLwotICAvKiAgICBwcm9wZXJ0aWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBjb250YWlucyBvdXRsaW5lIGdseXBocy4gIE5vdGUgdGhhdCBhIGZhY2UgY2FuIGNvbnRhaW4gICovCi0gIC8qICAgICAgYml0bWFwIHN0cmlrZXMgYWxzbywgaS5lLiwgYSBmYWNlIGNhbiBoYXZlIGJvdGggdGhpcyBmbGFnIGFuZCAgICAqLwotICAvKiAgICAgIEBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmYWNlIGNvbnRhaW5zIGJpdG1hcCBzdHJpa2VzLiAgU2VlIGFsc28gdGhlICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBgbnVtX2ZpeGVkX3NpemVzJyBhbmQgYGF2YWlsYWJsZV9zaXplcycgZmllbGRzIG9mIEBGVF9GYWNlUmVjLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBjb250YWlucyBmaXhlZC13aWR0aCBjaGFyYWN0ZXJzIChsaWtlIENvdXJpZXIsIEx1Y2lkYSwgICovCi0gIC8qICAgICAgTW9ub1R5cGUsIGV0Yy4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1NGTlQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGZhY2UgdXNlcyB0aGUgU0ZOVCBzdG9yYWdlIHNjaGVtZS4gIEZvciBub3csIHRoaXMgbWVhbnMgICAgICAqLwotICAvKiAgICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmYWNlIGNvbnRhaW5zIGhvcml6b250YWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgc2hvdWxkIGJlIHNldCAgKi8KLSAgLyogICAgICBmb3IgYWxsIGNvbW1vbiBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBjb250YWlucyB2ZXJ0aWNhbCBnbHlwaCBtZXRyaWNzLiAgVGhpcyBpcyBvbmx5ICAgICAgICAgICovCi0gIC8qICAgICAgYXZhaWxhYmxlIGluIHNvbWUgZm9ybWF0cywgbm90IGFsbCBvZiB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX0tFUk5JTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGZhY2UgY29udGFpbnMga2VybmluZyBpbmZvcm1hdGlvbi4gIElmIHNldCwgdGhlIGtlcm5pbmcgICAgICAqLwotICAvKiAgICAgIGRpc3RhbmNlIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIEBGVF9HZXRfS2VybmluZy4gICAgKi8KLSAgLyogICAgICBPdGhlcndpc2UgdGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gdGhlIHZlY3RvciAoMCwwKS4gIE5vdGUgICAgICovCi0gIC8qICAgICAgdGhhdCBGcmVlVHlwZSBkb2Vzbid0IGhhbmRsZSBrZXJuaW5nIGRhdGEgZnJvbSB0aGUgU0ZOVCBgR1BPUycgICAqLwotICAvKiAgICAgIHRhYmxlIChhcyBwcmVzZW50IGluIG1hbnkgT3BlblR5cGUgZm9udHMpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19GQVNUX0dMWVBIUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRISVMgRkxBRyBJUyBERVBSRUNBVEVELiAgRE8gTk9UIFVTRSBPUiBURVNUIElULiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmYWNlIGNvbnRhaW5zIG11bHRpcGxlIG1hc3RlcnMgYW5kIGlzIGNhcGFibGUgb2YgICAgICAgICAgICAgKi8KLSAgLyogICAgICBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdGhlbS4gIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSBBZG9iZSBNTSwgICAgICovCi0gIC8qICAgICAgVHJ1ZVR5cGUgR1gsIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBTZWUgdGhlIG11bHRpcGxlLW1hc3RlcnMgc3BlY2lmaWMgQVBJIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBjb250YWlucyBnbHlwaCBuYW1lcywgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB1c2luZyAgICAgICovCi0gIC8qICAgICAgQEZUX0dldF9HbHlwaF9OYW1lLiAgTm90ZSB0aGF0IHNvbWUgVHJ1ZVR5cGUgZm9udHMgY29udGFpbiAgICAgICAqLwotICAvKiAgICAgIGJyb2tlbiBnbHlwaCBuYW1lIHRhYmxlcy4gIFVzZSB0aGUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfSGFzX1BTX0dseXBoX05hbWVzIHdoZW4gbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBVc2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUgdG8gaW5kaWNhdGUgdGhhdCBhIGZhY2UncyBzdHJlYW0gd2FzICovCi0gIC8qICAgICAgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQgICAqLwotICAvKiAgICAgIHdoZW4gQEZUX0RvbmVfRmFjZSBpcyBjYWxsZWQuICBEb24ndCByZWFkIG9yIHRlc3QgdGhpcyBmbGFnLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19ISU5URVIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmb250IGRyaXZlciBoYXMgYSBoaW50aW5nIG1hY2hpbmUgb2YgaXRzIG93bi4gIEZvciBleGFtcGxlLCAgKi8KLSAgLyogICAgICB3aXRoIFRydWVUeXBlIGZvbnRzLCBpdCBtYWtlcyBzZW5zZSB0byB1c2UgZGF0YSBmcm9tIHRoZSBTRk5UICAgICovCi0gIC8qICAgICAgYGdhc3AnIHRhYmxlIG9ubHkgaWYgdGhlIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIGVuZ2luZSAod2l0aCAgICAqLwotICAvKiAgICAgIHRoZSBieXRlY29kZSBpbnRlcnByZXRlcikgaXMgYXZhaWxhYmxlIGFuZCBhY3RpdmUuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmYWNlIGlzIENJRC1rZXllZC4gIEluIHRoYXQgY2FzZSwgdGhlIGZhY2UgaXMgbm90IGFjY2Vzc2VkICAgKi8KLSAgLyogICAgICBieSBnbHlwaCBpbmRpY2VzIGJ1dCBieSBDSUQgdmFsdWVzLiAgRm9yIHN1YnNldHRlZCBDSUQta2V5ZWQgICAgICovCi0gIC8qICAgICAgZm9udHMgdGhpcyBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgbm90IGFsbCBpbmRleCB2YWx1ZXMgYXJlIGEgICAqLwotICAvKiAgICAgIHZhbGlkIGFyZ3VtZW50IHRvIEBGVF9Mb2FkX0dseXBoLiAgT25seSB0aGUgQ0lEIHZhbHVlcyBmb3Igd2hpY2ggKi8KLSAgLyogICAgICBjb3JyZXNwb25kaW5nIGdseXBocyBpbiB0aGUgc3Vic2V0dGVkIGZvbnQgZXhpc3QgbWFrZSAgICAgICAgICAgICovCi0gIC8qICAgICAgYEZUX0xvYWRfR2x5cGgnIHJldHVybiBzdWNjZXNzZnVsbHk7IGluIGFsbCBvdGhlciBjYXNlcyB5b3UgZ2V0ICAqLwotICAvKiAgICAgIGFuIGBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCcgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgTm90ZSB0aGF0IENJRC1rZXllZCBmb250cyB0aGF0IGFyZSBpbiBhbiBTRk5UIHdyYXBwZXIgKHRoaXMgaXMsICAqLwotICAvKiAgICAgIGFsbCBPcGVuVHlwZS9DRkYgZm9udHMpIGRvbid0IGhhdmUgdGhpcyBmbGFnIHNldCBzaW5jZSB0aGUgICAgICAgKi8KLSAgLyogICAgICBnbHlwaHMgYXJlIGFjY2Vzc2VkIGluIHRoZSBub3JtYWwgd2F5ICh1c2luZyBjb250aWd1b3VzICAgICAgICAgICovCi0gIC8qICAgICAgaW5kaWNlcyk7IHRoZSBgQ0lELW5lc3MnIGlzbid0IHZpc2libGUgdG8gdGhlIGFwcGxpY2F0aW9uLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRkFDRV9GTEFHX1RSSUNLWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGZhY2UgaXMgYHRyaWNreScsIHRoaXMgaXMsIGl0IGFsd2F5cyBuZWVkcyB0aGUgZm9udCBmb3JtYXQncyAqLwotICAvKiAgICAgIG5hdGl2ZSBoaW50aW5nIGVuZ2luZSB0byBnZXQgYSByZWFzb25hYmxlIHJlc3VsdC4gIEEgdHlwaWNhbCAgICAgKi8KLSAgLyogICAgICBleGFtcGxlIGlzIHRoZSBvbGQgQ2hpbmVzZSBmb250IGBtaW5nbGkudHRmJyAoYnV0IG5vdCAgICAgICAgICAgICovCi0gIC8qICAgICAgYG1pbmdsaXUudHRjJykgdGhhdCB1c2VzIFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0byBtb3ZlICAqLwotICAvKiAgICAgIGFuZCBzY2FsZSBhbGwgb2YgaXRzIHN1YmdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGF1dG8taGludCBzdWNoIGZvbnRzIHVzaW5nICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UOyBpdCB3aWxsIGFsc28gaWdub3JlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfTE9BRF9OT19ISU5USU5HLiAgWW91IGhhdmUgdG8gc2V0IGJvdGggQEZUX0xPQURfTk9fSElOVElORyAgICovCi0gIC8qICAgICAgYW5kIEBGVF9MT0FEX05PX0FVVE9ISU5UIHRvIHJlYWxseSBkaXNhYmxlIGhpbnRpbmc7IGhvd2V2ZXIsIHlvdSAqLwotICAvKiAgICAgIHByb2JhYmx5IG5ldmVyIHdhbnQgdGhpcyBleGNlcHQgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQ3VycmVudGx5LCB0aGVyZSBhcmUgYWJvdXQgYSBkb3plbiBUcnVlVHlwZSBmb250cyBpbiB0aGUgbGlzdCBvZiAqLwotICAvKiAgICAgIHRyaWNreSBmb250czsgdGhleSBhcmUgaGFyZC1jb2RlZCBpbiBmaWxlIGB0dG9ianMuYycuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19DT0xPUiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFtTaW5jZSAyLjUuMV0gVGhlIGZhY2UgaGFzIGNvbG9yIGdseXBoIHRhYmxlcy4gIFRvIGFjY2VzcyBjb2xvciAgKi8KLSAgLyogICAgICBnbHlwaHMgdXNlIEBGVF9MT0FEX0NPTE9SLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBbU2luY2UgMi45XSBTZXQgaWYgdGhlIGN1cnJlbnQgZmFjZSAob3IgbmFtZWQgaW5zdGFuY2UpIGhhcyBiZWVuICovCi0gIC8qICAgICAgYWx0ZXJlZCB3aXRoIEBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzLCAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcy4gIFRoaXMgZmxhZyBpcyB1bnNldCBieSBhIGNhbGwgdG8gICovCi0gIC8qICAgICAgQEZUX1NldF9OYW1lZF9JbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0ZBQ0VfRkxBR19YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgYGZhY2VfZmxhZ3MnIGZpZWxkIG9mIHRoZQorICAgKiAgIEBGVF9GYWNlUmVjIHN0cnVjdHVyZS4gIFRoZXkgaW5mb3JtIGNsaWVudCBhcHBsaWNhdGlvbnMgb2YKKyAgICogICBwcm9wZXJ0aWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZhY2UuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfRkFDRV9GTEFHX1NDQUxBQkxFIDo6CisgICAqICAgICBUaGUgZmFjZSBjb250YWlucyBvdXRsaW5lIGdseXBocy4gIE5vdGUgdGhhdCBhIGZhY2UgY2FuIGNvbnRhaW4KKyAgICogICAgIGJpdG1hcCBzdHJpa2VzIGFsc28sIGkuZS4sIGEgZmFjZSBjYW4gaGF2ZSBib3RoIHRoaXMgZmxhZyBhbmQKKyAgICogICAgIEBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgc2V0LgorICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyA6OgorICAgKiAgICAgVGhlIGZhY2UgY29udGFpbnMgYml0bWFwIHN0cmlrZXMuICBTZWUgYWxzbyB0aGUKKyAgICogICAgIGBudW1fZml4ZWRfc2l6ZXMnIGFuZCBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMuCisgICAqCisgICAqICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIIDo6CisgICAqICAgICBUaGUgZmFjZSBjb250YWlucyBmaXhlZC13aWR0aCBjaGFyYWN0ZXJzIChsaWtlIENvdXJpZXIsIEx1Y2lkYSwKKyAgICogICAgIE1vbm9UeXBlLCBldGMuKS4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfU0ZOVCA6OgorICAgKiAgICAgVGhlIGZhY2UgdXNlcyB0aGUgU0ZOVCBzdG9yYWdlIHNjaGVtZS4gIEZvciBub3csIHRoaXMgbWVhbnMKKyAgICogICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZS4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCA6OgorICAgKiAgICAgVGhlIGZhY2UgY29udGFpbnMgaG9yaXpvbnRhbCBnbHlwaCBtZXRyaWNzLiAgVGhpcyBzaG91bGQgYmUgc2V0CisgICAqICAgICBmb3IgYWxsIGNvbW1vbiBmb3JtYXRzLgorICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCA6OgorICAgKiAgICAgVGhlIGZhY2UgY29udGFpbnMgdmVydGljYWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgaXMgb25seQorICAgKiAgICAgYXZhaWxhYmxlIGluIHNvbWUgZm9ybWF0cywgbm90IGFsbCBvZiB0aGVtLgorICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19LRVJOSU5HIDo6CisgICAqICAgICBUaGUgZmFjZSBjb250YWlucyBrZXJuaW5nIGluZm9ybWF0aW9uLiAgSWYgc2V0LCB0aGUga2VybmluZworICAgKiAgICAgZGlzdGFuY2UgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUgZnVuY3Rpb24gQEZUX0dldF9LZXJuaW5nLgorICAgKiAgICAgT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIHRoZSB2ZWN0b3IgKDAsMCkuICBOb3RlCisgICAqICAgICB0aGF0IEZyZWVUeXBlIGRvZXNuJ3QgaGFuZGxlIGtlcm5pbmcgZGF0YSBmcm9tIHRoZSBTRk5UIGBHUE9TJworICAgKiAgICAgdGFibGUgKGFzIHByZXNlbnQgaW4gbWFueSBPcGVuVHlwZSBmb250cykuCisgICAqCisgICAqICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTIDo6CisgICAqICAgICBUSElTIEZMQUcgSVMgREVQUkVDQVRFRC4gIERPIE5PVCBVU0UgT1IgVEVTVCBJVC4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUyA6OgorICAgKiAgICAgVGhlIGZhY2UgY29udGFpbnMgbXVsdGlwbGUgbWFzdGVycyBhbmQgaXMgY2FwYWJsZSBvZgorICAgKiAgICAgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZW0uICBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgQWRvYmUgTU0sCisgICAqICAgICBUcnVlVHlwZSBHWCwgYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cy4KKyAgICoKKyAgICogICAgIFNlZSBzZWN0aW9uIEBtdWx0aXBsZV9tYXN0ZXJzIGZvciBBUEkgZGV0YWlscy4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgOjoKKyAgICogICAgIFRoZSBmYWNlIGNvbnRhaW5zIGdseXBoIG5hbWVzLCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCisgICAqICAgICBARlRfR2V0X0dseXBoX05hbWUuICBOb3RlIHRoYXQgc29tZSBUcnVlVHlwZSBmb250cyBjb250YWluCisgICAqICAgICBicm9rZW4gZ2x5cGggbmFtZSB0YWJsZXMuICBVc2UgdGhlIGZ1bmN0aW9uCisgICAqICAgICBARlRfSGFzX1BTX0dseXBoX05hbWVzIHdoZW4gbmVlZGVkLgorICAgKgorICAgKiAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gOjoKKyAgICogICAgIFVzZWQgaW50ZXJuYWxseSBieSBGcmVlVHlwZSB0byBpbmRpY2F0ZSB0aGF0IGEgZmFjZSdzIHN0cmVhbSB3YXMKKyAgICogICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gYW5kIHNob3VsZCBub3QgYmUgZGVzdHJveWVkCisgICAqICAgICB3aGVuIEBGVF9Eb25lX0ZhY2UgaXMgY2FsbGVkLiAgRG9uJ3QgcmVhZCBvciB0ZXN0IHRoaXMgZmxhZy4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfSElOVEVSIDo6CisgICAqICAgICBUaGUgZm9udCBkcml2ZXIgaGFzIGEgaGludGluZyBtYWNoaW5lIG9mIGl0cyBvd24uICBGb3IgZXhhbXBsZSwKKyAgICogICAgIHdpdGggVHJ1ZVR5cGUgZm9udHMsIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBkYXRhIGZyb20gdGhlIFNGTlQKKyAgICogICAgIGBnYXNwJyB0YWJsZSBvbmx5IGlmIHRoZSBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBlbmdpbmUgKHdpdGgKKyAgICogICAgIHRoZSBieXRlY29kZSBpbnRlcnByZXRlcikgaXMgYXZhaWxhYmxlIGFuZCBhY3RpdmUuCisgICAqCisgICAqICAgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCA6OgorICAgKiAgICAgVGhlIGZhY2UgaXMgQ0lELWtleWVkLiAgSW4gdGhhdCBjYXNlLCB0aGUgZmFjZSBpcyBub3QgYWNjZXNzZWQKKyAgICogICAgIGJ5IGdseXBoIGluZGljZXMgYnV0IGJ5IENJRCB2YWx1ZXMuICBGb3Igc3Vic2V0dGVkIENJRC1rZXllZAorICAgKiAgICAgZm9udHMgdGhpcyBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgbm90IGFsbCBpbmRleCB2YWx1ZXMgYXJlIGEKKyAgICogICAgIHZhbGlkIGFyZ3VtZW50IHRvIEBGVF9Mb2FkX0dseXBoLiAgT25seSB0aGUgQ0lEIHZhbHVlcyBmb3Igd2hpY2gKKyAgICogICAgIGNvcnJlc3BvbmRpbmcgZ2x5cGhzIGluIHRoZSBzdWJzZXR0ZWQgZm9udCBleGlzdCBtYWtlCisgICAqICAgICBgRlRfTG9hZF9HbHlwaCcgcmV0dXJuIHN1Y2Nlc3NmdWxseTsgaW4gYWxsIG90aGVyIGNhc2VzIHlvdSBnZXQKKyAgICogICAgIGFuIGBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCcgZXJyb3IuCisgICAqCisgICAqICAgICBOb3RlIHRoYXQgQ0lELWtleWVkIGZvbnRzIHRoYXQgYXJlIGluIGFuIFNGTlQgd3JhcHBlciAodGhpcyBpcywKKyAgICogICAgIGFsbCBPcGVuVHlwZS9DRkYgZm9udHMpIGRvbid0IGhhdmUgdGhpcyBmbGFnIHNldCBzaW5jZSB0aGUKKyAgICogICAgIGdseXBocyBhcmUgYWNjZXNzZWQgaW4gdGhlIG5vcm1hbCB3YXkgKHVzaW5nIGNvbnRpZ3VvdXMKKyAgICogICAgIGluZGljZXMpOyB0aGUgYENJRC1uZXNzJyBpc24ndCB2aXNpYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfVFJJQ0tZIDo6CisgICAqICAgICBUaGUgZmFjZSBpcyBgdHJpY2t5JywgdGhpcyBpcywgaXQgYWx3YXlzIG5lZWRzIHRoZSBmb250IGZvcm1hdCdzCisgICAqICAgICBuYXRpdmUgaGludGluZyBlbmdpbmUgdG8gZ2V0IGEgcmVhc29uYWJsZSByZXN1bHQuICBBIHR5cGljYWwKKyAgICogICAgIGV4YW1wbGUgaXMgdGhlIG9sZCBDaGluZXNlIGZvbnQgYG1pbmdsaS50dGYnIChidXQgbm90CisgICAqICAgICBgbWluZ2xpdS50dGMnKSB0aGF0IHVzZXMgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIHRvIG1vdmUKKyAgICogICAgIGFuZCBzY2FsZSBhbGwgb2YgaXRzIHN1YmdseXBocy4KKyAgICoKKyAgICogICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWhpbnQgc3VjaCBmb250cyB1c2luZworICAgKiAgICAgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ7IGl0IHdpbGwgYWxzbyBpZ25vcmUKKyAgICogICAgIEBGVF9MT0FEX05PX0hJTlRJTkcuICBZb3UgaGF2ZSB0byBzZXQgYm90aCBARlRfTE9BRF9OT19ISU5USU5HCisgICAqICAgICBhbmQgQEZUX0xPQURfTk9fQVVUT0hJTlQgdG8gcmVhbGx5IGRpc2FibGUgaGludGluZzsgaG93ZXZlciwgeW91CisgICAqICAgICBwcm9iYWJseSBuZXZlciB3YW50IHRoaXMgZXhjZXB0IGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzLgorICAgKgorICAgKiAgICAgQ3VycmVudGx5LCB0aGVyZSBhcmUgYWJvdXQgYSBkb3plbiBUcnVlVHlwZSBmb250cyBpbiB0aGUgbGlzdCBvZgorICAgKiAgICAgdHJpY2t5IGZvbnRzOyB0aGV5IGFyZSBoYXJkLWNvZGVkIGluIGZpbGUgYHR0b2Jqcy5jJy4KKyAgICoKKyAgICogICBGVF9GQUNFX0ZMQUdfQ09MT1IgOjoKKyAgICogICAgIFtTaW5jZSAyLjUuMV0gVGhlIGZhY2UgaGFzIGNvbG9yIGdseXBoIHRhYmxlcy4gIFNlZQorICAgKiAgICAgQEZUX0xPQURfQ09MT1IgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAqCisgICAqICAgRlRfRkFDRV9GTEFHX1ZBUklBVElPTiA6OgorICAgKiAgICAgW1NpbmNlIDIuOV0gU2V0IGlmIHRoZSBjdXJyZW50IGZhY2UgKG9yIG5hbWVkIGluc3RhbmNlKSBoYXMgYmVlbgorICAgKiAgICAgYWx0ZXJlZCB3aXRoIEBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzLAorICAgKiAgICAgQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLCBvcgorICAgKiAgICAgQEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMuICBUaGlzIGZsYWcgaXMgdW5zZXQgYnkgYSBjYWxsIHRvCisgICAqICAgICBARlRfU2V0X05hbWVkX0luc3RhbmNlLgorICAgKi8KICNkZWZpbmUgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICAgICAgICAgICggMUwgPDwgIDAgKQogI2RlZmluZSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgICAgICAgKCAxTCA8PCAgMSApCiAjZGVmaW5lIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCAgICAgICAoIDFMIDw8ICAyICkKQEAgLTEyNTYsNyArMTI4Myw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBtYWNybzoKLSAgICogICBGVF9IQVNfSE9SSVpPTlRBTCggZmFjZSApCisgICAqICAgRlRfSEFTX0hPUklaT05UQUwKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucwpAQCAtMTI3Myw3ICsxMzAwLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX0hBU19WRVJUSUNBTCggZmFjZSApCisgICAqICAgRlRfSEFTX1ZFUlRJQ0FMCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgcmVhbApAQCAtMTI4Nyw3ICsxMzE0LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX0hBU19LRVJOSU5HKCBmYWNlICkKKyAgICogICBGVF9IQVNfS0VSTklORwogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGtlcm5pbmcKQEAgLTEzMDEsNyArMTMyOCw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBtYWNybzoKLSAgICogICBGVF9JU19TQ0FMQUJMRSggZmFjZSApCisgICAqICAgRlRfSVNfU0NBTEFCTEUKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBhIHNjYWxhYmxlCkBAIC0xMzE2LDcgKzEzNDMsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSVNfU0ZOVCggZmFjZSApCisgICAqICAgRlRfSVNfU0ZOVAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgZm9udApAQCAtMTMzNSw3ICsxMzYyLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX0lTX0ZJWEVEX1dJRFRIKCBmYWNlICkKKyAgICogICBGVF9JU19GSVhFRF9XSURUSAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgZm9udCBmYWNlCkBAIC0xMzUwLDcgKzEzNzcsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkKKyAgICogICBGVF9IQVNfRklYRURfU0laRVMKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lCkBAIC0xMzY1LDcgKzEzOTIsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSEFTX0ZBU1RfR0xZUEhTKCBmYWNlICkKKyAgICogICBGVF9IQVNfRkFTVF9HTFlQSFMKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIERlcHJlY2F0ZWQuCkBAIC0xMzc3LDcgKzE0MDQsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSEFTX0dMWVBIX05BTUVTKCBmYWNlICkKKyAgICogICBGVF9IQVNfR0xZUEhfTkFNRVMKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lIGdseXBoCkBAIC0xMzkxLDcgKzE0MTgsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIGZhY2UgKQorICAgKiAgIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgc29tZQpAQCAtMTQwNiw3ICsxNDMzLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBmYWNlICkKKyAgICogICBGVF9JU19OQU1FRF9JTlNUQU5DRQogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGlzIGEgbmFtZWQgaW5zdGFuY2UKQEAgLTE0MjgsNyArMTQ1NSw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBtYWNybzoKLSAgICogICBGVF9JU19WQVJJQVRJT04oIGZhY2UgKQorICAgKiAgIEZUX0lTX1ZBUklBVElPTgogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGhhcyBiZWVuIGFsdGVyZWQKQEAgLTE0NDYsNyArMTQ3Myw3IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBtYWNybzoKLSAgICogICBGVF9JU19DSURfS0VZRUQoIGZhY2UgKQorICAgKiAgIEZUX0lTX0NJRF9LRVlFRAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgQ0lELWtleWVkCkBAIC0xNDY0LDcgKzE0OTEsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfSVNfVFJJQ0tZKCBmYWNlICkKKyAgICogICBGVF9JU19UUklDS1kKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIHJlcHJlc2VudHMgYSBgdHJpY2t5JyBmb250LgpAQCAtMTQ3OCw3ICsxNTA1LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX0hBU19DT0xPUiggZmFjZSApCisgICAqICAgRlRfSEFTX0NPTE9SCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMKQEAgLTE0OTIsMTQ5ICsxNTE5LDE1NyBAQAogICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NPTE9SICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPENvbnN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NUWUxFX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIG9mIGEgZ2l2ZW4gZmFjZS4gIFRoZXNlICAqLwotICAvKiAgICBhcmUgdXNlZCBpbiB0aGUgYHN0eWxlX2ZsYWdzJyBmaWVsZCBvZiBARlRfRmFjZVJlYy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TVFlMRV9GTEFHX0lUQUxJQyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBzdHlsZSBpcyBpdGFsaWMgb3Igb2JsaXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TVFlMRV9GTEFHX0JPTEQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZmFjZSBpcyBib2xkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN0eWxlIGluZm9ybWF0aW9uIGFzIHByb3ZpZGVkIGJ5IEZyZWVUeXBlIGlzIHZlcnkgYmFzaWMuICBNb3JlICovCi0gIC8qICAgIGRldGFpbHMgYXJlIGJleW9uZCB0aGUgc2NvcGUgYW5kIHNob3VsZCBiZSBkb25lIG9uIGEgaGlnaGVyIGxldmVsICAqLwotICAvKiAgICAoZm9yIGV4YW1wbGUsIGJ5IGFuYWx5emluZyB2YXJpb3VzIGZpZWxkcyBvZiB0aGUgYE9TLzInIHRhYmxlIGluICAgKi8KLSAgLyogICAgU0ZOVCBiYXNlZCBmb250cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfU1RZTEVfRkxBR19YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIG9mIGEgZ2l2ZW4gZmFjZS4gIFRoZXNlCisgICAqICAgYXJlIHVzZWQgaW4gdGhlIGBzdHlsZV9mbGFncycgZmllbGQgb2YgQEZUX0ZhY2VSZWMuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfU1RZTEVfRkxBR19JVEFMSUMgOjoKKyAgICogICAgIFRoZSBmYWNlIHN0eWxlIGlzIGl0YWxpYyBvciBvYmxpcXVlLgorICAgKgorICAgKiAgIEZUX1NUWUxFX0ZMQUdfQk9MRCA6OgorICAgKiAgICAgVGhlIGZhY2UgaXMgYm9sZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHN0eWxlIGluZm9ybWF0aW9uIGFzIHByb3ZpZGVkIGJ5IEZyZWVUeXBlIGlzIHZlcnkgYmFzaWMuICBNb3JlCisgICAqICAgZGV0YWlscyBhcmUgYmV5b25kIHRoZSBzY29wZSBhbmQgc2hvdWxkIGJlIGRvbmUgb24gYSBoaWdoZXIgbGV2ZWwKKyAgICogICAoZm9yIGV4YW1wbGUsIGJ5IGFuYWx5emluZyB2YXJpb3VzIGZpZWxkcyBvZiB0aGUgYE9TLzInIHRhYmxlIGluCisgICAqICAgU0ZOVCBiYXNlZCBmb250cykuCisgICAqLwogI2RlZmluZSBGVF9TVFlMRV9GTEFHX0lUQUxJQyAgKCAxIDw8IDAgKQogI2RlZmluZSBGVF9TVFlMRV9GTEFHX0JPTEQgICAgKCAxIDw8IDEgKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2l6ZV9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBgRlRfU2l6ZV9JbnRlcm5hbFJlYycgc3RydWN0dXJlLCB1c2VkIHRvICAgICovCi0gIC8qICAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9TaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX1NpemVfSW50ZXJuYWwKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gYEZUX1NpemVfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZSwgdXNlZCB0bworICAgKiAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9TaXplIG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX1NpemVfSW50ZXJuYWxSZWNfKiAgRlRfU2l6ZV9JbnRlcm5hbDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NpemVfTWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBzaXplIG1ldHJpY3Mgc3RydWN0dXJlIGdpdmVzIHRoZSBtZXRyaWNzIG9mIGEgc2l6ZSBvYmplY3QuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHhfcHBlbSAgICAgICA6OiBUaGUgd2lkdGggb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCBoZW5jZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm0gYHBwZW0nIChwaXhlbHMgcGVyIEVNKS4gIEl0IGlzIGFsc28gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIGBub21pbmFsIHdpZHRoJy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5X3BwZW0gICAgICAgOjogVGhlIGhlaWdodCBvZiB0aGUgc2NhbGVkIEVNIHNxdWFyZSBpbiBwaXhlbHMsICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGhlbmNlIHRoZSB0ZXJtIGBwcGVtJyAocGl4ZWxzIHBlciBFTSkuICBJdCBpcyBhbHNvICovCi0gIC8qICAgICAgICAgICAgICAgICAgICByZWZlcnJlZCB0byBhcyBgbm9taW5hbCBoZWlnaHQnLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeF9zY2FsZSAgICAgIDo6IEEgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlIHRvIGNvbnZlcnQgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25hbCBwaXhlbHMuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGZvbnQgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5X3NjYWxlICAgICAgOjogQSAxNi4xNiBmcmFjdGlvbmFsIHNjYWxpbmcgdmFsdWUgdG8gY29udmVydCAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFzY2VuZGVyICAgICA6OiBUaGUgYXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscywgcm91bmRlZCB1cCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdG8gYW4gaW50ZWdlciB2YWx1ZS4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZXNjZW5kZXIgICAgOjogVGhlIGRlc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLCByb3VuZGVkICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGRvd24gdG8gYW4gaW50ZWdlciB2YWx1ZS4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGVpZ2h0ICAgICAgIDo6IFRoZSBoZWlnaHQgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscywgcm91bmRlZCB0byAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBhbiBpbnRlZ2VyIHZhbHVlLiAgU2VlIEBGVF9GYWNlUmVjIGZvciB0aGUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9hZHZhbmNlICA6OiBUaGUgbWF4aW11bSBhZHZhbmNlIHdpZHRoIGluIDI2LjYgZnJhY3Rpb25hbCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLCByb3VuZGVkIHRvIGFuIGludGVnZXIgdmFsdWUuICBTZWUgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHNjYWxpbmcgdmFsdWVzLCBpZiByZWxldmFudCwgYXJlIGRldGVybWluZWQgZmlyc3QgZHVyaW5nIGEgICAgICovCi0gIC8qICAgIHNpemUgY2hhbmdpbmcgb3BlcmF0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZW4gc2V0IGJ5IHRoZSAqLwotICAvKiAgICBkcml2ZXIuICBGb3Igc2NhbGFibGUgZm9ybWF0cywgdGhleSBhcmUgdXN1YWxseSBzZXQgdG8gc2NhbGVkICAgICAgKi8KLSAgLyogICAgdmFsdWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBpbiBARlRfRmFjZVJlYy4gIFNvbWUgdmFsdWVzICAgICovCi0gIC8qICAgIGxpa2UgYXNjZW5kZXIgb3IgZGVzY2VuZGVyIGFyZSByb3VuZGVkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnM7ICAgICAqLwotICAvKiAgICBtb3JlIHByZWNpc2UgdmFsdWVzIChmb3Igb3V0bGluZSBmb250cykgY2FuIGJlIGRlcml2ZWQgYnkgc2NhbGluZyAgKi8KLSAgLyogICAgdGhlIGNvcnJlc3BvbmRpbmcgQEZUX0ZhY2VSZWMgdmFsdWVzIG1hbnVhbGx5LCB3aXRoIGNvZGUgc2ltaWxhciAgICovCi0gIC8qICAgIHRvIHRoZSBmb2xsb3dpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgc2NhbGVkX2FzY2VuZGVyID0gRlRfTXVsRml4KCBmYWNlLT5hc2NlbmRlciwgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9tZXRyaWNzLT55X3NjYWxlICk7ICAgICAgICAgICAgKi8KLSAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgZHVlIHRvIGdseXBoIGhpbnRpbmcgYW5kIHRoZSBzZWxlY3RlZCByZW5kZXJpbmcgbW9kZSAgICAgKi8KLSAgLyogICAgdGhlc2UgdmFsdWVzIGFyZSB1c3VhbGx5IG5vdCBleGFjdDsgY29uc2VxdWVudGx5LCB0aGV5IG11c3QgYmUgICAgICovCi0gIC8qICAgIHRyZWF0ZWQgYXMgdW5yZWxpYWJsZSB3aXRoIGFuIGVycm9yIG1hcmdpbiBvZiBhdCBsZWFzdCBvbmUgcGl4ZWwhICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5kZWVkLCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBleGFjdCBtZXRyaWNzIGlzIHRvIHJlbmRlciBfYWxsXyAgICovCi0gIC8qICAgIGdseXBocy4gIEFzIHRoaXMgd291bGQgYmUgYSBkZWZpbml0ZSBwZXJmb3JtYW5jZSBoaXQsIGl0IGlzIHVwIHRvICAqLwotICAvKiAgICBjbGllbnQgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gc3VjaCBjb21wdXRhdGlvbnMuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBgRlRfU2l6ZV9NZXRyaWNzJyBzdHJ1Y3R1cmUgaXMgdmFsaWQgZm9yIGJpdG1hcCBmb250cyBhbHNvLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICpUcnVlVHlwZSogKmZvbnRzKiAqd2l0aCogKm5hdGl2ZSogKmJ5dGVjb2RlKiAqaGludGluZyogICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWxsIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZSBUcnVlVHlwZSBmb250cyB3aXRoIG5hdGl2ZSBoaW50aW5nICAgICovCi0gIC8qICAgIG11c3QgYmUgYXdhcmUgdGhhdCBUVEZzIGV4cGVjdCBkaWZmZXJlbnQgcm91bmRpbmcgb2YgdmVydGljYWwgZm9udCAqLwotICAvKiAgICBkaW1lbnNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIGhhcyB0byBjYXRlciBmb3IgdGhpcywgZXNwZWNpYWxseSBpZiAgKi8KLSAgLyogICAgaXQgd2FudHMgdG8gcmVseSBvbiBhIFRURidzIHZlcnRpY2FsIGRhdGEgKGZvciBleGFtcGxlLCB0byAgICAgICAgICovCi0gIC8qICAgIHByb3Blcmx5IGFsaWduIGJveCBjaGFyYWN0ZXJzIHZlcnRpY2FsbHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT25seSB0aGUgYXBwbGljYXRpb24ga25vd3MgX2luXyBfYWR2YW5jZV8gdGhhdCBpdCBpcyBnb2luZyB0byB1c2UgICovCi0gIC8qICAgIG5hdGl2ZSBoaW50aW5nIGZvciBUVEZzISAgRnJlZVR5cGUsIG9uIHRoZSBvdGhlciBoYW5kLCBzZWxlY3RzIHRoZSAqLwotICAvKiAgICBoaW50aW5nIG1vZGUgbm90IGF0IHRoZSB0aW1lIG9mIGNyZWF0aW5nIGFuIEBGVF9TaXplIG9iamVjdCBidXQgICAgKi8KLSAgLyogICAgbXVjaCBsYXRlciwgbmFtZWx5IHdoaWxlIGNhbGxpbmcgQEZUX0xvYWRfR2x5cGguICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIZXJlIGlzIHNvbWUgcHNldWRvIGNvZGUgdGhhdCBpbGx1c3RyYXRlcyBhIHBvc3NpYmxlIHNvbHV0aW9uLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGZvbnRfZm9ybWF0ID0gRlRfR2V0X0ZvbnRfRm9ybWF0KCBmYWNlICk7ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaWYgKCAhc3RyY21wKCBmb250X2Zvcm1hdCwgIlRydWVUeXBlIiApICYmICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgZG9fbmF0aXZlX2J5dGVjb2RlX2hpbnRpbmcgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBhc2NlbmRlciAgPSBST1VORCggRlRfTXVsRml4KCBmYWNlLT5hc2NlbmRlciwgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9tZXRyaWNzLT55X3NjYWxlICkgKTsgICAgICAgKi8KLSAgLyogICAgICAgIGRlc2NlbmRlciA9IFJPVU5EKCBGVF9NdWxGaXgoIGZhY2UtPmRlc2NlbmRlciwgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOyAgICAgICAqLwotICAvKiAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgYXNjZW5kZXIgID0gc2l6ZV9tZXRyaWNzLT5hc2NlbmRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIGRlc2NlbmRlciA9IHNpemVfbWV0cmljcy0+ZGVzY2VuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBoZWlnaHQgICAgICA9IHNpemVfbWV0cmljcy0+aGVpZ2h0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgbWF4X2FkdmFuY2UgPSBzaXplX21ldHJpY3MtPm1heF9hZHZhbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1NpemVfTWV0cmljcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIHNpemUgbWV0cmljcyBzdHJ1Y3R1cmUgZ2l2ZXMgdGhlIG1ldHJpY3Mgb2YgYSBzaXplIG9iamVjdC4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB4X3BwZW0gOjoKKyAgICogICAgIFRoZSB3aWR0aCBvZiB0aGUgc2NhbGVkIEVNIHNxdWFyZSBpbiBwaXhlbHMsIGhlbmNlCisgICAqICAgICB0aGUgdGVybSBgcHBlbScgKHBpeGVscyBwZXIgRU0pLiAgSXQgaXMgYWxzbworICAgKiAgICAgcmVmZXJyZWQgdG8gYXMgYG5vbWluYWwgd2lkdGgnLgorICAgKgorICAgKiAgIHlfcHBlbSA6OgorICAgKiAgICAgVGhlIGhlaWdodCBvZiB0aGUgc2NhbGVkIEVNIHNxdWFyZSBpbiBwaXhlbHMsCisgICAqICAgICBoZW5jZSB0aGUgdGVybSBgcHBlbScgKHBpeGVscyBwZXIgRU0pLiAgSXQgaXMgYWxzbworICAgKiAgICAgcmVmZXJyZWQgdG8gYXMgYG5vbWluYWwgaGVpZ2h0Jy4KKyAgICoKKyAgICogICB4X3NjYWxlIDo6CisgICAqICAgICBBIDE2LjE2IGZyYWN0aW9uYWwgc2NhbGluZyB2YWx1ZSB0byBjb252ZXJ0CisgICAqICAgICBob3Jpem9udGFsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYKKyAgICogICAgIGZyYWN0aW9uYWwgcGl4ZWxzLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUKKyAgICogICAgIGZvbnQgZm9ybWF0cy4KKyAgICoKKyAgICogICB5X3NjYWxlIDo6CisgICAqICAgICBBIDE2LjE2IGZyYWN0aW9uYWwgc2NhbGluZyB2YWx1ZSB0byBjb252ZXJ0CisgICAqICAgICB2ZXJ0aWNhbCBtZXRyaWNzIGZyb20gZm9udCB1bml0cyB0byAyNi42CisgICAqICAgICBmcmFjdGlvbmFsIHBpeGVscy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlCisgICAqICAgICBmb250IGZvcm1hdHMuCisgICAqCisgICAqICAgYXNjZW5kZXIgOjoKKyAgICogICAgIFRoZSBhc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLCByb3VuZGVkIHVwCisgICAqICAgICB0byBhbiBpbnRlZ2VyIHZhbHVlLiAgU2VlIEBGVF9GYWNlUmVjIGZvciB0aGUKKyAgICogICAgIGRldGFpbHMuCisgICAqCisgICAqICAgZGVzY2VuZGVyIDo6CisgICAqICAgICBUaGUgZGVzY2VuZGVyIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMsIHJvdW5kZWQKKyAgICogICAgIGRvd24gdG8gYW4gaW50ZWdlciB2YWx1ZS4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlCisgICAqICAgICBkZXRhaWxzLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGhlaWdodCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLCByb3VuZGVkIHRvCisgICAqICAgICBhbiBpbnRlZ2VyIHZhbHVlLiAgU2VlIEBGVF9GYWNlUmVjIGZvciB0aGUKKyAgICogICAgIGRldGFpbHMuCisgICAqCisgICAqICAgbWF4X2FkdmFuY2UgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggaW4gMjYuNiBmcmFjdGlvbmFsCisgICAqICAgICBwaXhlbHMsIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB2YWx1ZS4gIFNlZQorICAgKiAgICAgQEZUX0ZhY2VSZWMgZm9yIHRoZSBkZXRhaWxzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgc2NhbGluZyB2YWx1ZXMsIGlmIHJlbGV2YW50LCBhcmUgZGV0ZXJtaW5lZCBmaXJzdCBkdXJpbmcgYQorICAgKiAgIHNpemUgY2hhbmdpbmcgb3BlcmF0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZW4gc2V0IGJ5IHRoZQorICAgKiAgIGRyaXZlci4gIEZvciBzY2FsYWJsZSBmb3JtYXRzLCB0aGV5IGFyZSB1c3VhbGx5IHNldCB0byBzY2FsZWQKKyAgICogICB2YWx1ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIGluIEBGVF9GYWNlUmVjLiAgU29tZSB2YWx1ZXMKKyAgICogICBsaWtlIGFzY2VuZGVyIG9yIGRlc2NlbmRlciBhcmUgcm91bmRlZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zOworICAgKiAgIG1vcmUgcHJlY2lzZSB2YWx1ZXMgKGZvciBvdXRsaW5lIGZvbnRzKSBjYW4gYmUgZGVyaXZlZCBieSBzY2FsaW5nCisgICAqICAgdGhlIGNvcnJlc3BvbmRpbmcgQEZUX0ZhY2VSZWMgdmFsdWVzIG1hbnVhbGx5LCB3aXRoIGNvZGUgc2ltaWxhcgorICAgKiAgIHRvIHRoZSBmb2xsb3dpbmcuCisgICAqCisgICAqICAgeworICAgKiAgICAgc2NhbGVkX2FzY2VuZGVyID0gRlRfTXVsRml4KCBmYWNlLT5hc2NlbmRlciwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9tZXRyaWNzLT55X3NjYWxlICk7CisgICAqICAgfQorICAgKgorICAgKiAgIE5vdGUgdGhhdCBkdWUgdG8gZ2x5cGggaGludGluZyBhbmQgdGhlIHNlbGVjdGVkIHJlbmRlcmluZyBtb2RlCisgICAqICAgdGhlc2UgdmFsdWVzIGFyZSB1c3VhbGx5IG5vdCBleGFjdDsgY29uc2VxdWVudGx5LCB0aGV5IG11c3QgYmUKKyAgICogICB0cmVhdGVkIGFzIHVucmVsaWFibGUgd2l0aCBhbiBlcnJvciBtYXJnaW4gb2YgYXQgbGVhc3Qgb25lIHBpeGVsIQorICAgKgorICAgKiAgIEluZGVlZCwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgZXhhY3QgbWV0cmljcyBpcyB0byByZW5kZXIgX2FsbF8KKyAgICogICBnbHlwaHMuICBBcyB0aGlzIHdvdWxkIGJlIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2UgaGl0LCBpdCBpcyB1cCB0bworICAgKiAgIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcGVyZm9ybSBzdWNoIGNvbXB1dGF0aW9ucy4KKyAgICoKKyAgICogICBUaGUgYEZUX1NpemVfTWV0cmljcycgc3RydWN0dXJlIGlzIHZhbGlkIGZvciBiaXRtYXAgZm9udHMgYWxzby4KKyAgICoKKyAgICoKKyAgICogICAqVHJ1ZVR5cGUqICpmb250cyogKndpdGgqICpuYXRpdmUqICpieXRlY29kZSogKmhpbnRpbmcqCisgICAqCisgICAqICAgQWxsIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZSBUcnVlVHlwZSBmb250cyB3aXRoIG5hdGl2ZSBoaW50aW5nCisgICAqICAgbXVzdCBiZSBhd2FyZSB0aGF0IFRURnMgZXhwZWN0IGRpZmZlcmVudCByb3VuZGluZyBvZiB2ZXJ0aWNhbCBmb250CisgICAqICAgZGltZW5zaW9ucy4gIFRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gY2F0ZXIgZm9yIHRoaXMsIGVzcGVjaWFsbHkgaWYKKyAgICogICBpdCB3YW50cyB0byByZWx5IG9uIGEgVFRGJ3MgdmVydGljYWwgZGF0YSAoZm9yIGV4YW1wbGUsIHRvCisgICAqICAgcHJvcGVybHkgYWxpZ24gYm94IGNoYXJhY3RlcnMgdmVydGljYWxseSkuCisgICAqCisgICAqICAgT25seSB0aGUgYXBwbGljYXRpb24ga25vd3MgX2luXyBfYWR2YW5jZV8gdGhhdCBpdCBpcyBnb2luZyB0byB1c2UKKyAgICogICBuYXRpdmUgaGludGluZyBmb3IgVFRGcyEgIEZyZWVUeXBlLCBvbiB0aGUgb3RoZXIgaGFuZCwgc2VsZWN0cyB0aGUKKyAgICogICBoaW50aW5nIG1vZGUgbm90IGF0IHRoZSB0aW1lIG9mIGNyZWF0aW5nIGFuIEBGVF9TaXplIG9iamVjdCBidXQKKyAgICogICBtdWNoIGxhdGVyLCBuYW1lbHkgd2hpbGUgY2FsbGluZyBARlRfTG9hZF9HbHlwaC4KKyAgICoKKyAgICogICBIZXJlIGlzIHNvbWUgcHNldWRvIGNvZGUgdGhhdCBpbGx1c3RyYXRlcyBhIHBvc3NpYmxlIHNvbHV0aW9uLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIGZvbnRfZm9ybWF0ID0gRlRfR2V0X0ZvbnRfRm9ybWF0KCBmYWNlICk7CisgICAqCisgICAqICAgICBpZiAoICFzdHJjbXAoIGZvbnRfZm9ybWF0LCAiVHJ1ZVR5cGUiICkgJiYKKyAgICogICAgICAgICAgZG9fbmF0aXZlX2J5dGVjb2RlX2hpbnRpbmcgICAgICAgICApCisgICAqICAgICB7CisgICAqICAgICAgIGFzY2VuZGVyICA9IFJPVU5EKCBGVF9NdWxGaXgoIGZhY2UtPmFzY2VuZGVyLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOworICAgKiAgICAgICBkZXNjZW5kZXIgPSBST1VORCggRlRfTXVsRml4KCBmYWNlLT5kZXNjZW5kZXIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eV9zY2FsZSApICk7CisgICAqICAgICB9CisgICAqICAgICBlbHNlCisgICAqICAgICB7CisgICAqICAgICAgIGFzY2VuZGVyICA9IHNpemVfbWV0cmljcy0+YXNjZW5kZXI7CisgICAqICAgICAgIGRlc2NlbmRlciA9IHNpemVfbWV0cmljcy0+ZGVzY2VuZGVyOworICAgKiAgICAgfQorICAgKgorICAgKiAgICAgaGVpZ2h0ICAgICAgPSBzaXplX21ldHJpY3MtPmhlaWdodDsKKyAgICogICAgIG1heF9hZHZhbmNlID0gc2l6ZV9tZXRyaWNzLT5tYXhfYWR2YW5jZTsKKyAgICogICB9CisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfU2l6ZV9NZXRyaWNzXwogICB7CiAgICAgRlRfVVNob3J0ICB4X3BwZW07ICAgICAgLyogaG9yaXpvbnRhbCBwaXhlbHMgcGVyIEVNICAgICAgICAgICAgICAgKi8KQEAgLTE2NTEsMjUgKzE2ODYsMjggQEAKICAgfSBGVF9TaXplX01ldHJpY3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TaXplUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSByb290IHNpemUgY2xhc3Mgc3RydWN0dXJlLiAgQSBzaXplIG9iamVjdCBtb2RlbHMgYSBmYWNlICAgKi8KLSAgLyogICAgb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBIYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnZW5lcmljIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5IG9yICAgKi8KLSAgLyogICAgICAgICAgICAgICBhbnkgb2YgaXRzIGRyaXZlcnMuICBJdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHRvIGxpbmsgdGhlaXIgb3duIGRhdGEgdG8gZWFjaCBzaXplICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1ldHJpY3MgOjogTWV0cmljcyBmb3IgdGhpcyBzaXplIG9iamVjdC4gIFRoaXMgZmllbGQgaXMgcmVhZC1vbmx5LiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU2l6ZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRnJlZVR5cGUgcm9vdCBzaXplIGNsYXNzIHN0cnVjdHVyZS4gIEEgc2l6ZSBvYmplY3QgbW9kZWxzIGEgZmFjZQorICAgKiAgIG9iamVjdCBhdCBhIGdpdmVuIHNpemUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgSGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgZ2VuZXJpYyA6OgorICAgKiAgICAgQSB0eXBlbGVzcyBwb2ludGVyLCB1bnVzZWQgYnkgdGhlIEZyZWVUeXBlIGxpYnJhcnkgb3IKKyAgICogICAgIGFueSBvZiBpdHMgZHJpdmVycy4gIEl0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudAorICAgKiAgICAgYXBwbGljYXRpb25zIHRvIGxpbmsgdGhlaXIgb3duIGRhdGEgdG8gZWFjaCBzaXplCisgICAqICAgICBvYmplY3QuCisgICAqCisgICAqICAgbWV0cmljcyA6OgorICAgKiAgICAgTWV0cmljcyBmb3IgdGhpcyBzaXplIG9iamVjdC4gIFRoaXMgZmllbGQgaXMgcmVhZC1vbmx5LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVSZWNfCiAgIHsKICAgICBGVF9GYWNlICAgICAgICAgICBmYWNlOyAgICAgIC8qIHBhcmVudCBmYWNlIG9iamVjdCAgICAgICAgICAgICAgKi8KQEAgLTE2ODAsMjM3ICsxNzE4LDI2MSBAQAogICB9IEZUX1NpemVSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TdWJHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgc3ViZ2x5cGggc3RydWN0dXJlIGlzIGFuIGludGVybmFsIG9iamVjdCB1c2VkIHRvIGRlc2NyaWJlICAgICAgKi8KLSAgLyogICAgc3ViZ2x5cGhzIChmb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgY29tcG9zaXRlcykuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN1YmdseXBoIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBoaWdoLWxldmVsIEFQSSwgICAgICovCi0gIC8qICAgIGhlbmNlIHRoZSBmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWW91IGNhbiBob3dldmVyIHJldHJpZXZlIHN1YmdseXBoIGluZm9ybWF0aW9uIHdpdGggICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9HZXRfU3ViR2x5cGhfSW5mby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU3ViR2x5cGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBzdWJnbHlwaCBzdHJ1Y3R1cmUgaXMgYW4gaW50ZXJuYWwgb2JqZWN0IHVzZWQgdG8gZGVzY3JpYmUKKyAgICogICBzdWJnbHlwaHMgKGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBjb21wb3NpdGVzKS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHN1YmdseXBoIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBoaWdoLWxldmVsIEFQSSwKKyAgICogICBoZW5jZSB0aGUgZm9yd2FyZCBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24uCisgICAqCisgICAqICAgWW91IGNhbiBob3dldmVyIHJldHJpZXZlIHN1YmdseXBoIGluZm9ybWF0aW9uIHdpdGgKKyAgICogICBARlRfR2V0X1N1YkdseXBoX0luZm8uCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9TdWJHbHlwaFJlY18qICBGVF9TdWJHbHlwaDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Nsb3RfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gYEZUX1Nsb3RfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZSwgdXNlZCB0byAgICAqLwotICAvKiAgICBtb2RlbCBwcml2YXRlIGRhdGEgb2YgYSBnaXZlbiBARlRfR2x5cGhTbG90IG9iamVjdC4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9TbG90X0ludGVybmFsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIGBGVF9TbG90X0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUsIHVzZWQgdG8KKyAgICogICBtb2RlbCBwcml2YXRlIGRhdGEgb2YgYSBnaXZlbiBARlRfR2x5cGhTbG90IG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX1Nsb3RfSW50ZXJuYWxSZWNfKiAgRlRfU2xvdF9JbnRlcm5hbDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dseXBoU2xvdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIHJvb3QgZ2x5cGggc2xvdCBjbGFzcyBzdHJ1Y3R1cmUuICBBIGdseXBoIHNsb3QgaXMgYSAgICAgICAqLwotICAvKiAgICBjb250YWluZXIgd2hlcmUgaW5kaXZpZHVhbCBnbHlwaHMgY2FuIGJlIGxvYWRlZCwgYmUgdGhleSBpbiAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSBvciBiaXRtYXAgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIEZyZWVUeXBlIGxpYnJhcnkgaW5zdGFuY2UgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc2xvdCBiZWxvbmdzIHRvLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuZXh0ICAgICAgICAgICAgICA6OiBJbiBzb21lIGNhc2VzIChsaWtlIHNvbWUgZm9udCB0b29scyksIHNldmVyYWwgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGggc2xvdHMgcGVyIGZhY2Ugb2JqZWN0IGNhbiBiZSBhIGdvb2QgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5nLiAgQXMgdGhpcyBpcyByYXJlLCB0aGUgZ2x5cGggc2xvdHMgYXJlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgdGhyb3VnaCBhIGRpcmVjdCwgc2luZ2xlLWxpbmtlZCBsaXN0ICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgaXRzIGBuZXh0JyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnZW5lcmljICAgICAgICAgICA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeSBvciBhbnkgb2YgaXRzIGRyaXZlcnMuICBJdCBjYW4gYmUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rIHRoZWlyIG93biAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHRvIGVhY2ggZ2x5cGggc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1ldHJpY3MgICAgICAgICAgIDo6IFRoZSBtZXRyaWNzIG9mIHRoZSBsYXN0IGxvYWRlZCBnbHlwaCBpbiB0aGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LiAgVGhlIHJldHVybmVkIHZhbHVlcyBkZXBlbmQgb24gdGhlIGxhc3QgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCBmbGFncyAoc2VlIHRoZSBARlRfTG9hZF9HbHlwaCBBUEkgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKSBhbmQgY2FuIGJlIGV4cHJlc3NlZCBlaXRoZXIgaW4gMjYuNiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscyBvciBmb250IHVuaXRzLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBldmVuIHdoZW4gdGhlIGdseXBoIGltYWdlIGlzICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCwgdGhlIG1ldHJpY3MgYXJlIG5vdC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpbmVhckhvcmlBZHZhbmNlIDo6IFRoZSBhZHZhbmNlIHdpZHRoIG9mIHRoZSB1bmhpbnRlZCBnbHlwaC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBJdHMgdmFsdWUgaXMgZXhwcmVzc2VkIGluIDE2LjE2IGZyYWN0aW9uYWwgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLCB1bmxlc3MgQEZUX0xPQURfTElORUFSX0RFU0lHTiBpcyBzZXQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbG9hZGluZyB0aGUgZ2x5cGguICBUaGlzIGZpZWxkIGNhbiBiZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcGVyZm9ybSBjb3JyZWN0IFdZU0lXWUcgbGF5b3V0LiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgT25seSByZWxldmFudCBmb3Igb3V0bGluZSBnbHlwaHMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaW5lYXJWZXJ0QWR2YW5jZSA6OiBUaGUgYWR2YW5jZSBoZWlnaHQgb2YgdGhlIHVuaGludGVkIGdseXBoLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgSXRzIHZhbHVlIGlzIGV4cHJlc3NlZCBpbiAxNi4xNiBmcmFjdGlvbmFsICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscywgdW5sZXNzIEBGVF9MT0FEX0xJTkVBUl9ERVNJR04gaXMgc2V0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGxvYWRpbmcgdGhlIGdseXBoLiAgVGhpcyBmaWVsZCBjYW4gYmUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW50IHRvIHBlcmZvcm0gY29ycmVjdCBXWVNJV1lHIGxheW91dC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIG91dGxpbmUgZ2x5cGhzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWR2YW5jZSAgICAgICAgICAgOjogVGhpcyBzaG9ydGhhbmQgaXMsIGRlcGVuZGluZyBvbiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0sIHRoZSB0cmFuc2Zvcm1lZCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAoaGludGVkKSBhZHZhbmNlIHdpZHRoIGZvciB0aGUgZ2x5cGgsIGluIDI2LjYgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25hbCBwaXhlbCBmb3JtYXQuICBBcyBzcGVjaWZpZWQgd2l0aCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCwgaXQgdXNlcyBlaXRoZXIgdGhlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBgaG9yaUFkdmFuY2UnIG9yIHRoZSBgdmVydEFkdmFuY2UnIHZhbHVlIG9mICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYG1ldHJpY3MnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb3JtYXQgICAgICAgICAgICA6OiBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgZm9ybWF0IG9mIHRoZSBpbWFnZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkIGluIHRoZSBnbHlwaCBzbG90LiAgVHlwaWNhbGx5ICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQklUTUFQLCAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX09VVExJTkUsIG9yICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUsIGJ1dCBvdGhlciB2YWx1ZXMgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBwb3NzaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYml0bWFwICAgICAgICAgICAgOjogVGhpcyBmaWVsZCBpcyB1c2VkIGFzIGEgYml0bWFwIGRlc2NyaXB0b3IuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgYWRkcmVzcyBhbmQgY29udGVudCBvZiB0aGUgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgYnVmZmVyIGNhbiBjaGFuZ2UgYmV0d2VlbiBjYWxscyBvZiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xvYWRfR2x5cGggYW5kIGEgZmV3IG90aGVyIGZ1bmN0aW9ucy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiaXRtYXBfbGVmdCAgICAgICA6OiBUaGUgYml0bWFwJ3MgbGVmdCBiZWFyaW5nIGV4cHJlc3NlZCBpbiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiaXRtYXBfdG9wICAgICAgICA6OiBUaGUgYml0bWFwJ3MgdG9wIGJlYXJpbmcgZXhwcmVzc2VkIGluIGludGVnZXIgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLiAgVGhpcyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCBnbHlwaCBzY2FubGluZSwgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB1cHdhcmRzIHl+Y29vcmRpbmF0ZXMgYmVpbmcgKnBvc2l0aXZlKi4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgICAgICAgICAgIDo6IFRoZSBvdXRsaW5lIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IGdseXBoICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpZiBpdHMgZm9ybWF0IGlzICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLiAgT25jZSBhIGdseXBoIGlzICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZCwgYG91dGxpbmUnIGNhbiBiZSB0cmFuc2Zvcm1lZCwgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0b3J0ZWQsIGVtYm9sZGVuZWQsIGV0Yy4gIEhvd2V2ZXIsIGl0IG11c3QgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlIGZyZWVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fc3ViZ2x5cGhzICAgICA6OiBUaGUgbnVtYmVyIG9mIHN1YmdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGZvciB0aGUgY29tcG9zaXRlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIGZvcm1hdCB0aGF0IHNob3VsZCBub3JtYWxseSBvbmx5IGJlICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQgd2l0aCB0aGUgQEZUX0xPQURfTk9fUkVDVVJTRSBmbGFnLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN1YmdseXBocyAgICAgICAgIDo6IEFuIGFycmF5IG9mIHN1YmdseXBoIGRlc2NyaXB0b3JzIGZvciAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGUgZ2x5cGhzLiAgVGhlcmUgYXJlIGBudW1fc3ViZ2x5cGhzJyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgaW4gdGhlcmUuICBDdXJyZW50bHkgaW50ZXJuYWwgdG8gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJvbF9kYXRhICAgICAgOjogQ2VydGFpbiBmb250IGRyaXZlcnMgY2FuIGFsc28gcmV0dXJuIHRoZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgZGF0YSBmb3IgYSBnaXZlbiBnbHlwaCBpbWFnZSAoZS5nLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBieXRlY29kZSwgVHlwZX4xIGNoYXJzdHJpbmdzLCBldGMuKS4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gc3VjaCBkYXRhOyBpdCBpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSBpbnRlcm5hbCB0byBGcmVlVHlwZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJvbF9sZW4gICAgICAgOjogVGhpcyBpcyB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjb250cm9sICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuICBDdXJyZW50bHkgaW50ZXJuYWwgdG8gRnJlZVR5cGUuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3RoZXIgICAgICAgICAgICAgOjogUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsc2JfZGVsdGEgICAgICAgICA6OiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpbnRlZCBhbmQgdW5oaW50ZWQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0by1oaW50aW5nIGlzICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS4gIFplcm8gb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcnNiX2RlbHRhICAgICAgICAgOjogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvLWhpbnRpbmcgaXMgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuICBaZXJvIG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBARlRfTG9hZF9HbHlwaCBpcyBjYWxsZWQgd2l0aCBkZWZhdWx0IGZsYWdzIChzZWUgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0xPQURfREVGQVVMVCkgdGhlIGdseXBoIGltYWdlIGlzIGxvYWRlZCBpbiB0aGUgZ2x5cGggc2xvdCBpbiAgICovCi0gIC8qICAgIGl0cyBuYXRpdmUgZm9ybWF0IChlLmcuLCBhbiBvdXRsaW5lIGdseXBoIGZvciBUcnVlVHlwZSBhbmQgVHlwZX4xICAqLwotICAvKiAgICBmb3JtYXRzKS4gIFtTaW5jZSAyLjldIFRoZSBwcm9zcGVjdGl2ZSBiaXRtYXAgbWV0cmljcyBhcmUgICAgICAgICAgKi8KLSAgLyogICAgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gQEZUX0xPQURfVEFSR0VUX1hYWCBhbmQgb3RoZXIgZmxhZ3MgZXZlbiAgICovCi0gIC8qICAgIGZvciB0aGUgb3V0bGluZSBnbHlwaCwgZXZlbiBpZiBARlRfTE9BRF9SRU5ERVIgaXMgbm90IHNldC4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBpbWFnZSBjYW4gbGF0ZXIgYmUgY29udmVydGVkIGludG8gYSBiaXRtYXAgYnkgY2FsbGluZyAgICAgICAgICovCi0gIC8qICAgIEBGVF9SZW5kZXJfR2x5cGguICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciAqLwotICAvKiAgICB0aGUgbmF0aXZlIGltYWdlJ3MgZm9ybWF0LCB0aGVuIGludm9rZXMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZW5kZXJlciBpcyBpbiBjaGFyZ2Ugb2YgdHJhbnNmb3JtaW5nIHRoZSBuYXRpdmUgaW1hZ2UgdGhyb3VnaCAqLwotICAvKiAgICB0aGUgc2xvdCdzIGZhY2UgdHJhbnNmb3JtYXRpb24gZmllbGRzLCB0aGVuIGNvbnZlcnRpbmcgaXQgaW50byBhICAgKi8KLSAgLyogICAgYml0bWFwIHRoYXQgaXMgcmV0dXJuZWQgaW4gYHNsb3QtPmJpdG1hcCcuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgYHNsb3QtPmJpdG1hcF9sZWZ0JyBhbmQgYHNsb3QtPmJpdG1hcF90b3AnIGFyZSBhbHNvIHVzZWQgKi8KLSAgLyogICAgdG8gc3BlY2lmeSB0aGUgcG9zaXRpb24gb2YgdGhlIGJpdG1hcCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwZW4gICovCi0gIC8qICAgIHBvc2l0aW9uIChlLmcuLCBjb29yZGluYXRlcyAoMCwwKSBvbiB0aGUgYmFzZWxpbmUpLiAgT2YgY291cnNlLCAgICAqLwotICAvKiAgICBgc2xvdC0+Zm9ybWF0JyBpcyBhbHNvIGNoYW5nZWQgdG8gQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEhlcmUgaXMgYSBzbWFsbCBwc2V1ZG8gY29kZSBmcmFnbWVudCB0aGF0IHNob3dzIGhvdyB0byB1c2UgICAgICAgICAqLwotICAvKiAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgdG8gZG8gZnJhY3Rpb25hbCBwb3NpdGlvbmluZyBvZiAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgICAgID0gZmFjZS0+Z2x5cGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRlRfUG9zICAgICAgICBvcmlnaW5feCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgZm9yIGFsbCBnbHlwaHMgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgPGxvYWQgZ2x5cGggd2l0aCBgRlRfTG9hZF9HbHlwaCc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggc2xvdC0+b3V0bGluZSwgb3JpZ2luX3ggJiA2MywgMCApOyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIDxzYXZlIGdseXBoIGltYWdlLCBvciByZW5kZXIgZ2x5cGgsIG9yIC4uLj4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgPGNvbXB1dGUga2VybiBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgZ2x5cGggICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBhbmQgYWRkIGl0IHRvIGBvcmlnaW5feCc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgb3JpZ2luX3ggKz0gc2xvdC0+YWR2YW5jZS54OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIG9yaWdpbl94ICs9IHNsb3QtPnJzYl9kZWx0YSAtIHNsb3QtPmxzYl9kZWx0YTsgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgZW5kZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEhlcmUgaXMgYW5vdGhlciBzbWFsbCBwc2V1ZG8gY29kZSBmcmFnbWVudCB0aGF0IHNob3dzIGhvdyB0byB1c2UgICAqLwotICAvKiAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgdG8gaW1wcm92ZSBpbnRlZ2VyIHBvc2l0aW9uaW5nIG9mICAgICAgKi8KLSAgLyogICAgZ2x5cGhzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgICAgICAgICAgID0gZmFjZS0+Z2x5cGg7ICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRlRfUG9zICAgICAgICBvcmlnaW5feCAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZUX1BvcyAgICAgICAgcHJldl9yc2JfZGVsdGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGZvciBhbGwgZ2x5cGhzIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIDxjb21wdXRlIGtlcm4gYmV0d2VlbiBjdXJyZW50IGFuZCBwcmV2aW91cyBnbHlwaCAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgYW5kIGFkZCBpdCB0byBgb3JpZ2luX3gnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIDxsb2FkIGdseXBoIHdpdGggYEZUX0xvYWRfR2x5cGgnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgaWYgKCBwcmV2X3JzYl9kZWx0YSAtIHNsb3QtPmxzYl9kZWx0YSA+ICAzMiApICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgb3JpZ2luX3ggLT0gNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBlbHNlIGlmICggcHJldl9yc2JfZGVsdGEgLSBzbG90LT5sc2JfZGVsdGEgPCAtMzEgKSAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICBvcmlnaW5feCArPSA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBwcmV2X3JzYl9kZWx0YSA9IHNsb3QtPnJzYl9kZWx0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIDxzYXZlIGdseXBoIGltYWdlLCBvciByZW5kZXIgZ2x5cGgsIG9yIC4uLj4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgb3JpZ2luX3ggKz0gc2xvdC0+YWR2YW5jZS54OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBlbmRmb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgeW91IHVzZSBzdHJvbmcgYXV0by1oaW50aW5nLCB5b3UgKm11c3QqIGFwcGx5IHRoZXNlIGRlbHRhICAgICAgICovCi0gIC8qICAgIHZhbHVlcyEgIE90aGVyd2lzZSB5b3Ugd2lsbCBleHBlcmllbmNlIGZhciB0b28gbGFyZ2UgaW50ZXItZ2x5cGggICAqLwotICAvKiAgICBzcGFjaW5nIGF0IHNtYWxsIHJlbmRlcmluZyBzaXplcyBpbiBtb3N0IGNhc2VzLiAgTm90ZSB0aGF0IGl0ICAgICAgKi8KLSAgLyogICAgZG9lc24ndCBoYXJtIHRvIHVzZSB0aGUgYWJvdmUgY29kZSBmb3Igb3RoZXIgaGludGluZyBtb2RlcyBhbHNvLCAgICovCi0gIC8qICAgIHNpbmNlIHRoZSBkZWx0YSB2YWx1ZXMgYXJlIHplcm8gdGhlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfR2x5cGhTbG90UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBGcmVlVHlwZSByb290IGdseXBoIHNsb3QgY2xhc3Mgc3RydWN0dXJlLiAgQSBnbHlwaCBzbG90IGlzIGEKKyAgICogICBjb250YWluZXIgd2hlcmUgaW5kaXZpZHVhbCBnbHlwaHMgY2FuIGJlIGxvYWRlZCwgYmUgdGhleSBpbgorICAgKiAgIG91dGxpbmUgb3IgYml0bWFwIGZvcm1hdC4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZQorICAgKiAgICAgdGhpcyBzbG90IGJlbG9uZ3MgdG8uCisgICAqCisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBuZXh0IDo6CisgICAqICAgICBJbiBzb21lIGNhc2VzIChsaWtlIHNvbWUgZm9udCB0b29scyksIHNldmVyYWwKKyAgICogICAgIGdseXBoIHNsb3RzIHBlciBmYWNlIG9iamVjdCBjYW4gYmUgYSBnb29kCisgICAqICAgICB0aGluZy4gIEFzIHRoaXMgaXMgcmFyZSwgdGhlIGdseXBoIHNsb3RzIGFyZQorICAgKiAgICAgbGlzdGVkIHRocm91Z2ggYSBkaXJlY3QsIHNpbmdsZS1saW5rZWQgbGlzdAorICAgKiAgICAgdXNpbmcgaXRzIGBuZXh0JyBmaWVsZC4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4IHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBARlRfTG9hZF9HbHlwaCB3aGlsZQorICAgKiAgICAgaW5pdGlhbGl6ZWluZyB0aGUgZ2x5cGggc2xvdCAoc2luY2UgRnJlZVR5cGUgdmVyc2lvbiAyLjEwKS4KKyAgICoKKyAgICogICBnZW5lcmljIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgdW51c2VkIGJ5IHRoZSBGcmVlVHlwZQorICAgKiAgICAgbGlicmFyeSBvciBhbnkgb2YgaXRzIGRyaXZlcnMuICBJdCBjYW4gYmUKKyAgICogICAgIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rIHRoZWlyIG93bgorICAgKiAgICAgZGF0YSB0byBlYWNoIGdseXBoIHNsb3Qgb2JqZWN0LgorICAgKgorICAgKiAgIG1ldHJpY3MgOjoKKyAgICogICAgIFRoZSBtZXRyaWNzIG9mIHRoZSBsYXN0IGxvYWRlZCBnbHlwaCBpbiB0aGUKKyAgICogICAgIHNsb3QuICBUaGUgcmV0dXJuZWQgdmFsdWVzIGRlcGVuZCBvbiB0aGUgbGFzdAorICAgKiAgICAgbG9hZCBmbGFncyAoc2VlIHRoZSBARlRfTG9hZF9HbHlwaCBBUEkKKyAgICogICAgIGZ1bmN0aW9uKSBhbmQgY2FuIGJlIGV4cHJlc3NlZCBlaXRoZXIgaW4gMjYuNgorICAgKiAgICAgZnJhY3Rpb25hbCBwaXhlbHMgb3IgZm9udCB1bml0cy4KKyAgICoKKyAgICogICAgIE5vdGUgdGhhdCBldmVuIHdoZW4gdGhlIGdseXBoIGltYWdlIGlzCisgICAqICAgICB0cmFuc2Zvcm1lZCwgdGhlIG1ldHJpY3MgYXJlIG5vdC4KKyAgICoKKyAgICogICBsaW5lYXJIb3JpQWR2YW5jZSA6OgorICAgKiAgICAgVGhlIGFkdmFuY2Ugd2lkdGggb2YgdGhlIHVuaGludGVkIGdseXBoLgorICAgKiAgICAgSXRzIHZhbHVlIGlzIGV4cHJlc3NlZCBpbiAxNi4xNiBmcmFjdGlvbmFsCisgICAqICAgICBwaXhlbHMsIHVubGVzcyBARlRfTE9BRF9MSU5FQVJfREVTSUdOIGlzIHNldAorICAgKiAgICAgd2hlbiBsb2FkaW5nIHRoZSBnbHlwaC4gIFRoaXMgZmllbGQgY2FuIGJlCisgICAqICAgICBpbXBvcnRhbnQgdG8gcGVyZm9ybSBjb3JyZWN0IFdZU0lXWUcgbGF5b3V0LgorICAgKiAgICAgT25seSByZWxldmFudCBmb3Igb3V0bGluZSBnbHlwaHMuCisgICAqCisgICAqICAgbGluZWFyVmVydEFkdmFuY2UgOjoKKyAgICogICAgIFRoZSBhZHZhbmNlIGhlaWdodCBvZiB0aGUgdW5oaW50ZWQgZ2x5cGguCisgICAqICAgICBJdHMgdmFsdWUgaXMgZXhwcmVzc2VkIGluIDE2LjE2IGZyYWN0aW9uYWwKKyAgICogICAgIHBpeGVscywgdW5sZXNzIEBGVF9MT0FEX0xJTkVBUl9ERVNJR04gaXMgc2V0CisgICAqICAgICB3aGVuIGxvYWRpbmcgdGhlIGdseXBoLiAgVGhpcyBmaWVsZCBjYW4gYmUKKyAgICogICAgIGltcG9ydGFudCB0byBwZXJmb3JtIGNvcnJlY3QgV1lTSVdZRyBsYXlvdXQuCisgICAqICAgICBPbmx5IHJlbGV2YW50IGZvciBvdXRsaW5lIGdseXBocy4KKyAgICoKKyAgICogICBhZHZhbmNlIDo6CisgICAqICAgICBUaGlzIHNob3J0aGFuZCBpcywgZGVwZW5kaW5nIG9uCisgICAqICAgICBARlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNLCB0aGUgdHJhbnNmb3JtZWQKKyAgICogICAgIChoaW50ZWQpIGFkdmFuY2Ugd2lkdGggZm9yIHRoZSBnbHlwaCwgaW4gMjYuNgorICAgKiAgICAgZnJhY3Rpb25hbCBwaXhlbCBmb3JtYXQuICBBcyBzcGVjaWZpZWQgd2l0aAorICAgKiAgICAgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VULCBpdCB1c2VzIGVpdGhlciB0aGUKKyAgICogICAgIGBob3JpQWR2YW5jZScgb3IgdGhlIGB2ZXJ0QWR2YW5jZScgdmFsdWUgb2YKKyAgICogICAgIGBtZXRyaWNzJyBmaWVsZC4KKyAgICoKKyAgICogICBmb3JtYXQgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBmb3JtYXQgb2YgdGhlIGltYWdlCisgICAqICAgICBjb250YWluZWQgaW4gdGhlIGdseXBoIHNsb3QuICBUeXBpY2FsbHkKKyAgICogICAgIEBGVF9HTFlQSF9GT1JNQVRfQklUTUFQLAorICAgKiAgICAgQEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLCBvcgorICAgKiAgICAgQEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUsIGJ1dCBvdGhlciB2YWx1ZXMKKyAgICogICAgIGFyZSBwb3NzaWJsZS4KKyAgICoKKyAgICogICBiaXRtYXAgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yLgorICAgKiAgICAgTm90ZSB0aGF0IHRoZSBhZGRyZXNzIGFuZCBjb250ZW50IG9mIHRoZQorICAgKiAgICAgYml0bWFwIGJ1ZmZlciBjYW4gY2hhbmdlIGJldHdlZW4gY2FsbHMgb2YKKyAgICogICAgIEBGVF9Mb2FkX0dseXBoIGFuZCBhIGZldyBvdGhlciBmdW5jdGlvbnMuCisgICAqCisgICAqICAgYml0bWFwX2xlZnQgOjoKKyAgICogICAgIFRoZSBiaXRtYXAncyBsZWZ0IGJlYXJpbmcgZXhwcmVzc2VkIGluCisgICAqICAgICBpbnRlZ2VyIHBpeGVscy4KKyAgICoKKyAgICogICBiaXRtYXBfdG9wIDo6CisgICAqICAgICBUaGUgYml0bWFwJ3MgdG9wIGJlYXJpbmcgZXhwcmVzc2VkIGluIGludGVnZXIKKyAgICogICAgIHBpeGVscy4gIFRoaXMgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlCisgICAqICAgICBiYXNlbGluZSB0byB0aGUgdG9wLW1vc3QgZ2x5cGggc2NhbmxpbmUsCisgICAqICAgICB1cHdhcmRzIHl+Y29vcmRpbmF0ZXMgYmVpbmcgKnBvc2l0aXZlKi4KKyAgICoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBUaGUgb3V0bGluZSBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBnbHlwaAorICAgKiAgICAgaW1hZ2UgaWYgaXRzIGZvcm1hdCBpcworICAgKiAgICAgQEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FLiAgT25jZSBhIGdseXBoIGlzCisgICAqICAgICBsb2FkZWQsIGBvdXRsaW5lJyBjYW4gYmUgdHJhbnNmb3JtZWQsCisgICAqICAgICBkaXN0b3J0ZWQsIGVtYm9sZGVuZWQsIGV0Yy4gIEhvd2V2ZXIsIGl0IG11c3QKKyAgICogICAgIG5vdCBiZSBmcmVlZC4KKyAgICoKKyAgICogICBudW1fc3ViZ2x5cGhzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHN1YmdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4KKyAgICogICAgIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGNvbXBvc2l0ZQorICAgKiAgICAgZ2x5cGggZm9ybWF0IHRoYXQgc2hvdWxkIG5vcm1hbGx5IG9ubHkgYmUKKyAgICogICAgIGxvYWRlZCB3aXRoIHRoZSBARlRfTE9BRF9OT19SRUNVUlNFIGZsYWcuCisgICAqCisgICAqICAgc3ViZ2x5cGhzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBzdWJnbHlwaCBkZXNjcmlwdG9ycyBmb3IKKyAgICogICAgIGNvbXBvc2l0ZSBnbHlwaHMuICBUaGVyZSBhcmUgYG51bV9zdWJnbHlwaHMnCisgICAqICAgICBlbGVtZW50cyBpbiB0aGVyZS4gIEN1cnJlbnRseSBpbnRlcm5hbCB0bworICAgKiAgICAgRnJlZVR5cGUuCisgICAqCisgICAqICAgY29udHJvbF9kYXRhIDo6CisgICAqICAgICBDZXJ0YWluIGZvbnQgZHJpdmVycyBjYW4gYWxzbyByZXR1cm4gdGhlCisgICAqICAgICBjb250cm9sIGRhdGEgZm9yIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgKGUuZy4KKyAgICogICAgIFRydWVUeXBlIGJ5dGVjb2RlLCBUeXBlfjEgY2hhcnN0cmluZ3MsIGV0Yy4pLgorICAgKiAgICAgVGhpcyBmaWVsZCBpcyBhIHBvaW50ZXIgdG8gc3VjaCBkYXRhOyBpdCBpcworICAgKiAgICAgY3VycmVudGx5IGludGVybmFsIHRvIEZyZWVUeXBlLgorICAgKgorICAgKiAgIGNvbnRyb2xfbGVuIDo6CisgICAqICAgICBUaGlzIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbnRyb2wKKyAgICogICAgIGRhdGEuICBDdXJyZW50bHkgaW50ZXJuYWwgdG8gRnJlZVR5cGUuCisgICAqCisgICAqICAgb3RoZXIgOjoKKyAgICogICAgIFJlc2VydmVkLgorICAgKgorICAgKiAgIGxzYl9kZWx0YSA6OgorICAgKiAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkCisgICAqICAgICBsZWZ0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvLWhpbnRpbmcgaXMKKyAgICogICAgIGFjdGl2ZS4gIFplcm8gb3RoZXJ3aXNlLgorICAgKgorICAgKiAgIHJzYl9kZWx0YSA6OgorICAgKiAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkCisgICAqICAgICByaWdodCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0by1oaW50aW5nIGlzCisgICAqICAgICBhY3RpdmUuICBaZXJvIG90aGVyd2lzZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSWYgQEZUX0xvYWRfR2x5cGggaXMgY2FsbGVkIHdpdGggZGVmYXVsdCBmbGFncyAoc2VlCisgICAqICAgQEZUX0xPQURfREVGQVVMVCkgdGhlIGdseXBoIGltYWdlIGlzIGxvYWRlZCBpbiB0aGUgZ2x5cGggc2xvdCBpbgorICAgKiAgIGl0cyBuYXRpdmUgZm9ybWF0IChlLmcuLCBhbiBvdXRsaW5lIGdseXBoIGZvciBUcnVlVHlwZSBhbmQgVHlwZX4xCisgICAqICAgZm9ybWF0cykuICBbU2luY2UgMi45XSBUaGUgcHJvc3BlY3RpdmUgYml0bWFwIG1ldHJpY3MgYXJlCisgICAqICAgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gQEZUX0xPQURfVEFSR0VUX1hYWCBhbmQgb3RoZXIgZmxhZ3MgZXZlbgorICAgKiAgIGZvciB0aGUgb3V0bGluZSBnbHlwaCwgZXZlbiBpZiBARlRfTE9BRF9SRU5ERVIgaXMgbm90IHNldC4KKyAgICoKKyAgICogICBUaGlzIGltYWdlIGNhbiBsYXRlciBiZSBjb252ZXJ0ZWQgaW50byBhIGJpdG1hcCBieSBjYWxsaW5nCisgICAqICAgQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yCisgICAqICAgdGhlIG5hdGl2ZSBpbWFnZSdzIGZvcm1hdCwgdGhlbiBpbnZva2VzIGl0LgorICAgKgorICAgKiAgIFRoZSByZW5kZXJlciBpcyBpbiBjaGFyZ2Ugb2YgdHJhbnNmb3JtaW5nIHRoZSBuYXRpdmUgaW1hZ2UgdGhyb3VnaAorICAgKiAgIHRoZSBzbG90J3MgZmFjZSB0cmFuc2Zvcm1hdGlvbiBmaWVsZHMsIHRoZW4gY29udmVydGluZyBpdCBpbnRvIGEKKyAgICogICBiaXRtYXAgdGhhdCBpcyByZXR1cm5lZCBpbiBgc2xvdC0+Yml0bWFwJy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgYHNsb3QtPmJpdG1hcF9sZWZ0JyBhbmQgYHNsb3QtPmJpdG1hcF90b3AnIGFyZSBhbHNvIHVzZWQKKyAgICogICB0byBzcGVjaWZ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgYml0bWFwIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBlbgorICAgKiAgIHBvc2l0aW9uIChlLmcuLCBjb29yZGluYXRlcyAoMCwwKSBvbiB0aGUgYmFzZWxpbmUpLiAgT2YgY291cnNlLAorICAgKiAgIGBzbG90LT5mb3JtYXQnIGlzIGFsc28gY2hhbmdlZCB0byBARlRfR0xZUEhfRk9STUFUX0JJVE1BUC4KKyAgICoKKyAgICogICBIZXJlIGlzIGEgc21hbGwgcHNldWRvIGNvZGUgZnJhZ21lbnQgdGhhdCBzaG93cyBob3cgdG8gdXNlCisgICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIHRvIGRvIGZyYWN0aW9uYWwgcG9zaXRpb25pbmcgb2YKKyAgICogICBnbHlwaHM6CisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfR2x5cGhTbG90ICBzbG90ICAgICA9IGZhY2UtPmdseXBoOworICAgKiAgICAgRlRfUG9zICAgICAgICBvcmlnaW5feCA9IDA7CisgICAqCisgICAqCisgICAqICAgICBmb3IgYWxsIGdseXBocyBkbworICAgKiAgICAgICA8bG9hZCBnbHlwaCB3aXRoIGBGVF9Mb2FkX0dseXBoJz4KKyAgICoKKyAgICogICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIHNsb3QtPm91dGxpbmUsIG9yaWdpbl94ICYgNjMsIDAgKTsKKyAgICoKKyAgICogICAgICAgPHNhdmUgZ2x5cGggaW1hZ2UsIG9yIHJlbmRlciBnbHlwaCwgb3IgLi4uPgorICAgKgorICAgKiAgICAgICA8Y29tcHV0ZSBrZXJuIGJldHdlZW4gY3VycmVudCBhbmQgbmV4dCBnbHlwaAorICAgKiAgICAgICAgYW5kIGFkZCBpdCB0byBgb3JpZ2luX3gnPgorICAgKgorICAgKiAgICAgICBvcmlnaW5feCArPSBzbG90LT5hZHZhbmNlLng7CisgICAqICAgICAgIG9yaWdpbl94ICs9IHNsb3QtPnJzYl9kZWx0YSAtIHNsb3QtPmxzYl9kZWx0YTsKKyAgICogICAgIGVuZGZvcgorICAgKiAgIH0KKyAgICoKKyAgICogICBIZXJlIGlzIGFub3RoZXIgc21hbGwgcHNldWRvIGNvZGUgZnJhZ21lbnQgdGhhdCBzaG93cyBob3cgdG8gdXNlCisgICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIHRvIGltcHJvdmUgaW50ZWdlciBwb3NpdGlvbmluZyBvZgorICAgKiAgIGdseXBoczoKKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgICAgICAgICAgID0gZmFjZS0+Z2x5cGg7CisgICAqICAgICBGVF9Qb3MgICAgICAgIG9yaWdpbl94ICAgICAgID0gMDsKKyAgICogICAgIEZUX1BvcyAgICAgICAgcHJldl9yc2JfZGVsdGEgPSAwOworICAgKgorICAgKgorICAgKiAgICAgZm9yIGFsbCBnbHlwaHMgZG8KKyAgICogICAgICAgPGNvbXB1dGUga2VybiBiZXR3ZWVuIGN1cnJlbnQgYW5kIHByZXZpb3VzIGdseXBoCisgICAqICAgICAgICBhbmQgYWRkIGl0IHRvIGBvcmlnaW5feCc+CisgICAqCisgICAqICAgICAgIDxsb2FkIGdseXBoIHdpdGggYEZUX0xvYWRfR2x5cGgnPgorICAgKgorICAgKiAgICAgICBpZiAoIHByZXZfcnNiX2RlbHRhIC0gc2xvdC0+bHNiX2RlbHRhID4gIDMyICkKKyAgICogICAgICAgICBvcmlnaW5feCAtPSA2NDsKKyAgICogICAgICAgZWxzZSBpZiAoIHByZXZfcnNiX2RlbHRhIC0gc2xvdC0+bHNiX2RlbHRhIDwgLTMxICkKKyAgICogICAgICAgICBvcmlnaW5feCArPSA2NDsKKyAgICoKKyAgICogICAgICAgcHJldl9yc2JfZGVsdGEgPSBzbG90LT5yc2JfZGVsdGE7CisgICAqCisgICAqICAgICAgIDxzYXZlIGdseXBoIGltYWdlLCBvciByZW5kZXIgZ2x5cGgsIG9yIC4uLj4KKyAgICoKKyAgICogICAgICAgb3JpZ2luX3ggKz0gc2xvdC0+YWR2YW5jZS54OworICAgKiAgICAgZW5kZm9yCisgICAqICAgfQorICAgKgorICAgKiAgIElmIHlvdSB1c2Ugc3Ryb25nIGF1dG8taGludGluZywgeW91ICptdXN0KiBhcHBseSB0aGVzZSBkZWx0YQorICAgKiAgIHZhbHVlcyEgIE90aGVyd2lzZSB5b3Ugd2lsbCBleHBlcmllbmNlIGZhciB0b28gbGFyZ2UgaW50ZXItZ2x5cGgKKyAgICogICBzcGFjaW5nIGF0IHNtYWxsIHJlbmRlcmluZyBzaXplcyBpbiBtb3N0IGNhc2VzLiAgTm90ZSB0aGF0IGl0CisgICAqICAgZG9lc24ndCBoYXJtIHRvIHVzZSB0aGUgYWJvdmUgY29kZSBmb3Igb3RoZXIgaGludGluZyBtb2RlcyBhbHNvLAorICAgKiAgIHNpbmNlIHRoZSBkZWx0YSB2YWx1ZXMgYXJlIHplcm8gdGhlbi4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9HbHlwaFNsb3RSZWNfCiAgIHsKICAgICBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5OwogICAgIEZUX0ZhY2UgICAgICAgICAgIGZhY2U7CiAgICAgRlRfR2x5cGhTbG90ICAgICAgbmV4dDsKLSAgICBGVF9VSW50ICAgICAgICAgICByZXNlcnZlZDsgICAgICAgLyogcmV0YWluZWQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ICovCisgICAgRlRfVUludCAgICAgICAgICAgZ2x5cGhfaW5kZXg7IC8qIG5ldyBpbiAyLjEwOyB3YXMgcmVzZXJ2ZWQgcHJldmlvdXNseSAqLwogICAgIEZUX0dlbmVyaWMgICAgICAgIGdlbmVyaWM7CiAKICAgICBGVF9HbHlwaF9NZXRyaWNzICBtZXRyaWNzOwpAQCAtMTk1MSw4NiArMjAxMyw5MyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0luaXRfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluaXRpYWxpemUgYSBuZXcgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICBUaGUgc2V0IG9mIG1vZHVsZXMgICAgICAqLwotICAvKiAgICB0aGF0IGFyZSByZWdpc3RlcmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbiBjYXNlIHlvdSB3YW50IHRvIHByb3ZpZGUgeW91ciBvd24gbWVtb3J5IGFsbG9jYXRpbmcgcm91dGluZXMsICAgKi8KLSAgLyogICAgdXNlIEBGVF9OZXdfTGlicmFyeSBpbnN0ZWFkLCBmb2xsb3dlZCBieSBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIChvciBhIHNlcmllcyBvZiBjYWxscyB0byBARlRfQWRkX01vZHVsZSkgICAqLwotICAvKiAgICBhbmQgQEZUX1NldF9EZWZhdWx0X1Byb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBARlRfTGlicmFyeSBhbmQgQEZUX0ZhY2UgZm9yICAgICAgICAgICAgICAqLwotICAvKiAgICBtdWx0aS10aHJlYWRpbmcgaXNzdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHlvdSBuZWVkIHJlZmVyZW5jZS1jb3VudGluZyAoY2YuIEBGVF9SZWZlcmVuY2VfTGlicmFyeSksIHVzZSAgICAqLwotICAvKiAgICBARlRfTmV3X0xpYnJhcnkgYW5kIEBGVF9Eb25lX0xpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGNvbXBpbGF0aW9uIG9wdGlvbiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgaXMgICAqLwotICAvKiAgICBzZXQsIHRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudCAgICAgKi8KLSAgLyogICAgdmFyaWFibGUgdG8gY29udHJvbCBkcml2ZXIgcHJvcGVydGllcy4gIFNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzICAgICovCi0gIC8qICAgIGZvciBtb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Jbml0X0ZyZWVUeXBlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBJbml0aWFsaXplIGEgbmV3IEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiAgVGhlIHNldCBvZiBtb2R1bGVzCisgICAqICAgdGhhdCBhcmUgcmVnaXN0ZXJlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYXQgYnVpbGQgdGltZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBuZXcgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSW4gY2FzZSB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIgb3duIG1lbW9yeSBhbGxvY2F0aW5nIHJvdXRpbmVzLAorICAgKiAgIHVzZSBARlRfTmV3X0xpYnJhcnkgaW5zdGVhZCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCisgICAqICAgQEZUX0FkZF9EZWZhdWx0X01vZHVsZXMgKG9yIGEgc2VyaWVzIG9mIGNhbGxzIHRvIEBGVF9BZGRfTW9kdWxlKQorICAgKiAgIGFuZCBARlRfU2V0X0RlZmF1bHRfUHJvcGVydGllcy4KKyAgICoKKyAgICogICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgQEZUX0xpYnJhcnkgYW5kIEBGVF9GYWNlIGZvcgorICAgKiAgIG11bHRpLXRocmVhZGluZyBpc3N1ZXMuCisgICAqCisgICAqICAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nIChjZi4gQEZUX1JlZmVyZW5jZV9MaWJyYXJ5KSwgdXNlCisgICAqICAgQEZUX05ld19MaWJyYXJ5IGFuZCBARlRfRG9uZV9MaWJyYXJ5LgorICAgKgorICAgKiAgIElmIGNvbXBpbGF0aW9uIG9wdGlvbiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgaXMKKyAgICogICBzZXQsIHRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlIHRvIGNvbnRyb2wgZHJpdmVyIHByb3BlcnRpZXMuICBTZWUgc2VjdGlvbiBAcHJvcGVydGllcworICAgKiAgIGZvciBtb3JlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkgICphbGlicmFyeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRG9uZV9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzdHJveSBhIGdpdmVuIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0IGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuLCAgICovCi0gIC8qICAgIGluY2x1ZGluZyByZXNvdXJjZXMsIGRyaXZlcnMsIGZhY2VzLCBzaXplcywgZXRjLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Eb25lX0ZyZWVUeXBlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEZXN0cm95IGEgZ2l2ZW4gRnJlZVR5cGUgbGlicmFyeSBvYmplY3QgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sCisgICAqICAgaW5jbHVkaW5nIHJlc291cmNlcywgZHJpdmVycywgZmFjZXMsIHNpemVzLCBldGMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfRG9uZV9GcmVlVHlwZSggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1BFTl9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBsaXN0IG9mIGJpdCBmaWVsZCBjb25zdGFudHMgdXNlZCB3aXRoaW4gdGhlIGBmbGFncycgZmllbGQgb2YgdGhlICovCi0gIC8qICAgIEBGVF9PcGVuX0FyZ3Mgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09QRU5fTUVNT1JZICAgOjogVGhpcyBpcyBhIG1lbW9yeS1iYXNlZCBzdHJlYW0uICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1BFTl9TVFJFQU0gICA6OiBDb3B5IHRoZSBzdHJlYW0gZnJvbSB0aGUgYHN0cmVhbScgZmllbGQuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PUEVOX1BBVEhOQU1FIDo6IENyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gZnJvbSBhIEN+cGF0aCAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PUEVOX0RSSVZFUiAgIDo6IFVzZSB0aGUgYGRyaXZlcicgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09QRU5fUEFSQU1TICAgOjogVXNlIHRoZSBgbnVtX3BhcmFtcycgYW5kIGBwYXJhbXMnIGZpZWxkcy4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBgRlRfT1BFTl9NRU1PUlknLCBgRlRfT1BFTl9TVFJFQU0nLCBhbmQgYEZUX09QRU5fUEFUSE5BTUUnICAgICAqLwotICAvKiAgICBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9PUEVOX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGJpdCBmaWVsZCBjb25zdGFudHMgdXNlZCB3aXRoaW4gdGhlIGBmbGFncycgZmllbGQgb2YgdGhlCisgICAqICAgQEZUX09wZW5fQXJncyBzdHJ1Y3R1cmUuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfT1BFTl9NRU1PUlkgOjoKKyAgICogICAgIFRoaXMgaXMgYSBtZW1vcnktYmFzZWQgc3RyZWFtLgorICAgKgorICAgKiAgIEZUX09QRU5fU1RSRUFNIDo6CisgICAqICAgICBDb3B5IHRoZSBzdHJlYW0gZnJvbSB0aGUgYHN0cmVhbScgZmllbGQuCisgICAqCisgICAqICAgRlRfT1BFTl9QQVRITkFNRSA6OgorICAgKiAgICAgQ3JlYXRlIGEgbmV3IGlucHV0IHN0cmVhbSBmcm9tIGEgQ35wYXRoCisgICAqICAgICBuYW1lLgorICAgKgorICAgKiAgIEZUX09QRU5fRFJJVkVSIDo6CisgICAqICAgICBVc2UgdGhlIGBkcml2ZXInIGZpZWxkLgorICAgKgorICAgKiAgIEZUX09QRU5fUEFSQU1TIDo6CisgICAqICAgICBVc2UgdGhlIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgZmllbGRzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgYEZUX09QRU5fTUVNT1JZJywgYEZUX09QRU5fU1RSRUFNJywgYW5kIGBGVF9PUEVOX1BBVEhOQU1FJworICAgKiAgIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgICAqLwogI2RlZmluZSBGVF9PUEVOX01FTU9SWSAgICAweDEKICNkZWZpbmUgRlRfT1BFTl9TVFJFQU0gICAgMHgyCiAjZGVmaW5lIEZUX09QRU5fUEFUSE5BTUUgIDB4NApAQCAtMjA0NywyNCArMjExNiwyNiBAQAogI2RlZmluZSBmdF9vcGVuX3BhcmFtcyAgICBGVF9PUEVOX1BBUkFNUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzaW1wbGUgc3RydWN0dXJlIHRvIHBhc3MgbW9yZSBvciBsZXNzIGdlbmVyaWMgcGFyYW1ldGVycyB0byAgICAgICovCi0gIC8qICAgIEBGVF9PcGVuX0ZhY2UgYW5kIEBGVF9GYWNlX1Byb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhZyAgOjogQSBmb3VyLWJ5dGUgaWRlbnRpZmljYXRpb24gdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGF0YSA6OiBBIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIElEIGFuZCBmdW5jdGlvbiBvZiBwYXJhbWV0ZXJzIGFyZSBkcml2ZXItc3BlY2lmaWMuICBTZWUgdGhlICAgICovCi0gIC8qICAgIHZhcmlvdXMgRlRfUEFSQU1fVEFHX1hYWCBmbGFncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfUGFyYW1ldGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdG8gcGFzcyBtb3JlIG9yIGxlc3MgZ2VuZXJpYyBwYXJhbWV0ZXJzIHRvCisgICAqICAgQEZUX09wZW5fRmFjZSBhbmQgQEZUX0ZhY2VfUHJvcGVydGllcy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB0YWcgOjoKKyAgICogICAgIEEgZm91ci1ieXRlIGlkZW50aWZpY2F0aW9uIHRhZy4KKyAgICoKKyAgICogICBkYXRhIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkYXRhLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgSUQgYW5kIGZ1bmN0aW9uIG9mIHBhcmFtZXRlcnMgYXJlIGRyaXZlci1zcGVjaWZpYy4gIFNlZQorICAgKiAgIHNlY3Rpb24gQHBhcmFtZXRlcl90YWdzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1BhcmFtZXRlcl8KICAgewogICAgIEZUX1VMb25nICAgIHRhZzsKQEAgLTIwNzMsNjUgKzIxNDQsNzMgQEAKICAgfSBGVF9QYXJhbWV0ZXI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB0byBpbmRpY2F0ZSBob3cgdG8gb3BlbiBhIG5ldyBmb250IGZpbGUgb3Igc3RyZWFtLiAgQSAgKi8KLSAgLyogICAgcG9pbnRlciB0byBzdWNoIGEgc3RydWN0dXJlIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyIGZvciB0aGUgICAgICovCi0gIC8qICAgIGZ1bmN0aW9ucyBARlRfT3Blbl9GYWNlIGFuZCBARlRfQXR0YWNoX1N0cmVhbS4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZsYWdzICAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBpbmRpY2F0aW5nIGhvdyB0byB1c2UgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeV9iYXNlIDo6IFRoZSBmaXJzdCBieXRlIG9mIHRoZSBmaWxlIGluIG1lbW9yeS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5X3NpemUgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGZpbGUgaW4gbWVtb3J5LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXRobmFtZSAgICA6OiBBIHBvaW50ZXIgdG8gYW4gOC1iaXQgZmlsZSBwYXRobmFtZS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgc291cmNlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZHJpdmVyICAgICAgOjogVGhpcyBmaWVsZCBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IEBGVF9PcGVuX0ZhY2U7ICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGl0IHNpbXBseSBzcGVjaWZpZXMgdGhlIGZvbnQgZHJpdmVyIHRvIHVzZSBmb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBvcGVuaW5nIHRoZSBmYWNlLiAgSWYgc2V0IHRvIE5VTEwsIEZyZWVUeXBlIHRyaWVzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgdG8gbG9hZCB0aGUgZmFjZSB3aXRoIGVhY2ggb25lIG9mIHRoZSBkcml2ZXJzIGluICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGl0cyBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3BhcmFtcyAgOjogVGhlIG51bWJlciBvZiBleHRyYSBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXJhbXMgICAgICA6OiBFeHRyYSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZm9udCBkcml2ZXIgd2hlbiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgb3BlbmluZyBhIG5ldyBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN0cmVhbSB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnRzIG9mIGBmbGFncycgdGhhdCAgICAgICovCi0gIC8qICAgIGFyZSB0ZXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBieSBARlRfT3Blbl9GYWNlOiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIEBGVF9PUEVOX01FTU9SWSBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCB0aGlzIGlzIGEgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSBmaWxlIG9mIGBtZW1vcnlfc2l6ZScgYnl0ZXMsIGxvY2F0ZWQgYXQgYG1lbW9yeV9hZGRyZXNzJy4gICAqLwotICAvKiAgICBUaGUgZGF0YSBhcmUgbm90IGNvcGllZCwgYW5kIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yICAgICAgICAgKi8KLSAgLyogICAgcmVsZWFzaW5nIGFuZCBkZXN0cm95aW5nIHRoZW0gX2FmdGVyXyB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvICAgICovCi0gIC8qICAgIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3RoZXJ3aXNlLCBpZiB0aGUgQEZUX09QRU5fU1RSRUFNIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IGEgICAgICAgICovCi0gIC8qICAgIGN1c3RvbSBpbnB1dCBzdHJlYW0gYHN0cmVhbScgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3RoZXJ3aXNlLCBpZiB0aGUgQEZUX09QRU5fUEFUSE5BTUUgYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyAgICovCi0gIC8qICAgIGlzIGEgbm9ybWFsIGZpbGUgYW5kIHVzZSBgcGF0aG5hbWUnIHRvIG9wZW4gaXQuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIEBGVF9PUEVOX0RSSVZFUiBiaXQgaXMgc2V0LCBARlRfT3Blbl9GYWNlIG9ubHkgdHJpZXMgdG8gICAgICovCi0gIC8qICAgIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgZHJpdmVyIHdob3NlIGhhbmRsZXIgaXMgaW4gYGRyaXZlcicuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIEBGVF9PUEVOX1BBUkFNUyBiaXQgaXMgc2V0LCB0aGUgcGFyYW1ldGVycyBnaXZlbiBieSAgICAgICAgICovCi0gIC8qICAgIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgaXMgdXNlZC4gIFRoZXkgYXJlIGlnbm9yZWQgb3RoZXJ3aXNlLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWRlYWxseSwgYm90aCB0aGUgYHBhdGhuYW1lJyBhbmQgYHBhcmFtcycgZmllbGRzIHNob3VsZCBiZSB0YWdnZWQgICovCi0gIC8qICAgIGFzIGBjb25zdCc7IHRoaXMgaXMgbWlzc2luZyBmb3IgQVBJIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBJbiAgICAqLwotICAvKiAgICBvdGhlciB3b3JkcywgYXBwbGljYXRpb25zIHNob3VsZCB0cmVhdCB0aGVtIGFzIHJlYWQtb25seS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX09wZW5fQXJncworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgaG93IHRvIG9wZW4gYSBuZXcgZm9udCBmaWxlIG9yIHN0cmVhbS4gIEEKKyAgICogICBwb2ludGVyIHRvIHN1Y2ggYSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgYXMgYSBwYXJhbWV0ZXIgZm9yIHRoZQorICAgKiAgIGZ1bmN0aW9ucyBARlRfT3Blbl9GYWNlIGFuZCBARlRfQXR0YWNoX1N0cmVhbS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBmbGFncyA6OgorICAgKiAgICAgQSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgaG93IHRvIHVzZSB0aGUKKyAgICogICAgIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICBtZW1vcnlfYmFzZSA6OgorICAgKiAgICAgVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpbGUgaW4gbWVtb3J5LgorICAgKgorICAgKiAgIG1lbW9yeV9zaXplIDo6CisgICAqICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZmlsZSBpbiBtZW1vcnkuCisgICAqCisgICAqICAgcGF0aG5hbWUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiA4LWJpdCBmaWxlIHBhdGhuYW1lLgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBzb3VyY2Ugc3RyZWFtIG9iamVjdC4KKyAgICoKKyAgICogICBkcml2ZXIgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgZXhjbHVzaXZlbHkgdXNlZCBieSBARlRfT3Blbl9GYWNlOworICAgKiAgICAgaXQgc2ltcGx5IHNwZWNpZmllcyB0aGUgZm9udCBkcml2ZXIgdG8gdXNlIGZvcgorICAgKiAgICAgb3BlbmluZyB0aGUgZmFjZS4gIElmIHNldCB0byBOVUxMLCBGcmVlVHlwZSB0cmllcworICAgKiAgICAgdG8gbG9hZCB0aGUgZmFjZSB3aXRoIGVhY2ggb25lIG9mIHRoZSBkcml2ZXJzIGluCisgICAqICAgICBpdHMgbGlzdC4KKyAgICoKKyAgICogICBudW1fcGFyYW1zIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGV4dHJhIHBhcmFtZXRlcnMuCisgICAqCisgICAqICAgcGFyYW1zIDo6CisgICAqICAgICBFeHRyYSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZm9udCBkcml2ZXIgd2hlbgorICAgKiAgICAgb3BlbmluZyBhIG5ldyBmYWNlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgc3RyZWFtIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudHMgb2YgYGZsYWdzJyB0aGF0CisgICAqICAgIGFyZSB0ZXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBieSBARlRfT3Blbl9GYWNlOgorICAgKgorICAgKiAgIElmIHRoZSBARlRfT1BFTl9NRU1PUlkgYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhCisgICAqICAgbWVtb3J5IGZpbGUgb2YgYG1lbW9yeV9zaXplJyBieXRlcywgbG9jYXRlZCBhdCBgbWVtb3J5X2FkZHJlc3MnLgorICAgKiAgIFRoZSBkYXRhIGFyZSBub3QgY29waWVkLCBhbmQgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IKKyAgICogICByZWxlYXNpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbSBfYWZ0ZXJfIHRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8KKyAgICogICBARlRfRG9uZV9GYWNlLgorICAgKgorICAgKiAgIE90aGVyd2lzZSwgaWYgdGhlIEBGVF9PUEVOX1NUUkVBTSBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCBhCisgICAqICAgY3VzdG9tIGlucHV0IHN0cmVhbSBgc3RyZWFtJyBpcyB1c2VkLgorICAgKgorICAgKiAgIE90aGVyd2lzZSwgaWYgdGhlIEBGVF9PUEVOX1BBVEhOQU1FIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IHRoaXMKKyAgICogICBpcyBhIG5vcm1hbCBmaWxlIGFuZCB1c2UgYHBhdGhuYW1lJyB0byBvcGVuIGl0LgorICAgKgorICAgKiAgIElmIHRoZSBARlRfT1BFTl9EUklWRVIgYml0IGlzIHNldCwgQEZUX09wZW5fRmFjZSBvbmx5IHRyaWVzIHRvCisgICAqICAgb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBkcml2ZXIgd2hvc2UgaGFuZGxlciBpcyBpbiBgZHJpdmVyJy4KKyAgICoKKyAgICogICBJZiB0aGUgQEZUX09QRU5fUEFSQU1TIGJpdCBpcyBzZXQsIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIGJ5CisgICAqICAgYG51bV9wYXJhbXMnIGFuZCBgcGFyYW1zJyBpcyB1c2VkLiAgVGhleSBhcmUgaWdub3JlZCBvdGhlcndpc2UuCisgICAqCisgICAqICAgSWRlYWxseSwgYm90aCB0aGUgYHBhdGhuYW1lJyBhbmQgYHBhcmFtcycgZmllbGRzIHNob3VsZCBiZSB0YWdnZWQKKyAgICogICBhcyBgY29uc3QnOyB0aGlzIGlzIG1pc3NpbmcgZm9yIEFQSSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgSW4KKyAgICogICBvdGhlciB3b3JkcywgYXBwbGljYXRpb25zIHNob3VsZCB0cmVhdCB0aGVtIGFzIHJlYWQtb25seS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9PcGVuX0FyZ3NfCiAgIHsKICAgICBGVF9VSW50ICAgICAgICAgZmxhZ3M7CkBAIC0yMTQ2LDM0ICsyMjI1LDM4IEBACiAgIH0gRlRfT3Blbl9BcmdzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2FsbCBARlRfT3Blbl9GYWNlIHRvIG9wZW4gYSBmb250IGJ5IGl0cyBwYXRobmFtZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGF0aG5hbWUgICA6OiBBIHBhdGggdG8gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFNlZSBARlRfT3Blbl9GYWNlIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgKi8KLSAgLyogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZSBARlRfRG9uZV9GYWNlIHRvIGRlc3Ryb3kgdGhlIGNyZWF0ZWQgQEZUX0ZhY2Ugb2JqZWN0IChhbG9uZyAgICAqLwotICAvKiAgICB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENhbGwgQEZUX09wZW5fRmFjZSB0byBvcGVuIGEgZm9udCBieSBpdHMgcGF0aG5hbWUuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHBhdGhuYW1lIDo6CisgICAqICAgICBBIHBhdGggdG8gdGhlIGZvbnQgZmlsZS4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBTZWUgQEZUX09wZW5fRmFjZSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzCisgICAqICAgICBwYXJhbWV0ZXIuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzCisgICAqICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBVc2UgQEZUX0RvbmVfRmFjZSB0byBkZXN0cm95IHRoZSBjcmVhdGVkIEBGVF9GYWNlIG9iamVjdCAoYWxvbmcKKyAgICogICB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X0ZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSwKQEAgLTIxODEsMzYgKzIyNjQsNDEgQEAKICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X01lbW9yeV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2FsbCBARlRfT3Blbl9GYWNlIHRvIG9wZW4gYSBmb250IHRoYXQgaGFzIGJlZW4gbG9hZGVkIGludG8gICAgICAgICovCi0gIC8qICAgIG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZpbGVfYmFzZSAgOjogQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZvbnQgZGF0YS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmlsZV9zaXplICA6OiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFNlZSBARlRfT3Blbl9GYWNlIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgKi8KLSAgLyogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFlvdSBtdXN0IG5vdCBkZWFsbG9jYXRlIHRoZSBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgQEZUX0RvbmVfRmFjZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9OZXdfTWVtb3J5X0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENhbGwgQEZUX09wZW5fRmFjZSB0byBvcGVuIGEgZm9udCB0aGF0IGhhcyBiZWVuIGxvYWRlZCBpbnRvCisgICAqICAgbWVtb3J5LgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmaWxlX2Jhc2UgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb250IGRhdGEuCisgICAqCisgICAqICAgZmlsZV9zaXplIDo6CisgICAqICAgICBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBTZWUgQEZUX09wZW5fRmFjZSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzCisgICAqICAgICBwYXJhbWV0ZXIuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzCisgICAqICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3UgbXVzdCBub3QgZGVhbGxvY2F0ZSB0aGUgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIEBGVF9Eb25lX0ZhY2UuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X01lbW9yeV9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgZmlsZV9iYXNlLApAQCAtMjIxOSwxNDcgKzIzMDcsMTUyIEBACiAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgKmFmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PcGVuX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGUgYSBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcmVzb3VyY2UgZGVzY3JpYmVkIGJ5ICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX09wZW5fQXJncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXJncyAgICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYEZUX09wZW5fQXJncycgc3RydWN0dXJlIHRoYXQgbXVzdCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIGJ5IHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZV9pbmRleCA6OiBUaGlzIGZpZWxkIGhvbGRzIHR3byBkaWZmZXJlbnQgdmFsdWVzLiAgQml0cyAwLTE1ICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYXJlIHRoZSBpbmRleCBvZiB0aGUgZmFjZSBpbiB0aGUgZm9udCBmaWxlIChzdGFydGluZyAqLwotICAvKiAgICAgICAgICAgICAgICAgIHdpdGggdmFsdWV+MCkuICBTZXQgaXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGluIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIFtTaW5jZSAyLjYuMV0gQml0cyAxNi0zMCBhcmUgcmVsZXZhbnQgdG8gR1ggYW5kICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMgb25seSwgc3BlY2lmeWluZyB0aGUgbmFtZWQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGZhY2UgaW5kZXggKHN0YXJ0aW5nICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHdpdGggdmFsdWV+MTsgdmFsdWV+MCBtYWtlcyBGcmVlVHlwZSBpZ25vcmUgbmFtZWQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpLiAgRm9yIG5vbi12YXJpYXRpb24gZm9udHMsIGJpdHMgMTYtMzAgYXJlICovCi0gIC8qICAgICAgICAgICAgICAgICAgaWdub3JlZC4gIEFzc3VtaW5nIHRoYXQgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB0aGlyZCAqLwotICAvKiAgICAgICAgICAgICAgICAgIG5hbWVkIGluc3RhbmNlIGluIGZhY2V+NCwgYGZhY2VfaW5kZXgnIHNob3VsZCBiZSBzZXQgKi8KLSAgLyogICAgICAgICAgICAgICAgICB0byAweDAwMDMwMDA0LiAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZhY2V+NCB3aXRob3V0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uIGhhbmRsaW5nLCBzaW1wbHkgc2V0IGBmYWNlX2luZGV4JyB0byAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlfjQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYEZUX09wZW5fRmFjZScgYW5kIGl0cyBzaWJsaW5ncyBjYW4gYmUgdXNlZCB0byAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHF1aWNrbHkgY2hlY2sgd2hldGhlciB0aGUgZm9udCBmb3JtYXQgb2YgYSBnaXZlbiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmb250IHJlc291cmNlIGlzIHN1cHBvcnRlZCBieSBGcmVlVHlwZS4gIEluIGdlbmVyYWwsICovCi0gIC8qICAgICAgICAgICAgICAgICAgaWYgdGhlIGBmYWNlX2luZGV4JyBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzfjAgaWYgdGhlIGZvbnQgZm9ybWF0IGlzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICByZWNvZ25pemVkLCBvciBub24temVybyBvdGhlcndpc2UuICBUaGUgZnVuY3Rpb24gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYWxsb2NhdGVzIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGAqYWZhY2UnIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpOyB0aGUgb25seSB0d28gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICB1c2VmdWwgZmllbGRzIGluIHRoaXMgc3BlY2lhbCBjYXNlIGFyZSAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYGZhY2UtPm51bV9mYWNlcycgYW5kIGBmYWNlLT5zdHlsZV9mbGFncycuICBGb3IgYW55ICAqLwotICAvKiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHZhbHVlIG9mIGBmYWNlX2luZGV4JywgYGZhY2UtPm51bV9mYWNlcycgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBnaXZlcyB0aGUgbnVtYmVyIG9mIGZhY2VzIHdpdGhpbiB0aGUgZm9udCBmaWxlLiAgRm9yICovCi0gIC8qICAgICAgICAgICAgICAgICAgdGhlIG5lZ2F0aXZlIHZhbHVlIGAtKE4rMSknICh3aXRoIGBOJyBhIG5vbi1uZWdhdGl2ZSAqLwotICAvKiAgICAgICAgICAgICAgICAgIDE2LWJpdCB2YWx1ZSksIGJpdHMgMTYtMzAgaW4gYGZhY2UtPnN0eWxlX2ZsYWdzJyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBnaXZlIHRoZSBudW1iZXIgb2YgbmFtZWQgaW5zdGFuY2VzIGluIGZhY2UgYE4nIGlmIHdlICovCi0gIC8qICAgICAgICAgICAgICAgICAgaGF2ZSBhIHZhcmlhdGlvbiBmb250IChvciB6ZXJvIG90aGVyd2lzZSkuICBBZnRlciAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGV4YW1pbmF0aW9uLCB0aGUgcmV0dXJuZWQgQEZUX0ZhY2Ugc3RydWN0dXJlIHNob3VsZCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVubGlrZSBGcmVlVHlwZSAxLngsIHRoaXMgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjcmVhdGVzIGEgZ2x5cGggICAqLwotICAvKiAgICBzbG90IGZvciB0aGUgZmFjZSBvYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdGhyb3VnaCAgICAgKi8KLSAgLyogICAgYGZhY2UtPmdseXBoJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFYWNoIG5ldyBmYWNlIG9iamVjdCBjcmVhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBhbHNvIG93bnMgYSAgICAgICAgKi8KLSAgLyogICAgZGVmYXVsdCBARlRfU2l6ZSBvYmplY3QsIGFjY2Vzc2libGUgYXMgYGZhY2UtPnNpemUnLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmUgQEZUX0xpYnJhcnkgaW5zdGFuY2UgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZSBvYmplY3RzLCB0aGlzIGlzLCAgKi8KLSAgLyogICAgQEZUX09wZW5fRmFjZSBhbmQgaXRzIHNpYmxpbmdzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdXNpbmcgICovCi0gIC8qICAgIHRoZSBzYW1lIGBsaWJyYXJ5JyBhcmd1bWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCi0gIC8qICAgIEBGVF9SZWZlcmVuY2VfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gbG9vcCBvdmVyIGFsbCBmYWNlcywgdXNlIGNvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHNuaXBwZXQgICovCi0gIC8qICAgIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZUX0ZhY2UgIGZhY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9Mb25nICBpLCBudW1fZmFjZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgYXJncywgLTEsICZmYWNlICk7ICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaWYgKCBlcnJvciApIHsgLi4uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBudW1fZmFjZXMgPSBmYWNlLT5udW1fZmFjZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRlRfRG9uZV9GYWNlKCBmYWNlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9mYWNlczsgaSsrICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCBhcmdzLCBpLCAmZmFjZSApOyAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgRlRfRG9uZV9GYWNlKCBmYWNlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRvIGxvb3Agb3ZlciBhbGwgdmFsaWQgdmFsdWVzIGZvciBgZmFjZV9pbmRleCcsIHVzZSBzb21ldGhpbmcgICAgICAqLwotICAvKiAgICBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc25pcHBldCwgYWdhaW4gd2l0aG91dCBlcnJvciBoYW5kbGluZy4gICAgKi8KLSAgLyogICAgVGhlIGNvZGUgYWNjZXNzZXMgYWxsIGZhY2VzIGltbWVkaWF0ZWx5ICh0aHVzIG9ubHkgYSBzaW5nbGUgY2FsbCAgICovCi0gIC8qICAgIG9mIGBGVF9PcGVuX0ZhY2UnIHdpdGhpbiB0aGUgZG8tbG9vcCksIHdpdGggYW5kIHdpdGhvdXQgbmFtZWQgICAgICAqLwotICAvKiAgICBpbnN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9GYWNlICBmYWNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZUX0xvbmcgIG51bV9mYWNlcyAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9Mb25nICBudW1faW5zdGFuY2VzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZUX0xvbmcgIGZhY2VfaWR4ICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9Mb25nICBpbnN0YW5jZV9pZHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgRlRfTG9uZyAgaWQgPSAoIGluc3RhbmNlX2lkeCA8PCAxNiApICsgZmFjZV9pZHg7ICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksIGFyZ3MsIGlkLCAmZmFjZSApOyAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIGlmICggZXJyb3IgKSB7IC4uLiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgbnVtX2ZhY2VzICAgICA9IGZhY2UtPm51bV9mYWNlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIG51bV9pbnN0YW5jZXMgPSBmYWNlLT5zdHlsZV9mbGFncyA+PiAxNjsgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIGlmICggaW5zdGFuY2VfaWR4IDwgbnVtX2luc3RhbmNlcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIGluc3RhbmNlX2lkeCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIGZhY2VfaWR4Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICBpbnN0YW5jZV9pZHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIH0gd2hpbGUgKCBmYWNlX2lkeCA8IG51bV9mYWNlcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX09wZW5fRmFjZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ3JlYXRlIGEgZmFjZSBvYmplY3QgZnJvbSBhIGdpdmVuIHJlc291cmNlIGRlc2NyaWJlZCBieQorICAgKiAgIEBGVF9PcGVuX0FyZ3MuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGFyZ3MgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiBgRlRfT3Blbl9BcmdzJyBzdHJ1Y3R1cmUgdGhhdCBtdXN0CisgICAqICAgICBiZSBmaWxsZWQgYnkgdGhlIGNhbGxlci4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBUaGlzIGZpZWxkIGhvbGRzIHR3byBkaWZmZXJlbnQgdmFsdWVzLiAgQml0cyAwLTE1CisgICAqICAgICBhcmUgdGhlIGluZGV4IG9mIHRoZSBmYWNlIGluIHRoZSBmb250IGZpbGUgKHN0YXJ0aW5nCisgICAqICAgICB3aXRoIHZhbHVlfjApLiAgU2V0IGl0IHRvfjAgaWYgdGhlcmUgaXMgb25seSBvbmUKKyAgICogICAgIGZhY2UgaW4gdGhlIGZvbnQgZmlsZS4KKyAgICoKKyAgICogICAgIFtTaW5jZSAyLjYuMV0gQml0cyAxNi0zMCBhcmUgcmVsZXZhbnQgdG8gR1ggYW5kCisgICAqICAgICBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMgb25seSwgc3BlY2lmeWluZyB0aGUgbmFtZWQKKyAgICogICAgIGluc3RhbmNlIGluZGV4IGZvciB0aGUgY3VycmVudCBmYWNlIGluZGV4IChzdGFydGluZworICAgKiAgICAgd2l0aCB2YWx1ZX4xOyB2YWx1ZX4wIG1ha2VzIEZyZWVUeXBlIGlnbm9yZSBuYW1lZAorICAgKiAgICAgaW5zdGFuY2VzKS4gIEZvciBub24tdmFyaWF0aW9uIGZvbnRzLCBiaXRzIDE2LTMwIGFyZQorICAgKiAgICAgaWdub3JlZC4gIEFzc3VtaW5nIHRoYXQgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB0aGlyZAorICAgKiAgICAgbmFtZWQgaW5zdGFuY2UgaW4gZmFjZX40LCBgZmFjZV9pbmRleCcgc2hvdWxkIGJlIHNldAorICAgKiAgICAgdG8gMHgwMDAzMDAwNC4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmYWNlfjQgd2l0aG91dAorICAgKiAgICAgdmFyaWF0aW9uIGhhbmRsaW5nLCBzaW1wbHkgc2V0IGBmYWNlX2luZGV4JyB0bworICAgKiAgICAgdmFsdWV+NC4KKyAgICoKKyAgICogICAgIGBGVF9PcGVuX0ZhY2UnIGFuZCBpdHMgc2libGluZ3MgY2FuIGJlIHVzZWQgdG8KKyAgICogICAgIHF1aWNrbHkgY2hlY2sgd2hldGhlciB0aGUgZm9udCBmb3JtYXQgb2YgYSBnaXZlbgorICAgKiAgICAgZm9udCByZXNvdXJjZSBpcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGUuICBJbiBnZW5lcmFsLAorICAgKiAgICAgaWYgdGhlIGBmYWNlX2luZGV4JyBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgdGhlCisgICAqICAgICBmdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpc34wIGlmIHRoZSBmb250IGZvcm1hdCBpcworICAgKiAgICAgcmVjb2duaXplZCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLiAgVGhlIGZ1bmN0aW9uCisgICAqICAgICBhbGxvY2F0ZXMgYSBtb3JlIG9yIGxlc3MgZW1wdHkgZmFjZSBoYW5kbGUgaW4KKyAgICogICAgIGAqYWZhY2UnIChpZiBgYWZhY2UnIGlzbid0IE5VTEwpOyB0aGUgb25seSB0d28KKyAgICogICAgIHVzZWZ1bCBmaWVsZHMgaW4gdGhpcyBzcGVjaWFsIGNhc2UgYXJlCisgICAqICAgICBgZmFjZS0+bnVtX2ZhY2VzJyBhbmQgYGZhY2UtPnN0eWxlX2ZsYWdzJy4gIEZvciBhbnkKKyAgICogICAgIG5lZ2F0aXZlIHZhbHVlIG9mIGBmYWNlX2luZGV4JywgYGZhY2UtPm51bV9mYWNlcycKKyAgICogICAgIGdpdmVzIHRoZSBudW1iZXIgb2YgZmFjZXMgd2l0aGluIHRoZSBmb250IGZpbGUuICBGb3IKKyAgICogICAgIHRoZSBuZWdhdGl2ZSB2YWx1ZSBgLShOKzEpJyAod2l0aCBgTicgYSBub24tbmVnYXRpdmUKKyAgICogICAgIDE2LWJpdCB2YWx1ZSksIGJpdHMgMTYtMzAgaW4gYGZhY2UtPnN0eWxlX2ZsYWdzJworICAgKiAgICAgZ2l2ZSB0aGUgbnVtYmVyIG9mIG5hbWVkIGluc3RhbmNlcyBpbiBmYWNlIGBOJyBpZiB3ZQorICAgKiAgICAgaGF2ZSBhIHZhcmlhdGlvbiBmb250IChvciB6ZXJvIG90aGVyd2lzZSkuICBBZnRlcgorICAgKiAgICAgZXhhbWluYXRpb24sIHRoZSByZXR1cm5lZCBARlRfRmFjZSBzdHJ1Y3R1cmUgc2hvdWxkCisgICAqICAgICBiZSBkZWFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0byBARlRfRG9uZV9GYWNlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcworICAgKiAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVW5saWtlIEZyZWVUeXBlIDEueCwgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBnbHlwaAorICAgKiAgIHNsb3QgZm9yIHRoZSBmYWNlIG9iamVjdCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB0aHJvdWdoCisgICAqICAgYGZhY2UtPmdseXBoJy4KKyAgICoKKyAgICogICBFYWNoIG5ldyBmYWNlIG9iamVjdCBjcmVhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBhbHNvIG93bnMgYQorICAgKiAgIGRlZmF1bHQgQEZUX1NpemUgb2JqZWN0LCBhY2Nlc3NpYmxlIGFzIGBmYWNlLT5zaXplJy4KKyAgICoKKyAgICogICBPbmUgQEZUX0xpYnJhcnkgaW5zdGFuY2UgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZSBvYmplY3RzLCB0aGlzIGlzLAorICAgKiAgIEBGVF9PcGVuX0ZhY2UgYW5kIGl0cyBzaWJsaW5ncyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHVzaW5nCisgICAqICAgdGhlIHNhbWUgYGxpYnJhcnknIGFyZ3VtZW50LgorICAgKgorICAgKiAgIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiByZWZlcmVuY2UgY291bnRlcnMgaW4gdGhlIGRlc2NyaXB0aW9uIG9mCisgICAqICAgQEZUX1JlZmVyZW5jZV9GYWNlLgorICAgKgorICAgKiBAZXhhbXBsZToKKyAgICogICBUbyBsb29wIG92ZXIgYWxsIGZhY2VzLCB1c2UgY29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc25pcHBldAorICAgKiAgIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIC4uLgorICAgKiAgICAgRlRfRmFjZSAgZmFjZTsKKyAgICogICAgIEZUX0xvbmcgIGksIG51bV9mYWNlczsKKyAgICoKKyAgICoKKyAgICogICAgIGVycm9yID0gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCBhcmdzLCAtMSwgJmZhY2UgKTsKKyAgICogICAgIGlmICggZXJyb3IgKSB7IC4uLiB9CisgICAqCisgICAqICAgICBudW1fZmFjZXMgPSBmYWNlLT5udW1fZmFjZXM7CisgICAqICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsKKyAgICoKKyAgICogICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2ZhY2VzOyBpKysgKQorICAgKiAgICAgeworICAgKiAgICAgICAuLi4KKyAgICogICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksIGFyZ3MsIGksICZmYWNlICk7CisgICAqICAgICAgIC4uLgorICAgKiAgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsKKyAgICogICAgICAgLi4uCisgICAqICAgICB9CisgICAqICAgfQorICAgKgorICAgKiAgIFRvIGxvb3Agb3ZlciBhbGwgdmFsaWQgdmFsdWVzIGZvciBgZmFjZV9pbmRleCcsIHVzZSBzb21ldGhpbmcKKyAgICogICBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgc25pcHBldCwgYWdhaW4gd2l0aG91dCBlcnJvciBoYW5kbGluZy4KKyAgICogICBUaGUgY29kZSBhY2Nlc3NlcyBhbGwgZmFjZXMgaW1tZWRpYXRlbHkgKHRodXMgb25seSBhIHNpbmdsZSBjYWxsCisgICAqICAgb2YgYEZUX09wZW5fRmFjZScgd2l0aGluIHRoZSBkby1sb29wKSwgd2l0aCBhbmQgd2l0aG91dCBuYW1lZAorICAgKiAgIGluc3RhbmNlcy4KKyAgICoKKyAgICogICB7CisgICAqICAgICAuLi4KKyAgICogICAgIEZUX0ZhY2UgIGZhY2U7CisgICAqCisgICAqICAgICBGVF9Mb25nICBudW1fZmFjZXMgICAgID0gMDsKKyAgICogICAgIEZUX0xvbmcgIG51bV9pbnN0YW5jZXMgPSAwOworICAgKgorICAgKiAgICAgRlRfTG9uZyAgZmFjZV9pZHggICAgID0gMDsKKyAgICogICAgIEZUX0xvbmcgIGluc3RhbmNlX2lkeCA9IDA7CisgICAqCisgICAqCisgICAqICAgICBkbworICAgKiAgICAgeworICAgKiAgICAgICBGVF9Mb25nICBpZCA9ICggaW5zdGFuY2VfaWR4IDw8IDE2ICkgKyBmYWNlX2lkeDsKKyAgICoKKyAgICoKKyAgICogICAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksIGFyZ3MsIGlkLCAmZmFjZSApOworICAgKiAgICAgICBpZiAoIGVycm9yICkgeyAuLi4gfQorICAgKgorICAgKiAgICAgICBudW1fZmFjZXMgICAgID0gZmFjZS0+bnVtX2ZhY2VzOworICAgKiAgICAgICBudW1faW5zdGFuY2VzID0gZmFjZS0+c3R5bGVfZmxhZ3MgPj4gMTY7CisgICAqCisgICAqICAgICAgIC4uLgorICAgKgorICAgKiAgICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsKKyAgICoKKyAgICogICAgICAgaWYgKCBpbnN0YW5jZV9pZHggPCBudW1faW5zdGFuY2VzICkKKyAgICogICAgICAgICBpbnN0YW5jZV9pZHgrKzsKKyAgICogICAgICAgZWxzZQorICAgKiAgICAgICB7CisgICAqICAgICAgICAgZmFjZV9pZHgrKzsKKyAgICogICAgICAgICBpbnN0YW5jZV9pZHggPSAwOworICAgKiAgICAgICB9CisgICAqCisgICAqICAgICB9IHdoaWxlICggZmFjZV9pZHggPCBudW1fZmFjZXMgKQorICAgKiAgIH0KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PcGVuX0ZhY2UoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgY29uc3QgRlRfT3Blbl9BcmdzKiAgYXJncywKQEAgLTIzNjcsMjA0ICsyNDYwLDIxMiBAQAogICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgICAgKmFmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BdHRhY2hfRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDYWxsIEBGVF9BdHRhY2hfU3RyZWFtIHRvIGF0dGFjaCBhIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICAgOjogVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmaWxlcGF0aG5hbWUgOjogVGhlIHBhdGhuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfQXR0YWNoX0ZpbGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENhbGwgQEZUX0F0dGFjaF9TdHJlYW0gdG8gYXR0YWNoIGEgZmlsZS4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmaWxlcGF0aG5hbWUgOjoKKyAgICogICAgIFRoZSBwYXRobmFtZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0F0dGFjaF9GaWxlKCBGVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F0dGFjaF9TdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBBdHRhY2gnIGRhdGEgdG8gYSBmYWNlIG9iamVjdC4gIE5vcm1hbGx5LCB0aGlzIGlzIHVzZWQgdG8gcmVhZCAgICAqLwotICAvKiAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgZmFjZSBvYmplY3QuICBGb3IgZXhhbXBsZSwgeW91IGNhbiAgKi8KLSAgLyogICAgYXR0YWNoIGFuIEFGTSBmaWxlIHRoYXQgY29tZXMgd2l0aCBhIFR5cGV+MSBmb250IHRvIGdldCB0aGUgICAgICAgICovCi0gIC8qICAgIGtlcm5pbmcgdmFsdWVzIGFuZCBvdGhlciBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhcmFtZXRlcnMgOjogQSBwb2ludGVyIHRvIEBGVF9PcGVuX0FyZ3MgdGhhdCBtdXN0IGJlIGZpbGxlZCBieSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbWVhbmluZyBvZiB0aGUgYGF0dGFjaCcgKGkuZS4sIHdoYXQgcmVhbGx5IGhhcHBlbnMgd2hlbiB0aGUgICAgKi8KLSAgLyogICAgbmV3IGZpbGUgaXMgcmVhZCkgaXMgbm90IGZpeGVkIGJ5IEZyZWVUeXBlIGl0c2VsZi4gIEl0IHJlYWxseSAgICAgICovCi0gIC8qICAgIGRlcGVuZHMgb24gdGhlIGZvbnQgZm9ybWF0IChhbmQgdGh1cyB0aGUgZm9udCBkcml2ZXIpLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2xpZW50IGFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nICAgICAgICovCi0gIC8qICAgIHdoZW4gaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gIE1vc3QgZHJpdmVycyBzaW1wbHkgZG8gbm90IGltcGxlbWVudCAqLwotICAvKiAgICBmaWxlIG9yIHN0cmVhbSBhdHRhY2htZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfQXR0YWNoX1N0cmVhbQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgYEF0dGFjaCcgZGF0YSB0byBhIGZhY2Ugb2JqZWN0LiAgTm9ybWFsbHksIHRoaXMgaXMgdXNlZCB0byByZWFkCisgICAqICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGZhY2Ugb2JqZWN0LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4KKyAgICogICBhdHRhY2ggYW4gQUZNIGZpbGUgdGhhdCBjb21lcyB3aXRoIGEgVHlwZX4xIGZvbnQgdG8gZ2V0IHRoZQorICAgKiAgIGtlcm5pbmcgdmFsdWVzIGFuZCBvdGhlciBtZXRyaWNzLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHBhcmFtZXRlcnMgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBARlRfT3Blbl9BcmdzIHRoYXQgbXVzdCBiZSBmaWxsZWQgYnkKKyAgICogICAgIHRoZSBjYWxsZXIuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIG1lYW5pbmcgb2YgdGhlIGBhdHRhY2gnIChpLmUuLCB3aGF0IHJlYWxseSBoYXBwZW5zIHdoZW4gdGhlCisgICAqICAgbmV3IGZpbGUgaXMgcmVhZCkgaXMgbm90IGZpeGVkIGJ5IEZyZWVUeXBlIGl0c2VsZi4gIEl0IHJlYWxseQorICAgKiAgIGRlcGVuZHMgb24gdGhlIGZvbnQgZm9ybWF0IChhbmQgdGh1cyB0aGUgZm9udCBkcml2ZXIpLgorICAgKgorICAgKiAgIENsaWVudCBhcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZworICAgKiAgIHdoZW4gaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gIE1vc3QgZHJpdmVycyBzaW1wbHkgZG8gbm90IGltcGxlbWVudAorICAgKiAgIGZpbGUgb3Igc3RyZWFtIGF0dGFjaG1lbnRzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0F0dGFjaF9TdHJlYW0oIEZUX0ZhY2UgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX09wZW5fQXJncyogIHBhcmFtZXRlcnMgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlZmVyZW5jZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgY291bnRlciBnZXRzIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlICAqLwotICAvKiAgICBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgQEZUX0RvbmVfRmFjZSAgKi8KLSAgLyogICAgdGhlbiBvbmx5IGRlc3Ryb3lzIGEgZmFjZSBpZiB0aGUgY291bnRlciBpc34xLCBvdGhlcndpc2UgaXQgc2ltcGx5ICovCi0gIC8qICAgIGRlY3JlbWVudHMgdGhlIGNvdW50ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBoZWxwcyBpbiBtYW5hZ2luZyBsaWZlLWN5Y2xlcyBvZiBzdHJ1Y3R1cmVzIHRoYXQgICAgICovCi0gIC8qICAgIHJlZmVyZW5jZSBARlRfRmFjZSBvYmplY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuNC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9SZWZlcmVuY2VfRmFjZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBjb3VudGVyIGdldHMgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiBARlRfRmFjZSBzdHJ1Y3R1cmUKKyAgICogICBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgQEZUX0RvbmVfRmFjZQorICAgKiAgIHRoZW4gb25seSBkZXN0cm95cyBhIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXN+MSwgb3RoZXJ3aXNlIGl0IHNpbXBseQorICAgKiAgIGRlY3JlbWVudHMgdGhlIGNvdW50ZXIuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBoZWxwcyBpbiBtYW5hZ2luZyBsaWZlLWN5Y2xlcyBvZiBzdHJ1Y3R1cmVzIHRoYXQKKyAgICogICByZWZlcmVuY2UgQEZUX0ZhY2Ugb2JqZWN0cy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjQuMgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1JlZmVyZW5jZV9GYWNlKCBGVF9GYWNlICBmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Eb25lX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEaXNjYXJkIGEgZ2l2ZW4gZmFjZSBvYmplY3QsIGFzIHdlbGwgYXMgYWxsIG9mIGl0cyBjaGlsZCBzbG90cyBhbmQgKi8KLSAgLyogICAgc2l6ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCi0gIC8qICAgIEBGVF9SZWZlcmVuY2VfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Eb25lX0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERpc2NhcmQgYSBnaXZlbiBmYWNlIG9iamVjdCwgYXMgd2VsbCBhcyBhbGwgb2YgaXRzIGNoaWxkIHNsb3RzIGFuZAorICAgKiAgIHNpemVzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICogICBARlRfUmVmZXJlbmNlX0ZhY2UuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfRG9uZV9GYWNlKCBGVF9GYWNlICBmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZWxlY3RfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWxlY3QgYSBiaXRtYXAgc3RyaWtlLiAgVG8gYmUgbW9yZSBwcmVjaXNlLCB0aGlzIGZ1bmN0aW9uIHNldHMgICAgKi8KLSAgLyogICAgdGhlIHNjYWxpbmcgZmFjdG9ycyBvZiB0aGUgYWN0aXZlIEBGVF9TaXplIG9iamVjdCBpbiBhIGZhY2Ugc28gICAgICovCi0gIC8qICAgIHRoYXQgYml0bWFwcyBmcm9tIHRoaXMgcGFydGljdWxhciBzdHJpa2UgYXJlIHRha2VuIGJ5ICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfTG9hZF9HbHlwaCBhbmQgZnJpZW5kcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICAgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJpa2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBiaXRtYXAgc3RyaWtlIGluIHRoZSAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIHN0cnVjdHVyZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9yIGJpdG1hcHMgZW1iZWRkZWQgaW4gb3V0bGluZSBmb250cyBpdCBpcyBjb21tb24gdGhhdCBvbmx5IGEgICAgICovCi0gIC8qICAgIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIGdseXBocyBhdCBhIGdpdmVuIHBwZW0gdmFsdWUgaXMgYXZhaWxhYmxlLiAqLwotICAvKiAgICBGcmVlVHlwZSBzaWxlbnRseSB1c2VzIG91dGxpbmVzIGlmIHRoZXJlIGlzIG5vIGJpdG1hcCBmb3IgYSBnaXZlbiAgKi8KLSAgLyogICAgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGb3IgR1ggYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cywgYSBiaXRtYXAgc3RyaWtlIG1ha2VzIHNlbnNlICAgKi8KLSAgLyogICAgb25seSBpZiB0aGUgZGVmYXVsdCBpbnN0YW5jZSBpcyBhY3RpdmUgKHRoaXMgaXMsIG5vIGdseXBoICAgICAgICAgICovCi0gIC8qICAgIHZhcmlhdGlvbiB0YWtlcyBwbGFjZSk7IG90aGVyd2lzZSwgRnJlZVR5cGUgc2ltcGx5IGlnbm9yZXMgYml0bWFwICAqLwotICAvKiAgICBzdHJpa2VzLiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYWxsIG5hbWVkIGluc3RhbmNlcyB0aGF0IGFyZSAgICAgICAgKi8KLSAgLyogICAgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2VsZWN0X1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFNlbGVjdCBhIGJpdG1hcCBzdHJpa2UuICBUbyBiZSBtb3JlIHByZWNpc2UsIHRoaXMgZnVuY3Rpb24gc2V0cworICAgKiAgIHRoZSBzY2FsaW5nIGZhY3RvcnMgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZSBvYmplY3QgaW4gYSBmYWNlIHNvCisgICAqICAgdGhhdCBiaXRtYXBzIGZyb20gdGhpcyBwYXJ0aWN1bGFyIHN0cmlrZSBhcmUgdGFrZW4gYnkKKyAgICogICBARlRfTG9hZF9HbHlwaCBhbmQgZnJpZW5kcy4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3RyaWtlX2luZGV4IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGJpdG1hcCBzdHJpa2UgaW4gdGhlCisgICAqICAgICBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiBARlRfRmFjZVJlYyBzdHJ1Y3R1cmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRm9yIGJpdG1hcHMgZW1iZWRkZWQgaW4gb3V0bGluZSBmb250cyBpdCBpcyBjb21tb24gdGhhdCBvbmx5IGEKKyAgICogICBzdWJzZXQgb2YgdGhlIGF2YWlsYWJsZSBnbHlwaHMgYXQgYSBnaXZlbiBwcGVtIHZhbHVlIGlzIGF2YWlsYWJsZS4KKyAgICogICBGcmVlVHlwZSBzaWxlbnRseSB1c2VzIG91dGxpbmVzIGlmIHRoZXJlIGlzIG5vIGJpdG1hcCBmb3IgYSBnaXZlbgorICAgKiAgIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIEZvciBHWCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzLCBhIGJpdG1hcCBzdHJpa2UgbWFrZXMgc2Vuc2UKKyAgICogICBvbmx5IGlmIHRoZSBkZWZhdWx0IGluc3RhbmNlIGlzIGFjdGl2ZSAodGhpcyBpcywgbm8gZ2x5cGgKKyAgICogICB2YXJpYXRpb24gdGFrZXMgcGxhY2UpOyBvdGhlcndpc2UsIEZyZWVUeXBlIHNpbXBseSBpZ25vcmVzIGJpdG1hcAorICAgKiAgIHN0cmlrZXMuICBUaGUgc2FtZSBpcyB0cnVlIGZvciBhbGwgbmFtZWQgaW5zdGFuY2VzIHRoYXQgYXJlCisgICAqICAgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgaW5zdGFuY2UuCisgICAqCisgICAqICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NlbGVjdF9TaXplKCBGVF9GYWNlICBmYWNlLAogICAgICAgICAgICAgICAgICAgRlRfSW50ICAgc3RyaWtlX2luZGV4ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBlbnVtZXJhdGlvbiB0eXBlIHRoYXQgbGlzdHMgdGhlIHN1cHBvcnRlZCBzaXplIHJlcXVlc3QgdHlwZXMsICAgKi8KLSAgLyogICAgaS5lLiwgd2hhdCBpbnB1dCBzaXplIChpbiBmb250IHVuaXRzKSBtYXBzIHRvIHRoZSByZXF1ZXN0ZWQgb3V0cHV0ICovCi0gIC8qICAgIHNpemUgKGluIHBpeGVscywgYXMgY29tcHV0ZWQgZnJvbSB0aGUgYXJndW1lbnRzIG9mICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfU2l6ZV9SZXF1ZXN0KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgbm9taW5hbCBzaXplLiAgVGhlIGB1bml0c19wZXJfRU0nIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzICAgICovCi0gIC8qICAgICAgdXNlZCB0byBkZXRlcm1pbmUgYm90aCBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGlzIGlzIHRoZSBzdGFuZGFyZCBzY2FsaW5nIGZvdW5kIGluIG1vc3QgYXBwbGljYXRpb25zLiAgSW4gICAgICovCi0gIC8qICAgICAgcGFydGljdWxhciwgdXNlIHRoaXMgc2l6ZSByZXF1ZXN0IHR5cGUgZm9yIFRydWVUeXBlIGZvbnRzIGlmICAgICAqLwotICAvKiAgICAgIHRoZXkgcHJvdmlkZSBvcHRpY2FsIHNjYWxpbmcgb3Igc29tZXRoaW5nIHNpbWlsYXIuICBOb3RlLCAgICAgICAgKi8KLSAgLyogICAgICBob3dldmVyLCB0aGF0IGB1bml0c19wZXJfRU0nIGlzIGEgcmF0aGVyIGFic3RyYWN0IHZhbHVlIHdoaWNoICAgICovCi0gIC8qICAgICAgYmVhcnMgbm8gcmVsYXRpb24gdG8gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBnbHlwaHMgaW4gYSBmb250LiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHJlYWwgZGltZW5zaW9uLiAgVGhlIHN1bSBvZiB0aGUgYGFzY2VuZGVyJyBhbmQgKG1pbnVzIG9mKSAgICAqLwotICAvKiAgICAgIHRoZSBgZGVzY2VuZGVyJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMgaXMgdXNlZCB0byBkZXRlcm1pbmUgYm90aCAgKi8KLSAgLyogICAgICBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZm9udCBib3VuZGluZyBib3guICBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYGJib3gnIGZpZWxkICovCi0gIC8qICAgICAgb2YgQEZUX0ZhY2VSZWMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCAqLwotICAvKiAgICAgIHNjYWxpbmcgdmFsdWUsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0NFTEwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBgbWF4X2FkdmFuY2Vfd2lkdGgnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzIHVzZWQgdG8gICAgICAgICAgKi8KLSAgLyogICAgICBkZXRlcm1pbmUgdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZTsgdGhlIHZlcnRpY2FsIHNjYWxpbmcgICAgICovCi0gIC8qICAgICAgdmFsdWUgaXMgZGV0ZXJtaW5lZCB0aGUgc2FtZSB3YXkgYXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSBkb2VzLiAgRmluYWxseSwgYm90aCBzY2FsaW5nICAgICAgKi8KLSAgLyogICAgICB2YWx1ZXMgYXJlIHNldCB0byB0aGUgc21hbGxlciBvbmUuICBUaGlzIHR5cGUgaXMgdXNlZnVsIGlmIHlvdSAgICovCi0gIC8qICAgICAgd2FudCB0byBzcGVjaWZ5IHRoZSBmb250IHNpemUgZm9yLCBzYXksIGEgd2luZG93IG9mIGEgZ2l2ZW4gICAgICAqLwotICAvKiAgICAgIGRpbWVuc2lvbiBhbmQgODB4MjQgY2VsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1NDQUxFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNwZWNpZnkgdGhlIHNjYWxpbmcgdmFsdWVzIGRpcmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYWJvdmUgZGVzY3JpcHRpb25zIG9ubHkgYXBwbHkgdG8gc2NhbGFibGUgZm9ybWF0cy4gIEZvciBiaXRtYXAgKi8KLSAgLyogICAgZm9ybWF0cywgdGhlIGJlaGF2aW91ciBpcyB1cCB0byB0aGUgZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgdGhlIG5vdGUgc2VjdGlvbiBvZiBARlRfU2l6ZV9NZXRyaWNzIGlmIHlvdSB3b25kZXIgaG93IHNpemUgICAgKi8KLSAgLyogICAgcmVxdWVzdGluZyByZWxhdGVzIHRvIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIGVudW1lcmF0aW9uIHR5cGUgdGhhdCBsaXN0cyB0aGUgc3VwcG9ydGVkIHNpemUgcmVxdWVzdCB0eXBlcywKKyAgICogICBpLmUuLCB3aGF0IGlucHV0IHNpemUgKGluIGZvbnQgdW5pdHMpIG1hcHMgdG8gdGhlIHJlcXVlc3RlZCBvdXRwdXQKKyAgICogICBzaXplIChpbiBwaXhlbHMsIGFzIGNvbXB1dGVkIGZyb20gdGhlIGFyZ3VtZW50cyBvZgorICAgKiAgIEBGVF9TaXplX1JlcXVlc3QpLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUwgOjoKKyAgICogICAgIFRoZSBub21pbmFsIHNpemUuICBUaGUgYHVuaXRzX3Blcl9FTScgZmllbGQgb2YgQEZUX0ZhY2VSZWMgaXMKKyAgICogICAgIHVzZWQgdG8gZGV0ZXJtaW5lIGJvdGggc2NhbGluZyB2YWx1ZXMuCisgICAqCisgICAqICAgICBUaGlzIGlzIHRoZSBzdGFuZGFyZCBzY2FsaW5nIGZvdW5kIGluIG1vc3QgYXBwbGljYXRpb25zLiAgSW4KKyAgICogICAgIHBhcnRpY3VsYXIsIHVzZSB0aGlzIHNpemUgcmVxdWVzdCB0eXBlIGZvciBUcnVlVHlwZSBmb250cyBpZgorICAgKiAgICAgdGhleSBwcm92aWRlIG9wdGljYWwgc2NhbGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gIE5vdGUsCisgICAqICAgICBob3dldmVyLCB0aGF0IGB1bml0c19wZXJfRU0nIGlzIGEgcmF0aGVyIGFic3RyYWN0IHZhbHVlIHdoaWNoCisgICAqICAgICBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGdseXBocyBpbiBhIGZvbnQuCisgICAqCisgICAqICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0gOjoKKyAgICogICAgIFRoZSByZWFsIGRpbWVuc2lvbi4gIFRoZSBzdW0gb2YgdGhlIGBhc2NlbmRlcicgYW5kIChtaW51cyBvZikKKyAgICogICAgIHRoZSBgZGVzY2VuZGVyJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMgaXMgdXNlZCB0byBkZXRlcm1pbmUgYm90aAorICAgKiAgICAgc2NhbGluZyB2YWx1ZXMuCisgICAqCisgICAqICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWCA6OgorICAgKiAgICAgVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGBiYm94JyBmaWVsZAorICAgKiAgICAgb2YgQEZUX0ZhY2VSZWMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAorICAgKiAgICAgc2NhbGluZyB2YWx1ZSwgcmVzcGVjdGl2ZWx5LgorICAgKgorICAgKiAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0NFTEwgOjoKKyAgICogICAgIFRoZSBgbWF4X2FkdmFuY2Vfd2lkdGgnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzIHVzZWQgdG8KKyAgICogICAgIGRldGVybWluZSB0aGUgaG9yaXpvbnRhbCBzY2FsaW5nIHZhbHVlOyB0aGUgdmVydGljYWwgc2NhbGluZworICAgKiAgICAgdmFsdWUgaXMgZGV0ZXJtaW5lZCB0aGUgc2FtZSB3YXkgYXMKKyAgICogICAgIEBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSBkb2VzLiAgRmluYWxseSwgYm90aCBzY2FsaW5nCisgICAqICAgICB2YWx1ZXMgYXJlIHNldCB0byB0aGUgc21hbGxlciBvbmUuICBUaGlzIHR5cGUgaXMgdXNlZnVsIGlmIHlvdQorICAgKiAgICAgd2FudCB0byBzcGVjaWZ5IHRoZSBmb250IHNpemUgZm9yLCBzYXksIGEgd2luZG93IG9mIGEgZ2l2ZW4KKyAgICogICAgIGRpbWVuc2lvbiBhbmQgODB4MjQgY2VsbHMuCisgICAqCisgICAqICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTIDo6CisgICAqICAgICBTcGVjaWZ5IHRoZSBzY2FsaW5nIHZhbHVlcyBkaXJlY3RseS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGFib3ZlIGRlc2NyaXB0aW9ucyBvbmx5IGFwcGx5IHRvIHNjYWxhYmxlIGZvcm1hdHMuICBGb3IgYml0bWFwCisgICAqICAgZm9ybWF0cywgdGhlIGJlaGF2aW91ciBpcyB1cCB0byB0aGUgZHJpdmVyLgorICAgKgorICAgKiAgIFNlZSB0aGUgbm90ZSBzZWN0aW9uIG9mIEBGVF9TaXplX01ldHJpY3MgaWYgeW91IHdvbmRlciBob3cgc2l6ZQorICAgKiAgIHJlcXVlc3RpbmcgcmVsYXRlcyB0byBzY2FsaW5nIHZhbHVlcy4KKyAgICovCiAgIHR5cGVkZWYgZW51bSAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGVfCiAgIHsKICAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMLApAQCAtMjU3OCw0MiArMjY3OSw0NyBAQAogICB9IEZUX1NpemVfUmVxdWVzdF9UeXBlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBzaXplIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHlwZSAgICAgICAgICAgOjogU2VlIEBGVF9TaXplX1JlcXVlc3RfVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aWR0aCAgICAgICAgICA6OiBUaGUgZGVzaXJlZCB3aWR0aCwgZ2l2ZW4gYXMgYSAyNi42IGZyYWN0aW9uYWwgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgcG9pbnQgdmFsdWUgKHdpdGggNzJwdCA9IDFpbikuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWlnaHQgICAgICAgICA6OiBUaGUgZGVzaXJlZCBoZWlnaHQsIGdpdmVuIGFzIGEgMjYuNiBmcmFjdGlvbmFsICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgcG9pbnQgdmFsdWUgKHdpdGggNzJwdCA9IDFpbikuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIChkcGksIGkuZS4sIHBpeGVscyBwZXIgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgaW5jaCkuICBJZiBzZXQgdG8gemVybywgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCAqcGl4ZWwqIHZhbHVlLCB3aGljaCBnZXRzICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IHJvdW5kZWQgdG8gYW4gaW50ZWdlci4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRSZXNvbHV0aW9uIDo6IFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIChkcGksIGkuZS4sIHBpeGVscyBwZXIgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBpbmNoKS4gIElmIHNldCB0byB6ZXJvLCBgaGVpZ2h0JyBpcyB0cmVhdGVkIGFzIGEgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgMjYuNiBmcmFjdGlvbmFsICpwaXhlbCogdmFsdWUsIHdoaWNoIGdldHMgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsbHkgcm91bmRlZCB0byBhbiBpbnRlZ2VyLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGB3aWR0aCcgaXMgemVybywgdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwgICAgICAqLwotICAvKiAgICB0byB0aGUgdmVydGljYWwgc2NhbGluZyB2YWx1ZSwgYW5kIHZpY2UgdmVyc2EuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGB0eXBlJyBpcyBGVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVMsIGB3aWR0aCcgYW5kIGBoZWlnaHQnIGFyZSAqLwotICAvKiAgICBpbnRlcnByZXRlZCBkaXJlY3RseSBhcyAxNi4xNiBmcmFjdGlvbmFsIHNjYWxpbmcgdmFsdWVzLCB3aXRob3V0ICAgKi8KLSAgLyogICAgYW55IGZ1cnRoZXIgbW9kaWZpY2F0aW9uLCBhbmQgYm90aCBgaG9yaVJlc29sdXRpb24nIGFuZCAgICAgICAgICAgICovCi0gIC8qICAgIGB2ZXJ0UmVzb2x1dGlvbicgYXJlIGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU2l6ZV9SZXF1ZXN0UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIHNpemUgcmVxdWVzdC4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB0eXBlIDo6CisgICAqICAgICBTZWUgQEZUX1NpemVfUmVxdWVzdF9UeXBlLgorICAgKgorICAgKiAgIHdpZHRoIDo6CisgICAqICAgICBUaGUgZGVzaXJlZCB3aWR0aCwgZ2l2ZW4gYXMgYSAyNi42IGZyYWN0aW9uYWwKKyAgICogICAgIHBvaW50IHZhbHVlICh3aXRoIDcycHQgPSAxaW4pLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGRlc2lyZWQgaGVpZ2h0LCBnaXZlbiBhcyBhIDI2LjYgZnJhY3Rpb25hbAorICAgKiAgICAgcG9pbnQgdmFsdWUgKHdpdGggNzJwdCA9IDFpbikuCisgICAqCisgICAqICAgaG9yaVJlc29sdXRpb24gOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIHJlc29sdXRpb24gKGRwaSwgaS5lLiwgcGl4ZWxzIHBlcgorICAgKiAgICAgaW5jaCkuICBJZiBzZXQgdG8gemVybywgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEKKyAgICogICAgIDI2LjYgZnJhY3Rpb25hbCAqcGl4ZWwqIHZhbHVlLCB3aGljaCBnZXRzCisgICAqICAgICBpbnRlcm5hbGx5IHJvdW5kZWQgdG8gYW4gaW50ZWdlci4KKyAgICoKKyAgICogICB2ZXJ0UmVzb2x1dGlvbiA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIHJlc29sdXRpb24gKGRwaSwgaS5lLiwgcGl4ZWxzIHBlcgorICAgKiAgICAgaW5jaCkuICBJZiBzZXQgdG8gemVybywgYGhlaWdodCcgaXMgdHJlYXRlZCBhcyBhCisgICAqICAgICAyNi42IGZyYWN0aW9uYWwgKnBpeGVsKiB2YWx1ZSwgd2hpY2ggZ2V0cworICAgKiAgICAgaW50ZXJuYWxseSByb3VuZGVkIHRvIGFuIGludGVnZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIElmIGB3aWR0aCcgaXMgemVybywgdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwKKyAgICogICB0byB0aGUgdmVydGljYWwgc2NhbGluZyB2YWx1ZSwgYW5kIHZpY2UgdmVyc2EuCisgICAqCisgICAqICAgSWYgYHR5cGUnIGlzIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1NDQUxFUywgYHdpZHRoJyBhbmQgYGhlaWdodCcgYXJlCisgICAqICAgaW50ZXJwcmV0ZWQgZGlyZWN0bHkgYXMgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlcywgd2l0aG91dAorICAgKiAgIGFueSBmdXJ0aGVyIG1vZGlmaWNhdGlvbiwgYW5kIGJvdGggYGhvcmlSZXNvbHV0aW9uJyBhbmQKKyAgICogICBgdmVydFJlc29sdXRpb24nIGFyZSBpZ25vcmVkLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVfUmVxdWVzdFJlY18KICAgewogICAgIEZUX1NpemVfUmVxdWVzdF9UeXBlICB0eXBlOwpAQCAtMjYyNSw5NiArMjczMSwxMDMgQEAKICAgfSBGVF9TaXplX1JlcXVlc3RSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TaXplX1JlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIHNpemUgcmVxdWVzdCBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1NpemVfUmVxdWVzdAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBzaXplIHJlcXVlc3Qgc3RydWN0dXJlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2l6ZV9SZXF1ZXN0UmVjXyAgKkZUX1NpemVfUmVxdWVzdDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlcXVlc3RfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJlc2l6ZSB0aGUgc2NhbGUgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZSBvYmplY3QgaW4gYSBmYWNlLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlcSAgOjogQSBwb2ludGVyIHRvIGEgQEZUX1NpemVfUmVxdWVzdFJlYy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFsdGhvdWdoIGRyaXZlcnMgbWF5IHNlbGVjdCB0aGUgYml0bWFwIHN0cmlrZSBtYXRjaGluZyB0aGUgICAgICAgICAqLwotICAvKiAgICByZXF1ZXN0LCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoaXMgaWYgeW91IGludGVuZCB0byBzZWxlY3QgYSAgICAgKi8KLSAgLyogICAgcGFydGljdWxhciBiaXRtYXAgc3RyaWtlLiAgVXNlIEBGVF9TZWxlY3RfU2l6ZSBpbnN0ZWFkIGluIHRoYXQgICAgICovCi0gIC8qICAgIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgcmVzdWx0aW5nIGdseXBoICAgICovCi0gIC8qICAgIHNpemUgaXMgZGVwZW5kZW50IGVudGlyZWx5IG9uIGhvdyB0aGUgc2l6ZSBpcyBkZWZpbmVkIGluIHRoZSAgICAgICAqLwotICAvKiAgICBzb3VyY2UgZmFjZS4gIFRoZSBmb250IGRlc2lnbmVyIGNob29zZXMgdGhlIGZpbmFsIHNpemUgb2YgZWFjaCAgICAgKi8KLSAgLyogICAgZ2x5cGggcmVsYXRpdmUgdG8gdGhpcyBzaXplLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gICAgICAgICovCi0gIC8qICAgIGBodHRwczovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL2RvY3MvZ2x5cGhzL2dseXBocy0yLmh0bWwnLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29udHJhcnkgdG8gQEZUX1NldF9DaGFyX1NpemUsIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHNwZWNpYWwgICovCi0gIC8qICAgIGNvZGUgdG8gbm9ybWFsaXplIHplcm8tdmFsdWVkIHdpZHRocywgaGVpZ2h0cywgb3IgcmVzb2x1dGlvbnMgICAgICAqLwotICAvKiAgICAod2hpY2ggbGVhZCB0byBlcnJvcnMgaW4gbW9zdCBjYXNlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEZyZWVUeXBlIGNhY2hlIEFQSS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9SZXF1ZXN0X1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJlc2l6ZSB0aGUgc2NhbGUgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZSBvYmplY3QgaW4gYSBmYWNlLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICByZXEgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhIEBGVF9TaXplX1JlcXVlc3RSZWMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQWx0aG91Z2ggZHJpdmVycyBtYXkgc2VsZWN0IHRoZSBiaXRtYXAgc3RyaWtlIG1hdGNoaW5nIHRoZQorICAgKiAgIHJlcXVlc3QsIHlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyBpZiB5b3UgaW50ZW5kIHRvIHNlbGVjdCBhCisgICAqICAgcGFydGljdWxhciBiaXRtYXAgc3RyaWtlLiAgVXNlIEBGVF9TZWxlY3RfU2l6ZSBpbnN0ZWFkIGluIHRoYXQKKyAgICogICBjYXNlLgorICAgKgorICAgKiAgIFRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhbmQgdGhlIHJlc3VsdGluZyBnbHlwaAorICAgKiAgIHNpemUgaXMgZGVwZW5kZW50IGVudGlyZWx5IG9uIGhvdyB0aGUgc2l6ZSBpcyBkZWZpbmVkIGluIHRoZQorICAgKiAgIHNvdXJjZSBmYWNlLiAgVGhlIGZvbnQgZGVzaWduZXIgY2hvb3NlcyB0aGUgZmluYWwgc2l6ZSBvZiBlYWNoCisgICAqICAgZ2x5cGggcmVsYXRpdmUgdG8gdGhpcyBzaXplLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8KKyAgICogICBgaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2NzL2dseXBocy9nbHlwaHMtMi5odG1sJy4KKyAgICoKKyAgICogICBDb250cmFyeSB0byBARlRfU2V0X0NoYXJfU2l6ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgc3BlY2lhbAorICAgKiAgIGNvZGUgdG8gbm9ybWFsaXplIHplcm8tdmFsdWVkIHdpZHRocywgaGVpZ2h0cywgb3IgcmVzb2x1dGlvbnMKKyAgICogICAod2hpY2ggbGVhZCB0byBlcnJvcnMgaW4gbW9zdCBjYXNlcykuCisgICAqCisgICAqICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1JlcXVlc3RfU2l6ZSggRlRfRmFjZSAgICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfQ2hhcl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDYWxsIEBGVF9SZXF1ZXN0X1NpemUgdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplIChpbiBwb2ludHMpLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyX3dpZHRoICAgICAgOjogVGhlIG5vbWluYWwgd2lkdGgsIGluIDI2LjYgZnJhY3Rpb25hbCBwb2ludHMuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJfaGVpZ2h0ICAgICA6OiBUaGUgbm9taW5hbCBoZWlnaHQsIGluIDI2LjYgZnJhY3Rpb25hbCBwb2ludHMuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaG9yel9yZXNvbHV0aW9uIDo6IFRoZSBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gZHBpLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0X3Jlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24gaW4gZHBpLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGlsZSB0aGlzIGZ1bmN0aW9uIGFsbG93cyBmcmFjdGlvbmFsIHBvaW50cyBhcyBpbnB1dCB2YWx1ZXMsIHRoZSAgKi8KLSAgLyogICAgcmVzdWx0aW5nIHBwZW0gdmFsdWUgZm9yIHRoZSBnaXZlbiByZXNvbHV0aW9uIGlzIGFsd2F5cyByb3VuZGVkIHRvICovCi0gIC8qICAgIHRoZSBuZWFyZXN0IGludGVnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgZWl0aGVyIHRoZSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8sIGl0IGlzIHNldCBlcXVhbCAgICovCi0gIC8qICAgIHRvIHRoZSBvdGhlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgZWl0aGVyIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHJlc29sdXRpb24gaXMgemVybywgaXQgaXMgc2V0ICovCi0gIC8qICAgIGVxdWFsIHRvIHRoZSBvdGhlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IHNtYWxsZXIgdGhhbiAxcHQgaXMgc2V0IHRvIDFwdDsgaWYgICAgICovCi0gIC8qICAgIGJvdGggcmVzb2x1dGlvbiB2YWx1ZXMgYXJlIHplcm8sIHRoZXkgYXJlIHNldCB0byA3MmRwaS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NldF9DaGFyX1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENhbGwgQEZUX1JlcXVlc3RfU2l6ZSB0byByZXF1ZXN0IHRoZSBub21pbmFsIHNpemUgKGluIHBvaW50cykuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNoYXJfd2lkdGggOjoKKyAgICogICAgIFRoZSBub21pbmFsIHdpZHRoLCBpbiAyNi42IGZyYWN0aW9uYWwgcG9pbnRzLgorICAgKgorICAgKiAgIGNoYXJfaGVpZ2h0IDo6CisgICAqICAgICBUaGUgbm9taW5hbCBoZWlnaHQsIGluIDI2LjYgZnJhY3Rpb25hbCBwb2ludHMuCisgICAqCisgICAqICAgaG9yel9yZXNvbHV0aW9uIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIGRwaS4KKyAgICoKKyAgICogICB2ZXJ0X3Jlc29sdXRpb24gOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIGRwaS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBXaGlsZSB0aGlzIGZ1bmN0aW9uIGFsbG93cyBmcmFjdGlvbmFsIHBvaW50cyBhcyBpbnB1dCB2YWx1ZXMsIHRoZQorICAgKiAgIHJlc3VsdGluZyBwcGVtIHZhbHVlIGZvciB0aGUgZ2l2ZW4gcmVzb2x1dGlvbiBpcyBhbHdheXMgcm91bmRlZCB0bworICAgKiAgIHRoZSBuZWFyZXN0IGludGVnZXIuCisgICAqCisgICAqICAgSWYgZWl0aGVyIHRoZSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8sIGl0IGlzIHNldCBlcXVhbAorICAgKiAgIHRvIHRoZSBvdGhlciB2YWx1ZS4KKyAgICoKKyAgICogICBJZiBlaXRoZXIgdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgcmVzb2x1dGlvbiBpcyB6ZXJvLCBpdCBpcyBzZXQKKyAgICogICBlcXVhbCB0byB0aGUgb3RoZXIgdmFsdWUuCisgICAqCisgICAqICAgQSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IHNtYWxsZXIgdGhhbiAxcHQgaXMgc2V0IHRvIDFwdDsgaWYKKyAgICogICBib3RoIHJlc29sdXRpb24gdmFsdWVzIGFyZSB6ZXJvLCB0aGV5IGFyZSBzZXQgdG8gNzJkcGkuCisgICAqCisgICAqICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NldF9DaGFyX1NpemUoIEZUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfd2lkdGgsCkBAIC0yNzIzLDExNiArMjgzNiwxMjkgQEAKICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgdmVydF9yZXNvbHV0aW9uICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfUGl4ZWxfU2l6ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDYWxsIEBGVF9SZXF1ZXN0X1NpemUgdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplIChpbiBwaXhlbHMpLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwaXhlbF93aWR0aCAgOjogVGhlIG5vbWluYWwgd2lkdGgsIGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBpeGVsX2hlaWdodCA6OiBUaGUgbm9taW5hbCBoZWlnaHQsIGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHJlc3VsdGluZyBnbHlwaHMgbWF0Y2hpbmcgb3IgYmVpbmcgICAgICAqLwotICAvKiAgICBjb25zdHJhaW5lZCB0byB0aGlzIHBpeGVsIHNpemUuICBSZWZlciB0byBARlRfUmVxdWVzdF9TaXplIHRvICAgICAgKi8KLSAgLyogICAgdW5kZXJzdGFuZCBob3cgcmVxdWVzdGVkIHNpemVzIHJlbGF0ZSB0byBhY3R1YWwgc2l6ZXMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X1BpeGVsX1NpemVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDYWxsIEBGVF9SZXF1ZXN0X1NpemUgdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplIChpbiBwaXhlbHMpLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHBpeGVsX3dpZHRoIDo6CisgICAqICAgICBUaGUgbm9taW5hbCB3aWR0aCwgaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIHBpeGVsX2hlaWdodCA6OgorICAgKiAgICAgVGhlIG5vbWluYWwgaGVpZ2h0LCBpbiBwaXhlbHMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGUgcmVzdWx0aW5nIGdseXBocyBtYXRjaGluZyBvciBiZWluZworICAgKiAgIGNvbnN0cmFpbmVkIHRvIHRoaXMgcGl4ZWwgc2l6ZS4gIFJlZmVyIHRvIEBGVF9SZXF1ZXN0X1NpemUgdG8KKyAgICogICB1bmRlcnN0YW5kIGhvdyByZXF1ZXN0ZWQgc2l6ZXMgcmVsYXRlIHRvIGFjdHVhbCBzaXplcy4KKyAgICoKKyAgICogICBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIHVzaW5nIHRoZSBGcmVlVHlwZSBjYWNoZSBBUEkuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU2V0X1BpeGVsX1NpemVzKCBGVF9GYWNlICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIHBpeGVsX3dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIHBpeGVsX2hlaWdodCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTG9hZF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCBhIGdseXBoIGludG8gdGhlIGdseXBoIHNsb3Qgb2YgYSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdCB3aGVyZSB0aGUgZ2x5cGggICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGlzIGxvYWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4gIEZvciAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBDSUQta2V5ZWQgZm9udHMgKGVpdGhlciBpbiBQUyBvciBpbiBDRkYgZm9ybWF0KSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgdGhpcyBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIENJRCB2YWx1ZS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX2ZsYWdzICA6OiBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgQEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGxvYWRlZCBnbHlwaCBtYXkgYmUgdHJhbnNmb3JtZWQuICBTZWUgQEZUX1NldF9UcmFuc2Zvcm0gZm9yICAgICovCi0gIC8qICAgIHRoZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9yIHN1YnNldHRlZCBDSUQta2V5ZWQgZm9udHMsIGBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCcgaXMgICAgICAgICovCi0gIC8qICAgIHJldHVybmVkIGZvciBpbnZhbGlkIENJRCB2YWx1ZXMgKHRoaXMgaXMsIGZvciBDSUQgdmFsdWVzIHRoYXQgICAgICAqLwotICAvKiAgICBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBnbHlwaCBpbiB0aGUgZm9udCkuICBTZWUgdGhlIGRpc2N1c3Npb24gKi8KLSAgLyogICAgb2YgdGhlIEBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGZsYWcgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiB5b3UgcmVjZWl2ZSBgRlRfRXJyX0dseXBoX1Rvb19CaWcnLCB0cnkgZ2V0dGluZyB0aGUgZ2x5cGggICAgICAgKi8KLSAgLyogICAgb3V0bGluZSBhdCBFTSBzaXplLCB0aGVuIHNjYWxlIGl0IG1hbnVhbGx5IGFuZCBmaWxsIGl0IGFzIGEgICAgICAgICovCi0gIC8qICAgIGdyYXBoaWNzIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Mb2FkX0dseXBoCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIGEgZ2x5cGggaW50byB0aGUgZ2x5cGggc2xvdCBvZiBhIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdCB3aGVyZSB0aGUgZ2x5cGgKKyAgICogICAgIGlzIGxvYWRlZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGdseXBoX2luZGV4IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGdseXBoIGluIHRoZSBmb250IGZpbGUuICBGb3IKKyAgICogICAgIENJRC1rZXllZCBmb250cyAoZWl0aGVyIGluIFBTIG9yIGluIENGRiBmb3JtYXQpCisgICAqICAgICB0aGlzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgQ0lEIHZhbHVlLgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZQorICAgKiAgICAgQEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZQorICAgKiAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lCisgICAqICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsCisgICAqICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGxvYWRlZCBnbHlwaCBtYXkgYmUgdHJhbnNmb3JtZWQuICBTZWUgQEZUX1NldF9UcmFuc2Zvcm0gZm9yCisgICAqICAgdGhlIGRldGFpbHMuCisgICAqCisgICAqICAgRm9yIHN1YnNldHRlZCBDSUQta2V5ZWQgZm9udHMsIGBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCcgaXMKKyAgICogICByZXR1cm5lZCBmb3IgaW52YWxpZCBDSUQgdmFsdWVzICh0aGlzIGlzLCBmb3IgQ0lEIHZhbHVlcyB0aGF0CisgICAqICAgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW4gdGhlIGZvbnQpLiAgU2VlIHRoZSBkaXNjdXNzaW9uCisgICAqICAgb2YgdGhlIEBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGZsYWcgZm9yIG1vcmUgZGV0YWlscy4KKyAgICoKKyAgICogICBJZiB5b3UgcmVjZWl2ZSBgRlRfRXJyX0dseXBoX1Rvb19CaWcnLCB0cnkgZ2V0dGluZyB0aGUgZ2x5cGgKKyAgICogICBvdXRsaW5lIGF0IEVNIHNpemUsIHRoZW4gc2NhbGUgaXQgbWFudWFsbHkgYW5kIGZpbGwgaXQgYXMgYQorICAgKiAgIGdyYXBoaWNzIG9wZXJhdGlvbi4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9Mb2FkX0dseXBoKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdseXBoX2luZGV4LAogICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgbG9hZF9mbGFncyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTG9hZF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCBhIGdseXBoIGludG8gdGhlIGdseXBoIHNsb3Qgb2YgYSBmYWNlIG9iamVjdCwgYWNjZXNzZWQgYnkgaXRzICovCi0gIC8qICAgIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBpcyBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyX2NvZGUgICA6OiBUaGUgZ2x5cGgncyBjaGFyYWN0ZXIgY29kZSwgYWNjb3JkaW5nIHRvIHRoZSAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgY3VycmVudCBjaGFybWFwIHVzZWQgaW4gdGhlIGZhY2UuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX2ZsYWdzICA6OiBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgQEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgQEZUX0dldF9DaGFyX0luZGV4IGFuZCBARlRfTG9hZF9HbHlwaC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBNYW55IGZvbnRzIGNvbnRhaW4gZ2x5cGhzIHRoYXQgY2FuJ3QgYmUgbG9hZGVkIGJ5IHRoaXMgZnVuY3Rpb24gICAgKi8KLSAgLyogICAgc2luY2UgaXRzIGdseXBoIGluZGljZXMgYXJlIG5vdCBsaXN0ZWQgaW4gYW55IG9mIHRoZSBmb250J3MgICAgICAgICovCi0gIC8qICAgIGNoYXJtYXBzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Mb2FkX0NoYXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIExvYWQgYSBnbHlwaCBpbnRvIHRoZSBnbHlwaCBzbG90IG9mIGEgZmFjZSBvYmplY3QsIGFjY2Vzc2VkIGJ5IGl0cworICAgKiAgIGNoYXJhY3RlciBjb2RlLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3Qgd2hlcmUgdGhlIGdseXBoCisgICAqICAgICBpcyBsb2FkZWQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBjaGFyX2NvZGUgOjoKKyAgICogICAgIFRoZSBnbHlwaCdzIGNoYXJhY3RlciBjb2RlLCBhY2NvcmRpbmcgdG8gdGhlCisgICAqICAgICBjdXJyZW50IGNoYXJtYXAgdXNlZCBpbiB0aGUgZmFjZS4KKyAgICoKKyAgICogICBsb2FkX2ZsYWdzIDo6CisgICAqICAgICBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUKKyAgICogICAgIEBGVF9MT0FEX1hYWCBjb25zdGFudHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUKKyAgICogICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZQorICAgKiAgICAgc2hvdWxkIGJlIHNjYWxlZCwgd2hldGhlciB0byBsb2FkIGJpdG1hcHMgb3Igbm90LAorICAgKiAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIEBGVF9HZXRfQ2hhcl9JbmRleCBhbmQgQEZUX0xvYWRfR2x5cGguCisgICAqCisgICAqICAgTWFueSBmb250cyBjb250YWluIGdseXBocyB0aGF0IGNhbid0IGJlIGxvYWRlZCBieSB0aGlzIGZ1bmN0aW9uCisgICAqICAgc2luY2UgaXRzIGdseXBoIGluZGljZXMgYXJlIG5vdCBsaXN0ZWQgaW4gYW55IG9mIHRoZSBmb250J3MKKyAgICogICBjaGFybWFwcy4KKyAgICoKKyAgICogICBJZiBubyBhY3RpdmUgY21hcCBpcyBzZXQgdXAgKGkuZS4sIGBmYWNlLT5jaGFybWFwJyBpcyB6ZXJvKSwgdGhlCisgICAqICAgY2FsbCB0byBARlRfR2V0X0NoYXJfSW5kZXggaXMgb21pdHRlZCwgYW5kIHRoZSBmdW5jdGlvbiBiZWhhdmVzCisgICAqICAgaWRlbnRpY2FsbHkgdG8gQEZUX0xvYWRfR2x5cGguCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTG9hZF9DaGFyKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcl9jb2RlLApAQCAtMjg1NCwxNSArMjk4MCwxNSBAQAogICAgKiAgICAgb3BlcmF0aW9uLiAgSW4gdGhpcyBjYXNlLCB0aGUgZm9sbG93aW5nIGhhcHBlbnM6CiAgICAqCiAgICAqICAgICAxLiBGcmVlVHlwZSBsb29rcyBmb3IgYSBiaXRtYXAgZm9yIHRoZSBnbHlwaCBjb3JyZXNwb25kaW5nIHRvIHRoZQotICAgKiAgICAgICAgZmFjZSdzIGN1cnJlbnQgc2l6ZS4gIElmIG9uZSBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMuCi0gICAqICAgICAgICBUaGUgYml0bWFwIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGdseXBoIHNsb3QgKHNlZSBub3RlCi0gICAqICAgICAgICBiZWxvdykuCisgICAqICAgICBmYWNlJ3MgY3VycmVudCBzaXplLiAgSWYgb25lIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAgICogICAgIFRoZSBiaXRtYXAgZGF0YSBjYW4gYmUgYWNjZXNzZWQgZnJvbSB0aGUgZ2x5cGggc2xvdCAoc2VlIG5vdGUKKyAgICogICAgIGJlbG93KS4KICAgICoKICAgICogICAgIDIuIElmIG5vIGVtYmVkZGVkIGJpdG1hcCBpcyBzZWFyY2hlZCBmb3Igb3IgZm91bmQsIEZyZWVUeXBlIGxvb2tzCi0gICAqICAgICAgICBmb3IgYSBzY2FsYWJsZSBvdXRsaW5lLiAgSWYgb25lIGlzIGZvdW5kLCBpdCBpcyBsb2FkZWQgZnJvbQotICAgKiAgICAgICAgdGhlIGZvbnQgZmlsZSwgc2NhbGVkIHRvIGRldmljZSBwaXhlbHMsIHRoZW4gYGhpbnRlZCcgdG8gdGhlCi0gICAqICAgICAgICBwaXhlbCBncmlkIGluIG9yZGVyIHRvIG9wdGltaXplIGl0LiAgVGhlIG91dGxpbmUgZGF0YSBjYW4gYmUKLSAgICogICAgICAgIGFjY2Vzc2VkIGZyb20gdGhlIGdseXBoIHNsb3QgKHNlZSBub3RlIGJlbG93KS4KKyAgICogICAgIGZvciBhIHNjYWxhYmxlIG91dGxpbmUuICBJZiBvbmUgaXMgZm91bmQsIGl0IGlzIGxvYWRlZCBmcm9tCisgICAqICAgICB0aGUgZm9udCBmaWxlLCBzY2FsZWQgdG8gZGV2aWNlIHBpeGVscywgdGhlbiBgaGludGVkJyB0byB0aGUKKyAgICogICAgIHBpeGVsIGdyaWQgaW4gb3JkZXIgdG8gb3B0aW1pemUgaXQuICBUaGUgb3V0bGluZSBkYXRhIGNhbiBiZQorICAgKiAgICAgYWNjZXNzZWQgZnJvbSB0aGUgZ2x5cGggc2xvdCAoc2VlIG5vdGUgYmVsb3cpLgogICAgKgogICAgKiAgICAgTm90ZSB0aGF0IGJ5IGRlZmF1bHQgdGhlIGdseXBoIGxvYWRlciBkb2Vzbid0IHJlbmRlciBvdXRsaW5lcyBpbnRvCiAgICAqICAgICBiaXRtYXBzLiAgVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCB0byBtb2RpZnkgdGhpcyBkZWZhdWx0CkBAIC0yOTU0LDExICszMDgwLDI0IEBACiAgICAqICAgICBEaXNhYmxlIHRoZSBhdXRvLWhpbnRlci4gIFNlZSBhbHNvIHRoZSBub3RlIGJlbG93LgogICAgKgogICAgKiAgIEZUX0xPQURfQ09MT1IgOjoKKyAgICogICAgIExvYWQgY29sb3JlZCBnbHlwaHMuICBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGRlcGVuZGluZyBvbiB0aGUKKyAgICogICAgIGZvbnQgZm9ybWF0LgorICAgKgogICAgKiAgICAgW1NpbmNlIDIuNV0gTG9hZCBlbWJlZGRlZCBjb2xvciBiaXRtYXAgaW1hZ2VzLiAgVGhlIHJlc3VsdGluZyBjb2xvcgotICAgKiAgICAgYml0bWFwcywgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlIEBGVF9QSVhFTF9NT0RFX0JHUkEgZm9ybWF0LgotICAgKiAgICAgSWYgdGhlIGZsYWcgaXMgbm90IHNldCBhbmQgY29sb3IgYml0bWFwcyBhcmUgZm91bmQsIHRoZXkgYXJlCi0gICAqICAgICBjb252ZXJ0ZWQgdG8gMjU2LWxldmVsIGdyYXkgYml0bWFwcyB0cmFuc3BhcmVudGx5LCB1c2luZyB0aGUKLSAgICogICAgIEBGVF9QSVhFTF9NT0RFX0dSQVkgZm9ybWF0LgorICAgKiAgICAgYml0bWFwcywgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlIEBGVF9QSVhFTF9NT0RFX0JHUkEgZm9ybWF0LAorICAgKiAgICAgd2l0aCBwcmUtbXVsdGlwbGllZCBjb2xvciBjaGFubmVscy4gIElmIHRoZSBmbGFnIGlzIG5vdCBzZXQgYW5kCisgICAqICAgICBjb2xvciBiaXRtYXBzIGFyZSBmb3VuZCwgdGhleSBhcmUgY29udmVydGVkIHRvIDI1Ni1sZXZlbCBncmF5CisgICAqICAgICBiaXRtYXBzLCB1c2luZyB0aGUgQEZUX1BJWEVMX01PREVfR1JBWSBmb3JtYXQuCisgICAqCisgICAqICAgICBbU2luY2UgMi4xMF0gSWYgdGhlIGdseXBoIGluZGV4IGNvbnRhaW5zIGFuIGVudHJ5IGluIHRoZSBmYWNlJ3MKKyAgICogICAgIGBDT0xSJyB0YWJsZSB3aXRoIGEgYENQQUwnIHBhbGV0dGUgdGFibGUgKGFzIGRlZmluZWQgaW4gdGhlCisgICAqICAgICBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uKSwgbWFrZSBARlRfUmVuZGVyX0dseXBoIHByb3ZpZGUgYSBkZWZhdWx0CisgICAqICAgICBibGVuZGluZyBvZiB0aGUgY29sb3IgZ2x5cGggbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2x5cGggaW5kZXgsCisgICAqICAgICB1c2luZyB0aGUgc2FtZSBiaXRtYXAgZm9ybWF0IGFzIGVtYmVkZGVkIGNvbG9yIGJpdG1hcCBpbWFnZXMuICBUaGlzCisgICAqICAgICBpcyBtYWlubHkgZm9yIGNvbnZlbmllbmNlOyBmb3IgZnVsbCBjb250cm9sIG9mIGNvbG9yIGxheWVycyB1c2UKKyAgICogICAgIEBGVF9HZXRfQ29sb3JfR2x5cGhfTGF5ZXIgYW5kIEZyZWVUeXBlJ3MgY29sb3IgZnVuY3Rpb25zIGxpa2UKKyAgICogICAgIEBGVF9QYWxldHRlX1NlbGVjdCBpbnN0ZWFkIG9mIHNldHRpbmcgRlRfTE9BRF9DT0xPUiBmb3IgcmVuZGVyaW5nCisgICAqICAgICBzbyB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gY2FuIGhhbmRsZSBibGVuZGluZyBieSBpdHNlbGYuCiAgICAqCiAgICAqICAgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgOjoKICAgICogICAgIFtTaW5jZSAyLjYuMV0gQ29tcHV0ZSBnbHlwaCBtZXRyaWNzIGZyb20gdGhlIGdseXBoIGRhdGEsIHdpdGhvdXQKQEAgLTMwNjUsNyArMzIwNCw3IEBACiAgICAqCiAgICAqICAgICBBZHZhbmNlIHdpZHRocyBhcmUgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlczsgaG93ZXZlciwgdXNpbmcgdGhlCiAgICAqICAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgZmllbGRzIG9mIEBGVF9HbHlwaFNsb3RSZWMsIGl0IGlzCi0gICAqICAgICBwb3NzaWJsZSB0byBnZXQgZnJhY3Rpb25hbCBhZHZhbmNlIHdpZHRocyBmb3Igc3ViLXBpeGVsIHBvc2l0aW9uaW5nCisgICAqICAgICBwb3NzaWJsZSB0byBnZXQgZnJhY3Rpb25hbCBhZHZhbmNlIHdpZHRocyBmb3Igc3VicGl4ZWwgcG9zaXRpb25pbmcKICAgICogICAgICh3aGljaCBpcyByZWNvbW1lbmRlZCB0byB1c2UpLgogICAgKgogICAgKiAgICAgSWYgY29uZmlndXJhdGlvbiBvcHRpb24gQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgaXMgYWN0aXZlLApAQCAtMzEwMCwxMiArMzIzOSwxMiBAQAogICAgKiAgIGhpbnRpbmcgYWxnb3JpdGhtIGFuZCBoYXZlIHRoZSByZXN1bHRzIHJlbmRlcmVkIGluIGhvcml6b250YWwgTENECiAgICAqICAgcGl4ZWwgbW9kZSwgd2l0aCBjb2RlIGxpa2UKICAgICoKLSAgICogICAgIHsKLSAgICogICAgICAgRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsCi0gICAqICAgICAgICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MgfCBGVF9MT0FEX1RBUkdFVF9MSUdIVCApOworICAgKiAgIHsKKyAgICogICAgIEZUX0xvYWRfR2x5cGgoIGZhY2UsIGdseXBoX2luZGV4LAorICAgKiAgICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyB8IEZUX0xPQURfVEFSR0VUX0xJR0hUICk7CiAgICAqCi0gICAqICAgICAgIEZUX1JlbmRlcl9HbHlwaCggZmFjZS0+Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX0xDRCApOwotICAgKiAgICAgfQorICAgKiAgICAgRlRfUmVuZGVyX0dseXBoKCBmYWNlLT5nbHlwaCwgRlRfUkVOREVSX01PREVfTENEICk7CisgICAqICAgfQogICAgKgogICAgKiAgIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgc3RpY2sgd2l0aCBvbmUgcmVuZGVyaW5nIG1vZGUuICBGb3IgZXhhbXBsZSwKICAgICogICBzd2l0Y2hpbmcgYmV0d2VlbiBARlRfTE9BRF9UQVJHRVRfTk9STUFMIGFuZCBARlRfTE9BRF9UQVJHRVRfTU9OTwpAQCAtMzEzNyw5OCArMzI3NiwxMDEgQEAKICNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTU9ERSggeCApICAoIChGVF9SZW5kZXJfTW9kZSkoICggKHgpID4+IDE2ICkgJiAxNSApICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldCB0aGUgdHJhbnNmb3JtYXRpb24gdGhhdCBpcyBhcHBsaWVkIHRvIGdseXBoIGltYWdlcyB3aGVuIHRoZXkgICAqLwotICAvKiAgICBhcmUgbG9hZGVkIGludG8gYSBnbHlwaCBzbG90IHRocm91Z2ggQEZUX0xvYWRfR2x5cGguICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXRyaXggOjogQSBwb2ludGVyIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbidzIDJ4MiBtYXRyaXguICBVc2UgTlVMTCAgKi8KLSAgLyogICAgICAgICAgICAgIGZvciB0aGUgaWRlbnRpdHkgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlbHRhICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zbGF0aW9uIHZlY3Rvci4gIFVzZSBOVUxMIGZvciB0aGUgICAqLwotICAvKiAgICAgICAgICAgICAgbnVsbCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgdHJhbnNmb3JtYXRpb24gaXMgb25seSBhcHBsaWVkIHRvIHNjYWxhYmxlIGltYWdlIGZvcm1hdHMgYWZ0ZXIgKi8KLSAgLyogICAgdGhlIGdseXBoIGhhcyBiZWVuIGxvYWRlZC4gIEl0IG1lYW5zIHRoYXQgaGludGluZyBpcyB1bmFsdGVyZWQgYnkgICovCi0gIC8qICAgIHRoZSB0cmFuc2Zvcm1hdGlvbiBhbmQgaXMgcGVyZm9ybWVkIG9uIHRoZSBjaGFyYWN0ZXIgc2l6ZSBnaXZlbiBpbiAqLwotICAvKiAgICB0aGUgbGFzdCBjYWxsIHRvIEBGVF9TZXRfQ2hhcl9TaXplIG9yIEBGVF9TZXRfUGl4ZWxfU2l6ZXMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCB0aGlzIGFsc28gdHJhbnNmb3JtcyB0aGUgYGZhY2UuZ2x5cGguYWR2YW5jZScgZmllbGQsIGJ1dCAqLwotICAvKiAgICAqbm90KiB0aGUgdmFsdWVzIGluIGBmYWNlLmdseXBoLm1ldHJpY3MnLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X1RyYW5zZm9ybQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZ2x5cGggaW1hZ2VzIHdoZW4gdGhleQorICAgKiAgIGFyZSBsb2FkZWQgaW50byBhIGdseXBoIHNsb3QgdGhyb3VnaCBARlRfTG9hZF9HbHlwaC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtYXRyaXggOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24ncyAyeDIgbWF0cml4LiAgVXNlIE5VTEwKKyAgICogICAgIGZvciB0aGUgaWRlbnRpdHkgbWF0cml4LgorICAgKiAgIGRlbHRhIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zbGF0aW9uIHZlY3Rvci4gIFVzZSBOVUxMIGZvciB0aGUKKyAgICogICAgIG51bGwgdmVjdG9yLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgdHJhbnNmb3JtYXRpb24gaXMgb25seSBhcHBsaWVkIHRvIHNjYWxhYmxlIGltYWdlIGZvcm1hdHMgYWZ0ZXIKKyAgICogICB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkLiAgSXQgbWVhbnMgdGhhdCBoaW50aW5nIGlzIHVuYWx0ZXJlZCBieQorICAgKiAgIHRoZSB0cmFuc2Zvcm1hdGlvbiBhbmQgaXMgcGVyZm9ybWVkIG9uIHRoZSBjaGFyYWN0ZXIgc2l6ZSBnaXZlbiBpbgorICAgKiAgIHRoZSBsYXN0IGNhbGwgdG8gQEZUX1NldF9DaGFyX1NpemUgb3IgQEZUX1NldF9QaXhlbF9TaXplcy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhpcyBhbHNvIHRyYW5zZm9ybXMgdGhlIGBmYWNlLmdseXBoLmFkdmFuY2UnIGZpZWxkLCBidXQKKyAgICogICAqbm90KiB0aGUgdmFsdWVzIGluIGBmYWNlLmdseXBoLm1ldHJpY3MnLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfU2V0X1RyYW5zZm9ybSggRlRfRmFjZSAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4LAogICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBkZWx0YSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVuZGVyIG1vZGVzIHN1cHBvcnRlZCBieSBGcmVlVHlwZX4yLiAgRWFjaCBtb2RlIGNvcnJlc3BvbmRzIHRvIGEgICovCi0gIC8qICAgIHNwZWNpZmljIHR5cGUgb2Ygc2NhbmxpbmUgY29udmVyc2lvbiBwZXJmb3JtZWQgb24gdGhlIG91dGxpbmUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9yIGJpdG1hcCBmb250cyBhbmQgZW1iZWRkZWQgYml0bWFwcyB0aGUgYGJpdG1hcC0+cGl4ZWxfbW9kZScgICAgICovCi0gIC8qICAgIGZpZWxkIGluIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSBnaXZlcyB0aGUgZm9ybWF0IG9mIHRoZSAgICAqLwotICAvKiAgICByZXR1cm5lZCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFsbCBtb2RlcyBleGNlcHQgQEZUX1JFTkRFUl9NT0RFX01PTk8gdXNlIDI1NiBsZXZlbHMgb2Ygb3BhY2l0eSwgICAqLwotICAvKiAgICBpbmRpY2F0aW5nIHBpeGVsIGNvdmVyYWdlLiAgVXNlIGxpbmVhciBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEgICAgKi8KLSAgLyogICAgY29ycmVjdGlvbiB0byBjb3JyZWN0bHkgcmVuZGVyIG5vbi1tb25vY2hyb21lIGdseXBoIGJpdG1hcHMgb250byBhICovCi0gIC8qICAgIHN1cmZhY2U7IHNlZSBARlRfUmVuZGVyX0dseXBoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JFTkRFUl9NT0RFX05PUk1BTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIERlZmF1bHQgcmVuZGVyIG1vZGU7IGl0IGNvcnJlc3BvbmRzIHRvIDgtYml0IGFudGktYWxpYXNlZCAgICAgICAgKi8KLSAgLyogICAgICBiaXRtYXBzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SRU5ERVJfTU9ERV9MSUdIVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gQEZUX1JFTkRFUl9NT0RFX05PUk1BTC4gIEl0IGlzIG9ubHkgICAgICAgICovCi0gIC8qICAgICAgZGVmaW5lZCBhcyBhIHNlcGFyYXRlIHZhbHVlIGJlY2F1c2UgcmVuZGVyIG1vZGVzIGFyZSBhbHNvIHVzZWQgICAqLwotICAvKiAgICAgIGluZGlyZWN0bHkgdG8gZGVmaW5lIGhpbnRpbmcgYWxnb3JpdGhtIHNlbGVjdG9ycy4gIFNlZSAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfTE9BRF9UQVJHRVRfWFhYIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SRU5ERVJfTU9ERV9NT05PIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gMS1iaXQgYml0bWFwcyAod2l0aCAyfmxldmVscyBvZiAgICAgICAgICovCi0gIC8qICAgICAgb3BhY2l0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUkVOREVSX01PREVfTENEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIGhvcml6b250YWwgUkdCIGFuZCBCR1Igc3ViLXBpeGVsICAgICAgICAqLwotICAvKiAgICAgIGRpc3BsYXlzIGxpa2UgTENEIHNjcmVlbnMuICBJdCBwcm9kdWNlcyA4LWJpdCBiaXRtYXBzIHRoYXQgYXJlICAgKi8KLSAgLyogICAgICAzfnRpbWVzIHRoZSB3aWR0aCBvZiB0aGUgb3JpZ2luYWwgZ2x5cGggb3V0bGluZSBpbiBwaXhlbHMsIGFuZCAgICovCi0gIC8qICAgICAgd2hpY2ggdXNlIHRoZSBARlRfUElYRUxfTU9ERV9MQ0QgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUkVOREVSX01PREVfTENEX1YgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIHZlcnRpY2FsIFJHQiBhbmQgQkdSIHN1Yi1waXhlbCBkaXNwbGF5cyAqLwotICAvKiAgICAgIChsaWtlIFBEQSBzY3JlZW5zLCByb3RhdGVkIExDRCBkaXNwbGF5cywgZXRjLikuICBJdCBwcm9kdWNlcyAgICAgKi8KLSAgLyogICAgICA4LWJpdCBiaXRtYXBzIHRoYXQgYXJlIDN+dGltZXMgdGhlIGhlaWdodCBvZiB0aGUgb3JpZ2luYWwgICAgICAgICovCi0gIC8qICAgICAgZ2x5cGggb3V0bGluZSBpbiBwaXhlbHMgYW5kIHVzZSB0aGUgQEZUX1BJWEVMX01PREVfTENEX1YgbW9kZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNob3VsZCB5b3UgZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HIGluIHlvdXIgICAgICAqLwotICAvKiAgICBgZnRvcHRpb24uaCcsIHdoaWNoIGVuYWJsZXMgcGF0ZW50ZWQgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZywgICAgKi8KLSAgLyogICAgdGhlIExDRC1vcHRpbWl6ZWQgZ2x5cGggYml0bWFwcyBzaG91bGQgYmUgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yICovCi0gIC8qICAgIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LiAgWW91IGNhbiBlaXRoZXIgc2V0IHVwIExDRCAgICAqLwotICAvKiAgICBmaWx0ZXJpbmcgd2l0aCBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgb3IgQEZUX0ZhY2VfUHJvcGVydGllcywgICAgKi8KLSAgLyogICAgb3IgZG8gdGhlIGZpbHRlcmluZyB5b3Vyc2VsZi4gIFRoZSBkZWZhdWx0IEZyZWVUeXBlIExDRCByZW5kZXJpbmcgICovCi0gIC8qICAgIHRlY2hub2xvZ3kgZG9lcyBub3QgcmVxdWlyZSBmaWx0ZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHNlbGVjdGVkIHJlbmRlciBtb2RlIG9ubHkgYWZmZWN0cyB2ZWN0b3IgZ2x5cGhzIG9mIGEgZm9udC4gICAgICovCi0gIC8qICAgIEVtYmVkZGVkIGJpdG1hcHMgb2Z0ZW4gaGF2ZSBhIGRpZmZlcmVudCBwaXhlbCBtb2RlIGxpa2UgICAgICAgICAgICAqLwotICAvKiAgICBARlRfUElYRUxfTU9ERV9NT05PLiAgWW91IGNhbiB1c2UgQEZUX0JpdG1hcF9Db252ZXJ0IHRvIHRyYW5zZm9ybSAgKi8KLSAgLyogICAgdGhlbSBpbnRvIDgtYml0IHBpeG1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfUmVuZGVyX01vZGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJlbmRlciBtb2RlcyBzdXBwb3J0ZWQgYnkgRnJlZVR5cGV+Mi4gIEVhY2ggbW9kZSBjb3JyZXNwb25kcyB0byBhCisgICAqICAgc3BlY2lmaWMgdHlwZSBvZiBzY2FubGluZSBjb252ZXJzaW9uIHBlcmZvcm1lZCBvbiB0aGUgb3V0bGluZS4KKyAgICoKKyAgICogICBGb3IgYml0bWFwIGZvbnRzIGFuZCBlbWJlZGRlZCBiaXRtYXBzIHRoZSBgYml0bWFwLT5waXhlbF9tb2RlJworICAgKiAgIGZpZWxkIGluIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSBnaXZlcyB0aGUgZm9ybWF0IG9mIHRoZQorICAgKiAgIHJldHVybmVkIGJpdG1hcC4KKyAgICoKKyAgICogICBBbGwgbW9kZXMgZXhjZXB0IEBGVF9SRU5ERVJfTU9ERV9NT05PIHVzZSAyNTYgbGV2ZWxzIG9mIG9wYWNpdHksCisgICAqICAgaW5kaWNhdGluZyBwaXhlbCBjb3ZlcmFnZS4gIFVzZSBsaW5lYXIgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hCisgICAqICAgY29ycmVjdGlvbiB0byBjb3JyZWN0bHkgcmVuZGVyIG5vbi1tb25vY2hyb21lIGdseXBoIGJpdG1hcHMgb250byBhCisgICAqICAgc3VyZmFjZTsgc2VlIEBGVF9SZW5kZXJfR2x5cGguCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfUkVOREVSX01PREVfTk9STUFMIDo6CisgICAqICAgICBEZWZhdWx0IHJlbmRlciBtb2RlOyBpdCBjb3JyZXNwb25kcyB0byA4LWJpdCBhbnRpLWFsaWFzZWQKKyAgICogICAgIGJpdG1hcHMuCisgICAqCisgICAqICAgRlRfUkVOREVSX01PREVfTElHSFQgOjoKKyAgICogICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBARlRfUkVOREVSX01PREVfTk9STUFMLiAgSXQgaXMgb25seQorICAgKiAgICAgZGVmaW5lZCBhcyBhIHNlcGFyYXRlIHZhbHVlIGJlY2F1c2UgcmVuZGVyIG1vZGVzIGFyZSBhbHNvIHVzZWQKKyAgICogICAgIGluZGlyZWN0bHkgdG8gZGVmaW5lIGhpbnRpbmcgYWxnb3JpdGhtIHNlbGVjdG9ycy4gIFNlZQorICAgKiAgICAgQEZUX0xPQURfVEFSR0VUX1hYWCBmb3IgZGV0YWlscy4KKyAgICoKKyAgICogICBGVF9SRU5ERVJfTU9ERV9NT05PIDo6CisgICAqICAgICBUaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gMS1iaXQgYml0bWFwcyAod2l0aCAyfmxldmVscyBvZgorICAgKiAgICAgb3BhY2l0eSkuCisgICAqCisgICAqICAgRlRfUkVOREVSX01PREVfTENEIDo6CisgICAqICAgICBUaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gaG9yaXpvbnRhbCBSR0IgYW5kIEJHUiBzdWJwaXhlbAorICAgKiAgICAgZGlzcGxheXMgbGlrZSBMQ0Qgc2NyZWVucy4gIEl0IHByb2R1Y2VzIDgtYml0IGJpdG1hcHMgdGhhdCBhcmUKKyAgICogICAgIDN+dGltZXMgdGhlIHdpZHRoIG9mIHRoZSBvcmlnaW5hbCBnbHlwaCBvdXRsaW5lIGluIHBpeGVscywgYW5kCisgICAqICAgICB3aGljaCB1c2UgdGhlIEBGVF9QSVhFTF9NT0RFX0xDRCBtb2RlLgorICAgKgorICAgKiAgIEZUX1JFTkRFUl9NT0RFX0xDRF9WIDo6CisgICAqICAgICBUaGlzIG1vZGUgY29ycmVzcG9uZHMgdG8gdmVydGljYWwgUkdCIGFuZCBCR1Igc3VicGl4ZWwgZGlzcGxheXMKKyAgICogICAgIChsaWtlIFBEQSBzY3JlZW5zLCByb3RhdGVkIExDRCBkaXNwbGF5cywgZXRjLikuICBJdCBwcm9kdWNlcworICAgKiAgICAgOC1iaXQgYml0bWFwcyB0aGF0IGFyZSAzfnRpbWVzIHRoZSBoZWlnaHQgb2YgdGhlIG9yaWdpbmFsCisgICAqICAgICBnbHlwaCBvdXRsaW5lIGluIHBpeGVscyBhbmQgdXNlIHRoZSBARlRfUElYRUxfTU9ERV9MQ0RfViBtb2RlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBTaG91bGQgeW91IGRlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyCisgICAqICAgYGZ0b3B0aW9uLmgnLCB3aGljaCBlbmFibGVzIHBhdGVudGVkIENsZWFyVHlwZS1zdHlsZSByZW5kZXJpbmcsCisgICAqICAgdGhlIExDRC1vcHRpbWl6ZWQgZ2x5cGggYml0bWFwcyBzaG91bGQgYmUgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yCisgICAqICAgZnJpbmdlcyBpbmhlcmVudCB0byB0aGlzIHRlY2hub2xvZ3kuICBZb3UgY2FuIGVpdGhlciBzZXQgdXAgTENECisgICAqICAgZmlsdGVyaW5nIHdpdGggQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIG9yIEBGVF9GYWNlX1Byb3BlcnRpZXMsCisgICAqICAgb3IgZG8gdGhlIGZpbHRlcmluZyB5b3Vyc2VsZi4gIFRoZSBkZWZhdWx0IEZyZWVUeXBlIExDRCByZW5kZXJpbmcKKyAgICogICB0ZWNobm9sb2d5IGRvZXMgbm90IHJlcXVpcmUgZmlsdGVyaW5nLgorICAgKgorICAgKiAgIFRoZSBzZWxlY3RlZCByZW5kZXIgbW9kZSBvbmx5IGFmZmVjdHMgdmVjdG9yIGdseXBocyBvZiBhIGZvbnQuCisgICAqICAgRW1iZWRkZWQgYml0bWFwcyBvZnRlbiBoYXZlIGEgZGlmZmVyZW50IHBpeGVsIG1vZGUgbGlrZQorICAgKiAgIEBGVF9QSVhFTF9NT0RFX01PTk8uICBZb3UgY2FuIHVzZSBARlRfQml0bWFwX0NvbnZlcnQgdG8gdHJhbnNmb3JtCisgICAqICAgdGhlbSBpbnRvIDgtYml0IHBpeG1hcHMuCisgICAqLwogICB0eXBlZGVmIGVudW0gIEZUX1JlbmRlcl9Nb2RlXwogICB7CiAgICAgRlRfUkVOREVSX01PREVfTk9STUFMID0gMCwKQEAgLTMyNDgsMTQyICszMzkwLDE1NSBAQAogI2RlZmluZSBmdF9yZW5kZXJfbW9kZV9tb25vICAgIEZUX1JFTkRFUl9NT0RFX01PTk8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlbmRlcl9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbnZlcnQgYSBnaXZlbiBnbHlwaCBpbWFnZSB0byBhIGJpdG1hcC4gIEl0IGRvZXMgc28gYnkgaW5zcGVjdGluZyAqLwotICAvKiAgICB0aGUgZ2x5cGggaW1hZ2UgZm9ybWF0LCBmaW5kaW5nIHRoZSByZWxldmFudCByZW5kZXJlciwgYW5kICAgICAgICAgKi8KLSAgLyogICAgaW52b2tpbmcgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2xvdCAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIGdseXBoIHNsb3QgY29udGFpbmluZyB0aGUgaW1hZ2UgdG8gICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGNvbnZlcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlbmRlcl9tb2RlIDo6IFRoZSByZW5kZXIgbW9kZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2x5cGggaW1hZ2UgaW50byAqLwotICAvKiAgICAgICAgICAgICAgICAgICBhIGJpdG1hcC4gIFNlZSBARlRfUmVuZGVyX01vZGUgZm9yIGEgbGlzdCBvZiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgcG9zc2libGUgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoICAgICovCi0gIC8qICAgIGZ1bmN0aW9ucyBsaWtlIEBGVF9TZXRfQ2hhcl9TaXplIGJlZm9yZSBjYWxsaW5nIGBGVF9SZW5kZXJfR2x5cGgnLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGcmVlVHlwZSBvdXRwdXRzIGEgYml0bWFwIG9mIGEgZ2x5cGgsIGl0IHJlYWxseSBvdXRwdXRzIGFuICAgICovCi0gIC8qICAgIGFscGhhIGNvdmVyYWdlIG1hcC4gIElmIGEgcGl4ZWwgaXMgY29tcGxldGVseSBjb3ZlcmVkIGJ5IGEgICAgICAgICAqLwotICAvKiAgICBmaWxsZWQtaW4gb3V0bGluZSwgdGhlIGJpdG1hcCBjb250YWlucyAweEZGIGF0IHRoYXQgcGl4ZWwsIG1lYW5pbmcgKi8KLSAgLyogICAgdGhhdCAweEZGLzB4RkYgZnJhY3Rpb24gb2YgdGhhdCBwaXhlbCBpcyBjb3ZlcmVkLCBtZWFuaW5nIHRoZSAgICAgICovCi0gIC8qICAgIHBpeGVsIGlzIDEwMCUgYmxhY2sgKG9yIDAlIGJyaWdodCkuICBJZiBhIHBpeGVsIGlzIG9ubHkgNTAlICAgICAgICAqLwotICAvKiAgICBjb3ZlcmVkICh2YWx1ZSAweDgwKSwgdGhlIHBpeGVsIGlzIG1hZGUgNTAlIGJsYWNrICg1MCUgYnJpZ2h0IG9yIGEgKi8KLSAgLyogICAgbWlkZGxlIHNoYWRlIG9mIGdyZXkpLiAgMCUgY292ZXJlZCBtZWFucyAwJSBibGFjayAoMTAwJSBicmlnaHQgb3IgICovCi0gIC8qICAgIHdoaXRlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT24gaGlnaC1EUEkgc2NyZWVucyBsaWtlIG9uIHNtYXJ0cGhvbmVzIGFuZCB0YWJsZXRzLCB0aGUgcGl4ZWxzICAgICovCi0gIC8qICAgIGFyZSBzbyBzbWFsbCB0aGF0IHRoZWlyIGNoYW5jZSBvZiBiZWluZyBjb21wbGV0ZWx5IGNvdmVyZWQgYW5kICAgICAqLwotICAvKiAgICB0aGVyZWZvcmUgY29tcGxldGVseSBibGFjayBhcmUgZmFpcmx5IGdvb2QuICBPbiB0aGUgbG93LURQSSAgICAgICAgKi8KLSAgLyogICAgc2NyZWVucywgaG93ZXZlciwgdGhlIHNpdHVhdGlvbiBpcyBkaWZmZXJlbnQuICBUaGUgcGl4ZWxzIGFyZSB0b28gICovCi0gIC8qICAgIGxhcmdlIGZvciBtb3N0IG9mIHRoZSBkZXRhaWxzIG9mIGEgZ2x5cGggYW5kIHNoYWRlcyBvZiBncmF5IGFyZSAgICAqLwotICAvKiAgICB0aGUgbm9ybSByYXRoZXIgdGhhbiB0aGUgZXhjZXB0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgaXMgcmVsZXZhbnQgYmVjYXVzZSBhbGwgb3VyIHNjcmVlbnMgaGF2ZSBhIHNlY29uZCBwcm9ibGVtOiAgICAqLwotICAvKiAgICB0aGV5IGFyZSBub3QgbGluZWFyLiAgMX4rfjEgaXMgbm90fjIuICBUd2ljZSB0aGUgdmFsdWUgZG9lcyBub3QgICAgKi8KLSAgLyogICAgcmVzdWx0IGluIHR3aWNlIHRoZSBicmlnaHRuZXNzLiAgV2hlbiBhIHBpeGVsIGlzIG9ubHkgNTAlIGNvdmVyZWQsICovCi0gIC8qICAgIHRoZSBjb3ZlcmFnZSBtYXAgc2F5cyA1MCUgYmxhY2ssIGFuZCB0aGlzIHRyYW5zbGF0ZXMgdG8gYSBwaXhlbCAgICAqLwotICAvKiAgICB2YWx1ZSBvZiAxMjggd2hlbiB5b3UgdXNlIDh+Yml0cyBwZXIgY2hhbm5lbCAoMC0yNTUpLiAgSG93ZXZlciwgICAgKi8KLSAgLyogICAgdGhpcyBkb2VzIG5vdCB0cmFuc2xhdGUgdG8gNTAlIGJyaWdodG5lc3MgZm9yIHRoYXQgcGl4ZWwgb24gb3VyICAgICovCi0gIC8qICAgIHNSR0IgYW5kIGdhbW1hfjIuMiBzY3JlZW5zLiAgRHVlIHRvIHRoZWlyIG5vbi1saW5lYXJpdHksIHRoZXkgICAgICAqLwotICAvKiAgICBkd2VsbCBsb25nZXIgaW4gdGhlIGRhcmtzIGFuZCBvbmx5IGEgcGl4ZWwgdmFsdWUgb2YgYWJvdXQgMTg2ICAgICAgKi8KLSAgLyogICAgcmVzdWx0cyBpbiA1MCUgYnJpZ2h0bmVzcyAtLSAxMjggZW5kcyB1cCB0b28gZGFyayBvbiBib3RoIGJyaWdodCAgICovCi0gIC8qICAgIGFuZCBkYXJrIGJhY2tncm91bmRzLiAgVGhlIG5ldCByZXN1bHQgaXMgdGhhdCBkYXJrIHRleHQgbG9va3MgICAgICAqLwotICAvKiAgICBidXJudC1vdXQsIHBpeGVseSBhbmQgYmxvdGNoeSBvbiBicmlnaHQgYmFja2dyb3VuZCwgYnJpZ2h0IHRleHQgICAgKi8KLSAgLyogICAgdG9vIGZyYWlsIG9uIGRhcmsgYmFja2dyb3VuZHMsIGFuZCBjb2xvcmVkIHRleHQgb24gY29sb3JlZCAgICAgICAgICovCi0gIC8qICAgIGJhY2tncm91bmQgKGZvciBleGFtcGxlLCByZWQgb24gZ3JlZW4pIHNlZW1zIHRvIGhhdmUgZGFyayBoYWxvcyBvciAqLwotICAvKiAgICBgZGlydCcgYXJvdW5kIGl0LiAgVGhlIHNpdHVhdGlvbiBpcyBlc3BlY2lhbGx5IHVnbHkgZm9yIGRpYWdvbmFsICAgKi8KLSAgLyogICAgc3RlbXMgbGlrZSBpbiBgdycgZ2x5cGggc2hhcGVzIHdoZXJlIHRoZSBxdWFsaXR5IG9mIEZyZWVUeXBlJ3MgICAgICovCi0gIC8qICAgIGFudGktYWxpYXNpbmcgZGVwZW5kcyBvbiB0aGUgY29ycmVjdCBkaXNwbGF5IG9mIGdyYXlzLiAgT24gICAgICAgICAqLwotICAvKiAgICBoaWdoLURQSSBzY3JlZW5zIHdoZXJlIHNtYWxsZXIsIGZ1bGx5IGJsYWNrIHBpeGVscyByZWlnbiBzdXByZW1lLCAgKi8KLSAgLyogICAgdGhpcyBkb2Vzbid0IG1hdHRlciwgYnV0IG9uIG91ciBsb3ctRFBJIHNjcmVlbnMgd2l0aCBhbGwgdGhlIGdyYXkgICovCi0gIC8qICAgIHNoYWRlcywgaXQgZG9lcy4gIDAlIGFuZCAxMDAlIGJyaWdodG5lc3MgYXJlIHRoZSBzYW1lIHRoaW5ncyBpbiAgICAqLwotICAvKiAgICBsaW5lYXIgYW5kIG5vbi1saW5lYXIgc3BhY2UsIGp1c3QgYWxsIHRoZSBzaGFkZXMgaW4tYmV0d2VlbiAgICAgICAgKi8KLSAgLyogICAgYXJlbid0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYmxlbmRpbmcgZnVuY3Rpb24gZm9yIHBsYWNpbmcgdGV4dCBvdmVyIGEgYmFja2dyb3VuZCBpcyAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGRzdCA9IGFscGhhICogc3JjICsgKDEgLSBhbHBoYSkgKiBkc3QgICAgLCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aGljaCBpcyBrbm93biBhcyB0aGUgT1ZFUiBvcGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRvIGNvcnJlY3RseSBjb21wb3NpdGUgYW4gYW50aWFsaWFzZWQgcGl4ZWwgb2YgYSBnbHlwaCBvbnRvIGEgICAgICAqLwotICAvKiAgICBzdXJmYWNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDEuIHRha2UgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIChlLmcuLCBpbiBzUkdCIHNwYWNlKSAqLwotICAvKiAgICAgICBhbmQgYXBwbHkgZ2FtbWEgdG8gZ2V0IHRoZW0gaW4gYSBsaW5lYXIgc3BhY2UsICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuIHVzZSBPVkVSIHRvIGJsZW5kIHRoZSB0d28gbGluZWFyIGNvbG9ycyB1c2luZyB0aGUgZ2x5cGggcGl4ZWwgICAqLwotICAvKiAgICAgICBhcyB0aGUgYWxwaGEgdmFsdWUgKHJlbWVtYmVyLCB0aGUgZ2x5cGggYml0bWFwIGlzIGFuIGFscGhhICAgICAgKi8KLSAgLyogICAgICAgY292ZXJhZ2UgYml0bWFwKSwgYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAzLiBhcHBseSBpbnZlcnNlIGdhbW1hIHRvIHRoZSBibGVuZGVkIHBpeGVsIGFuZCB3cml0ZSBpdCBiYWNrIHRvICAgKi8KLSAgLyogICAgICAgdGhlIGltYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbnRlcm5hbCB0ZXN0aW5nIGF0IEFkb2JlIGZvdW5kIHRoYXQgYSB0YXJnZXQgaW52ZXJzZSBnYW1tYSBvZn4xLjggKi8KLSAgLyogICAgZm9yIHN0ZXB+MyBnaXZlcyBnb29kIHJlc3VsdHMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBkaXNwbGF5cyB3aXRoICovCi0gIC8qICAgIGFuIHNSR0IgZ2FtbWEgY3VydmUgb3IgYSBzaW1pbGFyIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBwcm9jZXNzIGNhbiBjb3N0IHBlcmZvcm1hbmNlLiAgVGhlcmUgaXMgYW4gYXBwcm94aW1hdGlvbiB0aGF0ICovCi0gIC8qICAgIGRvZXMgbm90IG5lZWQgdG8ga25vdyBhYm91dCB0aGUgYmFja2dyb3VuZCBjb2xvcjsgc2VlICAgICAgICAgICAgICAqLwotICAvKiAgICBodHRwczovL2JlbC5maS9hbGFua2lsYS9sY2QvIGFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaHR0cHM6Ly9iZWwuZmkvYWxhbmtpbGEvbGNkL2FscGNvci5odG1sIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAqQVRURU5USU9OKjogTGluZWFyIGJsZW5kaW5nIGlzIGV2ZW4gbW9yZSBpbXBvcnRhbnQgd2hlbiBkZWFsaW5nICAgKi8KLSAgLyogICAgd2l0aCBzdWJwaXhlbC1yZW5kZXJlZCBnbHlwaHMgdG8gcHJldmVudCBjb2xvci1mcmluZ2luZyEgIEEgICAgICAgICovCi0gIC8qICAgIHN1YnBpeGVsLXJlbmRlcmVkIGdseXBoIG11c3QgZmlyc3QgYmUgZmlsdGVyZWQgd2l0aCBhIGZpbHRlciB0aGF0ICAqLwotICAvKiAgICBnaXZlcyBlcXVhbCB3ZWlnaHQgdG8gdGhlIHRocmVlIGNvbG9yIHByaW1hcmllcyBhbmQgZG9lcyBub3QgICAgICAgKi8KLSAgLyogICAgZXhjZWVkIGEgc3VtIG9mIDB4MTAwLCBzZWUgc2VjdGlvbiBAbGNkX2ZpbHRlcmluZy4gIFRoZW4gdGhlICAgICAgICovCi0gIC8qICAgIG9ubHkgZGlmZmVyZW5jZSB0byBncmF5IGxpbmVhciBibGVuZGluZyBpcyB0aGF0IHN1YnBpeGVsLXJlbmRlcmVkICAqLwotICAvKiAgICBsaW5lYXIgYmxlbmRpbmcgaXMgZG9uZSAzfnRpbWVzIHBlciBwaXhlbDogcmVkIGZvcmVncm91bmQgc3VicGl4ZWwgKi8KLSAgLyogICAgdG8gcmVkIGJhY2tncm91bmQgc3VicGl4ZWwgYW5kIHNvIG9uIGZvciBncmVlbiBhbmQgYmx1ZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1JlbmRlcl9HbHlwaAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ29udmVydCBhIGdpdmVuIGdseXBoIGltYWdlIHRvIGEgYml0bWFwLiAgSXQgZG9lcyBzbyBieSBpbnNwZWN0aW5nCisgICAqICAgdGhlIGdseXBoIGltYWdlIGZvcm1hdCwgZmluZGluZyB0aGUgcmVsZXZhbnQgcmVuZGVyZXIsIGFuZAorICAgKiAgIGludm9raW5nIGl0LgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgc2xvdCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGdseXBoIHNsb3QgY29udGFpbmluZyB0aGUgaW1hZ2UgdG8KKyAgICogICAgIGNvbnZlcnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICByZW5kZXJfbW9kZSA6OgorICAgKiAgICAgVGhlIHJlbmRlciBtb2RlIHVzZWQgdG8gcmVuZGVyIHRoZSBnbHlwaCBpbWFnZSBpbnRvCisgICAqICAgICBhIGJpdG1hcC4gIFNlZSBARlRfUmVuZGVyX01vZGUgZm9yIGEgbGlzdCBvZgorICAgKiAgICAgcG9zc2libGUgdmFsdWVzLgorICAgKgorICAgKiAgICAgSWYgQEZUX1JFTkRFUl9NT0RFX05PUk1BTCBpcyB1c2VkLCB0aGUgZmxhZworICAgKiAgICAgQEZUX0xPQURfQ09MT1IgY2FuIGJlIGFkZGl0aW9uYWxseSBzZXQgdG8gbWFrZSB0aGUKKyAgICogICAgIGZ1bmN0aW9uIHByb3ZpZGUgYSBkZWZhdWx0IGJsZW5kaW5nIG9mIGNvbG9yZWQKKyAgICogICAgIGdseXBoIGxheWVycyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZ2x5cGggc2xvdAorICAgKiAgICAgKHByb3ZpZGVkIHRoZSBmb250IGNvbnRhaW5zIHN1Y2ggbGF5ZXJzKSBpbnN0ZWFkIG9mCisgICAqICAgICByZW5kZXJpbmcgdGhlIGdseXBoIHNsb3QncyBvdXRsaW5lLiAgU2VlCisgICAqICAgICBARlRfTE9BRF9DT0xPUiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUbyBnZXQgbWVhbmluZ2Z1bCByZXN1bHRzLCBmb250IHNjYWxpbmcgdmFsdWVzIG11c3QgYmUgc2V0IHdpdGgKKyAgICogICBmdW5jdGlvbnMgbGlrZSBARlRfU2V0X0NoYXJfU2l6ZSBiZWZvcmUgY2FsbGluZyBgRlRfUmVuZGVyX0dseXBoJy4KKyAgICoKKyAgICogICBXaGVuIEZyZWVUeXBlIG91dHB1dHMgYSBiaXRtYXAgb2YgYSBnbHlwaCwgaXQgcmVhbGx5IG91dHB1dHMgYW4KKyAgICogICBhbHBoYSBjb3ZlcmFnZSBtYXAuICBJZiBhIHBpeGVsIGlzIGNvbXBsZXRlbHkgY292ZXJlZCBieSBhCisgICAqICAgZmlsbGVkLWluIG91dGxpbmUsIHRoZSBiaXRtYXAgY29udGFpbnMgMHhGRiBhdCB0aGF0IHBpeGVsLCBtZWFuaW5nCisgICAqICAgdGhhdCAweEZGLzB4RkYgZnJhY3Rpb24gb2YgdGhhdCBwaXhlbCBpcyBjb3ZlcmVkLCBtZWFuaW5nIHRoZQorICAgKiAgIHBpeGVsIGlzIDEwMCUgYmxhY2sgKG9yIDAlIGJyaWdodCkuICBJZiBhIHBpeGVsIGlzIG9ubHkgNTAlCisgICAqICAgY292ZXJlZCAodmFsdWUgMHg4MCksIHRoZSBwaXhlbCBpcyBtYWRlIDUwJSBibGFjayAoNTAlIGJyaWdodCBvciBhCisgICAqICAgbWlkZGxlIHNoYWRlIG9mIGdyZXkpLiAgMCUgY292ZXJlZCBtZWFucyAwJSBibGFjayAoMTAwJSBicmlnaHQgb3IKKyAgICogICB3aGl0ZSkuCisgICAqCisgICAqICAgT24gaGlnaC1EUEkgc2NyZWVucyBsaWtlIG9uIHNtYXJ0cGhvbmVzIGFuZCB0YWJsZXRzLCB0aGUgcGl4ZWxzCisgICAqICAgYXJlIHNvIHNtYWxsIHRoYXQgdGhlaXIgY2hhbmNlIG9mIGJlaW5nIGNvbXBsZXRlbHkgY292ZXJlZCBhbmQKKyAgICogICB0aGVyZWZvcmUgY29tcGxldGVseSBibGFjayBhcmUgZmFpcmx5IGdvb2QuICBPbiB0aGUgbG93LURQSQorICAgKiAgIHNjcmVlbnMsIGhvd2V2ZXIsIHRoZSBzaXR1YXRpb24gaXMgZGlmZmVyZW50LiAgVGhlIHBpeGVscyBhcmUgdG9vCisgICAqICAgbGFyZ2UgZm9yIG1vc3Qgb2YgdGhlIGRldGFpbHMgb2YgYSBnbHlwaCBhbmQgc2hhZGVzIG9mIGdyYXkgYXJlCisgICAqICAgdGhlIG5vcm0gcmF0aGVyIHRoYW4gdGhlIGV4Y2VwdGlvbi4KKyAgICoKKyAgICogICBUaGlzIGlzIHJlbGV2YW50IGJlY2F1c2UgYWxsIG91ciBzY3JlZW5zIGhhdmUgYSBzZWNvbmQgcHJvYmxlbToKKyAgICogICB0aGV5IGFyZSBub3QgbGluZWFyLiAgMX4rfjEgaXMgbm90fjIuICBUd2ljZSB0aGUgdmFsdWUgZG9lcyBub3QKKyAgICogICByZXN1bHQgaW4gdHdpY2UgdGhlIGJyaWdodG5lc3MuICBXaGVuIGEgcGl4ZWwgaXMgb25seSA1MCUgY292ZXJlZCwKKyAgICogICB0aGUgY292ZXJhZ2UgbWFwIHNheXMgNTAlIGJsYWNrLCBhbmQgdGhpcyB0cmFuc2xhdGVzIHRvIGEgcGl4ZWwKKyAgICogICB2YWx1ZSBvZiAxMjggd2hlbiB5b3UgdXNlIDh+Yml0cyBwZXIgY2hhbm5lbCAoMC0yNTUpLiAgSG93ZXZlciwKKyAgICogICB0aGlzIGRvZXMgbm90IHRyYW5zbGF0ZSB0byA1MCUgYnJpZ2h0bmVzcyBmb3IgdGhhdCBwaXhlbCBvbiBvdXIKKyAgICogICBzUkdCIGFuZCBnYW1tYX4yLjIgc2NyZWVucy4gIER1ZSB0byB0aGVpciBub24tbGluZWFyaXR5LCB0aGV5CisgICAqICAgZHdlbGwgbG9uZ2VyIGluIHRoZSBkYXJrcyBhbmQgb25seSBhIHBpeGVsIHZhbHVlIG9mIGFib3V0IDE4NgorICAgKiAgIHJlc3VsdHMgaW4gNTAlIGJyaWdodG5lc3MgLS0gMTI4IGVuZHMgdXAgdG9vIGRhcmsgb24gYm90aCBicmlnaHQKKyAgICogICBhbmQgZGFyayBiYWNrZ3JvdW5kcy4gIFRoZSBuZXQgcmVzdWx0IGlzIHRoYXQgZGFyayB0ZXh0IGxvb2tzCisgICAqICAgYnVybnQtb3V0LCBwaXhlbHkgYW5kIGJsb3RjaHkgb24gYnJpZ2h0IGJhY2tncm91bmQsIGJyaWdodCB0ZXh0CisgICAqICAgdG9vIGZyYWlsIG9uIGRhcmsgYmFja2dyb3VuZHMsIGFuZCBjb2xvcmVkIHRleHQgb24gY29sb3JlZAorICAgKiAgIGJhY2tncm91bmQgKGZvciBleGFtcGxlLCByZWQgb24gZ3JlZW4pIHNlZW1zIHRvIGhhdmUgZGFyayBoYWxvcyBvcgorICAgKiAgIGBkaXJ0JyBhcm91bmQgaXQuICBUaGUgc2l0dWF0aW9uIGlzIGVzcGVjaWFsbHkgdWdseSBmb3IgZGlhZ29uYWwKKyAgICogICBzdGVtcyBsaWtlIGluIGB3JyBnbHlwaCBzaGFwZXMgd2hlcmUgdGhlIHF1YWxpdHkgb2YgRnJlZVR5cGUncworICAgKiAgIGFudGktYWxpYXNpbmcgZGVwZW5kcyBvbiB0aGUgY29ycmVjdCBkaXNwbGF5IG9mIGdyYXlzLiAgT24KKyAgICogICBoaWdoLURQSSBzY3JlZW5zIHdoZXJlIHNtYWxsZXIsIGZ1bGx5IGJsYWNrIHBpeGVscyByZWlnbiBzdXByZW1lLAorICAgKiAgIHRoaXMgZG9lc24ndCBtYXR0ZXIsIGJ1dCBvbiBvdXIgbG93LURQSSBzY3JlZW5zIHdpdGggYWxsIHRoZSBncmF5CisgICAqICAgc2hhZGVzLCBpdCBkb2VzLiAgMCUgYW5kIDEwMCUgYnJpZ2h0bmVzcyBhcmUgdGhlIHNhbWUgdGhpbmdzIGluCisgICAqICAgbGluZWFyIGFuZCBub24tbGluZWFyIHNwYWNlLCBqdXN0IGFsbCB0aGUgc2hhZGVzIGluLWJldHdlZW4KKyAgICogICBhcmVuJ3QuCisgICAqCisgICAqICAgVGhlIGJsZW5kaW5nIGZ1bmN0aW9uIGZvciBwbGFjaW5nIHRleHQgb3ZlciBhIGJhY2tncm91bmQgaXMKKyAgICoKKyAgICogICB7CisgICAqICAgICBkc3QgPSBhbHBoYSAqIHNyYyArICgxIC0gYWxwaGEpICogZHN0ICAgICwKKyAgICogICB9CisgICAqCisgICAqICAgd2hpY2ggaXMga25vd24gYXMgdGhlIE9WRVIgb3BlcmF0b3IuCisgICAqCisgICAqICAgVG8gY29ycmVjdGx5IGNvbXBvc2l0ZSBhbiBhbnRpYWxpYXNlZCBwaXhlbCBvZiBhIGdseXBoIG9udG8gYQorICAgKiAgIHN1cmZhY2UsCisgICAqCisgICAqICAgMS4gdGFrZSB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgKGUuZy4sIGluIHNSR0Igc3BhY2UpCisgICAqICAgICAgYW5kIGFwcGx5IGdhbW1hIHRvIGdldCB0aGVtIGluIGEgbGluZWFyIHNwYWNlLAorICAgKgorICAgKiAgIDIuIHVzZSBPVkVSIHRvIGJsZW5kIHRoZSB0d28gbGluZWFyIGNvbG9ycyB1c2luZyB0aGUgZ2x5cGggcGl4ZWwKKyAgICogICAgICBhcyB0aGUgYWxwaGEgdmFsdWUgKHJlbWVtYmVyLCB0aGUgZ2x5cGggYml0bWFwIGlzIGFuIGFscGhhCisgICAqICAgICAgY292ZXJhZ2UgYml0bWFwKSwgYW5kCisgICAqCisgICAqICAgMy4gYXBwbHkgaW52ZXJzZSBnYW1tYSB0byB0aGUgYmxlbmRlZCBwaXhlbCBhbmQgd3JpdGUgaXQgYmFjayB0bworICAgKiAgICAgIHRoZSBpbWFnZS4KKyAgICoKKyAgICogICBJbnRlcm5hbCB0ZXN0aW5nIGF0IEFkb2JlIGZvdW5kIHRoYXQgYSB0YXJnZXQgaW52ZXJzZSBnYW1tYSBvZn4xLjgKKyAgICogICBmb3Igc3RlcH4zIGdpdmVzIGdvb2QgcmVzdWx0cyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGRpc3BsYXlzIHdpdGgKKyAgICogICBhbiBzUkdCIGdhbW1hIGN1cnZlIG9yIGEgc2ltaWxhciBvbmUuCisgICAqCisgICAqICAgVGhpcyBwcm9jZXNzIGNhbiBjb3N0IHBlcmZvcm1hbmNlLiAgVGhlcmUgaXMgYW4gYXBwcm94aW1hdGlvbiB0aGF0CisgICAqICAgZG9lcyBub3QgbmVlZCB0byBrbm93IGFib3V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yOyBzZWUKKyAgICogICBodHRwczovL2JlbC5maS9hbGFua2lsYS9sY2QvIGFuZAorICAgKiAgIGh0dHBzOi8vYmVsLmZpL2FsYW5raWxhL2xjZC9hbHBjb3IuaHRtbCBmb3IgZGV0YWlscy4KKyAgICoKKyAgICogICAqQVRURU5USU9OKjogTGluZWFyIGJsZW5kaW5nIGlzIGV2ZW4gbW9yZSBpbXBvcnRhbnQgd2hlbiBkZWFsaW5nCisgICAqICAgd2l0aCBzdWJwaXhlbC1yZW5kZXJlZCBnbHlwaHMgdG8gcHJldmVudCBjb2xvci1mcmluZ2luZyEgIEEKKyAgICogICBzdWJwaXhlbC1yZW5kZXJlZCBnbHlwaCBtdXN0IGZpcnN0IGJlIGZpbHRlcmVkIHdpdGggYSBmaWx0ZXIgdGhhdAorICAgKiAgIGdpdmVzIGVxdWFsIHdlaWdodCB0byB0aGUgdGhyZWUgY29sb3IgcHJpbWFyaWVzIGFuZCBkb2VzIG5vdAorICAgKiAgIGV4Y2VlZCBhIHN1bSBvZiAweDEwMCwgc2VlIHNlY3Rpb24gQGxjZF9yZW5kZXJpbmcuICBUaGVuIHRoZQorICAgKiAgIG9ubHkgZGlmZmVyZW5jZSB0byBncmF5IGxpbmVhciBibGVuZGluZyBpcyB0aGF0IHN1YnBpeGVsLXJlbmRlcmVkCisgICAqICAgbGluZWFyIGJsZW5kaW5nIGlzIGRvbmUgM350aW1lcyBwZXIgcGl4ZWw6IHJlZCBmb3JlZ3JvdW5kIHN1YnBpeGVsCisgICAqICAgdG8gcmVkIGJhY2tncm91bmQgc3VicGl4ZWwgYW5kIHNvIG9uIGZvciBncmVlbiBhbmQgYmx1ZS4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9SZW5kZXJfR2x5cGgoIEZUX0dseXBoU2xvdCAgICBzbG90LAogICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfS2VybmluZ19Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdG8gc3BlY2lmeSB0aGUgZm9ybWF0IG9mIGtlcm5pbmcgdmFsdWVzIHJldHVybmVkIGJ5ICovCi0gIC8qICAgIEBGVF9HZXRfS2VybmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgOjogUmV0dXJuIGdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0tFUk5JTkdfVU5GSVRURUQgOjogUmV0dXJuIHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgZGlzdGFuY2VzIGluICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0tFUk5JTkdfVU5TQ0FMRUQgOjogUmV0dXJuIHRoZSBrZXJuaW5nIHZlY3RvciBpbiBvcmlnaW5hbCBmb250ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9LRVJOSU5HX0RFRkFVTFQgcmV0dXJucyBmdWxsIHBpeGVsIHZhbHVlczsgaXQgYWxzbyBtYWtlcyAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgaGV1cmlzdGljYWxseSBzY2FsZSBkb3duIGtlcm5pbmcgZGlzdGFuY2VzIGF0IHNtYWxsIHBwZW0gICovCi0gIC8qICAgIHZhbHVlcyBzbyB0aGF0IHRoZXkgZG9uJ3QgYmVjb21lIHRvbyBiaWcuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQm90aCBGVF9LRVJOSU5HX0RFRkFVTFQgYW5kIEZUX0tFUk5JTkdfVU5GSVRURUQgdXNlIHRoZSBjdXJyZW50ICAgICovCi0gIC8qICAgIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IgKGFzIHNldCBlLmcuIHdpdGggQEZUX1NldF9DaGFyX1NpemUpIHRvICAqLwotICAvKiAgICBjb252ZXJ0IGZvbnQgdW5pdHMgdG8gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9LZXJuaW5nX01vZGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIGVudW1lcmF0aW9uIHRvIHNwZWNpZnkgdGhlIGZvcm1hdCBvZiBrZXJuaW5nIHZhbHVlcyByZXR1cm5lZCBieQorICAgKiAgIEBGVF9HZXRfS2VybmluZy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9LRVJOSU5HX0RFRkFVTFQgOjoKKyAgICogICAgIFJldHVybiBncmlkLWZpdHRlZCBrZXJuaW5nIGRpc3RhbmNlcyBpbgorICAgKiAgICAgMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4KKyAgICoKKyAgICogICBGVF9LRVJOSU5HX1VORklUVEVEIDo6CisgICAqICAgICBSZXR1cm4gdW4tZ3JpZC1maXR0ZWQga2VybmluZyBkaXN0YW5jZXMgaW4KKyAgICogICAgIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuCisgICAqCisgICAqICAgRlRfS0VSTklOR19VTlNDQUxFRCA6OgorICAgKiAgICAgUmV0dXJuIHRoZSBrZXJuaW5nIHZlY3RvciBpbiBvcmlnaW5hbCBmb250CisgICAqICAgICB1bml0cy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRlRfS0VSTklOR19ERUZBVUxUIHJldHVybnMgZnVsbCBwaXhlbCB2YWx1ZXM7IGl0IGFsc28gbWFrZXMKKyAgICogICBGcmVlVHlwZSBoZXVyaXN0aWNhbGx5IHNjYWxlIGRvd24ga2VybmluZyBkaXN0YW5jZXMgYXQgc21hbGwgcHBlbQorICAgKiAgIHZhbHVlcyBzbyB0aGF0IHRoZXkgZG9uJ3QgYmVjb21lIHRvbyBiaWcuCisgICAqCisgICAqICAgQm90aCBGVF9LRVJOSU5HX0RFRkFVTFQgYW5kIEZUX0tFUk5JTkdfVU5GSVRURUQgdXNlIHRoZSBjdXJyZW50CisgICAqICAgaG9yaXpvbnRhbCBzY2FsaW5nIGZhY3RvciAoYXMgc2V0IGUuZy4gd2l0aCBARlRfU2V0X0NoYXJfU2l6ZSkgdG8KKyAgICogICBjb252ZXJ0IGZvbnQgdW5pdHMgdG8gcGl4ZWxzLgorICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9LZXJuaW5nX01vZGVfCiAgIHsKICAgICBGVF9LRVJOSU5HX0RFRkFVTFQgPSAwLApAQCAtMzQwMCw0NCArMzU1NSw0OSBAQAogI2RlZmluZSBmdF9rZXJuaW5nX3Vuc2NhbGVkICBGVF9LRVJOSU5HX1VOU0NBTEVECiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvIGdseXBocyBvZiB0aGUgc2FtZSBmYWNlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBrZXJuX21vZGUgICA6OiBTZWUgQEZUX0tlcm5pbmdfTW9kZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgc2NhbGUgYW5kIGRpbWVuc2lvbiBvZiB0aGUgcmV0dXJuZWQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFrZXJuaW5nICAgIDo6IFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgZWl0aGVyIGluIGZvbnQgdW5pdHMsICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscyAoMjYuNiBmb3JtYXQpLCBvciBwaXhlbHMgZm9yICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cywgYW5kIGluIHBpeGVscyBmb3IgZml4ZWQtc2l6ZXMgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgaG9yaXpvbnRhbCBsYXlvdXRzIChsZWZ0LXRvLXJpZ2h0ICYgcmlnaHQtdG8tbGVmdCkgYXJlICAgICAgICAqLwotICAvKiAgICBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2QuICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICAgKi8KLSAgLyogICAga2VybmluZ3MsIGFyZSBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgQVBJIGZ1bmN0aW9uIC0tIHRoZXkgY2FuIGJlICovCi0gIC8qICAgIGltcGxlbWVudGVkIHRocm91Z2ggZm9ybWF0LXNwZWNpZmljIGludGVyZmFjZXMuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgS2VybmluZyBmb3IgT3BlblR5cGUgZm9udHMgaW1wbGVtZW50ZWQgaW4gYSBgR1BPUycgdGFibGUgaXMgbm90ICAgICovCi0gIC8qICAgIHN1cHBvcnRlZDsgdXNlIEBGVF9IQVNfS0VSTklORyB0byBmaW5kIG91dCB3aGV0aGVyIGEgZm9udCBoYXMgZGF0YSAqLwotICAvKiAgICB0aGF0IGNhbiBiZSBleHRyYWN0ZWQgd2l0aCBgRlRfR2V0X0tlcm5pbmcnLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X0tlcm5pbmcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gZ2x5cGhzIG9mIHRoZSBzYW1lIGZhY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBsZWZ0X2dseXBoIDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGxlZnQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4KKyAgICoKKyAgICogICByaWdodF9nbHlwaCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLgorICAgKgorICAgKiAgIGtlcm5fbW9kZSA6OgorICAgKiAgICAgU2VlIEBGVF9LZXJuaW5nX01vZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAqICAgICBEZXRlcm1pbmVzIHRoZSBzY2FsZSBhbmQgZGltZW5zaW9uIG9mIHRoZSByZXR1cm5lZAorICAgKiAgICAga2VybmluZyB2ZWN0b3IuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWtlcm5pbmcgOjoKKyAgICogICAgIFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgZWl0aGVyIGluIGZvbnQgdW5pdHMsCisgICAqICAgICBmcmFjdGlvbmFsIHBpeGVscyAoMjYuNiBmb3JtYXQpLCBvciBwaXhlbHMgZm9yCisgICAqICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcworICAgKiAgICAgZm9ybWF0cy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZQorICAgKiAgIHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZC4gIE90aGVyIGxheW91dHMsIG9yIG1vcmUgc29waGlzdGljYXRlZAorICAgKiAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGlzIEFQSSBmdW5jdGlvbiAtLSB0aGV5IGNhbiBiZQorICAgKiAgIGltcGxlbWVudGVkIHRocm91Z2ggZm9ybWF0LXNwZWNpZmljIGludGVyZmFjZXMuCisgICAqCisgICAqICAgS2VybmluZyBmb3IgT3BlblR5cGUgZm9udHMgaW1wbGVtZW50ZWQgaW4gYSBgR1BPUycgdGFibGUgaXMgbm90CisgICAqICAgc3VwcG9ydGVkOyB1c2UgQEZUX0hBU19LRVJOSU5HIHRvIGZpbmQgb3V0IHdoZXRoZXIgYSBmb250IGhhcyBkYXRhCisgICAqICAgdGhhdCBjYW4gYmUgZXh0cmFjdGVkIHdpdGggYEZUX0dldF9LZXJuaW5nJy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfS2VybmluZyggRlRfRmFjZSAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCkBAIC0zNDQ2LDM5ICszNjA2LDQzIEBACiAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICpha2VybmluZyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X1RyYWNrX0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSB0cmFjayBrZXJuaW5nIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb2ludF9zaXplIDo6IFRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlZ3JlZSAgICAgOjogVGhlIGRlZ3JlZSBvZiB0aWdodG5lc3MuICBJbmNyZWFzaW5nbHkgbmVnYXRpdmUgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyByZXByZXNlbnQgdGlnaHRlciB0cmFjayBrZXJuaW5nLCB3aGlsZSAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nbHkgcG9zaXRpdmUgdmFsdWVzIHJlcHJlc2VudCBsb29zZXIgdHJhY2sgICovCi0gIC8qICAgICAgICAgICAgICAgICAga2VybmluZy4gIFZhbHVlIHplcm8gbWVhbnMgbm8gdHJhY2sga2VybmluZy4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFrZXJuaW5nICAgOjogVGhlIGtlcm5pbmcgaW4gMTYuMTYgZnJhY3Rpb25hbCBwb2ludHMsIHRvIGJlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHVuaWZvcm1seSBhcHBsaWVkIGJldHdlZW4gYWxsIGdseXBocy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDdXJyZW50bHksIG9ubHkgdGhlIFR5cGV+MSBmb250IGRyaXZlciBzdXBwb3J0cyB0cmFjayBrZXJuaW5nLCAgICAgKi8KLSAgLyogICAgdXNpbmcgZGF0YSBmcm9tIEFGTSBmaWxlcyAoaWYgYXR0YWNoZWQgd2l0aCBARlRfQXR0YWNoX0ZpbGUgb3IgICAgICovCi0gIC8qICAgIEBGVF9BdHRhY2hfU3RyZWFtKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT25seSB2ZXJ5IGZldyBBRk0gZmlsZXMgY29tZSB3aXRoIHRyYWNrIGtlcm5pbmcgZGF0YTsgcGxlYXNlIHJlZmVyICovCi0gIC8qICAgIHRvIEFkb2JlJ3MgQUZNIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfVHJhY2tfS2VybmluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSB0cmFjayBrZXJuaW5nIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHBvaW50X3NpemUgOjoKKyAgICogICAgIFRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLgorICAgKgorICAgKiAgIGRlZ3JlZSA6OgorICAgKiAgICAgVGhlIGRlZ3JlZSBvZiB0aWdodG5lc3MuICBJbmNyZWFzaW5nbHkgbmVnYXRpdmUKKyAgICogICAgIHZhbHVlcyByZXByZXNlbnQgdGlnaHRlciB0cmFjayBrZXJuaW5nLCB3aGlsZQorICAgKiAgICAgaW5jcmVhc2luZ2x5IHBvc2l0aXZlIHZhbHVlcyByZXByZXNlbnQgbG9vc2VyIHRyYWNrCisgICAqICAgICBrZXJuaW5nLiAgVmFsdWUgemVybyBtZWFucyBubyB0cmFjayBrZXJuaW5nLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFrZXJuaW5nIDo6CisgICAqICAgICBUaGUga2VybmluZyBpbiAxNi4xNiBmcmFjdGlvbmFsIHBvaW50cywgdG8gYmUKKyAgICogICAgIHVuaWZvcm1seSBhcHBsaWVkIGJldHdlZW4gYWxsIGdseXBocy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBDdXJyZW50bHksIG9ubHkgdGhlIFR5cGV+MSBmb250IGRyaXZlciBzdXBwb3J0cyB0cmFjayBrZXJuaW5nLAorICAgKiAgIHVzaW5nIGRhdGEgZnJvbSBBRk0gZmlsZXMgKGlmIGF0dGFjaGVkIHdpdGggQEZUX0F0dGFjaF9GaWxlIG9yCisgICAqICAgQEZUX0F0dGFjaF9TdHJlYW0pLgorICAgKgorICAgKiAgIE9ubHkgdmVyeSBmZXcgQUZNIGZpbGVzIGNvbWUgd2l0aCB0cmFjayBrZXJuaW5nIGRhdGE7IHBsZWFzZSByZWZlcgorICAgKiAgIHRvIEFkb2JlJ3MgQUZNIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfVHJhY2tfS2VybmluZyggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICBwb2ludF9zaXplLApAQCAtMzQ4Niw0NSArMzY1MCw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBha2VybmluZyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0dseXBoX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgdGhlIEFTQ0lJIG5hbWUgb2YgYSBnaXZlbiBnbHlwaCBpbiBhIGZhY2UuICBUaGlzIG9ubHkgICAgICovCi0gIC8qICAgIHdvcmtzIGZvciB0aG9zZSBmYWNlcyB3aGVyZSBARlRfSEFTX0dMWVBIX05BTUVTKGZhY2UpIHJldHVybnN+MS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfaW5kZXggOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWZmZXJfbWF4ICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVmZmVyICAgICAgOjogQSBwb2ludGVyIHRvIGEgdGFyZ2V0IGJ1ZmZlciB3aGVyZSB0aGUgbmFtZSBpcyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGNvcGllZCB0by4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIHRoZSBmYWNlIGRvZXNuJ3QgcHJvdmlkZSBnbHlwaCBuYW1lcyBvciBpZiAqLwotICAvKiAgICB0aGUgZ2x5cGggaW5kZXggaXMgaW52YWxpZC4gIEluIGFsbCBjYXNlcyBvZiBmYWlsdXJlLCB0aGUgZmlyc3QgICAgKi8KLSAgLyogICAgYnl0ZSBvZiBgYnVmZmVyJyBpcyBzZXQgdG9+MCB0byBpbmRpY2F0ZSBhbiBlbXB0eSBuYW1lLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZ2x5cGggbmFtZSBpcyB0cnVuY2F0ZWQgdG8gZml0IHdpdGhpbiB0aGUgYnVmZmVyIGlmIGl0IGlzIHRvbyAgKi8KLSAgLyogICAgbG9uZy4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWx3YXlzIHplcm8tdGVybWluYXRlZC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCZSBhd2FyZSB0aGF0IEZyZWVUeXBlIHJlb3JkZXJzIGdseXBoIGluZGljZXMgaW50ZXJuYWxseSBzbyB0aGF0ICAgKi8KLSAgLyogICAgZ2x5cGggaW5kZXh+MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlIGBtaXNzaW5nIGdseXBoJyAoY2FsbGVkICAgICovCi0gIC8qICAgIGAubm90ZGVmJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgY29uZmlnIG1hY3JvICAgICAgICAgICovCi0gIC8qICAgIGBGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTJyBpcyBub3QgZGVmaW5lZCBpbiBgZnRvcHRpb24uaCcuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfR2x5cGhfTmFtZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIEFTQ0lJIG5hbWUgb2YgYSBnaXZlbiBnbHlwaCBpbiBhIGZhY2UuICBUaGlzIG9ubHkKKyAgICogICB3b3JrcyBmb3IgdGhvc2UgZmFjZXMgd2hlcmUgQEZUX0hBU19HTFlQSF9OQU1FUyhmYWNlKSByZXR1cm5zfjEuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIGJ1ZmZlcl9tYXggOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlCisgICAqICAgICBidWZmZXIuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYnVmZmVyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gYSB0YXJnZXQgYnVmZmVyIHdoZXJlIHRoZSBuYW1lIGlzCisgICAqICAgICBjb3BpZWQgdG8uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIGZhY2UgZG9lc24ndCBwcm92aWRlIGdseXBoIG5hbWVzIG9yIGlmCisgICAqICAgdGhlIGdseXBoIGluZGV4IGlzIGludmFsaWQuICBJbiBhbGwgY2FzZXMgb2YgZmFpbHVyZSwgdGhlIGZpcnN0CisgICAqICAgYnl0ZSBvZiBgYnVmZmVyJyBpcyBzZXQgdG9+MCB0byBpbmRpY2F0ZSBhbiBlbXB0eSBuYW1lLgorICAgKgorICAgKiAgIFRoZSBnbHlwaCBuYW1lIGlzIHRydW5jYXRlZCB0byBmaXQgd2l0aGluIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vCisgICAqICAgbG9uZy4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWx3YXlzIHplcm8tdGVybWluYXRlZC4KKyAgICoKKyAgICogICBCZSBhd2FyZSB0aGF0IEZyZWVUeXBlIHJlb3JkZXJzIGdseXBoIGluZGljZXMgaW50ZXJuYWxseSBzbyB0aGF0CisgICAqICAgZ2x5cGggaW5kZXh+MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlIGBtaXNzaW5nIGdseXBoJyAoY2FsbGVkCisgICAqICAgYC5ub3RkZWYnKS4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjb25maWcgbWFjcm8KKyAgICogICBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9HbHlwaF9OYW1lKCBGVF9GYWNlICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXgsCkBAIC0zNTMyLDEwMSArMzcwMCwxMDYgQEAKICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHJpZXZlIHRoZSBBU0NJSSBQb3N0U2NyaXB0IG5hbWUgb2YgYSBnaXZlbiBmYWNlLCBpZiBhdmFpbGFibGUuICAqLwotICAvKiAgICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBQb3N0U2NyaXB0LCBUcnVlVHlwZSwgYW5kIE9wZW5UeXBlIGZvbnRzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHBvaW50ZXIgdG8gdGhlIGZhY2UncyBQb3N0U2NyaXB0IG5hbWUuICBOVUxMIGlmIHVuYXZhaWxhYmxlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgaXMgZGVzdHJveWVkIHdpdGggICAgKi8KLSAgLyogICAgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGb3IgdmFyaWF0aW9uIGZvbnRzLCB0aGlzIHN0cmluZyBjaGFuZ2VzIGlmIHlvdSBzZWxlY3QgYSBkaWZmZXJlbnQgKi8KLSAgLyogICAgaW5zdGFuY2UsIGFuZCB5b3UgaGF2ZSB0byBjYWxsIGBGVF9HZXRfUG9zdFNjcmlwdF9OYW1lJyBhZ2FpbiB0byAgICovCi0gIC8qICAgIHJldHJpZXZlIGl0LiAgRnJlZVR5cGUgZm9sbG93cyBBZG9iZSBUZWNoTm90ZSAjNTkwMiwgYEdlbmVyYXRpbmcgICAqLwotICAvKiAgICBQb3N0U2NyaXB0IE5hbWVzIGZvciBGb250cyBVc2luZyBPcGVuVHlwZSBGb250IFZhcmlhdGlvbnMnLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaHR0cHM6Ly9kb3dubG9hZC5tYWNyb21lZGlhLmNvbS9wdWIvZGV2ZWxvcGVyL29wZW50eXBlL3RlY2gtbm90ZXMvNTkwMi5BZG9iZVBTTmFtZUdlbmVyYXRpb24uaHRtbCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgW1NpbmNlIDIuOV0gU3BlY2lhbCBQb3N0U2NyaXB0IG5hbWVzIGZvciBuYW1lZCBpbnN0YW5jZXMgYXJlIG9ubHkgICovCi0gIC8qICAgIHJldHVybmVkIGlmIHRoZSBuYW1lZCBpbnN0YW5jZSBpcyBzZXQgd2l0aCBARlRfU2V0X05hbWVkX0luc3RhbmNlICAqLwotICAvKiAgICAoYW5kIHRoZSBmb250IGhhcyBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gaXRzIGBmdmFyJyB0YWJsZSkuICBJZiAgKi8KLSAgLyogICAgQEZUX0lTX1ZBUklBVElPTiByZXR1cm5zIHRydWUsIHRoZSBhbGdvcml0aG1pY2FsbHkgZGVyaXZlZCAgICAgICAgICovCi0gIC8qICAgIFBvc3RTY3JpcHQgbmFtZSBpcyBwcm92aWRlZCwgbm90IGxvb2tpbmcgdXAgc3BlY2lhbCBlbnRyaWVzIGZvciAgICAqLwotICAvKiAgICBuYW1lZCBpbnN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIEFTQ0lJIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuIGZhY2UsIGlmIGF2YWlsYWJsZS4KKyAgICogICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBQb3N0U2NyaXB0LCBUcnVlVHlwZSwgYW5kIE9wZW5UeXBlIGZvbnRzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBBIHBvaW50ZXIgdG8gdGhlIGZhY2UncyBQb3N0U2NyaXB0IG5hbWUuICBOVUxMIGlmIHVuYXZhaWxhYmxlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgaXMgZGVzdHJveWVkIHdpdGgKKyAgICogICBpdC4KKyAgICoKKyAgICogICBGb3IgdmFyaWF0aW9uIGZvbnRzLCB0aGlzIHN0cmluZyBjaGFuZ2VzIGlmIHlvdSBzZWxlY3QgYSBkaWZmZXJlbnQKKyAgICogICBpbnN0YW5jZSwgYW5kIHlvdSBoYXZlIHRvIGNhbGwgYEZUX0dldF9Qb3N0U2NyaXB0X05hbWUnIGFnYWluIHRvCisgICAqICAgcmV0cmlldmUgaXQuICBGcmVlVHlwZSBmb2xsb3dzIEFkb2JlIFRlY2hOb3RlICM1OTAyLCBgR2VuZXJhdGluZworICAgKiAgIFBvc3RTY3JpcHQgTmFtZXMgZm9yIEZvbnRzIFVzaW5nIE9wZW5UeXBlIEZvbnQgVmFyaWF0aW9ucycuCisgICAqCisgICAqICAgICBodHRwczovL2Rvd25sb2FkLm1hY3JvbWVkaWEuY29tL3B1Yi9kZXZlbG9wZXIvb3BlbnR5cGUvdGVjaC1ub3Rlcy81OTAyLkFkb2JlUFNOYW1lR2VuZXJhdGlvbi5odG1sCisgICAqCisgICAqICAgW1NpbmNlIDIuOV0gU3BlY2lhbCBQb3N0U2NyaXB0IG5hbWVzIGZvciBuYW1lZCBpbnN0YW5jZXMgYXJlIG9ubHkKKyAgICogICByZXR1cm5lZCBpZiB0aGUgbmFtZWQgaW5zdGFuY2UgaXMgc2V0IHdpdGggQEZUX1NldF9OYW1lZF9JbnN0YW5jZQorICAgKiAgIChhbmQgdGhlIGZvbnQgaGFzIGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbiBpdHMgYGZ2YXInIHRhYmxlKS4gIElmCisgICAqICAgQEZUX0lTX1ZBUklBVElPTiByZXR1cm5zIHRydWUsIHRoZSBhbGdvcml0aG1pY2FsbHkgZGVyaXZlZAorICAgKiAgIFBvc3RTY3JpcHQgbmFtZSBpcyBwcm92aWRlZCwgbm90IGxvb2tpbmcgdXAgc3BlY2lhbCBlbnRyaWVzIGZvcgorICAgKiAgIG5hbWVkIGluc3RhbmNlcy4KKyAgICovCiAgIEZUX0VYUE9SVCggY29uc3QgY2hhciogKQogICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKCBGVF9GYWNlICBmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZWxlY3RfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWxlY3QgYSBnaXZlbiBjaGFybWFwIGJ5IGl0cyBlbmNvZGluZyB0YWcgKGFzIGxpc3RlZCBpbiAgICAgICAgICAgKi8KLSAgLyogICAgYGZyZWV0eXBlLmgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZW5jb2RpbmcgOjogQSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIG5vIGNoYXJtYXAgaW4gdGhlIGZhY2UgICAgICAgICAgICovCi0gIC8qICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBlbmNvZGluZyBxdWVyaWVkIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQmVjYXVzZSBtYW55IGZvbnRzIGNvbnRhaW4gbW9yZSB0aGFuIGEgc2luZ2xlIGNtYXAgZm9yIFVuaWNvZGUgICAgICovCi0gIC8qICAgIGVuY29kaW5nLCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIHNwZWNpYWwgY29kZSB0byBzZWxlY3QgdGhlIG9uZSAgICAqLwotICAvKiAgICB0aGF0IGNvdmVycyBVbmljb2RlIGJlc3QgKGBiZXN0JyBpbiB0aGUgc2Vuc2UgdGhhdCBhIFVDUy00IGNtYXAgaXMgKi8KLSAgLyogICAgcHJlZmVycmVkIHRvIGEgVUNTLTIgY21hcCkuICBJdCBpcyB0aHVzIHByZWZlcmFibGUgdG8gICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9TZXRfQ2hhcm1hcCBpbiB0aGlzIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TZWxlY3RfQ2hhcm1hcAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBieSBpdHMgZW5jb2RpbmcgdGFnIChhcyBsaXN0ZWQgaW4KKyAgICogICBgZnJlZXR5cGUuaCcpLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGVuY29kaW5nIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc2VsZWN0ZWQgZW5jb2RpbmcuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIG5vIGNoYXJtYXAgaW4gdGhlIGZhY2UKKyAgICogICBjb3JyZXNwb25kcyB0byB0aGUgZW5jb2RpbmcgcXVlcmllZCBoZXJlLgorICAgKgorICAgKiAgIEJlY2F1c2UgbWFueSBmb250cyBjb250YWluIG1vcmUgdGhhbiBhIHNpbmdsZSBjbWFwIGZvciBVbmljb2RlCisgICAqICAgZW5jb2RpbmcsIHRoaXMgZnVuY3Rpb24gaGFzIHNvbWUgc3BlY2lhbCBjb2RlIHRvIHNlbGVjdCB0aGUgb25lCisgICAqICAgdGhhdCBjb3ZlcnMgVW5pY29kZSBiZXN0IChgYmVzdCcgaW4gdGhlIHNlbnNlIHRoYXQgYSBVQ1MtNCBjbWFwIGlzCisgICAqICAgcHJlZmVycmVkIHRvIGEgVUNTLTIgY21hcCkuICBJdCBpcyB0aHVzIHByZWZlcmFibGUgdG8KKyAgICogICBARlRfU2V0X0NoYXJtYXAgaW4gdGhpcyBjYXNlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NlbGVjdF9DaGFybWFwKCBGVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX0VuY29kaW5nICBlbmNvZGluZyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2V0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBmb3IgY2hhcmFjdGVyIGNvZGUgdG8gZ2x5cGggaW5kZXggbWFwcGluZy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcm1hcCA6OiBBIGhhbmRsZSB0byB0aGUgc2VsZWN0ZWQgY2hhcm1hcC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjaGFybWFwIGlzIG5vdCBwYXJ0IG9mICAgICAgICovCi0gIC8qICAgIHRoZSBmYWNlIChpLmUuLCBpZiBpdCBpcyBub3QgbGlzdGVkIGluIHRoZSBgZmFjZS0+Y2hhcm1hcHMnICAgICAgICAqLwotICAvKiAgICB0YWJsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEl0IGFsc28gZmFpbHMgaWYgYW4gT3BlblR5cGUgdHlwZX4xNCBjaGFybWFwIGlzIHNlbGVjdGVkICh3aGljaCAgICAqLwotICAvKiAgICBkb2Vzbid0IG1hcCBjaGFyYWN0ZXIgY29kZXMgdG8gZ2x5cGggaW5kaWNlcyBhdCBhbGwpLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X0NoYXJtYXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFNlbGVjdCBhIGdpdmVuIGNoYXJtYXAgZm9yIGNoYXJhY3RlciBjb2RlIHRvIGdseXBoIGluZGV4IG1hcHBpbmcuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgY2hhcm1hcCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGNoYXJtYXAuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjaGFybWFwIGlzIG5vdCBwYXJ0IG9mCisgICAqICAgdGhlIGZhY2UgKGkuZS4sIGlmIGl0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGBmYWNlLT5jaGFybWFwcycKKyAgICogICB0YWJsZSkuCisgICAqCisgICAqICAgSXQgYWxzbyBmYWlscyBpZiBhbiBPcGVuVHlwZSB0eXBlfjE0IGNoYXJtYXAgaXMgc2VsZWN0ZWQgKHdoaWNoCisgICAqICAgZG9lc24ndCBtYXAgY2hhcmFjdGVyIGNvZGVzIHRvIGdseXBoIGluZGljZXMgYXQgYWxsKS4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9TZXRfQ2hhcm1hcCggRlRfRmFjZSAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgIEZUX0NoYXJNYXAgIGNoYXJtYXAgKTsKQEAgLTM2NTMsMTI1ICszODI2LDEzMiBAQAogICBGVF9HZXRfQ2hhcm1hcF9JbmRleCggRlRfQ2hhck1hcCAgY2hhcm1hcCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0NoYXJfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGNoYXJhY3RlciBjb2RlLiAgVGhpcyBmdW5jdGlvbiAgICovCi0gIC8qICAgIHVzZXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjaGFybWFwIHRvIGRvIHRoZSBtYXBwaW5nLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcmNvZGUgOjogVGhlIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGdseXBoIGluZGV4LiAgMH5tZWFucyBgdW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgeW91IHVzZSBGcmVlVHlwZSB0byBtYW5pcHVsYXRlIHRoZSBjb250ZW50cyBvZiBmb250IGZpbGVzICAgICAgICovCi0gIC8qICAgIGRpcmVjdGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBnbHlwaCBpbmRleCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uICAqLwotICAvKiAgICBkb2Vzbid0IGFsd2F5cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcm5hbCBpbmRpY2VzIHVzZWQgd2l0aGluIHRoZSAgKi8KLSAgLyogICAgZmlsZS4gIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCB2YWx1ZX4wIGFsd2F5cyBjb3JyZXNwb25kcyB0byAgICovCi0gIC8qICAgIHRoZSBgbWlzc2luZyBnbHlwaCcuICBJZiB0aGUgZmlyc3QgZ2x5cGggaXMgbm90IG5hbWVkIGAubm90ZGVmJywgICAqLwotICAvKiAgICB0aGVuIGZvciBUeXBlfjEgYW5kIFR5cGV+NDIgZm9udHMsIGAubm90ZGVmJyB3aWxsIGJlIG1vdmVkIGludG8gICAgKi8KLSAgLyogICAgdGhlIGdseXBoIElEfjAgcG9zaXRpb24sIGFuZCB3aGF0ZXZlciB3YXMgdGhlcmUgd2lsbCBiZSBtb3ZlZCB0byAgICovCi0gIC8qICAgIHRoZSBwb3NpdGlvbiBgLm5vdGRlZicgaGFkLiAgRm9yIFR5cGV+MSBmb250cywgaWYgdGhlcmUgaXMgbm8gICAgICAqLwotICAvKiAgICBgLm5vdGRlZicgZ2x5cGggYXQgYWxsLCB0aGVuIG9uZSB3aWxsIGJlIGNyZWF0ZWQgYXQgaW5kZXh+MCBhbmQgICAgKi8KLSAgLyogICAgd2hhdGV2ZXIgd2FzIHRoZXJlIHdpbGwgYmUgbW92ZWQgdG8gdGhlIGxhc3QgaW5kZXggLS0gVHlwZX40MiAgICAgICovCi0gIC8qICAgIGZvbnRzIGFyZSBjb25zaWRlcmVkIGludmFsaWQgdW5kZXIgdGhpcyBjb25kaXRpb24uICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfQ2hhcl9JbmRleAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGNoYXJhY3RlciBjb2RlLiAgVGhpcyBmdW5jdGlvbgorICAgKiAgIHVzZXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjaGFybWFwIHRvIGRvIHRoZSBtYXBwaW5nLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBjaGFyY29kZSA6OgorICAgKiAgICAgVGhlIGNoYXJhY3RlciBjb2RlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIElmIHlvdSB1c2UgRnJlZVR5cGUgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcworICAgKiAgIGRpcmVjdGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBnbHlwaCBpbmRleCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uCisgICAqICAgZG9lc24ndCBhbHdheXMgY29ycmVzcG9uZCB0byB0aGUgaW50ZXJuYWwgaW5kaWNlcyB1c2VkIHdpdGhpbiB0aGUKKyAgICogICBmaWxlLiAgVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IHZhbHVlfjAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvCisgICAqICAgdGhlIGBtaXNzaW5nIGdseXBoJy4gIElmIHRoZSBmaXJzdCBnbHlwaCBpcyBub3QgbmFtZWQgYC5ub3RkZWYnLAorICAgKiAgIHRoZW4gZm9yIFR5cGV+MSBhbmQgVHlwZX40MiBmb250cywgYC5ub3RkZWYnIHdpbGwgYmUgbW92ZWQgaW50bworICAgKiAgIHRoZSBnbHlwaCBJRH4wIHBvc2l0aW9uLCBhbmQgd2hhdGV2ZXIgd2FzIHRoZXJlIHdpbGwgYmUgbW92ZWQgdG8KKyAgICogICB0aGUgcG9zaXRpb24gYC5ub3RkZWYnIGhhZC4gIEZvciBUeXBlfjEgZm9udHMsIGlmIHRoZXJlIGlzIG5vCisgICAqICAgYC5ub3RkZWYnIGdseXBoIGF0IGFsbCwgdGhlbiBvbmUgd2lsbCBiZSBjcmVhdGVkIGF0IGluZGV4fjAgYW5kCisgICAqICAgd2hhdGV2ZXIgd2FzIHRoZXJlIHdpbGwgYmUgbW92ZWQgdG8gdGhlIGxhc3QgaW5kZXggLS0gVHlwZX40MgorICAgKiAgIGZvbnRzIGFyZSBjb25zaWRlcmVkIGludmFsaWQgdW5kZXIgdGhpcyBjb25kaXRpb24uCisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQgKQogICBGVF9HZXRfQ2hhcl9JbmRleCggRlRfRmFjZSAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9GaXJzdF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuICAqLwotICAvKiAgICBmYWNlLCB0b2dldGhlciB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZ2luZGV4IDo6IEdseXBoIGluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBjb2RlLiAgMH5pZiBjaGFybWFwIGlzICAgKi8KLSAgLyogICAgICAgICAgICAgICBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGNoYXJtYXAncyBmaXJzdCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiB0b2dldGhlciB3aXRoIEBGVF9HZXRfTmV4dF9DaGFyIHRvICAgICovCi0gIC8qICAgIHBhcnNlIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFRoZSBjb2RlICAqLwotICAvKiAgICBzaG91bGQgbG9vayBsaWtlIHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEZUX1VMb25nICBjaGFyY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9VSW50ICAgZ2luZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBjaGFyY29kZSA9IEZUX0dldF9GaXJzdF9DaGFyKCBmYWNlLCAmZ2luZGV4ICk7ICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgd2hpbGUgKCBnaW5kZXggIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCAoY2hhcmNvZGUsZ2luZGV4KSBwYWlyIC4uLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgY2hhcmNvZGUgPSBGVF9HZXRfTmV4dF9DaGFyKCBmYWNlLCBjaGFyY29kZSwgJmdpbmRleCApOyAgICAgICAgKi8KLSAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQmUgYXdhcmUgdGhhdCBjaGFyYWN0ZXIgY29kZXMgY2FuIGhhdmUgdmFsdWVzIHVwIHRvIDB4RkZGRkZGRkY7ICAgICovCi0gIC8qICAgIHRoaXMgbWlnaHQgaGFwcGVuIGZvciBub24tVW5pY29kZSBvciBtYWxmb3JtZWQgY21hcHMuICBIb3dldmVyLCAgICAqLwotICAvKiAgICBldmVuIHdpdGggcmVndWxhciBVbmljb2RlIGVuY29kaW5nLCBzby1jYWxsZWQgYGxhc3QgcmVzb3J0IGZvbnRzJyAgKi8KLSAgLyogICAgKHVzaW5nIFNGTlQgY21hcCBmb3JtYXQgMTMsIHNlZSBmdW5jdGlvbiBARlRfR2V0X0NNYXBfRm9ybWF0KSAgICAgICovCi0gIC8qICAgIG5vcm1hbGx5IGhhdmUgZW50cmllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB1cCB0byAweDFGRkZGRiwgICAqLwotICAvKiAgICB3aGljaCBjYW4gY2F1c2UgKmEgbG90KiBvZiBpdGVyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCBgKmFnaW5kZXgnIGlzIHNldCB0b34wIGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5LiAgVGhlICAgICAqLwotICAvKiAgICByZXN1bHQgaXRzZWxmIGNhbiBiZX4wIGluIHR3byBjYXNlczogaWYgdGhlIGNoYXJtYXAgaXMgZW1wdHkgb3IgICAgKi8KLSAgLyogICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9GaXJzdF9DaGFyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBjb2RlIGluIHRoZSBjdXJyZW50IGNoYXJtYXAgb2YgYSBnaXZlbgorICAgKiAgIGZhY2UsIHRvZ2V0aGVyIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFnaW5kZXggOjoKKyAgICogICAgIEdseXBoIGluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBjb2RlLiAgMH5pZiBjaGFybWFwIGlzCisgICAqICAgICBlbXB0eS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgY2hhcm1hcCdzIGZpcnN0IGNoYXJhY3RlciBjb2RlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3Ugc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHRvZ2V0aGVyIHdpdGggQEZUX0dldF9OZXh0X0NoYXIgdG8KKyAgICogICBwYXJzZSBhbGwgY2hhcmFjdGVyIGNvZGVzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNoYXJtYXAuICBUaGUgY29kZQorICAgKiAgIHNob3VsZCBsb29rIGxpa2UgdGhpczoKKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9VTG9uZyAgY2hhcmNvZGU7CisgICAqICAgICBGVF9VSW50ICAgZ2luZGV4OworICAgKgorICAgKgorICAgKiAgICAgY2hhcmNvZGUgPSBGVF9HZXRfRmlyc3RfQ2hhciggZmFjZSwgJmdpbmRleCApOworICAgKiAgICAgd2hpbGUgKCBnaW5kZXggIT0gMCApCisgICAqICAgICB7CisgICAqICAgICAgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCAoY2hhcmNvZGUsZ2luZGV4KSBwYWlyIC4uLgorICAgKgorICAgKiAgICAgICBjaGFyY29kZSA9IEZUX0dldF9OZXh0X0NoYXIoIGZhY2UsIGNoYXJjb2RlLCAmZ2luZGV4ICk7CisgICAqICAgICB9CisgICAqICAgfQorICAgKgorICAgKiAgIEJlIGF3YXJlIHRoYXQgY2hhcmFjdGVyIGNvZGVzIGNhbiBoYXZlIHZhbHVlcyB1cCB0byAweEZGRkZGRkZGOworICAgKiAgIHRoaXMgbWlnaHQgaGFwcGVuIGZvciBub24tVW5pY29kZSBvciBtYWxmb3JtZWQgY21hcHMuICBIb3dldmVyLAorICAgKiAgIGV2ZW4gd2l0aCByZWd1bGFyIFVuaWNvZGUgZW5jb2RpbmcsIHNvLWNhbGxlZCBgbGFzdCByZXNvcnQgZm9udHMnCisgICAqICAgKHVzaW5nIFNGTlQgY21hcCBmb3JtYXQgMTMsIHNlZSBmdW5jdGlvbiBARlRfR2V0X0NNYXBfRm9ybWF0KQorICAgKiAgIG5vcm1hbGx5IGhhdmUgZW50cmllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB1cCB0byAweDFGRkZGRiwKKyAgICogICB3aGljaCBjYW4gY2F1c2UgKmEgbG90KiBvZiBpdGVyYXRpb25zLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBgKmFnaW5kZXgnIGlzIHNldCB0b34wIGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5LiAgVGhlCisgICAqICAgcmVzdWx0IGl0c2VsZiBjYW4gYmV+MCBpbiB0d28gY2FzZXM6IGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5IG9yCisgICAqICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9VTG9uZyApCiAgIEZUX0dldF9GaXJzdF9DaGFyKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICphZ2luZGV4ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfTmV4dF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gdGhlIG5leHQgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuICAgKi8KLSAgLyogICAgZmFjZSBmb2xsb3dpbmcgdGhlIHZhbHVlIGBjaGFyX2NvZGUnLCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nICovCi0gIC8qICAgIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcl9jb2RlIDo6IFRoZSBzdGFydGluZyBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWdpbmRleCAgIDo6IEdseXBoIGluZGV4IG9mIG5leHQgY2hhcmFjdGVyIGNvZGUuICAwfmlmIGNoYXJtYXAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBjaGFybWFwJ3MgbmV4dCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFlvdSBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBARlRfR2V0X0ZpcnN0X0NoYXIgdG8gd2FsayAgICAgICAqLwotICAvKiAgICBvdmVyIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFNlZSB0aGUgICAgKi8KLSAgLyogICAgbm90ZSBmb3IgdGhhdCBmdW5jdGlvbiBmb3IgYSBzaW1wbGUgY29kZSBleGFtcGxlLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgYCphZ2luZGV4JyBpcyBzZXQgdG9+MCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGNvZGVzIGluICAgKi8KLSAgLyogICAgdGhlIGNoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9OZXh0X0NoYXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgY3VycmVudCBjaGFybWFwIG9mIGEgZ2l2ZW4KKyAgICogICBmYWNlIGZvbGxvd2luZyB0aGUgdmFsdWUgYGNoYXJfY29kZScsIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgY2hhcl9jb2RlIDo6CisgICAqICAgICBUaGUgc3RhcnRpbmcgY2hhcmFjdGVyIGNvZGUuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWdpbmRleCA6OgorICAgKiAgICAgR2x5cGggaW5kZXggb2YgbmV4dCBjaGFyYWN0ZXIgY29kZS4gIDB+aWYgY2hhcm1hcAorICAgKiAgICAgaXMgZW1wdHkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIGNoYXJtYXAncyBuZXh0IGNoYXJhY3RlciBjb2RlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3Ugc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggQEZUX0dldF9GaXJzdF9DaGFyIHRvIHdhbGsKKyAgICogICBvdmVyIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFNlZSB0aGUKKyAgICogICBub3RlIGZvciB0aGF0IGZ1bmN0aW9uIGZvciBhIHNpbXBsZSBjb2RlIGV4YW1wbGUuCisgICAqCisgICAqICAgTm90ZSB0aGF0IGAqYWdpbmRleCcgaXMgc2V0IHRvfjAgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjb2RlcyBpbgorICAgKiAgIHRoZSBjaGFybWFwLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9VTG9uZyApCiAgIEZUX0dldF9OZXh0X0NoYXIoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjaGFyX2NvZGUsCkBAIC0zODIyLDcgKzQwMDIsNyBAQAogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCiAgICAqCi0gICAqIEBub3RlOgorICAgKiBAZXhhbXBsZToKICAgICogICBIZXJlIGFuIGV4YW1wbGUgdGhhdCBzZXRzIHRocmVlIHByb3BlcnRpZXMuICBZb3UgbXVzdCBkZWZpbmUKICAgICogICBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyB0byBtYWtlIHRoZSBMQ0QgZmlsdGVyIGV4YW1wbGVzCiAgICAqICAgd29yay4KQEAgLTM4NzcsMjIgKzQwNTcsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICBGVF9QYXJhbWV0ZXIqICBwcm9wZXJ0aWVzICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfTmFtZV9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gZ2x5cGggbmFtZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX25hbWUgOjogVGhlIGdseXBoIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfTmFtZV9JbmRleAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGdseXBoX25hbWUgOjoKKyAgICogICAgIFRoZSBnbHlwaCBuYW1lLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQgKQogICBGVF9HZXRfTmFtZV9JbmRleCggRlRfRmFjZSAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyogIGdseXBoX25hbWUgKTsKQEAgLTM5MDAsNyArNDA4Miw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogQG1hY3JvOgorICAgKiBAZW51bToKICAgICogICBGVF9TVUJHTFlQSF9GTEFHX1hYWAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CkBAIC0zOTA5LDYgKzQwOTEsOCBAQAogICAgKiAgIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgZmxhZ3MgKHdoaWNoIGdldCBzeW50aGVzaXplZCBmb3IKICAgICogICBub24tT3BlblR5cGUgc3ViZ2x5cGhzKS4KICAgICoKKyAgICogICAgIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3R5cG9ncmFwaHkvb3BlbnR5cGUvc3BlYy9nbHlmI2NvbXBvc2l0ZS1nbHlwaC1kZXNjcmlwdGlvbgorICAgKgogICAgKiBAdmFsdWVzOgogICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMgOjoKICAgICogICBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyA6OgpAQCAtMzkzMCw3ICs0MTE0LDcgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiBAZnVuYzoKKyAgICogQGZ1bmN0aW9uOgogICAgKiAgIEZUX0dldF9TdWJHbHlwaF9JbmZvCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTM5ODEsNTkgKzQxNjUsMjI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXggICAgKnBfdHJhbnNmb3JtICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GU1RZUEVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGxpc3Qgb2YgYml0IGZsYWdzIHVzZWQgaW4gdGhlIGBmc1R5cGUnIGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlICAgKi8KLSAgLyogICAgaW4gYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250IGFuZCB0aGUgYEZTVHlwZScgZW50cnkgaW4gYSAgICAgICAgICovCi0gIC8qICAgIFBvc3RTY3JpcHQgZm9udC4gIFRoZXNlIGJpdCBmbGFncyBhcmUgcmV0dXJuZWQgYnkgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfR2V0X0ZTVHlwZV9GbGFnczsgdGhleSBpbmZvcm0gY2xpZW50IGFwcGxpY2F0aW9ucyBvZiBlbWJlZGRpbmcgKi8KLSAgLyogICAgYW5kIHN1YnNldHRpbmcgcmVzdHJpY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBhIGZvbnQuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaHR0cHM6Ly93d3cuYWRvYmUuY29tL2NvbnRlbnQvZGFtL0Fkb2JlL2VuL2Rldm5ldC9hY3JvYmF0L3BkZnMvRm9udFBvbGljaWVzLnBkZiAqLwotICAvKiAgICBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGb250cyB3aXRoIG5vIGZzVHlwZSBiaXQgc2V0IG1heSBiZSBlbWJlZGRlZCBhbmQgcGVybWFuZW50bHkgICAgICovCi0gIC8qICAgICAgaW5zdGFsbGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtIGJ5IGFuIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRm9udHMgdGhhdCBoYXZlIG9ubHkgdGhpcyBiaXQgc2V0IG11c3Qgbm90IGJlIG1vZGlmaWVkLCBlbWJlZGRlZCAqLwotICAvKiAgICAgIG9yIGV4Y2hhbmdlZCBpbiBhbnkgbWFubmVyIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIHBlcm1pc3Npb24gb2YgKi8KLSAgLyogICAgICB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZm9udCBtYXkgYmUgZW1iZWRkZWQgYW5kIHRlbXBvcmFyaWx5IGxvYWRlZCBvbiB0aGUgcmVtb3RlICAgICovCi0gIC8qICAgICAgc3lzdGVtLiAgRG9jdW1lbnRzIGNvbnRhaW5pbmcgUHJldmlldyAmIFByaW50IGZvbnRzIG11c3QgYmUgICAgICAqLwotICAvKiAgICAgIG9wZW5lZCBgcmVhZC1vbmx5Jzsgbm8gZWRpdHMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50LiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBidXQgbXVzdCBvbmx5IGJlIGluc3RhbGxlZCB0ZW1wb3JhcmlseSAgKi8KLSAgLyogICAgICBvbiBvdGhlciBzeXN0ZW1zLiAgSW4gY29udHJhc3QgdG8gUHJldmlldyAmIFByaW50IGZvbnRzLCAgICAgICAgICovCi0gIC8qICAgICAgZG9jdW1lbnRzIGNvbnRhaW5pbmcgZWRpdGFibGUgZm9udHMgbWF5IGJlIG9wZW5lZCBmb3IgcmVhZGluZywgICAqLwotICAvKiAgICAgIGVkaXRpbmcgaXMgcGVybWl0dGVkLCBhbmQgY2hhbmdlcyBtYXkgYmUgc2F2ZWQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZTVFlQRV9OT19TVUJTRVRUSU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmb250IG1heSBub3QgYmUgc3Vic2V0dGVkIHByaW9yIHRvIGVtYmVkZGluZy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZTVFlQRV9CSVRNQVBfRU1CRURESU5HX09OTFkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIE9ubHkgYml0bWFwcyBjb250YWluZWQgaW4gdGhlIGZvbnQgbWF5IGJlIGVtYmVkZGVkOyBubyBvdXRsaW5lICAgKi8KLSAgLyogICAgICBkYXRhIG1heSBiZSBlbWJlZGRlZC4gIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzIGF2YWlsYWJsZSBpbiB0aGUgICovCi0gIC8qICAgICAgZm9udCwgdGhlbiB0aGUgZm9udCBpcyB1bmVtYmVkZGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBmbGFncyBhcmUgT1JlZCB0b2dldGhlciwgdGh1cyBtb3JlIHRoYW4gYSBzaW5nbGUgdmFsdWUgY2FuIGJlICAqLwotICAvKiAgICByZXR1cm5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoaWxlIHRoZSBgZnNUeXBlJyBmbGFncyBjYW4gaW5kaWNhdGUgdGhhdCBhIGZvbnQgbWF5IGJlIGVtYmVkZGVkLCAqLwotICAvKiAgICBhIGxpY2Vuc2Ugd2l0aCB0aGUgZm9udCB2ZW5kb3IgbWF5IGJlIHNlcGFyYXRlbHkgcmVxdWlyZWQgdG8gdXNlICAgKi8KLSAgLyogICAgdGhlIGZvbnQgaW4gdGhpcyB3YXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgbGF5ZXJfbWFuYWdlbWVudAorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgR2x5cGggTGF5ZXIgTWFuYWdlbWVudAorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgUmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIE9wZW5UeXBlJ3MgYENPTFInIHRhYmxlIGRhdGEuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGFsbG93IGFjY2VzcyBvZiBjb2xvcmVkIGdseXBoIGxheWVyIGRhdGEKKyAgICogICBpbiBPcGVuVHlwZSdzIGBDT0xSJyB0YWJsZXMuCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9MYXllckl0ZXJhdG9yCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGl0ZXJhdG9yIG9iamVjdCBpcyBuZWVkZWQgZm9yIEBGVF9HZXRfQ29sb3JfR2x5cGhfTGF5ZXIuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbnVtX2xheWVycyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBnbHlwaCBsYXllcnMgZm9yIHRoZSByZXF1ZXN0ZWQgZ2x5cGggaW5kZXguICBXaWxsIGJlCisgICAqICAgICBzZXQgYnkgQEZUX0dldF9Db2xvcl9HbHlwaF9MYXllci4KKyAgICoKKyAgICogICBsYXllciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgbGF5ZXIuICBXaWxsIGJlIHNldCBieSBARlRfR2V0X0NvbG9yX0dseXBoX0xheWVyLgorICAgKgorICAgKiAgIHAgOjoKKyAgICogICAgIEFuIG9wYXF1ZSBwb2ludGVyIGludG8gYENPTFInIHRhYmxlIGRhdGEuICBUaGUgY2FsbGVyIG11c3Qgc2V0IHRoaXMKKyAgICogICAgIHRvIE5VTEwgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mIEBGVF9HZXRfQ29sb3JfR2x5cGhfTGF5ZXIuCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfTGF5ZXJJdGVyYXRvcl8KKyAgeworICAgIEZUX1VJbnQgICBudW1fbGF5ZXJzOworICAgIEZUX1VJbnQgICBsYXllcjsKKyAgICBGVF9CeXRlKiAgcDsKKworICB9IEZUX0xheWVySXRlcmF0b3I7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X0NvbG9yX0dseXBoX0xheWVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGlzIGFuIGludGVyZmFjZSB0byB0aGUgYENPTFInIHRhYmxlIGluIE9wZW5UeXBlIGZvbnRzIHRvCisgICAqICAgaXRlcmF0aXZlbHkgcmV0cmlldmUgdGhlIGNvbG9yZWQgZ2x5cGggbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICogICBjdXJyZW50IGdseXBoIHNsb3QuCisgICAqCisgICAqICAgICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy90eXBvZ3JhcGh5L29wZW50eXBlL3NwZWMvY29scgorICAgKgorICAgKiAgIFRoZSBnbHlwaCBsYXllciBkYXRhIGZvciBhIGdpdmVuIGdseXBoIGluZGV4LCBpZiBwcmVzZW50LCBwcm92aWRlcyBhbgorICAgKiAgIGFsdGVybmF0aXZlLCBtdWx0aS1jb2xvdXIgZ2x5cGggcmVwcmVzZW50YXRpb246IEluc3RlYWQgb2YgcmVuZGVyaW5nCisgICAqICAgdGhlIG91dGxpbmUgb3IgYml0bWFwIHdpdGggdGhlIGdpdmVuIGdseXBoIGluZGV4LCBnbHlwaHMgd2l0aCB0aGUKKyAgICogICBpbmRpY2VzIGFuZCBjb2xvcnMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgcmVuZGVyZWQgbGF5ZXIgYnkKKyAgICogICBsYXllci4KKyAgICoKKyAgICogICBUaGUgcmV0dXJuZWQgZWxlbWVudHMgYXJlIG9yZGVyZWQgaW4gdGhlIHp+ZGlyZWN0aW9uIGZyb20gYm90dG9tIHRvCisgICAqICAgdG9wOyB0aGUgYG4ndGggZWxlbWVudCBzaG91bGQgYmUgcmVuZGVyZWQgd2l0aCB0aGUgYXNzb2NpYXRlZCBwYWxldHRlCisgICAqICAgY29sb3IgYW5kIGJsZW5kZWQgb24gdG9wIG9mIHRoZSBhbHJlYWR5IHJlbmRlcmVkIGxheWVycyAoZWxlbWVudHMgMCwKKyAgICogICAxLCAuLi4sIG4tMSkuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGJhc2VfZ2x5cGggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleCB0aGUgY29sb3JlZCBnbHlwaCBsYXllcnMgYXJlIGFzc29jaWF0ZWQgd2l0aC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGl0ZXJhdG9yIDo6CisgICAqICAgICBBbiBARlRfTGF5ZXJJdGVyYXRvciBvYmplY3QuICBGb3IgdGhlIGZpcnN0IGNhbGwgeW91IHNob3VsZCBzZXQKKyAgICogICAgIGBpdGVyYXRvci0+cCcgdG8gTlVMTC4gIEZvciBhbGwgZm9sbG93aW5nIGNhbGxzLCBzaW1wbHkgdXNlIHRoZQorICAgKiAgICAgc2FtZSBvYmplY3QgYWdhaW4uCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWdseXBoX2luZGV4IDo6CisgICAqICAgICBUaGUgZ2x5cGggaW5kZXggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCisgICAqCisgICAqICAgYWNvbG9yX2luZGV4IDo6CisgICAqICAgICBUaGUgY29sb3IgaW5kZXggaW50byB0aGUgZm9udCBmYWNlJ3MgY29sb3IgcGFsZXR0ZSBvZiB0aGUgY3VycmVudAorICAgKiAgICAgbGF5ZXIuICBUaGUgdmFsdWUgMHhGRkZGIGlzIHNwZWNpYWw7IGl0IGRvZXNuJ3QgcmVmZXJlbmNlIGEgcGFsZXR0ZQorICAgKiAgICAgZW50cnkgYnV0IGluZGljYXRlcyB0aGF0IHRoZSB0ZXh0IGZvcmVncm91bmQgY29sb3Igc2hvdWxkIGJlIHVzZWQKKyAgICogICAgIGluc3RlYWQgKHRvIGJlIHNldCB1cCBieSB0aGUgYXBwbGljYXRpb24gb3V0c2lkZSBvZiBGcmVlVHlwZSkuCisgICAqCisgICAqICAgICBUaGUgY29sb3IgcGFsZXR0ZSBjYW4gYmUgcmV0cmlldmVkIHdpdGggQEZUX1BhbGV0dGVfU2VsZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFZhbHVlfjEgaWYgZXZlcnl0aGluZyBpcyBPSy4gIElmIHRoZXJlIGFyZSBubyBtb3JlIGxheWVycyAob3IgaWYKKyAgICogICB0aGVyZSBhcmUgbm8gbGF5ZXJzIGF0IGFsbCksIHZhbHVlfjAgZ2V0cyByZXR1cm5lZC4gIEluIGNhc2Ugb2YgYW4KKyAgICogICBlcnJvciwgdmFsdWV+MCBpcyByZXR1cm5lZCBhbHNvLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBpZiB5b3Ugd2FudCB0byBoYW5kbGUgZ2x5cGggbGF5ZXJzIGJ5CisgICAqICAgeW91cnNlbGYuICBJbiBwYXJ0aWN1bGFyLCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIHdpdGggQEZUX0dseXBoUmVjCisgICAqICAgb2JqZWN0cyAobGlrZSBARlRfR2V0X0dseXBoIG9yIEBGVF9HbHlwaF9Ub19CaXRtYXApIGRvbid0IGhhdmUgYWNjZXNzCisgICAqICAgdG8gdGhpcyBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogICBARlRfUmVuZGVyX0dseXBoLCBob3dldmVyLCBoYW5kbGVzIGNvbG9yZWQgZ2x5cGggbGF5ZXJzCisgICAqICAgYXV0b21hdGljYWxseSBpZiB0aGUgQEZUX0xPQURfQ09MT1IgZmxhZyBpcyBwYXNzZWQgdG8gaXQuCisgICAqCisgICAqIEBleGFtcGxlOgorICAgKiAgIHsKKyAgICogICAgIEZUX0NvbG9yKiAgICAgICAgIHBhbGV0dGU7CisgICAqICAgICBGVF9MYXllckl0ZXJhdG9yICBpdGVyYXRvcjsKKyAgICoKKyAgICogICAgIEZUX0Jvb2wgIGhhdmVfbGF5ZXJzOworICAgKiAgICAgRlRfVUludCAgbGF5ZXJfZ2x5cGhfaW5kZXg7CisgICAqICAgICBGVF9VSW50ICBsYXllcl9jb2xvcl9pbmRleDsKKyAgICoKKyAgICoKKyAgICogICAgIGVycm9yID0gRlRfUGFsZXR0ZV9TZWxlY3QoIGZhY2UsIHBhbGV0dGVfaW5kZXgsICZwYWxldHRlICk7CisgICAqICAgICBpZiAoIGVycm9yICkKKyAgICogICAgICAgcGFsZXR0ZSA9IE5VTEw7CisgICAqCisgICAqICAgICBpdGVyYXRvci5wICA9IE5VTEw7CisgICAqICAgICBoYXZlX2xheWVycyA9IEZUX0dldF9Db2xvcl9HbHlwaF9MYXllciggZmFjZSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGF5ZXJfZ2x5cGhfaW5kZXgsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxheWVyX2NvbG9yX2luZGV4LAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVyYXRvciApOworICAgKgorICAgKiAgICAgaWYgKCBwYWxldHRlICYmIGhhdmVfbGF5ZXJzICkKKyAgICogICAgIHsKKyAgICogICAgICAgZG8KKyAgICogICAgICAgeworICAgKiAgICAgICAgIEZUX0NvbG9yICBsYXllcl9jb2xvcjsKKyAgICoKKyAgICoKKyAgICogICAgICAgICBpZiAoIGxheWVyX2NvbG9yX2luZGV4ID09IDB4RkZGRiApCisgICAqICAgICAgICAgICBsYXllcl9jb2xvciA9IHRleHRfZm9yZWdyb3VuZF9jb2xvcjsKKyAgICogICAgICAgICBlbHNlCisgICAqICAgICAgICAgICBsYXllcl9jb2xvciA9IHBhbGV0dGVbbGF5ZXJfY29sb3JfaW5kZXhdOworICAgKgorICAgKiAgICAgICAgIC8vIExvYWQgYW5kIHJlbmRlciBnbHlwaCBgbGF5ZXJfZ2x5cGhfaW5kZXgnLCB0aGVuCisgICAqICAgICAgICAgLy8gYmxlbmQgcmVzdWx0aW5nIHBpeG1hcCAodXNpbmcgY29sb3IgYGxheWVyX2NvbG9yJykKKyAgICogICAgICAgICAvLyB3aXRoIHByZXZpb3VzbHkgY3JlYXRlZCBwaXhtYXBzLgorICAgKgorICAgKiAgICAgICB9IHdoaWxlICggRlRfR2V0X0NvbG9yX0dseXBoX0xheWVyKCBmYWNlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxheWVyX2dseXBoX2luZGV4LAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGF5ZXJfY29sb3JfaW5kZXgsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVyYXRvciApICk7CisgICAqICAgICB9CisgICAqICAgfQorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Cb29sICkKKyAgRlRfR2V0X0NvbG9yX0dseXBoX0xheWVyKCBGVF9GYWNlICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgYmFzZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICphY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGF5ZXJJdGVyYXRvciogIGl0ZXJhdG9yICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYmFzZV9pbnRlcmZhY2UKKyAgICoKKyAgICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0ZTVFlQRV9YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgYGZzVHlwZScgZmllbGQgb2YgdGhlIE9TLzIgdGFibGUKKyAgICogICBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlIGZvbnQgYW5kIHRoZSBgRlNUeXBlJyBlbnRyeSBpbiBhCisgICAqICAgUG9zdFNjcmlwdCBmb250LiAgVGhlc2UgYml0IGZsYWdzIGFyZSByZXR1cm5lZCBieQorICAgKiAgIEBGVF9HZXRfRlNUeXBlX0ZsYWdzOyB0aGV5IGluZm9ybSBjbGllbnQgYXBwbGljYXRpb25zIG9mIGVtYmVkZGluZworICAgKiAgIGFuZCBzdWJzZXR0aW5nIHJlc3RyaWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmb250LgorICAgKgorICAgKiAgIFNlZQorICAgKiAgIGh0dHBzOi8vd3d3LmFkb2JlLmNvbS9jb250ZW50L2RhbS9BZG9iZS9lbi9kZXZuZXQvYWNyb2JhdC9wZGZzL0ZvbnRQb2xpY2llcy5wZGYKKyAgICogICBmb3IgbW9yZSBkZXRhaWxzLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkcgOjoKKyAgICogICAgIEZvbnRzIHdpdGggbm8gZnNUeXBlIGJpdCBzZXQgbWF5IGJlIGVtYmVkZGVkIGFuZCBwZXJtYW5lbnRseQorICAgKiAgICAgaW5zdGFsbGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtIGJ5IGFuIGFwcGxpY2F0aW9uLgorICAgKgorICAgKiAgIEZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HIDo6CisgICAqICAgICBGb250cyB0aGF0IGhhdmUgb25seSB0aGlzIGJpdCBzZXQgbXVzdCBub3QgYmUgbW9kaWZpZWQsIGVtYmVkZGVkCisgICAqICAgICBvciBleGNoYW5nZWQgaW4gYW55IG1hbm5lciB3aXRob3V0IGZpcnN0IG9idGFpbmluZyBwZXJtaXNzaW9uIG9mCisgICAqICAgICB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuCisgICAqCisgICAqICAgRlRfRlNUWVBFX1BSRVZJRVdfQU5EX1BSSU5UX0VNQkVERElORyA6OgorICAgKiAgICAgVGhlIGZvbnQgbWF5IGJlIGVtYmVkZGVkIGFuZCB0ZW1wb3JhcmlseSBsb2FkZWQgb24gdGhlIHJlbW90ZQorICAgKiAgICAgc3lzdGVtLiAgRG9jdW1lbnRzIGNvbnRhaW5pbmcgUHJldmlldyAmIFByaW50IGZvbnRzIG11c3QgYmUKKyAgICogICAgIG9wZW5lZCBgcmVhZC1vbmx5Jzsgbm8gZWRpdHMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50LgorICAgKgorICAgKiAgIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcgOjoKKyAgICogICAgIFRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBidXQgbXVzdCBvbmx5IGJlIGluc3RhbGxlZCB0ZW1wb3JhcmlseQorICAgKiAgICAgb24gb3RoZXIgc3lzdGVtcy4gIEluIGNvbnRyYXN0IHRvIFByZXZpZXcgJiBQcmludCBmb250cywKKyAgICogICAgIGRvY3VtZW50cyBjb250YWluaW5nIGVkaXRhYmxlIGZvbnRzIG1heSBiZSBvcGVuZWQgZm9yIHJlYWRpbmcsCisgICAqICAgICBlZGl0aW5nIGlzIHBlcm1pdHRlZCwgYW5kIGNoYW5nZXMgbWF5IGJlIHNhdmVkLgorICAgKgorICAgKiAgIEZUX0ZTVFlQRV9OT19TVUJTRVRUSU5HIDo6CisgICAqICAgICBUaGUgZm9udCBtYXkgbm90IGJlIHN1YnNldHRlZCBwcmlvciB0byBlbWJlZGRpbmcuCisgICAqCisgICAqICAgRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSA6OgorICAgKiAgICAgT25seSBiaXRtYXBzIGNvbnRhaW5lZCBpbiB0aGUgZm9udCBtYXkgYmUgZW1iZWRkZWQ7IG5vIG91dGxpbmUKKyAgICogICAgIGRhdGEgbWF5IGJlIGVtYmVkZGVkLiAgSWYgdGhlcmUgYXJlIG5vIGJpdG1hcHMgYXZhaWxhYmxlIGluIHRoZQorICAgKiAgICAgZm9udCwgdGhlbiB0aGUgZm9udCBpcyB1bmVtYmVkZGFibGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBmbGFncyBhcmUgT1JlZCB0b2dldGhlciwgdGh1cyBtb3JlIHRoYW4gYSBzaW5nbGUgdmFsdWUgY2FuIGJlCisgICAqICAgcmV0dXJuZWQuCisgICAqCisgICAqICAgV2hpbGUgdGhlIGBmc1R5cGUnIGZsYWdzIGNhbiBpbmRpY2F0ZSB0aGF0IGEgZm9udCBtYXkgYmUgZW1iZWRkZWQsCisgICAqICAgYSBsaWNlbnNlIHdpdGggdGhlIGZvbnQgdmVuZG9yIG1heSBiZSBzZXBhcmF0ZWx5IHJlcXVpcmVkIHRvIHVzZQorICAgKiAgIHRoZSBmb250IGluIHRoaXMgd2F5LgorICAgKi8KICNkZWZpbmUgRlRfRlNUWVBFX0lOU1RBTExBQkxFX0VNQkVERElORyAgICAgICAgIDB4MDAwMAogI2RlZmluZSBGVF9GU1RZUEVfUkVTVFJJQ1RFRF9MSUNFTlNFX0VNQkVERElORyAgMHgwMDAyCiAjZGVmaW5lIEZUX0ZTVFlQRV9QUkVWSUVXX0FORF9QUklOVF9FTUJFRERJTkcgICAweDAwMDQKQEAgLTQwNDIsNDkyICs0Mzk0LDUwMyBAQAogI2RlZmluZSBGVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZICAgICAgICAgMHgwMjAwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfRlNUeXBlX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gdGhlIGBmc1R5cGUnIGZsYWdzIGZvciBhIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYGZzVHlwZScgZmxhZ3MsIHNlZSBARlRfRlNUWVBFX1hYWC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSBgZnNfdHlwZScgZmllbGQgKi8KLSAgLyogICAgaW4gdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUsIHdoaWNoIGlzIG9ubHkgZ3VhcmFudGVlZCB0byAgICAgICovCi0gIC8qICAgIHJldHVybiB0aGUgY29ycmVjdCByZXN1bHRzIGZvciBUeXBlfjEgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuMy44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfRlNUeXBlX0ZsYWdzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIGBmc1R5cGUnIGZsYWdzIGZvciBhIGZvbnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBgZnNUeXBlJyBmbGFncywgc2VlIEBGVF9GU1RZUEVfWFhYLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBVc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSBgZnNfdHlwZScgZmllbGQKKyAgICogICBpbiB0aGUgQFBTX0ZvbnRJbmZvUmVjIHN0cnVjdHVyZSwgd2hpY2ggaXMgb25seSBndWFyYW50ZWVkIHRvCisgICAqICAgcmV0dXJuIHRoZSBjb3JyZWN0IHJlc3VsdHMgZm9yIFR5cGV+MSBmb250cy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy44CisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VTaG9ydCApCiAgIEZUX0dldF9GU1R5cGVfRmxhZ3MoIEZUX0ZhY2UgIGZhY2UgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX3ZhcmlhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVuaWNvZGUgVmFyaWF0aW9uIFNlcXVlbmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBGcmVlVHlwZX4yIGludGVyZmFjZSB0byBVbmljb2RlIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKFVWUyksICAgICAqLwotICAvKiAgICB1c2luZyB0aGUgU0ZOVCBjbWFwIGZvcm1hdH4xNC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBNYW55IGNoYXJhY3RlcnMsIGVzcGVjaWFsbHkgZm9yIENKSyBzY3JpcHRzLCBoYXZlIHZhcmlhbnQgZm9ybXMuICAgKi8KLSAgLyogICAgVGhleSBhcmUgYSBzb3J0IG9mIGdyZXkgYXJlYSBzb21ld2hlcmUgYmV0d2VlbiBiZWluZyB0b3RhbGx5ICAgICAgICovCi0gIC8qICAgIGlycmVsZXZhbnQgYW5kIHNlbWFudGljYWxseSBkaXN0aW5jdDsgZm9yIHRoaXMgcmVhc29uLCB0aGUgVW5pY29kZSAqLwotICAvKiAgICBjb25zb3J0aXVtIGRlY2lkZWQgdG8gaW50cm9kdWNlIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKFZTKSwgICAgICAgICAgKi8KLSAgLyogICAgY29uc2lzdGluZyBvZiBhIFVuaWNvZGUgYmFzZSBjaGFyYWN0ZXIgYW5kIGEgdmFyaWF0aW9uIHNlbGVjdG9yICAgICovCi0gIC8qICAgIGluc3RlYWQgb2YgZnVydGhlciBleHRlbmRpbmcgdGhlIGFscmVhZHkgaHVnZSBudW1iZXIgb2YgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVuaWNvZGUgbWFpbnRhaW5zIHR3byBkaWZmZXJlbnQgc2V0cywgbmFtZWx5IGBTdGFuZGFyZGl6ZWQgICAgICAgICAqLwotICAvKiAgICBWYXJpYXRpb24gU2VxdWVuY2VzJyBhbmQgcmVnaXN0ZXJlZCBgSWRlb2dyYXBoaWMgVmFyaWF0aW9uICAgICAgICAgKi8KLSAgLyogICAgU2VxdWVuY2VzJyAoSVZTKSwgY29sbGVjdGVkIGluIHRoZSBgSWRlb2dyYXBoaWMgVmFyaWF0aW9uICAgICAgICAgICovCi0gIC8qICAgIERhdGFiYXNlJyAoSVZEKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBodHRwczovL3VuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9TdGFuZGFyZGl6ZWRWYXJpYW50cy50eHQgKi8KLSAgLyogICAgICBodHRwczovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaHR0cHM6Ly91bmljb2RlLm9yZy9pdmQvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gZGF0ZSAoSmFudWFyeSAyMDE3KSwgdGhlIGNoYXJhY3RlciB3aXRoIHRoZSBtb3N0IGlkZW9ncmFwaGljICAgICovCi0gIC8qICAgIHZhcmlhdGlvbnMgaXMgVSs5MDg5LCBoYXZpbmcgMzIgc3VjaCBJVlMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhyZWUgTW9uZ29saWFuIFZhcmlhdGlvbiBTZWxlY3RvcnMgaGF2ZSB0aGUgdmFsdWVzIFUrMTgwQi1VKzE4MEQ7ICovCi0gIC8qICAgIDI1NiBnZW5lcmljIFZhcmlhdGlvbiBTZWxlY3RvcnMgYXJlIGVuY29kZWQgaW4gdGhlIHJhbmdlcyAgICAgICAgICAqLwotICAvKiAgICBVK0ZFMDAtVStGRTBGIGFuZCBVK0UwMTAwLVUrRTAxRUYuICBJVlMgY3VycmVudGx5IHVzZSBWYXJpYXRpb24gICAgKi8KLSAgLyogICAgU2VsZWN0b3JzIGZyb20gdGhlIHJhbmdlIFUrRTAxMDAtVStFMDFFRiBvbmx5LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIFZTIGNvbnNpc3RzIG9mIHRoZSBiYXNlIGNoYXJhY3RlciB2YWx1ZSBmb2xsb3dlZCBieSBhIHNpbmdsZSAgICAgKi8KLSAgLyogICAgVmFyaWF0aW9uIFNlbGVjdG9yLiAgRm9yIGV4YW1wbGUsIHRvIGdldCB0aGUgZmlyc3QgdmFyaWF0aW9uIG9mICAgICovCi0gIC8qICAgIFUrOTA4OSwgeW91IGhhdmUgdG8gd3JpdGUgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBgVSs5MDg5IFUrRTAxMDAnLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWRvYmUgYW5kIE1TIGRlY2lkZWQgdG8gc3VwcG9ydCBib3RoIHN0YW5kYXJkaXplZCBhbmQgaWRlb2dyYXBoaWMgICovCi0gIC8qICAgIFZTIHdpdGggYSBuZXcgY21hcCBzdWJ0YWJsZSAoZm9ybWF0fjE0KS4gIEl0IGlzIGFuIG9kZCBzdWJ0YWJsZSAgICAqLwotICAvKiAgICBiZWNhdXNlIGl0IGlzIG5vdCBhIG1hcHBpbmcgb2YgaW5wdXQgY29kZSBwb2ludHMgdG8gZ2x5cGhzLCBidXQgICAgKi8KLSAgLyogICAgY29udGFpbnMgbGlzdHMgb2YgYWxsIHZhcmlhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBmb250LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHZhcmlhdGlvbiBtYXkgYmUgZWl0aGVyIGBkZWZhdWx0JyBvciBgbm9uLWRlZmF1bHQnIGZvciBhIGdpdmVuICAgKi8KLSAgLyogICAgZm9udC4gIEEgZGVmYXVsdCB2YXJpYXRpb24gaXMgdGhlIG9uZSB5b3Ugd2lsbCBnZXQgZm9yIHRoYXQgY29kZSAgICovCi0gIC8qICAgIHBvaW50IGlmIHlvdSBsb29rIGl0IHVwIGluIHRoZSBzdGFuZGFyZCBVbmljb2RlIGNtYXAuICBBICAgICAgICAgICAqLwotICAvKiAgICBub24tZGVmYXVsdCB2YXJpYXRpb24gaXMgYSBkaWZmZXJlbnQgZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgZ2x5cGhfdmFyaWFudHMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFVuaWNvZGUgVmFyaWF0aW9uIFNlcXVlbmNlcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgVGhlIEZyZWVUeXBlfjIgaW50ZXJmYWNlIHRvIFVuaWNvZGUgVmFyaWF0aW9uIFNlcXVlbmNlcyAoVVZTKSwKKyAgICogICB1c2luZyB0aGUgU0ZOVCBjbWFwIGZvcm1hdH4xNC4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIE1hbnkgY2hhcmFjdGVycywgZXNwZWNpYWxseSBmb3IgQ0pLIHNjcmlwdHMsIGhhdmUgdmFyaWFudCBmb3Jtcy4KKyAgICogICBUaGV5IGFyZSBhIHNvcnQgb2YgZ3JleSBhcmVhIHNvbWV3aGVyZSBiZXR3ZWVuIGJlaW5nIHRvdGFsbHkKKyAgICogICBpcnJlbGV2YW50IGFuZCBzZW1hbnRpY2FsbHkgZGlzdGluY3Q7IGZvciB0aGlzIHJlYXNvbiwgdGhlIFVuaWNvZGUKKyAgICogICBjb25zb3J0aXVtIGRlY2lkZWQgdG8gaW50cm9kdWNlIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKFZTKSwKKyAgICogICBjb25zaXN0aW5nIG9mIGEgVW5pY29kZSBiYXNlIGNoYXJhY3RlciBhbmQgYSB2YXJpYXRpb24gc2VsZWN0b3IKKyAgICogICBpbnN0ZWFkIG9mIGZ1cnRoZXIgZXh0ZW5kaW5nIHRoZSBhbHJlYWR5IGh1Z2UgbnVtYmVyIG9mCisgICAqICAgY2hhcmFjdGVycy4KKyAgICoKKyAgICogICBVbmljb2RlIG1haW50YWlucyB0d28gZGlmZmVyZW50IHNldHMsIG5hbWVseSBgU3RhbmRhcmRpemVkCisgICAqICAgVmFyaWF0aW9uIFNlcXVlbmNlcycgYW5kIHJlZ2lzdGVyZWQgYElkZW9ncmFwaGljIFZhcmlhdGlvbgorICAgKiAgIFNlcXVlbmNlcycgKElWUyksIGNvbGxlY3RlZCBpbiB0aGUgYElkZW9ncmFwaGljIFZhcmlhdGlvbgorICAgKiAgIERhdGFiYXNlJyAoSVZEKS4KKyAgICoKKyAgICogICAgIGh0dHBzOi8vdW5pY29kZS5vcmcvUHVibGljL1VDRC9sYXRlc3QvdWNkL1N0YW5kYXJkaXplZFZhcmlhbnRzLnR4dAorICAgKiAgICAgaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMzcvCisgICAqICAgICBodHRwczovL3VuaWNvZGUub3JnL2l2ZC8KKyAgICoKKyAgICogICBUbyBkYXRlIChKYW51YXJ5IDIwMTcpLCB0aGUgY2hhcmFjdGVyIHdpdGggdGhlIG1vc3QgaWRlb2dyYXBoaWMKKyAgICogICB2YXJpYXRpb25zIGlzIFUrOTA4OSwgaGF2aW5nIDMyIHN1Y2ggSVZTLgorICAgKgorICAgKiAgIFRocmVlIE1vbmdvbGlhbiBWYXJpYXRpb24gU2VsZWN0b3JzIGhhdmUgdGhlIHZhbHVlcyBVKzE4MEItVSsxODBEOworICAgKiAgIDI1NiBnZW5lcmljIFZhcmlhdGlvbiBTZWxlY3RvcnMgYXJlIGVuY29kZWQgaW4gdGhlIHJhbmdlcworICAgKiAgIFUrRkUwMC1VK0ZFMEYgYW5kIFUrRTAxMDAtVStFMDFFRi4gIElWUyBjdXJyZW50bHkgdXNlIFZhcmlhdGlvbgorICAgKiAgIFNlbGVjdG9ycyBmcm9tIHRoZSByYW5nZSBVK0UwMTAwLVUrRTAxRUYgb25seS4KKyAgICoKKyAgICogICBBIFZTIGNvbnNpc3RzIG9mIHRoZSBiYXNlIGNoYXJhY3RlciB2YWx1ZSBmb2xsb3dlZCBieSBhIHNpbmdsZQorICAgKiAgIFZhcmlhdGlvbiBTZWxlY3Rvci4gIEZvciBleGFtcGxlLCB0byBnZXQgdGhlIGZpcnN0IHZhcmlhdGlvbiBvZgorICAgKiAgIFUrOTA4OSwgeW91IGhhdmUgdG8gd3JpdGUgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBgVSs5MDg5IFUrRTAxMDAnLgorICAgKgorICAgKiAgIEFkb2JlIGFuZCBNUyBkZWNpZGVkIHRvIHN1cHBvcnQgYm90aCBzdGFuZGFyZGl6ZWQgYW5kIGlkZW9ncmFwaGljCisgICAqICAgVlMgd2l0aCBhIG5ldyBjbWFwIHN1YnRhYmxlIChmb3JtYXR+MTQpLiAgSXQgaXMgYW4gb2RkIHN1YnRhYmxlCisgICAqICAgYmVjYXVzZSBpdCBpcyBub3QgYSBtYXBwaW5nIG9mIGlucHV0IGNvZGUgcG9pbnRzIHRvIGdseXBocywgYnV0CisgICAqICAgY29udGFpbnMgbGlzdHMgb2YgYWxsIHZhcmlhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBmb250LgorICAgKgorICAgKiAgIEEgdmFyaWF0aW9uIG1heSBiZSBlaXRoZXIgYGRlZmF1bHQnIG9yIGBub24tZGVmYXVsdCcgZm9yIGEgZ2l2ZW4KKyAgICogICBmb250LiAgQSBkZWZhdWx0IHZhcmlhdGlvbiBpcyB0aGUgb25lIHlvdSB3aWxsIGdldCBmb3IgdGhhdCBjb2RlCisgICAqICAgcG9pbnQgaWYgeW91IGxvb2sgaXQgdXAgaW4gdGhlIHN0YW5kYXJkIFVuaWNvZGUgY21hcC4gIEEKKyAgICogICBub24tZGVmYXVsdCB2YXJpYXRpb24gaXMgYSBkaWZmZXJlbnQgZ2x5cGguCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGNoYXJhY3RlciBjb2RlIGFzIG1vZGlmaWVkIGJ5ICAgICovCi0gIC8qICAgIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJjb2RlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBjaGFyYWN0ZXIgY29kZSBwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZhcmlhbnRTZWxlY3RvciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZ2x5cGggaW5kZXguICAwfm1lYW5zIGVpdGhlciBgdW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJywgb3IgICAgKi8KLSAgLyogICAgYHVuZGVmaW5lZCBzZWxlY3RvciBjb2RlJywgb3IgYG5vIHZhcmlhdGlvbiBzZWxlY3RvciBjbWFwICAgICAgICAgICovCi0gIC8qICAgIHN1YnRhYmxlJywgb3IgYGN1cnJlbnQgQ2hhck1hcCBpcyBub3QgVW5pY29kZScuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHlvdSB1c2UgRnJlZVR5cGUgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcyAgICAgICAqLwotICAvKiAgICBkaXJlY3RseSwgYmUgYXdhcmUgdGhhdCB0aGUgZ2x5cGggaW5kZXggcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiAgKi8KLSAgLyogICAgZG9lc24ndCBhbHdheXMgY29ycmVzcG9uZCB0byB0aGUgaW50ZXJuYWwgaW5kaWNlcyB1c2VkIHdpdGhpbiAgICAgICovCi0gIC8qICAgIHRoZSBmaWxlLiAgVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IHZhbHVlfjAgYWx3YXlzIGNvcnJlc3BvbmRzICAqLwotICAvKiAgICB0byB0aGUgYG1pc3NpbmcgZ2x5cGgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFuaW5nZnVsIGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGEpIHRoZSBmb250IGhhcyBhIHZhcmlhdGlvbiBzZWxlY3RvciBjbWFwIHN1YiB0YWJsZSwgICAgICAgICAgICAgKi8KLSAgLyogICAgYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYikgdGhlIGN1cnJlbnQgY2hhcm1hcCBoYXMgYSBVbmljb2RlIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiB0aGUgZ2x5cGggaW5kZXggb2YgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZSBhcyBtb2RpZmllZCBieQorICAgKiAgIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGNoYXJjb2RlIDo6CisgICAqICAgICBUaGUgY2hhcmFjdGVyIGNvZGUgcG9pbnQgaW4gVW5pY29kZS4KKyAgICoKKyAgICogICB2YXJpYW50U2VsZWN0b3IgOjoKKyAgICogICAgIFRoZSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgZ2x5cGggaW5kZXguICAwfm1lYW5zIGVpdGhlciBgdW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJywgb3IKKyAgICogICBgdW5kZWZpbmVkIHNlbGVjdG9yIGNvZGUnLCBvciBgbm8gdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAKKyAgICogICBzdWJ0YWJsZScsIG9yIGBjdXJyZW50IENoYXJNYXAgaXMgbm90IFVuaWNvZGUnLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiB5b3UgdXNlIEZyZWVUeXBlIHRvIG1hbmlwdWxhdGUgdGhlIGNvbnRlbnRzIG9mIGZvbnQgZmlsZXMKKyAgICogICBkaXJlY3RseSwgYmUgYXdhcmUgdGhhdCB0aGUgZ2x5cGggaW5kZXggcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbgorICAgKiAgIGRvZXNuJ3QgYWx3YXlzIGNvcnJlc3BvbmQgdG8gdGhlIGludGVybmFsIGluZGljZXMgdXNlZCB3aXRoaW4KKyAgICogICB0aGUgZmlsZS4gIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCB2YWx1ZX4wIGFsd2F5cyBjb3JyZXNwb25kcworICAgKiAgIHRvIHRoZSBgbWlzc2luZyBnbHlwaCcuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYKKyAgICogICAgIGEpIHRoZSBmb250IGhhcyBhIHZhcmlhdGlvbiBzZWxlY3RvciBjbWFwIHN1YiB0YWJsZSwKKyAgICogICBhbmQKKyAgICogICAgIGIpIHRoZSBjdXJyZW50IGNoYXJtYXAgaGFzIGEgVW5pY29kZSBlbmNvZGluZy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy42CisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQgKQogICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDaGVjayB3aGV0aGVyIHRoaXMgdmFyaWF0aW9uIG9mIHRoaXMgVW5pY29kZSBjaGFyYWN0ZXIgaXMgdGhlIG9uZSAgKi8KLSAgLyogICAgdG8gYmUgZm91bmQgaW4gdGhlIGBjbWFwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcmNvZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIFVuaWNvZGUgY29kZXBvaW50IG9mIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDF+aWYgZm91bmQgaW4gdGhlIHN0YW5kYXJkIChVbmljb2RlKSBjbWFwLCAwfmlmIGZvdW5kIGluIHRoZSAgICAgICAqLwotICAvKiAgICB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgdmFyaWF0aW9uLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gICAgICAgKi8KLSAgLyogICAgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENoZWNrIHdoZXRoZXIgdGhpcyB2YXJpYXRpb24gb2YgdGhpcyBVbmljb2RlIGNoYXJhY3RlciBpcyB0aGUgb25lCisgICAqICAgdG8gYmUgZm91bmQgaW4gdGhlIGBjbWFwJy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgY2hhcmNvZGUgOjoKKyAgICogICAgIFRoZSBjaGFyYWN0ZXIgY29kZXBvaW50IGluIFVuaWNvZGUuCisgICAqCisgICAqICAgdmFyaWFudFNlbGVjdG9yIDo6CisgICAqICAgICBUaGUgVW5pY29kZSBjb2RlcG9pbnQgb2YgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAxfmlmIGZvdW5kIGluIHRoZSBzdGFuZGFyZCAoVW5pY29kZSkgY21hcCwgMH5pZiBmb3VuZCBpbiB0aGUKKyAgICogICB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgdmFyaWF0aW9uLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24KKyAgICogICBzZWxlY3RvciBjbWFwIHN1YnRhYmxlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4zLjYKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfSW50ICkKICAgRlRfRmFjZV9HZXRDaGFyVmFyaWFudElzRGVmYXVsdCggRlRfRmFjZSAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHZhcmlhbnRTZWxlY3RvciApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSB2YXJpYXRpb24gc2VsZWN0b3JzIGZvdW5kICovCi0gIC8qICAgIGluIHRoZSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2VsZWN0b3IgY29kZSBwb2ludHMsIG9yIE5VTEwgaWYgdGhlcmUgaXMgKi8KLSAgLyogICAgbm8gdmFsaWQgdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgc3VidGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXN+MDsgdGhlIGFycmF5IGlzIG93bmVkIGJ5IHRoZSAgICAgICAgICovCi0gIC8qICAgIEBGVF9GYWNlIG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0ICAgICAqLwotICAvKiAgICBjYWxsIHRvIGEgRnJlZVR5cGUgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAyLjMuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRmFjZV9HZXRWYXJpYW50U2VsZWN0b3JzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gYSB6ZXJvLXRlcm1pbmF0ZWQgbGlzdCBvZiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMgZm91bmQKKyAgICogICBpbiB0aGUgZm9udC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNlbGVjdG9yIGNvZGUgcG9pbnRzLCBvciBOVUxMIGlmIHRoZXJlIGlzCisgICAqICAgbm8gdmFsaWQgdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgc3VidGFibGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUKKyAgICogICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dAorICAgKiAgIGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy42CisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQogICBGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMoIEZUX0ZhY2UgIGZhY2UgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWF0aW9uIHNlbGVjdG9ycyBmb3VuZCAqLwotICAvKiAgICBmb3IgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyY29kZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgY2hhcmFjdGVyIGNvZGVwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHZhcmlhdGlvbiBzZWxlY3RvciBjb2RlIHBvaW50cyB0aGF0IGFyZSAgICovCi0gIC8qICAgIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IgTlVMTCBpZiB0aGUgY29ycmVzcG9uZGluZyBsaXN0ICAqLwotICAvKiAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpc34wOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlICAgICAgICAgKi8KLSAgLyogICAgQEZUX0ZhY2Ugb2JqZWN0IGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW4gb3IgcmVsZWFzZWQgb24gdGhlIG5leHQgICAgICovCi0gIC8qICAgIGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gYSB6ZXJvLXRlcm1pbmF0ZWQgbGlzdCBvZiBVbmljb2RlIHZhcmlhdGlvbiBzZWxlY3RvcnMgZm91bmQKKyAgICogICBmb3IgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgY29kZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgY2hhcmNvZGUgOjoKKyAgICogICAgIFRoZSBjaGFyYWN0ZXIgY29kZXBvaW50IGluIFVuaWNvZGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHZhcmlhdGlvbiBzZWxlY3RvciBjb2RlIHBvaW50cyB0aGF0IGFyZQorICAgKiAgIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IgTlVMTCBpZiB0aGUgY29ycmVzcG9uZGluZyBsaXN0CisgICAqICAgaXMgZW1wdHkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUKKyAgICogICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dAorICAgKiAgIGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMy42CisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQogICBGVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGNoYXJjb2RlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gYSB6ZXJvLXRlcm1pbmF0ZWQgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlciBjb2RlcyBmb3VuZCBmb3IgKi8KLSAgLyogICAgdGhlIHNwZWNpZmllZCB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHZhcmlhdGlvbiBzZWxlY3RvciBjb2RlIHBvaW50IGluIFVuaWNvZGUuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbGlzdCBvZiBhbGwgdGhlIGNvZGUgcG9pbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBieSB0aGlzIHNlbGVjdG9yICAqLwotICAvKiAgICAoYm90aCBkZWZhdWx0IGFuZCBub24tZGVmYXVsdCBjb2RlcyBhcmUgcmV0dXJuZWQpIG9yIE5VTEwgaWYgdGhlcmUgKi8KLSAgLyogICAgaXMgbm8gdmFsaWQgY21hcCBvciB0aGUgdmFyaWF0aW9uIHNlbGVjdG9yIGlzIGludmFsaWQuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXN+MDsgdGhlIGFycmF5IGlzIG93bmVkIGJ5IHRoZSAgICAgICAgICovCi0gIC8qICAgIEBGVF9GYWNlIG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0ICAgICAqLwotICAvKiAgICBjYWxsIHRvIGEgRnJlZVR5cGUgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAyLjMuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXIgY29kZXMgZm91bmQgZm9yCisgICAqICAgdGhlIHNwZWNpZmllZCB2YXJpYXRpb24gc2VsZWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHZhcmlhbnRTZWxlY3RvciA6OgorICAgKiAgICAgVGhlIHZhcmlhdGlvbiBzZWxlY3RvciBjb2RlIHBvaW50IGluIFVuaWNvZGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQSBsaXN0IG9mIGFsbCB0aGUgY29kZSBwb2ludHMgdGhhdCBhcmUgc3BlY2lmaWVkIGJ5IHRoaXMgc2VsZWN0b3IKKyAgICogICAoYm90aCBkZWZhdWx0IGFuZCBub24tZGVmYXVsdCBjb2RlcyBhcmUgcmV0dXJuZWQpIG9yIE5VTEwgaWYgdGhlcmUKKyAgICogICBpcyBubyB2YWxpZCBjbWFwIG9yIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IgaXMgaW52YWxpZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkgaXN+MDsgdGhlIGFycmF5IGlzIG93bmVkIGJ5IHRoZQorICAgKiAgIEBGVF9GYWNlIG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0CisgICAqICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4zLjYKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfVUludDMyKiApCiAgIEZUX0ZhY2VfR2V0Q2hhcnNPZlZhcmlhbnQoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb21wdXRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcnVuY2hpbmcgZml4ZWQgbnVtYmVycyBhbmQgdmVjdG9ycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBmdW5jdGlvbnMgdXNlZCB0byBwZXJmb3JtICAgICAgICAgICAgKi8KLSAgLyogICAgY29tcHV0YXRpb25zIG9uIDE2LjE2IGZpeGVkLWZsb2F0IG51bWJlcnMgb3IgMmQgdmVjdG9ycy4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTXVsRGl2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX011bEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9EaXZGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUm91bmRGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0NlaWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GbG9vckZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVmVjdG9yX1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01hdHJpeF9NdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NYXRyaXhfSW52ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgY29tcHV0YXRpb25zCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBDb21wdXRhdGlvbnMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIENydW5jaGluZyBmaXhlZCBudW1iZXJzIGFuZCB2ZWN0b3JzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgZnVuY3Rpb25zIHVzZWQgdG8gcGVyZm9ybQorICAgKiAgIGNvbXB1dGF0aW9ucyBvbiAxNi4xNiBmaXhlZC1mbG9hdCBudW1iZXJzIG9yIDJkIHZlY3RvcnMuCisgICAqCisgICAqIEBvcmRlcjoKKyAgICogICBGVF9NdWxEaXYKKyAgICogICBGVF9NdWxGaXgKKyAgICogICBGVF9EaXZGaXgKKyAgICogICBGVF9Sb3VuZEZpeAorICAgKiAgIEZUX0NlaWxGaXgKKyAgICogICBGVF9GbG9vckZpeAorICAgKiAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0KKyAgICogICBGVF9NYXRyaXhfTXVsdGlwbHkKKyAgICogICBGVF9NYXRyaXhfSW52ZXJ0CisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTXVsRGl2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZSBgKGEqYikvYycgd2l0aCBtYXhpbXVtIGFjY3VyYWN5LCB1c2luZyBhIDY0LWJpdCAgICAgICAgICAgICovCi0gIC8qICAgIGludGVybWVkaWF0ZSBpbnRlZ2VyIHdoZW5ldmVyIG5lY2Vzc2FyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpc24ndCBuZWNlc3NhcmlseSBhcyBmYXN0IGFzIHNvbWUgcHJvY2Vzc29yIHNwZWNpZmljICovCi0gIC8qICAgIG9wZXJhdGlvbnMsIGJ1dCBpcyBhdCBsZWFzdCBjb21wbGV0ZWx5IHBvcnRhYmxlLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGEgOjogVGhlIGZpcnN0IG11bHRpcGxpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYiA6OiBUaGUgc2Vjb25kIG11bHRpcGxpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjIDo6IFRoZSBkaXZpc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS9jJy4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgdHJhcHMgd2hlbiB0cnlpbmcgdG8gKi8KLSAgLyogICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZyAgICovCi0gIC8qICAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9NdWxEaXYKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENvbXB1dGUgYChhKmIpL2MnIHdpdGggbWF4aW11bSBhY2N1cmFjeSwgdXNpbmcgYSA2NC1iaXQKKyAgICogICBpbnRlcm1lZGlhdGUgaW50ZWdlciB3aGVuZXZlciBuZWNlc3NhcnkuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBpc24ndCBuZWNlc3NhcmlseSBhcyBmYXN0IGFzIHNvbWUgcHJvY2Vzc29yLXNwZWNpZmljCisgICAqICAgb3BlcmF0aW9ucywgYnV0IGlzIGF0IGxlYXN0IGNvbXBsZXRlbHkgcG9ydGFibGUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhIDo6CisgICAqICAgICBUaGUgZmlyc3QgbXVsdGlwbGllci4KKyAgICoKKyAgICogICBiIDo6CisgICAqICAgICBUaGUgc2Vjb25kIG11bHRpcGxpZXIuCisgICAqCisgICAqICAgYyA6OgorICAgKiAgICAgVGhlIGRpdmlzb3IuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIHJlc3VsdCBvZiBgKGEqYikvYycuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIHRyYXBzIHdoZW4gdHJ5aW5nIHRvCisgICAqICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZworICAgKiAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfTG9uZyApCiAgIEZUX011bERpdiggRlRfTG9uZyAgYSwKICAgICAgICAgICAgICBGVF9Mb25nICBiLAogICAgICAgICAgICAgIEZUX0xvbmcgIGMgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX011bEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGUgYChhKmIpLzB4MTAwMDAnIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIEl0cyBtYWluIHVzZSBpcyB0byAqLwotICAvKiAgICBtdWx0aXBseSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhIDo6IFRoZSBmaXJzdCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgVXNlIGEgMTYuMTYgZmFjdG9yIGhlcmUgd2hlbmV2ZXIgICAgICAqLwotICAvKiAgICAgICAgIHBvc3NpYmxlIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS8weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGFic29sdXRlICAgKi8KLSAgLyogICAgdmFsdWUgb2YgYGEnIGlzIGxlc3MgdGhhbiAyMDQ4LCBhbmQgYGInIGlzIGEgMTYuMTYgc2NhbGluZyBmYWN0b3IuICovCi0gIC8qICAgIEFzIHRoaXMgaGFwcGVucyBtYWlubHkgd2hlbiBzY2FsaW5nIGZyb20gbm90aW9uYWwgdW5pdHMgdG8gICAgICAgICAqLwotICAvKiAgICBmcmFjdGlvbmFsIHBpeGVscyBpbiBGcmVlVHlwZSwgaXQgcmVzdWx0ZWQgaW4gbm90aWNlYWJsZSBzcGVlZCAgICAgKi8KLSAgLyogICAgaW1wcm92ZW1lbnRzIGJldHdlZW4gdmVyc2lvbnMgMi54IGFuZCAxLnguICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBcyBhIGNvbmNsdXNpb24sIGFsd2F5cyB0cnkgdG8gcGxhY2UgYSAxNi4xNiBmYWN0b3IgYXMgdGhlICAgICAgICAgKi8KLSAgLyogICAgX3NlY29uZF8gYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbjsgdGhpcyBjYW4gbWFrZSBhIGdyZWF0ICAgICAgICAgICovCi0gIC8qICAgIGRpZmZlcmVuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9NdWxGaXgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENvbXB1dGUgYChhKmIpLzB4MTAwMDAnIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIEl0cyBtYWluIHVzZSBpcyB0bworICAgKiAgIG11bHRpcGx5IGEgZ2l2ZW4gdmFsdWUgYnkgYSAxNi4xNiBmaXhlZC1wb2ludCBmYWN0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhIDo6CisgICAqICAgICBUaGUgZmlyc3QgbXVsdGlwbGllci4KKyAgICoKKyAgICogICBiIDo6CisgICAqICAgICBUaGUgc2Vjb25kIG11bHRpcGxpZXIuICBVc2UgYSAxNi4xNiBmYWN0b3IgaGVyZSB3aGVuZXZlcgorICAgKiAgICAgcG9zc2libGUgKHNlZSBub3RlIGJlbG93KS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgcmVzdWx0IG9mIGAoYSpiKS8weDEwMDAwJy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBhYnNvbHV0ZQorICAgKiAgIHZhbHVlIG9mIGBhJyBpcyBsZXNzIHRoYW4gMjA0OCwgYW5kIGBiJyBpcyBhIDE2LjE2IHNjYWxpbmcgZmFjdG9yLgorICAgKiAgIEFzIHRoaXMgaGFwcGVucyBtYWlubHkgd2hlbiBzY2FsaW5nIGZyb20gbm90aW9uYWwgdW5pdHMgdG8KKyAgICogICBmcmFjdGlvbmFsIHBpeGVscyBpbiBGcmVlVHlwZSwgaXQgcmVzdWx0ZWQgaW4gbm90aWNlYWJsZSBzcGVlZAorICAgKiAgIGltcHJvdmVtZW50cyBiZXR3ZWVuIHZlcnNpb25zIDIueCBhbmQgMS54LgorICAgKgorICAgKiAgIEFzIGEgY29uY2x1c2lvbiwgYWx3YXlzIHRyeSB0byBwbGFjZSBhIDE2LjE2IGZhY3RvciBhcyB0aGUKKyAgICogICBfc2Vjb25kXyBhcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uOyB0aGlzIGNhbiBtYWtlIGEgZ3JlYXQKKyAgICogICBkaWZmZXJlbmNlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9Mb25nICkKICAgRlRfTXVsRml4KCBGVF9Mb25nICBhLAogICAgICAgICAgICAgIEZUX0xvbmcgIGIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RpdkZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGUgYChhKjB4MTAwMDApL2InIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIEl0cyBtYWluIHVzZSBpcyB0byAqLwotICAvKiAgICBkaXZpZGUgYSBnaXZlbiB2YWx1ZSBieSBhIDE2LjE2IGZpeGVkLXBvaW50IGZhY3Rvci4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhIDo6IFRoZSBudW1lcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGIgOjogVGhlIGRlbm9taW5hdG9yLiAgVXNlIGEgMTYuMTYgZmFjdG9yIGhlcmUuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXN1bHQgb2YgYChhKjB4MTAwMDApL2InLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9EaXZGaXgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENvbXB1dGUgYChhKjB4MTAwMDApL2InIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIEl0cyBtYWluIHVzZSBpcyB0bworICAgKiAgIGRpdmlkZSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgYSA6OgorICAgKiAgICAgVGhlIG51bWVyYXRvci4KKyAgICoKKyAgICogICBiIDo6CisgICAqICAgICBUaGUgZGVub21pbmF0b3IuICBVc2UgYSAxNi4xNiBmYWN0b3IgaGVyZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgcmVzdWx0IG9mIGAoYSoweDEwMDAwKS9iJy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfTG9uZyApCiAgIEZUX0RpdkZpeCggRlRfTG9uZyAgYSwKICAgICAgICAgICAgICBGVF9Mb25nICBiICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Sb3VuZEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZCBhIDE2LjE2IGZpeGVkIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhIDo6IFRoZSBudW1iZXIgdG8gYmUgcm91bmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBgYScgcm91bmRlZCB0byB0aGUgbmVhcmVzdCAxNi4xNiBmaXhlZCBpbnRlZ2VyLCBoYWxmd2F5IGNhc2VzIGF3YXkgKi8KLSAgLyogICAgZnJvbSB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGZ1bmN0aW9uIHVzZXMgd3JhcC1hcm91bmQgYXJpdGhtZXRpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1JvdW5kRml4CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSb3VuZCBhIDE2LjE2IGZpeGVkIG51bWJlci4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGEgOjoKKyAgICogICAgIFRoZSBudW1iZXIgdG8gYmUgcm91bmRlZC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBgYScgcm91bmRlZCB0byB0aGUgbmVhcmVzdCAxNi4xNiBmaXhlZCBpbnRlZ2VyLCBoYWxmd2F5IGNhc2VzIGF3YXkKKyAgICogICBmcm9tIHplcm8uCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBmdW5jdGlvbiB1c2VzIHdyYXAtYXJvdW5kIGFyaXRobWV0aWMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKICAgRlRfUm91bmRGaXgoIEZUX0ZpeGVkICBhICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9DZWlsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRlIHRoZSBzbWFsbGVzdCBmb2xsb3dpbmcgaW50ZWdlciBvZiBhIDE2LjE2IGZpeGVkIG51bWJlci4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhIDo6IFRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBjZWlsaW5nIGZ1bmN0aW9uIGlzIHRvIGJlIGNvbXB1dGVkLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBgYScgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZnVuY3Rpb24gdXNlcyB3cmFwLWFyb3VuZCBhcml0aG1ldGljLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfQ2VpbEZpeAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZSB0aGUgc21hbGxlc3QgZm9sbG93aW5nIGludGVnZXIgb2YgYSAxNi4xNiBmaXhlZCBudW1iZXIuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhIDo6CisgICAqICAgICBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgY2VpbGluZyBmdW5jdGlvbiBpcyB0byBiZSBjb21wdXRlZC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBgYScgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBmdW5jdGlvbiB1c2VzIHdyYXAtYXJvdW5kIGFyaXRobWV0aWMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKICAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0Zsb29yRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGUgdGhlIGxhcmdlc3QgcHJldmlvdXMgaW50ZWdlciBvZiBhIDE2LjE2IGZpeGVkIG51bWJlci4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGEgOjogVGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGZsb29yIGZ1bmN0aW9uIGlzIHRvIGJlIGNvbXB1dGVkLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBhJyByb3VuZGVkIHRvd2FyZHMgbWludXMgaW5maW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9GbG9vckZpeAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZSB0aGUgbGFyZ2VzdCBwcmV2aW91cyBpbnRlZ2VyIG9mIGEgMTYuMTYgZml4ZWQgbnVtYmVyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgYSA6OgorICAgKiAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGZsb29yIGZ1bmN0aW9uIGlzIHRvIGJlIGNvbXB1dGVkLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIGBhJyByb3VuZGVkIHRvd2FyZHMgbWludXMgaW5maW5pdHkuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKICAgRlRfRmxvb3JGaXgoIEZUX0ZpeGVkICBhICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9WZWN0b3JfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUcmFuc2Zvcm0gYSBzaW5nbGUgdmVjdG9yIHRocm91Z2ggYSAyeDIgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZWN0b3IgOjogVGhlIHRhcmdldCB2ZWN0b3IgdG8gdHJhbnNmb3JtLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXRyaXggOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgMngyIG1hdHJpeC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYHZlY3Rvcicgb3IgYG1hdHJpeCcgaXMgaW52YWxpZC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfVmVjdG9yX1RyYW5zZm9ybQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVHJhbnNmb3JtIGEgc2luZ2xlIHZlY3RvciB0aHJvdWdoIGEgMngyIG1hdHJpeC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIHZlY3RvciA6OgorICAgKiAgICAgVGhlIHRhcmdldCB2ZWN0b3IgdG8gdHJhbnNmb3JtLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWF0cml4IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSAyeDIgbWF0cml4LgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYHZlY3Rvcicgb3IgYG1hdHJpeCcgaXMgaW52YWxpZC4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oIEZUX1ZlY3RvciogICAgICAgIHZlYywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfTWF0cml4KiAgbWF0cml4ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGdW5jdGlvbnMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIEZyZWVUeXBlIHZlcnNpb25zLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFuZCBtYWNyb3MgYXJlIG9mIGxpbWl0ZWQgdXNlIGJlY2F1c2UgICAgKi8KLSAgLyogICAgZXZlbiBhIG5ldyByZWxlYXNlIG9mIEZyZWVUeXBlIHdpdGggb25seSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgICAgICovCi0gIC8qICAgIGluY3JlYXNlcyB0aGUgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpYnJhcnlfVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlJFRVRZUEVfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZSRUVUWVBFX01JTk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGUkVFVFlQRV9QQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZSRUVUWVBFX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB2ZXJzaW9uCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBGcmVlVHlwZSBWZXJzaW9uCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBGdW5jdGlvbnMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIEZyZWVUeXBlIHZlcnNpb25zLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgTm90ZSB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGFyZSBvZiBsaW1pdGVkIHVzZSBiZWNhdXNlCisgICAqICAgZXZlbiBhIG5ldyByZWxlYXNlIG9mIEZyZWVUeXBlIHdpdGggb25seSBkb2N1bWVudGF0aW9uIGNoYW5nZXMKKyAgICogICBpbmNyZWFzZXMgdGhlIHZlcnNpb24gbnVtYmVyLgorICAgKgorICAgKiBAb3JkZXI6CisgICAqICAgRlRfTGlicmFyeV9WZXJzaW9uCisgICAqCisgICAqICAgRlJFRVRZUEVfTUFKT1IKKyAgICogICBGUkVFVFlQRV9NSU5PUgorICAgKiAgIEZSRUVUWVBFX1BBVENICisgICAqCisgICAqICAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cworICAgKiAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcKKyAgICoKKyAgICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDU0MCw5ICs0OTAzLDEyIEBACiAgICAqICAgVXNlIEBGVF9MaWJyYXJ5X1ZlcnNpb24gdG8gYWNjZXNzIHRoZW0gYXQgcnVudGltZS4KICAgICoKICAgICogQHZhbHVlczoKLSAgICogICBGUkVFVFlQRV9NQUpPUiA6OiBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuCi0gICAqICAgRlJFRVRZUEVfTUlOT1IgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLgotICAgKiAgIEZSRUVUWVBFX1BBVENIIDo6IFRoZSBwYXRjaCBsZXZlbC4KKyAgICogICBGUkVFVFlQRV9NQUpPUiA6OgorICAgKiAgICAgVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLgorICAgKiAgIEZSRUVUWVBFX01JTk9SIDo6CisgICAqICAgICBUaGUgbWlub3IgdmVyc2lvbiBudW1iZXIuCisgICAqICAgRlJFRVRZUEVfUEFUQ0ggOjoKKyAgICogICAgIFRoZSBwYXRjaCBsZXZlbC4KICAgICoKICAgICogQG5vdGU6CiAgICAqICAgVGhlIHZlcnNpb24gbnVtYmVyIG9mIEZyZWVUeXBlIGlmIGJ1aWx0IGFzIGEgZHluYW1pYyBsaW5rIGxpYnJhcnkKQEAgLTQ1NTIsMzggKzQ5MTgsNDIgQEAKICAgICovCiAjZGVmaW5lIEZSRUVUWVBFX01BSk9SICAyCiAjZGVmaW5lIEZSRUVUWVBFX01JTk9SICA5Ci0jZGVmaW5lIEZSRUVUWVBFX1BBVENIICAwCisjZGVmaW5lIEZSRUVUWVBFX1BBVENIICAxCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaWJyYXJ5X1ZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkgYmVpbmcgdXNlZC4gIFRoaXMgaXMgICAgKi8KLSAgLyogICAgdXNlZnVsIHdoZW4gZHluYW1pY2FsbHkgbGlua2luZyB0byB0aGUgbGlicmFyeSwgc2luY2Ugb25lIGNhbm5vdCAgICovCi0gIC8qICAgIHVzZSB0aGUgbWFjcm9zIEBGUkVFVFlQRV9NQUpPUiwgQEZSRUVUWVBFX01JTk9SLCBhbmQgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlJFRVRZUEVfUEFUQ0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgc291cmNlIGxpYnJhcnkgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbWFqb3IgIDo6IFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFtaW5vciAgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXBhdGNoICA6OiBUaGUgcGF0Y2ggdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlYXNvbiB3aHkgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBsaWJyYXJ5JyBhcmd1bWVudCBpcyBiZWNhdXNlICovCi0gIC8qICAgIGNlcnRhaW4gcHJvZ3JhbXMgaW1wbGVtZW50IGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gaW4gYSBjdXN0b20gd2F5ICAqLwotICAvKiAgICB0aGF0IGRvZXNuJ3QgdXNlIEBGVF9Jbml0X0ZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluIHN1Y2ggY2FzZXMsIHRoZSBsaWJyYXJ5IHZlcnNpb24gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBiZWZvcmUgICAqLwotICAvKiAgICB0aGUgbGlicmFyeSBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTGlicmFyeV9WZXJzaW9uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkgYmVpbmcgdXNlZC4gIFRoaXMgaXMKKyAgICogICB1c2VmdWwgd2hlbiBkeW5hbWljYWxseSBsaW5raW5nIHRvIHRoZSBsaWJyYXJ5LCBzaW5jZSBvbmUgY2Fubm90CisgICAqICAgdXNlIHRoZSBtYWNyb3MgQEZSRUVUWVBFX01BSk9SLCBARlJFRVRZUEVfTUlOT1IsIGFuZAorICAgKiAgIEBGUkVFVFlQRV9QQVRDSC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgc291cmNlIGxpYnJhcnkgaGFuZGxlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFtYWpvciA6OgorICAgKiAgICAgVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLgorICAgKgorICAgKiAgIGFtaW5vciA6OgorICAgKiAgICAgVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLgorICAgKgorICAgKiAgIGFwYXRjaCA6OgorICAgKiAgICAgVGhlIHBhdGNoIHZlcnNpb24gbnVtYmVyLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgYGxpYnJhcnknIGFyZ3VtZW50IGlzIGJlY2F1c2UKKyAgICogICBjZXJ0YWluIHByb2dyYW1zIGltcGxlbWVudCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGluIGEgY3VzdG9tIHdheQorICAgKiAgIHRoYXQgZG9lc24ndCB1c2UgQEZUX0luaXRfRnJlZVR5cGUuCisgICAqCisgICAqICAgSW4gc3VjaCBjYXNlcywgdGhlIGxpYnJhcnkgdmVyc2lvbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGJlZm9yZQorICAgKiAgIHRoZSBsaWJyYXJ5IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfTGlicmFyeV9WZXJzaW9uKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1ham9yLApAQCAtNDU5MSw1MiArNDk2MSw1NSBAQAogICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICphcGF0Y2ggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlcHJlY2F0ZWQsIGRvZXMgbm90aGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBmYWNlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFsd2F5cyByZXR1cm5zIGZhbHNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNpbmNlIE1heSAyMDEwLCBUcnVlVHlwZSBoaW50aW5nIGlzIG5vIGxvbmdlciBwYXRlbnRlZC4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuMy41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEZXByZWNhdGVkLCBkb2VzIG5vdGhpbmcuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGZhY2UgaGFuZGxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBTaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjMuNQorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9Cb29sICkKICAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyggRlRfRmFjZSAgZmFjZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVwcmVjYXRlZCwgZG9lcyBub3RoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgOjogQSBmYWNlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2YWx1ZSA6OiBOZXcgYm9vbGVhbiBzZXR0aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAyLjMuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGVwcmVjYXRlZCwgZG9lcyBub3RoaW5nLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBmYWNlIGhhbmRsZS4KKyAgICoKKyAgICogICB2YWx1ZSA6OgorICAgKiAgICAgTmV3IGJvb2xlYW4gc2V0dGluZy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBBbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2luY2UgTWF5IDIwMTAsIFRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4zLjUKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfQm9vbCApCiAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcoIEZUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHZhbHVlICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKaW5kZXggZjc4ZThiMS4uOWMzZjU0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRhZHZhbmMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFF1aWNrIGNvbXB1dGF0aW9uIG9mIGFkdmFuY2Ugd2lkdGhzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRhZHZhbmMuaAorICoKKyAqICAgUXVpY2sgY29tcHV0YXRpb24gb2YgYWR2YW5jZSB3aWR0aHMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRBRFZBTkNfSF8KQEAgLTU2LDY4ICs1Niw3MiBAQAogICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPENvbnN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgYml0LWZsYWcgdG8gYmUgT1ItZWQgd2l0aCB0aGUgYGZsYWdzJyBwYXJhbWV0ZXIgb2YgdGhlICAgICAgICAgICAqLwotICAvKiAgICBARlRfR2V0X0FkdmFuY2UgYW5kIEBGVF9HZXRfQWR2YW5jZXMgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZhaWwgaWYgdGhlICAqLwotICAvKiAgICBjb3JyZXNwb25kaW5nIGhpbnRpbmcgbW9kZSBvciBmb250IGRyaXZlciBkb2Vzbid0IGFsbG93IGZvciB2ZXJ5ICAgKi8KLSAgLyogICAgcXVpY2sgYWR2YW5jZSBjb21wdXRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUeXBpY2FsbHksIGdseXBocyB0aGF0IGFyZSBlaXRoZXIgdW5zY2FsZWQsIHVuaGludGVkLCBiaXRtYXBwZWQsICAgKi8KLSAgLyogICAgb3IgbGlnaHQtaGludGVkIGNhbiBoYXZlIHRoZWlyIGFkdmFuY2Ugd2lkdGggY29tcHV0ZWQgdmVyeSAgICAgICAgICovCi0gIC8qICAgIHF1aWNrbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm9ybWFsIGFuZCBieXRlY29kZSBoaW50ZWQgbW9kZXMgdGhhdCByZXF1aXJlIGxvYWRpbmcsIHNjYWxpbmcsICAgICovCi0gIC8qICAgIGFuZCBoaW50aW5nIG9mIHRoZSBnbHlwaCBvdXRsaW5lLCBhcmUgZXh0cmVtZWx5IHNsb3cgYnkgICAgICAgICAgICAqLwotICAvKiAgICBjb21wYXJpc29uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9BRFZBTkNFX0ZMQUdfRkFTVF9PTkxZCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGJpdC1mbGFnIHRvIGJlIE9SLWVkIHdpdGggdGhlIGBmbGFncycgcGFyYW1ldGVyIG9mIHRoZQorICAgKiAgIEBGVF9HZXRfQWR2YW5jZSBhbmQgQEZUX0dldF9BZHZhbmNlcyBmdW5jdGlvbnMuCisgICAqCisgICAqICAgSWYgc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB5b3Ugd2FudCB0aGVzZSBmdW5jdGlvbnMgdG8gZmFpbCBpZiB0aGUKKyAgICogICBjb3JyZXNwb25kaW5nIGhpbnRpbmcgbW9kZSBvciBmb250IGRyaXZlciBkb2Vzbid0IGFsbG93IGZvciB2ZXJ5CisgICAqICAgcXVpY2sgYWR2YW5jZSBjb21wdXRhdGlvbi4KKyAgICoKKyAgICogICBUeXBpY2FsbHksIGdseXBocyB0aGF0IGFyZSBlaXRoZXIgdW5zY2FsZWQsIHVuaGludGVkLCBiaXRtYXBwZWQsCisgICAqICAgb3IgbGlnaHQtaGludGVkIGNhbiBoYXZlIHRoZWlyIGFkdmFuY2Ugd2lkdGggY29tcHV0ZWQgdmVyeQorICAgKiAgIHF1aWNrbHkuCisgICAqCisgICAqICAgTm9ybWFsIGFuZCBieXRlY29kZSBoaW50ZWQgbW9kZXMgdGhhdCByZXF1aXJlIGxvYWRpbmcsIHNjYWxpbmcsCisgICAqICAgYW5kIGhpbnRpbmcgb2YgdGhlIGdseXBoIG91dGxpbmUsIGFyZSBleHRyZW1lbHkgc2xvdyBieQorICAgKiAgIGNvbXBhcmlzb24uCisgICAqLwogI2RlZmluZSBGVF9BRFZBTkNFX0ZMQUdfRkFTVF9PTkxZICAweDIwMDAwMDAwTAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0FkdmFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgdGhlIGFkdmFuY2UgdmFsdWUgb2YgYSBnaXZlbiBnbHlwaCBvdXRsaW5lIGluIGFuICAgICAgICAgICovCi0gIC8qICAgIEBGVF9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogVGhlIHNvdXJjZSBARlRfRmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2luZGV4ICAgICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX2ZsYWdzIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgd2hlbiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjYWxsaW5nIEBGVF9Mb2FkX0dseXBoLCB1c2VkIHRvIGRldGVybWluZSB3aGF0IGtpbmQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgb2YgYWR2YW5jZXMgeW91IG5lZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFkdmFuY2UgOjogVGhlIGFkdmFuY2UgdmFsdWUuICBJZiBzY2FsaW5nIGlzIHBlcmZvcm1lZCAoYmFzZWQgb24gICovCi0gIC8qICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiBgbG9hZF9mbGFncycpLCB0aGUgYWR2YW5jZSB2YWx1ZSBpcyBpbiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAxNi4xNiBmb3JtYXQuICBPdGhlcndpc2UsIGl0IGlzIGluIGZvbnQgdW5pdHMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIElmIEBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCBpcyBzZXQsIHRoaXMgaXMgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBhZHZhbmNlIGNvcnJlc3BvbmRpbmcgdG8gYSB2ZXJ0aWNhbCBsYXlvdXQuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBpdCBpcyB0aGUgaG9yaXpvbnRhbCBhZHZhbmNlIGluIGEgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIGhvcml6b250YWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gbWF5IGZhaWwgaWYgeW91IHVzZSBARlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSBhbmQgICAqLwotICAvKiAgICBpZiB0aGUgY29ycmVzcG9uZGluZyBmb250IGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgcXVpY2sgd2F5IHRvICAgICAgKi8KLSAgLyogICAgcmV0cmlldmUgdGhlIGFkdmFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNjYWxlZCBhZHZhbmNlIGlzIHJldHVybmVkIGluIDE2LjE2IGZvcm1hdCBidXQgaXNuJ3QgdHJhbnNmb3JtZWQgKi8KLSAgLyogICAgYnkgdGhlIGFmZmluZSB0cmFuc2Zvcm1hdGlvbiBzcGVjaWZpZWQgYnkgQEZUX1NldF9UcmFuc2Zvcm0uICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9BZHZhbmNlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSB0aGUgYWR2YW5jZSB2YWx1ZSBvZiBhIGdpdmVuIGdseXBoIG91dGxpbmUgaW4gYW4KKyAgICogICBARlRfRmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgQEZUX0ZhY2UgaGFuZGxlLgorICAgKgorICAgKiAgIGdpbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIEEgc2V0IG9mIGJpdCBmbGFncyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgd2hlbgorICAgKiAgICAgY2FsbGluZyBARlRfTG9hZF9HbHlwaCwgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBraW5kCisgICAqICAgICBvZiBhZHZhbmNlcyB5b3UgbmVlZC4KKyAgICogQG91dHB1dDoKKyAgICogICBwYWR2YW5jZSA6OgorICAgKiAgICAgVGhlIGFkdmFuY2UgdmFsdWUuICBJZiBzY2FsaW5nIGlzIHBlcmZvcm1lZCAoYmFzZWQgb24KKyAgICogICAgIHRoZSB2YWx1ZSBvZiBgbG9hZF9mbGFncycpLCB0aGUgYWR2YW5jZSB2YWx1ZSBpcyBpbgorICAgKiAgICAgMTYuMTYgZm9ybWF0LiAgT3RoZXJ3aXNlLCBpdCBpcyBpbiBmb250IHVuaXRzLgorICAgKgorICAgKiAgICAgSWYgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIGlzIHNldCwgdGhpcyBpcyB0aGUKKyAgICogICAgIHZlcnRpY2FsIGFkdmFuY2UgY29ycmVzcG9uZGluZyB0byBhIHZlcnRpY2FsIGxheW91dC4KKyAgICogICAgIE90aGVyd2lzZSwgaXQgaXMgdGhlIGhvcml6b250YWwgYWR2YW5jZSBpbiBhCisgICAqICAgICBob3Jpem9udGFsIGxheW91dC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1heSBmYWlsIGlmIHlvdSB1c2UgQEZUX0FEVkFOQ0VfRkxBR19GQVNUX09OTFkgYW5kCisgICAqICAgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZm9udCBiYWNrZW5kIGRvZXNuJ3QgaGF2ZSBhIHF1aWNrIHdheSB0bworICAgKiAgIHJldHJpZXZlIHRoZSBhZHZhbmNlcy4KKyAgICoKKyAgICogICBBIHNjYWxlZCBhZHZhbmNlIGlzIHJldHVybmVkIGluIDE2LjE2IGZvcm1hdCBidXQgaXNuJ3QgdHJhbnNmb3JtZWQKKyAgICogICBieSB0aGUgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIHNwZWNpZmllZCBieSBARlRfU2V0X1RyYW5zZm9ybS4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfQWR2YW5jZSggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnaW5kZXgsCkBAIC0xMjUsNTAgKzEyOSw1NSBAQAogICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICpwYWR2YW5jZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0FkdmFuY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgdGhlIGFkdmFuY2UgdmFsdWVzIG9mIHNldmVyYWwgZ2x5cGggb3V0bGluZXMgaW4gYW4gICAgICAgICovCi0gIC8qICAgIEBGVF9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IFRoZSBzb3VyY2UgQEZUX0ZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RhcnQgICAgICAgOjogVGhlIGZpcnN0IGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb3VudCAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGFkdmFuY2UgdmFsdWVzIHlvdSB3YW50IHRvIHJldHJpZXZlLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgd2hlbiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBjYWxsaW5nIEBGVF9Mb2FkX0dseXBoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYWR2YW5jZSA6OiBUaGUgYWR2YW5jZSB2YWx1ZXMuICBUaGlzIGFycmF5LCB0byBiZSBwcm92aWRlZCBieSB0aGUgKi8KLSAgLyogICAgICAgICAgICAgICAgY2FsbGVyLCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgYGNvdW50JyBlbGVtZW50cy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICBJZiBzY2FsaW5nIGlzIHBlcmZvcm1lZCAoYmFzZWQgb24gdGhlIHZhbHVlIG9mICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgYGxvYWRfZmxhZ3MnKSwgdGhlIGFkdmFuY2UgdmFsdWVzIGFyZSBpbiAxNi4xNiBmb3JtYXQuICovCi0gIC8qICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhleSBhcmUgaW4gZm9udCB1bml0cy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgSWYgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIGlzIHNldCwgdGhlc2UgYXJlIHRoZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIHZlcnRpY2FsIGFkdmFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gYSB2ZXJ0aWNhbCBsYXlvdXQuICAqLwotICAvKiAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZXkgYXJlIHRoZSBob3Jpem9udGFsIGFkdmFuY2VzIGluIGEgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgaG9yaXpvbnRhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBtYXkgZmFpbCBpZiB5b3UgdXNlIEBGVF9BRFZBTkNFX0ZMQUdfRkFTVF9PTkxZIGFuZCAgICovCi0gIC8qICAgIGlmIHRoZSBjb3JyZXNwb25kaW5nIGZvbnQgYmFja2VuZCBkb2Vzbid0IGhhdmUgYSBxdWljayB3YXkgdG8gICAgICAqLwotICAvKiAgICByZXRyaWV2ZSB0aGUgYWR2YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNjYWxlZCBhZHZhbmNlcyBhcmUgcmV0dXJuZWQgaW4gMTYuMTYgZm9ybWF0IGJ1dCBhcmVuJ3QgICAgICAgICAgICAqLwotICAvKiAgICB0cmFuc2Zvcm1lZCBieSB0aGUgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIHNwZWNpZmllZCBieSAgICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX1NldF9UcmFuc2Zvcm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9BZHZhbmNlcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIGFkdmFuY2UgdmFsdWVzIG9mIHNldmVyYWwgZ2x5cGggb3V0bGluZXMgaW4gYW4KKyAgICogICBARlRfRmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgQEZUX0ZhY2UgaGFuZGxlLgorICAgKgorICAgKiAgIHN0YXJ0IDo6CisgICAqICAgICBUaGUgZmlyc3QgZ2x5cGggaW5kZXguCisgICAqCisgICAqICAgY291bnQgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYWR2YW5jZSB2YWx1ZXMgeW91IHdhbnQgdG8gcmV0cmlldmUuCisgICAqCisgICAqICAgbG9hZF9mbGFncyA6OgorICAgKiAgICAgQSBzZXQgb2YgYml0IGZsYWdzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCB3aGVuCisgICAqICAgICBjYWxsaW5nIEBGVF9Mb2FkX0dseXBoLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHBhZHZhbmNlIDo6CisgICAqICAgICBUaGUgYWR2YW5jZSB2YWx1ZXMuICBUaGlzIGFycmF5LCB0byBiZSBwcm92aWRlZCBieSB0aGUKKyAgICogICAgIGNhbGxlciwgbXVzdCBjb250YWluIGF0IGxlYXN0IGBjb3VudCcgZWxlbWVudHMuCisgICAqCisgICAqICAgICBJZiBzY2FsaW5nIGlzIHBlcmZvcm1lZCAoYmFzZWQgb24gdGhlIHZhbHVlIG9mCisgICAqICAgICBgbG9hZF9mbGFncycpLCB0aGUgYWR2YW5jZSB2YWx1ZXMgYXJlIGluIDE2LjE2IGZvcm1hdC4KKyAgICogICAgIE90aGVyd2lzZSwgdGhleSBhcmUgaW4gZm9udCB1bml0cy4KKyAgICoKKyAgICogICAgIElmIEBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCBpcyBzZXQsIHRoZXNlIGFyZSB0aGUKKyAgICogICAgIHZlcnRpY2FsIGFkdmFuY2VzIGNvcnJlc3BvbmRpbmcgdG8gYSB2ZXJ0aWNhbCBsYXlvdXQuCisgICAqICAgICBPdGhlcndpc2UsIHRoZXkgYXJlIHRoZSBob3Jpem9udGFsIGFkdmFuY2VzIGluIGEKKyAgICogICAgIGhvcml6b250YWwgbGF5b3V0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbWF5IGZhaWwgaWYgeW91IHVzZSBARlRfQURWQU5DRV9GTEFHX0ZBU1RfT05MWSBhbmQKKyAgICogICBpZiB0aGUgY29ycmVzcG9uZGluZyBmb250IGJhY2tlbmQgZG9lc24ndCBoYXZlIGEgcXVpY2sgd2F5IHRvCisgICAqICAgcmV0cmlldmUgdGhlIGFkdmFuY2VzLgorICAgKgorICAgKiAgIFNjYWxlZCBhZHZhbmNlcyBhcmUgcmV0dXJuZWQgaW4gMTYuMTYgZm9ybWF0IGJ1dCBhcmVuJ3QKKyAgICogICB0cmFuc2Zvcm1lZCBieSB0aGUgYWZmaW5lIHRyYW5zZm9ybWF0aW9uIHNwZWNpZmllZCBieQorICAgKiAgIEBGVF9TZXRfVHJhbnNmb3JtLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9BZHZhbmNlcyggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgc3RhcnQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaAppbmRleCBmOWViNzBiLi45YTBkY2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKQEAgLTEsMzAgKzEsMzAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0YmJveC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBleGFjdCBiYm94IGNvbXB1dGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0YmJveC5oCisgKgorICogICBGcmVlVHlwZSBleGFjdCBiYm94IGNvbXB1dGF0aW9uIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgY29tcG9uZW50IGhhcyBhIF9zaW5nbGVfIHJvbGU6IHRvIGNvbXB1dGUgZXhhY3Qgb3V0bGluZSBib3VuZGluZyAqLwotICAvKiBib3hlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEl0IGlzIHNlcGFyYXRlZCBmcm9tIHRoZSByZXN0IG9mIHRoZSBlbmdpbmUgZm9yIHZhcmlvdXMgdGVjaG5pY2FsICAgICAqLwotICAvKiByZWFzb25zLiAgSXQgbWF5IHdlbGwgYmUgaW50ZWdyYXRlZCBpbiBgZnRvdXRsbicgbGF0ZXIuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBjb21wb25lbnQgaGFzIGEgX3NpbmdsZV8gcm9sZTogdG8gY29tcHV0ZSBleGFjdCBvdXRsaW5lIGJvdW5kaW5nCisgICAqIGJveGVzLgorICAgKgorICAgKiBJdCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZW5naW5lIGZvciB2YXJpb3VzIHRlY2huaWNhbAorICAgKiByZWFzb25zLiAgSXQgbWF5IHdlbGwgYmUgaW50ZWdyYXRlZCBpbiBgZnRvdXRsbicgbGF0ZXIuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgRlRCQk9YX0hfCkBAIC00NCw0MyArNDQsNDUgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZV9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIG91dGxpbmVfcHJvY2Vzc2luZworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfR2V0X0JCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGUgdGhlIGV4YWN0IGJvdW5kaW5nIGJveCBvZiBhbiBvdXRsaW5lLiAgVGhpcyBpcyBzbG93ZXIgICAgICAqLwotICAvKiAgICB0aGFuIGNvbXB1dGluZyB0aGUgY29udHJvbCBib3guICBIb3dldmVyLCBpdCB1c2VzIGFuIGFkdmFuY2VkICAgICAgKi8KLSAgLyogICAgYWxnb3JpdGhtIHRoYXQgcmV0dXJucyBfdmVyeV8gcXVpY2tseSB3aGVuIHRoZSB0d28gYm94ZXMgICAgICAgICAgICovCi0gIC8qICAgIGNvaW5jaWRlLiAgT3RoZXJ3aXNlLCB0aGUgb3V0bGluZSBCZXppZXIgYXJjcyBhcmUgdHJhdmVyc2VkIHRvICAgICAqLwotICAvKiAgICBleHRyYWN0IHRoZWlyIGV4dHJlbWEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdXRsaW5lIDo6IEEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhYmJveCAgIDo6IFRoZSBvdXRsaW5lJ3MgZXhhY3QgYm91bmRpbmcgYm94LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiB0aGUgZm9udCBpcyB0cmlja3kgYW5kIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQgd2l0aCAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0xPQURfTk9fU0NBTEUsIHRoZSByZXN1bHRpbmcgQkJveCBpcyBtZWFuaW5nbGVzcy4gIFRvIGdldCAgICAgICovCi0gIC8qICAgIHJlYXNvbmFibGUgdmFsdWVzIGZvciB0aGUgQkJveCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgZ2x5cGggICAqLwotICAvKiAgICBhdCBhIGxhcmdlIHBwZW0gdmFsdWUgKHNvIHRoYXQgdGhlIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zIGNhbiAgICAgICAgKi8KLSAgLyogICAgcHJvcGVybHkgc2hpZnQgYW5kIHNjYWxlIHRoZSBzdWJnbHlwaHMpLCB0aGVuIGV4dHJhY3RpbmcgdGhlIEJCb3gsICovCi0gIC8qICAgIHdoaWNoIGNhbiBiZSBldmVudHVhbGx5IGNvbnZlcnRlZCBiYWNrIHRvIGZvbnQgdW5pdHMuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0dldF9CQm94CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlIHRoZSBleGFjdCBib3VuZGluZyBib3ggb2YgYW4gb3V0bGluZS4gIFRoaXMgaXMgc2xvd2VyCisgICAqICAgdGhhbiBjb21wdXRpbmcgdGhlIGNvbnRyb2wgYm94LiAgSG93ZXZlciwgaXQgdXNlcyBhbiBhZHZhbmNlZAorICAgKiAgIGFsZ29yaXRobSB0aGF0IHJldHVybnMgX3ZlcnlfIHF1aWNrbHkgd2hlbiB0aGUgdHdvIGJveGVzCisgICAqICAgY29pbmNpZGUuICBPdGhlcndpc2UsIHRoZSBvdXRsaW5lIEJlemllciBhcmNzIGFyZSB0cmF2ZXJzZWQgdG8KKyAgICogICBleHRyYWN0IHRoZWlyIGV4dHJlbWEuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFiYm94IDo6CisgICAqICAgICBUaGUgb3V0bGluZSdzIGV4YWN0IGJvdW5kaW5nIGJveC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiB0aGUgZm9udCBpcyB0cmlja3kgYW5kIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQgd2l0aAorICAgKiAgIEBGVF9MT0FEX05PX1NDQUxFLCB0aGUgcmVzdWx0aW5nIEJCb3ggaXMgbWVhbmluZ2xlc3MuICBUbyBnZXQKKyAgICogICByZWFzb25hYmxlIHZhbHVlcyBmb3IgdGhlIEJCb3ggaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlIGdseXBoCisgICAqICAgYXQgYSBsYXJnZSBwcGVtIHZhbHVlIChzbyB0aGF0IHRoZSBoaW50aW5nIGluc3RydWN0aW9ucyBjYW4KKyAgICogICBwcm9wZXJseSBzaGlmdCBhbmQgc2NhbGUgdGhlIHN1YmdseXBocyksIHRoZW4gZXh0cmFjdGluZyB0aGUgQkJveCwKKyAgICogICB3aGljaCBjYW4gYmUgZXZlbnR1YWxseSBjb252ZXJ0ZWQgYmFjayB0byBmb250IHVuaXRzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfR2V0X0JCb3goIEZUX091dGxpbmUqICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAqYWJib3ggKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaAppbmRleCAxYjZkZWE2Li42OWRiYjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGJkZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGJkZi5oCisgKgorICogICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBCREYtc3BlY2lmaWMgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRCREZfSF8KQEAgLTMyLDIyICszMiwyMiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiZGZfZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCREYgYW5kIFBDRiBGaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCREYgYW5kIFBDRiBzcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBCREYgKi8KLSAgLyogICAgYW5kIFBDRiBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGJkZl9mb250cworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgQkRGIGFuZCBQQ0YgRmlsZXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIEJERiBhbmQgUENGIHNwZWNpZmljIEFQSS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIHNwZWNpZmljIHRvIEJERgorICAgKiAgIGFuZCBQQ0YgZm9udHMuCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkzLDI4ICs5MywyOCBAQAogICB0eXBlZGVmIHN0cnVjdCBCREZfUHJvcGVydHlSZWNfKiAgQkRGX1Byb3BlcnR5OwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQHN0cnVjdDoKLSAgKiAgICBCREZfUHJvcGVydHlSZWMKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgYSBnaXZlbiBCREYvUENGIHByb3BlcnR5LgotICAqCi0gICogQGZpZWxkczoKLSAgKiAgICB0eXBlIDo6Ci0gICogICAgICBUaGUgcHJvcGVydHkgdHlwZS4KLSAgKgotICAqICAgIHUuYXRvbSA6OgotICAqICAgICAgVGhlIGF0b20gc3RyaW5nLCBpZiB0eXBlIGlzIEBCREZfUFJPUEVSVFlfVFlQRV9BVE9NLiAgTWF5IGJlCi0gICogICAgICBOVUxMLCBpbmRpY2F0aW5nIGFuIGVtcHR5IHN0cmluZy4KLSAgKgotICAqICAgIHUuaW50ZWdlciA6OgotICAqICAgICAgQSBzaWduZWQgaW50ZWdlciwgaWYgdHlwZSBpcyBAQkRGX1BST1BFUlRZX1RZUEVfSU5URUdFUi4KLSAgKgotICAqICAgIHUuY2FyZGluYWwgOjoKLSAgKiAgICAgIEFuIHVuc2lnbmVkIGludGVnZXIsIGlmIHR5cGUgaXMgQEJERl9QUk9QRVJUWV9UWVBFX0NBUkRJTkFMLgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgICBCREZfUHJvcGVydHlSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgYSBnaXZlbiBCREYvUENGIHByb3BlcnR5LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgICB0eXBlIDo6CisgICAqICAgICAgVGhlIHByb3BlcnR5IHR5cGUuCisgICAqCisgICAqICAgIHUuYXRvbSA6OgorICAgKiAgICAgIFRoZSBhdG9tIHN0cmluZywgaWYgdHlwZSBpcyBAQkRGX1BST1BFUlRZX1RZUEVfQVRPTS4gIE1heSBiZQorICAgKiAgICAgIE5VTEwsIGluZGljYXRpbmcgYW4gZW1wdHkgc3RyaW5nLgorICAgKgorICAgKiAgICB1LmludGVnZXIgOjoKKyAgICogICAgICBBIHNpZ25lZCBpbnRlZ2VyLCBpZiB0eXBlIGlzIEBCREZfUFJPUEVSVFlfVFlQRV9JTlRFR0VSLgorICAgKgorICAgKiAgICB1LmNhcmRpbmFsIDo6CisgICAqICAgICAgQW4gdW5zaWduZWQgaW50ZWdlciwgaWYgdHlwZSBpcyBAQkRGX1BST1BFUlRZX1RZUEVfQ0FSRElOQUwuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgQkRGX1Byb3BlcnR5UmVjXwogICB7CiAgICAgQkRGX1Byb3BlcnR5VHlwZSAgdHlwZTsKQEAgLTEyOCw3MyArMTI4LDc2IEBACiAgIH0gQkRGX1Byb3BlcnR5UmVjOwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGZ1bmN0aW9uOgotICAqICAgIEZUX0dldF9CREZfQ2hhcnNldF9JRAotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIFJldHJpZXZlIGEgQkRGIGZvbnQgY2hhcmFjdGVyIHNldCBpZGVudGl0eSwgYWNjb3JkaW5nIHRvCi0gICogICAgdGhlIEJERiBzcGVjaWZpY2F0aW9uLgotICAqCi0gICogQGlucHV0OgotICAqICAgIGZhY2UgOjoKLSAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KLSAgKgotICAqIEBvdXRwdXQ6Ci0gICogICAgYWNoYXJzZXRfZW5jb2RpbmcgOjoKLSAgKiAgICAgICBDaGFyc2V0IGVuY29kaW5nLCBhcyBhIEN+c3RyaW5nLCBvd25lZCBieSB0aGUgZmFjZS4KLSAgKgotICAqICAgIGFjaGFyc2V0X3JlZ2lzdHJ5IDo6Ci0gICogICAgICAgQ2hhcnNldCByZWdpc3RyeSwgYXMgYSBDfnN0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuCi0gICoKLSAgKiBAcmV0dXJuOgotICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KLSAgKgotICAqIEBub3RlOgotICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQkRGIGZhY2VzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9CREZfQ2hhcnNldF9JRAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIFJldHJpZXZlIGEgQkRGIGZvbnQgY2hhcmFjdGVyIHNldCBpZGVudGl0eSwgYWNjb3JkaW5nIHRvCisgICAqICAgIHRoZSBCREYgc3BlY2lmaWNhdGlvbi4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgICBmYWNlIDo6CisgICAqICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIGFjaGFyc2V0X2VuY29kaW5nIDo6CisgICAqICAgICAgQ2hhcnNldCBlbmNvZGluZywgYXMgYSBDfnN0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuCisgICAqCisgICAqICAgIGFjaGFyc2V0X3JlZ2lzdHJ5IDo6CisgICAqICAgICAgQ2hhcnNldCByZWdpc3RyeSwgYXMgYSBDfnN0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggQkRGIGZhY2VzLCByZXR1cm5pbmcgYW4gZXJyb3Igb3RoZXJ3aXNlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9CREZfQ2hhcnNldF9JRCggRlRfRmFjZSAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfZW5jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9yZWdpc3RyeSApOwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGZ1bmN0aW9uOgotICAqICAgIEZUX0dldF9CREZfUHJvcGVydHkKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgICBSZXRyaWV2ZSBhIEJERiBwcm9wZXJ0eSBmcm9tIGEgQkRGIG9yIFBDRiBmb250IGZpbGUuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICAgZmFjZSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KLSAgKgotICAqICAgIG5hbWUgOjogVGhlIHByb3BlcnR5IG5hbWUuCi0gICoKLSAgKiBAb3V0cHV0OgotICAqICAgIGFwcm9wZXJ0eSA6OiBUaGUgcHJvcGVydHkuCi0gICoKLSAgKiBAcmV0dXJuOgotICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KLSAgKgotICAqIEBub3RlOgotICAqICAgVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIEJERiBfYW5kXyBQQ0YgZm9udHMuICBJdCByZXR1cm5zIGFuIGVycm9yCi0gICogICBvdGhlcndpc2UuICBJdCBhbHNvIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBpbiB0aGUKLSAgKiAgIGZvbnQuCi0gICoKLSAgKiAgIEEgYHByb3BlcnR5JyBpcyBhIGVpdGhlciBrZXktdmFsdWUgcGFpciB3aXRoaW4gdGhlIFNUQVJUUFJPUEVSVElFUwotICAqICAgLi4uIEVORFBST1BFUlRJRVMgYmxvY2sgb2YgYSBCREYgZm9udCBvciBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlCi0gICogICBgaW5mby0+cHJvcHMnIGFycmF5IHdpdGhpbiBhIGBGb250UmVjJyBzdHJ1Y3R1cmUgb2YgYSBQQ0YgZm9udC4KLSAgKgotICAqICAgSW50ZWdlciBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgc3RvcmVkIGFzIGBzaWduZWQnIHdpdGhpbiBQQ0YgZm9udHM7Ci0gICogICBjb25zZXF1ZW50bHksIEBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTCBpcyBhIHBvc3NpYmxlIHJldHVybiB2YWx1ZQotICAqICAgZm9yIEJERiBmb250cyBvbmx5LgotICAqCi0gICogICBJbiBjYXNlIG9mIGVycm9yLCBgYXByb3BlcnR5LT50eXBlJyBpcyBhbHdheXMgc2V0IHRvCi0gICogICBAQkRGX1BST1BFUlRZX1RZUEVfTk9ORS4KLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9HZXRfQkRGX1Byb3BlcnR5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgUmV0cmlldmUgYSBCREYgcHJvcGVydHkgZnJvbSBhIEJERiBvciBQQ0YgZm9udCBmaWxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICoKKyAgICogICAgbmFtZSA6OgorICAgKiAgICAgIFRoZSBwcm9wZXJ0eSBuYW1lLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICBhcHJvcGVydHkgOjoKKyAgICogICAgICBUaGUgcHJvcGVydHkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIEJERiBfYW5kXyBQQ0YgZm9udHMuICBJdCByZXR1cm5zIGFuIGVycm9yCisgICAqICAgb3RoZXJ3aXNlLiAgSXQgYWxzbyByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgaW4gdGhlCisgICAqICAgZm9udC4KKyAgICoKKyAgICogICBBIGBwcm9wZXJ0eScgaXMgYSBlaXRoZXIga2V5LXZhbHVlIHBhaXIgd2l0aGluIHRoZSBTVEFSVFBST1BFUlRJRVMKKyAgICogICAuLi4gRU5EUFJPUEVSVElFUyBibG9jayBvZiBhIEJERiBmb250IG9yIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUKKyAgICogICBgaW5mby0+cHJvcHMnIGFycmF5IHdpdGhpbiBhIGBGb250UmVjJyBzdHJ1Y3R1cmUgb2YgYSBQQ0YgZm9udC4KKyAgICoKKyAgICogICBJbnRlZ2VyIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBzdG9yZWQgYXMgYHNpZ25lZCcgd2l0aGluIFBDRiBmb250czsKKyAgICogICBjb25zZXF1ZW50bHksIEBCREZfUFJPUEVSVFlfVFlQRV9DQVJESU5BTCBpcyBhIHBvc3NpYmxlIHJldHVybiB2YWx1ZQorICAgKiAgIGZvciBCREYgZm9udHMgb25seS4KKyAgICoKKyAgICogICBJbiBjYXNlIG9mIGVycm9yLCBgYXByb3BlcnR5LT50eXBlJyBpcyBhbHdheXMgc2V0IHRvCisgICAqICAgQEJERl9QUk9QRVJUWV9UWVBFX05PTkUuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X0JERl9Qcm9wZXJ0eSggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgcHJvcF9uYW1lLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCmluZGV4IGE0MzE4N2MuLmM5MzcwYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Yml0bWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Yml0bWFwLmgKKyAqCisgKiAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVEJJVE1BUF9IXwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0NPTE9SX0gKIAogI2lmZGVmIEZSRUVUWVBFX0gKICNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCkBAIC0zMywzOSArMzQsNDAgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYml0bWFwX2hhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQml0bWFwIEhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSGFuZGxpbmcgRlRfQml0bWFwIG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgQEZUX0JpdG1hcCBvYmplY3RzLiAgICovCi0gIC8qICAgIE5vdGUgdGhhdCBub25lIG9mIHRoZSBmdW5jdGlvbnMgY2hhbmdlcyB0aGUgYml0bWFwJ3MgYGZsb3cnIChhcyAgICAqLwotICAvKiAgICBpbmRpY2F0ZWQgYnkgdGhlIHNpZ24gb2YgdGhlIGBwaXRjaCcgZmllbGQgaW4gYEZUX0JpdG1hcCcpLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYml0bWFwX2hhbmRsaW5nCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBCaXRtYXAgSGFuZGxpbmcKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIEhhbmRsaW5nIEZUX0JpdG1hcCBvYmplY3RzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgQEZUX0JpdG1hcCBvYmplY3RzLgorICAgKiAgIE5vdGUgdGhhdCBub25lIG9mIHRoZSBmdW5jdGlvbnMgY2hhbmdlcyB0aGUgYml0bWFwJ3MgYGZsb3cnIChhcworICAgKiAgIGluZGljYXRlZCBieSB0aGUgc2lnbiBvZiB0aGUgYHBpdGNoJyBmaWVsZCBpbiBgRlRfQml0bWFwJykuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQml0bWFwX0luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZSBhIHBvaW50ZXIgdG8gYW4gQEZUX0JpdG1hcCBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWJpdG1hcCA6OiBBIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBkZXByZWNhdGVkIG5hbWUgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uIGlzIGBGVF9CaXRtYXBfTmV3Jy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0JpdG1hcF9Jbml0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBJbml0aWFsaXplIGEgcG9pbnRlciB0byBhbiBARlRfQml0bWFwIHN0cnVjdHVyZS4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGFiaXRtYXAgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgYml0bWFwIHN0cnVjdHVyZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQSBkZXByZWNhdGVkIG5hbWUgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uIGlzIGBGVF9CaXRtYXBfTmV3Jy4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX0JpdG1hcF9Jbml0KCBGVF9CaXRtYXAgICphYml0bWFwICk7CiAKQEAgLTc1LDY2ICs3Nyw3MyBAQAogICBGVF9CaXRtYXBfTmV3KCBGVF9CaXRtYXAgICphYml0bWFwICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CaXRtYXBfQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb3B5IGEgYml0bWFwIGludG8gYW5vdGhlciBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNvdXJjZSAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhcmdldCAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9CaXRtYXBfQ29weQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ29weSBhIGJpdG1hcCBpbnRvIGFub3RoZXIgb25lLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICBzb3VyY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgYml0bWFwLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHRhcmdldCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBiaXRtYXAuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9CaXRtYXBfQ29weSggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0JpdG1hcCAgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCAgICAgICAgKnRhcmdldCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQml0bWFwX0VtYm9sZGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRW1ib2xkZW4gYSBiaXRtYXAuICBUaGUgbmV3IGJpdG1hcCB3aWxsIGJlIGFib3V0IGB4U3RyZW5ndGgnICAgICAgICovCi0gIC8qICAgIHBpeGVscyB3aWRlciBhbmQgYHlTdHJlbmd0aCcgcGl4ZWxzIGhpZ2hlci4gIFRoZSBsZWZ0IGFuZCBib3R0b20gICAqLwotICAvKiAgICBib3JkZXJzIGFyZSBrZXB0IHVuY2hhbmdlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5ICAgOjogQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHhTdHJlbmd0aCA6OiBIb3cgc3Ryb25nIHRoZSBnbHlwaCBpcyBlbWJvbGRlbmVkIGhvcml6b250YWxseS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgRXhwcmVzc2VkIGluIDI2LjYgcGl4ZWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHlTdHJlbmd0aCA6OiBIb3cgc3Ryb25nIHRoZSBnbHlwaCBpcyBlbWJvbGRlbmVkIHZlcnRpY2FsbHkuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgRXhwcmVzc2VkIGluIDI2LjYgcGl4ZWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiaXRtYXAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXN0cmljdHMgYHhTdHJlbmd0aCcgdG8gYmUgbGVzcyB0aGFuICAgKi8KLSAgLyogICAgb3IgZXF1YWwgdG9+OCBpZiBiaXRtYXAgaXMgb2YgcGl4ZWxfbW9kZSBARlRfUElYRUxfTU9ERV9NT05PLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiB5b3Ugd2FudCB0byBlbWJvbGRlbiB0aGUgYml0bWFwIG93bmVkIGJ5IGEgQEZUX0dseXBoU2xvdFJlYywgICAgKi8KLSAgLyogICAgeW91IHNob3VsZCBjYWxsIEBGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCBvbiB0aGUgc2xvdCBmaXJzdC4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCaXRtYXBzIGluIEBGVF9QSVhFTF9NT0RFX0dSQVkyIGFuZCBARlRfUElYRUxfTU9ERV9HUkFZQCBmb3JtYXQgICAgKi8KLSAgLyogICAgYXJlIGNvbnZlcnRlZCB0byBARlRfUElYRUxfTU9ERV9HUkFZIGZvcm1hdCAoaS5lLiwgOGJwcCkuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0JpdG1hcF9FbWJvbGRlbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRW1ib2xkZW4gYSBiaXRtYXAuICBUaGUgbmV3IGJpdG1hcCB3aWxsIGJlIGFib3V0IGB4U3RyZW5ndGgnCisgICAqICAgcGl4ZWxzIHdpZGVyIGFuZCBgeVN0cmVuZ3RoJyBwaXhlbHMgaGlnaGVyLiAgVGhlIGxlZnQgYW5kIGJvdHRvbQorICAgKiAgIGJvcmRlcnMgYXJlIGtlcHQgdW5jaGFuZ2VkLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICB4U3RyZW5ndGggOjoKKyAgICogICAgIEhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQgaG9yaXpvbnRhbGx5LgorICAgKiAgICAgRXhwcmVzc2VkIGluIDI2LjYgcGl4ZWwgZm9ybWF0LgorICAgKgorICAgKiAgIHlTdHJlbmd0aCA6OgorICAgKiAgICAgSG93IHN0cm9uZyB0aGUgZ2x5cGggaXMgZW1ib2xkZW5lZCB2ZXJ0aWNhbGx5LgorICAgKiAgICAgRXhwcmVzc2VkIGluIDI2LjYgcGl4ZWwgZm9ybWF0LgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgYml0bWFwIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGJpdG1hcC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXN0cmljdHMgYHhTdHJlbmd0aCcgdG8gYmUgbGVzcyB0aGFuCisgICAqICAgb3IgZXF1YWwgdG9+OCBpZiBiaXRtYXAgaXMgb2YgcGl4ZWxfbW9kZSBARlRfUElYRUxfTU9ERV9NT05PLgorICAgKgorICAgKiAgIElmIHlvdSB3YW50IHRvIGVtYm9sZGVuIHRoZSBiaXRtYXAgb3duZWQgYnkgYSBARlRfR2x5cGhTbG90UmVjLAorICAgKiAgIHlvdSBzaG91bGQgY2FsbCBARlRfR2x5cGhTbG90X093bl9CaXRtYXAgb24gdGhlIHNsb3QgZmlyc3QuCisgICAqCisgICAqICAgQml0bWFwcyBpbiBARlRfUElYRUxfTU9ERV9HUkFZMiBhbmQgQEZUX1BJWEVMX01PREVfR1JBWUAgZm9ybWF0CisgICAqICAgYXJlIGNvbnZlcnRlZCB0byBARlRfUElYRUxfTU9ERV9HUkFZIGZvcm1hdCAoaS5lLiwgOGJwcCkuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfQml0bWFwX0VtYm9sZGVuKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogIGJpdG1hcCwKQEAgLTE0MiwzOSArMTUxLDQzIEBACiAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgeVN0cmVuZ3RoICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CaXRtYXBfQ29udmVydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb252ZXJ0IGEgYml0bWFwIG9iamVjdCB3aXRoIGRlcHRoIDFicHAsIDJicHAsIDRicHAsIDhicHAgb3IgMzJicHAgKi8KLSAgLyogICAgdG8gYSBiaXRtYXAgb2JqZWN0IHdpdGggZGVwdGggOGJwcCwgbWFraW5nIHRoZSBudW1iZXIgb2YgdXNlZCAgICAgICovCi0gIC8qICAgIGJ5dGVzIGxpbmUgKGEuay5hLiB0aGUgYHBpdGNoJykgYSBtdWx0aXBsZSBvZiBgYWxpZ25tZW50Jy4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgICA6OiBBIGhhbmRsZSB0byBhIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc291cmNlICAgIDo6IFRoZSBzb3VyY2UgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbGlnbm1lbnQgOjogVGhlIHBpdGNoIG9mIHRoZSBiaXRtYXAgaXMgYSBtdWx0aXBsZSBvZiB0aGlzICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIHBhcmFtZXRlci4gIENvbW1vbiB2YWx1ZXMgYXJlIDEsIDIsIG9yIDQuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFyZ2V0ICAgIDo6IFRoZSB0YXJnZXQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSXQgaXMgcG9zc2libGUgdG8gY2FsbCBARlRfQml0bWFwX0NvbnZlcnQgbXVsdGlwbGUgdGltZXMgd2l0aG91dCAgICovCi0gIC8qICAgIGNhbGxpbmcgQEZUX0JpdG1hcF9Eb25lICh0aGUgbWVtb3J5IGlzIHNpbXBseSByZWFsbG9jYXRlZCkuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNlIEBGVF9CaXRtYXBfRG9uZSB0byBmaW5hbGx5IHJlbW92ZSB0aGUgYml0bWFwIG9iamVjdC4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYGxpYnJhcnknIGFyZ3VtZW50IGlzIHRha2VuIHRvIGhhdmUgYWNjZXNzIHRvIEZyZWVUeXBlJ3MgICAgICAgKi8KLSAgLyogICAgbWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0JpdG1hcF9Db252ZXJ0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDb252ZXJ0IGEgYml0bWFwIG9iamVjdCB3aXRoIGRlcHRoIDFicHAsIDJicHAsIDRicHAsIDhicHAgb3IgMzJicHAKKyAgICogICB0byBhIGJpdG1hcCBvYmplY3Qgd2l0aCBkZXB0aCA4YnBwLCBtYWtpbmcgdGhlIG51bWJlciBvZiB1c2VkCisgICAqICAgYnl0ZXMgcGVyIGxpbmUgKGEuay5hLiB0aGUgYHBpdGNoJykgYSBtdWx0aXBsZSBvZiBgYWxpZ25tZW50Jy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqICAgc291cmNlIDo6CisgICAqICAgICBUaGUgc291cmNlIGJpdG1hcC4KKyAgICoKKyAgICogICBhbGlnbm1lbnQgOjoKKyAgICogICAgIFRoZSBwaXRjaCBvZiB0aGUgYml0bWFwIGlzIGEgbXVsdGlwbGUgb2YgdGhpcworICAgKiAgICAgYXJndW1lbnQuICBDb21tb24gdmFsdWVzIGFyZSAxLCAyLCBvciA0LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHRhcmdldCA6OgorICAgKiAgICAgVGhlIHRhcmdldCBiaXRtYXAuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSXQgaXMgcG9zc2libGUgdG8gY2FsbCBARlRfQml0bWFwX0NvbnZlcnQgbXVsdGlwbGUgdGltZXMgd2l0aG91dAorICAgKiAgIGNhbGxpbmcgQEZUX0JpdG1hcF9Eb25lICh0aGUgbWVtb3J5IGlzIHNpbXBseSByZWFsbG9jYXRlZCkuCisgICAqCisgICAqICAgVXNlIEBGVF9CaXRtYXBfRG9uZSB0byBmaW5hbGx5IHJlbW92ZSB0aGUgYml0bWFwIG9iamVjdC4KKyAgICoKKyAgICogICBUaGUgYGxpYnJhcnknIGFyZ3VtZW50IGlzIHRha2VuIHRvIGhhdmUgYWNjZXNzIHRvIEZyZWVUeXBlJ3MKKyAgICogICBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0JpdG1hcF9Db252ZXJ0KCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfQml0bWFwICAqc291cmNlLApAQCAtMTgyLDQ4ICsxOTUsMTA5IEBACiAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgICBhbGlnbm1lbnQgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dseXBoU2xvdF9Pd25fQml0bWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1ha2Ugc3VyZSB0aGF0IGEgZ2x5cGggc2xvdCBvd25zIGBzbG90LT5iaXRtYXAnLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNsb3QgOjogVGhlIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfQml0bWFwX0VtYm9sZGVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfQml0bWFwX0JsZW5kCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBCbGVuZCBhIGJpdG1hcCBvbnRvIGFub3RoZXIgYml0bWFwLCB1c2luZyBhIGdpdmVuIGNvbG9yLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICBzb3VyY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgYml0bWFwLCB3aGljaCBjYW4gaGF2ZSBhbnkgQEZUX1BpeGVsX01vZGUgZm9ybWF0LgorICAgKgorICAgKiAgIHNvdXJjZV9vZmZzZXQgOjoKKyAgICogICAgIFRoZSBvZmZzZXQgdmVjdG9yIHRvIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgc291cmNlIGJpdG1hcCBpbgorICAgKiAgICAgMjYuNiBwaXhlbCBmb3JtYXQuICBUaGlzIGNhbiBiZSBhIGZyYWN0aW9uYWwgcGl4ZWwgdmFsdWUuCisgICAqCisgICAqICAgY29sb3IgOjoKKyAgICogICAgIFRoZSBjb2xvciB1c2VkIHRvIGRyYXcgYHNvdXJjZScgb250byBgdGFyZ2V0Jy4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIHRhcmdldCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYW4gYEZUX0JpdG1hcCcgb2JqZWN0LiAgSXQgc2hvdWxkIGJlIGVpdGhlciBpbml0aWFsaXplZAorICAgKiAgICAgYXMgZW1wdHkgd2l0aCBhIGNhbGwgdG8gQEZUX0JpdG1hcF9Jbml0LCBvciBpdCBzaG91bGQgYmUgb2YgdHlwZQorICAgKiAgICAgQEZUX1BJWEVMX01PREVfQkdSQS4KKyAgICoKKyAgICogICBhdGFyZ2V0X29mZnNldCA6OgorICAgKiAgICAgVGhlIG9mZnNldCB2ZWN0b3IgdG8gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSB0YXJnZXQgYml0bWFwIGluCisgICAqICAgICAyNi42IHBpeGVsIGZvcm1hdC4gIEl0IHNob3VsZCByZXByZXNlbnQgYW4gaW50ZWdlciBvZmZzZXQ7IHRoZQorICAgKiAgICAgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGxvd2VzdCBzaXggYml0cyB0byB6ZXJvIHRvIGVuZm9yY2UgdGhhdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcGVyZm9ybSBjbGlwcGluZy4KKyAgICoKKyAgICogICBUaGUgYml0bWFwIGluIGB0YXJnZXQnIGdldHMgYWxsb2NhdGVkIG9yIHJlYWxsb2NhdGVkIGFzIG5lZWRlZDsgdGhlCisgICAqICAgdmVjdG9yIGBhdGFyZ2V0X29mZnNldCcgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4KKyAgICoKKyAgICogICBJbiBjYXNlIG9mIGFsbG9jYXRpb24gb3IgcmVhbGxvY2F0aW9uLCB0aGUgYml0bWFwJ3MgcGl0Y2ggaXMgc2V0IHRvCisgICAqICAgYDR+Kn53aWR0aCcuICBCb3RoIGBzb3VyY2UnIGFuZCBgdGFyZ2V0JyBtdXN0IGhhdmUgdGhlIHNhbWUgYml0bWFwCisgICAqICAgZmxvdyAoYXMgaW5kaWNhdGVkIGJ5IHRoZSBzaWduIG9mIHRoZSBgcGl0Y2gnIGZpZWxkKS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMTAKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9CaXRtYXBfQmxlbmQoIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0JpdG1hcCogICBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yICAgIHNvdXJjZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgRlRfQml0bWFwKiAgICAgICAgIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICAgICAgICAqYXRhcmdldF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgRlRfQ29sb3IgICAgICAgICAgIGNvbG9yICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dseXBoU2xvdF9Pd25fQml0bWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBNYWtlIHN1cmUgdGhhdCBhIGdseXBoIHNsb3Qgb3ducyBgc2xvdC0+Yml0bWFwJy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHNsb3QgOjoKKyAgICogICAgIFRoZSBnbHlwaCBzbG90LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoCisgICAqICAgQEZUX0JpdG1hcF9FbWJvbGRlbi4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCggRlRfR2x5cGhTbG90ICBzbG90ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CaXRtYXBfRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXN0cm95IGEgYml0bWFwIG9iamVjdCBpbml0aWFsaXplZCB3aXRoIEBGVF9CaXRtYXBfSW5pdC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJpdG1hcCAgOjogVGhlIGJpdG1hcCBvYmplY3QgdG8gYmUgZnJlZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBgbGlicmFyeScgYXJndW1lbnQgaXMgdGFrZW4gdG8gaGF2ZSBhY2Nlc3MgdG8gRnJlZVR5cGUncyAgICAgICAqLwotICAvKiAgICBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfQml0bWFwX0RvbmUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3kgYSBiaXRtYXAgb2JqZWN0IGluaXRpYWxpemVkIHdpdGggQEZUX0JpdG1hcF9Jbml0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICBiaXRtYXAgOjoKKyAgICogICAgIFRoZSBiaXRtYXAgb2JqZWN0IHRvIGJlIGZyZWVkLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBgbGlicmFyeScgYXJndW1lbnQgaXMgdGFrZW4gdG8gaGF2ZSBhY2Nlc3MgdG8gRnJlZVR5cGUncworICAgKiAgIG1lbW9yeSBoYW5kbGluZyBmdW5jdGlvbnMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfQml0bWFwX0RvbmUoIEZUX0xpYnJhcnkgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICpiaXRtYXAgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKaW5kZXggNmVkZmEwMy4uMDdhNzM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0YnppcDIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBCemlwMi1jb21wcmVzc2VkIHN0cmVhbSBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgSm9lbCBLbGluZ2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0YnppcDIuaAorICoKKyAqICAgQnppcDItY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5CisgKiBKb2VsIEtsaW5naGVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRCWklQMl9IXwpAQCAtMzEsNjIgKzMxLDYyIEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJ6aXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJaSVAyIFN0cmVhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzaW5nIGJ6aXAyLWNvbXByZXNzZWQgZm9udCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgQnppcDItc3BlY2lmaWMgZnVuY3Rpb25zLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBiemlwMgorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgQlpJUDIgU3RyZWFtcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgVXNpbmcgYnppcDItY29tcHJlc3NlZCBmb250IGZpbGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBCemlwMi1zcGVjaWZpYyBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICBGVF9TdHJlYW1fT3BlbkJ6aXAyCi0gICoKLSAgKiBAZGVzY3JpcHRpb246Ci0gICogICBPcGVuIGEgbmV3IHN0cmVhbSB0byBwYXJzZSBiemlwMi1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCi0gICogICBtYWlubHkgdXNlZCB0byBzdXBwb3J0IHRoZSBjb21wcmVzc2VkIGAqLnBjZi5iejInIGZvbnRzIHRoYXQgY29tZQotICAqICAgd2l0aCBYRnJlZTg2LgotICAqCi0gICogQGlucHV0OgotICAqICAgc3RyZWFtIDo6Ci0gICogICAgIFRoZSB0YXJnZXQgZW1iZWRkaW5nIHN0cmVhbS4KLSAgKgotICAqICAgc291cmNlIDo6Ci0gICogICAgIFRoZSBzb3VyY2Ugc3RyZWFtLgotICAqCi0gICogQHJldHVybjoKLSAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCi0gICoKLSAgKiBAbm90ZToKLSAgKiAgIFRoZSBzb3VyY2Ugc3RyZWFtIG11c3QgYmUgb3BlbmVkIF9iZWZvcmVfIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAgKgotICAqICAgQ2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIG5ldyBzdHJlYW0gd2lsbAotICAqICAgKm5vdCogY2FsbCBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgc291cmNlIHN0cmVhbS4gIE5vbmUgb2YgdGhlIHN0cmVhbQotICAqICAgb2JqZWN0cyB3aWxsIGJlIHJlbGVhc2VkIHRvIHRoZSBoZWFwLgotICAqCi0gICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgotICAqICAgcHJvY2VzcyBlYWNoIHRpbWUgc2Vla2luZyBiYWNrd2FyZHMgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyZWFtLgotICAqCi0gICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgYnppcDIgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKLSAgKiAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UuCi0gICogICBUaGlzIG1lYW5zIHRoYXQgaWYgbm8gZm9udCBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUgcmF3Ci0gICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBiemlwMiBjb21wcmVzc2VkIHN0cmVhbQotICAqICAgZnJvbSBpdCBhbmQgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LgotICAqCi0gICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKLSAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCBiemlwMiBzdXBwb3J0LgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJlYW1fT3BlbkJ6aXAyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBPcGVuIGEgbmV3IHN0cmVhbSB0byBwYXJzZSBiemlwMi1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCisgICAqICAgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgY29tcHJlc3NlZCBgKi5wY2YuYnoyJyBmb250cyB0aGF0IGNvbWUKKyAgICogICB3aXRoIFhGcmVlODYuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZW1iZWRkaW5nIHN0cmVhbS4KKyAgICoKKyAgICogICBzb3VyY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2Ugc3RyZWFtLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBzb3VyY2Ugc3RyZWFtIG11c3QgYmUgb3BlbmVkIF9iZWZvcmVfIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICoKKyAgICogICBDYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgbmV3IHN0cmVhbSB3aWxsCisgICAqICAgKm5vdCogY2FsbCBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgc291cmNlIHN0cmVhbS4gIE5vbmUgb2YgdGhlIHN0cmVhbQorICAgKiAgIG9iamVjdHMgd2lsbCBiZSByZWxlYXNlZCB0byB0aGUgaGVhcC4KKyAgICoKKyAgICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgorICAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbS4KKyAgICoKKyAgICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgYnppcDIgY29tcHJlc3Npb24gcmVjb2duaXRpb24gaXMKKyAgICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgorICAgKiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBubyBmb250IGRyaXZlciBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSByYXcKKyAgICogICBjb21wcmVzc2VkIGZpbGUsIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIG9wZW4gYSBiemlwMiBjb21wcmVzc2VkIHN0cmVhbQorICAgKiAgIGZyb20gaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKKyAgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggYnppcDIgc3VwcG9ydC4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9TdHJlYW1fT3BlbkJ6aXAyKCBGVF9TdHJlYW0gIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKaW5kZXggNTJkNWYwMC4uNWRlZGI1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2FjaGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBDYWNoZSBzdWJzeXN0ZW0gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2FjaGUuaAorICoKKyAqICAgRnJlZVR5cGUgQ2FjaGUgc3Vic3lzdGVtIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVENBQ0hFX0hfCkBAIC0yOSwxNiArMjksMTYgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiA8U2VjdGlvbj4KLSAgICogICAgY2FjaGVfc3Vic3lzdGVtCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGNhY2hlX3N1YnN5c3RlbQogICAgKgotICAgKiA8VGl0bGU+Ci0gICAqICAgIENhY2hlIFN1Yi1TeXN0ZW0KKyAgICogQHRpdGxlOgorICAgKiAgIENhY2hlIFN1Yi1TeXN0ZW0KICAgICoKLSAgICogPEFic3RyYWN0PgotICAgKiAgICBIb3cgdG8gY2FjaGUgZmFjZSwgc2l6ZSwgYW5kIGdseXBoIGRhdGEgd2l0aCBGcmVlVHlwZX4yLgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgSG93IHRvIGNhY2hlIGZhY2UsIHNpemUsIGFuZCBnbHlwaCBkYXRhIHdpdGggRnJlZVR5cGV+Mi4KICAgICoKLSAgICogPERlc2NyaXB0aW9uPgorICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgRnJlZVR5cGV+MiBjYWNoZSBzdWItc3lzdGVtLCB3aGljaCBpcyB1c2VkCiAgICAqICAgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50bHkgb3BlbmVkIEBGVF9GYWNlIGFuZCBARlRfU2l6ZQogICAgKiAgIG9iamVjdHMsIGFzIHdlbGwgYXMgY2FjaGluZyBpbmZvcm1hdGlvbiBsaWtlIGNoYXJhY3RlciBtYXBzIGFuZCBnbHlwaApAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAqICAgV2UgaG9wZSB0byBhbHNvIHByb3ZpZGUgYSBrZXJuaW5nIGNhY2hlIGluIHRoZSBuZWFyIGZ1dHVyZS4KICAgICoKICAgICoKLSAgICogPE9yZGVyPgorICAgKiBAb3JkZXI6CiAgICAqICAgRlRDX01hbmFnZXIKICAgICogICBGVENfRmFjZUlECiAgICAqICAgRlRDX0ZhY2VfUmVxdWVzdGVyCkBAIC0xNDQsNyArMTQ0LDggQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiBAdHlwZTogRlRDX0ZhY2VJRAorICAgKiBAdHlwZToKKyAgICogICBGVENfRmFjZUlECiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICBBbiBvcGFxdWUgcG9pbnRlciB0eXBlIHRoYXQgaXMgdXNlZCB0byBpZGVudGl0eSBmYWNlIG9iamVjdHMuICBUaGUKQEAgLTE4MSw3ICsxODIsNyBAQAogICAgKiAgIHRoZSBjYWNoZSBtYW5hZ2VyIHRvIHRyYW5zbGF0ZSBhIGdpdmVuIEBGVENfRmFjZUlEIGludG8gYSBuZXcgdmFsaWQKICAgICogICBARlRfRmFjZSBvYmplY3QsIG9uIGRlbWFuZC4KICAgICoKLSAgICogPElucHV0PgorICAgKiBAaW5wdXQ6CiAgICAqICAgZmFjZV9pZCA6OgogICAgKiAgICAgVGhlIGZhY2UgSUQgdG8gcmVzb2x2ZS4KICAgICoKQEAgLTE5MSwxNCArMTkyLDE0IEBACiAgICAqICAgcmVxX2RhdGEgOjoKICAgICogICAgIEFwcGxpY2F0aW9uLXByb3ZpZGVkIHJlcXVlc3QgZGF0YSAoc2VlIG5vdGUgYmVsb3cpLgogICAgKgotICAgKiA8T3V0cHV0PgorICAgKiBAb3V0cHV0OgogICAgKiAgIGFmYWNlIDo6CiAgICAqICAgICBBIG5ldyBARlRfRmFjZSBoYW5kbGUuCiAgICAqCi0gICAqIDxSZXR1cm4+CisgICAqIEByZXR1cm46CiAgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KICAgICoKLSAgICogPE5vdGU+CisgICAqIEBub3RlOgogICAgKiAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgYHJlcV9kYXRhJyBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHBhc3NlZCBieSB0aGUKICAgICogICBjbGllbnQgd2hlbiBARlRDX01hbmFnZXJfTmV3IGlzIGNhbGxlZC4KICAgICoKQEAgLTIyNiw4NCArMjI3LDkxIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX01hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBvYmplY3QgY29ycmVzcG9uZHMgdG8gb25lIGluc3RhbmNlIG9mIHRoZSBjYWNoZS1zdWJzeXN0ZW0uICAgICovCi0gIC8qICAgIEl0IGlzIHVzZWQgdG8gY2FjaGUgb25lIG9yIG1vcmUgQEZUX0ZhY2Ugb2JqZWN0cywgYWxvbmcgd2l0aCAgICAgICAqLwotICAvKiAgICBjb3JyZXNwb25kaW5nIEBGVF9TaXplIG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBtYW5hZ2VyIGludGVudGlvbmFsbHkgbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3BlbmVkICAgICAgICAqLwotICAvKiAgICBARlRfRmFjZSBhbmQgQEZUX1NpemUgb2JqZWN0cyB0byBjb250cm9sIG1lbW9yeSB1c2FnZS4gIFNlZSB0aGUgICAgKi8KLSAgLyogICAgYG1heF9mYWNlcycgYW5kIGBtYXhfc2l6ZXMnIHBhcmFtZXRlcnMgb2YgQEZUQ19NYW5hZ2VyX05ldy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbWFuYWdlciBpcyBhbHNvIHVzZWQgdG8gY2FjaGUgYG5vZGVzJyBvZiB2YXJpb3VzIHR5cGVzIHdoaWxlICAgKi8KLSAgLyogICAgbGltaXRpbmcgdGhlaXIgdG90YWwgbWVtb3J5IHVzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbGwgbGltaXRhdGlvbnMgYXJlIGVuZm9yY2VkIGJ5IGtlZXBpbmcgbGlzdHMgb2YgbWFuYWdlZCBvYmplY3RzICAgKi8KLSAgLyogICAgaW4gbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyLCBhbmQgZmx1c2hpbmcgb2xkIG5vZGVzIHRvIG1ha2Ugcm9vbSAgICovCi0gIC8qICAgIGZvciBuZXcgb25lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUQ19NYW5hZ2VyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIG9iamVjdCBjb3JyZXNwb25kcyB0byBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNhY2hlLXN1YnN5c3RlbS4KKyAgICogICBJdCBpcyB1c2VkIHRvIGNhY2hlIG9uZSBvciBtb3JlIEBGVF9GYWNlIG9iamVjdHMsIGFsb25nIHdpdGgKKyAgICogICBjb3JyZXNwb25kaW5nIEBGVF9TaXplIG9iamVjdHMuCisgICAqCisgICAqICAgVGhlIG1hbmFnZXIgaW50ZW50aW9uYWxseSBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZiBvcGVuZWQKKyAgICogICBARlRfRmFjZSBhbmQgQEZUX1NpemUgb2JqZWN0cyB0byBjb250cm9sIG1lbW9yeSB1c2FnZS4gIFNlZSB0aGUKKyAgICogICBgbWF4X2ZhY2VzJyBhbmQgYG1heF9zaXplcycgcGFyYW1ldGVycyBvZiBARlRDX01hbmFnZXJfTmV3LgorICAgKgorICAgKiAgIFRoZSBtYW5hZ2VyIGlzIGFsc28gdXNlZCB0byBjYWNoZSBgbm9kZXMnIG9mIHZhcmlvdXMgdHlwZXMgd2hpbGUKKyAgICogICBsaW1pdGluZyB0aGVpciB0b3RhbCBtZW1vcnkgdXNhZ2UuCisgICAqCisgICAqICAgQWxsIGxpbWl0YXRpb25zIGFyZSBlbmZvcmNlZCBieSBrZWVwaW5nIGxpc3RzIG9mIG1hbmFnZWQgb2JqZWN0cworICAgKiAgIGluIG1vc3QtcmVjZW50bHktdXNlZCBvcmRlciwgYW5kIGZsdXNoaW5nIG9sZCBub2RlcyB0byBtYWtlIHJvb20KKyAgICogICBmb3IgbmV3IG9uZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVENfTWFuYWdlclJlY18qICBGVENfTWFuYWdlcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19Ob2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYSBjYWNoZSBub2RlIG9iamVjdC4gIEVhY2ggY2FjaGUgbm9kZSBpcyAgICAgICAqLwotICAvKiAgICByZWZlcmVuY2UtY291bnRlZC4gIEEgbm9kZSB3aXRoIGEgY291bnQgb2Z+MCBtaWdodCBiZSBmbHVzaGVkICAgICAgKi8KLSAgLyogICAgb3V0IG9mIGEgZnVsbCBjYWNoZSB3aGVuZXZlciBhIGxvb2t1cCByZXF1ZXN0IGlzIHBlcmZvcm1lZC4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiB5b3UgbG9vayB1cCBub2RlcywgeW91IGhhdmUgdGhlIGFiaWxpdHkgdG8gYGFjcXVpcmUnIHRoZW0sICAgICAgKi8KLSAgLyogICAgaS5lLiwgdG8gaW5jcmVtZW50IHRoZWlyIHJlZmVyZW5jZSBjb3VudC4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSAgICovCi0gIC8qICAgIG5vZGUgZnJvbSBiZWluZyBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgdW50aWwgeW91IGV4cGxpY2l0bHkgICAgICAqLwotICAvKiAgICBgcmVsZWFzZScgaXQgKHNlZSBARlRDX05vZGVfVW5yZWYpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlZSBhbHNvIEBGVENfU0JpdENhY2hlX0xvb2t1cCBhbmQgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cC4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUQ19Ob2RlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgY2FjaGUgbm9kZSBvYmplY3QuICBFYWNoIGNhY2hlIG5vZGUgaXMKKyAgICogICByZWZlcmVuY2UtY291bnRlZC4gIEEgbm9kZSB3aXRoIGEgY291bnQgb2Z+MCBtaWdodCBiZSBmbHVzaGVkCisgICAqICAgb3V0IG9mIGEgZnVsbCBjYWNoZSB3aGVuZXZlciBhIGxvb2t1cCByZXF1ZXN0IGlzIHBlcmZvcm1lZC4KKyAgICoKKyAgICogICBJZiB5b3UgbG9vayB1cCBub2RlcywgeW91IGhhdmUgdGhlIGFiaWxpdHkgdG8gYGFjcXVpcmUnIHRoZW0sCisgICAqICAgaS5lLiwgdG8gaW5jcmVtZW50IHRoZWlyIHJlZmVyZW5jZSBjb3VudC4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZQorICAgKiAgIG5vZGUgZnJvbSBiZWluZyBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgdW50aWwgeW91IGV4cGxpY2l0bHkKKyAgICogICBgcmVsZWFzZScgaXQgKHNlZSBARlRDX05vZGVfVW5yZWYpLgorICAgKgorICAgKiAgIFNlZSBhbHNvIEBGVENfU0JpdENhY2hlX0xvb2t1cCBhbmQgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUQ19Ob2RlUmVjXyogIEZUQ19Ob2RlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX01hbmFnZXJfTmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ3JlYXRlIGEgbmV3IGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgIDo6IFRoZSBwYXJlbnQgRnJlZVR5cGUgbGlicmFyeSBoYW5kbGUgdG8gdXNlLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfZmFjZXMgOjogTWF4aW11bSBudW1iZXIgb2Ygb3BlbmVkIEBGVF9GYWNlIG9iamVjdHMgbWFuYWdlZCBieSAgKi8KLSAgLyogICAgICAgICAgICAgICAgIHRoaXMgY2FjaGUgaW5zdGFuY2UuICBVc2V+MCBmb3IgZGVmYXVsdHMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfc2l6ZXMgOjogTWF4aW11bSBudW1iZXIgb2Ygb3BlbmVkIEBGVF9TaXplIG9iamVjdHMgbWFuYWdlZCBieSAgKi8KLSAgLyogICAgICAgICAgICAgICAgIHRoaXMgY2FjaGUgaW5zdGFuY2UuICBVc2V+MCBmb3IgZGVmYXVsdHMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfYnl0ZXMgOjogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZvciBjYWNoZWQgZGF0YSBub2Rlcy4gKi8KLSAgLyogICAgICAgICAgICAgICAgIFVzZX4wIGZvciBkZWZhdWx0cy4gIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGRvZXMgbm90ICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBhY2NvdW50IGZvciBtYW5hZ2VkIEBGVF9GYWNlIGFuZCBARlRfU2l6ZSBvYmplY3RzLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmVxdWVzdGVyIDo6IEFuIGFwcGxpY2F0aW9uLXByb3ZpZGVkIGNhbGxiYWNrIHVzZWQgdG8gdHJhbnNsYXRlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBmYWNlIElEcyBpbnRvIHJlYWwgQEZUX0ZhY2Ugb2JqZWN0cy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmVxX2RhdGEgIDo6IEEgZ2VuZXJpYyBwb2ludGVyIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0ZXIgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkIChzZWUgQEZUQ19GYWNlX1JlcXVlc3RlcikuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFtYW5hZ2VyICA6OiBBIGhhbmRsZSB0byBhIG5ldyBtYW5hZ2VyIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgZmFpbHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRDX01hbmFnZXJfTmV3CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgY2FjaGUgbWFuYWdlci4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIFRoZSBwYXJlbnQgRnJlZVR5cGUgbGlicmFyeSBoYW5kbGUgdG8gdXNlLgorICAgKgorICAgKiAgIG1heF9mYWNlcyA6OgorICAgKiAgICAgTWF4aW11bSBudW1iZXIgb2Ygb3BlbmVkIEBGVF9GYWNlIG9iamVjdHMgbWFuYWdlZCBieQorICAgKiAgICAgdGhpcyBjYWNoZSBpbnN0YW5jZS4gIFVzZX4wIGZvciBkZWZhdWx0cy4KKyAgICoKKyAgICogICBtYXhfc2l6ZXMgOjoKKyAgICogICAgIE1heGltdW0gbnVtYmVyIG9mIG9wZW5lZCBARlRfU2l6ZSBvYmplY3RzIG1hbmFnZWQgYnkKKyAgICogICAgIHRoaXMgY2FjaGUgaW5zdGFuY2UuICBVc2V+MCBmb3IgZGVmYXVsdHMuCisgICAqCisgICAqICAgbWF4X2J5dGVzIDo6CisgICAqICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIGNhY2hlZCBkYXRhIG5vZGVzLgorICAgKiAgICAgVXNlfjAgZm9yIGRlZmF1bHRzLiAgTm90ZSB0aGF0IHRoaXMgdmFsdWUgZG9lcyBub3QKKyAgICogICAgIGFjY291bnQgZm9yIG1hbmFnZWQgQEZUX0ZhY2UgYW5kIEBGVF9TaXplIG9iamVjdHMuCisgICAqCisgICAqICAgcmVxdWVzdGVyIDo6CisgICAqICAgICBBbiBhcHBsaWNhdGlvbi1wcm92aWRlZCBjYWxsYmFjayB1c2VkIHRvIHRyYW5zbGF0ZQorICAgKiAgICAgZmFjZSBJRHMgaW50byByZWFsIEBGVF9GYWNlIG9iamVjdHMuCisgICAqCisgICAqICAgcmVxX2RhdGEgOjoKKyAgICogICAgIEEgZ2VuZXJpYyBwb2ludGVyIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0ZXIKKyAgICogICAgIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQgKHNlZSBARlRDX0ZhY2VfUmVxdWVzdGVyKS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhbWFuYWdlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBuZXcgbWFuYWdlciBvYmplY3QuICAwfmluIGNhc2Ugb2YKKyAgICogICAgIGZhaWx1cmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVENfTWFuYWdlcl9OZXcoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgIG1heF9mYWNlcywKQEAgLTMxNCwxMTQgKzMyMiwxMjUgQEAKICAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgICAgICAgKmFtYW5hZ2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfTWFuYWdlcl9SZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFbXB0eSBhIGdpdmVuIGNhY2hlIG1hbmFnZXIuICBUaGlzIHNpbXBseSBnZXRzIHJpZCBvZiBhbGwgdGhlICAgICAgKi8KLSAgLyogICAgY3VycmVudGx5IGNhY2hlZCBARlRfRmFjZSBhbmQgQEZUX1NpemUgb2JqZWN0cyB3aXRoaW4gdGhlIG1hbmFnZXIuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWFuYWdlciA6OiBBIGhhbmRsZSB0byB0aGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUQ19NYW5hZ2VyX1Jlc2V0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBFbXB0eSBhIGdpdmVuIGNhY2hlIG1hbmFnZXIuICBUaGlzIHNpbXBseSBnZXRzIHJpZCBvZiBhbGwgdGhlCisgICAqICAgY3VycmVudGx5IGNhY2hlZCBARlRfRmFjZSBhbmQgQEZUX1NpemUgb2JqZWN0cyB3aXRoaW4gdGhlIG1hbmFnZXIuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBtYW5hZ2VyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbWFuYWdlci4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUQ19NYW5hZ2VyX1Jlc2V0KCBGVENfTWFuYWdlciAgbWFuYWdlciApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX01hbmFnZXJfRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzdHJveSBhIGdpdmVuIG1hbmFnZXIgYWZ0ZXIgZW1wdHlpbmcgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWFuYWdlciA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGNhY2hlIG1hbmFnZXIgb2JqZWN0LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUQ19NYW5hZ2VyX0RvbmUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3kgYSBnaXZlbiBtYW5hZ2VyIGFmdGVyIGVtcHR5aW5nIGl0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWFuYWdlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBjYWNoZSBtYW5hZ2VyIG9iamVjdC4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUQ19NYW5hZ2VyX0RvbmUoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfTWFuYWdlcl9Mb29rdXBGYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXRyaWV2ZSB0aGUgQEZUX0ZhY2Ugb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBmYWNlIElEICAgKi8KLSAgLyogICAgdGhyb3VnaCBhIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWFuYWdlciA6OiBBIGhhbmRsZSB0byB0aGUgY2FjaGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2lkIDo6IFRoZSBJRCBvZiB0aGUgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmV0dXJuZWQgQEZUX0ZhY2Ugb2JqZWN0IGlzIGFsd2F5cyBvd25lZCBieSB0aGUgbWFuYWdlci4gIFlvdSAgKi8KLSAgLyogICAgc2hvdWxkIG5ldmVyIHRyeSB0byBkaXNjYXJkIGl0IHlvdXJzZWxmLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgQEZUX0ZhY2Ugb2JqZWN0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGN1cnJlbnQgc2l6ZSBvYmplY3QgKi8KLSAgLyogICAgKGkuZS4sIGZhY2UtPnNpemUgY2FuIGJlfjApLiAgSWYgeW91IG5lZWQgYSBzcGVjaWZpYyBgZm9udCBzaXplJywgICovCi0gIC8qICAgIHVzZSBARlRDX01hbmFnZXJfTG9va3VwU2l6ZSBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTmV2ZXIgY2hhbmdlIHRoZSBmYWNlJ3MgdHJhbnNmb3JtYXRpb24gbWF0cml4IChpLmUuLCBuZXZlciBjYWxsICAgICovCi0gIC8qICAgIHRoZSBARlRfU2V0X1RyYW5zZm9ybSBmdW5jdGlvbikgb24gYSByZXR1cm5lZCBmYWNlISAgSWYgeW91IG5lZWQgICAqLwotICAvKiAgICB0byB0cmFuc2Zvcm0gZ2x5cGhzLCBkbyBpdCB5b3Vyc2VsZiBhZnRlciBnbHlwaCBsb2FkaW5nLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoZW4geW91IHBlcmZvcm0gYSBsb29rdXAsIG91dC1vZi1tZW1vcnkgZXJyb3JzIGFyZSBkZXRlY3RlZCAgICAgICAqLwotICAvKiAgICBfd2l0aGluXyB0aGUgbG9va3VwIGFuZCBmb3JjZSBpbmNyZW1lbnRhbCBmbHVzaGVzIG9mIHRoZSBjYWNoZSAgICAgKi8KLSAgLyogICAgdW50aWwgZW5vdWdoIG1lbW9yeSBpcyByZWxlYXNlZCBmb3IgdGhlIGxvb2t1cCB0byBzdWNjZWVkLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBhIGxvb2t1cCBmYWlscyB3aXRoIGBGVF9FcnJfT3V0X09mX01lbW9yeScgdGhlIGNhY2hlIGhhcyAgICAgICAgKi8KLSAgLyogICAgYWxyZWFkeSBiZWVuIGNvbXBsZXRlbHkgZmx1c2hlZCwgYW5kIHN0aWxsIG5vIG1lbW9yeSB3YXMgYXZhaWxhYmxlICovCi0gIC8qICAgIGZvciB0aGUgb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfTWFuYWdlcl9Mb29rdXBGYWNlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSB0aGUgQEZUX0ZhY2Ugb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBmYWNlIElECisgICAqICAgdGhyb3VnaCBhIGNhY2hlIG1hbmFnZXIuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtYW5hZ2VyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgY2FjaGUgbWFuYWdlci4KKyAgICoKKyAgICogICBmYWNlX2lkIDo6CisgICAqICAgICBUaGUgSUQgb2YgdGhlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHJldHVybmVkIEBGVF9GYWNlIG9iamVjdCBpcyBhbHdheXMgb3duZWQgYnkgdGhlIG1hbmFnZXIuICBZb3UKKyAgICogICBzaG91bGQgbmV2ZXIgdHJ5IHRvIGRpc2NhcmQgaXQgeW91cnNlbGYuCisgICAqCisgICAqICAgVGhlIEBGVF9GYWNlIG9iamVjdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgYSBjdXJyZW50IHNpemUgb2JqZWN0CisgICAqICAgKGkuZS4sIGZhY2UtPnNpemUgY2FuIGJlfjApLiAgSWYgeW91IG5lZWQgYSBzcGVjaWZpYyBgZm9udCBzaXplJywKKyAgICogICB1c2UgQEZUQ19NYW5hZ2VyX0xvb2t1cFNpemUgaW5zdGVhZC4KKyAgICoKKyAgICogICBOZXZlciBjaGFuZ2UgdGhlIGZhY2UncyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKGkuZS4sIG5ldmVyIGNhbGwKKyAgICogICB0aGUgQEZUX1NldF9UcmFuc2Zvcm0gZnVuY3Rpb24pIG9uIGEgcmV0dXJuZWQgZmFjZSEgIElmIHlvdSBuZWVkCisgICAqICAgdG8gdHJhbnNmb3JtIGdseXBocywgZG8gaXQgeW91cnNlbGYgYWZ0ZXIgZ2x5cGggbG9hZGluZy4KKyAgICoKKyAgICogICBXaGVuIHlvdSBwZXJmb3JtIGEgbG9va3VwLCBvdXQtb2YtbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQKKyAgICogICBfd2l0aGluXyB0aGUgbG9va3VwIGFuZCBmb3JjZSBpbmNyZW1lbnRhbCBmbHVzaGVzIG9mIHRoZSBjYWNoZQorICAgKiAgIHVudGlsIGVub3VnaCBtZW1vcnkgaXMgcmVsZWFzZWQgZm9yIHRoZSBsb29rdXAgdG8gc3VjY2VlZC4KKyAgICoKKyAgICogICBJZiBhIGxvb2t1cCBmYWlscyB3aXRoIGBGVF9FcnJfT3V0X09mX01lbW9yeScgdGhlIGNhY2hlIGhhcworICAgKiAgIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGZsdXNoZWQsIGFuZCBzdGlsbCBubyBtZW1vcnkgd2FzIGF2YWlsYWJsZQorICAgKiAgIGZvciB0aGUgb3BlcmF0aW9uLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUQ19NYW5hZ2VyX0xvb2t1cEZhY2UoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRmFjZUlEICAgZmFjZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgKmFmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfU2NhbGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgZ2l2ZW4gY2hhcmFjdGVyIHNpemUgaW4gZWl0aGVyICAgICAgKi8KLSAgLyogICAgcGl4ZWxzIG9yIHBvaW50cyB0byB0aGUgY2FjaGUgbWFuYWdlci4gIFNlZSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVENfTWFuYWdlcl9Mb29rdXBTaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaWQgOjogVGhlIHNvdXJjZSBmYWNlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggICA6OiBUaGUgY2hhcmFjdGVyIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWlnaHQgIDo6IFRoZSBjaGFyYWN0ZXIgaGVpZ2h0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBpeGVsICAgOjogQSBCb29sZWFuLiAgSWYgMSwgdGhlIGB3aWR0aCcgYW5kIGBoZWlnaHQnIGZpZWxkcyBhcmUgICAqLwotICAvKiAgICAgICAgICAgICAgIGludGVycHJldGVkIGFzIGludGVnZXIgcGl4ZWwgY2hhcmFjdGVyIHNpemVzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZXkgYXJlIGV4cHJlc3NlZCBhcyAxLzY0dGggb2YgcG9pbnRzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4X3JlcyAgIDo6IE9ubHkgdXNlZCB3aGVuIGBwaXhlbCcgaXMgdmFsdWV+MCB0byBpbmRpY2F0ZSB0aGUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gZHBpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5X3JlcyAgIDo6IE9ubHkgdXNlZCB3aGVuIGBwaXhlbCcgaXMgdmFsdWV+MCB0byBpbmRpY2F0ZSB0aGUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIGRwaS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyB0eXBlIGlzIG1haW5seSB1c2VkIHRvIHJldHJpZXZlIEBGVF9TaXplIG9iamVjdHMgdGhyb3VnaCB0aGUgICovCi0gIC8qICAgIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRDX1NjYWxlclJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIGdpdmVuIGNoYXJhY3RlciBzaXplIGluIGVpdGhlcgorICAgKiAgIHBpeGVscyBvciBwb2ludHMgdG8gdGhlIGNhY2hlIG1hbmFnZXIuICBTZWUKKyAgICogICBARlRDX01hbmFnZXJfTG9va3VwU2l6ZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBmYWNlX2lkIDo6CisgICAqICAgICBUaGUgc291cmNlIGZhY2UgSUQuCisgICAqCisgICAqICAgd2lkdGggOjoKKyAgICogICAgIFRoZSBjaGFyYWN0ZXIgd2lkdGguCisgICAqCisgICAqICAgaGVpZ2h0IDo6CisgICAqICAgICBUaGUgY2hhcmFjdGVyIGhlaWdodC4KKyAgICoKKyAgICogICBwaXhlbCA6OgorICAgKiAgICAgQSBCb29sZWFuLiAgSWYgMSwgdGhlIGB3aWR0aCcgYW5kIGBoZWlnaHQnIGZpZWxkcyBhcmUKKyAgICogICAgIGludGVycHJldGVkIGFzIGludGVnZXIgcGl4ZWwgY2hhcmFjdGVyIHNpemVzLgorICAgKiAgICAgT3RoZXJ3aXNlLCB0aGV5IGFyZSBleHByZXNzZWQgYXMgMS82NHRoIG9mIHBvaW50cy4KKyAgICoKKyAgICogICB4X3JlcyA6OgorICAgKiAgICAgT25seSB1c2VkIHdoZW4gYHBpeGVsJyBpcyB2YWx1ZX4wIHRvIGluZGljYXRlIHRoZQorICAgKiAgICAgaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIGRwaS4KKyAgICoKKyAgICogICB5X3JlcyA6OgorICAgKiAgICAgT25seSB1c2VkIHdoZW4gYHBpeGVsJyBpcyB2YWx1ZX4wIHRvIGluZGljYXRlIHRoZQorICAgKiAgICAgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBkcGkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgdHlwZSBpcyBtYWlubHkgdXNlZCB0byByZXRyaWV2ZSBARlRfU2l6ZSBvYmplY3RzIHRocm91Z2ggdGhlCisgICAqICAgY2FjaGUgbWFuYWdlci4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVENfU2NhbGVyUmVjXwogICB7CiAgICAgRlRDX0ZhY2VJRCAgZmFjZV9pZDsKQEAgLTQzNCw3NSArNDUzLDgwIEBACiAgIH0gRlRDX1NjYWxlclJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19TY2FsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIEBGVENfU2NhbGVyUmVjIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRDX1NjYWxlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYW4gQEZUQ19TY2FsZXJSZWMgc3RydWN0dXJlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRDX1NjYWxlclJlY18qICBGVENfU2NhbGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX01hbmFnZXJfTG9va3VwU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgdGhlIEBGVF9TaXplIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gICAgICAgICAgICovCi0gIC8qICAgIEBGVENfU2NhbGVyUmVjIHBvaW50ZXIgdGhyb3VnaCBhIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hbmFnZXIgOjogQSBoYW5kbGUgdG8gdGhlIGNhY2hlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2NhbGVyICA6OiBBIHNjYWxlciBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXNpemUgICA6OiBBIGhhbmRsZSB0byB0aGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJldHVybmVkIEBGVF9TaXplIG9iamVjdCBpcyBhbHdheXMgb3duZWQgYnkgdGhlIG1hbmFnZXIuICBZb3UgICovCi0gIC8qICAgIHNob3VsZCBuZXZlciB0cnkgdG8gZGlzY2FyZCBpdCBieSB5b3Vyc2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWW91IGNhbiBhY2Nlc3MgdGhlIHBhcmVudCBARlRfRmFjZSBvYmplY3Qgc2ltcGx5IGFzIGBzaXplLT5mYWNlJyAgICovCi0gIC8qICAgIGlmIHlvdSBuZWVkIGl0LiAgTm90ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIGFsc28gb3duZWQgYnkgdGhlICAgICAgICAqLwotICAvKiAgICBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGVuIHlvdSBwZXJmb3JtIGEgbG9va3VwLCBvdXQtb2YtbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQgICAgICAgKi8KLSAgLyogICAgX3dpdGhpbl8gdGhlIGxvb2t1cCBhbmQgZm9yY2UgaW5jcmVtZW50YWwgZmx1c2hlcyBvZiB0aGUgY2FjaGUgICAgICovCi0gIC8qICAgIHVudGlsIGVub3VnaCBtZW1vcnkgaXMgcmVsZWFzZWQgZm9yIHRoZSBsb29rdXAgdG8gc3VjY2VlZC4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgYSBsb29rdXAgZmFpbHMgd2l0aCBgRlRfRXJyX091dF9PZl9NZW1vcnknIHRoZSBjYWNoZSBoYXMgICAgICAgICovCi0gIC8qICAgIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGZsdXNoZWQsIGFuZCBzdGlsbCBubyBtZW1vcnkgaXMgYXZhaWxhYmxlICAqLwotICAvKiAgICBmb3IgdGhlIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRDX01hbmFnZXJfTG9va3VwU2l6ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIEBGVF9TaXplIG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4KKyAgICogICBARlRDX1NjYWxlclJlYyBwb2ludGVyIHRocm91Z2ggYSBjYWNoZSBtYW5hZ2VyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWFuYWdlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGNhY2hlIG1hbmFnZXIuCisgICAqCisgICAqICAgc2NhbGVyIDo6CisgICAqICAgICBBIHNjYWxlciBoYW5kbGUuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYXNpemUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzaXplIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgcmV0dXJuZWQgQEZUX1NpemUgb2JqZWN0IGlzIGFsd2F5cyBvd25lZCBieSB0aGUgbWFuYWdlci4gIFlvdQorICAgKiAgIHNob3VsZCBuZXZlciB0cnkgdG8gZGlzY2FyZCBpdCBieSB5b3Vyc2VsZi4KKyAgICoKKyAgICogICBZb3UgY2FuIGFjY2VzcyB0aGUgcGFyZW50IEBGVF9GYWNlIG9iamVjdCBzaW1wbHkgYXMgYHNpemUtPmZhY2UnCisgICAqICAgaWYgeW91IG5lZWQgaXQuICBOb3RlIHRoYXQgdGhpcyBvYmplY3QgaXMgYWxzbyBvd25lZCBieSB0aGUKKyAgICogICBtYW5hZ2VyLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBXaGVuIHlvdSBwZXJmb3JtIGEgbG9va3VwLCBvdXQtb2YtbWVtb3J5IGVycm9ycyBhcmUgZGV0ZWN0ZWQKKyAgICogICBfd2l0aGluXyB0aGUgbG9va3VwIGFuZCBmb3JjZSBpbmNyZW1lbnRhbCBmbHVzaGVzIG9mIHRoZSBjYWNoZQorICAgKiAgIHVudGlsIGVub3VnaCBtZW1vcnkgaXMgcmVsZWFzZWQgZm9yIHRoZSBsb29rdXAgdG8gc3VjY2VlZC4KKyAgICoKKyAgICogICBJZiBhIGxvb2t1cCBmYWlscyB3aXRoIGBGVF9FcnJfT3V0X09mX01lbW9yeScgdGhlIGNhY2hlIGhhcworICAgKiAgIGFscmVhZHkgYmVlbiBjb21wbGV0ZWx5IGZsdXNoZWQsIGFuZCBzdGlsbCBubyBtZW1vcnkgaXMgYXZhaWxhYmxlCisgICAqICAgZm9yIHRoZSBvcGVyYXRpb24uCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRDX01hbmFnZXJfTG9va3VwU2l6ZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19TY2FsZXIgICBzY2FsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICphc2l6ZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX05vZGVfVW5yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVjcmVtZW50IGEgY2FjaGUgbm9kZSdzIGludGVybmFsIHJlZmVyZW5jZSBjb3VudC4gIFdoZW4gdGhlIGNvdW50ICovCi0gIC8qICAgIHJlYWNoZXMgMCwgaXQgaXMgbm90IGRlc3Ryb3llZCBidXQgYmVjb21lcyBlbGlnaWJsZSBmb3Igc3Vic2VxdWVudCAqLwotICAvKiAgICBjYWNoZSBmbHVzaGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBub2RlICAgIDo6IFRoZSBjYWNoZSBub2RlIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hbmFnZXIgOjogVGhlIGNhY2hlIG1hbmFnZXIgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfTm9kZV9VbnJlZgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGVjcmVtZW50IGEgY2FjaGUgbm9kZSdzIGludGVybmFsIHJlZmVyZW5jZSBjb3VudC4gIFdoZW4gdGhlIGNvdW50CisgICAqICAgcmVhY2hlcyAwLCBpdCBpcyBub3QgZGVzdHJveWVkIGJ1dCBiZWNvbWVzIGVsaWdpYmxlIGZvciBzdWJzZXF1ZW50CisgICAqICAgY2FjaGUgZmx1c2hlcy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG5vZGUgOjoKKyAgICogICAgIFRoZSBjYWNoZSBub2RlIGhhbmRsZS4KKyAgICoKKyAgICogICBtYW5hZ2VyIDo6CisgICAqICAgICBUaGUgY2FjaGUgbWFuYWdlciBoYW5kbGUuCisgICAqLwogICBGVF9FWFBPUlQoIHZvaWQgKQogICBGVENfTm9kZV9VbnJlZiggRlRDX05vZGUgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgICBGVENfTWFuYWdlciAgbWFuYWdlciApOwpAQCAtNjgwLDgzICs3MDQsOTAgQEAKICAgICAgICAgICAgIChkMSktPmZsYWdzICAgPT0gKGQyKS0+ZmxhZ3MgICApCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfSW1hZ2VDYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIGdseXBoIGltYWdlIGNhY2hlIG9iamVjdC4gIFRoZXkgYXJlIGRlc2lnbmVkIHRvICAgICAgKi8KLSAgLyogICAgaG9sZCBtYW55IGRpc3RpbmN0IGdseXBoIGltYWdlcyB3aGlsZSBub3QgZXhjZWVkaW5nIGEgY2VydGFpbiAgICAgICovCi0gIC8qICAgIG1lbW9yeSB0aHJlc2hvbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUQ19JbWFnZUNhY2hlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIGdseXBoIGltYWdlIGNhY2hlIG9iamVjdC4gIFRoZXkgYXJlIGRlc2lnbmVkIHRvCisgICAqICAgaG9sZCBtYW55IGRpc3RpbmN0IGdseXBoIGltYWdlcyB3aGlsZSBub3QgZXhjZWVkaW5nIGEgY2VydGFpbgorICAgKiAgIG1lbW9yeSB0aHJlc2hvbGQuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVENfSW1hZ2VDYWNoZVJlY18qICBGVENfSW1hZ2VDYWNoZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19JbWFnZUNhY2hlX05ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENyZWF0ZSBhIG5ldyBnbHlwaCBpbWFnZSBjYWNoZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hbmFnZXIgOjogVGhlIHBhcmVudCBtYW5hZ2VyIGZvciB0aGUgaW1hZ2UgY2FjaGUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFjYWNoZSAgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyBnbHlwaCBpbWFnZSBjYWNoZSBvYmplY3QuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfSW1hZ2VDYWNoZV9OZXcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENyZWF0ZSBhIG5ldyBnbHlwaCBpbWFnZSBjYWNoZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1hbmFnZXIgOjoKKyAgICogICAgIFRoZSBwYXJlbnQgbWFuYWdlciBmb3IgdGhlIGltYWdlIGNhY2hlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFjYWNoZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIG5ldyBnbHlwaCBpbWFnZSBjYWNoZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVENfSW1hZ2VDYWNoZV9OZXcoIEZUQ19NYW5hZ2VyICAgICAgbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VDYWNoZSAgKmFjYWNoZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX0ltYWdlQ2FjaGVfTG9va3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgYSBnaXZlbiBnbHlwaCBpbWFnZSBmcm9tIGEgZ2x5cGggaW1hZ2UgY2FjaGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2FjaGUgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggaW1hZ2UgY2FjaGUuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0eXBlICAgOjogQSBwb2ludGVyIHRvIGEgZ2x5cGggaW1hZ2UgdHlwZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdpbmRleCA6OiBUaGUgZ2x5cGggaW5kZXggdG8gcmV0cmlldmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFnbHlwaCA6OiBUaGUgY29ycmVzcG9uZGluZyBARlRfR2x5cGggb2JqZWN0LiAgMH5pbiBjYXNlIG9mICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgZmFpbHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFub2RlICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgICAgKi8KLSAgLyogICAgICAgICAgICAgIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJldHVybmVkIGdseXBoIGlzIG93bmVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBnbHlwaCBpbWFnZSBjYWNoZS4gICovCi0gIC8qICAgIE5ldmVyIHRyeSB0byB0cmFuc2Zvcm0gb3IgZGlzY2FyZCBpdCBtYW51YWxseSEgIFlvdSBjYW4gaG93ZXZlciAgICAqLwotICAvKiAgICBjcmVhdGUgYSBjb3B5IHdpdGggQEZUX0dseXBoX0NvcHkgYW5kIG1vZGlmeSB0aGUgbmV3IG9uZS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGBhbm9kZScgaXMgX25vdF8gTlVMTCwgaXQgcmVjZWl2ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhY2hlICAgICAqLwotICAvKiAgICBub2RlIGNvbnRhaW5pbmcgdGhlIGdseXBoIGltYWdlLCBhZnRlciBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UgICAgKi8KLSAgLyogICAgY291bnQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgQEZUX0dseXBoKSB3aWxsICovCi0gIC8qICAgIGFsd2F5cyBiZSBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCBARlRDX05vZGVfVW5yZWYgdG8gICAgICAqLwotICAvKiAgICBgcmVsZWFzZScgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGBhbm9kZScgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zICAqLwotICAvKiAgICB0aGF0IHRoZSBARlRfR2x5cGggY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0ICAgKi8KLSAgLyogICAgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiAgRG9uJ3QgYXNzdW1lIHRoYXQgaXQgICovCi0gIC8qICAgIGlzIHBlcnNpc3RlbnQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfSW1hZ2VDYWNoZV9Mb29rdXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHJpZXZlIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgZnJvbSBhIGdseXBoIGltYWdlIGNhY2hlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgY2FjaGUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggaW1hZ2UgY2FjaGUuCisgICAqCisgICAqICAgdHlwZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgZ2x5cGggaW1hZ2UgdHlwZSBkZXNjcmlwdG9yLgorICAgKgorICAgKiAgIGdpbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4IHRvIHJldHJpZXZlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFnbHlwaCA6OgorICAgKiAgICAgVGhlIGNvcnJlc3BvbmRpbmcgQEZUX0dseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZgorICAgKiAgICAgZmFpbHVyZS4KKyAgICoKKyAgICogICBhbm9kZSA6OgorICAgKiAgICAgVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUKKyAgICogICAgIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQgKHNlZSBub3RlCisgICAqICAgICBiZWxvdykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHJldHVybmVkIGdseXBoIGlzIG93bmVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBnbHlwaCBpbWFnZSBjYWNoZS4KKyAgICogICBOZXZlciB0cnkgdG8gdHJhbnNmb3JtIG9yIGRpc2NhcmQgaXQgbWFudWFsbHkhICBZb3UgY2FuIGhvd2V2ZXIKKyAgICogICBjcmVhdGUgYSBjb3B5IHdpdGggQEZUX0dseXBoX0NvcHkgYW5kIG1vZGlmeSB0aGUgbmV3IG9uZS4KKyAgICoKKyAgICogICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZQorICAgKiAgIG5vZGUgY29udGFpbmluZyB0aGUgZ2x5cGggaW1hZ2UsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZQorICAgKiAgIGNvdW50LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG5vZGUgKGFzIHdlbGwgYXMgdGhlIEBGVF9HbHlwaCkgd2lsbAorICAgKiAgIGFsd2F5cyBiZSBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCBARlRDX05vZGVfVW5yZWYgdG8KKyAgICogICBgcmVsZWFzZScgaXQuCisgICAqCisgICAqICAgSWYgYGFub2RlJyBpcyBOVUxMLCB0aGUgY2FjaGUgbm9kZSBpcyBsZWZ0IHVuY2hhbmdlZCwgd2hpY2ggbWVhbnMKKyAgICogICB0aGF0IHRoZSBARlRfR2x5cGggY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0CisgICAqICAgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiAgRG9uJ3QgYXNzdW1lIHRoYXQgaXQKKyAgICogICBpcyBwZXJzaXN0ZW50IQorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUQ19JbWFnZUNhY2hlX0xvb2t1cCggRlRDX0ltYWdlQ2FjaGUgIGNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19JbWFnZVR5cGUgICB0eXBlLApAQCAtNzY1LDU0ICs3OTYsNjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTm9kZSAgICAgICAqYW5vZGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19JbWFnZUNhY2hlX0xvb2t1cFNjYWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdmFyaWFudCBvZiBARlRDX0ltYWdlQ2FjaGVfTG9va3VwIHRoYXQgdXNlcyBhbiBARlRDX1NjYWxlclJlYyAgICAqLwotICAvKiAgICB0byBzcGVjaWZ5IHRoZSBmYWNlIElEIGFuZCBpdHMgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjYWNoZSAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggaW1hZ2UgY2FjaGUuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNjYWxlciAgICAgOjogQSBwb2ludGVyIHRvIGEgc2NhbGVyIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9mbGFncyA6OiBUaGUgY29ycmVzcG9uZGluZyBsb2FkIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnaW5kZXggICAgIDo6IFRoZSBnbHlwaCBpbmRleCB0byByZXRyaWV2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZ2x5cGggICAgIDo6IFRoZSBjb3JyZXNwb25kaW5nIEBGVF9HbHlwaCBvYmplY3QuICAwfmluIGNhc2Ugb2YgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50ICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgKHNlZSBub3RlIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXR1cm5lZCBnbHlwaCBpcyBvd25lZCBhbmQgbWFuYWdlZCBieSB0aGUgZ2x5cGggaW1hZ2UgY2FjaGUuICAqLwotICAvKiAgICBOZXZlciB0cnkgdG8gdHJhbnNmb3JtIG9yIGRpc2NhcmQgaXQgbWFudWFsbHkhICBZb3UgY2FuIGhvd2V2ZXIgICAgKi8KLSAgLyogICAgY3JlYXRlIGEgY29weSB3aXRoIEBGVF9HbHlwaF9Db3B5IGFuZCBtb2RpZnkgdGhlIG5ldyBvbmUuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSAgICAgKi8KLSAgLyogICAgbm9kZSBjb250YWluaW5nIHRoZSBnbHlwaCBpbWFnZSwgYWZ0ZXIgaW5jcmVhc2luZyBpdHMgcmVmZXJlbmNlICAgICovCi0gIC8qICAgIGNvdW50LiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG5vZGUgKGFzIHdlbGwgYXMgdGhlIEBGVF9HbHlwaCkgd2lsbCAqLwotICAvKiAgICBhbHdheXMgYmUga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvICAgICAgKi8KLSAgLyogICAgYHJlbGVhc2UnIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgYW5vZGUnIGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucyAgKi8KLSAgLyogICAgdGhhdCB0aGUgQEZUX0dseXBoIGNvdWxkIGJlIGZsdXNoZWQgb3V0IG9mIHRoZSBjYWNoZSBvbiB0aGUgbmV4dCAgICovCi0gIC8qICAgIGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gIERvbid0IGFzc3VtZSB0aGF0IGl0ICAqLwotICAvKiAgICBpcyBwZXJzaXN0ZW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENhbGxzIHRvIEBGVF9TZXRfQ2hhcl9TaXplIGFuZCBmcmllbmRzIGhhdmUgbm8gZWZmZWN0IG9uIGNhY2hlZCAgICAqLwotICAvKiAgICBnbHlwaHM7IHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJIGluc3RlYWQuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHZhcmlhbnQgb2YgQEZUQ19JbWFnZUNhY2hlX0xvb2t1cCB0aGF0IHVzZXMgYW4gQEZUQ19TY2FsZXJSZWMKKyAgICogICB0byBzcGVjaWZ5IHRoZSBmYWNlIElEIGFuZCBpdHMgc2l6ZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNhY2hlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIGNhY2hlLgorICAgKgorICAgKiAgIHNjYWxlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgc2NhbGVyIGRlc2NyaXB0b3IuCisgICAqCisgICAqICAgbG9hZF9mbGFncyA6OgorICAgKiAgICAgVGhlIGNvcnJlc3BvbmRpbmcgbG9hZCBmbGFncy4KKyAgICoKKyAgICogICBnaW5kZXggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleCB0byByZXRyaWV2ZS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhZ2x5cGggOjoKKyAgICogICAgIFRoZSBjb3JyZXNwb25kaW5nIEBGVF9HbHlwaCBvYmplY3QuICAwfmluIGNhc2Ugb2YKKyAgICogICAgIGZhaWx1cmUuCisgICAqCisgICAqICAgYW5vZGUgOjoKKyAgICogICAgIFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgICAqICAgICBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50CisgICAqICAgICAoc2VlIG5vdGUgYmVsb3cpLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSByZXR1cm5lZCBnbHlwaCBpcyBvd25lZCBhbmQgbWFuYWdlZCBieSB0aGUgZ2x5cGggaW1hZ2UgY2FjaGUuCisgICAqICAgTmV2ZXIgdHJ5IHRvIHRyYW5zZm9ybSBvciBkaXNjYXJkIGl0IG1hbnVhbGx5ISAgWW91IGNhbiBob3dldmVyCisgICAqICAgY3JlYXRlIGEgY29weSB3aXRoIEBGVF9HbHlwaF9Db3B5IGFuZCBtb2RpZnkgdGhlIG5ldyBvbmUuCisgICAqCisgICAqICAgSWYgYGFub2RlJyBpcyBfbm90XyBOVUxMLCBpdCByZWNlaXZlcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2FjaGUKKyAgICogICBub2RlIGNvbnRhaW5pbmcgdGhlIGdseXBoIGltYWdlLCBhZnRlciBpbmNyZWFzaW5nIGl0cyByZWZlcmVuY2UKKyAgICogICBjb3VudC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBARlRfR2x5cGgpIHdpbGwKKyAgICogICBhbHdheXMgYmUga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvCisgICAqICAgYHJlbGVhc2UnIGl0LgorICAgKgorICAgKiAgIElmIGBhbm9kZScgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zCisgICAqICAgdGhhdCB0aGUgQEZUX0dseXBoIGNvdWxkIGJlIGZsdXNoZWQgb3V0IG9mIHRoZSBjYWNoZSBvbiB0aGUgbmV4dAorICAgKiAgIGNhbGwgdG8gb25lIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gQVBJcy4gIERvbid0IGFzc3VtZSB0aGF0IGl0CisgICAqICAgaXMgcGVyc2lzdGVudCEKKyAgICoKKyAgICogICBDYWxscyB0byBARlRfU2V0X0NoYXJfU2l6ZSBhbmQgZnJpZW5kcyBoYXZlIG5vIGVmZmVjdCBvbiBjYWNoZWQKKyAgICogICBnbHlwaHM7IHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJIGluc3RlYWQuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyKCBGVENfSW1hZ2VDYWNoZSAgY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgICAgIHNjYWxlciwKQEAgLTgyMiw1MyArODU5LDYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX05vZGUgICAgICAgKmFub2RlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfU0JpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLiAgU2VlIHRoZSBARlRDX1NCaXRSZWMgICAgICAgKi8KLSAgLyogICAgc3RydWN0dXJlIGZvciBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRDX1NCaXQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IuICBTZWUgdGhlIEBGVENfU0JpdFJlYworICAgKiAgIHN0cnVjdHVyZSBmb3IgZGV0YWlscy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUQ19TQml0UmVjXyogIEZUQ19TQml0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX1NCaXRSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB2ZXJ5IGNvbXBhY3Qgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBzbWFsbCBnbHlwaCBiaXRtYXAuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggICAgIDo6IFRoZSBiaXRtYXAgd2lkdGggaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWlnaHQgICAgOjogVGhlIGJpdG1hcCBoZWlnaHQgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlZnQgICAgICA6OiBUaGUgaG9yaXpvbnRhbCBkaXN0YW5jZSBmcm9tIHRoZSBwZW4gcG9zaXRpb24gdG8gdGhlICAqLwotICAvKiAgICAgICAgICAgICAgICAgbGVmdCBiaXRtYXAgYm9yZGVyIChhLmsuYS4gYGxlZnQgc2lkZSBiZWFyaW5nJywgb3IgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIGBsc2InKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0b3AgICAgICAgOjogVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20gdGhlIHBlbiBwb3NpdGlvbiAob24gdGhlICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIGJhc2VsaW5lKSB0byB0aGUgdXBwZXIgYml0bWFwIGJvcmRlciAoYS5rLmEuIGB0b3AgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBzaWRlIGJlYXJpbmcnKS4gIFRoZSBkaXN0YW5jZSBpcyBwb3NpdGl2ZSBmb3IgdXB3YXJkcyAqLwotICAvKiAgICAgICAgICAgICAgICAgeX5jb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvcm1hdCAgICA6OiBUaGUgZm9ybWF0IG9mIHRoZSBnbHlwaCBiaXRtYXAgKG1vbm9jaHJvbWUgb3IgZ3JheSkuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4X2dyYXlzIDo6IE1heGltdW0gZ3JheSBsZXZlbCB2YWx1ZSAoaW4gdGhlIHJhbmdlIDEgdG9+MjU1KS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwaXRjaCAgICAgOjogVGhlIG51bWJlciBvZiBieXRlcyBwZXIgYml0bWFwIGxpbmUuICBNYXkgYmUgcG9zaXRpdmUgKi8KLSAgLyogICAgICAgICAgICAgICAgIG9yIG5lZ2F0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4YWR2YW5jZSAgOjogVGhlIGhvcml6b250YWwgYWR2YW5jZSB3aWR0aCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHlhZHZhbmNlICA6OiBUaGUgdmVydGljYWwgYWR2YW5jZSBoZWlnaHQgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVmZmVyICAgIDo6IEEgcG9pbnRlciB0byB0aGUgYml0bWFwIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVENfU0JpdFJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB2ZXJ5IGNvbXBhY3Qgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBzbWFsbCBnbHlwaCBiaXRtYXAuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgd2lkdGggOjoKKyAgICogICAgIFRoZSBiaXRtYXAgd2lkdGggaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGJpdG1hcCBoZWlnaHQgaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIGxlZnQgOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGZyb20gdGhlIHBlbiBwb3NpdGlvbiB0byB0aGUKKyAgICogICAgIGxlZnQgYml0bWFwIGJvcmRlciAoYS5rLmEuIGBsZWZ0IHNpZGUgYmVhcmluZycsIG9yCisgICAqICAgICBgbHNiJykuCisgICAqCisgICAqICAgdG9wIDo6CisgICAqICAgICBUaGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSB0aGUgcGVuIHBvc2l0aW9uIChvbiB0aGUKKyAgICogICAgIGJhc2VsaW5lKSB0byB0aGUgdXBwZXIgYml0bWFwIGJvcmRlciAoYS5rLmEuIGB0b3AKKyAgICogICAgIHNpZGUgYmVhcmluZycpLiAgVGhlIGRpc3RhbmNlIGlzIHBvc2l0aXZlIGZvciB1cHdhcmRzCisgICAqICAgICB5fmNvb3JkaW5hdGVzLgorICAgKgorICAgKiAgIGZvcm1hdCA6OgorICAgKiAgICAgVGhlIGZvcm1hdCBvZiB0aGUgZ2x5cGggYml0bWFwIChtb25vY2hyb21lIG9yIGdyYXkpLgorICAgKgorICAgKiAgIG1heF9ncmF5cyA6OgorICAgKiAgICAgTWF4aW11bSBncmF5IGxldmVsIHZhbHVlIChpbiB0aGUgcmFuZ2UgMSB0b34yNTUpLgorICAgKgorICAgKiAgIHBpdGNoIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBiaXRtYXAgbGluZS4gIE1heSBiZSBwb3NpdGl2ZQorICAgKiAgICAgb3IgbmVnYXRpdmUuCisgICAqCisgICAqICAgeGFkdmFuY2UgOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGFkdmFuY2Ugd2lkdGggaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIHlhZHZhbmNlIDo6CisgICAqICAgICBUaGUgdmVydGljYWwgYWR2YW5jZSBoZWlnaHQgaW4gcGl4ZWxzLgorICAgKgorICAgKiAgIGJ1ZmZlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBiaXRtYXAgcGl4ZWxzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19TQml0UmVjXwogICB7CiAgICAgRlRfQnl0ZSAgIHdpZHRoOwpAQCAtODg3LDg3ICs5MzQsOTQgQEAKICAgfSBGVENfU0JpdFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19TQml0Q2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGNhY2hlLiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FjaGUgb2JqZWN0cyAqLwotICAvKiAgICB1c2VkIHRvIHN0b3JlIHNtYWxsIGdseXBoIGJpdG1hcHMgKGFuZCBhbnRpLWFsaWFzZWQgcGl4bWFwcykgaW4gYSAgKi8KLSAgLyogICAgbXVjaCBtb3JlIGVmZmljaWVudCB3YXkgdGhhbiB0aGUgdHJhZGl0aW9uYWwgZ2x5cGggaW1hZ2UgY2FjaGUgICAgICovCi0gIC8qICAgIGltcGxlbWVudGVkIGJ5IEBGVENfSW1hZ2VDYWNoZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUQ19TQml0Q2FjaGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGNhY2hlLiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FjaGUgb2JqZWN0cworICAgKiAgIHVzZWQgdG8gc3RvcmUgc21hbGwgZ2x5cGggYml0bWFwcyAoYW5kIGFudGktYWxpYXNlZCBwaXhtYXBzKSBpbiBhCisgICAqICAgbXVjaCBtb3JlIGVmZmljaWVudCB3YXkgdGhhbiB0aGUgdHJhZGl0aW9uYWwgZ2x5cGggaW1hZ2UgY2FjaGUKKyAgICogICBpbXBsZW1lbnRlZCBieSBARlRDX0ltYWdlQ2FjaGUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVENfU0JpdENhY2hlUmVjXyogIEZUQ19TQml0Q2FjaGU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfU0JpdENhY2hlX05ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGUgYSBuZXcgY2FjaGUgdG8gc3RvcmUgc21hbGwgZ2x5cGggYml0bWFwcy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYW5hZ2VyIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgY2FjaGUgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhY2FjaGUgIDo6IEEgaGFuZGxlIHRvIHRoZSBuZXcgc2JpdCBjYWNoZS4gIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRDX1NCaXRDYWNoZV9OZXcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENyZWF0ZSBhIG5ldyBjYWNoZSB0byBzdG9yZSBzbWFsbCBnbHlwaCBiaXRtYXBzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWFuYWdlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBjYWNoZSBtYW5hZ2VyLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFjYWNoZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIG5ldyBzYml0IGNhY2hlLiAgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRDX1NCaXRDYWNoZV9OZXcoIEZUQ19NYW5hZ2VyICAgICBtYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgRlRDX1NCaXRDYWNoZSAgKmFjYWNoZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRDX1NCaXRDYWNoZV9Mb29rdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9vayB1cCBhIGdpdmVuIHNtYWxsIGdseXBoIGJpdG1hcCBpbiBhIGdpdmVuIHNiaXQgY2FjaGUgYW5kICAgICAgICovCi0gIC8qICAgIGBsb2NrJyBpdCB0byBwcmV2ZW50IGl0cyBmbHVzaGluZyBmcm9tIHRoZSBjYWNoZSB1bnRpbCBuZWVkZWQuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhY2hlICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHlwZSAgIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggaW1hZ2UgdHlwZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnaW5kZXggOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzYml0ICAgOjogQSBoYW5kbGUgdG8gYSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFub2RlICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgICAgKi8KLSAgLyogICAgICAgICAgICAgIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlICAgICovCi0gIC8qICAgIGNhY2hlIGFuZCBzaG91bGQgbmV2ZXIgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhleSBtaWdodCAgICAqLwotICAvKiAgICBhcyB3ZWxsIGRpc2FwcGVhciBmcm9tIG1lbW9yeSBvbiB0aGUgbmV4dCBjYWNoZSBsb29rdXAsIHNvIGRvbid0ICAgKi8KLSAgLyogICAgdHJlYXQgdGhlbSBhcyBwZXJzaXN0ZW50IGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZGVzY3JpcHRvcidzIGBidWZmZXInIGZpZWxkIGlzIHNldCB0b34wIHRvIGluZGljYXRlIGEgbWlzc2luZyAgKi8KLSAgLyogICAgZ2x5cGggYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSAgICAgKi8KLSAgLyogICAgbm9kZSBjb250YWluaW5nIHRoZSBiaXRtYXAsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gICovCi0gIC8qICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBpbWFnZSkgd2lsbCBhbHdheXMgYmUgICAqLwotICAvKiAgICBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCBARlRDX05vZGVfVW5yZWYgdG8gYHJlbGVhc2UnIGl0LiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGBhbm9kZScgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zICAqLwotICAvKiAgICB0aGF0IHRoZSBiaXRtYXAgY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0ICAgICAgKi8KLSAgLyogICAgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiAgRG9uJ3QgYXNzdW1lIHRoYXQgaXQgICovCi0gIC8qICAgIGlzIHBlcnNpc3RlbnQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfU0JpdENhY2hlX0xvb2t1cAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgTG9vayB1cCBhIGdpdmVuIHNtYWxsIGdseXBoIGJpdG1hcCBpbiBhIGdpdmVuIHNiaXQgY2FjaGUgYW5kCisgICAqICAgYGxvY2snIGl0IHRvIHByZXZlbnQgaXRzIGZsdXNoaW5nIGZyb20gdGhlIGNhY2hlIHVudGlsIG5lZWRlZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNhY2hlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuCisgICAqCisgICAqICAgdHlwZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBpbWFnZSB0eXBlIGRlc2NyaXB0b3IuCisgICAqCisgICAqICAgZ2luZGV4IDo6CisgICAqICAgICBUaGUgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgc2JpdCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvci4KKyAgICoKKyAgICogICBhbm9kZSA6OgorICAgKiAgICAgVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUKKyAgICogICAgIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQgKHNlZSBub3RlCisgICAqICAgICBiZWxvdykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlCisgICAqICAgY2FjaGUgYW5kIHNob3VsZCBuZXZlciBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGV5IG1pZ2h0CisgICAqICAgYXMgd2VsbCBkaXNhcHBlYXIgZnJvbSBtZW1vcnkgb24gdGhlIG5leHQgY2FjaGUgbG9va3VwLCBzbyBkb24ndAorICAgKiAgIHRyZWF0IHRoZW0gYXMgcGVyc2lzdGVudCBkYXRhLgorICAgKgorICAgKiAgIFRoZSBkZXNjcmlwdG9yJ3MgYGJ1ZmZlcicgZmllbGQgaXMgc2V0IHRvfjAgdG8gaW5kaWNhdGUgYSBtaXNzaW5nCisgICAqICAgZ2x5cGggYml0bWFwLgorICAgKgorICAgKiAgIElmIGBhbm9kZScgaXMgX25vdF8gTlVMTCwgaXQgcmVjZWl2ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhY2hlCisgICAqICAgbm9kZSBjb250YWluaW5nIHRoZSBiaXRtYXAsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4KKyAgICogICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgaW1hZ2UpIHdpbGwgYWx3YXlzIGJlCisgICAqICAga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvIGByZWxlYXNlJyBpdC4KKyAgICoKKyAgICogICBJZiBgYW5vZGUnIGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucworICAgKiAgIHRoYXQgdGhlIGJpdG1hcCBjb3VsZCBiZSBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgb24gdGhlIG5leHQKKyAgICogICBjYWxsIHRvIG9uZSBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIEFQSXMuICBEb24ndCBhc3N1bWUgdGhhdCBpdAorICAgKiAgIGlzIHBlcnNpc3RlbnQhCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRDX1NCaXRDYWNoZV9Mb29rdXAoIEZUQ19TQml0Q2FjaGUgICAgY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVENfSW1hZ2VUeXBlICAgIHR5cGUsCkBAIC05NzYsNTMgKzEwMzAsNTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19Ob2RlICAgICAgICAqYW5vZGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUQ19TQml0Q2FjaGVfTG9va3VwU2NhbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdmFyaWFudCBvZiBARlRDX1NCaXRDYWNoZV9Mb29rdXAgdGhhdCB1c2VzIGFuIEBGVENfU2NhbGVyUmVjICAgICAqLwotICAvKiAgICB0byBzcGVjaWZ5IHRoZSBmYWNlIElEIGFuZCBpdHMgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjYWNoZSAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugc2JpdCBjYWNoZS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNjYWxlciAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzY2FsZXIgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9mbGFncyA6OiBUaGUgY29ycmVzcG9uZGluZyBsb2FkIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnaW5kZXggICAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzYml0ICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFub2RlICAgICAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGNhY2hlIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAoc2VlIG5vdGUgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlICAgICovCi0gIC8qICAgIGNhY2hlIGFuZCBzaG91bGQgbmV2ZXIgYmUgZnJlZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhleSBtaWdodCAgICAqLwotICAvKiAgICBhcyB3ZWxsIGRpc2FwcGVhciBmcm9tIG1lbW9yeSBvbiB0aGUgbmV4dCBjYWNoZSBsb29rdXAsIHNvIGRvbid0ICAgKi8KLSAgLyogICAgdHJlYXQgdGhlbSBhcyBwZXJzaXN0ZW50IGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZGVzY3JpcHRvcidzIGBidWZmZXInIGZpZWxkIGlzIHNldCB0b34wIHRvIGluZGljYXRlIGEgbWlzc2luZyAgKi8KLSAgLyogICAgZ2x5cGggYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgYW5vZGUnIGlzIF9ub3RfIE5VTEwsIGl0IHJlY2VpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWNoZSAgICAgKi8KLSAgLyogICAgbm9kZSBjb250YWluaW5nIHRoZSBiaXRtYXAsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gICovCi0gIC8qICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBub2RlIChhcyB3ZWxsIGFzIHRoZSBpbWFnZSkgd2lsbCBhbHdheXMgYmUgICAqLwotICAvKiAgICBrZXB0IGluIHRoZSBjYWNoZSB1bnRpbCB5b3UgY2FsbCBARlRDX05vZGVfVW5yZWYgdG8gYHJlbGVhc2UnIGl0LiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGBhbm9kZScgaXMgTlVMTCwgdGhlIGNhY2hlIG5vZGUgaXMgbGVmdCB1bmNoYW5nZWQsIHdoaWNoIG1lYW5zICAqLwotICAvKiAgICB0aGF0IHRoZSBiaXRtYXAgY291bGQgYmUgZmx1c2hlZCBvdXQgb2YgdGhlIGNhY2hlIG9uIHRoZSBuZXh0ICAgICAgKi8KLSAgLyogICAgY2FsbCB0byBvbmUgb2YgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBBUElzLiAgRG9uJ3QgYXNzdW1lIHRoYXQgaXQgICovCi0gIC8qICAgIGlzIHBlcnNpc3RlbnQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVENfU0JpdENhY2hlX0xvb2t1cFNjYWxlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB2YXJpYW50IG9mIEBGVENfU0JpdENhY2hlX0xvb2t1cCB0aGF0IHVzZXMgYW4gQEZUQ19TY2FsZXJSZWMKKyAgICogICB0byBzcGVjaWZ5IHRoZSBmYWNlIElEIGFuZCBpdHMgc2l6ZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNhY2hlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNiaXQgY2FjaGUuCisgICAqCisgICAqICAgc2NhbGVyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHNjYWxlciBkZXNjcmlwdG9yLgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIFRoZSBjb3JyZXNwb25kaW5nIGxvYWQgZmxhZ3MuCisgICAqCisgICAqICAgZ2luZGV4IDo6CisgICAqICAgICBUaGUgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgc2JpdCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBzbWFsbCBiaXRtYXAgZGVzY3JpcHRvci4KKyAgICoKKyAgICogICBhbm9kZSA6OgorICAgKiAgICAgVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICAgIGNhY2hlIG5vZGUgYWZ0ZXIgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQKKyAgICogICAgIChzZWUgbm90ZSBiZWxvdykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yIGFuZCBpdHMgYml0IGJ1ZmZlciBhcmUgb3duZWQgYnkgdGhlCisgICAqICAgY2FjaGUgYW5kIHNob3VsZCBuZXZlciBiZSBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGV5IG1pZ2h0CisgICAqICAgYXMgd2VsbCBkaXNhcHBlYXIgZnJvbSBtZW1vcnkgb24gdGhlIG5leHQgY2FjaGUgbG9va3VwLCBzbyBkb24ndAorICAgKiAgIHRyZWF0IHRoZW0gYXMgcGVyc2lzdGVudCBkYXRhLgorICAgKgorICAgKiAgIFRoZSBkZXNjcmlwdG9yJ3MgYGJ1ZmZlcicgZmllbGQgaXMgc2V0IHRvfjAgdG8gaW5kaWNhdGUgYSBtaXNzaW5nCisgICAqICAgZ2x5cGggYml0bWFwLgorICAgKgorICAgKiAgIElmIGBhbm9kZScgaXMgX25vdF8gTlVMTCwgaXQgcmVjZWl2ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhY2hlCisgICAqICAgbm9kZSBjb250YWluaW5nIHRoZSBiaXRtYXAsIGFmdGVyIGluY3JlYXNpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4KKyAgICogICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbm9kZSAoYXMgd2VsbCBhcyB0aGUgaW1hZ2UpIHdpbGwgYWx3YXlzIGJlCisgICAqICAga2VwdCBpbiB0aGUgY2FjaGUgdW50aWwgeW91IGNhbGwgQEZUQ19Ob2RlX1VucmVmIHRvIGByZWxlYXNlJyBpdC4KKyAgICoKKyAgICogICBJZiBgYW5vZGUnIGlzIE5VTEwsIHRoZSBjYWNoZSBub2RlIGlzIGxlZnQgdW5jaGFuZ2VkLCB3aGljaCBtZWFucworICAgKiAgIHRoYXQgdGhlIGJpdG1hcCBjb3VsZCBiZSBmbHVzaGVkIG91dCBvZiB0aGUgY2FjaGUgb24gdGhlIG5leHQKKyAgICogICBjYWxsIHRvIG9uZSBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIEFQSXMuICBEb24ndCBhc3N1bWUgdGhhdCBpdAorICAgKiAgIGlzIHBlcnNpc3RlbnQhCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIoIEZUQ19TQml0Q2FjaGUgIGNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgICAgc2NhbGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2hhcHRlcnMuaAppbmRleCA1MTI1N2JiLi5mNDI5N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2hhcHRlcnMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2hhcHRlcnMuaApAQCAtMSwxMzkgKzEsMTQ1IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEZyZWVUeXBlIHJlZmVyZW5jZS4gICAgICAgICAgICAgICovCi0vKiBJdCBpcyB1c2VkIGJ5IHRoZSBweXRob24gc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIHRoZSBIVE1MIGZpbGVzLiAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEZyZWVUeXBlIHJlZmVyZW5jZS4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIHB5dGhvbiBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgdGhlIEhUTUwgZmlsZXMuCisgKgorICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8Q2hhcHRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgZ2VuZXJhbF9yZW1hcmtzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgR2VuZXJhbCBSZW1hcmtzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8U2VjdGlvbnM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgaGVhZGVyX2luY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIHVzZXJfYWxsb2NhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGNoYXB0ZXI6CisgICAqICAgZ2VuZXJhbF9yZW1hcmtzCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBHZW5lcmFsIFJlbWFya3MKKyAgICoKKyAgICogQHNlY3Rpb25zOgorICAgKiAgIGhlYWRlcl9pbmNsdXNpb24KKyAgICogICB1c2VyX2FsbG9jYXRpb24KKyAgICoKKyAgICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8Q2hhcHRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgY29yZV9hcGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ29yZSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8U2VjdGlvbnM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGJhc2ljX3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgZ2x5cGhfdmFyaWFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGdseXBoX21hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBtYWNfc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgc2l6ZXNfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGhlYWRlcl9maWxlX21hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGNoYXB0ZXI6CisgICAqICAgY29yZV9hcGkKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIENvcmUgQVBJCisgICAqCisgICAqIEBzZWN0aW9uczoKKyAgICogICB2ZXJzaW9uCisgICAqICAgYmFzaWNfdHlwZXMKKyAgICogICBiYXNlX2ludGVyZmFjZQorICAgKiAgIGdseXBoX3ZhcmlhbnRzCisgICAqICAgY29sb3JfbWFuYWdlbWVudAorICAgKiAgIGxheWVyX21hbmFnZW1lbnQKKyAgICogICBnbHlwaF9tYW5hZ2VtZW50CisgICAqICAgbWFjX3NwZWNpZmljCisgICAqICAgc2l6ZXNfbWFuYWdlbWVudAorICAgKiAgIGhlYWRlcl9maWxlX21hY3JvcworICAgKgorICAgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxDaGFwdGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBmb3JtYXRfc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGb3JtYXQtU3BlY2lmaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxTZWN0aW9ucz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBtdWx0aXBsZV9tYXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgdHJ1ZXR5cGVfdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIHR5cGUxX3RhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBzZm50X25hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYmRmX2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGNpZF9mb250cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBwZnJfZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgd2luZm50X2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGZvbnRfZm9ybWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBnYXNwX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBjaGFwdGVyOgorICAgKiAgIGZvcm1hdF9zcGVjaWZpYworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgRm9ybWF0LVNwZWNpZmljIEFQSQorICAgKgorICAgKiBAc2VjdGlvbnM6CisgICAqICAgbXVsdGlwbGVfbWFzdGVycworICAgKiAgIHRydWV0eXBlX3RhYmxlcworICAgKiAgIHR5cGUxX3RhYmxlcworICAgKiAgIHNmbnRfbmFtZXMKKyAgICogICBiZGZfZm9udHMKKyAgICogICBjaWRfZm9udHMKKyAgICogICBwZnJfZm9udHMKKyAgICogICB3aW5mbnRfZm9udHMKKyAgICogICBmb250X2Zvcm1hdHMKKyAgICogICBnYXNwX3RhYmxlCisgICAqCisgICAqLwogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIG1vZHVsZV9zcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENvbnRyb2xsaW5nIEZyZWVUeXBlIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGF1dG9faGludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBjZmZfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgdDFfY2lkX2RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIHR0X2RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBwY2ZfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgcHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIHBhcmFtZXRlcl90YWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGNoYXB0ZXI6CisgICAqICAgbW9kdWxlX3NwZWNpZmljCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBDb250cm9sbGluZyBGcmVlVHlwZSBNb2R1bGVzCisgICAqCisgICAqIEBzZWN0aW9uczoKKyAgICogICBhdXRvX2hpbnRlcgorICAgKiAgIGNmZl9kcml2ZXIKKyAgICogICB0MV9jaWRfZHJpdmVyCisgICAqICAgdHRfZHJpdmVyCisgICAqICAgcGNmX2RyaXZlcgorICAgKiAgIHByb3BlcnRpZXMKKyAgICogICBwYXJhbWV0ZXJfdGFncworICAgKiAgIGxjZF9yZW5kZXJpbmcKKyAgICoKKyAgICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8Q2hhcHRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgY2FjaGVfc3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ2FjaGUgU3ViLVN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA8U2VjdGlvbnM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgY2FjaGVfc3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY2hhcHRlcjoKKyAgICogICBjYWNoZV9zdWJzeXN0ZW0KKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIENhY2hlIFN1Yi1TeXN0ZW0KKyAgICoKKyAgICogQHNlY3Rpb25zOgorICAgKiAgIGNhY2hlX3N1YnN5c3RlbQorICAgKgorICAgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxDaGFwdGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBzdXBwb3J0X2FwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBTdXBwb3J0IEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIDxTZWN0aW9ucz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBjb21wdXRhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbGlzdF9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIG91dGxpbmVfcHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBxdWlja19hZHZhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYml0bWFwX2hhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIHJhc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBnbHlwaF9zdHJva2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgc3lzdGVtX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIG1vZHVsZV9tYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBnemlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHp3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGJ6aXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBsY2RfZmlsdGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBjaGFwdGVyOgorICAgKiAgIHN1cHBvcnRfYXBpCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBTdXBwb3J0IEFQSQorICAgKgorICAgKiBAc2VjdGlvbnM6CisgICAqICAgY29tcHV0YXRpb25zCisgICAqICAgbGlzdF9wcm9jZXNzaW5nCisgICAqICAgb3V0bGluZV9wcm9jZXNzaW5nCisgICAqICAgcXVpY2tfYWR2YW5jZQorICAgKiAgIGJpdG1hcF9oYW5kbGluZworICAgKiAgIHJhc3RlcgorICAgKiAgIGdseXBoX3N0cm9rZXIKKyAgICogICBzeXN0ZW1faW50ZXJmYWNlCisgICAqICAgbW9kdWxlX21hbmFnZW1lbnQKKyAgICogICBnemlwCisgICAqICAgbHp3CisgICAqICAgYnppcDIKKyAgICoKKyAgICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPENoYXB0ZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGVycm9yX2NvZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEVycm9yIENvZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPFNlY3Rpb25zPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGVycm9yX2VudW1lcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBlcnJvcl9jb2RlX3ZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGNoYXB0ZXI6CisgICAqICAgZXJyb3JfY29kZXMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIEVycm9yIENvZGVzCisgICAqCisgICAqIEBzZWN0aW9uczoKKyAgICogICBlcnJvcl9lbnVtZXJhdGlvbnMKKyAgICogICBlcnJvcl9jb2RlX3ZhbHVlcworICAgKgorICAgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaAppbmRleCA1ZTkxMDBhLi5iNDI3Y2JkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNpZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQ0lEIGZvbnQgaW5mb3JtYXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERlcmVnIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNpZC5oCisgKgorICogICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBDSUQgZm9udCBpbmZvcm1hdGlvbiAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxOCBieQorICogRGVyZWcgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUQ0lEX0hfCkBAIC0zMiwyMiArMzIsMjIgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2lkX2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lEIEZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lELWtleWVkIGZvbnQgc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBDSUQta2V5ZWQgZm9udCBzcGVjaWZpYyAgICovCi0gIC8qICAgIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBjaWRfZm9udHMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIENJRCBGb250cworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ0lELWtleWVkIGZvbnQtc3BlY2lmaWMgQVBJLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBDSUQta2V5ZWQgZm9udC1zcGVjaWZpYworICAgKiAgIGZ1bmN0aW9ucy4KKyAgICoKKyAgICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjEsMTcgKzYxLDE3IEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgotICAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KICAgICoKICAgICogQG91dHB1dDoKICAgICogICAgcmVnaXN0cnkgOjoKLSAgICogICAgICAgVGhlIHJlZ2lzdHJ5LCBhcyBhIEN+c3RyaW5nLCBvd25lZCBieSB0aGUgZmFjZS4KKyAgICogICAgICBUaGUgcmVnaXN0cnksIGFzIGEgQ35zdHJpbmcsIG93bmVkIGJ5IHRoZSBmYWNlLgogICAgKgogICAgKiAgICBvcmRlcmluZyA6OgotICAgKiAgICAgICBUaGUgb3JkZXJpbmcsIGFzIGEgQ35zdHJpbmcsIG93bmVkIGJ5IHRoZSBmYWNlLgorICAgKiAgICAgIFRoZSBvcmRlcmluZywgYXMgYSBDfnN0cmluZywgb3duZWQgYnkgdGhlIGZhY2UuCiAgICAqCiAgICAqICAgIHN1cHBsZW1lbnQgOjoKLSAgICogICAgICAgVGhlIHN1cHBsZW1lbnQuCisgICAqICAgICAgVGhlIHN1cHBsZW1lbnQuCiAgICAqCiAgICAqIEByZXR1cm46CiAgICAqICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0xMDIsMTEgKzEwMiwxMSBAQAogICAgKgogICAgKiBAaW5wdXQ6CiAgICAqICAgIGZhY2UgOjoKLSAgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCiAgICAqCiAgICAqIEBvdXRwdXQ6CiAgICAqICAgIGlzX2NpZCA6OgotICAgKiAgICAgICBUaGUgdHlwZSBvZiB0aGUgZmFjZSBhcyBhbiBARlRfQm9vbC4KKyAgICogICAgICBUaGUgdHlwZSBvZiB0aGUgZmFjZSBhcyBhbiBARlRfQm9vbC4KICAgICoKICAgICogQHJldHVybjoKICAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KQEAgLTEzMywxNCArMTMzLDE0IEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgotICAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KICAgICoKICAgICogICAgZ2x5cGhfaW5kZXggOjoKLSAgICogICAgICAgVGhlIGlucHV0IGdseXBoIGluZGV4LgorICAgKiAgICAgIFRoZSBpbnB1dCBnbHlwaCBpbmRleC4KICAgICoKICAgICogQG91dHB1dDoKICAgICogICAgY2lkIDo6Ci0gICAqICAgICAgIFRoZSBDSUQgYXMgYW4gQEZUX1VJbnQuCisgICAqICAgICAgVGhlIENJRCBhcyBhbiBARlRfVUludC4KICAgICoKICAgICogQHJldHVybjoKICAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjb2xvci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmYTRhZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjb2xvci5oCkBAIC0wLDAgKzEsMzE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y29sb3IuaAorICoKKyAqICAgRnJlZVR5cGUncyBnbHlwaCBjb2xvciBtYW5hZ2VtZW50IChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLworCisKKyNpZm5kZWYgRlRDT0xPUl9IXworI2RlZmluZSBGVENPTE9SX0hfCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBjb2xvcl9tYW5hZ2VtZW50CisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBHbHlwaCBDb2xvciBNYW5hZ2VtZW50CisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBSZXRyaWV2aW5nIGFuZCBtYW5pcHVsYXRpbmcgT3BlblR5cGUncyBgQ1BBTCcgdGFibGUgZGF0YS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgYWxsb3cgYWNjZXNzIGFuZCBtYW5pcHVsYXRpb24gb2YgY29sb3IKKyAgICogICBwYWxldHRlIGVudHJpZXMgaW4gT3BlblR5cGUncyBgQ1BBTCcgdGFibGVzLgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX0NvbG9yCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgYSBCR1JBIGNvbG9yIHZhbHVlIG9mIGEgYENQQUwnIHBhbGV0dGUgZW50cnkuCisgICAqCisgICAqICAgVGhlIHVzZWQgY29sb3Igc3BhY2UgaXMgc1JHQjsgdGhlIGNvbG9ycyBhcmUgbm90IHByZS1tdWx0aXBsaWVkLCBhbmQKKyAgICogICBhbHBoYSB2YWx1ZXMgbXVzdCBiZSBleHBsaWNpdGx5IHNldC4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBibHVlIDo6CisgICAqICAgICBCbHVlIHZhbHVlLgorICAgKgorICAgKiAgIGdyZWVuIDo6CisgICAqICAgICBHcmVlbiB2YWx1ZS4KKyAgICoKKyAgICogICByZWQgOjoKKyAgICogICAgIFJlZCB2YWx1ZS4KKyAgICoKKyAgICogICBhbHBoYSA6OgorICAgKiAgICAgQWxwaGEgdmFsdWUsIGdpdmluZyB0aGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29sb3IncyBvcGFjaXR5LgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMAorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0NvbG9yXworICB7CisgICAgRlRfQnl0ZSAgYmx1ZTsKKyAgICBGVF9CeXRlICBncmVlbjsKKyAgICBGVF9CeXRlICByZWQ7CisgICAgRlRfQnl0ZSAgYWxwaGE7CisKKyAgfSBGVF9Db2xvcjsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9QQUxFVFRFX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGJpdCBmaWVsZCBjb25zdGFudHMgdXNlZCBpbiB0aGUgYHBhbGV0dGVfZmxhZ3MnIGFycmF5IG9mCisgICAqICAgdGhlIEBGVF9QYWxldHRlX0RhdGEgc3RydWN0dXJlIHRvIGluZGljYXRlIGZvciB3aGljaCBiYWNrZ3JvdW5kIGEKKyAgICogICBwYWxldHRlIHdpdGggYSBnaXZlbiBpbmRleCBpcyB1c2FibGUuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfUEFMRVRURV9GT1JfTElHSFRfQkFDS0dST1VORCA6OgorICAgKiAgICAgVGhlIHBhbGV0dGUgaXMgYXBwcm9wcmlhdGUgdG8gdXNlIHdoZW4gZGlzcGxheWluZyB0aGUgZm9udCBvbiBhCisgICAqICAgICBsaWdodCBiYWNrZ3JvdW5kIHN1Y2ggYXMgd2hpdGUuCisgICAqCisgICAqICAgRlRfUEFMRVRURV9GT1JfREFSS19CQUNLR1JPVU5EIDo6CisgICAqICAgICBUaGUgcGFsZXR0ZSBpcyBhcHByb3ByaWF0ZSB0byB1c2Ugd2hlbiBkaXNwbGF5aW5nIHRoZSBmb250IG9uIGEKKyAgICogICAgIGRhcmsgYmFja2dyb3VuZCBzdWNoIGFzIGJsYWNrLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMAorICAgKi8KKyNkZWZpbmUgRlRfUEFMRVRURV9GT1JfTElHSFRfQkFDS0dST1VORCAgMHgwMQorI2RlZmluZSBGVF9QQUxFVFRFX0ZPUl9EQVJLX0JBQ0tHUk9VTkQgICAweDAyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9QYWxldHRlX0RhdGEKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBkYXRhIG9mIHRoZSBgQ1BBTCcgdGFibGUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbnVtX3BhbGV0dGVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHBhbGV0dGVzLgorICAgKgorICAgKiAgIHBhbGV0dGVfbmFtZV9pZHMgOjoKKyAgICogICAgIEEgcmVhZC1vbmx5IGFycmF5IG9mIHBhbGV0dGUgbmFtZSBJRHMgd2l0aCBgbnVtX3BhbGV0dGVzJyBlbGVtZW50cywKKyAgICogICAgIGNvcnJlc3BvbmRpbmcgdG8gZW50cmllcyBsaWtlIGBkYXJrJyBvciBgbGlnaHQnIGluIHRoZSBmb250J3MKKyAgICogICAgIGBuYW1lJyB0YWJsZS4KKyAgICoKKyAgICogICAgIEFuIGVtcHR5IG5hbWUgSUQgaW4gdGhlIGBDUEFMJyB0YWJsZSBnZXRzIHJlcHJlc2VudGVkIGFzIHZhbHVlCisgICAqICAgICAweEZGRkYuCisgICAqCisgICAqICAgICBOVUxMIGlmIHRoZSBmb250J3MgYENQQUwnIHRhYmxlIGRvZXNuJ3QgY29udGFpbiBhcHByb3ByaWF0ZSBkYXRhLgorICAgKgorICAgKiAgIHBhbGV0dGVfZmxhZ3MgOjoKKyAgICogICAgIEEgcmVhZC1vbmx5IGFycmF5IG9mIHBhbGV0dGUgZmxhZ3Mgd2l0aCBgbnVtX3BhbGV0dGVzJyBlbGVtZW50cy4KKyAgICogICAgIFBvc3NpYmxlIHZhbHVlcyBhcmUgYW4gT1JlZCBjb21iaW5hdGlvbiBvZgorICAgKiAgICAgQEZUX1BBTEVUVEVfRk9SX0xJR0hUX0JBQ0tHUk9VTkQgYW5kCisgICAqICAgICBARlRfUEFMRVRURV9GT1JfREFSS19CQUNLR1JPVU5ELgorICAgKgorICAgKiAgICAgTlVMTCBpZiB0aGUgZm9udCdzIGBDUEFMJyB0YWJsZSBkb2Vzbid0IGNvbnRhaW4gYXBwcm9wcmlhdGUgZGF0YS4KKyAgICoKKyAgICogICBudW1fcGFsZXR0ZV9lbnRyaWVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYSBzaW5nbGUgcGFsZXR0ZS4gIEFsbCBwYWxldHRlcyBoYXZlIHRoZQorICAgKiAgICAgc2FtZSBzaXplLgorICAgKgorICAgKiAgIHBhbGV0dGVfZW50cnlfbmFtZV9pZHMgOjoKKyAgICogICAgIEEgcmVhZC1vbmx5IGFycmF5IG9mIHBhbGV0dGUgZW50cnkgbmFtZSBJRHMgd2l0aAorICAgKiAgICAgYG51bV9wYWxldHRlX2VudHJpZXMnLiAgSW4gZWFjaCBwYWxldHRlLCBlbnRyaWVzIHdpdGggdGhlIHNhbWUKKyAgICogICAgIGluZGV4IGhhdmUgdGhlIHNhbWUgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSwgaW5kZXh+MCBtaWdodAorICAgKiAgICAgY29ycmVzcG9uZCB0byBzdHJpbmcgYG91dGxpbmUnIGluIHRoZSBmb250J3MgYG5hbWUnIHRhYmxlIHRvCisgICAqICAgICBpbmRpY2F0ZSB0aGF0IHRoaXMgcGFsZXR0ZSBlbnRyeSBpcyB1c2VkIGZvciBvdXRsaW5lcywgaW5kZXh+MQorICAgKiAgICAgbWlnaHQgY29ycmVzcG9uZCB0byBgZmlsbCcgdG8gaW5kaWNhdGUgdGhlIGZpbGxpbmcgY29sb3IgcGFsZXR0ZQorICAgKiAgICAgZW50cnksIGV0Yy4KKyAgICoKKyAgICogICAgIEFuIGVtcHR5IGVudHJ5IG5hbWUgSUQgaW4gdGhlIGBDUEFMJyB0YWJsZSBnZXRzIHJlcHJlc2VudGVkIGFzCisgICAqICAgICB2YWx1ZSAweEZGRkYuCisgICAqCisgICAqICAgICBOVUxMIGlmIHRoZSBmb250J3MgYENQQUwnIHRhYmxlIGRvZXNuJ3QgY29udGFpbiBhcHByb3ByaWF0ZSBkYXRhLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBVc2UgZnVuY3Rpb24gQEZUX0dldF9TZm50X05hbWUgdG8gbWFwIG5hbWUgSURzIGFuZCBlbnRyeSBuYW1lIElEcyB0bworICAgKiAgIG5hbWUgc3RyaW5ncy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMTAKKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9QYWxldHRlX0RhdGFfIHsKKyAgICBGVF9VU2hvcnQgICAgICAgICBudW1fcGFsZXR0ZXM7CisgICAgY29uc3QgRlRfVVNob3J0KiAgcGFsZXR0ZV9uYW1lX2lkczsKKyAgICBjb25zdCBGVF9VU2hvcnQqICBwYWxldHRlX2ZsYWdzOworCisgICAgRlRfVVNob3J0ICAgICAgICAgbnVtX3BhbGV0dGVfZW50cmllczsKKyAgICBjb25zdCBGVF9VU2hvcnQqICBwYWxldHRlX2VudHJ5X25hbWVfaWRzOworCisgIH0gRlRfUGFsZXR0ZV9EYXRhOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9QYWxldHRlX0RhdGFfR2V0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSB0aGUgZmFjZSdzIGNvbG9yIHBhbGV0dGUgZGF0YS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2UgZmFjZSBoYW5kbGUuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYXBhbGV0dGUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiBARlRfUGFsZXR0ZV9EYXRhIHN0cnVjdHVyZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBBbGwgYXJyYXlzIGluIHRoZSByZXR1cm5lZCBARlRfUGFsZXR0ZV9EYXRhIHN0cnVjdHVyZSBhcmUgcmVhZC1vbmx5LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybworICAgKiAgIGBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMAorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1BhbGV0dGVfRGF0YV9HZXQoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1BhbGV0dGVfRGF0YSAgKmFwYWxldHRlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1BhbGV0dGVfU2VsZWN0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGhhcyB0d28gcHVycG9zZXMuCisgICAqCisgICAqICAgKDEpIEl0IGFjdGl2YXRlcyBhIHBhbGV0dGUgZm9yIHJlbmRlcmluZyBjb2xvciBnbHlwaHMsIGFuZAorICAgKgorICAgKiAgICgyKSBpdCByZXRyaWV2ZXMgYWxsICh1bm1vZGlmaWVkKSBjb2xvciBlbnRyaWVzIG9mIHRoaXMgcGFsZXR0ZS4gIFRoaXMKKyAgICogICAgICAgZnVuY3Rpb24gcmV0dXJucyBhIHJlYWQtd3JpdGUgYXJyYXksIHdoaWNoIG1lYW5zIHRoYXQgYSBjYWxsaW5nCisgICAqICAgICAgIGFwcGxpY2F0aW9uIGNhbiBtb2RpZnkgdGhlIHBhbGV0dGUgZW50cmllcyBvbiBkZW1hbmQuCisgICAqCisgICAqIEEgY29yb2xsYXJ5IG9mICgyKSBpcyB0aGF0IGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGVuIG1vZGlmeWluZyBzb21lCisgICAqIHZhbHVlcywgdGhlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBhZ2FpbiB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyByZXNldHMKKyAgICogYWxsIGNvbG9yIGVudHJpZXMgdG8gdGhlIG9yaWdpbmFsIGBDUEFMJyB2YWx1ZXM7IGFsbCB1c2VyIG1vZGlmaWNhdGlvbnMKKyAgICogYXJlIGxvc3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgc291cmNlIGZhY2UgaGFuZGxlLgorICAgKgorICAgKiAgIHBhbGV0dGVfaW5kZXggOjoKKyAgICogICAgIFRoZSBwYWxldHRlIGluZGV4LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFwYWxldHRlIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBjb2xvciBlbnRyaWVzIGZvciBhIHBhbGV0dGUgd2l0aCBpbmRleCBgcGFsZXR0ZV9pbmRleCcuCisgICAqICAgICBJZiBgYXBhbGV0dGUnIGlzIHNldCB0byBOVUxMLCBubyBhcnJheSBnZXRzIHJldHVybmVkIChhbmQgbm8gY29sb3IKKyAgICogICAgIGVudHJpZXMgY2FuIGJlIG1vZGlmaWVkKS4KKyAgICoKKyAgICogICAgIEluIGNhc2UgdGhlIGZvbnQgZG9lc24ndCBzdXBwb3J0IGNvbG9yIHBhbGV0dGVzLCBOVUxMIGlzIHJldHVybmVkLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBudW1iZXIgb2YgY29sb3IgZW50cmllcyBpcyBnaXZlbiBieSB0aGUgYG51bV9wYWxldHRlX2VudHJpZXMnCisgICAqICAgZmllbGQgaW4gdGhlIEBGVF9QYWxldHRlX0RhdGEgc3RydWN0dXJlLgorICAgKgorICAgKiAgIFRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IGBhcGFsZXR0ZV9lbnRyaWVzJyBpcyBvd25lZCBhbmQgbWFuYWdlZCBieQorICAgKiAgIEZyZWVUeXBlLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybworICAgKiAgIGBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMAorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1BhbGV0dGVfU2VsZWN0KCBGVF9GYWNlICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgcGFsZXR0ZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX0NvbG9yKiAgKmFwYWxldHRlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1BhbGV0dGVfU2V0X0ZvcmVncm91bmRfQ29sb3IKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIGBDT0xSJyB1c2VzIHBhbGV0dGUgaW5kZXggMHhGRkZGIHRvIGluZGljYXRlIGEgYHRleHQgZm9yZWdyb3VuZAorICAgKiAgIGNvbG9yJy4gIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGlzIHZhbHVlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIHNvdXJjZSBmYWNlIGhhbmRsZS4KKyAgICoKKyAgICogICBmb3JlZ3JvdW5kX2NvbG9yIDo6CisgICAqICAgICBBbiBgRlRfQ29sb3InIHN0cnVjdHVyZSB0byBkZWZpbmUgdGhlIHRleHQgZm9yZWdyb3VuZCBjb2xvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiB0aGlzIGZ1bmN0aW9uIGlzbid0IGNhbGxlZCwgdGhlIHRleHQgZm9yZWdyb3VuZCBjb2xvciBpcyBzZXQgdG8KKyAgICogICB3aGl0ZSBvcGFxdWUgKEJHUkEgdmFsdWUgMHhGRkZGRkZGRikgaWYKKyAgICogICBARlRfUEFMRVRURV9GT1JfREFSS19CQUNLR1JPVU5EIGlzIHByZXNlbnQgZm9yIHRoZSBjdXJyZW50CisgICAqICAgcGFsZXR0ZSwgYW5kIGJsYWNrIG9wYXF1ZSAoQkdSQSB2YWx1ZSAweDAwMDAwMEZGKSBvdGhlcndpc2UsCisgICAqICAgaW5jbHVkaW5nIHRoZSBjYXNlIHRoYXQgbm8gcGFsZXR0ZSB0eXBlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBgQ1BBTCcKKyAgICogICB0YWJsZS4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjb25maWcgbWFjcm8KKyAgICogICBgVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMnIGlzIG5vdCBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuMTAKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9QYWxldHRlX1NldF9Gb3JlZ3JvdW5kX0NvbG9yKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ29sb3IgIGZvcmVncm91bmRfY29sb3IgKTsKKworICAvKiAqLworCisKK0ZUX0VORF9IRUFERVIKKworI2VuZGlmIC8qIEZUQ09MT1JfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRkcml2ZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRkcml2ZXIuaAppbmRleCAwMmQxMDRkLi5iMGE1M2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGRyaXZlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGRyaXZlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyBkcml2ZXIgbW9kdWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGRyaXZlci5oCisgKgorICogICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIGRyaXZlciBtb2R1bGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDE3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZURFJJVkVSX0hfCkBAIC0xMTEsOSArMTExLDkgQEAKICAgICoKICAgICogICBPbmUgb2YgdGhlIHJlYXNvbnMgdG8gbm90IGhpbnQgaG9yaXpvbnRhbGx5IGlzIGFudGlhbGlhc2luZyBmb3IgTENECiAgICAqICAgc2NyZWVuczogVGhlIHBpeGVsIGdlb21ldHJ5IG9mIG1vZGVybiBkaXNwbGF5cyBzdXBwbGllcyB0aHJlZQotICAgKiAgIHZlcnRpY2FsIHN1Yi1waXhlbHMgYXMgdGhlIGV5ZSBtb3ZlcyBob3Jpem9udGFsbHkgYWNyb3NzIGVhY2ggdmlzaWJsZQorICAgKiAgIHZlcnRpY2FsIHN1YnBpeGVscyBhcyB0aGUgZXllIG1vdmVzIGhvcml6b250YWxseSBhY3Jvc3MgZWFjaCB2aXNpYmxlCiAgICAqICAgcGl4ZWwuICBPbiBkZXZpY2VzIHdoZXJlIHdlIGNhbiBiZSBjZXJ0YWluIHRoaXMgY2hhcmFjdGVyaXN0aWMgaXMKLSAgICogICBwcmVzZW50IGEgcmFzdGVyaXplciBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN1Yi1waXhlbHMgdG8gYWRkCisgICAqICAgcHJlc2VudCBhIHJhc3Rlcml6ZXIgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzdWJwaXhlbHMgdG8gYWRkCiAgICAqICAgaW5jcmVtZW50cyBvZiB3ZWlnaHQuICBJbiBXZXN0ZXJuIHdyaXRpbmcgc3lzdGVtcyB0aGlzIHR1cm5zIG91dCB0bwogICAgKiAgIGJlIHRoZSBtb3JlIGNyaXRpY2FsIGRpcmVjdGlvbiBhbnl3YXk7IHRoZSB3ZWlnaHRzIGFuZCBzcGFjaW5nIG9mCiAgICAqICAgdmVydGljYWwgc3RlbXMgKHNlZSBhYm92ZSkgYXJlIGNlbnRyYWwgdG8gQXJtZW5pYW4sIEN5cmlsbGljLCBHcmVlaywKQEAgLTM3MSw2ICszNzEsMTMgQEAKICAgICogICBgZnJlZXR5cGUnIGlmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBpcyBkZWZpbmVkLCBhbmQgYGFkb2JlJwogICAgKiAgIG90aGVyd2lzZS4KICAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGBhZG9iZScgb3IgYGZyZWV0eXBlJykuCisgICAqCisgICAqIEBleGFtcGxlOgogICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gc2VsZWN0IEFkb2JlJ3MgaGludGluZwogICAgKiAgIGVuZ2luZSBmb3IgdGhlIGBjZmYnIG1vZHVsZSAob21pdHRpbmcgdGhlIGVycm9yIGhhbmRsaW5nKS4KICAgICoKQEAgLTM4NSwxMiArMzkyLDYgQEAKICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpbnRpbmctZW5naW5lIiwgJmhpbnRpbmdfZW5naW5lICk7CiAgICAqICAgfQogICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgotICAgKgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAotICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgYGFkb2JlJyBvciBgZnJlZXR5cGUnKS4KLSAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuNC4xMiAoZm9yIGBjZmYnIG1vZHVsZSkKICAgICoKQEAgLTQyOCw3ICs0MjksNyBAQAogICAgKiAgIGF0IHNtYWxsZXIgc2l6ZXMuCiAgICAqCiAgICAqICAgQnkgZGVmYXVsdCwgdGhlIEFkb2JlIGVuZ2luZXMgZm9yIENGRiwgVHlwZX4xLCBhbmQgQ0lEIGZvbnRzIGRhcmtlbgotICAgKiAgIHN0ZW1zIGF0IHNtYWxsZXIgc2l6ZXMsIHJlZ2FyZGxlc3Mgb2YgaGludGluZywgdG8gZW5oYW5jZSBjb250cmFzdC4gCisgICAqICAgc3RlbXMgYXQgc21hbGxlciBzaXplcywgcmVnYXJkbGVzcyBvZiBoaW50aW5nLCB0byBlbmhhbmNlIGNvbnRyYXN0LgogICAgKiAgIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSwgc3RlbSBkYXJrZW5pbmcgZ2V0cyBzd2l0Y2hlZCBvZmYuCiAgICAqCiAgICAqICAgRm9yIHRoZSBhdXRvLWhpbnRlciwgc3RlbS1kYXJrZW5pbmcgaXMgZXhwZXJpbWVudGFsIGN1cnJlbnRseSBhbmQKQEAgLTQ0Miw2ICs0NDMsMTUgQEAKICAgICogICBOb3RlIHRoYXQgc3RlbSBkYXJrZW5pbmcgaXMgbmV2ZXIgYXBwbGllZCBpZiBARlRfTE9BRF9OT19TQ0FMRSBpcwogICAgKiAgIHNldC4KICAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIDEgYW5kIDAgZm9yIGBvbicgYW5kIGBvZmYnLCByZXNwZWN0aXZlbHkpLgorICAgKiAgIEl0IGNhbiBhbHNvIGJlIHNldCBwZXIgZmFjZSB1c2luZyBARlRfRmFjZV9Qcm9wZXJ0aWVzIHdpdGgKKyAgICogICBARlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HLgorICAgKgorICAgKiBAZXhhbXBsZToKICAgICogICB7CiAgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwogICAgKiAgICAgRlRfQm9vbCAgICAgbm9fc3RlbV9kYXJrZW5pbmcgPSBUUlVFOwpAQCAtNDUzLDE0ICs0NjMsNiBAQAogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8tc3RlbS1kYXJrZW5pbmciLCAmbm9fc3RlbV9kYXJrZW5pbmcgKTsKICAgICogICB9CiAgICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KLSAgICogICBJdCBjYW4gYWxzbyBiZSBzZXQgcGVyIGZhY2UgdXNpbmcgQEZUX0ZhY2VfUHJvcGVydGllcyB3aXRoCi0gICAqICAgQEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORy4KLSAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuNC4xMiAoZm9yIGBjZmYnIG1vZHVsZSkKICAgICoKQEAgLTQ5MiwyMiArNDk0LDggQEAKICAgICogICBjb250cm9sIHBvaW50cyBjYW4gYmUgc2V0IHdpdGggdGhlIG1hY3JvCiAgICAqICAgYENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJTJzsgdGhlIENGRiwgVHlwZX4xLCBhbmQgQ0lECiAgICAqICAgZHJpdmVycyBzaGFyZSB0aGVzZSB2YWx1ZXMuICBBdCBydW50aW1lLCB0aGUgY29udHJvbCBwb2ludHMgY2FuIGJlCi0gICAqICAgY2hhbmdlZCB1c2luZyB0aGUgYGRhcmtlbmluZy1wYXJhbWV0ZXJzJyBwcm9wZXJ0eSwgYXMgdGhlIGZvbGxvd2luZwotICAgKiAgIGV4YW1wbGUgZGVtb25zdHJhdGVzIGZvciB0aGUgVHlwZX4xIGRyaXZlci4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwotICAgKiAgICAgRlRfSW50ICAgICAgZGFya2VuX3BhcmFtc1s4XSA9IHsgIDUwMCwgMzAwLCAgIC8vIHgxLCB5MQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMjAwLCAgIC8vIHgyLCB5MgotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwMCwgMTAwLCAgIC8vIHgzLCB5MwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMCwgICAwIH07IC8vIHg0LCB5NAotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgInR5cGUxIiwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhcmtlbmluZy1wYXJhbWV0ZXJzIiwgZGFya2VuX3BhcmFtcyApOwotICAgKiAgIH0KKyAgICogICBjaGFuZ2VkIHVzaW5nIHRoZSBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5IChzZWUgdGhlIGV4YW1wbGUKKyAgICogICBiZWxvdyB0aGF0IGRlbW9uc3RyYXRlcyB0aGlzIGZvciB0aGUgVHlwZX4xIGRyaXZlcikuCiAgICAqCiAgICAqICAgVGhlIHh+dmFsdWVzIGdpdmUgdGhlIHN0ZW0gd2lkdGgsIGFuZCB0aGUgeX52YWx1ZXMgdGhlIGRhcmtlbmluZwogICAgKiAgIGFtb3VudC4gIFRoZSB1bml0IGlzIDEwMDB0aCBvZiBwaXhlbHMuICBBbGwgY29vcmRpbmF0ZSB2YWx1ZXMgbXVzdCBiZQpAQCAtNTMxLDYgKzUxOSwyMSBAQAogICAgKiAgICAgdHlwZTE6ZGFya2VuaW5nLXBhcmFtZXRlcnM9NTAwLDMwMCwxMDAwLDIwMCwxNTAwLDEwMCwyMDAwLDAKICAgICogICB9CiAgICAqCisgICAqIEBleGFtcGxlOgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9JbnQgICAgICBkYXJrZW5fcGFyYW1zWzhdID0geyAgNTAwLCAzMDAsICAgLy8geDEsIHkxCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwLCAyMDAsICAgLy8geDIsIHkyCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwLCAxMDAsICAgLy8geDMsIHkzCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAgIDAgfTsgLy8geDQsIHk0CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHlwZTEiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFya2VuaW5nLXBhcmFtZXRlcnMiLCBkYXJrZW5fcGFyYW1zICk7CisgICAqICAgfQorICAgKgogICAgKiBAc2luY2U6CiAgICAqICAgMi41LjEgKGZvciBgY2ZmJyBtb2R1bGUpCiAgICAqCkBAIC01OTQsNiArNTk3LDEzIEBACiAgICAqCiAgICAqICAgSWYgYG5vLWxvbmctZmFtaWx5LW5hbWVzJyBpcyBzZXQsIHRoaXMgZmVhdHVyZSBnZXRzIHN3aXRjaGVkIG9mZi4KICAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIDEgYW5kIDAgZm9yIGBvbicgYW5kIGBvZmYnLCByZXNwZWN0aXZlbHkpLgorICAgKgorICAgKiBAZXhhbXBsZToKICAgICogICB7CiAgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwogICAgKiAgICAgRlRfQm9vbCAgICAgbm9fbG9uZ19mYW1pbHlfbmFtZXMgPSBUUlVFOwpAQCAtNjA2LDEyICs2MTYsNiBAQAogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9fbG9uZ19mYW1pbHlfbmFtZXMgKTsKICAgICogICB9CiAgICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KLSAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuOAogICAgKi8KQEAgLTc3OCw2ICs3ODIsMTMgQEAKICAgICogICBjaG9zZW4gaW50ZXJwcmV0ZXIsIGl0IHNpbXBseSBpZ25vcmVzIGluc3RydWN0aW9ucyBvbiB2ZXJ0aWNhbCBzdGVtcwogICAgKiAgIHRvIGFycml2ZSBhdCB2ZXJ5IHNpbWlsYXIgcmVzdWx0cy4KICAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGAzNScsIGAzOCcsIG9yIGA0MCcpLgorICAgKgorICAgKiBAZXhhbXBsZToKICAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGRlYWN0aXZhdGUgc3VicGl4ZWwKICAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgogICAgKgpAQCAtNzk0LDEyICs4MDUsNiBAQAogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJwcmV0ZXJfdmVyc2lvbiApOwogICAgKiAgIH0KICAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKLSAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGAzNScsIGAzOCcsIG9yIGA0MCcpLgotICAgKgogICAgKiBAc2luY2U6CiAgICAqICAgMi41CiAgICAqLwpAQCAtODM0LDYgKzgzOSw3IEBACiAgICAqICAgdGhlIGF1dG8taGludGVyIHNvIHRoYXQgdGhlIGdsb2JhbCBhbmFseXNpcyBvZiB0aGUgZm9udCBzaGFwZXMKICAgICogICBhY3R1YWxseSB1c2VzIHRoZSBtb2RpZmllZCBtYXBwaW5nLgogICAgKgorICAgKiBAZXhhbXBsZToKICAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGFjY2VzcyBpdCAob21pdHRpbmcKICAgICogICB0aGUgZXJyb3IgaGFuZGxpbmcpLgogICAgKgpAQCAtMTAyNiwxNyArMTAzMiw2IEBACiAgICAqICAgQEZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSy4gIFVzaW5nIHRoZSBgZmFsbGJhY2stc2NyaXB0JyBwcm9wZXJ0eSwKICAgICogICB0aGlzIGZhbGxiYWNrIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgogICAgKgotICAgKiAgIHsKLSAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAqICAgICBGVF9VSW50ICAgICBmYWxsYmFja19zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOwotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFsbGJhY2stc2NyaXB0IiwgJmZhbGxiYWNrX3NjcmlwdCApOwotICAgKiAgIH0KLSAgICoKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKQEAgLTEwNDgsNiArMTA0MywxOCBAQAogICAgKiAgIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSBidXQgbm90IGxvYWRlZCBhbnkgZ2x5cGggKHVzaW5nIHRoZQogICAgKiAgIGF1dG8taGludGVyKSwgYSBjaGFuZ2Ugb2YgdGhlIGZhbGxiYWNrIHNjcmlwdCB3aWxsIGFmZmVjdCB0aGlzIGZhY2UuCiAgICAqCisgICAqIEBleGFtcGxlOgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9VSW50ICAgICBmYWxsYmFja19zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFsbGJhY2stc2NyaXB0IiwgJmZhbGxiYWNrX3NjcmlwdCApOworICAgKiAgIH0KKyAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuNC4xMQogICAgKgpAQCAtMTA3NCwxNyArMTA4MSw2IEBACiAgICAqICAgQnkgZGVmYXVsdCwgdGhpcyBpcyBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU4uICBVc2luZyB0aGUKICAgICogICBgZGVmYXVsdC1zY3JpcHQnIHByb3BlcnR5LCB0aGlzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGNoYW5nZWQuCiAgICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgICogICAgIEZUX1VJbnQgICAgIGRlZmF1bHRfc2NyaXB0ID0gRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJhdXRvZml0dGVyIiwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQtc2NyaXB0IiwgJmRlZmF1bHRfc2NyaXB0ICk7Ci0gICAqICAgfQotICAgKgogICAgKiBAbm90ZToKICAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgogICAgKgpAQCAtMTA5Niw2ICsxMDkyLDE4IEBACiAgICAqICAgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGJ1dCBub3QgbG9hZGVkIGFueSBnbHlwaCAodXNpbmcgdGhlCiAgICAqICAgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZGVmYXVsdCBzY3JpcHQgd2lsbCBhZmZlY3QgdGhpcyBmYWNlLgogICAgKgorICAgKiBAZXhhbXBsZToKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfVUludCAgICAgZGVmYXVsdF9zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdC1zY3JpcHQiLCAmZGVmYXVsdF9zY3JpcHQgKTsKKyAgICogICB9CisgICAqCiAgICAqIEBzaW5jZToKICAgICogICAyLjUuMwogICAgKgpAQCAtMTExNCw2ICsxMTIyLDEzIEBACiAgICAqICAgdGhpcyBwcm9wZXJ0eSB0byBpbXByb3ZlIHRoZSBsZWdpYmlsaXR5IG9mIHNtYWxsIGZvbnQgc2l6ZXMgaWYKICAgICogICBuZWNlc3NhcnkuCiAgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgU2V0IHRoaXMgdmFsdWUgcmlnaHQgYWZ0ZXIgY2FsbGluZyBARlRfU2V0X0NoYXJfU2l6ZSwgYnV0IGJlZm9yZQorICAgKiAgIGxvYWRpbmcgYW55IGdseXBoICh1c2luZyB0aGUgYXV0by1oaW50ZXIpLgorICAgKgorICAgKiBAZXhhbXBsZToKICAgICogICB7CiAgICAqICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgbGlicmFyeTsKICAgICogICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICBmYWNlOwpAQCAtMTEzMSwxMiArMTE0Niw2IEBACiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNyZWFzZS14LWhlaWdodCIsICZwcm9wICk7CiAgICAqICAgfQogICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgotICAgKgotICAgKiAgIFNldCB0aGlzIHZhbHVlIHJpZ2h0IGFmdGVyIGNhbGxpbmcgQEZUX1NldF9DaGFyX1NpemUsIGJ1dCBiZWZvcmUKLSAgICogICBsb2FkaW5nIGFueSBnbHlwaCAodXNpbmcgdGhlIGF1dG8taGludGVyKS4KLSAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuNC4xMQogICAgKgpAQCAtMTE3OSwxOSArMTE4OCw3IEBACiAgICAqICAgVG8gZmluZCBvdXQgYSBnbHlwaCdzIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMKICAgICogICBwYXJhbWV0ZXIgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLgogICAgKgotICAgKiAgIEJ5IGRlZmF1bHQsIHdhcnBpbmcgaXMgb2ZmLiAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRvIHN3aXRjaCBvbgotICAgKiAgIHdhcnBpbmcgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgICogICAgIEZUX0Jvb2wgICAgIHdhcnBpbmcgPSAxOwotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FycGluZyIsICZ3YXJwaW5nICk7Ci0gICAqICAgfQorICAgKiAgIEJ5IGRlZmF1bHQsIHdhcnBpbmcgaXMgb2ZmLgogICAgKgogICAgKiBAbm90ZToKICAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgpAQCAtMTIwNyw2ICsxMjA0LDIwIEBACiAgICAqICAgY2hhbmdlIGl0cyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nIGFueSBmYWNlLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkCiAgICAqICAgcmVsb2FkIGFsbCBmYWNlcyB0aGF0IGdldCBhdXRvLWhpbnRlZCBpbiBgbm9ybWFsJyBoaW50aW5nIG1vZGUuCiAgICAqCisgICAqIEBleGFtcGxlOgorICAgKiAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gc3dpdGNoIG9uIHdhcnBpbmcgKG9taXR0aW5nIHRoZSBlcnJvcgorICAgKiAgIGhhbmRsaW5nKS4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfQm9vbCAgICAgd2FycGluZyA9IDE7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsICJ3YXJwaW5nIiwgJndhcnBpbmcgKTsKKyAgICogICB9CisgICAqCiAgICAqIEBzaW5jZToKICAgICogICAyLjYKICAgICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaAppbmRleCA4ZmZkMzQ2Li4zZDkxZWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCkBAIC0xLDU4ICsxLDU4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGVycmRlZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGVycmRlZi5oCisgKgorICogICBGcmVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBlcnJvcl9jb2RlX3ZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBFcnJvciBDb2RlIFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBBbGwgcG9zc2libGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgRnJlZVR5cGUgZnVuY3Rpb25zLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgbGlzdCBiZWxvdyBpcyB0YWtlbiB2ZXJiYXRpbSBmcm9tIHRoZSBmaWxlIGBmdGVycmRlZi5oJyAgICAgICAgICovCi0gIC8qICAgKGxvYWRlZCBhdXRvbWF0aWNhbGx5IGJ5IGluY2x1ZGluZyBgRlRfRlJFRVRZUEVfSCcpLiAgVGhlIGZpcnN0ICAgICAqLwotICAvKiAgIGFyZ3VtZW50IG9mIHRoZSBgRlRfRVJST1JfREVGXycgbWFjcm8gaXMgdGhlIGVycm9yIGxhYmVsOyBieSAgICAgICAgKi8KLSAgLyogICBkZWZhdWx0LCB0aGUgcHJlZml4IGBGVF9FcnJfJyBnZXRzIGFkZGVkIHNvIHRoYXQgeW91IGdldCBlcnJvciAgICAgICovCi0gIC8qICAgbmFtZXMgbGlrZSBgRlRfRXJyX0Nhbm5vdF9PcGVuX1Jlc291cmNlJy4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgICAqLwotICAvKiAgIHRoZSBlcnJvciBjb2RlLCBhbmQgdGhlIGxhc3QgYXJndW1lbnQgYW4gZXJyb3Igc3RyaW5nLCB3aGljaCBpcyBub3QgKi8KLSAgLyogICB1c2VkIGJ5IEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFdpdGhpbiB5b3VyIGFwcGxpY2F0aW9uIHlvdSBzaG91bGQgKm9ubHkqIHVzZSBlcnJvciBuYW1lcyBhbmQgICAgICAgKi8KLSAgLyogICAqbmV2ZXIqIGl0cyBudW1lcmljIHZhbHVlcyEgIFRoZSBsYXR0ZXIgbWlnaHQgKGFuZCBhY3R1YWxseSBkbykgICAgICovCi0gIC8qICAgY2hhbmdlIGluIGZvcnRoY29taW5nIEZyZWVUeXBlIHZlcnNpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBNYWNybyBgRlRfTk9FUlJPUkRFRl8nIGRlZmluZXMgYEZUX0Vycl9PaycsIHdoaWNoIGlzIGFsd2F5cyB6ZXJvLiAgICovCi0gIC8qICAgU2VlIHRoZSBgRXJyb3IgRW51bWVyYXRpb25zJyBzdWJzZWN0aW9uIGhvdyB0byBhdXRvbWF0aWNhbGx5ICAgICAgICAqLwotICAvKiAgIGdlbmVyYXRlIGEgbGlzdCBvZiBlcnJvciBzdHJpbmdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICBlcnJvcl9jb2RlX3ZhbHVlcworICAgKgorICAgKiBAdGl0bGU6CisgICAqICBFcnJvciBDb2RlIFZhbHVlcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICBBbGwgcG9zc2libGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgRnJlZVR5cGUgZnVuY3Rpb25zLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICBUaGUgbGlzdCBiZWxvdyBpcyB0YWtlbiB2ZXJiYXRpbSBmcm9tIHRoZSBmaWxlIGBmdGVycmRlZi5oJworICAgKiAgKGxvYWRlZCBhdXRvbWF0aWNhbGx5IGJ5IGluY2x1ZGluZyBgRlRfRlJFRVRZUEVfSCcpLiAgVGhlIGZpcnN0CisgICAqICBhcmd1bWVudCBvZiB0aGUgYEZUX0VSUk9SX0RFRl8nIG1hY3JvIGlzIHRoZSBlcnJvciBsYWJlbDsgYnkKKyAgICogIGRlZmF1bHQsIHRoZSBwcmVmaXggYEZUX0Vycl8nIGdldHMgYWRkZWQgc28gdGhhdCB5b3UgZ2V0IGVycm9yCisgICAqICBuYW1lcyBsaWtlIGBGVF9FcnJfQ2Fubm90X09wZW5fUmVzb3VyY2UnLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgKiAgdGhlIGVycm9yIGNvZGUsIGFuZCB0aGUgbGFzdCBhcmd1bWVudCBhbiBlcnJvciBzdHJpbmcsIHdoaWNoIGlzIG5vdAorICAgKiAgdXNlZCBieSBGcmVlVHlwZS4KKyAgICoKKyAgICogIFdpdGhpbiB5b3VyIGFwcGxpY2F0aW9uIHlvdSBzaG91bGQgKm9ubHkqIHVzZSBlcnJvciBuYW1lcyBhbmQKKyAgICogICpuZXZlciogaXRzIG51bWVyaWMgdmFsdWVzISAgVGhlIGxhdHRlciBtaWdodCAoYW5kIGFjdHVhbGx5IGRvKQorICAgKiAgY2hhbmdlIGluIGZvcnRoY29taW5nIEZyZWVUeXBlIHZlcnNpb25zLgorICAgKgorICAgKiAgTWFjcm8gYEZUX05PRVJST1JERUZfJyBkZWZpbmVzIGBGVF9FcnJfT2snLCB3aGljaCBpcyBhbHdheXMgemVyby4KKyAgICogIFNlZSB0aGUgYEVycm9yIEVudW1lcmF0aW9ucycgc3Vic2VjdGlvbiBob3cgdG8gYXV0b21hdGljYWxseQorICAgKiAgZ2VuZXJhdGUgYSBsaXN0IG9mIGVycm9yIHN0cmluZ3MuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRXJyX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0Vycl9YWFgKKyAgICoKKyAgICovCiAKICAgLyogZ2VuZXJpYyBlcnJvcnMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCmluZGV4IGY2ZWU1YzIuLmQ2MDJiZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgKQEAgLTEsMTAxICsxLDEwMSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRlcnJvcnMuaAorICoKKyAqICAgRnJlZVR5cGUgZXJyb3IgY29kZSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBlcnJvcl9lbnVtZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBFcnJvciBFbnVtZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBIb3cgdG8gaGFuZGxlIGVycm9ycyBhbmQgZXJyb3Igc3RyaW5ncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgaGVhZGVyIGZpbGUgYGZ0ZXJyb3JzLmgnICh3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5ICAgICovCi0gIC8qICAgYGZyZWV0eXBlLmgnIGRlZmluZXMgdGhlIGhhbmRsaW5nIG9mIEZyZWVUeXBlJ3MgZW51bWVyYXRpb24gICAgICAgICAqLwotICAvKiAgIGNvbnN0YW50cy4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgZXJyb3IgbWVzc2FnZSBzdHJpbmdzICAgKi8KLSAgLyogICB3aXRoIGEgc21hbGwgbWFjcm8gdHJpY2sgZXhwbGFpbmVkIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICpFcnJvciogKkZvcm1hdHMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBjYW4gYmUgICAqLwotICAvKiAgIGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnIGluIG9yZGVyIHRvIG1ha2UgdGhlIGhpZ2hlciBieXRlIGluZGljYXRlICAgKi8KLSAgLyogICB0aGUgbW9kdWxlIHdoZXJlIHRoZSBlcnJvciBoYXMgaGFwcGVuZWQgKHRoaXMgaXMgbm90IGNvbXBhdGlibGUgICAgICovCi0gIC8qICAgd2l0aCBzdGFuZGFyZCBidWlsZHMgb2YgRnJlZVR5cGV+MiwgaG93ZXZlcikuICBTZWUgdGhlIGZpbGUgICAgICAgICAqLwotICAvKiAgIGBmdG1vZGVyci5oJyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgKkVycm9yKiAqTWVzc2FnZSogKlN0cmluZ3MqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBFcnJvciBkZWZpbml0aW9ucyBhcmUgc2V0IHVwIHdpdGggc3BlY2lhbCBtYWNyb3MgdGhhdCBhbGxvdyBjbGllbnQgICovCi0gIC8qICAgYXBwbGljYXRpb25zIHRvIGJ1aWxkIGEgdGFibGUgb2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzLiAgVGhlICAgICAgICAqLwotICAvKiAgIHN0cmluZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiBhIG5vcm1hbCBidWlsZCBvZiBGcmVlVHlwZX4yIHRvIHNhdmUgICAgKi8KLSAgLyogICBzcGFjZSAobW9zdCBjbGllbnQgYXBwbGljYXRpb25zIGRvIG5vdCB1c2UgdGhlbSkuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRvIGRvIHNvLCB5b3UgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlIGluY2x1ZGluZyAgKi8KLSAgLyogICB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mICAgICovCi0gIC8qICAgdGhlIGVycm9yIGxpc3QuICBJdCBpcyBmb2xsb3dlZCBieSBzZXZlcmFsIEZUX0VSUk9SX0RFRiBjYWxscy4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBGVF9FUlJPUl9ERUYoIGUsIHYsIHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICBgZScgaXMgdGhlIGVycm9yICAqLwotICAvKiAgIGNvZGUgaWRlbnRpZmllciAoZS5nLiwgYEludmFsaWRfQXJndW1lbnQnKSwgYHYnIGlzIHRoZSBlcnJvcidzICAgICAgKi8KLSAgLyogICBudW1lcmljYWwgdmFsdWUsIGFuZCBgcycgaXMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3Igc3RyaW5nLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VSUk9SX0VORF9MSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGlzIG1hY3JvIGVuZHMgdGhlIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gdW5kZWZpbmUgYEZURVJST1JTX0hfJyBiZWZvcmUgI2luY2x1ZGluZyAgKi8KLSAgLyogICB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgI3VuZGVmIEZURVJST1JTX0hfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICNkZWZpbmUgRlRfRVJST1JERUYoIGUsIHYsIHMgKSAgeyBlLCBzIH0sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAjZGVmaW5lIEZUX0VSUk9SX1NUQVJUX0xJU1QgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgI2RlZmluZSBGVF9FUlJPUl9FTkRfTElTVCAgICAgICB7IDAsIE5VTEwgfSB9OyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjb25zdCBzdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaW50ICAgICAgICAgIGVycl9jb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIGNvbnN0IGNoYXIqICBlcnJfbXNnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgfSBmdF9lcnJvcnNbXSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAjaW5jbHVkZSBGVF9FUlJPUlNfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTm90ZSB0aGF0IGBGVF9FcnJfT2snIGlzIF9ub3RfIGRlZmluZWQgd2l0aCBgRlRfRVJST1JERUYnIGJ1dCB3aXRoICAqLwotICAvKiAgIGBGVF9OT0VSUk9SREVGJzsgaXQgaXMgYWx3YXlzIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICBlcnJvcl9lbnVtZXJhdGlvbnMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgRXJyb3IgRW51bWVyYXRpb25zCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogIEhvdyB0byBoYW5kbGUgZXJyb3JzIGFuZCBlcnJvciBzdHJpbmdzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICBUaGUgaGVhZGVyIGZpbGUgYGZ0ZXJyb3JzLmgnICh3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5CisgICAqICBgZnJlZXR5cGUuaCcgZGVmaW5lcyB0aGUgaGFuZGxpbmcgb2YgRnJlZVR5cGUncyBlbnVtZXJhdGlvbgorICAgKiAgY29uc3RhbnRzLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBnZW5lcmF0ZSBlcnJvciBtZXNzYWdlIHN0cmluZ3MKKyAgICogIHdpdGggYSBzbWFsbCBtYWNybyB0cmljayBleHBsYWluZWQgYmVsb3cuCisgICAqCisgICAqICAqRXJyb3IqICpGb3JtYXRzKgorICAgKgorICAgKiAgVGhlIGNvbmZpZ3VyYXRpb24gbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBjYW4gYmUKKyAgICogIGRlZmluZWQgaW4gYGZ0b3B0aW9uLmgnIGluIG9yZGVyIHRvIG1ha2UgdGhlIGhpZ2hlciBieXRlIGluZGljYXRlCisgICAqICB0aGUgbW9kdWxlIHdoZXJlIHRoZSBlcnJvciBoYXMgaGFwcGVuZWQgKHRoaXMgaXMgbm90IGNvbXBhdGlibGUKKyAgICogIHdpdGggc3RhbmRhcmQgYnVpbGRzIG9mIEZyZWVUeXBlfjIsIGhvd2V2ZXIpLiAgU2VlIHRoZSBmaWxlCisgICAqICBgZnRtb2RlcnIuaCcgZm9yIG1vcmUgZGV0YWlscy4KKyAgICoKKyAgICogICpFcnJvciogKk1lc3NhZ2UqICpTdHJpbmdzKgorICAgKgorICAgKiAgRXJyb3IgZGVmaW5pdGlvbnMgYXJlIHNldCB1cCB3aXRoIHNwZWNpYWwgbWFjcm9zIHRoYXQgYWxsb3cgY2xpZW50CisgICAqICBhcHBsaWNhdGlvbnMgdG8gYnVpbGQgYSB0YWJsZSBvZiBlcnJvciBtZXNzYWdlIHN0cmluZ3MuICBUaGUKKyAgICogIHN0cmluZ3MgYXJlIG5vdCBpbmNsdWRlZCBpbiBhIG5vcm1hbCBidWlsZCBvZiBGcmVlVHlwZX4yIHRvIHNhdmUKKyAgICogIHNwYWNlIChtb3N0IGNsaWVudCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSB0aGVtKS4KKyAgICoKKyAgICogIFRvIGRvIHNvLCB5b3UgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlIGluY2x1ZGluZworICAgKiAgdGhpcyBmaWxlLgorICAgKgorICAgKiAgeworICAgKiAgICBGVF9FUlJPUl9TVEFSVF9MSVNUCisgICAqICB9CisgICAqCisgICAqICBUaGlzIG1hY3JvIGlzIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0byBkZWZpbmUgdGhlIHN0YXJ0IG9mCisgICAqICB0aGUgZXJyb3IgbGlzdC4gIEl0IGlzIGZvbGxvd2VkIGJ5IHNldmVyYWwgRlRfRVJST1JfREVGIGNhbGxzLgorICAgKgorICAgKiAgeworICAgKiAgICBGVF9FUlJPUl9ERUYoIGUsIHYsIHMgKQorICAgKiAgfQorICAgKgorICAgKiAgVGhpcyBtYWNybyBpcyBjYWxsZWQgdG8gZGVmaW5lIG9uZSBzaW5nbGUgZXJyb3IuICBgZScgaXMgdGhlIGVycm9yCisgICAqICBjb2RlIGlkZW50aWZpZXIgKGUuZy4sIGBJbnZhbGlkX0FyZ3VtZW50JyksIGB2JyBpcyB0aGUgZXJyb3IncworICAgKiAgbnVtZXJpY2FsIHZhbHVlLCBhbmQgYHMnIGlzIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHN0cmluZy4KKyAgICoKKyAgICogIHsKKyAgICogICAgRlRfRVJST1JfRU5EX0xJU1QKKyAgICogIH0KKyAgICoKKyAgICogIFRoaXMgbWFjcm8gZW5kcyB0aGUgbGlzdC4KKyAgICoKKyAgICogIEFkZGl0aW9uYWxseSwgeW91IGhhdmUgdG8gdW5kZWZpbmUgYEZURVJST1JTX0hfJyBiZWZvcmUgI2luY2x1ZGluZworICAgKiAgdGhpcyBmaWxlLgorICAgKgorICAgKiAgSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlLgorICAgKgorICAgKiAgeworICAgKiAgICAjdW5kZWYgRlRFUlJPUlNfSF8KKyAgICogICAgI2RlZmluZSBGVF9FUlJPUkRFRiggZSwgdiwgcyApICB7IGUsIHMgfSwKKyAgICogICAgI2RlZmluZSBGVF9FUlJPUl9TVEFSVF9MSVNUICAgICB7CisgICAqICAgICNkZWZpbmUgRlRfRVJST1JfRU5EX0xJU1QgICAgICAgeyAwLCBOVUxMIH0gfTsKKyAgICoKKyAgICogICAgY29uc3Qgc3RydWN0CisgICAqICAgIHsKKyAgICogICAgICBpbnQgICAgICAgICAgZXJyX2NvZGU7CisgICAqICAgICAgY29uc3QgY2hhciogIGVycl9tc2c7CisgICAqICAgIH0gZnRfZXJyb3JzW10gPQorICAgKgorICAgKiAgICAjaW5jbHVkZSBGVF9FUlJPUlNfSAorICAgKiAgfQorICAgKgorICAgKiAgTm90ZSB0aGF0IGBGVF9FcnJfT2snIGlzIF9ub3RfIGRlZmluZWQgd2l0aCBgRlRfRVJST1JERUYnIGJ1dCB3aXRoCisgICAqICBgRlRfTk9FUlJPUkRFRic7IGl0IGlzIGFsd2F5cyB6ZXJvLgorICAgKgorICAgKi8KIAogICAvKiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggY2M4NmVmYS4uM2YzZDQxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRmbnRmbXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBmb250IGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRmbnRmbXQuaAorICoKKyAqICAgU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGZvbnQgZm9ybWF0cy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVEZOVEZNVF9IXwpAQCAtMzIsNDkgKzMyLDQ5IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9udF9mb3JtYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRm9udCBGb3JtYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgR2V0dGluZyB0aGUgZm9udCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIHNpbmdsZSBmdW5jdGlvbiBpbiB0aGlzIHNlY3Rpb24gY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBmb250ICAgICAqLwotICAvKiAgIGZvcm1hdC4gIE5vdGUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBuZWVkZWQgbm9ybWFsbHk7ICAgICAgICAgKi8KLSAgLyogICBob3dldmVyLCB0aGVyZSBhcmUgc3BlY2lhbCBjYXNlcyAobGlrZSBpbiBQREYgZGV2aWNlcykgd2hlcmUgaXQgaXMgICovCi0gIC8qICAgaW1wb3J0YW50IHRvIGRpZmZlcmVudGlhdGUsIGluIHNwaXRlIG9mIEZyZWVUeXBlJ3MgdW5pZm9ybSBBUEkuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogIGZvbnRfZm9ybWF0cworICAgKgorICAgKiBAdGl0bGU6CisgICAqICBGb250IEZvcm1hdHMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgR2V0dGluZyB0aGUgZm9udCBmb3JtYXQuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogIFRoZSBzaW5nbGUgZnVuY3Rpb24gaW4gdGhpcyBzZWN0aW9uIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgZm9udAorICAgKiAgZm9ybWF0LiAgTm90ZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgbm90IG5lZWRlZCBub3JtYWxseTsKKyAgICogIGhvd2V2ZXIsIHRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzIChsaWtlIGluIFBERiBkZXZpY2VzKSB3aGVyZSBpdCBpcworICAgKiAgaW1wb3J0YW50IHRvIGRpZmZlcmVudGlhdGUsIGluIHNwaXRlIG9mIEZyZWVUeXBlJ3MgdW5pZm9ybSBBUEkuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGVF9HZXRfRm9udF9Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZm9ybWF0IG9mIGEgZ2l2ZW4gZmFjZS4gIFBvc3NpYmxlICAgICovCi0gIC8qICAgdmFsdWVzIGFyZSBgVHJ1ZVR5cGUnLCBgVHlwZX4xJywgYEJERicsIGBQQ0YnLCBgVHlwZX40MicsICAgICAgICAgICAqLwotICAvKiAgIGBDSUR+VHlwZX4xJywgYENGRicsIGBQRlInLCBhbmQgYFdpbmRvd3N+Rk5UJy4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdWl0YWJsZSB0byBiZSB1c2VkIGFzIGFuIFgxMSBGT05UX1BST1BFUlRZLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgSW5wdXQgZmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEZvbnQgZm9ybWF0IHN0cmluZy4gIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBgRlRfR2V0X1gxMV9Gb250X0Zvcm1hdCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgRlRfR2V0X0ZvbnRfRm9ybWF0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogIFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBmb3JtYXQgb2YgYSBnaXZlbiBmYWNlLiAgUG9zc2libGUKKyAgICogIHZhbHVlcyBhcmUgYFRydWVUeXBlJywgYFR5cGV+MScsIGBCREYnLCBgUENGJywgYFR5cGV+NDInLAorICAgKiAgYENJRH5UeXBlfjEnLCBgQ0ZGJywgYFBGUicsIGFuZCBgV2luZG93c35GTlQnLgorICAgKgorICAgKiAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdWl0YWJsZSB0byBiZSB1c2VkIGFzIGFuIFgxMSBGT05UX1BST1BFUlRZLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICBmYWNlIDo6CisgICAqICAgIElucHV0IGZhY2UgaGFuZGxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgRm9udCBmb3JtYXQgc3RyaW5nLiAgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgKgorICAgKiBAbm90ZToKKyAgICogIEEgZGVwcmVjYXRlZCBuYW1lIGZvciB0aGUgc2FtZSBmdW5jdGlvbiBpcworICAgKiAgYEZUX0dldF9YMTFfRm9udF9Gb3JtYXQnLgorICAgKi8KICAgRlRfRVhQT1JUKCBjb25zdCBjaGFyKiApCiAgIEZUX0dldF9Gb250X0Zvcm1hdCggRlRfRmFjZSAgZmFjZSApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaAppbmRleCA5YjU0ZmM4Li42MDVmZjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Z2FzcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Z2FzcC5oCisgKgorICogICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUR0FTUF9IXwpAQCAtMjksNiArMjksOSBAQAogI2VuZGlmCiAKIAorRlRfQkVHSU5fSEVBREVSCisKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBzZWN0aW9uOgpAQCAtOTgsNyArMTAxLDcgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiBAZnVuYzoKKyAgICogQGZ1bmN0aW9uOgogICAgKiAgIEZUX0dldF9HYXNwCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTEwNyw5ICsxMTAsMTEgQEAKICAgICogICBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZS4KICAgICoKICAgICogQGlucHV0OgotICAgKiAgIGZhY2UgOjogVGhlIHNvdXJjZSBmYWNlIGhhbmRsZS4KKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgc291cmNlIGZhY2UgaGFuZGxlLgogICAgKgotICAgKiAgIHBwZW0gOjogVGhlIHZlcnRpY2FsIGNoYXJhY3RlciBwaXhlbCBzaXplLgorICAgKiAgIHBwZW0gOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZS4KICAgICoKICAgICogQHJldHVybjoKICAgICogICBCaXQgZmxhZ3MgKHNlZSBARlRfR0FTUF9YWFgpLCBvciBARlRfR0FTUF9OT19UQUJMRSBpZiB0aGVyZSBpcyBubwpAQCAtMTMxLDYgKzEzNiw4IEBACiAgIC8qICovCiAKIAorRlRfRU5EX0hFQURFUgorCiAjZW5kaWYgLyogRlRHQVNQX0hfICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGdseXBoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaAppbmRleCA1ZjNmYzAwLi5iZTE3YTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaApAQCAtMSwzMiArMSwzMiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRnbHlwaC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChzcGVjaWZpY2F0aW9uKS4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRnbHlwaC5oCisgKgorICogICBGcmVlVHlwZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGdseXBocyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2Ygc2V2ZXJhbCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgICAgKi8KLSAgLyogdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zIHRvIGVhc2lseSByZXRyaWV2ZSBnbHlwaCAgICAgICovCi0gIC8qIGJpdG1hcHMgYW5kIG91dGxpbmVzIGZyb20gYSBnaXZlbiBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBvcHRpb25hbCBpZiB5b3UgYXJlIHdyaXRpbmcgYSBmb250IHNlcnZlciAgICovCi0gIC8qIG9yIHRleHQgbGF5b3V0IGVuZ2luZSBvbiB0b3Agb2YgRnJlZVR5cGUuICBIb3dldmVyLCB0aGV5IGFyZSBwcmV0dHkgICAqLwotICAvKiBoYW5keSBmb3IgbWFueSBvdGhlciBzaW1wbGUgdXNlcyBvZiB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIHNldmVyYWwgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAqIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBlYXNpbHkgcmV0cmlldmUgZ2x5cGgKKyAgICogYml0bWFwcyBhbmQgb3V0bGluZXMgZnJvbSBhIGdpdmVuIGZhY2UuCisgICAqCisgICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgb3B0aW9uYWwgaWYgeW91IGFyZSB3cml0aW5nIGEgZm9udCBzZXJ2ZXIKKyAgICogb3IgdGV4dCBsYXlvdXQgZW5naW5lIG9uIHRvcCBvZiBGcmVlVHlwZS4gIEhvd2V2ZXIsIHRoZXkgYXJlIHByZXR0eQorICAgKiBoYW5keSBmb3IgbWFueSBvdGhlciBzaW1wbGUgdXNlcyBvZiB0aGUgbGlicmFyeS4KKyAgICoKKyAgICovCiAKIAogI2lmbmRlZiBGVEdMWVBIX0hfCkBAIC00Niw2NSArNDYsNjkgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR2x5cGggTWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR2VuZXJpYyBpbnRlcmZhY2UgdG8gbWFuYWdlIGluZGl2aWR1YWwgZ2x5cGggZGF0YS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRlZmluaXRpb25zIHVzZWQgdG8gbWFuYWdlIGdseXBoIGRhdGEgICAgICAgICovCi0gIC8qICAgIHRocm91Z2ggZ2VuZXJpYyBGVF9HbHlwaCBvYmplY3RzLiAgRWFjaCBvZiB0aGVtIGNhbiBjb250YWluIGEgICAgICAqLwotICAvKiAgICBiaXRtYXAsIGEgdmVjdG9yIG91dGxpbmUsIG9yIGV2ZW4gaW1hZ2VzIGluIG90aGVyIGZvcm1hdHMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgZ2x5cGhfbWFuYWdlbWVudAorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgR2x5cGggTWFuYWdlbWVudAorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgR2VuZXJpYyBpbnRlcmZhY2UgdG8gbWFuYWdlIGluZGl2aWR1YWwgZ2x5cGggZGF0YS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyB1c2VkIHRvIG1hbmFnZSBnbHlwaCBkYXRhCisgICAqICAgdGhyb3VnaCBnZW5lcmljIEZUX0dseXBoIG9iamVjdHMuICBFYWNoIG9mIHRoZW0gY2FuIGNvbnRhaW4gYQorICAgKiAgIGJpdG1hcCwgYSB2ZWN0b3Igb3V0bGluZSwgb3IgZXZlbiBpbWFnZXMgaW4gb3RoZXIgZm9ybWF0cy4KKyAgICoKKyAgICovCiAKIAogICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGEgcHJpdmF0ZSB0eXBlICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX0dseXBoX0NsYXNzXyAgRlRfR2x5cGhfQ2xhc3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgZ2VuZXJpYyBnbHlwaCBpbWFnZXMuICBJdCBpcyBhICAgKi8KLSAgLyogICAgcG9pbnRlciB0byB0aGUgQEZUX0dseXBoUmVjIHN0cnVjdHVyZSBhbmQgY2FuIGNvbnRhaW4gYSBnbHlwaCAgICAgICovCi0gIC8qICAgIGJpdG1hcCBvciBwb2ludGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdseXBoIG9iamVjdHMgYXJlIG5vdCBvd25lZCBieSB0aGUgbGlicmFyeS4gIFlvdSBtdXN0IHRodXMgcmVsZWFzZSAqLwotICAvKiAgICB0aGVtIG1hbnVhbGx5ICh0aHJvdWdoIEBGVF9Eb25lX0dseXBoKSBfYmVmb3JlXyBjYWxsaW5nICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0RvbmVfRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfR2x5cGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEhhbmRsZSB0byBhbiBvYmplY3QgdXNlZCB0byBtb2RlbCBnZW5lcmljIGdseXBoIGltYWdlcy4gIEl0IGlzIGEKKyAgICogICBwb2ludGVyIHRvIHRoZSBARlRfR2x5cGhSZWMgc3RydWN0dXJlIGFuZCBjYW4gY29udGFpbiBhIGdseXBoCisgICAqICAgYml0bWFwIG9yIHBvaW50ZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEdseXBoIG9iamVjdHMgYXJlIG5vdCBvd25lZCBieSB0aGUgbGlicmFyeS4gIFlvdSBtdXN0IHRodXMgcmVsZWFzZQorICAgKiAgIHRoZW0gbWFudWFsbHkgKHRocm91Z2ggQEZUX0RvbmVfR2x5cGgpIF9iZWZvcmVfIGNhbGxpbmcKKyAgICogICBARlRfRG9uZV9GcmVlVHlwZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX0dseXBoUmVjXyogIEZUX0dseXBoOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJvb3QgZ2x5cGggc3RydWN0dXJlIGNvbnRhaW5zIGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgcGx1cyBpdHMgICAgICovCi0gIC8qICAgIGFkdmFuY2Ugd2lkdGggaW4gMTYuMTYgZml4ZWQtcG9pbnQgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gdGhlIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2xhenogICA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoJ3MgY2xhc3MuICBQcml2YXRlLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb3JtYXQgIDo6IFRoZSBmb3JtYXQgb2YgdGhlIGdseXBoJ3MgaW1hZ2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFkdmFuY2UgOjogQSAxNi4xNiB2ZWN0b3IgdGhhdCBnaXZlcyB0aGUgZ2x5cGgncyBhZHZhbmNlIHdpZHRoLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfR2x5cGhSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSByb290IGdseXBoIHN0cnVjdHVyZSBjb250YWlucyBhIGdpdmVuIGdseXBoIGltYWdlIHBsdXMgaXRzCisgICAqICAgYWR2YW5jZSB3aWR0aCBpbiAxNi4xNiBmaXhlZC1wb2ludCBmb3JtYXQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIGNsYXp6IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGdseXBoJ3MgY2xhc3MuICBQcml2YXRlLgorICAgKgorICAgKiAgIGZvcm1hdCA6OgorICAgKiAgICAgVGhlIGZvcm1hdCBvZiB0aGUgZ2x5cGgncyBpbWFnZS4KKyAgICoKKyAgICogICBhZHZhbmNlIDo6CisgICAqICAgICBBIDE2LjE2IHZlY3RvciB0aGF0IGdpdmVzIHRoZSBnbHlwaCdzIGFkdmFuY2Ugd2lkdGguCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfR2x5cGhSZWNfCiAgIHsKICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnk7CkBAIC0xMTUsNDggKzExOSw1MiBAQAogICB9IEZUX0dseXBoUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQml0bWFwR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHVzZWQgdG8gbW9kZWwgYSBiaXRtYXAgZ2x5cGggaW1hZ2UuICBUaGlzIGlzICovCi0gIC8qICAgIGEgc3ViLWNsYXNzIG9mIEBGVF9HbHlwaCwgYW5kIGEgcG9pbnRlciB0byBARlRfQml0bWFwR2x5cGhSZWMuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0JpdG1hcEdseXBoCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhbiBvYmplY3QgdXNlZCB0byBtb2RlbCBhIGJpdG1hcCBnbHlwaCBpbWFnZS4gIFRoaXMgaXMKKyAgICogICBhIHN1Yi1jbGFzcyBvZiBARlRfR2x5cGgsIGFuZCBhIHBvaW50ZXIgdG8gQEZUX0JpdG1hcEdseXBoUmVjLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfQml0bWFwR2x5cGhSZWNfKiAgRlRfQml0bWFwR2x5cGg7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CaXRtYXBHbHlwaFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIGZvciBiaXRtYXAgZ2x5cGggaW1hZ2VzLiAgVGhpcyByZWFsbHkgaXMgYSAgICAgICAgKi8KLSAgLyogICAgYHN1Yi1jbGFzcycgb2YgQEZUX0dseXBoUmVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcm9vdCAgIDo6IFRoZSByb290IEBGVF9HbHlwaCBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZWZ0ICAgOjogVGhlIGxlZnQtc2lkZSBiZWFyaW5nLCBpLmUuLCB0aGUgaG9yaXpvbnRhbCBkaXN0YW5jZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgIGZyb20gdGhlIGN1cnJlbnQgcGVuIHBvc2l0aW9uIHRvIHRoZSBsZWZ0IGJvcmRlciBvZiB0aGUgICovCi0gIC8qICAgICAgICAgICAgICBnbHlwaCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG9wICAgIDo6IFRoZSB0b3Atc2lkZSBiZWFyaW5nLCBpLmUuLCB0aGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSAgICovCi0gIC8qICAgICAgICAgICAgICB0aGUgY3VycmVudCBwZW4gcG9zaXRpb24gdG8gdGhlIHRvcCBib3JkZXIgb2YgdGhlIGdseXBoICAqLwotICAvKiAgICAgICAgICAgICAgYml0bWFwLiAgVGhpcyBkaXN0YW5jZSBpcyBwb3NpdGl2ZSBmb3IgdXB3YXJkc355ISAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJpdG1hcCA6OiBBIGRlc2NyaXB0b3IgZm9yIHRoZSBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFlvdSBjYW4gdHlwZWNhc3QgYW4gQEZUX0dseXBoIHRvIEBGVF9CaXRtYXBHbHlwaCBpZiB5b3UgaGF2ZSAgICAgICAqLwotICAvKiAgICBgZ2x5cGgtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQJy4gIFRoaXMgbGV0cyB5b3UgYWNjZXNzICAgKi8KLSAgLyogICAgdGhlIGJpdG1hcCdzIGNvbnRlbnRzIGVhc2lseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgY29ycmVzcG9uZGluZyBwaXhlbCBidWZmZXIgaXMgYWx3YXlzIG93bmVkIGJ5IEBGVF9CaXRtYXBHbHlwaCAgKi8KLSAgLyogICAgYW5kIGlzIHRodXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHdpdGggaXQuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9CaXRtYXBHbHlwaFJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdXNlZCBmb3IgYml0bWFwIGdseXBoIGltYWdlcy4gIFRoaXMgcmVhbGx5IGlzIGEKKyAgICogICBgc3ViLWNsYXNzJyBvZiBARlRfR2x5cGhSZWMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcm9vdCA6OgorICAgKiAgICAgVGhlIHJvb3QgQEZUX0dseXBoIGZpZWxkcy4KKyAgICoKKyAgICogICBsZWZ0IDo6CisgICAqICAgICBUaGUgbGVmdC1zaWRlIGJlYXJpbmcsIGkuZS4sIHRoZSBob3Jpem9udGFsIGRpc3RhbmNlCisgICAqICAgICBmcm9tIHRoZSBjdXJyZW50IHBlbiBwb3NpdGlvbiB0byB0aGUgbGVmdCBib3JkZXIgb2YgdGhlCisgICAqICAgICBnbHlwaCBiaXRtYXAuCisgICAqCisgICAqICAgdG9wIDo6CisgICAqICAgICBUaGUgdG9wLXNpZGUgYmVhcmluZywgaS5lLiwgdGhlIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20KKyAgICogICAgIHRoZSBjdXJyZW50IHBlbiBwb3NpdGlvbiB0byB0aGUgdG9wIGJvcmRlciBvZiB0aGUgZ2x5cGgKKyAgICogICAgIGJpdG1hcC4gIFRoaXMgZGlzdGFuY2UgaXMgcG9zaXRpdmUgZm9yIHVwd2FyZHN+eSEKKyAgICoKKyAgICogICBiaXRtYXAgOjoKKyAgICogICAgIEEgZGVzY3JpcHRvciBmb3IgdGhlIGJpdG1hcC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IGNhbiB0eXBlY2FzdCBhbiBARlRfR2x5cGggdG8gQEZUX0JpdG1hcEdseXBoIGlmIHlvdSBoYXZlCisgICAqICAgYGdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCcuICBUaGlzIGxldHMgeW91IGFjY2VzcworICAgKiAgIHRoZSBiaXRtYXAncyBjb250ZW50cyBlYXNpbHkuCisgICAqCisgICAqICAgVGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgYnVmZmVyIGlzIGFsd2F5cyBvd25lZCBieSBARlRfQml0bWFwR2x5cGgKKyAgICogICBhbmQgaXMgdGh1cyBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgd2l0aCBpdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9CaXRtYXBHbHlwaFJlY18KICAgewogICAgIEZUX0dseXBoUmVjICByb290OwpAQCAtMTY3LDQ0ICsxNzUsNDYgQEAKICAgfSBGVF9CaXRtYXBHbHlwaFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGFuIG91dGxpbmUgZ2x5cGggaW1hZ2UuICBUaGlzICAqLwotICAvKiAgICBpcyBhIHN1Yi1jbGFzcyBvZiBARlRfR2x5cGgsIGFuZCBhIHBvaW50ZXIgdG8gQEZUX091dGxpbmVHbHlwaFJlYy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9PdXRsaW5lR2x5cGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGFuIG91dGxpbmUgZ2x5cGggaW1hZ2UuICBUaGlzCisgICAqICAgaXMgYSBzdWItY2xhc3Mgb2YgQEZUX0dseXBoLCBhbmQgYSBwb2ludGVyIHRvIEBGVF9PdXRsaW5lR2x5cGhSZWMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9PdXRsaW5lR2x5cGhSZWNfKiAgRlRfT3V0bGluZUdseXBoOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZUdseXBoUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCBmb3Igb3V0bGluZSAodmVjdG9yaWFsKSBnbHlwaCBpbWFnZXMuICBUaGlzICAgICAgICovCi0gIC8qICAgIHJlYWxseSBpcyBhIGBzdWItY2xhc3MnIG9mIEBGVF9HbHlwaFJlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJvb3QgICAgOjogVGhlIHJvb3QgQEZUX0dseXBoIGZpZWxkcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSA6OiBBIGRlc2NyaXB0b3IgZm9yIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWW91IGNhbiB0eXBlY2FzdCBhbiBARlRfR2x5cGggdG8gQEZUX091dGxpbmVHbHlwaCBpZiB5b3UgaGF2ZSAgICAgICovCi0gIC8qICAgIGBnbHlwaC0+Zm9ybWF0ID09IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FJy4gIFRoaXMgbGV0cyB5b3UgYWNjZXNzICAqLwotICAvKiAgICB0aGUgb3V0bGluZSdzIGNvbnRlbnQgZWFzaWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFzIHRoZSBvdXRsaW5lIGlzIGV4dHJhY3RlZCBmcm9tIGEgZ2x5cGggc2xvdCwgaXRzIGNvb3JkaW5hdGVzIGFyZSAqLwotICAvKiAgICBleHByZXNzZWQgbm9ybWFsbHkgaW4gMjYuNiBwaXhlbHMsIHVubGVzcyB0aGUgZmxhZyAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0xPQURfTk9fU0NBTEUgd2FzIHVzZWQgaW4gQEZUX0xvYWRfR2x5cGgoKSBvciBARlRfTG9hZF9DaGFyKCkuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgb3V0bGluZSdzIHRhYmxlcyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBvYmplY3QgYW5kIGFyZSAgICAgICAgKi8KLSAgLyogICAgZGVzdHJveWVkIHdpdGggaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9PdXRsaW5lR2x5cGhSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgZm9yIG91dGxpbmUgKHZlY3RvcmlhbCkgZ2x5cGggaW1hZ2VzLiAgVGhpcworICAgKiAgIHJlYWxseSBpcyBhIGBzdWItY2xhc3MnIG9mIEBGVF9HbHlwaFJlYy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICByb290IDo6CisgICAqICAgICBUaGUgcm9vdCBARlRfR2x5cGggZmllbGRzLgorICAgKgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgZGVzY3JpcHRvciBmb3IgdGhlIG91dGxpbmUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFlvdSBjYW4gdHlwZWNhc3QgYW4gQEZUX0dseXBoIHRvIEBGVF9PdXRsaW5lR2x5cGggaWYgeW91IGhhdmUKKyAgICogICBgZ2x5cGgtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORScuICBUaGlzIGxldHMgeW91IGFjY2VzcworICAgKiAgIHRoZSBvdXRsaW5lJ3MgY29udGVudCBlYXNpbHkuCisgICAqCisgICAqICAgQXMgdGhlIG91dGxpbmUgaXMgZXh0cmFjdGVkIGZyb20gYSBnbHlwaCBzbG90LCBpdHMgY29vcmRpbmF0ZXMgYXJlCisgICAqICAgZXhwcmVzc2VkIG5vcm1hbGx5IGluIDI2LjYgcGl4ZWxzLCB1bmxlc3MgdGhlIGZsYWcKKyAgICogICBARlRfTE9BRF9OT19TQ0FMRSB3YXMgdXNlZCBpbiBARlRfTG9hZF9HbHlwaCgpIG9yIEBGVF9Mb2FkX0NoYXIoKS4KKyAgICoKKyAgICogICBUaGUgb3V0bGluZSdzIHRhYmxlcyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBvYmplY3QgYW5kIGFyZQorICAgKiAgIGRlc3Ryb3llZCB3aXRoIGl0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX091dGxpbmVHbHlwaFJlY18KICAgewogICAgIEZUX0dseXBoUmVjICByb290OwpAQCAtMjEzLDExMyArMjIzLDE1MiBAQAogICB9IEZUX091dGxpbmVHbHlwaFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBleHRyYWN0IGEgZ2x5cGggaW1hZ2UgZnJvbSBhIHNsb3QuICBOb3RlIHRoYXQgICAqLwotICAvKiAgICB0aGUgY3JlYXRlZCBARlRfR2x5cGggb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQgd2l0aCBARlRfRG9uZV9HbHlwaC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzbG90ICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZ2x5cGggOjogQSBoYW5kbGUgdG8gdGhlIGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCZWNhdXNlIGAqYWdseXBoLT5hZHZhbmNlLngnIGFuZCAnKmFnbHlwaC0+YWR2YW5jZS55JyBhcmUgMTYuMTYgICAgKi8KLSAgLyogICAgZml4ZWQtcG9pbnQgbnVtYmVycywgYHNsb3QtPmFkdmFuY2UueCcgYW5kIGBzbG90LT5hZHZhbmNlLnknICAgICAgICovCi0gIC8qICAgICh3aGljaCBhcmUgaW4gMjYuNiBmaXhlZC1wb2ludCBmb3JtYXQpIG11c3QgYmUgaW4gdGhlIHJhbmdlICAgICAgICAqLwotICAvKiAgICBdLTMyNzY4OzMyNzY4Wy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X0dseXBoCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIGEgbmV3IGVtcHR5IGdseXBoIGltYWdlLiAgTm90ZSB0aGF0IHRoZQorICAgKiAgIGNyZWF0ZWQgQEZUX0dseXBoIG9iamVjdCBtdXN0IGJlIHJlbGVhc2VkIHdpdGggQEZUX0RvbmVfR2x5cGguCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqICAgZm9ybWF0IDo6CisgICAqICAgICBUaGUgZm9ybWF0IG9mIHRoZSBnbHlwaCdzIGltYWdlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFnbHlwaCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGdseXBoIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMAorICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX05ld19HbHlwaCggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgIEZUX0dseXBoX0Zvcm1hdCAgZm9ybWF0LAorICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICAgKmFnbHlwaCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfR2x5cGgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byBleHRyYWN0IGEgZ2x5cGggaW1hZ2UgZnJvbSBhIHNsb3QuICBOb3RlIHRoYXQKKyAgICogICB0aGUgY3JlYXRlZCBARlRfR2x5cGggb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQgd2l0aCBARlRfRG9uZV9HbHlwaC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHNsb3QgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZ2x5cGggc2xvdC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhZ2x5cGggOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBnbHlwaCBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQmVjYXVzZSBgKmFnbHlwaC0+YWR2YW5jZS54JyBhbmQgYCphZ2x5cGgtPmFkdmFuY2UueScgYXJlIDE2LjE2CisgICAqICAgZml4ZWQtcG9pbnQgbnVtYmVycywgYHNsb3QtPmFkdmFuY2UueCcgYW5kIGBzbG90LT5hZHZhbmNlLnknCisgICAqICAgKHdoaWNoIGFyZSBpbiAyNi42IGZpeGVkLXBvaW50IGZvcm1hdCkgbXVzdCBiZSBpbiB0aGUgcmFuZ2UKKyAgICogICBdLTMyNzY4OzMyNzY4Wy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfR2x5cGgoIEZUX0dseXBoU2xvdCAgc2xvdCwKICAgICAgICAgICAgICAgICBGVF9HbHlwaCAgICAgKmFnbHlwaCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhfQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGNvcHkgYSBnbHlwaCBpbWFnZS4gIE5vdGUgdGhhdCB0aGUgY3JlYXRlZCAgICAgICovCi0gIC8qICAgIEBGVF9HbHlwaCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCB3aXRoIEBGVF9Eb25lX0dseXBoLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNvdXJjZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhcmdldCA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGdseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2x5cGhfQ29weQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiB1c2VkIHRvIGNvcHkgYSBnbHlwaCBpbWFnZS4gIE5vdGUgdGhhdCB0aGUgY3JlYXRlZAorICAgKiAgIEBGVF9HbHlwaCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCB3aXRoIEBGVF9Eb25lX0dseXBoLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc291cmNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGdseXBoIG9iamVjdC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICB0YXJnZXQgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZ2x5cGggb2JqZWN0LiAgMH5pbiBjYXNlIG9mCisgICAqICAgICBlcnJvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dseXBoX0NvcHkoIEZUX0dseXBoICAgc291cmNlLAogICAgICAgICAgICAgICAgICBGVF9HbHlwaCAgKnRhcmdldCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHJhbnNmb3JtIGEgZ2x5cGggaW1hZ2UgaWYgaXRzIGZvcm1hdCBpcyBzY2FsYWJsZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF0cml4IDo6IEEgcG9pbnRlciB0byBhIDJ4MiBtYXRyaXggdG8gYXBwbHkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWx0YSAgOjogQSBwb2ludGVyIHRvIGEgMmQgdmVjdG9yIHRvIGFwcGx5LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiAxLzY0dGggb2YgYSBwaXhlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZSAoaWYgbm90IDAsIHRoZSBnbHlwaCBmb3JtYXQgaXMgbm90IHNjYWxhYmxlKS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIDJ4MiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggaXMgYWxzbyBhcHBsaWVkIHRvIHRoZSBnbHlwaCdzICAgICAgICovCi0gIC8qICAgIGFkdmFuY2UgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HbHlwaF9UcmFuc2Zvcm0KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRyYW5zZm9ybSBhIGdseXBoIGltYWdlIGlmIGl0cyBmb3JtYXQgaXMgc2NhbGFibGUuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaCBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtYXRyaXggOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhIDJ4MiBtYXRyaXggdG8gYXBwbHkuCisgICAqCisgICAqICAgZGVsdGEgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhIDJkIHZlY3RvciB0byBhcHBseS4gIENvb3JkaW5hdGVzIGFyZQorICAgKiAgICAgZXhwcmVzc2VkIGluIDEvNjR0aCBvZiBhIHBpeGVsLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUgKGlmIG5vdCAwLCB0aGUgZ2x5cGggZm9ybWF0IGlzIG5vdCBzY2FsYWJsZSkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSAyeDIgdHJhbnNmb3JtYXRpb24gbWF0cml4IGlzIGFsc28gYXBwbGllZCB0byB0aGUgZ2x5cGgncworICAgKiAgIGFkdmFuY2UgdmVjdG9yLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dseXBoX1RyYW5zZm9ybSggRlRfR2x5cGggICAgZ2x5cGgsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIGRlbHRhICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaF9CQm94X01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbW9kZSBob3cgdGhlIHZhbHVlcyBvZiBARlRfR2x5cGhfR2V0X0NCb3ggYXJlIHJldHVybmVkLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9CQk9YX1VOU0NBTEVEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBSZXR1cm4gdW5zY2FsZWQgZm9udCB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9CQk9YX1NVQlBJWEVMUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBSZXR1cm4gdW5maXR0ZWQgMjYuNiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9CQk9YX0dSSURGSVQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBSZXR1cm4gZ3JpZC1maXR0ZWQgMjYuNiBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9CQk9YX1RSVU5DQVRFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBSZXR1cm4gY29vcmRpbmF0ZXMgaW4gaW50ZWdlciBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9CQk9YX1BJWEVMUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBSZXR1cm4gZ3JpZC1maXR0ZWQgcGl4ZWwgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfR2x5cGhfQkJveF9Nb2RlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgbW9kZSBob3cgdGhlIHZhbHVlcyBvZiBARlRfR2x5cGhfR2V0X0NCb3ggYXJlIHJldHVybmVkLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0dMWVBIX0JCT1hfVU5TQ0FMRUQgOjoKKyAgICogICAgIFJldHVybiB1bnNjYWxlZCBmb250IHVuaXRzLgorICAgKgorICAgKiAgIEZUX0dMWVBIX0JCT1hfU1VCUElYRUxTIDo6CisgICAqICAgICBSZXR1cm4gdW5maXR0ZWQgMjYuNiBjb29yZGluYXRlcy4KKyAgICoKKyAgICogICBGVF9HTFlQSF9CQk9YX0dSSURGSVQgOjoKKyAgICogICAgIFJldHVybiBncmlkLWZpdHRlZCAyNi42IGNvb3JkaW5hdGVzLgorICAgKgorICAgKiAgIEZUX0dMWVBIX0JCT1hfVFJVTkNBVEUgOjoKKyAgICogICAgIFJldHVybiBjb29yZGluYXRlcyBpbiBpbnRlZ2VyIHBpeGVscy4KKyAgICoKKyAgICogICBGVF9HTFlQSF9CQk9YX1BJWEVMUyA6OgorICAgKiAgICAgUmV0dXJuIGdyaWQtZml0dGVkIHBpeGVsIGNvb3JkaW5hdGVzLgorICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9HbHlwaF9CQm94X01vZGVfCiAgIHsKICAgICBGVF9HTFlQSF9CQk9YX1VOU0NBTEVEICA9IDAsCkBAIC0zNDAsMTg3ICszODksMTkxIEBACiAjZGVmaW5lIGZ0X2dseXBoX2Jib3hfcGl4ZWxzICAgICBGVF9HTFlQSF9CQk9YX1BJWEVMUwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhfR2V0X0NCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIGEgZ2x5cGgncyBgY29udHJvbCBib3gnLiAgVGhlIGNvbnRyb2wgYm94IGVuY2xvc2VzIGFsbCB0aGUgICovCi0gIC8qICAgIG91dGxpbmUncyBwb2ludHMsIGluY2x1ZGluZyBCZXppZXIgY29udHJvbCBwb2ludHMuICBUaG91Z2ggaXQgICAgICAqLwotICAvKiAgICBjb2luY2lkZXMgd2l0aCB0aGUgZXhhY3QgYm91bmRpbmcgYm94IGZvciBtb3N0IGdseXBocywgaXQgY2FuIGJlICAgKi8KLSAgLyogICAgc2xpZ2h0bHkgbGFyZ2VyIGluIHNvbWUgc2l0dWF0aW9ucyAobGlrZSB3aGVuIHJvdGF0aW5nIGFuIG91dGxpbmUgICovCi0gIC8qICAgIHRoYXQgY29udGFpbnMgQmV6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCi0gIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLwotICAvKiAgICBhbmQgYXJjcyBpbiB0aGUgb3V0bGluZS4gIFRvIGdldCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgICAgICAgKi8KLSAgLyogICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2RlICA6OiBUaGUgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXR1cm5lZCAgICAgKi8KLSAgLyogICAgICAgICAgICAgYm91bmRpbmcgYm94IHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWNib3ggOjogVGhlIGdseXBoIGNvb3JkaW5hdGUgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAgICovCi0gIC8qICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiAxLzY0dGggb2YgcGl4ZWxzIGlmIGl0IGlzIGdyaWQtZml0dGVkLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZ2x5cGggb3JpZ2luLCB1c2luZyB0aGUgeX51cHdhcmRzICAqLwotICAvKiAgICBjb252ZW50aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQgd2l0aCBARlRfTE9BRF9OT19TQ0FMRSwgYGJib3hfbW9kZScgICAqLwotICAvKiAgICBtdXN0IGJlIHNldCB0byBARlRfR0xZUEhfQkJPWF9VTlNDQUxFRCB0byBnZXQgdW5zY2FsZWQgZm9udCAgICAgICAgKi8KLSAgLyogICAgdW5pdHMgaW4gMjYuNiBwaXhlbCBmb3JtYXQuICBUaGUgdmFsdWUgQEZUX0dMWVBIX0JCT1hfU1VCUElYRUxTICAgICovCi0gIC8qICAgIGlzIGFub3RoZXIgbmFtZSBmb3IgdGhpcyBjb25zdGFudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIGZvbnQgaXMgdHJpY2t5IGFuZCB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkIHdpdGggICAgICAgICAgICovCi0gIC8qICAgIEBGVF9MT0FEX05PX1NDQUxFLCB0aGUgcmVzdWx0aW5nIENCb3ggaXMgbWVhbmluZ2xlc3MuICBUbyBnZXQgICAgICAqLwotICAvKiAgICByZWFzb25hYmxlIHZhbHVlcyBmb3IgdGhlIENCb3ggaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlIGdseXBoICAgKi8KLSAgLyogICAgYXQgYSBsYXJnZSBwcGVtIHZhbHVlIChzbyB0aGF0IHRoZSBoaW50aW5nIGluc3RydWN0aW9ucyBjYW4gICAgICAgICovCi0gIC8qICAgIHByb3Blcmx5IHNoaWZ0IGFuZCBzY2FsZSB0aGUgc3ViZ2x5cGhzKSwgdGhlbiBleHRyYWN0aW5nIHRoZSBDQm94LCAqLwotICAvKiAgICB3aGljaCBjYW4gYmUgZXZlbnR1YWxseSBjb252ZXJ0ZWQgYmFjayB0byBmb250IHVuaXRzLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBjb29yZGluYXRlcyBhcmUgZXhjbHVzaXZlLCB3aGljaCBtZWFucyB0aGF0ICAqLwotICAvKiAgICBvbmUgY2FuIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGdseXBoIGltYWdlIChiZSBpdCBpbiAgKi8KLSAgLyogICAgaW50ZWdlciBvciAyNi42IHBpeGVscykgYXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICB3aWR0aCAgPSBiYm94LnhNYXggLSBiYm94LnhNaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaGVpZ2h0ID0gYmJveC55TWF4IC0gYmJveC55TWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgYWxzbyB0aGF0IGZvciAyNi42IGNvb3JkaW5hdGVzLCBpZiBgYmJveF9tb2RlJyBpcyBzZXQgdG8gICAgICAqLwotICAvKiAgICBARlRfR0xZUEhfQkJPWF9HUklERklULCB0aGUgY29vcmRpbmF0ZXMgd2lsbCBhbHNvIGJlIGdyaWQtZml0dGVkLCAgKi8KLSAgLyogICAgd2hpY2ggY29ycmVzcG9uZHMgdG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBiYm94LnhNaW4gPSBGTE9PUihiYm94LnhNaW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYmJveC55TWluID0gRkxPT1IoYmJveC55TWluKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGJib3gueE1heCA9IENFSUxJTkcoYmJveC54TWF4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBiYm94LnlNYXggPSBDRUlMSU5HKGJib3gueU1heCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gZ2V0IHRoZSBiYm94IGluIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgYGJib3hfbW9kZScgdG8gICAgICAgICAgICovCi0gIC8qICAgIEBGVF9HTFlQSF9CQk9YX1RSVU5DQVRFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gZ2V0IHRoZSBiYm94IGluIGdyaWQtZml0dGVkIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgYGJib3hfbW9kZScgICovCi0gIC8qICAgIHRvIEBGVF9HTFlQSF9CQk9YX1BJWEVMUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HbHlwaF9HZXRfQ0JveAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGEgZ2x5cGgncyBgY29udHJvbCBib3gnLiAgVGhlIGNvbnRyb2wgYm94IGVuY2xvc2VzIGFsbCB0aGUKKyAgICogICBvdXRsaW5lJ3MgcG9pbnRzLCBpbmNsdWRpbmcgQmV6aWVyIGNvbnRyb2wgcG9pbnRzLiAgVGhvdWdoIGl0CisgICAqICAgY29pbmNpZGVzIHdpdGggdGhlIGV4YWN0IGJvdW5kaW5nIGJveCBmb3IgbW9zdCBnbHlwaHMsIGl0IGNhbiBiZQorICAgKiAgIHNsaWdodGx5IGxhcmdlciBpbiBzb21lIHNpdHVhdGlvbnMgKGxpa2Ugd2hlbiByb3RhdGluZyBhbiBvdXRsaW5lCisgICAqICAgdGhhdCBjb250YWlucyBCZXppZXIgb3V0c2lkZSBhcmNzKS4KKyAgICoKKyAgICogICBDb21wdXRpbmcgdGhlIGNvbnRyb2wgYm94IGlzIHZlcnkgZmFzdCwgd2hpbGUgZ2V0dGluZyB0aGUgYm91bmRpbmcKKyAgICogICBib3ggY2FuIHRha2UgbXVjaCBtb3JlIHRpbWUgYXMgaXQgbmVlZHMgdG8gd2FsayBvdmVyIGFsbCBzZWdtZW50cworICAgKiAgIGFuZCBhcmNzIGluIHRoZSBvdXRsaW5lLiAgVG8gZ2V0IHRoZSBsYXR0ZXIsIHlvdSBjYW4gdXNlIHRoZQorICAgKiAgIGBmdGJib3gnIGNvbXBvbmVudCwgd2hpY2ggaXMgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHRhc2suCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBnbHlwaCBvYmplY3QuCisgICAqCisgICAqICAgbW9kZSA6OgorICAgKiAgICAgVGhlIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRvIGludGVycHJldCB0aGUgcmV0dXJuZWQKKyAgICogICAgIGJvdW5kaW5nIGJveCB2YWx1ZXMuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWNib3ggOjoKKyAgICogICAgIFRoZSBnbHlwaCBjb29yZGluYXRlIGJvdW5kaW5nIGJveC4gIENvb3JkaW5hdGVzIGFyZQorICAgKiAgICAgZXhwcmVzc2VkIGluIDEvNjR0aCBvZiBwaXhlbHMgaWYgaXQgaXMgZ3JpZC1maXR0ZWQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIENvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZ2x5cGggb3JpZ2luLCB1c2luZyB0aGUgeX51cHdhcmRzCisgICAqICAgY29udmVudGlvbi4KKyAgICoKKyAgICogICBJZiB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkIHdpdGggQEZUX0xPQURfTk9fU0NBTEUsIGBiYm94X21vZGUnCisgICAqICAgbXVzdCBiZSBzZXQgdG8gQEZUX0dMWVBIX0JCT1hfVU5TQ0FMRUQgdG8gZ2V0IHVuc2NhbGVkIGZvbnQKKyAgICogICB1bml0cyBpbiAyNi42IHBpeGVsIGZvcm1hdC4gIFRoZSB2YWx1ZSBARlRfR0xZUEhfQkJPWF9TVUJQSVhFTFMKKyAgICogICBpcyBhbm90aGVyIG5hbWUgZm9yIHRoaXMgY29uc3RhbnQuCisgICAqCisgICAqICAgSWYgdGhlIGZvbnQgaXMgdHJpY2t5IGFuZCB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkIHdpdGgKKyAgICogICBARlRfTE9BRF9OT19TQ0FMRSwgdGhlIHJlc3VsdGluZyBDQm94IGlzIG1lYW5pbmdsZXNzLiAgVG8gZ2V0CisgICAqICAgcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHRoZSBDQm94IGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSBnbHlwaAorICAgKiAgIGF0IGEgbGFyZ2UgcHBlbSB2YWx1ZSAoc28gdGhhdCB0aGUgaGludGluZyBpbnN0cnVjdGlvbnMgY2FuCisgICAqICAgcHJvcGVybHkgc2hpZnQgYW5kIHNjYWxlIHRoZSBzdWJnbHlwaHMpLCB0aGVuIGV4dHJhY3RpbmcgdGhlIENCb3gsCisgICAqICAgd2hpY2ggY2FuIGJlIGV2ZW50dWFsbHkgY29udmVydGVkIGJhY2sgdG8gZm9udCB1bml0cy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhlIG1heGltdW0gY29vcmRpbmF0ZXMgYXJlIGV4Y2x1c2l2ZSwgd2hpY2ggbWVhbnMgdGhhdAorICAgKiAgIG9uZSBjYW4gY29tcHV0ZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZ2x5cGggaW1hZ2UgKGJlIGl0IGluCisgICAqICAgaW50ZWdlciBvciAyNi42IHBpeGVscykgYXM6CisgICAqCisgICAqICAgeworICAgKiAgICAgd2lkdGggID0gYmJveC54TWF4IC0gYmJveC54TWluOworICAgKiAgICAgaGVpZ2h0ID0gYmJveC55TWF4IC0gYmJveC55TWluOworICAgKiAgIH0KKyAgICoKKyAgICogICBOb3RlIGFsc28gdGhhdCBmb3IgMjYuNiBjb29yZGluYXRlcywgaWYgYGJib3hfbW9kZScgaXMgc2V0IHRvCisgICAqICAgQEZUX0dMWVBIX0JCT1hfR1JJREZJVCwgdGhlIGNvb3JkaW5hdGVzIHdpbGwgYWxzbyBiZSBncmlkLWZpdHRlZCwKKyAgICogICB3aGljaCBjb3JyZXNwb25kcyB0bzoKKyAgICoKKyAgICogICB7CisgICAqICAgICBiYm94LnhNaW4gPSBGTE9PUihiYm94LnhNaW4pOworICAgKiAgICAgYmJveC55TWluID0gRkxPT1IoYmJveC55TWluKTsKKyAgICogICAgIGJib3gueE1heCA9IENFSUxJTkcoYmJveC54TWF4KTsKKyAgICogICAgIGJib3gueU1heCA9IENFSUxJTkcoYmJveC55TWF4KTsKKyAgICogICB9CisgICAqCisgICAqICAgVG8gZ2V0IHRoZSBiYm94IGluIHBpeGVsIGNvb3JkaW5hdGVzLCBzZXQgYGJib3hfbW9kZScgdG8KKyAgICogICBARlRfR0xZUEhfQkJPWF9UUlVOQ0FURS4KKyAgICoKKyAgICogICBUbyBnZXQgdGhlIGJib3ggaW4gZ3JpZC1maXR0ZWQgcGl4ZWwgY29vcmRpbmF0ZXMsIHNldCBgYmJveF9tb2RlJworICAgKiAgIHRvIEBGVF9HTFlQSF9CQk9YX1BJWEVMUy4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX0dseXBoX0dldF9DQm94KCBGVF9HbHlwaCAgZ2x5cGgsCiAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgYmJveF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgRlRfQkJveCAgKmFjYm94ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HbHlwaF9Ub19CaXRtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggb2JqZWN0IHRvIGEgYml0bWFwIGdseXBoIG9iamVjdC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0aGVfZ2x5cGggICA6OiBBIHBvaW50ZXIgdG8gYSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByZW5kZXJfbW9kZSA6OiBBbiBlbnVtZXJhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgdGhlIGRhdGEgaXMgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgcmVuZGVyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvcmlnaW4gICAgICA6OiBBIHBvaW50ZXIgdG8gYSB2ZWN0b3IgdXNlZCB0byB0cmFuc2xhdGUgdGhlIGdseXBoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgaW1hZ2UgYmVmb3JlIHJlbmRlcmluZy4gIENhbiBiZX4wIChpZiBubyAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uKS4gIFRoZSBvcmlnaW4gaXMgZXhwcmVzc2VkIGluICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAyNi42IHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlc3Ryb3kgICAgIDo6IEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBvcmlnaW5hbCBnbHlwaCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBpbWFnZSBzaG91bGQgYmUgZGVzdHJveWVkIGJ5IHRoaXMgZnVuY3Rpb24uICBJdCBpcyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgbmV2ZXIgZGVzdHJveWVkIGluIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgdGhlIGdseXBoIGZvcm1hdCBpc24ndCBzY2FsYWJsZS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgdHJhbnNsYXRlZCB3aXRoIHRoZSBgb3JpZ2luJyB2ZWN0b3IgYmVmb3JlICAgICAgKi8KLSAgLyogICAgcmVuZGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byBhbiBARlRfR2x5cGggaGFuZGxlLCB0aGF0IHdpbGwgKi8KLSAgLyogICAgYmUgX3JlcGxhY2VkXyBieSB0aGlzIGZ1bmN0aW9uICh3aXRoIG5ld2x5IGFsbG9jYXRlZCBkYXRhKS4gICAgICAgICovCi0gIC8qICAgIFR5cGljYWxseSwgeW91IHdvdWxkIHVzZSAob21pdHRpbmcgZXJyb3IgaGFuZGxpbmcpOiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgRlRfR2x5cGggICAgICAgIGdseXBoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIEZUX0JpdG1hcEdseXBoICBnbHlwaF9iaXRtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGxvYWQgZ2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBlcnJvciA9IEZUX0xvYWRfQ2hhciggZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfREVGQVVMVCApOyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGV4dHJhY3QgZ2x5cGggaW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBlcnJvciA9IEZUX0dldF9HbHlwaCggZmFjZS0+Z2x5cGgsICZnbHlwaCApOyAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGNvbnZlcnQgdG8gYSBiaXRtYXAgKGRlZmF1bHQgcmVuZGVyIG1vZGUgKyBkZXN0cm95aW5nIG9sZCkgICovCi0gIC8qICAgICAgICBpZiAoIGdseXBoLT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgZXJyb3IgPSBGVF9HbHlwaF9Ub19CaXRtYXAoICZnbHlwaCwgRlRfUkVOREVSX01PREVfTk9STUFMLCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICBpZiAoIGVycm9yICkgLy8gYGdseXBoJyB1bmNoYW5nZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGFjY2VzcyBiaXRtYXAgY29udGVudCBieSB0eXBlY2FzdGluZyAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBnbHlwaF9iaXRtYXAgPSAoRlRfQml0bWFwR2x5cGgpZ2x5cGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGRvIGZ1bm55IHN0dWZmIHdpdGggaXQsIGxpa2UgYmxpdHRpbmcvZHJhd2luZyAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC8vIGRpc2NhcmQgZ2x5cGggaW1hZ2UgKGJpdG1hcCBvciBub3QpICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICBGVF9Eb25lX0dseXBoKCBnbHlwaCApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIZXJlIGFub3RoZXIgZXhhbXBsZSwgYWdhaW4gd2l0aG91dCBlcnJvciBoYW5kbGluZzogICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIEZUX0dseXBoICBnbHlwaHNbTUFYX0dMWVBIU10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZm9yICggaWR4ID0gMDsgaSA8IE1BWF9HTFlQSFM7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBpZHgsIEZUX0xPQURfREVGQVVMVCApIHx8ICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgRlRfR2V0X0dseXBoICggZmFjZS0+Z2x5cGgsICZnbHlwaFtpZHhdICk7ICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZm9yICggaWR4ID0gMDsgaSA8IE1BWF9HTFlQSFM7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIEZUX0dseXBoICBiaXRtYXAgPSBnbHlwaHNbaWR4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBgYml0bWFwJyBubyBsb25nZXIgcG9pbnRzIGludG8gICAgICAgICAgICovCi0gIC8qICAgICAgICAgIC8vIHRoZSBgZ2x5cGhzJyBhcnJheSAoYW5kIHRoZSBvbGQgdmFsdWUgaXNuJ3QgZGVzdHJveWVkKSAgICAqLwotICAvKiAgICAgICAgICBGVF9HbHlwaF9Ub19CaXRtYXAoICZiaXRtYXAsIEZUX1JFTkRFUl9NT0RFX01PTk8sIDAsIDAgKTsgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgRlRfRG9uZV9HbHlwaCggYml0bWFwICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZm9yICggaWR4ID0gMDsgaSA8IE1BWF9HTFlQSFM7IGkrKyApICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGhzW2lkeF0gKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HbHlwaF9Ub19CaXRtYXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENvbnZlcnQgYSBnaXZlbiBnbHlwaCBvYmplY3QgdG8gYSBiaXRtYXAgZ2x5cGggb2JqZWN0LgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgdGhlX2dseXBoIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gYSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHJlbmRlcl9tb2RlIDo6CisgICAqICAgICBBbiBlbnVtZXJhdGlvbiB0aGF0IGRlc2NyaWJlcyBob3cgdGhlIGRhdGEgaXMKKyAgICogICAgIHJlbmRlcmVkLgorICAgKgorICAgKiAgIG9yaWdpbiA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgdmVjdG9yIHVzZWQgdG8gdHJhbnNsYXRlIHRoZSBnbHlwaAorICAgKiAgICAgaW1hZ2UgYmVmb3JlIHJlbmRlcmluZy4gIENhbiBiZX4wIChpZiBubworICAgKiAgICAgdHJhbnNsYXRpb24pLiAgVGhlIG9yaWdpbiBpcyBleHByZXNzZWQgaW4KKyAgICogICAgIDI2LjYgcGl4ZWxzLgorICAgKgorICAgKiAgIGRlc3Ryb3kgOjoKKyAgICogICAgIEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBvcmlnaW5hbCBnbHlwaAorICAgKiAgICAgaW1hZ2Ugc2hvdWxkIGJlIGRlc3Ryb3llZCBieSB0aGlzIGZ1bmN0aW9uLiAgSXQgaXMKKyAgICogICAgIG5ldmVyIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGVycm9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIHRoZSBnbHlwaCBmb3JtYXQgaXNuJ3Qgc2NhbGFibGUuCisgICAqCisgICAqICAgVGhlIGdseXBoIGltYWdlIGlzIHRyYW5zbGF0ZWQgd2l0aCB0aGUgYG9yaWdpbicgdmVjdG9yIGJlZm9yZQorICAgKiAgIHJlbmRlcmluZy4KKyAgICoKKyAgICogICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byBhbiBARlRfR2x5cGggaGFuZGxlLCB0aGF0IHdpbGwKKyAgICogICBiZSBfcmVwbGFjZWRfIGJ5IHRoaXMgZnVuY3Rpb24gKHdpdGggbmV3bHkgYWxsb2NhdGVkIGRhdGEpLgorICAgKiAgIFR5cGljYWxseSwgeW91IHdvdWxkIHVzZSAob21pdHRpbmcgZXJyb3IgaGFuZGxpbmcpOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0dseXBoICAgICAgICBnbHlwaDsKKyAgICogICAgIEZUX0JpdG1hcEdseXBoICBnbHlwaF9iaXRtYXA7CisgICAqCisgICAqCisgICAqICAgICAvLyBsb2FkIGdseXBoCisgICAqICAgICBlcnJvciA9IEZUX0xvYWRfQ2hhciggZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfREVGQVVMVCApOworICAgKgorICAgKiAgICAgLy8gZXh0cmFjdCBnbHlwaCBpbWFnZQorICAgKiAgICAgZXJyb3IgPSBGVF9HZXRfR2x5cGgoIGZhY2UtPmdseXBoLCAmZ2x5cGggKTsKKyAgICoKKyAgICogICAgIC8vIGNvbnZlcnQgdG8gYSBiaXRtYXAgKGRlZmF1bHQgcmVuZGVyIG1vZGUgKyBkZXN0cm95aW5nIG9sZCkKKyAgICogICAgIGlmICggZ2x5cGgtPmZvcm1hdCAhPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQICkKKyAgICogICAgIHsKKyAgICogICAgICAgZXJyb3IgPSBGVF9HbHlwaF9Ub19CaXRtYXAoICZnbHlwaCwgRlRfUkVOREVSX01PREVfTk9STUFMLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxICk7CisgICAqICAgICAgIGlmICggZXJyb3IgKSAvLyBgZ2x5cGgnIHVuY2hhbmdlZAorICAgKiAgICAgICAgIC4uLgorICAgKiAgICAgfQorICAgKgorICAgKiAgICAgLy8gYWNjZXNzIGJpdG1hcCBjb250ZW50IGJ5IHR5cGVjYXN0aW5nCisgICAqICAgICBnbHlwaF9iaXRtYXAgPSAoRlRfQml0bWFwR2x5cGgpZ2x5cGg7CisgICAqCisgICAqICAgICAvLyBkbyBmdW5ueSBzdHVmZiB3aXRoIGl0LCBsaWtlIGJsaXR0aW5nL2RyYXdpbmcKKyAgICogICAgIC4uLgorICAgKgorICAgKiAgICAgLy8gZGlzY2FyZCBnbHlwaCBpbWFnZSAoYml0bWFwIG9yIG5vdCkKKyAgICogICAgIEZUX0RvbmVfR2x5cGgoIGdseXBoICk7CisgICAqICAgfQorICAgKgorICAgKiAgIEhlcmUgYW5vdGhlciBleGFtcGxlLCBhZ2FpbiB3aXRob3V0IGVycm9yIGhhbmRsaW5nOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0dseXBoICBnbHlwaHNbTUFYX0dMWVBIU10KKyAgICoKKyAgICoKKyAgICogICAgIC4uLgorICAgKgorICAgKiAgICAgZm9yICggaWR4ID0gMDsgaSA8IE1BWF9HTFlQSFM7IGkrKyApCisgICAqICAgICAgIGVycm9yID0gRlRfTG9hZF9HbHlwaCggZmFjZSwgaWR4LCBGVF9MT0FEX0RFRkFVTFQgKSB8fAorICAgKiAgICAgICAgICAgICAgIEZUX0dldF9HbHlwaCAoIGZhY2UtPmdseXBoLCAmZ2x5cGhzW2lkeF0gKTsKKyAgICoKKyAgICogICAgIC4uLgorICAgKgorICAgKiAgICAgZm9yICggaWR4ID0gMDsgaSA8IE1BWF9HTFlQSFM7IGkrKyApCisgICAqICAgICB7CisgICAqICAgICAgIEZUX0dseXBoICBiaXRtYXAgPSBnbHlwaHNbaWR4XTsKKyAgICoKKyAgICoKKyAgICogICAgICAgLi4uCisgICAqCisgICAqICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCwgYGJpdG1hcCcgbm8gbG9uZ2VyIHBvaW50cyBpbnRvCisgICAqICAgICAgIC8vIHRoZSBgZ2x5cGhzJyBhcnJheSAoYW5kIHRoZSBvbGQgdmFsdWUgaXNuJ3QgZGVzdHJveWVkKQorICAgKiAgICAgICBGVF9HbHlwaF9Ub19CaXRtYXAoICZiaXRtYXAsIEZUX1JFTkRFUl9NT0RFX01PTk8sIDAsIDAgKTsKKyAgICoKKyAgICogICAgICAgLi4uCisgICAqCisgICAqICAgICAgIEZUX0RvbmVfR2x5cGgoIGJpdG1hcCApOworICAgKiAgICAgfQorICAgKgorICAgKiAgICAgLi4uCisgICAqCisgICAqICAgICBmb3IgKCBpZHggPSAwOyBpIDwgTUFYX0dMWVBIUzsgaSsrICkKKyAgICogICAgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGhzW2lkeF0gKTsKKyAgICogICB9CisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2x5cGhfVG9fQml0bWFwKCBGVF9HbHlwaCogICAgICAgdGhlX2dseXBoLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSwKQEAgLTUyOCwxNyArNTgxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgIGRlc3Ryb3kgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RvbmVfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlc3Ryb3kgYSBnaXZlbiBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9Eb25lX0dseXBoCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEZXN0cm95IGEgZ2l2ZW4gZ2x5cGguCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBnbHlwaCBvYmplY3QuCisgICAqLwogICBGVF9FWFBPUlQoIHZvaWQgKQogICBGVF9Eb25lX0dseXBoKCBGVF9HbHlwaCAgZ2x5cGggKTsKIApAQCAtNTQ3LDU0ICs2MDEsNTcgQEAKIAogICAvKiBvdGhlciBoZWxwZnVsIGZ1bmN0aW9ucyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbXB1dGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBjb21wdXRhdGlvbnMKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NYXRyaXhfTXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQZXJmb3JtIHRoZSBtYXRyaXggb3BlcmF0aW9uIGBiID0gYSpiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhIDo6IEEgcG9pbnRlciB0byBtYXRyaXggYGEnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiIDo6IEEgcG9pbnRlciB0byBtYXRyaXggYGInLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYGEnIG9yIGBiJyBpcyB6ZXJvLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNpbmNlIHRoZSBmdW5jdGlvbiB1c2VzIHdyYXAtYXJvdW5kIGFyaXRobWV0aWMsIHJlc3VsdHMgYmVjb21lICAgICAqLwotICAvKiAgICBtZWFuaW5nbGVzcyBpZiB0aGUgYXJndW1lbnRzIGFyZSB2ZXJ5IGxhcmdlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTWF0cml4X011bHRpcGx5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBQZXJmb3JtIHRoZSBtYXRyaXggb3BlcmF0aW9uIGBiID0gYSpiJy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGEgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBtYXRyaXggYGEnLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgYiA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIG1hdHJpeCBgYicuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIGVpdGhlciBgYScgb3IgYGInIGlzIHplcm8uCisgICAqCisgICAqICAgU2luY2UgdGhlIGZ1bmN0aW9uIHVzZXMgd3JhcC1hcm91bmQgYXJpdGhtZXRpYywgcmVzdWx0cyBiZWNvbWUKKyAgICogICBtZWFuaW5nbGVzcyBpZiB0aGUgYXJndW1lbnRzIGFyZSB2ZXJ5IGxhcmdlLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfTWF0cml4X011bHRpcGx5KCBjb25zdCBGVF9NYXRyaXgqICBhLAogICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCogICAgICAgIGIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01hdHJpeF9JbnZlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEludmVydCBhIDJ4MiBtYXRyaXguICBSZXR1cm4gYW4gZXJyb3IgaWYgaXQgY2FuJ3QgYmUgaW52ZXJ0ZWQuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hdHJpeCA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBtYXRyaXguICBSZW1haW5zIHVudG91Y2hlZCBpbiAgICAqLwotICAvKiAgICAgICAgICAgICAgY2FzZSBvZiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTWF0cml4X0ludmVydAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgSW52ZXJ0IGEgMngyIG1hdHJpeC4gIFJldHVybiBhbiBlcnJvciBpZiBpdCBjYW4ndCBiZSBpbnZlcnRlZC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIG1hdHJpeCA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgbWF0cml4LiAgUmVtYWlucyB1bnRvdWNoZWQgaW4KKyAgICogICAgIGNhc2Ugb2YgZXJyb3IuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9NYXRyaXhfSW52ZXJ0KCBGVF9NYXRyaXgqICBtYXRyaXggKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaAppbmRleCA4MzgyZDU5Li41MzJiNDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaApAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRneHZhbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZGhhdCBLLkssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Z3h2YWwuaAorICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2lmbmRlZiBGVEdYVkFMX0hfCkBAIC00MSw0MyArNDEsNDMgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ3hfdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHJ1ZVR5cGVHWC9BQVQgVmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gQVBJIHRvIHZhbGlkYXRlIFRydWVUeXBlR1gvQUFUIHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgdG8gdmFsaWRhdGUgICAgICovCi0gIC8qICAgIHNvbWUgVHJ1ZVR5cGVHWCB0YWJsZXMgKGZlYXQsIG1vcnQsIG1vcngsIGJzbG4sIGp1c3QsIGtlcm4sIG9wYmQsICAqLwotICAvKiAgICB0cmFrLCBwcm9wLCBsY2FyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVHJ1ZVR5cGVHWF9GcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQ2xhc3NpY0tlcm5fRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9WQUxJREFURV9HWF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVkFMSURBVEVfR1hYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1ZBTElEQVRFX0NLRVJOWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBneF92YWxpZGF0aW9uCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUcnVlVHlwZUdYL0FBVCBWYWxpZGF0aW9uCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBBbiBBUEkgdG8gdmFsaWRhdGUgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgdG8gdmFsaWRhdGUKKyAgICogICBzb21lIFRydWVUeXBlR1ggdGFibGVzIChmZWF0LCBtb3J0LCBtb3J4LCBic2xuLCBqdXN0LCBrZXJuLCBvcGJkLAorICAgKiAgIHRyYWssIHByb3AsIGxjYXIpLgorICAgKgorICAgKiBAb3JkZXI6CisgICAqICAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZQorICAgKiAgIEZUX1RydWVUeXBlR1hfRnJlZQorICAgKgorICAgKiAgIEZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlCisgICAqICAgRlRfQ2xhc3NpY0tlcm5fRnJlZQorICAgKgorICAgKiAgIEZUX1ZBTElEQVRFX0dYX0xFTkdUSAorICAgKiAgIEZUX1ZBTElEQVRFX0dYWFhYCisgICAqICAgRlRfVkFMSURBVEVfQ0tFUk5YWFgKKyAgICoKKyAgICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogV2FybmluZzogVXNlIEZUX1ZBTElEQVRFX1hYWCB0byB2YWxpZGF0ZSBhIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGd4dmFsaWQgZGV2ZWxvcGVycy4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICoKKyAgICogV2FybmluZzogVXNlIEZUX1ZBTElEQVRFX1hYWCB0byB2YWxpZGF0ZSBhIHRhYmxlLgorICAgKiAgICAgICAgIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGd4dmFsaWQgZGV2ZWxvcGVycy4KKyAgICoKKyAgICoKKyAgICovCiAKICNkZWZpbmUgRlRfVkFMSURBVEVfZmVhdF9JTkRFWCAgICAgMAogI2RlZmluZSBGVF9WQUxJREFURV9tb3J0X0lOREVYICAgICAxCkBAIC0xMTIsNTEgKzExMiw1MSBAQAogICAgICAgICAgICggRlRfVkFMSURBVEVfR1hfU1RBUlQgPDwgRlRfVkFMSURBVEVfIyN0YWcjI19JTkRFWCApCiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZW51bToKLSAgKiAgICBGVF9WQUxJREFURV9HWFhYWAotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCBARlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSB0bwotICAqICAgIGluZGljYXRlIHdoaWNoIFRydWVUeXBlR1gvQUFUIFR5cGUgdGFibGVzIHNob3VsZCBiZSB2YWxpZGF0ZWQuCi0gICoKLSAgKiBAdmFsdWVzOgotICAqICAgIEZUX1ZBTElEQVRFX2ZlYXQgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBmZWF0JyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX21vcnQgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBtb3J0JyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX21vcnggOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBtb3J4JyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX2JzbG4gOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBic2xuJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX2p1c3QgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBqdXN0JyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX2tlcm4gOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBrZXJuJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX29wYmQgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBvcGJkJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX3RyYWsgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGB0cmFrJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX3Byb3AgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBwcm9wJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX2xjYXIgOjoKLSAgKiAgICAgIFZhbGlkYXRlIGBsY2FyJyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX0dYIDo6Ci0gICogICAgICBWYWxpZGF0ZSBhbGwgVHJ1ZVR5cGVHWCB0YWJsZXMgKGZlYXQsIG1vcnQsIG1vcngsIGJzbG4sIGp1c3QsIGtlcm4sCi0gICogICAgICBvcGJkLCB0cmFrLCBwcm9wIGFuZCBsY2FyKS4KLSAgKgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICAgRlRfVkFMSURBVEVfR1hYWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX1RydWVUeXBlR1hfVmFsaWRhdGUgdG8KKyAgICogICAgaW5kaWNhdGUgd2hpY2ggVHJ1ZVR5cGVHWC9BQVQgVHlwZSB0YWJsZXMgc2hvdWxkIGJlIHZhbGlkYXRlZC4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICAgRlRfVkFMSURBVEVfZmVhdCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBmZWF0JyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfbW9ydCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBtb3J0JyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfbW9yeCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBtb3J4JyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfYnNsbiA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBic2xuJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfanVzdCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBqdXN0JyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfa2VybiA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBrZXJuJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfb3BiZCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBvcGJkJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfdHJhayA6OgorICAgKiAgICAgIFZhbGlkYXRlIGB0cmFrJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfcHJvcCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBwcm9wJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfbGNhciA6OgorICAgKiAgICAgIFZhbGlkYXRlIGBsY2FyJyB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfR1ggOjoKKyAgICogICAgICBWYWxpZGF0ZSBhbGwgVHJ1ZVR5cGVHWCB0YWJsZXMgKGZlYXQsIG1vcnQsIG1vcngsIGJzbG4sIGp1c3QsIGtlcm4sCisgICAqICAgICAgb3BiZCwgdHJhaywgcHJvcCBhbmQgbGNhcikuCisgICAqCisgICAqLwogCiAjZGVmaW5lIEZUX1ZBTElEQVRFX2ZlYXQgIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCBmZWF0ICkKICNkZWZpbmUgRlRfVkFMSURBVEVfbW9ydCAgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIG1vcnQgKQpAQCAtMTgxLDQ3ICsxODEsNDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfbGNhciApCiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIFZhbGlkYXRlIHZhcmlvdXMgVHJ1ZVR5cGVHWCB0YWJsZXMgdG8gYXNzdXJlIHRoYXQgYWxsIG9mZnNldHMgYW5kCi0gICogICAgaW5kaWNlcyBhcmUgdmFsaWQuICBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdAotICAqICAgIGFjdHVhbGx5IGRvZXMgdGhlIHRleHQgbGF5b3V0IGNhbiBhY2Nlc3MgdGhvc2UgdGFibGVzIHdpdGhvdXQKLSAgKiAgICBlcnJvciBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS4KLSAgKgotICAqIEBpbnB1dDoKLSAgKiAgICBmYWNlIDo6Ci0gICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCi0gICoKLSAgKiAgICB2YWxpZGF0aW9uX2ZsYWdzIDo6Ci0gICogICAgICAgQSBiaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgdGhlIHRhYmxlcyB0byBiZSB2YWxpZGF0ZWQuICBTZWUKLSAgKiAgICAgICBARlRfVkFMSURBVEVfR1hYWFggZm9yIHBvc3NpYmxlIHZhbHVlcy4KLSAgKgotICAqICAgIHRhYmxlX2xlbmd0aCA6OgotICAqICAgICAgIFRoZSBzaXplIG9mIHRoZSBgdGFibGVzJyBhcnJheS4gIE5vcm1hbGx5LCBARlRfVkFMSURBVEVfR1hfTEVOR1RICi0gICogICAgICAgc2hvdWxkIGJlIHBhc3NlZC4KLSAgKgotICAqIEBvdXRwdXQ6Ci0gICogICAgdGFibGVzIDo6Ci0gICogICAgICAgVGhlIGFycmF5IHdoZXJlIGFsbCB2YWxpZGF0ZWQgc2ZudCB0YWJsZXMgYXJlIHN0b3JlZC4KLSAgKiAgICAgICBUaGUgYXJyYXkgaXRzZWxmIG11c3QgYmUgYWxsb2NhdGVkIGJ5IGEgY2xpZW50LgotICAqCi0gICogQHJldHVybjoKLSAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCi0gICoKLSAgKiBAbm90ZToKLSAgKiAgIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIFRydWVUeXBlR1ggZm9udHMsIHJldHVybmluZyBhbiBlcnJvcgotICAqICAgb3RoZXJ3aXNlLgotICAqCi0gICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5Ci0gICogICBlYWNoIGB0YWJsZXMnIGVsZW1lbnQsIGJ5IGNhbGxpbmcgQEZUX1RydWVUeXBlR1hfRnJlZS4gIEEgTlVMTCB2YWx1ZQotICAqICAgaW5kaWNhdGVzIHRoYXQgdGhlIHRhYmxlIGVpdGhlciBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LCB0aGUKLSAgKiAgIGFwcGxpY2F0aW9uIGhhc24ndCBhc2tlZCBmb3IgdmFsaWRhdGlvbiwgb3IgdGhlIHZhbGlkYXRvciBkb2Vzbid0IGhhdmUKLSAgKiAgIHRoZSBhYmlsaXR5IHRvIHZhbGlkYXRlIHRoZSBzZm50IHRhYmxlLgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX1RydWVUeXBlR1hfVmFsaWRhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBWYWxpZGF0ZSB2YXJpb3VzIFRydWVUeXBlR1ggdGFibGVzIHRvIGFzc3VyZSB0aGF0IGFsbCBvZmZzZXRzIGFuZAorICAgKiAgICBpbmRpY2VzIGFyZSB2YWxpZC4gIFRoZSBpZGVhIGlzIHRoYXQgYSBoaWdoZXItbGV2ZWwgbGlicmFyeSB0aGF0CisgICAqICAgIGFjdHVhbGx5IGRvZXMgdGhlIHRleHQgbGF5b3V0IGNhbiBhY2Nlc3MgdGhvc2UgdGFibGVzIHdpdGhvdXQKKyAgICogICAgZXJyb3IgY2hlY2tpbmcgKHdoaWNoIGNhbiBiZSBxdWl0ZSB0aW1lIGNvbnN1bWluZykuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiAgICB2YWxpZGF0aW9uX2ZsYWdzIDo6CisgICAqICAgICAgQSBiaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgdGhlIHRhYmxlcyB0byBiZSB2YWxpZGF0ZWQuICBTZWUKKyAgICogICAgICBARlRfVkFMSURBVEVfR1hYWFggZm9yIHBvc3NpYmxlIHZhbHVlcy4KKyAgICoKKyAgICogICAgdGFibGVfbGVuZ3RoIDo6CisgICAqICAgICAgVGhlIHNpemUgb2YgdGhlIGB0YWJsZXMnIGFycmF5LiAgTm9ybWFsbHksIEBGVF9WQUxJREFURV9HWF9MRU5HVEgKKyAgICogICAgICBzaG91bGQgYmUgcGFzc2VkLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICB0YWJsZXMgOjoKKyAgICogICAgICBUaGUgYXJyYXkgd2hlcmUgYWxsIHZhbGlkYXRlZCBzZm50IHRhYmxlcyBhcmUgc3RvcmVkLgorICAgKiAgICAgIFRoZSBhcnJheSBpdHNlbGYgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgYSBjbGllbnQuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggVHJ1ZVR5cGVHWCBmb250cywgcmV0dXJuaW5nIGFuIGVycm9yCisgICAqICAgb3RoZXJ3aXNlLgorICAgKgorICAgKiAgIEFmdGVyIHVzZSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZWFsbG9jYXRlIHRoZSBidWZmZXJzIHBvaW50ZWQgdG8gYnkKKyAgICogICBlYWNoIGB0YWJsZXMnIGVsZW1lbnQsIGJ5IGNhbGxpbmcgQEZUX1RydWVUeXBlR1hfRnJlZS4gIEEgTlVMTCB2YWx1ZQorICAgKiAgIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBlaXRoZXIgZG9lc24ndCBleGlzdCBpbiB0aGUgZm9udCwgdGhlCisgICAqICAgYXBwbGljYXRpb24gaGFzbid0IGFza2VkIGZvciB2YWxpZGF0aW9uLCBvciB0aGUgdmFsaWRhdG9yIGRvZXNuJ3QgaGF2ZQorICAgKiAgIHRoZSBhYmlsaXR5IHRvIHZhbGlkYXRlIHRoZSBzZm50IHRhYmxlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1RydWVUeXBlR1hfVmFsaWRhdGUoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgdmFsaWRhdGlvbl9mbGFncywKQEAgLTIyOSwxMTkgKzIyOSwxMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIHRhYmxlX2xlbmd0aCApOwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGZ1bmN0aW9uOgotICAqICAgIEZUX1RydWVUeXBlR1hfRnJlZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgVHJ1ZVR5cGVHWCB2YWxpZGF0b3IuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICAgZmFjZSA6OgotICAqICAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgotICAqCi0gICogICAgdGFibGUgOjoKLSAgKiAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieQotICAqICAgICAgIEBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlLgotICAqCi0gICogQG5vdGU6Ci0gICogICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB0byBmcmVlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5Ci0gICogICBARlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSBvbmx5LgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX1RydWVUeXBlR1hfRnJlZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgVHJ1ZVR5cGVHWCB2YWxpZGF0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiAgICB0YWJsZSA6OgorICAgKiAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5CisgICAqICAgICAgQEZUX1RydWVUeXBlR1hfVmFsaWRhdGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAgICogICBARlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSBvbmx5LgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfVHJ1ZVR5cGVHWF9GcmVlKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKTsKIAogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBlbnVtOgotICAqICAgIEZUX1ZBTElEQVRFX0NLRVJOWFhYCi0gICoKLSAgKiBAZGVzY3JpcHRpb246Ci0gICogICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZQotICAqICAgIHRvIGluZGljYXRlIHRoZSBjbGFzc2ljIGtlcm4gZGlhbGVjdCBvciBkaWFsZWN0cy4gIElmIHRoZSBzZWxlY3RlZAotICAqICAgIHR5cGUgZG9lc24ndCBmaXQsIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSByZWdhcmRzIHRoZSB0YWJsZSBhcwotICAqICAgIGludmFsaWQuCi0gICoKLSAgKiBAdmFsdWVzOgotICAqICAgIEZUX1ZBTElEQVRFX01TIDo6Ci0gICogICAgICBIYW5kbGUgdGhlIGBrZXJuJyB0YWJsZSBhcyBhIGNsYXNzaWMgTWljcm9zb2Z0IGtlcm4gdGFibGUuCi0gICoKLSAgKiAgICBGVF9WQUxJREFURV9BUFBMRSA6OgotICAqICAgICAgSGFuZGxlIHRoZSBga2VybicgdGFibGUgYXMgYSBjbGFzc2ljIEFwcGxlIGtlcm4gdGFibGUuCi0gICoKLSAgKiAgICBGVF9WQUxJREFURV9DS0VSTiA6OgotICAqICAgICAgSGFuZGxlIHRoZSBga2VybicgYXMgZWl0aGVyIGNsYXNzaWMgQXBwbGUgb3IgTWljcm9zb2Z0IGtlcm4gdGFibGUuCi0gICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgICBGVF9WQUxJREFURV9DS0VSTlhYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCBARlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUKKyAgICogICAgdG8gaW5kaWNhdGUgdGhlIGNsYXNzaWMga2VybiBkaWFsZWN0IG9yIGRpYWxlY3RzLiAgSWYgdGhlIHNlbGVjdGVkCisgICAqICAgIHR5cGUgZG9lc24ndCBmaXQsIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSByZWdhcmRzIHRoZSB0YWJsZSBhcworICAgKiAgICBpbnZhbGlkLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgICBGVF9WQUxJREFURV9NUyA6OgorICAgKiAgICAgIEhhbmRsZSB0aGUgYGtlcm4nIHRhYmxlIGFzIGEgY2xhc3NpYyBNaWNyb3NvZnQga2VybiB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfQVBQTEUgOjoKKyAgICogICAgICBIYW5kbGUgdGhlIGBrZXJuJyB0YWJsZSBhcyBhIGNsYXNzaWMgQXBwbGUga2VybiB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfQ0tFUk4gOjoKKyAgICogICAgICBIYW5kbGUgdGhlIGBrZXJuJyBhcyBlaXRoZXIgY2xhc3NpYyBBcHBsZSBvciBNaWNyb3NvZnQga2VybiB0YWJsZS4KKyAgICovCiAjZGVmaW5lIEZUX1ZBTElEQVRFX01TICAgICAoIEZUX1ZBTElEQVRFX0dYX1NUQVJUIDw8IDAgKQogI2RlZmluZSBGVF9WQUxJREFURV9BUFBMRSAgKCBGVF9WQUxJREFURV9HWF9TVEFSVCA8PCAxICkKIAogI2RlZmluZSBGVF9WQUxJREFURV9DS0VSTiAgKCBGVF9WQUxJREFURV9NUyB8IEZUX1ZBTElEQVRFX0FQUExFICkKIAogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBmdW5jdGlvbjoKLSAgKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIFZhbGlkYXRlIGNsYXNzaWMgKDE2LWJpdCBmb3JtYXQpIGtlcm4gdGFibGUgdG8gYXNzdXJlIHRoYXQgdGhlIG9mZnNldHMKLSAgKiAgICBhbmQgaW5kaWNlcyBhcmUgdmFsaWQuICBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdAotICAqICAgIGFjdHVhbGx5IGRvZXMgdGhlIHRleHQgbGF5b3V0IGNhbiBhY2Nlc3MgdGhvc2UgdGFibGVzIHdpdGhvdXQgZXJyb3IKLSAgKiAgICBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS4KLSAgKgotICAqICAgIFRoZSBga2VybicgdGFibGUgdmFsaWRhdG9yIGluIEBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlIGRlYWxzIHdpdGggYm90aAotICAqICAgIHRoZSBuZXcgMzItYml0IGZvcm1hdCBhbmQgdGhlIGNsYXNzaWMgMTYtYml0IGZvcm1hdCwgd2hpbGUKLSAgKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSBvbmx5IHN1cHBvcnRzIHRoZSBjbGFzc2ljIDE2LWJpdCBmb3JtYXQuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICAgZmFjZSA6OgotICAqICAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgotICAqCi0gICogICAgdmFsaWRhdGlvbl9mbGFncyA6OgotICAqICAgICAgIEEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSBkaWFsZWN0IHRvIGJlIHZhbGlkYXRlZC4gIFNlZQotICAqICAgICAgIEBGVF9WQUxJREFURV9DS0VSTlhYWCBmb3IgcG9zc2libGUgdmFsdWVzLgotICAqCi0gICogQG91dHB1dDoKLSAgKiAgICBja2Vybl90YWJsZSA6OgotICAqICAgICAgIEEgcG9pbnRlciB0byB0aGUga2VybiB0YWJsZS4KLSAgKgotICAqIEByZXR1cm46Ci0gICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgotICAqCi0gICogQG5vdGU6Ci0gICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5Ci0gICogICBgY2tlcm5fdGFibGUnLCBieSBjYWxsaW5nIEBGVF9DbGFzc2ljS2Vybl9GcmVlLiAgQSBOVUxMIHZhbHVlCi0gICogICBpbmRpY2F0ZXMgdGhhdCB0aGUgdGFibGUgZG9lc24ndCBleGlzdCBpbiB0aGUgZm9udC4KLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIFZhbGlkYXRlIGNsYXNzaWMgKDE2LWJpdCBmb3JtYXQpIGtlcm4gdGFibGUgdG8gYXNzdXJlIHRoYXQgdGhlIG9mZnNldHMKKyAgICogICAgYW5kIGluZGljZXMgYXJlIHZhbGlkLiAgVGhlIGlkZWEgaXMgdGhhdCBhIGhpZ2hlci1sZXZlbCBsaWJyYXJ5IHRoYXQKKyAgICogICAgYWN0dWFsbHkgZG9lcyB0aGUgdGV4dCBsYXlvdXQgY2FuIGFjY2VzcyB0aG9zZSB0YWJsZXMgd2l0aG91dCBlcnJvcgorICAgKiAgICBjaGVja2luZyAod2hpY2ggY2FuIGJlIHF1aXRlIHRpbWUgY29uc3VtaW5nKS4KKyAgICoKKyAgICogICAgVGhlIGBrZXJuJyB0YWJsZSB2YWxpZGF0b3IgaW4gQEZUX1RydWVUeXBlR1hfVmFsaWRhdGUgZGVhbHMgd2l0aCBib3RoCisgICAqICAgIHRoZSBuZXcgMzItYml0IGZvcm1hdCBhbmQgdGhlIGNsYXNzaWMgMTYtYml0IGZvcm1hdCwgd2hpbGUKKyAgICogICAgRlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUgb25seSBzdXBwb3J0cyB0aGUgY2xhc3NpYyAxNi1iaXQgZm9ybWF0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICoKKyAgICogICAgdmFsaWRhdGlvbl9mbGFncyA6OgorICAgKiAgICAgIEEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSBkaWFsZWN0IHRvIGJlIHZhbGlkYXRlZC4gIFNlZQorICAgKiAgICAgIEBGVF9WQUxJREFURV9DS0VSTlhYWCBmb3IgcG9zc2libGUgdmFsdWVzLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICBja2Vybl90YWJsZSA6OgorICAgKiAgICAgIEEgcG9pbnRlciB0byB0aGUga2VybiB0YWJsZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgYnVmZmVycyBwb2ludGVkIHRvIGJ5CisgICAqICAgYGNrZXJuX3RhYmxlJywgYnkgY2FsbGluZyBARlRfQ2xhc3NpY0tlcm5fRnJlZS4gIEEgTlVMTCB2YWx1ZQorICAgKiAgIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZhbGlkYXRpb25fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKmNrZXJuX3RhYmxlICk7CiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICAgRlRfQ2xhc3NpY0tlcm5fRnJlZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgY2xhc3NpYyBLZXJuIHZhbGlkYXRvci4KLSAgKgotICAqIEBpbnB1dDoKLSAgKiAgICBmYWNlIDo6Ci0gICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCi0gICoKLSAgKiAgICB0YWJsZSA6OgotICAqICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQgYnkKLSAgKiAgICAgICBARlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUuCi0gICoKLSAgKiBAbm90ZToKLSAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKLSAgKiAgIEBGVF9DbGFzc2ljS2Vybl9WYWxpZGF0ZSBvbmx5LgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0NsYXNzaWNLZXJuX0ZyZWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBGcmVlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGJ5IGNsYXNzaWMgS2VybiB2YWxpZGF0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiAgICB0YWJsZSA6OgorICAgKiAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQgYnkKKyAgICogICAgICBARlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAgICogICBARlRfQ2xhc3NpY0tlcm5fVmFsaWRhdGUgb25seS4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX0NsYXNzaWNLZXJuX0ZyZWUoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCmluZGV4IGRiMDMzZGEuLjM3OGEzNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRnemlwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRnemlwLmgKKyAqCisgKiAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVEdaSVBfSF8KQEAgLTMxLDEwOCArMzEsMTA4IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGd6aXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdaSVAgU3RyZWFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzaW5nIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgR3ppcC1zcGVjaWZpYyBmdW5jdGlvbnMuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBnemlwCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBHWklQIFN0cmVhbXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFVzaW5nIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBHemlwLXNwZWNpZmljIGZ1bmN0aW9ucy4KKyAgICoKKyAgICovCiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBmdW5jdGlvbjoKLSAgKiAgIEZUX1N0cmVhbV9PcGVuR3ppcAotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgT3BlbiBhIG5ldyBzdHJlYW0gdG8gcGFyc2UgZ3ppcC1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCi0gICogICBtYWlubHkgdXNlZCB0byBzdXBwb3J0IHRoZSBjb21wcmVzc2VkIGAqLnBjZi5neicgZm9udHMgdGhhdCBjb21lCi0gICogICB3aXRoIFhGcmVlODYuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICBzdHJlYW0gOjoKLSAgKiAgICAgVGhlIHRhcmdldCBlbWJlZGRpbmcgc3RyZWFtLgotICAqCi0gICogICBzb3VyY2UgOjoKLSAgKiAgICAgVGhlIHNvdXJjZSBzdHJlYW0uCi0gICoKLSAgKiBAcmV0dXJuOgotICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KLSAgKgotICAqIEBub3RlOgotICAqICAgVGhlIHNvdXJjZSBzdHJlYW0gbXVzdCBiZSBvcGVuZWQgX2JlZm9yZV8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICAqCi0gICogICBDYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgbmV3IHN0cmVhbSB3aWxsCi0gICogICAqbm90KiBjYWxsIGBGVF9TdHJlYW1fQ2xvc2UnIG9uIHRoZSBzb3VyY2Ugc3RyZWFtLiAgTm9uZSBvZiB0aGUgc3RyZWFtCi0gICogICBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuCi0gICoKLSAgKiAgIFRoZSBzdHJlYW0gaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYyBhbmQgcmVzZXRzIHRoZSBkZWNvbXByZXNzaW9uCi0gICogICBwcm9jZXNzIGVhY2ggdGltZSBzZWVraW5nIGJhY2t3YXJkcyBpcyBuZWVkZWQgd2l0aGluIHRoZSBzdHJlYW0uCi0gICoKLSAgKiAgIEluIGNlcnRhaW4gYnVpbGRzIG9mIHRoZSBsaWJyYXJ5LCBnemlwIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzCi0gICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgotICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdwotICAqICAgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgZ3ppcHBlZCBzdHJlYW0gZnJvbQotICAqICAgaXQgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KLSAgKgotICAqICAgVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBpZiB5b3VyIGJ1aWxkCi0gICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TdHJlYW1fT3Blbkd6aXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIE9wZW4gYSBuZXcgc3RyZWFtIHRvIHBhcnNlIGd6aXAtY29tcHJlc3NlZCBmb250IGZpbGVzLiAgVGhpcyBpcworICAgKiAgIG1haW5seSB1c2VkIHRvIHN1cHBvcnQgdGhlIGNvbXByZXNzZWQgYCoucGNmLmd6JyBmb250cyB0aGF0IGNvbWUKKyAgICogICB3aXRoIFhGcmVlODYuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZW1iZWRkaW5nIHN0cmVhbS4KKyAgICoKKyAgICogICBzb3VyY2UgOjoKKyAgICogICAgIFRoZSBzb3VyY2Ugc3RyZWFtLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBzb3VyY2Ugc3RyZWFtIG11c3QgYmUgb3BlbmVkIF9iZWZvcmVfIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICoKKyAgICogICBDYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgbmV3IHN0cmVhbSB3aWxsCisgICAqICAgKm5vdCogY2FsbCBgRlRfU3RyZWFtX0Nsb3NlJyBvbiB0aGUgc291cmNlIHN0cmVhbS4gIE5vbmUgb2YgdGhlIHN0cmVhbQorICAgKiAgIG9iamVjdHMgd2lsbCBiZSByZWxlYXNlZCB0byB0aGUgaGVhcC4KKyAgICoKKyAgICogICBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIGlzIHZlcnkgYmFzaWMgYW5kIHJlc2V0cyB0aGUgZGVjb21wcmVzc2lvbgorICAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbS4KKyAgICoKKyAgICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgZ3ppcCBjb21wcmVzc2lvbiByZWNvZ25pdGlvbiBpcworICAgKiAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlZCB3aGVuIGNhbGxpbmcgQEZUX05ld19GYWNlIG9yIEBGVF9PcGVuX0ZhY2UuCisgICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdworICAgKiAgIGNvbXByZXNzZWQgZmlsZSwgdGhlIGxpYnJhcnkgd2lsbCB0cnkgdG8gb3BlbiBhIGd6aXBwZWQgc3RyZWFtIGZyb20KKyAgICogICBpdCBhbmQgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgeW91ciBidWlsZAorICAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCB6bGliIHN1cHBvcnQuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU3RyZWFtX09wZW5HemlwKCBGVF9TdHJlYW0gIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHNvdXJjZSApOwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICBGVF9HemlwX1VuY29tcHJlc3MKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIERlY29tcHJlc3MgYSB6aXBwZWQgaW5wdXQgYnVmZmVyIGludG8gYW4gb3V0cHV0IGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24KLSAgKiAgIGlzIG1vZGVsZWQgYWZ0ZXIgemxpYidzIGB1bmNvbXByZXNzJyBmdW5jdGlvbi4KLSAgKgotICAqIEBpbnB1dDoKLSAgKiAgIG1lbW9yeSA6OgotICAqICAgICBBIEZyZWVUeXBlIG1lbW9yeSBoYW5kbGUuCi0gICoKLSAgKiAgIGlucHV0IDo6Ci0gICogICAgIFRoZSBpbnB1dCBidWZmZXIuCi0gICoKLSAgKiAgIGlucHV0X2xlbiA6OgotICAqICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIuCi0gICoKLSAgKiBAb3V0cHV0OgotICAqICAgb3V0cHV0OjoKLSAgKiAgICAgVGhlIG91dHB1dCBidWZmZXIuCi0gICoKLSAgKiBAaW5vdXQ6Ci0gICogICBvdXRwdXRfbGVuIDo6Ci0gICogICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgb3V0cHV0Ci0gICogICAgIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlIHVuY29tcHJlc3NlZAotICAqICAgICBkYXRhIChzbyB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBiZSBrbm93biBpbgotICAqICAgICBhZHZhbmNlKS4gIEFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCBgb3V0cHV0X2xlbicgaXMgdGhlIHNpemUgb2YKLSAgKiAgICAgdGhlIHVzZWQgZGF0YSBpbiBgb3V0cHV0Jy4KLSAgKgotICAqIEByZXR1cm46Ci0gICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgotICAqCi0gICogQG5vdGU6Ci0gICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKLSAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCB6bGliIHN1cHBvcnQuCi0gICoKLSAgKiBAc2luY2U6Ci0gICogICAyLjUuMQotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HemlwX1VuY29tcHJlc3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlY29tcHJlc3MgYSB6aXBwZWQgaW5wdXQgYnVmZmVyIGludG8gYW4gb3V0cHV0IGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24KKyAgICogICBpcyBtb2RlbGVkIGFmdGVyIHpsaWIncyBgdW5jb21wcmVzcycgZnVuY3Rpb24uCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgRnJlZVR5cGUgbWVtb3J5IGhhbmRsZS4KKyAgICoKKyAgICogICBpbnB1dCA6OgorICAgKiAgICAgVGhlIGlucHV0IGJ1ZmZlci4KKyAgICoKKyAgICogICBpbnB1dF9sZW4gOjoKKyAgICogICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlci4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBvdXRwdXQgOjoKKyAgICogICAgIFRoZSBvdXRwdXQgYnVmZmVyLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgb3V0cHV0X2xlbiA6OgorICAgKiAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBvdXRwdXQKKyAgICogICAgIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlIHVuY29tcHJlc3NlZAorICAgKiAgICAgZGF0YSAoc28gdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgYmUga25vd24gaW4KKyAgICogICAgIGFkdmFuY2UpLiAgQWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24sIGBvdXRwdXRfbGVuJyBpcyB0aGUgc2l6ZSBvZgorICAgKiAgICAgdGhlIHVzZWQgZGF0YSBpbiBgb3V0cHV0Jy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKKyAgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggemxpYiBzdXBwb3J0LgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi41LjEKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HemlwX1VuY29tcHJlc3MoIEZUX01lbW9yeSAgICAgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIG91dHB1dCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKaW5kZXggNzllZGUxOS4uYTNmYTBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgKQEAgLTEsMjcgKzEsMjcgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0aW1hZ2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBnbHlwaCBpbWFnZSBmb3JtYXRzIGFuZCBkZWZhdWx0IHJhc3RlciBpbnRlcmZhY2UgICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGltYWdlLmgKKyAqCisgKiAgIEZyZWVUeXBlIGdseXBoIGltYWdlIGZvcm1hdHMgYW5kIGRlZmF1bHQgcmFzdGVyIGludGVyZmFjZQorICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTm90ZTogQSBgcmFzdGVyJyBpcyBzaW1wbHkgYSBzY2FuLWxpbmUgY29udmVydGVyLCB1c2VkIHRvIHJlbmRlciAgICAgICovCi0gIC8qICAgICAgIEZUX091dGxpbmVzIGludG8gRlRfQml0bWFwcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBOb3RlOiBBIGByYXN0ZXInIGlzIHNpbXBseSBhIHNjYW4tbGluZSBjb252ZXJ0ZXIsIHVzZWQgdG8gcmVuZGVyCisgICAqICAgICAgIEZUX091dGxpbmVzIGludG8gRlRfQml0bWFwcy4KKyAgICoKKyAgICovCiAKIAogI2lmbmRlZiBGVElNQUdFX0hfCkBAIC0zNyw0MCArMzcsNDIgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmFzaWNfdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGJhc2ljX3R5cGVzCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHR5cGUgRlRfUG9zIGlzIHVzZWQgdG8gc3RvcmUgdmVjdG9yaWFsIGNvb3JkaW5hdGVzLiAgRGVwZW5kaW5nICovCi0gIC8qICAgIG9uIHRoZSBjb250ZXh0LCB0aGVzZSBjYW4gcmVwcmVzZW50IGRpc3RhbmNlcyBpbiBpbnRlZ2VyIGZvbnQgICAgICAqLwotICAvKiAgICB1bml0cywgb3IgMTYuMTYsIG9yIDI2LjYgZml4ZWQtcG9pbnQgcGl4ZWwgY29vcmRpbmF0ZXMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9Qb3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSB0eXBlIEZUX1BvcyBpcyB1c2VkIHRvIHN0b3JlIHZlY3RvcmlhbCBjb29yZGluYXRlcy4gIERlcGVuZGluZworICAgKiAgIG9uIHRoZSBjb250ZXh0LCB0aGVzZSBjYW4gcmVwcmVzZW50IGRpc3RhbmNlcyBpbiBpbnRlZ2VyIGZvbnQKKyAgICogICB1bml0cywgb3IgMTYuMTYsIG9yIDI2LjYgZml4ZWQtcG9pbnQgcGl4ZWwgY29vcmRpbmF0ZXMuCisgICAqLwogICB0eXBlZGVmIHNpZ25lZCBsb25nICBGVF9Qb3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9WZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBhIDJEIHZlY3RvcjsgY29vcmRpbmF0ZXMgYXJlIG9mICAgKi8KLSAgLyogICAgdGhlIEZUX1BvcyB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeCA6OiBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHkgOjogVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfVmVjdG9yCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBhIDJEIHZlY3RvcjsgY29vcmRpbmF0ZXMgYXJlIG9mCisgICAqICAgdGhlIEZUX1BvcyB0eXBlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHggOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUuCisgICAqICAgeSA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfVmVjdG9yXwogICB7CiAgICAgRlRfUG9zICB4OwpAQCAtNzksMzkgKzgxLDQzIEBACiAgIH0gRlRfVmVjdG9yOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQkJveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGFuIG91dGxpbmUncyBib3VuZGluZyBib3gsIGkuZS4sIHRoZSAgICAgICovCi0gIC8qICAgIGNvb3JkaW5hdGVzIG9mIGl0cyBleHRyZW1hIGluIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCAgICAgICAgICAqLwotICAvKiAgICBkaXJlY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4TWluIDo6IFRoZSBob3Jpem9udGFsIG1pbmltdW0gKGxlZnQtbW9zdCkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHlNaW4gOjogVGhlIHZlcnRpY2FsIG1pbmltdW0gKGJvdHRvbS1tb3N0KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeE1heCA6OiBUaGUgaG9yaXpvbnRhbCBtYXhpbXVtIChyaWdodC1tb3N0KS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5TWF4IDo6IFRoZSB2ZXJ0aWNhbCBtYXhpbXVtICh0b3AtbW9zdCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYm91bmRpbmcgYm94IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbG93ZXIgICAgKi8KLSAgLyogICAgbGVmdCBhbmQgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4gIEluIFBvc3RTY3JpcHQsIHRob3NlIHZhbHVlcyBhcmUgICovCi0gIC8qICAgIG9mdGVuIGNhbGxlZCAobGx4LGxseSkgYW5kICh1cngsdXJ5KSwgcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgYHlNaW4nIGlzIG5lZ2F0aXZlLCB0aGlzIHZhbHVlIGdpdmVzIHRoZSBnbHlwaCdzIGRlc2NlbmRlci4gICAgICovCi0gIC8qICAgIE90aGVyd2lzZSwgdGhlIGdseXBoIGRvZXNuJ3QgZGVzY2VuZCBiZWxvdyB0aGUgYmFzZWxpbmUuICAgICAgICAgICAqLwotICAvKiAgICBTaW1pbGFybHksIGlmIGB5bWF4JyBpcyBwb3NpdGl2ZSwgdGhpcyB2YWx1ZSBnaXZlcyB0aGUgZ2x5cGgncyAgICAgKi8KLSAgLyogICAgYXNjZW5kZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBgeE1pbicgZ2l2ZXMgdGhlIGhvcml6b250YWwgZGlzdGFuY2UgZnJvbSB0aGUgZ2x5cGgncyBvcmlnaW4gdG8gICAgKi8KLSAgLyogICAgdGhlIGxlZnQgZWRnZSBvZiB0aGUgZ2x5cGgncyBib3VuZGluZyBib3guICBJZiBgeE1pbicgaXMgbmVnYXRpdmUsICovCi0gIC8qICAgIHRoZSBnbHlwaCBleHRlbmRzIHRvIHRoZSBsZWZ0IG9mIHRoZSBvcmlnaW4uICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfQkJveAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGFuIG91dGxpbmUncyBib3VuZGluZyBib3gsIGkuZS4sIHRoZQorICAgKiAgIGNvb3JkaW5hdGVzIG9mIGl0cyBleHRyZW1hIGluIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAorICAgKiAgIGRpcmVjdGlvbnMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgeE1pbiA6OgorICAgKiAgICAgVGhlIGhvcml6b250YWwgbWluaW11bSAobGVmdC1tb3N0KS4KKyAgICoKKyAgICogICB5TWluIDo6CisgICAqICAgICBUaGUgdmVydGljYWwgbWluaW11bSAoYm90dG9tLW1vc3QpLgorICAgKgorICAgKiAgIHhNYXggOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIG1heGltdW0gKHJpZ2h0LW1vc3QpLgorICAgKgorICAgKiAgIHlNYXggOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCBtYXhpbXVtICh0b3AtbW9zdCkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBib3VuZGluZyBib3ggaXMgc3BlY2lmaWVkIHdpdGggdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsb3dlcgorICAgKiAgIGxlZnQgYW5kIHRoZSB1cHBlciByaWdodCBjb3JuZXIuICBJbiBQb3N0U2NyaXB0LCB0aG9zZSB2YWx1ZXMgYXJlCisgICAqICAgb2Z0ZW4gY2FsbGVkIChsbHgsbGx5KSBhbmQgKHVyeCx1cnkpLCByZXNwZWN0aXZlbHkuCisgICAqCisgICAqICAgSWYgYHlNaW4nIGlzIG5lZ2F0aXZlLCB0aGlzIHZhbHVlIGdpdmVzIHRoZSBnbHlwaCdzIGRlc2NlbmRlci4KKyAgICogICBPdGhlcndpc2UsIHRoZSBnbHlwaCBkb2Vzbid0IGRlc2NlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLgorICAgKiAgIFNpbWlsYXJseSwgaWYgYHltYXgnIGlzIHBvc2l0aXZlLCB0aGlzIHZhbHVlIGdpdmVzIHRoZSBnbHlwaCdzCisgICAqICAgYXNjZW5kZXIuCisgICAqCisgICAqICAgYHhNaW4nIGdpdmVzIHRoZSBob3Jpem9udGFsIGRpc3RhbmNlIGZyb20gdGhlIGdseXBoJ3Mgb3JpZ2luIHRvCisgICAqICAgdGhlIGxlZnQgZWRnZSBvZiB0aGUgZ2x5cGgncyBib3VuZGluZyBib3guICBJZiBgeE1pbicgaXMgbmVnYXRpdmUsCisgICAqICAgdGhlIGdseXBoIGV4dGVuZHMgdG8gdGhlIGxlZnQgb2YgdGhlIG9yaWdpbi4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9CQm94XwogICB7CiAgICAgRlRfUG9zICB4TWluLCB5TWluOwpAQCAtMTIwLDYzICsxMjYsNjMgQEAKICAgfSBGVF9CQm94OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUGl4ZWxfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQgb2YgcGl4ZWxzIGluIGEgICAgICovCi0gIC8qICAgIGdpdmVuIGJpdG1hcC4gIE5vdGUgdGhhdCBhZGRpdGlvbmFsIGZvcm1hdHMgbWF5IGJlIGFkZGVkIGluIHRoZSAgICAqLwotICAvKiAgICBmdXR1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9QSVhFTF9NT0RFX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBWYWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9QSVhFTF9NT0RFX01PTk8gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBIG1vbm9jaHJvbWUgYml0bWFwLCB1c2luZyAxfmJpdCBwZXIgcGl4ZWwuICBOb3RlIHRoYXQgcGl4ZWxzICAgICovCi0gIC8qICAgICAgYXJlIHN0b3JlZCBpbiBtb3N0LXNpZ25pZmljYW50IG9yZGVyIChNU0IpLCB3aGljaCBtZWFucyB0aGF0ICAgICAqLwotICAvKiAgICAgIHRoZSBsZWZ0LW1vc3QgcGl4ZWwgaW4gYSBieXRlIGhhcyB2YWx1ZSAxMjguICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEFuIDgtYml0IGJpdG1hcCwgZ2VuZXJhbGx5IHVzZWQgdG8gcmVwcmVzZW50IGFudGktYWxpYXNlZCBnbHlwaCAgKi8KLSAgLyogICAgICBpbWFnZXMuICBFYWNoIHBpeGVsIGlzIHN0b3JlZCBpbiBvbmUgYnl0ZS4gIE5vdGUgdGhhdCB0aGUgbnVtYmVyICovCi0gIC8qICAgICAgb2YgYGdyYXknIGxldmVscyBpcyBzdG9yZWQgaW4gdGhlIGBudW1fZ3JheXMnIGZpZWxkIG9mIHRoZSAgICAgICAqLwotICAvKiAgICAgIEBGVF9CaXRtYXAgc3RydWN0dXJlIChpdCBnZW5lcmFsbHkgaXMgMjU2KS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWTIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgMi1iaXQgcGVyIHBpeGVsIGJpdG1hcCwgdXNlZCB0byByZXByZXNlbnQgZW1iZWRkZWQgICAgICAgICAgICAgKi8KLSAgLyogICAgICBhbnRpLWFsaWFzZWQgYml0bWFwcyBpbiBmb250IGZpbGVzIGFjY29yZGluZyB0byB0aGUgT3BlblR5cGUgICAgICovCi0gIC8qICAgICAgc3BlY2lmaWNhdGlvbi4gIFdlIGhhdmVuJ3QgZm91bmQgYSBzaW5nbGUgZm9udCB1c2luZyB0aGlzICAgICAgICAqLwotICAvKiAgICAgIGZvcm1hdCwgaG93ZXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1BJWEVMX01PREVfR1JBWTQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgNC1iaXQgcGVyIHBpeGVsIGJpdG1hcCwgcmVwcmVzZW50aW5nIGVtYmVkZGVkIGFudGktYWxpYXNlZCAgICAgKi8KLSAgLyogICAgICBiaXRtYXBzIGluIGZvbnQgZmlsZXMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICovCi0gIC8qICAgICAgV2UgaGF2ZW4ndCBmb3VuZCBhIHNpbmdsZSBmb250IHVzaW5nIHRoaXMgZm9ybWF0LCBob3dldmVyLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUElYRUxfTU9ERV9MQ0QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQW4gOC1iaXQgYml0bWFwLCByZXByZXNlbnRpbmcgUkdCIG9yIEJHUiBkZWNpbWF0ZWQgZ2x5cGggaW1hZ2VzICAqLwotICAvKiAgICAgIHVzZWQgZm9yIGRpc3BsYXkgb24gTENEIGRpc3BsYXlzOyB0aGUgYml0bWFwIGlzIHRocmVlIHRpbWVzICAgICAgKi8KLSAgLyogICAgICB3aWRlciB0aGFuIHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZS4gIFNlZSBhbHNvICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQEZUX1JFTkRFUl9NT0RFX0xDRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUElYRUxfTU9ERV9MQ0RfViA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQW4gOC1iaXQgYml0bWFwLCByZXByZXNlbnRpbmcgUkdCIG9yIEJHUiBkZWNpbWF0ZWQgZ2x5cGggaW1hZ2VzICAqLwotICAvKiAgICAgIHVzZWQgZm9yIGRpc3BsYXkgb24gcm90YXRlZCBMQ0QgZGlzcGxheXM7IHRoZSBiaXRtYXAgaXMgdGhyZWUgICAgKi8KLSAgLyogICAgICB0aW1lcyB0YWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwgZ2x5cGggaW1hZ2UuICBTZWUgYWxzbyAgICAgICAgICAgICovCi0gIC8qICAgICAgQEZUX1JFTkRFUl9NT0RFX0xDRF9WLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUElYRUxfTU9ERV9CR1JBIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgW1NpbmNlIDIuNV0gQW4gaW1hZ2Ugd2l0aCBmb3VyIDgtYml0IGNoYW5uZWxzIHBlciBwaXhlbCwgICAgICAgICAqLwotICAvKiAgICAgIHJlcHJlc2VudGluZyBhIGNvbG9yIGltYWdlIChzdWNoIGFzIGVtb3RpY29ucykgd2l0aCBhbHBoYSAgICAgICAgKi8KLSAgLyogICAgICBjaGFubmVsLiAgRm9yIGVhY2ggcGl4ZWwsIHRoZSBmb3JtYXQgaXMgQkdSQSwgd2hpY2ggbWVhbnMsIHRoZSAgICovCi0gIC8qICAgICAgYmx1ZSBjaGFubmVsIGNvbWVzIGZpcnN0IGluIG1lbW9yeS4gIFRoZSBjb2xvciBjaGFubmVscyBhcmUgICAgICAqLwotICAvKiAgICAgIHByZS1tdWx0aXBsaWVkIGFuZCBpbiB0aGUgc1JHQiBjb2xvcnNwYWNlLiAgRm9yIGV4YW1wbGUsIGZ1bGwgICAgKi8KLSAgLyogICAgICByZWQgYXQgaGFsZi10cmFuc2x1Y2VudCBvcGFjaXR5IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgICAgICAgICAgICovCi0gIC8qICAgICAgYDAwLDAwLDgwLDgwJywgbm90IGAwMCwwMCxGRiw4MCcuICBTZWUgYWxzbyBARlRfTE9BRF9DT0xPUi4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX1BpeGVsX01vZGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIGVudW1lcmF0aW9uIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgZm9ybWF0IG9mIHBpeGVscyBpbiBhCisgICAqICAgZ2l2ZW4gYml0bWFwLiAgTm90ZSB0aGF0IGFkZGl0aW9uYWwgZm9ybWF0cyBtYXkgYmUgYWRkZWQgaW4gdGhlCisgICAqICAgZnV0dXJlLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX1BJWEVMX01PREVfTk9ORSA6OgorICAgKiAgICAgVmFsdWV+MCBpcyByZXNlcnZlZC4KKyAgICoKKyAgICogICBGVF9QSVhFTF9NT0RFX01PTk8gOjoKKyAgICogICAgIEEgbW9ub2Nocm9tZSBiaXRtYXAsIHVzaW5nIDF+Yml0IHBlciBwaXhlbC4gIE5vdGUgdGhhdCBwaXhlbHMKKyAgICogICAgIGFyZSBzdG9yZWQgaW4gbW9zdC1zaWduaWZpY2FudCBvcmRlciAoTVNCKSwgd2hpY2ggbWVhbnMgdGhhdAorICAgKiAgICAgdGhlIGxlZnQtbW9zdCBwaXhlbCBpbiBhIGJ5dGUgaGFzIHZhbHVlIDEyOC4KKyAgICoKKyAgICogICBGVF9QSVhFTF9NT0RFX0dSQVkgOjoKKyAgICogICAgIEFuIDgtYml0IGJpdG1hcCwgZ2VuZXJhbGx5IHVzZWQgdG8gcmVwcmVzZW50IGFudGktYWxpYXNlZCBnbHlwaAorICAgKiAgICAgaW1hZ2VzLiAgRWFjaCBwaXhlbCBpcyBzdG9yZWQgaW4gb25lIGJ5dGUuICBOb3RlIHRoYXQgdGhlIG51bWJlcgorICAgKiAgICAgb2YgYGdyYXknIGxldmVscyBpcyBzdG9yZWQgaW4gdGhlIGBudW1fZ3JheXMnIGZpZWxkIG9mIHRoZQorICAgKiAgICAgQEZUX0JpdG1hcCBzdHJ1Y3R1cmUgKGl0IGdlbmVyYWxseSBpcyAyNTYpLgorICAgKgorICAgKiAgIEZUX1BJWEVMX01PREVfR1JBWTIgOjoKKyAgICogICAgIEEgMi1iaXQgcGVyIHBpeGVsIGJpdG1hcCwgdXNlZCB0byByZXByZXNlbnQgZW1iZWRkZWQKKyAgICogICAgIGFudGktYWxpYXNlZCBiaXRtYXBzIGluIGZvbnQgZmlsZXMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuVHlwZQorICAgKiAgICAgc3BlY2lmaWNhdGlvbi4gIFdlIGhhdmVuJ3QgZm91bmQgYSBzaW5nbGUgZm9udCB1c2luZyB0aGlzCisgICAqICAgICBmb3JtYXQsIGhvd2V2ZXIuCisgICAqCisgICAqICAgRlRfUElYRUxfTU9ERV9HUkFZNCA6OgorICAgKiAgICAgQSA0LWJpdCBwZXIgcGl4ZWwgYml0bWFwLCByZXByZXNlbnRpbmcgZW1iZWRkZWQgYW50aS1hbGlhc2VkCisgICAqICAgICBiaXRtYXBzIGluIGZvbnQgZmlsZXMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgorICAgKiAgICAgV2UgaGF2ZW4ndCBmb3VuZCBhIHNpbmdsZSBmb250IHVzaW5nIHRoaXMgZm9ybWF0LCBob3dldmVyLgorICAgKgorICAgKiAgIEZUX1BJWEVMX01PREVfTENEIDo6CisgICAqICAgICBBbiA4LWJpdCBiaXRtYXAsIHJlcHJlc2VudGluZyBSR0Igb3IgQkdSIGRlY2ltYXRlZCBnbHlwaCBpbWFnZXMKKyAgICogICAgIHVzZWQgZm9yIGRpc3BsYXkgb24gTENEIGRpc3BsYXlzOyB0aGUgYml0bWFwIGlzIHRocmVlIHRpbWVzCisgICAqICAgICB3aWRlciB0aGFuIHRoZSBvcmlnaW5hbCBnbHlwaCBpbWFnZS4gIFNlZSBhbHNvCisgICAqICAgICBARlRfUkVOREVSX01PREVfTENELgorICAgKgorICAgKiAgIEZUX1BJWEVMX01PREVfTENEX1YgOjoKKyAgICogICAgIEFuIDgtYml0IGJpdG1hcCwgcmVwcmVzZW50aW5nIFJHQiBvciBCR1IgZGVjaW1hdGVkIGdseXBoIGltYWdlcworICAgKiAgICAgdXNlZCBmb3IgZGlzcGxheSBvbiByb3RhdGVkIExDRCBkaXNwbGF5czsgdGhlIGJpdG1hcCBpcyB0aHJlZQorICAgKiAgICAgdGltZXMgdGFsbGVyIHRoYW4gdGhlIG9yaWdpbmFsIGdseXBoIGltYWdlLiAgU2VlIGFsc28KKyAgICogICAgIEBGVF9SRU5ERVJfTU9ERV9MQ0RfVi4KKyAgICoKKyAgICogICBGVF9QSVhFTF9NT0RFX0JHUkEgOjoKKyAgICogICAgIFtTaW5jZSAyLjVdIEFuIGltYWdlIHdpdGggZm91ciA4LWJpdCBjaGFubmVscyBwZXIgcGl4ZWwsCisgICAqICAgICByZXByZXNlbnRpbmcgYSBjb2xvciBpbWFnZSAoc3VjaCBhcyBlbW90aWNvbnMpIHdpdGggYWxwaGEKKyAgICogICAgIGNoYW5uZWwuICBGb3IgZWFjaCBwaXhlbCwgdGhlIGZvcm1hdCBpcyBCR1JBLCB3aGljaCBtZWFucywgdGhlCisgICAqICAgICBibHVlIGNoYW5uZWwgY29tZXMgZmlyc3QgaW4gbWVtb3J5LiAgVGhlIGNvbG9yIGNoYW5uZWxzIGFyZQorICAgKiAgICAgcHJlLW11bHRpcGxpZWQgYW5kIGluIHRoZSBzUkdCIGNvbG9yc3BhY2UuICBGb3IgZXhhbXBsZSwgZnVsbAorICAgKiAgICAgcmVkIGF0IGhhbGYtdHJhbnNsdWNlbnQgb3BhY2l0eSB3aWxsIGJlIHJlcHJlc2VudGVkIGFzCisgICAqICAgICBgMDAsMDAsODAsODAnLCBub3QgYDAwLDAwLEZGLDgwJy4gIFNlZSBhbHNvIEBGVF9MT0FEX0NPTE9SLgorICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9QaXhlbF9Nb2RlXwogICB7CiAgICAgRlRfUElYRUxfTU9ERV9OT05FID0gMCwKQEAgLTIwMiw2MiArMjA4LDcwIEBACiAjZGVmaW5lIGZ0X3BpeGVsX21vZGVfcGFsNCAgIEZUX1BJWEVMX01PREVfR1JBWTQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0JpdG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBiaXRtYXAgb3IgcGl4bWFwIHRvIHRoZSByYXN0ZXIuICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgd2Ugbm93IG1hbmFnZSBwaXhtYXBzIG9mIHZhcmlvdXMgZGVwdGhzIHRocm91Z2ggdGhlICAgICAgKi8KLSAgLyogICAgYHBpeGVsX21vZGUnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcm93cyAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgYml0bWFwIHJvd3MuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aWR0aCAgICAgICAgOjogVGhlIG51bWJlciBvZiBwaXhlbHMgaW4gYml0bWFwIHJvdy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBpdGNoICAgICAgICA6OiBUaGUgcGl0Y2gncyBhYnNvbHV0ZSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdGFrZW4gYnkgb25lIGJpdG1hcCByb3csIGluY2x1ZGluZyBwYWRkaW5nLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBwaXRjaCBpcyBwb3NpdGl2ZSB3aGVuIHRoZSBiaXRtYXAgaGFzICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBhIGBkb3duJyBmbG93LCBhbmQgbmVnYXRpdmUgd2hlbiBpdCBoYXMgYW4gYHVwJyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgZmxvdy4gIEluIGFsbCBjYXNlcywgdGhlIHBpdGNoIGlzIGFuIG9mZnNldCB0byBhZGQgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHRvIGEgYml0bWFwIHBvaW50ZXIgaW4gb3JkZXIgdG8gZ28gZG93biBvbmUgcm93LiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGBwYWRkaW5nJyBtZWFucyB0aGUgYWxpZ25tZW50IG9mIGEgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGJpdG1hcCB0byBhIGJ5dGUgYm9yZGVyLCBhbmQgRnJlZVR5cGUgZnVuY3Rpb25zICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBub3JtYWxseSBhbGlnbiB0byB0aGUgc21hbGxlc3QgcG9zc2libGUgaW50ZWdlciAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIEIvVyByYXN0ZXJpemVyLCBgcGl0Y2gnIGlzIGFsd2F5cyBhbiBldmVuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBUbyBjaGFuZ2UgdGhlIHBpdGNoIG9mIGEgYml0bWFwIChzYXksIHRvIG1ha2UgaXQgYSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgb2YgNCksIHVzZSBARlRfQml0bWFwX0NvbnZlcnQuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBtaWdodCB1c2UgY2FsbGJhY2sgZnVuY3Rpb25zIHRvICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSByZW5kZXIgdG8gdGhlIGFwcGxpY2F0aW9uJ3Mgc3VyZmFjZTsgc2VlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUgYGV4YW1wbGUyLmNwcCcgaW4gdGhlIHR1dG9yaWFsIGZvciBhICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGRlbW9uc3RyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWZmZXIgICAgICAgOjogQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBiaXRtYXAgYnVmZmVyLiAgVGhpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBiZSBhbGlnbmVkIG9uIDMyLWJpdCBib3VuZGFyaWVzIGluICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBtb3N0IGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2dyYXlzICAgIDo6IFRoaXMgZmllbGQgaXMgb25seSB1c2VkIHdpdGggICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBARlRfUElYRUxfTU9ERV9HUkFZOyBpdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGdyYXkgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgbGV2ZWxzIHVzZWQgaW4gdGhlIGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBpeGVsX21vZGUgICA6OiBUaGUgcGl4ZWwgbW9kZSwgaS5lLiwgaG93IHBpeGVsIGJpdHMgYXJlIHN0b3JlZC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgU2VlIEBGVF9QaXhlbF9Nb2RlIGZvciBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhbGV0dGVfbW9kZSA6OiBUaGlzIGZpZWxkIGlzIGludGVuZGVkIGZvciBwYWxldHRlZCBwaXhlbCBtb2RlczsgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgaXQgaW5kaWNhdGVzIGhvdyB0aGUgcGFsZXR0ZSBpcyBzdG9yZWQuICBOb3QgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHVzZWQgY3VycmVudGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYWxldHRlICAgICAgOjogQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBiaXRtYXAgcGFsZXR0ZTsgdGhpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGludGVuZGVkIGZvciBwYWxldHRlZCBwaXhlbCBtb2Rlcy4gIE5vdCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICB1c2VkIGN1cnJlbnRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfQml0bWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgYml0bWFwIG9yIHBpeG1hcCB0byB0aGUgcmFzdGVyLgorICAgKiAgIE5vdGUgdGhhdCB3ZSBub3cgbWFuYWdlIHBpeG1hcHMgb2YgdmFyaW91cyBkZXB0aHMgdGhyb3VnaCB0aGUKKyAgICogICBgcGl4ZWxfbW9kZScgZmllbGQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcm93cyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBiaXRtYXAgcm93cy4KKyAgICoKKyAgICogICB3aWR0aCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBwaXhlbHMgaW4gYml0bWFwIHJvdy4KKyAgICoKKyAgICogICBwaXRjaCA6OgorICAgKiAgICAgVGhlIHBpdGNoJ3MgYWJzb2x1dGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcworICAgKiAgICAgdGFrZW4gYnkgb25lIGJpdG1hcCByb3csIGluY2x1ZGluZyBwYWRkaW5nLgorICAgKiAgICAgSG93ZXZlciwgdGhlIHBpdGNoIGlzIHBvc2l0aXZlIHdoZW4gdGhlIGJpdG1hcCBoYXMKKyAgICogICAgIGEgYGRvd24nIGZsb3csIGFuZCBuZWdhdGl2ZSB3aGVuIGl0IGhhcyBhbiBgdXAnCisgICAqICAgICBmbG93LiAgSW4gYWxsIGNhc2VzLCB0aGUgcGl0Y2ggaXMgYW4gb2Zmc2V0IHRvIGFkZAorICAgKiAgICAgdG8gYSBiaXRtYXAgcG9pbnRlciBpbiBvcmRlciB0byBnbyBkb3duIG9uZSByb3cuCisgICAqCisgICAqICAgICBOb3RlIHRoYXQgYHBhZGRpbmcnIG1lYW5zIHRoZSBhbGlnbm1lbnQgb2YgYQorICAgKiAgICAgYml0bWFwIHRvIGEgYnl0ZSBib3JkZXIsIGFuZCBGcmVlVHlwZSBmdW5jdGlvbnMKKyAgICogICAgIG5vcm1hbGx5IGFsaWduIHRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBpbnRlZ2VyCisgICAqICAgICB2YWx1ZS4KKyAgICoKKyAgICogICAgIEZvciB0aGUgQi9XIHJhc3Rlcml6ZXIsIGBwaXRjaCcgaXMgYWx3YXlzIGFuIGV2ZW4KKyAgICogICAgIG51bWJlci4KKyAgICoKKyAgICogICAgIFRvIGNoYW5nZSB0aGUgcGl0Y2ggb2YgYSBiaXRtYXAgKHNheSwgdG8gbWFrZSBpdCBhCisgICAqICAgICBtdWx0aXBsZSBvZiA0KSwgdXNlIEBGVF9CaXRtYXBfQ29udmVydC4KKyAgICogICAgIEFsdGVybmF0aXZlbHksIHlvdSBtaWdodCB1c2UgY2FsbGJhY2sgZnVuY3Rpb25zIHRvCisgICAqICAgICBkaXJlY3RseSByZW5kZXIgdG8gdGhlIGFwcGxpY2F0aW9uJ3Mgc3VyZmFjZTsgc2VlCisgICAqICAgICB0aGUgZmlsZSBgZXhhbXBsZTIuY3BwJyBpbiB0aGUgdHV0b3JpYWwgZm9yIGEKKyAgICogICAgIGRlbW9uc3RyYXRpb24uCisgICAqCisgICAqICAgYnVmZmVyIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGJpdG1hcCBidWZmZXIuICBUaGlzCisgICAqICAgICB2YWx1ZSBzaG91bGQgYmUgYWxpZ25lZCBvbiAzMi1iaXQgYm91bmRhcmllcyBpbgorICAgKiAgICAgbW9zdCBjYXNlcy4KKyAgICoKKyAgICogICBudW1fZ3JheXMgOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgb25seSB1c2VkIHdpdGgKKyAgICogICAgIEBGVF9QSVhFTF9NT0RFX0dSQVk7IGl0IGdpdmVzIHRoZSBudW1iZXIgb2YgZ3JheQorICAgKiAgICAgbGV2ZWxzIHVzZWQgaW4gdGhlIGJpdG1hcC4KKyAgICoKKyAgICogICBwaXhlbF9tb2RlIDo6CisgICAqICAgICBUaGUgcGl4ZWwgbW9kZSwgaS5lLiwgaG93IHBpeGVsIGJpdHMgYXJlIHN0b3JlZC4KKyAgICogICAgIFNlZSBARlRfUGl4ZWxfTW9kZSBmb3IgcG9zc2libGUgdmFsdWVzLgorICAgKgorICAgKiAgIHBhbGV0dGVfbW9kZSA6OgorICAgKiAgICAgVGhpcyBmaWVsZCBpcyBpbnRlbmRlZCBmb3IgcGFsZXR0ZWQgcGl4ZWwgbW9kZXM7CisgICAqICAgICBpdCBpbmRpY2F0ZXMgaG93IHRoZSBwYWxldHRlIGlzIHN0b3JlZC4gIE5vdAorICAgKiAgICAgdXNlZCBjdXJyZW50bHkuCisgICAqCisgICAqICAgcGFsZXR0ZSA6OgorICAgKiAgICAgQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBiaXRtYXAgcGFsZXR0ZTsgdGhpcworICAgKiAgICAgZmllbGQgaXMgaW50ZW5kZWQgZm9yIHBhbGV0dGVkIHBpeGVsIG1vZGVzLiAgTm90CisgICAqICAgICB1c2VkIGN1cnJlbnRseS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9CaXRtYXBfCiAgIHsKICAgICB1bnNpZ25lZCBpbnQgICAgcm93czsKQEAgLTI3Miw2NSArMjg2LDcxIEBACiAgIH0gRlRfQml0bWFwOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZV9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIG91dGxpbmVfcHJvY2Vzc2luZworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYW4gb3V0bGluZSB0byB0aGUgc2Nhbi1saW5lICAgICAqLwotICAvKiAgICBjb252ZXJ0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuX2NvbnRvdXJzIDo6IFRoZSBudW1iZXIgb2YgY29udG91cnMgaW4gdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5fcG9pbnRzICAgOjogVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9pbnRzICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYG5fcG9pbnRzJyBARlRfVmVjdG9yICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZWxlbWVudHMsIGdpdmluZyB0aGUgb3V0bGluZSdzIHBvaW50IGNvb3JkaW5hdGVzLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFncyAgICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYG5fcG9pbnRzJyBjaGFycywgZ2l2aW5nICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZWFjaCBvdXRsaW5lIHBvaW50J3MgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBJZiBiaXR+MCBpcyB1bnNldCwgdGhlIHBvaW50IGlzIGBvZmYnIHRoZSBjdXJ2ZSwgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgaS5lLiwgYSBCZXppZXIgY29udHJvbCBwb2ludCwgd2hpbGUgaXQgaXMgYG9uJyBpZiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgQml0fjEgaXMgbWVhbmluZ2Z1bCBmb3IgYG9mZicgcG9pbnRzIG9ubHkuICBJZiBzZXQsICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGl0IGluZGljYXRlcyBhIHRoaXJkLW9yZGVyIEJlemllciBhcmMgY29udHJvbCBwb2ludDsgKi8KLSAgLyogICAgICAgICAgICAgICAgICBhbmQgYSBzZWNvbmQtb3JkZXIgY29udHJvbCBwb2ludCBpZiB1bnNldC4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIElmIGJpdH4yIGlzIHNldCwgYml0cyA1LTcgY29udGFpbiB0aGUgZHJvcC1vdXQgbW9kZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAoYXMgZGVmaW5lZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbjsgdGhlIHZhbHVlICovCi0gIC8qICAgICAgICAgICAgICAgICAgaXMgdGhlIHNhbWUgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBTQ0FOTU9ERSAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgQml0cyAzIGFuZH40IGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgcHVycG9zZXMuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udG91cnMgICA6OiBBbiBhcnJheSBvZiBgbl9jb250b3Vycycgc2hvcnRzLCBnaXZpbmcgdGhlIGVuZCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgcG9pbnQgb2YgZWFjaCBjb250b3VyIHdpdGhpbiB0aGUgb3V0bGluZS4gIEZvciAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGV4YW1wbGUsIHRoZSBmaXJzdCBjb250b3VyIGlzIGRlZmluZWQgYnkgdGhlIHBvaW50cyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBgMCcgdG8gYGNvbnRvdXJzWzBdJywgdGhlIHNlY29uZCBvbmUgaXMgZGVmaW5lZCBieSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdGhlIHBvaW50cyBgY29udG91cnNbMF0rMScgdG8gYGNvbnRvdXJzWzFdJywgZXRjLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmxhZ3MgICAgICA6OiBBIHNldCBvZiBiaXQgZmxhZ3MgdXNlZCB0byBjaGFyYWN0ZXJpemUgdGhlIG91dGxpbmUgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYW5kIGdpdmUgaGludHMgdG8gdGhlIHNjYW4tY29udmVydGVyIGFuZCBoaW50ZXIgb24gICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGhvdyB0byBjb252ZXJ0L2dyaWQtZml0IGl0LiAgU2VlIEBGVF9PVVRMSU5FX1hYWC4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgQi9XIHJhc3Rlcml6ZXIgb25seSBjaGVja3MgYml0fjIgaW4gdGhlIGB0YWdzJyBhcnJheSBmb3IgdGhlICAgKi8KLSAgLyogICAgZmlyc3QgcG9pbnQgb2YgZWFjaCBjb250b3VyLiAgVGhlIGRyb3Atb3V0IG1vZGUgYXMgZ2l2ZW4gd2l0aCAgICAgICovCi0gIC8qICAgIEBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUywgQEZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMsIGFuZCAgICAgICAqLwotICAvKiAgICBARlRfT1VUTElORV9JTkNMVURFX1NUVUJTIGluIGBmbGFncycgaXMgdGhlbiBvdmVycmlkZGVuLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX091dGxpbmUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgYW4gb3V0bGluZSB0byB0aGUgc2Nhbi1saW5lCisgICAqICAgY29udmVydGVyLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG5fY29udG91cnMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgY29udG91cnMgaW4gdGhlIG91dGxpbmUuCisgICAqCisgICAqICAgbl9wb2ludHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBvdXRsaW5lLgorICAgKgorICAgKiAgIHBvaW50cyA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGBuX3BvaW50cycgQEZUX1ZlY3RvcgorICAgKiAgICAgZWxlbWVudHMsIGdpdmluZyB0aGUgb3V0bGluZSdzIHBvaW50IGNvb3JkaW5hdGVzLgorICAgKgorICAgKiAgIHRhZ3MgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBgbl9wb2ludHMnIGNoYXJzLCBnaXZpbmcKKyAgICogICAgIGVhY2ggb3V0bGluZSBwb2ludCdzIHR5cGUuCisgICAqCisgICAqICAgICBJZiBiaXR+MCBpcyB1bnNldCwgdGhlIHBvaW50IGlzIGBvZmYnIHRoZSBjdXJ2ZSwKKyAgICogICAgIGkuZS4sIGEgQmV6aWVyIGNvbnRyb2wgcG9pbnQsIHdoaWxlIGl0IGlzIGBvbicgaWYKKyAgICogICAgIHNldC4KKyAgICoKKyAgICogICAgIEJpdH4xIGlzIG1lYW5pbmdmdWwgZm9yIGBvZmYnIHBvaW50cyBvbmx5LiAgSWYgc2V0LAorICAgKiAgICAgaXQgaW5kaWNhdGVzIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYyBjb250cm9sIHBvaW50OworICAgKiAgICAgYW5kIGEgc2Vjb25kLW9yZGVyIGNvbnRyb2wgcG9pbnQgaWYgdW5zZXQuCisgICAqCisgICAqICAgICBJZiBiaXR+MiBpcyBzZXQsIGJpdHMgNS03IGNvbnRhaW4gdGhlIGRyb3Atb3V0IG1vZGUKKyAgICogICAgIChhcyBkZWZpbmVkIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uOyB0aGUgdmFsdWUKKyAgICogICAgIGlzIHRoZSBzYW1lIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgU0NBTk1PREUKKyAgICogICAgIGluc3RydWN0aW9uKS4KKyAgICoKKyAgICogICAgIEJpdHMgMyBhbmR+NCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHB1cnBvc2VzLgorICAgKgorICAgKiAgIGNvbnRvdXJzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBgbl9jb250b3Vycycgc2hvcnRzLCBnaXZpbmcgdGhlIGVuZAorICAgKiAgICAgcG9pbnQgb2YgZWFjaCBjb250b3VyIHdpdGhpbiB0aGUgb3V0bGluZS4gIEZvcgorICAgKiAgICAgZXhhbXBsZSwgdGhlIGZpcnN0IGNvbnRvdXIgaXMgZGVmaW5lZCBieSB0aGUgcG9pbnRzCisgICAqICAgICBgMCcgdG8gYGNvbnRvdXJzWzBdJywgdGhlIHNlY29uZCBvbmUgaXMgZGVmaW5lZCBieQorICAgKiAgICAgdGhlIHBvaW50cyBgY29udG91cnNbMF0rMScgdG8gYGNvbnRvdXJzWzFdJywgZXRjLgorICAgKgorICAgKiAgIGZsYWdzIDo6CisgICAqICAgICBBIHNldCBvZiBiaXQgZmxhZ3MgdXNlZCB0byBjaGFyYWN0ZXJpemUgdGhlIG91dGxpbmUKKyAgICogICAgIGFuZCBnaXZlIGhpbnRzIHRvIHRoZSBzY2FuLWNvbnZlcnRlciBhbmQgaGludGVyIG9uCisgICAqICAgICBob3cgdG8gY29udmVydC9ncmlkLWZpdCBpdC4gIFNlZSBARlRfT1VUTElORV9YWFguCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBCL1cgcmFzdGVyaXplciBvbmx5IGNoZWNrcyBiaXR+MiBpbiB0aGUgYHRhZ3MnIGFycmF5IGZvciB0aGUKKyAgICogICBmaXJzdCBwb2ludCBvZiBlYWNoIGNvbnRvdXIuICBUaGUgZHJvcC1vdXQgbW9kZSBhcyBnaXZlbiB3aXRoCisgICAqICAgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTLCBARlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUywgYW5kCisgICAqICAgQEZUX09VVExJTkVfSU5DTFVERV9TVFVCUyBpbiBgZmxhZ3MnIGlzIHRoZW4gb3ZlcnJpZGRlbi4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9PdXRsaW5lXwogICB7CiAgICAgc2hvcnQgICAgICAgbl9jb250b3VyczsgICAgICAvKiBudW1iZXIgb2YgY29udG91cnMgaW4gZ2x5cGggICAgICAgICovCkBAIC0zNTIsNzggKzM3Miw3OCBAQAogI2RlZmluZSBGVF9PVVRMSU5FX1BPSU5UU19NQVggICAgU0hSVF9NQVgKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09VVExJTkVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZSBmb3IgdGhlIGZsYWdzIGluIGFuIG91dGxpbmUncyAgICAqLwotICAvKiAgICBgZmxhZ3MnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PVVRMSU5FX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBWYWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PVVRMSU5FX09XTkVSIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBJZiBzZXQsIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgb3V0bGluZSdzIGZpZWxkIGFycmF5cyAgICAgICovCi0gIC8qICAgICAgKGkuZS4sIGBwb2ludHMnLCBgZmxhZ3MnLCBhbmQgYGNvbnRvdXJzJykgYXJlIGBvd25lZCcgYnkgdGhlICAgICAqLwotICAvKiAgICAgIG91dGxpbmUgb2JqZWN0LCBhbmQgc2hvdWxkIHRodXMgYmUgZnJlZWQgd2hlbiBpdCBpcyBkZXN0cm95ZWQuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09VVExJTkVfRVZFTl9PRERfRklMTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEJ5IGRlZmF1bHQsIG91dGxpbmVzIGFyZSBmaWxsZWQgdXNpbmcgdGhlIG5vbi16ZXJvIHdpbmRpbmcgcnVsZS4gKi8KLSAgLyogICAgICBJZiBzZXQgdG8gMSwgdGhlIG91dGxpbmUgd2lsbCBiZSBmaWxsZWQgdXNpbmcgdGhlIGV2ZW4tb2RkIGZpbGwgICovCi0gIC8qICAgICAgcnVsZSAob25seSB3b3JrcyB3aXRoIHRoZSBzbW9vdGggcmFzdGVyaXplcikuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQnkgZGVmYXVsdCwgb3V0c2lkZSBjb250b3VycyBvZiBhbiBvdXRsaW5lIGFyZSBvcmllbnRlZCBpbiAgICAgICAqLwotICAvKiAgICAgIGNsb2NrLXdpc2UgZGlyZWN0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLiAgKi8KLSAgLyogICAgICBUaGlzIGZsYWcgaXMgc2V0IGlmIHRoZSBvdXRsaW5lIHVzZXMgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiAgICAgICovCi0gIC8qICAgICAgKHR5cGljYWxseSBmb3IgVHlwZX4xIGZvbnRzKS4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGJ5IHRoZSBzY2FuICAqLwotICAvKiAgICAgIGNvbnZlcnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEJ5IGRlZmF1bHQsIHRoZSBzY2FuIGNvbnZlcnRlciB3aWxsIHRyeSB0byBkZXRlY3QgZHJvcC1vdXRzIGluICAgKi8KLSAgLyogICAgICBhbiBvdXRsaW5lIGFuZCBjb3JyZWN0IHRoZSBnbHlwaCBiaXRtYXAgdG8gZW5zdXJlIGNvbnNpc3RlbnQgICAgICovCi0gIC8qICAgICAgc2hhcGUgY29udGludWl0eS4gIElmIHNldCwgdGhpcyBmbGFnIGhpbnRzIHRoZSBzY2FuLWxpbmUgICAgICAgICAqLwotICAvKiAgICAgIGNvbnZlcnRlciB0byBpZ25vcmUgc3VjaCBjYXNlcy4gIFNlZSBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFNlbGVjdCBzbWFydCBkcm9wb3V0IGNvbnRyb2wuICBJZiB1bnNldCwgdXNlIHNpbXBsZSBkcm9wb3V0ICAgICAgKi8KLSAgLyogICAgICBjb250cm9sLiAgSWdub3JlZCBpZiBARlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMgaXMgc2V0LiAgU2VlICAgICovCi0gIC8qICAgICAgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1VUTElORV9JTkNMVURFX1NUVUJTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgSWYgc2V0LCB0dXJuIHBpeGVscyBvbiBmb3IgYHN0dWJzJywgb3RoZXJ3aXNlIGV4Y2x1ZGUgdGhlbS4gICAgICAqLwotICAvKiAgICAgIElnbm9yZWQgaWYgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTIGlzIHNldC4gIFNlZSBiZWxvdyBmb3IgICAgKi8KLSAgLyogICAgICBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PVVRMSU5FX0hJR0hfUFJFQ0lTSU9OIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIgc2hvdWxkIHRyeSB0byAgICovCi0gIC8qICAgICAgY29udmVydCB0aGlzIG91dGxpbmUgdG8gYml0bWFwcyB3aXRoIHRoZSBoaWdoZXN0IHBvc3NpYmxlICAgICAgICAqLwotICAvKiAgICAgIHF1YWxpdHkuICBJdCBpcyB0eXBpY2FsbHkgc2V0IGZvciBzbWFsbCBjaGFyYWN0ZXIgc2l6ZXMuICBOb3RlICAgKi8KLSAgLyogICAgICB0aGF0IHRoaXMgaXMgb25seSBhIGhpbnQgdGhhdCBtaWdodCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSAgICovCi0gIC8qICAgICAgZ2l2ZW4gc2Nhbi1jb252ZXJ0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT1VUTElORV9TSU5HTEVfUEFTUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyBmbGFnIGlzIHNldCB0byBmb3JjZSBhIGdpdmVuIHNjYW4tY29udmVydGVyIHRvIG9ubHkgdXNlIGEgICAqLwotICAvKiAgICAgIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG91dGxpbmUgdG8gcmVuZGVyIGEgYml0bWFwIGdseXBoIGltYWdlLiAgICAgKi8KLSAgLyogICAgICBOb3JtYWxseSwgaXQgaXMgc2V0IGZvciB2ZXJ5IGxhcmdlIGNoYXJhY3RlciBzaXplcy4gIEl0IGlzIG9ubHkgICovCi0gIC8qICAgICAgYSBoaW50IHRoYXQgbWlnaHQgYmUgY29tcGxldGVseSBpZ25vcmVkIGJ5IGEgZ2l2ZW4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHNjYW4tY29udmVydGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZmxhZ3MgQEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTLCBARlRfT1VUTElORV9TTUFSVF9EUk9QT1VUUywgKi8KLSAgLyogICAgYW5kIEBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgYXJlIGlnbm9yZWQgYnkgdGhlIHNtb290aCAgICAgICAgICAgICovCi0gIC8qICAgIHJhc3Rlcml6ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlcmUgZXhpc3RzIGEgc2Vjb25kIG1lY2hhbmlzbSB0byBwYXNzIHRoZSBkcm9wLW91dCBtb2RlIHRvIHRoZSAgICovCi0gIC8qICAgIEIvVyByYXN0ZXJpemVyOyBzZWUgdGhlIGB0YWdzJyBmaWVsZCBpbiBARlRfT3V0bGluZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYFNDQU5UWVBFJyBpbnN0cnVjdGlvbiBpbiAgICovCi0gIC8qICAgIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIChpbiBmaWxlIGB0dGluc3QxLmRvYycpIGhvdyBzaW1wbGUgICAgICAqLwotICAvKiAgICBkcm9wLW91dHMsIHNtYXJ0IGRyb3Atb3V0cywgYW5kIHN0dWJzIGFyZSBkZWZpbmVkLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9PVVRMSU5FX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlIGZvciB0aGUgZmxhZ3MgaW4gYW4gb3V0bGluZSdzCisgICAqICAgYGZsYWdzJyBmaWVsZC4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9PVVRMSU5FX05PTkUgOjoKKyAgICogICAgIFZhbHVlfjAgaXMgcmVzZXJ2ZWQuCisgICAqCisgICAqICAgRlRfT1VUTElORV9PV05FUiA6OgorICAgKiAgICAgSWYgc2V0LCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIG91dGxpbmUncyBmaWVsZCBhcnJheXMKKyAgICogICAgIChpLmUuLCBgcG9pbnRzJywgYGZsYWdzJywgYW5kIGBjb250b3VycycpIGFyZSBgb3duZWQnIGJ5IHRoZQorICAgKiAgICAgb3V0bGluZSBvYmplY3QsIGFuZCBzaG91bGQgdGh1cyBiZSBmcmVlZCB3aGVuIGl0IGlzIGRlc3Ryb3llZC4KKyAgICoKKyAgICogICBGVF9PVVRMSU5FX0VWRU5fT0REX0ZJTEwgOjoKKyAgICogICAgIEJ5IGRlZmF1bHQsIG91dGxpbmVzIGFyZSBmaWxsZWQgdXNpbmcgdGhlIG5vbi16ZXJvIHdpbmRpbmcgcnVsZS4KKyAgICogICAgIElmIHNldCB0byAxLCB0aGUgb3V0bGluZSB3aWxsIGJlIGZpbGxlZCB1c2luZyB0aGUgZXZlbi1vZGQgZmlsbAorICAgKiAgICAgcnVsZSAob25seSB3b3JrcyB3aXRoIHRoZSBzbW9vdGggcmFzdGVyaXplcikuCisgICAqCisgICAqICAgRlRfT1VUTElORV9SRVZFUlNFX0ZJTEwgOjoKKyAgICogICAgIEJ5IGRlZmF1bHQsIG91dHNpZGUgY29udG91cnMgb2YgYW4gb3V0bGluZSBhcmUgb3JpZW50ZWQgaW4KKyAgICogICAgIGNsb2NrLXdpc2UgZGlyZWN0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLgorICAgKiAgICAgVGhpcyBmbGFnIGlzIHNldCBpZiB0aGUgb3V0bGluZSB1c2VzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24KKyAgICogICAgICh0eXBpY2FsbHkgZm9yIFR5cGV+MSBmb250cykuICBUaGlzIGZsYWcgaXMgaWdub3JlZCBieSB0aGUgc2NhbgorICAgKiAgICAgY29udmVydGVyLgorICAgKgorICAgKiAgIEZUX09VVExJTkVfSUdOT1JFX0RST1BPVVRTIDo6CisgICAqICAgICBCeSBkZWZhdWx0LCB0aGUgc2NhbiBjb252ZXJ0ZXIgd2lsbCB0cnkgdG8gZGV0ZWN0IGRyb3Atb3V0cyBpbgorICAgKiAgICAgYW4gb3V0bGluZSBhbmQgY29ycmVjdCB0aGUgZ2x5cGggYml0bWFwIHRvIGVuc3VyZSBjb25zaXN0ZW50CisgICAqICAgICBzaGFwZSBjb250aW51aXR5LiAgSWYgc2V0LCB0aGlzIGZsYWcgaGludHMgdGhlIHNjYW4tbGluZQorICAgKiAgICAgY29udmVydGVyIHRvIGlnbm9yZSBzdWNoIGNhc2VzLiAgU2VlIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgKgorICAgKiAgIEZUX09VVExJTkVfU01BUlRfRFJPUE9VVFMgOjoKKyAgICogICAgIFNlbGVjdCBzbWFydCBkcm9wb3V0IGNvbnRyb2wuICBJZiB1bnNldCwgdXNlIHNpbXBsZSBkcm9wb3V0CisgICAqICAgICBjb250cm9sLiAgSWdub3JlZCBpZiBARlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMgaXMgc2V0LiAgU2VlCisgICAqICAgICBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogICBGVF9PVVRMSU5FX0lOQ0xVREVfU1RVQlMgOjoKKyAgICogICAgIElmIHNldCwgdHVybiBwaXhlbHMgb24gZm9yIGBzdHVicycsIG90aGVyd2lzZSBleGNsdWRlIHRoZW0uCisgICAqICAgICBJZ25vcmVkIGlmIEBGVF9PVVRMSU5FX0lHTk9SRV9EUk9QT1VUUyBpcyBzZXQuICBTZWUgYmVsb3cgZm9yCisgICAqICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgKgorICAgKiAgIEZUX09VVExJTkVfSElHSF9QUkVDSVNJT04gOjoKKyAgICogICAgIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgc2Nhbi1saW5lIGNvbnZlcnRlciBzaG91bGQgdHJ5IHRvCisgICAqICAgICBjb252ZXJ0IHRoaXMgb3V0bGluZSB0byBiaXRtYXBzIHdpdGggdGhlIGhpZ2hlc3QgcG9zc2libGUKKyAgICogICAgIHF1YWxpdHkuICBJdCBpcyB0eXBpY2FsbHkgc2V0IGZvciBzbWFsbCBjaGFyYWN0ZXIgc2l6ZXMuICBOb3RlCisgICAqICAgICB0aGF0IHRoaXMgaXMgb25seSBhIGhpbnQgdGhhdCBtaWdodCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYQorICAgKiAgICAgZ2l2ZW4gc2Nhbi1jb252ZXJ0ZXIuCisgICAqCisgICAqICAgRlRfT1VUTElORV9TSU5HTEVfUEFTUyA6OgorICAgKiAgICAgVGhpcyBmbGFnIGlzIHNldCB0byBmb3JjZSBhIGdpdmVuIHNjYW4tY29udmVydGVyIHRvIG9ubHkgdXNlIGEKKyAgICogICAgIHNpbmdsZSBwYXNzIG92ZXIgdGhlIG91dGxpbmUgdG8gcmVuZGVyIGEgYml0bWFwIGdseXBoIGltYWdlLgorICAgKiAgICAgTm9ybWFsbHksIGl0IGlzIHNldCBmb3IgdmVyeSBsYXJnZSBjaGFyYWN0ZXIgc2l6ZXMuICBJdCBpcyBvbmx5CisgICAqICAgICBhIGhpbnQgdGhhdCBtaWdodCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSBnaXZlbgorICAgKiAgICAgc2Nhbi1jb252ZXJ0ZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBmbGFncyBARlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMsIEBGVF9PVVRMSU5FX1NNQVJUX0RST1BPVVRTLAorICAgKiAgIGFuZCBARlRfT1VUTElORV9JTkNMVURFX1NUVUJTIGFyZSBpZ25vcmVkIGJ5IHRoZSBzbW9vdGgKKyAgICogICByYXN0ZXJpemVyLgorICAgKgorICAgKiAgIFRoZXJlIGV4aXN0cyBhIHNlY29uZCBtZWNoYW5pc20gdG8gcGFzcyB0aGUgZHJvcC1vdXQgbW9kZSB0byB0aGUKKyAgICogICBCL1cgcmFzdGVyaXplcjsgc2VlIHRoZSBgdGFncycgZmllbGQgaW4gQEZUX091dGxpbmUuCisgICAqCisgICAqICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYFNDQU5UWVBFJyBpbnN0cnVjdGlvbiBpbgorICAgKiAgIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIChpbiBmaWxlIGB0dGluc3QxLmRvYycpIGhvdyBzaW1wbGUKKyAgICogICBkcm9wLW91dHMsIHNtYXJ0IGRyb3Atb3V0cywgYW5kIHN0dWJzIGFyZSBkZWZpbmVkLgorICAgKi8KICNkZWZpbmUgRlRfT1VUTElORV9OT05FICAgICAgICAgICAgIDB4MAogI2RlZmluZSBGVF9PVVRMSU5FX09XTkVSICAgICAgICAgICAgMHgxCiAjZGVmaW5lIEZUX09VVExJTkVfRVZFTl9PRERfRklMTCAgICAweDIKQEAgLTQ2OSwyNiArNDg5LDI4IEBACiAjZGVmaW5lIEZUX0N1cnZlX1RhZ19Ub3VjaF9ZICBGVF9DVVJWRV9UQUdfVE9VQ0hfWQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9Nb3ZlVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgYG1vdmUgICovCi0gIC8qICAgIHRvJyBmdW5jdGlvbiBkdXJpbmcgb3V0bGluZSB3YWxraW5nL2RlY29tcG9zaXRpb24uICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBgbW92ZSB0bycgaXMgZW1pdHRlZCB0byBzdGFydCBhIG5ldyBjb250b3VyIGluIGFuIG91dGxpbmUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG8gICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBwb2ludCBvZiB0aGUgYG1vdmUgdG8nLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1c2VyIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiB0aGUgKi8KLSAgLyogICAgICAgICAgICBkZWNvbXBvc2l0aW9uIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX091dGxpbmVfTW92ZVRvRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgYG1vdmUKKyAgICogICB0bycgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZy9kZWNvbXBvc2l0aW9uLgorICAgKgorICAgKiAgIEEgYG1vdmUgdG8nIGlzIGVtaXR0ZWQgdG8gc3RhcnQgYSBuZXcgY29udG91ciBpbiBhbiBvdXRsaW5lLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgdG8gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IHBvaW50IG9mIHRoZSBgbW92ZSB0bycuCisgICAqCisgICAqICAgdXNlciA6OgorICAgKiAgICAgQSB0eXBlbGVzcyBwb2ludGVyLCB3aGljaCBpcyBwYXNzZWQgZnJvbSB0aGUgY2FsbGVyIG9mIHRoZQorICAgKiAgICAgZGVjb21wb3NpdGlvbiBmdW5jdGlvbi4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBFcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgdHlwZWRlZiBpbnQKICAgKCpGVF9PdXRsaW5lX01vdmVUb0Z1bmMpKCBjb25zdCBGVF9WZWN0b3IqICB0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICB1c2VyICk7CkBAIC00OTYsMjYgKzUxOCwyOCBAQAogI2RlZmluZSBGVF9PdXRsaW5lX01vdmVUb19GdW5jICBGVF9PdXRsaW5lX01vdmVUb0Z1bmMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfTGluZVRvRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBsaW5lICAqLwotICAvKiAgICB0bycgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZy9kZWNvbXBvc2l0aW9uLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgYGxpbmUgdG8nIGlzIGVtaXR0ZWQgdG8gaW5kaWNhdGUgYSBzZWdtZW50IGluIHRoZSBvdXRsaW5lLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRvICAgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgcG9pbnQgb2YgdGhlIGBsaW5lIHRvJy4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciA6OiBBIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgb2YgdGhlICovCi0gIC8qICAgICAgICAgICAgZGVjb21wb3NpdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9PdXRsaW5lX0xpbmVUb0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBsaW5lCisgICAqICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcvZGVjb21wb3NpdGlvbi4KKyAgICoKKyAgICogICBBIGBsaW5lIHRvJyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgc2VnbWVudCBpbiB0aGUgb3V0bGluZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHRvIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBwb2ludCBvZiB0aGUgYGxpbmUgdG8nLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiB0aGUKKyAgICogICAgIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHR5cGVkZWYgaW50CiAgICgqRlRfT3V0bGluZV9MaW5lVG9GdW5jKSggY29uc3QgRlRfVmVjdG9yKiAgdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdXNlciApOwpAQCAtNTIzLDMwICs1NDcsMzMgQEAKICNkZWZpbmUgRlRfT3V0bGluZV9MaW5lVG9fRnVuYyAgRlRfT3V0bGluZV9MaW5lVG9GdW5jCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0NvbmljVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzaWduYXR1cmUgb2YgYSBgY29uaWMgKi8KLSAgLyogICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcgb3IgZGVjb21wb3NpdGlvbi4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGBjb25pYyB0bycgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHNlY29uZC1vcmRlciBCZXppZXIgYXJjIGluICAgKi8KLSAgLyogICAgdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJvbCA6OiBBbiBpbnRlcm1lZGlhdGUgY29udHJvbCBwb2ludCBiZXR3ZWVuIHRoZSBsYXN0IHBvc2l0aW9uICovCi0gIC8qICAgICAgICAgICAgICAgYW5kIHRoZSBuZXcgdGFyZ2V0IGluIGB0bycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG8gICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBlbmQgcG9pbnQgb2YgdGhlIGNvbmljIGFyYy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1c2VyICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiAgKi8KLSAgLyogICAgICAgICAgICAgICB0aGUgZGVjb21wb3NpdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBjb25pYworICAgKiAgIHRvJyBmdW5jdGlvbiBkdXJpbmcgb3V0bGluZSB3YWxraW5nIG9yIGRlY29tcG9zaXRpb24uCisgICAqCisgICAqICAgQSBgY29uaWMgdG8nIGlzIGVtaXR0ZWQgdG8gaW5kaWNhdGUgYSBzZWNvbmQtb3JkZXIgQmV6aWVyIGFyYyBpbgorICAgKiAgIHRoZSBvdXRsaW5lLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgY29udHJvbCA6OgorICAgKiAgICAgQW4gaW50ZXJtZWRpYXRlIGNvbnRyb2wgcG9pbnQgYmV0d2VlbiB0aGUgbGFzdCBwb3NpdGlvbgorICAgKiAgICAgYW5kIHRoZSBuZXcgdGFyZ2V0IGluIGB0bycuCisgICAqCisgICAqICAgdG8gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGVuZCBwb2ludCBvZiB0aGUgY29uaWMgYXJjLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZgorICAgKiAgICAgdGhlIGRlY29tcG9zaXRpb24gZnVuY3Rpb24uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHR5cGVkZWYgaW50CiAgICgqRlRfT3V0bGluZV9Db25pY1RvRnVuYykoIGNvbnN0IEZUX1ZlY3RvciogIGNvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIHRvLApAQCAtNTU1LDMwICs1ODIsMzQgQEAKICNkZWZpbmUgRlRfT3V0bGluZV9Db25pY1RvX0Z1bmMgIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfQ3ViaWNUb0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBjdWJpYyAqLwotICAvKiAgICB0bycgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZyBvciBkZWNvbXBvc2l0aW9uLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgYGN1YmljIHRvJyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYy4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbnRyb2wxIDo6IEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQmV6aWVyIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJvbDIgOjogQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgQmV6aWVyIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0byAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBlbmQgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVzZXIgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciwgd2hpY2ggaXMgcGFzc2VkIGZyb20gdGhlIGNhbGxlciBvZiAqLwotICAvKiAgICAgICAgICAgICAgICB0aGUgZGVjb21wb3NpdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfT3V0bGluZV9DdWJpY1RvRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgc2lnbmF0dXJlIG9mIGEgYGN1YmljCisgICAqICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcgb3IgZGVjb21wb3NpdGlvbi4KKyAgICoKKyAgICogICBBIGBjdWJpYyB0bycgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHRoaXJkLW9yZGVyIEJlemllciBhcmMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBjb250cm9sMSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBCZXppZXIgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogICBjb250cm9sMiA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgQmV6aWVyIGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICAgdG8gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGVuZCBwb2ludC4KKyAgICoKKyAgICogICB1c2VyIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHBhc3NlZCBmcm9tIHRoZSBjYWxsZXIgb2YKKyAgICogICAgIHRoZSBkZWNvbXBvc2l0aW9uIGZ1bmN0aW9uLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICB0eXBlZGVmIGludAogICAoKkZUX091dGxpbmVfQ3ViaWNUb0Z1bmMpKCBjb25zdCBGVF9WZWN0b3IqICBjb250cm9sMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgY29udHJvbDIsCkBAIC01ODgsNDMgKzYxOSw0OSBAQAogI2RlZmluZSBGVF9PdXRsaW5lX0N1YmljVG9fRnVuYyAgRlRfT3V0bGluZV9DdWJpY1RvRnVuYwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9GdW5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gaG9sZCB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgZHVyaW5nIG91dGxpbmUgICovCi0gIC8qICAgIGRlY29tcG9zaXRpb24gaW4gb3JkZXIgdG8gZW1pdCBzZWdtZW50cywgY29uaWMsIGFuZCBjdWJpYyBCZXppZXJzLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vdmVfdG8gIDo6IFRoZSBgbW92ZSB0bycgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGluZV90byAgOjogVGhlIHNlZ21lbnQgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb25pY190byA6OiBUaGUgc2Vjb25kLW9yZGVyIEJlemllciBhcmMgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGN1YmljX3RvIDo6IFRoZSB0aGlyZC1vcmRlciBCZXppZXIgYXJjIGVtaXR0ZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2hpZnQgICAgOjogVGhlIHNoaWZ0IHRoYXQgaXMgYXBwbGllZCB0byBjb29yZGluYXRlcyBiZWZvcmUgdGhleSAgICovCi0gIC8qICAgICAgICAgICAgICAgIGFyZSBzZW50IHRvIHRoZSBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVsdGEgICAgOjogVGhlIGRlbHRhIHRoYXQgaXMgYXBwbGllZCB0byBjb29yZGluYXRlcyBiZWZvcmUgdGhleSAgICovCi0gIC8qICAgICAgICAgICAgICAgIGFyZSBzZW50IHRvIHRoZSBlbWl0dGVyLCBidXQgYWZ0ZXIgdGhlIHNoaWZ0LiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBwb2ludCBjb29yZGluYXRlcyBzZW50IHRvIHRoZSBlbWl0dGVycyBhcmUgdGhlIHRyYW5zZm9ybWVkICAgICAqLwotICAvKiAgICB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBjb29yZGluYXRlcyAodGhpcyBpcyBpbXBvcnRhbnQgZm9yIGhpZ2ggICAgKi8KLSAgLyogICAgYWNjdXJhY3kgZHVyaW5nIHNjYW4tY29udmVyc2lvbikuICBUaGUgdHJhbnNmb3JtYXRpb24gaXMgc2ltcGxlOiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICB4JyA9ICh4IDw8IHNoaWZ0KSAtIGRlbHRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgeScgPSAoeSA8PCBzaGlmdCkgLSBkZWx0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldCB0aGUgdmFsdWVzIG9mIGBzaGlmdCcgYW5kIGBkZWx0YScgdG9+MCB0byBnZXQgdGhlIG9yaWdpbmFsICAgICAqLwotICAvKiAgICBwb2ludCBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX091dGxpbmVfRnVuY3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIGhvbGQgdmFyaW91cyBmdW5jdGlvbiBwb2ludGVycyB1c2VkIGR1cmluZyBvdXRsaW5lCisgICAqICAgZGVjb21wb3NpdGlvbiBpbiBvcmRlciB0byBlbWl0IHNlZ21lbnRzLCBjb25pYywgYW5kIGN1YmljIEJlemllcnMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbW92ZV90byA6OgorICAgKiAgICAgVGhlIGBtb3ZlIHRvJyBlbWl0dGVyLgorICAgKgorICAgKiAgIGxpbmVfdG8gOjoKKyAgICogICAgIFRoZSBzZWdtZW50IGVtaXR0ZXIuCisgICAqCisgICAqICAgY29uaWNfdG8gOjoKKyAgICogICAgIFRoZSBzZWNvbmQtb3JkZXIgQmV6aWVyIGFyYyBlbWl0dGVyLgorICAgKgorICAgKiAgIGN1YmljX3RvIDo6CisgICAqICAgICBUaGUgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYyBlbWl0dGVyLgorICAgKgorICAgKiAgIHNoaWZ0IDo6CisgICAqICAgICBUaGUgc2hpZnQgdGhhdCBpcyBhcHBsaWVkIHRvIGNvb3JkaW5hdGVzIGJlZm9yZSB0aGV5CisgICAqICAgICBhcmUgc2VudCB0byB0aGUgZW1pdHRlci4KKyAgICoKKyAgICogICBkZWx0YSA6OgorICAgKiAgICAgVGhlIGRlbHRhIHRoYXQgaXMgYXBwbGllZCB0byBjb29yZGluYXRlcyBiZWZvcmUgdGhleQorICAgKiAgICAgYXJlIHNlbnQgdG8gdGhlIGVtaXR0ZXIsIGJ1dCBhZnRlciB0aGUgc2hpZnQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBwb2ludCBjb29yZGluYXRlcyBzZW50IHRvIHRoZSBlbWl0dGVycyBhcmUgdGhlIHRyYW5zZm9ybWVkCisgICAqICAgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgY29vcmRpbmF0ZXMgKHRoaXMgaXMgaW1wb3J0YW50IGZvciBoaWdoCisgICAqICAgYWNjdXJhY3kgZHVyaW5nIHNjYW4tY29udmVyc2lvbikuICBUaGUgdHJhbnNmb3JtYXRpb24gaXMgc2ltcGxlOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIHgnID0gKHggPDwgc2hpZnQpIC0gZGVsdGEKKyAgICogICAgIHknID0gKHkgPDwgc2hpZnQpIC0gZGVsdGEKKyAgICogICB9CisgICAqCisgICAqICAgU2V0IHRoZSB2YWx1ZXMgb2YgYHNoaWZ0JyBhbmQgYGRlbHRhJyB0b34wIHRvIGdldCB0aGUgb3JpZ2luYWwKKyAgICogICBwb2ludCBjb29yZGluYXRlcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9PdXRsaW5lX0Z1bmNzXwogICB7CiAgICAgRlRfT3V0bGluZV9Nb3ZlVG9GdW5jICAgbW92ZV90bzsKQEAgLTYzOCwzMyArNjc1LDMzIEBACiAgIH0gRlRfT3V0bGluZV9GdW5jczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2ljX3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBiYXNpY190eXBlcworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0lNQUdFX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgbWFjcm8gY29udmVydHMgZm91ci1sZXR0ZXIgdGFncyB0byBhbiB1bnNpZ25lZCBsb25nIHR5cGUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNpbmNlIG1hbnkgMTYtYml0IGNvbXBpbGVycyBkb24ndCBsaWtlIDMyLWJpdCBlbnVtZXJhdGlvbnMsIHlvdSAgICAqLwotICAvKiAgICBzaG91bGQgcmVkZWZpbmUgdGhpcyBtYWNybyBpbiBjYXNlIG9mIHByb2JsZW1zIHRvIHNvbWV0aGluZyBsaWtlICAgKi8KLSAgLyogICAgdGhpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAjZGVmaW5lIEZUX0lNQUdFX1RBRyggdmFsdWUsIF94MSwgX3gyLCBfeDMsIF94NCApICB2YWx1ZSAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG8gZ2V0IGEgc2ltcGxlIGVudW1lcmF0aW9uIHdpdGhvdXQgYXNzaWduaW5nIHNwZWNpYWwgbnVtYmVycy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lNQUdFX1RBRworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBtYWNybyBjb252ZXJ0cyBmb3VyLWxldHRlciB0YWdzIHRvIGFuIHVuc2lnbmVkIGxvbmcgdHlwZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2luY2UgbWFueSAxNi1iaXQgY29tcGlsZXJzIGRvbid0IGxpa2UgMzItYml0IGVudW1lcmF0aW9ucywgeW91CisgICAqICAgc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZQorICAgKiAgIHRoaXM6CisgICAqCisgICAqICAgeworICAgKiAgICAgI2RlZmluZSBGVF9JTUFHRV9UQUcoIHZhbHVlLCBfeDEsIF94MiwgX3gzLCBfeDQgKSAgdmFsdWUKKyAgICogICB9CisgICAqCisgICAqICAgdG8gZ2V0IGEgc2ltcGxlIGVudW1lcmF0aW9uIHdpdGhvdXQgYXNzaWduaW5nIHNwZWNpYWwgbnVtYmVycy4KKyAgICovCiAjaWZuZGVmIEZUX0lNQUdFX1RBRwogI2RlZmluZSBGVF9JTUFHRV9UQUcoIHZhbHVlLCBfeDEsIF94MiwgX3gzLCBfeDQgKSAgXAogICAgICAgICAgIHZhbHVlID0gKCAoICh1bnNpZ25lZCBsb25nKV94MSA8PCAyNCApIHwgXApAQCAtNjc0LDQ0ICs3MTEsNDQgQEAKICNlbmRpZiAvKiBGVF9JTUFHRV9UQUcgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dseXBoX0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIGVudW1lcmF0aW9uIHR5cGUgdXNlZCB0byBkZXNjcmliZSB0aGUgZm9ybWF0IG9mIGEgZ2l2ZW4gZ2x5cGggICAqLwotICAvKiAgICBpbWFnZS4gIE5vdGUgdGhhdCB0aGlzIHZlcnNpb24gb2YgRnJlZVR5cGUgb25seSBzdXBwb3J0cyB0d28gaW1hZ2UgKi8KLSAgLyogICAgZm9ybWF0cywgZXZlbiB0aG91Z2ggZnV0dXJlIGZvbnQgZHJpdmVycyB3aWxsIGJlIGFibGUgdG8gcmVnaXN0ZXIgICovCi0gIC8qICAgIHRoZWlyIG93biBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dMWVBIX0ZPUk1BVF9OT05FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSB2YWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBnbHlwaCBpbWFnZSBpcyBhIGNvbXBvc2l0ZSBvZiBzZXZlcmFsIG90aGVyIGltYWdlcy4gIFRoaXMgICAgKi8KLSAgLyogICAgICBmb3JtYXQgaXMgX29ubHlfIHVzZWQgd2l0aCBARlRfTE9BRF9OT19SRUNVUlNFLCBhbmQgaXMgdXNlZCB0byAgICovCi0gIC8qICAgICAgcmVwb3J0IGNvbXBvdW5kIGdseXBocyAobGlrZSBhY2NlbnRlZCBjaGFyYWN0ZXJzKS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR0xZUEhfRk9STUFUX0JJVE1BUCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGdseXBoIGltYWdlIGlzIGEgYml0bWFwLCBhbmQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhbiAgICAgICAgICAqLwotICAvKiAgICAgIEBGVF9CaXRtYXAuICBZb3UgZ2VuZXJhbGx5IG5lZWQgdG8gYWNjZXNzIHRoZSBgYml0bWFwJyBmaWVsZCBvZiAgKi8KLSAgLyogICAgICB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgdG8gcmVhZCBpdC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgYSB2ZWN0b3JpYWwgb3V0bGluZSBtYWRlIG9mIGxpbmUgc2VnbWVudHMgICAgICovCi0gIC8qICAgICAgYW5kIEJlemllciBhcmNzOyBpdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGFuIEBGVF9PdXRsaW5lOyB5b3UgICAgICAqLwotICAvKiAgICAgIGdlbmVyYWxseSB3YW50IHRvIGFjY2VzcyB0aGUgYG91dGxpbmUnIGZpZWxkIG9mIHRoZSAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSB0byByZWFkIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HTFlQSF9GT1JNQVRfUExPVFRFUiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgYSB2ZWN0b3JpYWwgcGF0aCB3aXRoIG5vIGluc2lkZSBhbmQgb3V0c2lkZSAgICovCi0gIC8qICAgICAgY29udG91cnMuICBTb21lIFR5cGV+MSBmb250cywgbGlrZSB0aG9zZSBpbiB0aGUgSGVyc2hleSBmYW1pbHksICAqLwotICAvKiAgICAgIGNvbnRhaW4gZ2x5cGhzIGluIHRoaXMgZm9ybWF0LiAgVGhlc2UgYXJlIGRlc2NyaWJlZCBhcyAgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfT3V0bGluZSwgYnV0IEZyZWVUeXBlIGlzbid0IGN1cnJlbnRseSBjYXBhYmxlIG9mIHJlbmRlcmluZyAgICovCi0gIC8qICAgICAgdGhlbSBjb3JyZWN0bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0dseXBoX0Zvcm1hdAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQW4gZW51bWVyYXRpb24gdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQgb2YgYSBnaXZlbiBnbHlwaAorICAgKiAgIGltYWdlLiAgTm90ZSB0aGF0IHRoaXMgdmVyc2lvbiBvZiBGcmVlVHlwZSBvbmx5IHN1cHBvcnRzIHR3byBpbWFnZQorICAgKiAgIGZvcm1hdHMsIGV2ZW4gdGhvdWdoIGZ1dHVyZSBmb250IGRyaXZlcnMgd2lsbCBiZSBhYmxlIHRvIHJlZ2lzdGVyCisgICAqICAgdGhlaXIgb3duIGZvcm1hdC4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9HTFlQSF9GT1JNQVRfTk9ORSA6OgorICAgKiAgICAgVGhlIHZhbHVlfjAgaXMgcmVzZXJ2ZWQuCisgICAqCisgICAqICAgRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSA6OgorICAgKiAgICAgVGhlIGdseXBoIGltYWdlIGlzIGEgY29tcG9zaXRlIG9mIHNldmVyYWwgb3RoZXIgaW1hZ2VzLiAgVGhpcworICAgKiAgICAgZm9ybWF0IGlzIF9vbmx5XyB1c2VkIHdpdGggQEZUX0xPQURfTk9fUkVDVVJTRSwgYW5kIGlzIHVzZWQgdG8KKyAgICogICAgIHJlcG9ydCBjb21wb3VuZCBnbHlwaHMgKGxpa2UgYWNjZW50ZWQgY2hhcmFjdGVycykuCisgICAqCisgICAqICAgRlRfR0xZUEhfRk9STUFUX0JJVE1BUCA6OgorICAgKiAgICAgVGhlIGdseXBoIGltYWdlIGlzIGEgYml0bWFwLCBhbmQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhbgorICAgKiAgICAgQEZUX0JpdG1hcC4gIFlvdSBnZW5lcmFsbHkgbmVlZCB0byBhY2Nlc3MgdGhlIGBiaXRtYXAnIGZpZWxkIG9mCisgICAqICAgICB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgdG8gcmVhZCBpdC4KKyAgICoKKyAgICogICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSA6OgorICAgKiAgICAgVGhlIGdseXBoIGltYWdlIGlzIGEgdmVjdG9yaWFsIG91dGxpbmUgbWFkZSBvZiBsaW5lIHNlZ21lbnRzCisgICAqICAgICBhbmQgQmV6aWVyIGFyY3M7IGl0IGNhbiBiZSBkZXNjcmliZWQgYXMgYW4gQEZUX091dGxpbmU7IHlvdQorICAgKiAgICAgZ2VuZXJhbGx5IHdhbnQgdG8gYWNjZXNzIHRoZSBgb3V0bGluZScgZmllbGQgb2YgdGhlCisgICAqICAgICBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSB0byByZWFkIGl0LgorICAgKgorICAgKiAgIEZUX0dMWVBIX0ZPUk1BVF9QTE9UVEVSIDo6CisgICAqICAgICBUaGUgZ2x5cGggaW1hZ2UgaXMgYSB2ZWN0b3JpYWwgcGF0aCB3aXRoIG5vIGluc2lkZSBhbmQgb3V0c2lkZQorICAgKiAgICAgY29udG91cnMuICBTb21lIFR5cGV+MSBmb250cywgbGlrZSB0aG9zZSBpbiB0aGUgSGVyc2hleSBmYW1pbHksCisgICAqICAgICBjb250YWluIGdseXBocyBpbiB0aGlzIGZvcm1hdC4gIFRoZXNlIGFyZSBkZXNjcmliZWQgYXMKKyAgICogICAgIEBGVF9PdXRsaW5lLCBidXQgRnJlZVR5cGUgaXNuJ3QgY3VycmVudGx5IGNhcGFibGUgb2YgcmVuZGVyaW5nCisgICAqICAgICB0aGVtIGNvcnJlY3RseS4KKyAgICovCiAgIHR5cGVkZWYgZW51bSAgRlRfR2x5cGhfRm9ybWF0XwogICB7CiAgICAgRlRfSU1BR0VfVEFHKCBGVF9HTFlQSF9GT1JNQVRfTk9ORSwgMCwgMCwgMCwgMCApLApAQCAtNzQ0LDg3ICs3ODEsOTAgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEEgcmFzdGVyIGlzIGEgc2NhbiBjb252ZXJ0ZXIsIGluIGNoYXJnZSBvZiByZW5kZXJpbmcgYW4gb3V0bGluZSBpbnRvICAqLwotICAvKiBhIGJpdG1hcC4gIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgcHVibGljIEFQSSBmb3IgcmFzdGVycy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCBpbiBGcmVlVHlwZSAyLCBhbGwgcmFzdGVycyBhcmUgbm93IGVuY2Fwc3VsYXRlZCB3aXRoaW4gICAgICAqLwotICAvKiBzcGVjaWZpYyBtb2R1bGVzIGNhbGxlZCBgcmVuZGVyZXJzJy4gIFNlZSBgZnRyZW5kZXIuaCcgZm9yIG1vcmUgICAgICAgKi8KLSAgLyogZGV0YWlscyBvbiByZW5kZXJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEEgcmFzdGVyIGlzIGEgc2NhbiBjb252ZXJ0ZXIsIGluIGNoYXJnZSBvZiByZW5kZXJpbmcgYW4gb3V0bGluZSBpbnRvCisgICAqIGEgYml0bWFwLiAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBwdWJsaWMgQVBJIGZvciByYXN0ZXJzLgorICAgKgorICAgKiBOb3RlIHRoYXQgaW4gRnJlZVR5cGUgMiwgYWxsIHJhc3RlcnMgYXJlIG5vdyBlbmNhcHN1bGF0ZWQgd2l0aGluCisgICAqIHNwZWNpZmljIG1vZHVsZXMgY2FsbGVkIGByZW5kZXJlcnMnLiAgU2VlIGBmdHJlbmRlci5oJyBmb3IgbW9yZQorICAgKiBkZXRhaWxzIG9uIHJlbmRlcmVycy4KKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTY2FubGluZSBDb252ZXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIb3cgdmVjdG9yaWFsIG91dGxpbmVzIGFyZSBjb252ZXJ0ZWQgaW50byBiaXRtYXBzIGFuZCBwaXhtYXBzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGVjaG5pY2FsIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU3BhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NwYW5GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyX1BhcmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JBU1RFUl9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyX05ld0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Jhc3Rlcl9Eb25lRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfUmVzZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyX1NldE1vZGVGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Jhc3Rlcl9SZW5kZXJGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfRnVuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgcmFzdGVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBTY2FubGluZSBDb252ZXJ0ZXIKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIEhvdyB2ZWN0b3JpYWwgb3V0bGluZXMgYXJlIGNvbnZlcnRlZCBpbnRvIGJpdG1hcHMgYW5kIHBpeG1hcHMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGVjaG5pY2FsIGRlZmluaXRpb25zLgorICAgKgorICAgKiBAb3JkZXI6CisgICAqICAgRlRfUmFzdGVyCisgICAqICAgRlRfU3BhbgorICAgKiAgIEZUX1NwYW5GdW5jCisgICAqCisgICAqICAgRlRfUmFzdGVyX1BhcmFtcworICAgKiAgIEZUX1JBU1RFUl9GTEFHX1hYWAorICAgKgorICAgKiAgIEZUX1Jhc3Rlcl9OZXdGdW5jCisgICAqICAgRlRfUmFzdGVyX0RvbmVGdW5jCisgICAqICAgRlRfUmFzdGVyX1Jlc2V0RnVuYworICAgKiAgIEZUX1Jhc3Rlcl9TZXRNb2RlRnVuYworICAgKiAgIEZUX1Jhc3Rlcl9SZW5kZXJGdW5jCisgICAqICAgRlRfUmFzdGVyX0Z1bmNzCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSAocG9pbnRlcikgdG8gYSByYXN0ZXIgb2JqZWN0LiAgRWFjaCBvYmplY3QgY2FuIGJlICovCi0gIC8qICAgIHVzZWQgaW5kZXBlbmRlbnRseSB0byBjb252ZXJ0IGFuIG91dGxpbmUgaW50byBhIGJpdG1hcCBvciBwaXhtYXAuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX1Jhc3RlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQW4gb3BhcXVlIGhhbmRsZSAocG9pbnRlcikgdG8gYSByYXN0ZXIgb2JqZWN0LiAgRWFjaCBvYmplY3QgY2FuIGJlCisgICAqICAgdXNlZCBpbmRlcGVuZGVudGx5IHRvIGNvbnZlcnQgYW4gb3V0bGluZSBpbnRvIGEgYml0bWFwIG9yIHBpeG1hcC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IEZUX1Jhc3RlclJlY18qICBGVF9SYXN0ZXI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TcGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgc2luZ2xlIHNwYW4gb2YgZ3JheSBwaXhlbHMgd2hlbiAgICAgICAgKi8KLSAgLyogICAgcmVuZGVyaW5nIGFuIGFudGktYWxpYXNlZCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeCAgICAgICAgOjogVGhlIHNwYW4ncyBob3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZW4gICAgICA6OiBUaGUgc3BhbidzIGxlbmd0aCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvdmVyYWdlIDo6IFRoZSBzcGFuIGNvbG9yL2NvdmVyYWdlLCByYW5naW5nIGZyb20gMCAoYmFja2dyb3VuZCkgICAqLwotICAvKiAgICAgICAgICAgICAgICB0byAyNTUgKGZvcmVncm91bmQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSBzcGFuIGRyYXdpbmcgY2FsbGJhY2sgdHlwZSBuYW1lZCAgICAgKi8KLSAgLyogICAgQEZUX1NwYW5GdW5jIHRoYXQgdGFrZXMgdGhlIHl+Y29vcmRpbmF0ZSBvZiB0aGUgc3BhbiBhcyBhICAgICAgICAgICovCi0gIC8qICAgIHBhcmFtZXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGNvdmVyYWdlIHZhbHVlIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIDI1NS4gIElmIHlvdSB3YW50IGxlc3MgICovCi0gIC8qICAgIGdyYXkgdmFsdWVzLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRvIHJlZHVjZSB0aGVtLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU3BhbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIHNpbmdsZSBzcGFuIG9mIGdyYXkgcGl4ZWxzIHdoZW4KKyAgICogICByZW5kZXJpbmcgYW4gYW50aS1hbGlhc2VkIGJpdG1hcC4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB4IDo6CisgICAqICAgICBUaGUgc3BhbidzIGhvcml6b250YWwgc3RhcnQgcG9zaXRpb24uCisgICAqCisgICAqICAgbGVuIDo6CisgICAqICAgICBUaGUgc3BhbidzIGxlbmd0aCBpbiBwaXhlbHMuCisgICAqCisgICAqICAgY292ZXJhZ2UgOjoKKyAgICogICAgIFRoZSBzcGFuIGNvbG9yL2NvdmVyYWdlLCByYW5naW5nIGZyb20gMCAoYmFja2dyb3VuZCkKKyAgICogICAgIHRvIDI1NSAoZm9yZWdyb3VuZCkuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIHNwYW4gZHJhd2luZyBjYWxsYmFjayB0eXBlIG5hbWVkCisgICAqICAgQEZUX1NwYW5GdW5jIHRoYXQgdGFrZXMgdGhlIHl+Y29vcmRpbmF0ZSBvZiB0aGUgc3BhbiBhcyBhCisgICAqICAgcGFyYW1ldGVyLgorICAgKgorICAgKiAgIFRoZSBjb3ZlcmFnZSB2YWx1ZSBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCAyNTUuICBJZiB5b3Ugd2FudCBsZXNzCisgICAqICAgZ3JheSB2YWx1ZXMsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBoYXMgdG8gcmVkdWNlIHRoZW0uCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfU3Bhbl8KICAgewogICAgIHNob3J0ICAgICAgICAgICB4OwpAQCAtODM0LDMyICs4NzQsMzYgQEAKICAgfSBGVF9TcGFuOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU3BhbkZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIGFzIGEgY2FsbC1iYWNrIGJ5IHRoZSBhbnRpLWFsaWFzZWQgcmVuZGVyZXIgaW4gICAgICovCi0gIC8qICAgIG9yZGVyIHRvIGxldCBjbGllbnQgYXBwbGljYXRpb25zIGRyYXcgdGhlbXNlbHZlcyB0aGUgZ3JheSBwaXhlbCAgICAqLwotICAvKiAgICBzcGFucyBvbiBlYWNoIHNjYW4gbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5ICAgICA6OiBUaGUgc2NhbmxpbmUncyB5fmNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvdW50IDo6IFRoZSBudW1iZXIgb2Ygc3BhbnMgdG8gZHJhdyBvbiB0aGlzIHNjYW5saW5lLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3BhbnMgOjogQSB0YWJsZSBvZiBgY291bnQnIHNwYW5zIHRvIGRyYXcgb24gdGhlIHNjYW5saW5lLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1c2VyICA6OiBVc2VyLXN1cHBsaWVkIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGNhbGxiYWNrIGFsbG93cyBjbGllbnQgYXBwbGljYXRpb25zIHRvIGRpcmVjdGx5IHJlbmRlciB0aGUgICAgKi8KLSAgLyogICAgZ3JheSBzcGFucyBvZiB0aGUgYW50aS1hbGlhc2VkIGJpdG1hcCB0byBhbnkga2luZCBvZiBzdXJmYWNlcy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGFudGktYWxpYXNlZCBvdXRsaW5lcyBkaXJlY3RseSB0byBhICAgICAgKi8KLSAgLyogICAgZ2l2ZW4gYmFja2dyb3VuZCBiaXRtYXAsIGFuZCBldmVuIHBlcmZvcm0gdHJhbnNsdWNlbmN5LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX1NwYW5GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIHVzZWQgYXMgYSBjYWxsLWJhY2sgYnkgdGhlIGFudGktYWxpYXNlZCByZW5kZXJlciBpbgorICAgKiAgIG9yZGVyIHRvIGxldCBjbGllbnQgYXBwbGljYXRpb25zIGRyYXcgdGhlbXNlbHZlcyB0aGUgZ3JheSBwaXhlbAorICAgKiAgIHNwYW5zIG9uIGVhY2ggc2NhbiBsaW5lLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgeSA6OgorICAgKiAgICAgVGhlIHNjYW5saW5lJ3MgeX5jb29yZGluYXRlLgorICAgKgorICAgKiAgIGNvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHNwYW5zIHRvIGRyYXcgb24gdGhpcyBzY2FubGluZS4KKyAgICoKKyAgICogICBzcGFucyA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBgY291bnQnIHNwYW5zIHRvIGRyYXcgb24gdGhlIHNjYW5saW5lLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIFVzZXItc3VwcGxpZWQgZGF0YSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgY2FsbGJhY2sgYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZGlyZWN0bHkgcmVuZGVyIHRoZQorICAgKiAgIGdyYXkgc3BhbnMgb2YgdGhlIGFudGktYWxpYXNlZCBiaXRtYXAgdG8gYW55IGtpbmQgb2Ygc3VyZmFjZXMuCisgICAqCisgICAqICAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cml0ZSBhbnRpLWFsaWFzZWQgb3V0bGluZXMgZGlyZWN0bHkgdG8gYQorICAgKiAgIGdpdmVuIGJhY2tncm91bmQgYml0bWFwLCBhbmQgZXZlbiBwZXJmb3JtIHRyYW5zbHVjZW5jeS4KKyAgICovCiAgIHR5cGVkZWYgdm9pZAogICAoKkZUX1NwYW5GdW5jKSggaW50ICAgICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQsCkBAIC04NjksNzQgKzkxMyw3OCBAQAogI2RlZmluZSBGVF9SYXN0ZXJfU3Bhbl9GdW5jICBGVF9TcGFuRnVuYwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyX0JpdFRlc3RfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVwcmVjYXRlZCwgdW5pbXBsZW1lbnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX1Jhc3Rlcl9CaXRUZXN0X0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlcHJlY2F0ZWQsIHVuaW1wbGVtZW50ZWQuCisgICAqLwogICB0eXBlZGVmIGludAogICAoKkZUX1Jhc3Rlcl9CaXRUZXN0X0Z1bmMpKCBpbnQgICAgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICB1c2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfQml0U2V0X0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXByZWNhdGVkLCB1bmltcGxlbWVudGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfUmFzdGVyX0JpdFNldF9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEZXByZWNhdGVkLCB1bmltcGxlbWVudGVkLgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfUmFzdGVyX0JpdFNldF9GdW5jKSggaW50ICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogIHVzZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JBU1RFUl9GTEFHX1hYWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZyBjb25zdGFudHMgYXMgdXNlZCBpbiB0aGUgYGZsYWdzJyBmaWVsZCBvZiBhICAgICAqLwotICAvKiAgICBARlRfUmFzdGVyX1BhcmFtcyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SQVNURVJfRkxBR19ERUZBVUxUIDo6IFRoaXMgdmFsdWUgaXMgMC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JBU1RFUl9GTEFHX0FBICAgICAgOjogVGhpcyBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IGFuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFudGktYWxpYXNlZCBnbHlwaCBpbWFnZSBzaG91bGQgYmUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQuICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ub2Nocm9tZSAoMS1iaXQpLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUkFTVEVSX0ZMQUdfRElSRUNUICA6OiBUaGlzIGZsYWcgaXMgc2V0IHRvIGluZGljYXRlIGRpcmVjdCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nLiAgSW4gdGhpcyBtb2RlLCBjbGllbnQgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBtdXN0IHByb3ZpZGUgdGhlaXIgb3duIHNwYW4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay4gIFRoaXMgbGV0cyB0aGVtIGRpcmVjdGx5ICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhdyBvciBjb21wb3NlIG92ZXIgYW4gZXhpc3RpbmcgYml0bWFwLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZSB0YXJnZXQgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhtYXAncyBidWZmZXIgX211c3RfIGJlIHplcm9lZCBiZWZvcmUgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3QgcmVuZGVyaW5nIGlzIG9ubHkgcG9zc2libGUgd2l0aCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW50aS1hbGlhc2VkIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUkFTVEVSX0ZMQUdfQ0xJUCAgICA6OiBUaGlzIGZsYWcgaXMgb25seSB1c2VkIGluIGRpcmVjdCAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIG1vZGUuICBJZiBzZXQsIHRoZSBvdXRwdXQgd2lsbCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNsaXBwZWQgdG8gYSBib3ggc3BlY2lmaWVkIGluIHRoZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2xpcF9ib3gnIGZpZWxkIG9mIHRoZSAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEZUX1Jhc3Rlcl9QYXJhbXMgc3RydWN0dXJlLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYnkgZGVmYXVsdCwgdGhlIGdseXBoIGJpdG1hcCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY2xpcHBlZCB0byB0aGUgdGFyZ2V0IHBpeG1hcCwgZXhjZXB0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGRpcmVjdCByZW5kZXJpbmcgbW9kZSB3aGVyZSBhbGwgc3BhbnMgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZ2VuZXJhdGVkIGlmIG5vIGNsaXBwaW5nIGJveCBpcyBzZXQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfUkFTVEVSX0ZMQUdfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGxpc3Qgb2YgYml0IGZsYWcgY29uc3RhbnRzIGFzIHVzZWQgaW4gdGhlIGBmbGFncycgZmllbGQgb2YgYQorICAgKiAgIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZS4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9SQVNURVJfRkxBR19ERUZBVUxUIDo6CisgICAqICAgICBUaGlzIHZhbHVlIGlzIDAuCisgICAqCisgICAqICAgRlRfUkFTVEVSX0ZMQUdfQUEgOjoKKyAgICogICAgIFRoaXMgZmxhZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhhdCBhbgorICAgKiAgICAgYW50aS1hbGlhc2VkIGdseXBoIGltYWdlIHNob3VsZCBiZQorICAgKiAgICAgZ2VuZXJhdGVkLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIGJlCisgICAqICAgICBtb25vY2hyb21lICgxLWJpdCkuCisgICAqCisgICAqICAgRlRfUkFTVEVSX0ZMQUdfRElSRUNUIDo6CisgICAqICAgICBUaGlzIGZsYWcgaXMgc2V0IHRvIGluZGljYXRlIGRpcmVjdAorICAgKiAgICAgcmVuZGVyaW5nLiAgSW4gdGhpcyBtb2RlLCBjbGllbnQKKyAgICogICAgIGFwcGxpY2F0aW9ucyBtdXN0IHByb3ZpZGUgdGhlaXIgb3duIHNwYW4KKyAgICogICAgIGNhbGxiYWNrLiAgVGhpcyBsZXRzIHRoZW0gZGlyZWN0bHkKKyAgICogICAgIGRyYXcgb3IgY29tcG9zZSBvdmVyIGFuIGV4aXN0aW5nIGJpdG1hcC4KKyAgICogICAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZSB0YXJnZXQKKyAgICogICAgIHBpeG1hcCdzIGJ1ZmZlciBfbXVzdF8gYmUgemVyb2VkIGJlZm9yZQorICAgKiAgICAgcmVuZGVyaW5nLgorICAgKgorICAgKiAgICAgRGlyZWN0IHJlbmRlcmluZyBpcyBvbmx5IHBvc3NpYmxlIHdpdGgKKyAgICogICAgIGFudGktYWxpYXNlZCBnbHlwaHMuCisgICAqCisgICAqICAgRlRfUkFTVEVSX0ZMQUdfQ0xJUCA6OgorICAgKiAgICAgVGhpcyBmbGFnIGlzIG9ubHkgdXNlZCBpbiBkaXJlY3QKKyAgICogICAgIHJlbmRlcmluZyBtb2RlLiAgSWYgc2V0LCB0aGUgb3V0cHV0IHdpbGwKKyAgICogICAgIGJlIGNsaXBwZWQgdG8gYSBib3ggc3BlY2lmaWVkIGluIHRoZQorICAgKiAgICAgYGNsaXBfYm94JyBmaWVsZCBvZiB0aGUKKyAgICogICAgIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICAgIE5vdGUgdGhhdCBieSBkZWZhdWx0LCB0aGUgZ2x5cGggYml0bWFwCisgICAqICAgICBpcyBjbGlwcGVkIHRvIHRoZSB0YXJnZXQgcGl4bWFwLCBleGNlcHQKKyAgICogICAgIGluIGRpcmVjdCByZW5kZXJpbmcgbW9kZSB3aGVyZSBhbGwgc3BhbnMKKyAgICogICAgIGFyZSBnZW5lcmF0ZWQgaWYgbm8gY2xpcHBpbmcgYm94IGlzIHNldC4KKyAgICovCiAjZGVmaW5lIEZUX1JBU1RFUl9GTEFHX0RFRkFVTFQgIDB4MAogI2RlZmluZSBGVF9SQVNURVJfRkxBR19BQSAgICAgICAweDEKICNkZWZpbmUgRlRfUkFTVEVSX0ZMQUdfRElSRUNUICAgMHgyCkBAIC05NTAsNTAgKzk5OCw1OSBAQAogI2RlZmluZSBmdF9yYXN0ZXJfZmxhZ19jbGlwICAgICBGVF9SQVNURVJfRkxBR19DTElQCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfUGFyYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB0byBob2xkIHRoZSBhcmd1bWVudHMgdXNlZCBieSBhIHJhc3RlcidzIHJlbmRlciAgICAgICAgKi8KLSAgLyogICAgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFyZ2V0ICAgICAgOjogVGhlIHRhcmdldCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzb3VyY2UgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBnbHlwaCBpbWFnZSAoZS5nLiwgYW4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgQEZUX091dGxpbmUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmbGFncyAgICAgICA6OiBUaGUgcmVuZGVyaW5nIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdyYXlfc3BhbnMgIDo6IFRoZSBncmF5IHNwYW4gZHJhd2luZyBjYWxsYmFjay4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmxhY2tfc3BhbnMgOjogVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiaXRfdGVzdCAgICA6OiBVbnVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJpdF9zZXQgICAgIDo6IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciAgICAgICAgOjogVXNlci1zdXBwbGllZCBkYXRhIHRoYXQgaXMgcGFzc2VkIHRvIGVhY2ggZHJhd2luZyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2xpcF9ib3ggICAgOjogQW4gb3B0aW9uYWwgY2xpcHBpbmcgYm94LiAgSXQgaXMgb25seSB1c2VkIGluICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGRpcmVjdCByZW5kZXJpbmcgbW9kZS4gIE5vdGUgdGhhdCBjb29yZGluYXRlcyBoZXJlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgZXhwcmVzc2VkIGluIF9pbnRlZ2VyXyBwaXhlbHMgKGFuZCBub3QgaW4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgMjYuNiBmaXhlZC1wb2ludCB1bml0cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gYW50aS1hbGlhc2VkIGdseXBoIGJpdG1hcCBpcyBkcmF3biBpZiB0aGUgQEZUX1JBU1RFUl9GTEFHX0FBICAgICovCi0gIC8qICAgIGJpdCBmbGFnIGlzIHNldCBpbiB0aGUgYGZsYWdzJyBmaWVsZCwgb3RoZXJ3aXNlIGEgbW9ub2Nocm9tZSAgICAgICAqLwotICAvKiAgICBiaXRtYXAgaXMgZ2VuZXJhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHRoZSBARlRfUkFTVEVSX0ZMQUdfRElSRUNUIGJpdCBmbGFnIGlzIHNldCBpbiBgZmxhZ3MnLCB0aGUgICAgICAqLwotICAvKiAgICByYXN0ZXIgd2lsbCBjYWxsIHRoZSBgZ3JheV9zcGFucycgY2FsbGJhY2sgdG8gZHJhdyBncmF5IHBpeGVsICAgICAgKi8KLSAgLyogICAgc3BhbnMuICBUaGlzIGFsbG93cyBkaXJlY3QgY29tcG9zaXRpb24gb3ZlciBhIHByZS1leGlzdGluZyBiaXRtYXAgICovCi0gIC8qICAgIHRocm91Z2ggdXNlci1wcm92aWRlZCBjYWxsYmFja3MgdG8gcGVyZm9ybSB0aGUgc3BhbiBkcmF3aW5nIGFuZCAgICAqLwotICAvKiAgICBjb21wb3NpdGlvbi4gICAgTm90IHN1cHBvcnRlZCBieSB0aGUgbW9ub2Nocm9tZSByYXN0ZXJpemVyLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1Jhc3Rlcl9QYXJhbXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIGFyZ3VtZW50cyB1c2VkIGJ5IGEgcmFzdGVyJ3MgcmVuZGVyCisgICAqICAgZnVuY3Rpb24uCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgdGFyZ2V0IDo6CisgICAqICAgICBUaGUgdGFyZ2V0IGJpdG1hcC4KKyAgICoKKyAgICogICBzb3VyY2UgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIGdseXBoIGltYWdlIChlLmcuLCBhbgorICAgKiAgICAgQEZUX091dGxpbmUpLgorICAgKgorICAgKiAgIGZsYWdzIDo6CisgICAqICAgICBUaGUgcmVuZGVyaW5nIGZsYWdzLgorICAgKgorICAgKiAgIGdyYXlfc3BhbnMgOjoKKyAgICogICAgIFRoZSBncmF5IHNwYW4gZHJhd2luZyBjYWxsYmFjay4KKyAgICoKKyAgICogICBibGFja19zcGFucyA6OgorICAgKiAgICAgVW51c2VkLgorICAgKgorICAgKiAgIGJpdF90ZXN0IDo6CisgICAqICAgICBVbnVzZWQuCisgICAqCisgICAqICAgYml0X3NldCA6OgorICAgKiAgICAgVW51c2VkLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIFVzZXItc3VwcGxpZWQgZGF0YSB0aGF0IGlzIHBhc3NlZCB0byBlYWNoIGRyYXdpbmcKKyAgICogICAgIGNhbGxiYWNrLgorICAgKgorICAgKiAgIGNsaXBfYm94IDo6CisgICAqICAgICBBbiBvcHRpb25hbCBjbGlwcGluZyBib3guICBJdCBpcyBvbmx5IHVzZWQgaW4KKyAgICogICAgIGRpcmVjdCByZW5kZXJpbmcgbW9kZS4gIE5vdGUgdGhhdCBjb29yZGluYXRlcyBoZXJlCisgICAqICAgICBzaG91bGQgYmUgZXhwcmVzc2VkIGluIF9pbnRlZ2VyXyBwaXhlbHMgKGFuZCBub3QgaW4KKyAgICogICAgIDI2LjYgZml4ZWQtcG9pbnQgdW5pdHMpLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBBbiBhbnRpLWFsaWFzZWQgZ2x5cGggYml0bWFwIGlzIGRyYXduIGlmIHRoZSBARlRfUkFTVEVSX0ZMQUdfQUEKKyAgICogICBiaXQgZmxhZyBpcyBzZXQgaW4gdGhlIGBmbGFncycgZmllbGQsIG90aGVyd2lzZSBhIG1vbm9jaHJvbWUKKyAgICogICBiaXRtYXAgaXMgZ2VuZXJhdGVkLgorICAgKgorICAgKiAgIElmIHRoZSBARlRfUkFTVEVSX0ZMQUdfRElSRUNUIGJpdCBmbGFnIGlzIHNldCBpbiBgZmxhZ3MnLCB0aGUKKyAgICogICByYXN0ZXIgd2lsbCBjYWxsIHRoZSBgZ3JheV9zcGFucycgY2FsbGJhY2sgdG8gZHJhdyBncmF5IHBpeGVsCisgICAqICAgc3BhbnMuICBUaGlzIGFsbG93cyBkaXJlY3QgY29tcG9zaXRpb24gb3ZlciBhIHByZS1leGlzdGluZyBiaXRtYXAKKyAgICogICB0aHJvdWdoIHVzZXItcHJvdmlkZWQgY2FsbGJhY2tzIHRvIHBlcmZvcm0gdGhlIHNwYW4gZHJhd2luZyBhbmQKKyAgICogICBjb21wb3NpdGlvbi4gICAgTm90IHN1cHBvcnRlZCBieSB0aGUgbW9ub2Nocm9tZSByYXN0ZXJpemVyLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Jhc3Rlcl9QYXJhbXNfCiAgIHsKICAgICBjb25zdCBGVF9CaXRtYXAqICAgICAgICB0YXJnZXQ7CkBAIC0xMDA5LDMwICsxMDY2LDMyIEBACiAgIH0gRlRfUmFzdGVyX1BhcmFtczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Jhc3Rlcl9OZXdGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgYSBuZXcgcmFzdGVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSA6OiBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IGFsbG9jYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJhc3RlciA6OiBBIGhhbmRsZSB0byB0aGUgbmV3IHJhc3RlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBgbWVtb3J5JyBwYXJhbWV0ZXIgaXMgYSB0eXBlbGVzcyBwb2ludGVyIGluIG9yZGVyIHRvIGF2b2lkICAgICAqLwotICAvKiAgICB1bi13YW50ZWQgZGVwZW5kZW5jaWVzIG9uIHRoZSByZXN0IG9mIHRoZSBGcmVlVHlwZSBjb2RlLiAgSW4gICAgICAgKi8KLSAgLyogICAgcHJhY3RpY2UsIGl0IGlzIGFuIEBGVF9NZW1vcnkgb2JqZWN0LCBpLmUuLCBhIGhhbmRsZSB0byB0aGUgICAgICAgICovCi0gIC8qICAgIHN0YW5kYXJkIEZyZWVUeXBlIG1lbW9yeSBhbGxvY2F0b3IuICBIb3dldmVyLCB0aGlzIGZpZWxkIGNhbiBiZSAgICAqLwotICAvKiAgICBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYSBnaXZlbiByYXN0ZXIgaW1wbGVtZW50YXRpb24uICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfUmFzdGVyX05ld0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgYSBuZXcgcmFzdGVyIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgcmFzdGVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbmV3IHJhc3RlciBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGBtZW1vcnknIHBhcmFtZXRlciBpcyBhIHR5cGVsZXNzIHBvaW50ZXIgaW4gb3JkZXIgdG8gYXZvaWQKKyAgICogICB1bi13YW50ZWQgZGVwZW5kZW5jaWVzIG9uIHRoZSByZXN0IG9mIHRoZSBGcmVlVHlwZSBjb2RlLiAgSW4KKyAgICogICBwcmFjdGljZSwgaXQgaXMgYW4gQEZUX01lbW9yeSBvYmplY3QsIGkuZS4sIGEgaGFuZGxlIHRvIHRoZQorICAgKiAgIHN0YW5kYXJkIEZyZWVUeXBlIG1lbW9yeSBhbGxvY2F0b3IuICBIb3dldmVyLCB0aGlzIGZpZWxkIGNhbiBiZQorICAgKiAgIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhIGdpdmVuIHJhc3RlciBpbXBsZW1lbnRhdGlvbi4KKyAgICovCiAgIHR5cGVkZWYgaW50CiAgICgqRlRfUmFzdGVyX05ld0Z1bmMpKCB2b2lkKiAgICAgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SYXN0ZXIqICByYXN0ZXIgKTsKQEAgLTEwNDAsNDkgKzEwOTksNTMgQEAKICNkZWZpbmUgRlRfUmFzdGVyX05ld19GdW5jICBGVF9SYXN0ZXJfTmV3RnVuYwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFzdGVyX0RvbmVGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgYSBnaXZlbiByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyIDo6IEEgaGFuZGxlIHRvIHRoZSByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX1Jhc3Rlcl9Eb25lRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgYSBnaXZlbiByYXN0ZXIgb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgcmFzdGVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcmFzdGVyIG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgdm9pZAogICAoKkZUX1Jhc3Rlcl9Eb25lRnVuYykoIEZUX1Jhc3RlciAgcmFzdGVyICk7CiAKICNkZWZpbmUgRlRfUmFzdGVyX0RvbmVfRnVuYyAgRlRfUmFzdGVyX0RvbmVGdW5jCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfUmVzZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSB1c2VkIHRvIHByb3ZpZGUgYW4gYXJlYSBvZiBtZW1vcnkgY2FsbGVkIHRoZSBgcmVuZGVyICAgICAgKi8KLSAgLyogICAgcG9vbCcgYXZhaWxhYmxlIHRvIGFsbCByZWdpc3RlcmVkIHJhc3Rlcml6ZXJzLiAgVGhpcyB3YXMgbm90ICAgICAgICovCi0gIC8qICAgIHRocmVhZCBzYWZlLCBob3dldmVyLCBhbmQgbm93IEZyZWVUeXBlIG5ldmVyIGFsbG9jYXRlcyB0aGlzIHBvb2wuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBuZXcgcmFzdGVyIG9iamVjdCBpcyBjcmVhdGVkLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBuZXcgcmFzdGVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb29sX2Jhc2UgOjogUHJldmlvdXNseSwgdGhlIGFkZHJlc3MgaW4gbWVtb3J5IG9mIHRoZSByZW5kZXIgcG9vbC4gKi8KLSAgLyogICAgICAgICAgICAgICAgIFNldCB0aGlzIHRvIE5VTEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb29sX3NpemUgOjogUHJldmlvdXNseSwgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIFNldCB0aGlzIHRvIDAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmFzdGVyaXplcnMgc2hvdWxkIHJlbHkgb24gZHluYW1pYyBvciBzdGFjayBhbGxvY2F0aW9uIGlmIHRoZXkgICAgICovCi0gIC8qICAgIHdhbnQgdG8gKGEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGlzIHBhc3NlZCB0byB0aGUgICAgICAgICAqLwotICAvKiAgICByYXN0ZXJpemVyIGNvbnN0cnVjdG9yKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfUmFzdGVyX1Jlc2V0RnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRnJlZVR5cGUgdXNlZCB0byBwcm92aWRlIGFuIGFyZWEgb2YgbWVtb3J5IGNhbGxlZCB0aGUgYHJlbmRlcgorICAgKiAgIHBvb2wnIGF2YWlsYWJsZSB0byBhbGwgcmVnaXN0ZXJlZCByYXN0ZXJpemVycy4gIFRoaXMgd2FzIG5vdAorICAgKiAgIHRocmVhZCBzYWZlLCBob3dldmVyLCBhbmQgbm93IEZyZWVUeXBlIG5ldmVyIGFsbG9jYXRlcyB0aGlzIHBvb2wuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBuZXcgcmFzdGVyIG9iamVjdCBpcyBjcmVhdGVkLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgcmFzdGVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbmV3IHJhc3RlciBvYmplY3QuCisgICAqCisgICAqICAgcG9vbF9iYXNlIDo6CisgICAqICAgICBQcmV2aW91c2x5LCB0aGUgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIHJlbmRlciBwb29sLgorICAgKiAgICAgU2V0IHRoaXMgdG8gTlVMTC4KKyAgICoKKyAgICogICBwb29sX3NpemUgOjoKKyAgICogICAgIFByZXZpb3VzbHksIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbC4KKyAgICogICAgIFNldCB0aGlzIHRvIDAuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFJhc3Rlcml6ZXJzIHNob3VsZCByZWx5IG9uIGR5bmFtaWMgb3Igc3RhY2sgYWxsb2NhdGlvbiBpZiB0aGV5CisgICAqICAgd2FudCB0byAoYSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IgaXMgcGFzc2VkIHRvIHRoZQorICAgKiAgIHJhc3Rlcml6ZXIgY29uc3RydWN0b3IpLgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfUmFzdGVyX1Jlc2V0RnVuYykoIEZUX1Jhc3RlciAgICAgICByYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqICBwb29sX2Jhc2UsCkBAIC0xMDkxLDI0ICsxMTU0LDI3IEBACiAjZGVmaW5lIEZUX1Jhc3Rlcl9SZXNldF9GdW5jICBGVF9SYXN0ZXJfUmVzZXRGdW5jCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfU2V0TW9kZUZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIGEgZ2VuZXJpYyBmYWNpbGl0eSB0byBjaGFuZ2UgbW9kZXMgb3IgYXR0cmlidXRlcyAgKi8KLSAgLyogICAgaW4gYSBnaXZlbiByYXN0ZXIuICBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIG9yICAgICovCi0gIC8qICAgIHNpbXBseSB0byBhbGxvdyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBgZmVhdHVyZXMnIGluIGEgZ2l2ZW4gICAgICAqLwotICAvKiAgICByYXN0ZXIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYXN0ZXIgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZGUgICA6OiBBIDQtYnl0ZSB0YWcgdXNlZCB0byBuYW1lIHRoZSBtb2RlIG9yIHByb3BlcnR5LiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXJncyAgIDo6IEEgcG9pbnRlciB0byB0aGUgbmV3IG1vZGUvcHJvcGVydHkgdG8gdXNlLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX1Jhc3Rlcl9TZXRNb2RlRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyBhIGdlbmVyaWMgZmFjaWxpdHkgdG8gY2hhbmdlIG1vZGVzIG9yIGF0dHJpYnV0ZXMKKyAgICogICBpbiBhIGdpdmVuIHJhc3Rlci4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgb3IKKyAgICogICBzaW1wbHkgdG8gYWxsb3cgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgYGZlYXR1cmVzJyBpbiBhIGdpdmVuCisgICAqICAgcmFzdGVyIG1vZHVsZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHJhc3RlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LgorICAgKgorICAgKiAgIG1vZGUgOjoKKyAgICogICAgIEEgNC1ieXRlIHRhZyB1c2VkIHRvIG5hbWUgdGhlIG1vZGUgb3IgcHJvcGVydHkuCisgICAqCisgICAqICAgYXJncyA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBuZXcgbW9kZS9wcm9wZXJ0eSB0byB1c2UuCisgICAqLwogICB0eXBlZGVmIGludAogICAoKkZUX1Jhc3Rlcl9TZXRNb2RlRnVuYykoIEZUX1Jhc3RlciAgICAgIHJhc3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2RlLApAQCAtMTExNyw0MCArMTE4Myw0MiBAQAogI2RlZmluZSBGVF9SYXN0ZXJfU2V0X01vZGVfRnVuYyAgRlRfUmFzdGVyX1NldE1vZGVGdW5jCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYXN0ZXJfUmVuZGVyRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbnZva2UgYSBnaXZlbiByYXN0ZXIgdG8gc2Nhbi1jb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgaW50byBhICAgKi8KLSAgLyogICAgdGFyZ2V0IGJpdG1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyIDo6IEEgaGFuZGxlIHRvIHRoZSByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXJhbXMgOjogQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIHN0b3JlIHRoZSByZW5kZXJpbmcgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIGRlcGVuZHMgb24gdGhlIHJhc3RlcidzIGdseXBoICovCi0gIC8qICAgIGZvcm1hdCBkZWZpbmVkIGluIGl0cyBARlRfUmFzdGVyX0Z1bmNzIHN0cnVjdHVyZS4gIEl0IGNhbiBiZSBhbiAgICAqLwotICAvKiAgICBARlRfT3V0bGluZSBvciBhbnl0aGluZyBlbHNlIGluIG9yZGVyIHRvIHN1cHBvcnQgYSBsYXJnZSBhcnJheSBvZiAgKi8KLSAgLyogICAgZ2x5cGggZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIGFsc28gdGhhdCB0aGUgcmVuZGVyIGZ1bmN0aW9uIGNhbiBmYWlsIGFuZCByZXR1cm4gYSAgICAgICAgICAgKi8KLSAgLyogICAgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGVycm9yIGNvZGUgaWYgdGhlIHJhc3RlciB1c2VkIGRvZXMgICovCi0gIC8qICAgIG5vdCBzdXBwb3J0IGRpcmVjdCBjb21wb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWFhYOiBGb3Igbm93LCB0aGUgc3RhbmRhcmQgcmFzdGVyIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgICAgICAgICAgICovCi0gIC8qICAgICAgICAgY29tcG9zaXRpb24gYnV0IHRoaXMgc2hvdWxkIGNoYW5nZSBmb3IgdGhlIGZpbmFsIHJlbGVhc2UgKHNlZSAqLwotICAvKiAgICAgICAgIHRoZSBmaWxlcyBgZGVtb3Mvc3JjL2Z0Z3JheXMuYycgYW5kIGBkZW1vcy9zcmMvZnRncmF5czIuYycgICAgKi8KLSAgLyogICAgICAgICBmb3IgZXhhbXBsZXMgb2YgZGlzdGluY3QgaW1wbGVtZW50YXRpb25zIHRoYXQgc3VwcG9ydCBkaXJlY3QgICovCi0gIC8qICAgICAgICAgY29tcG9zaXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9SYXN0ZXJfUmVuZGVyRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgSW52b2tlIGEgZ2l2ZW4gcmFzdGVyIHRvIHNjYW4tY29udmVydCBhIGdpdmVuIGdseXBoIGltYWdlIGludG8gYQorICAgKiAgIHRhcmdldCBiaXRtYXAuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICByYXN0ZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSByYXN0ZXIgb2JqZWN0LgorICAgKgorICAgKiAgIHBhcmFtcyA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvCisgICAqICAgICBzdG9yZSB0aGUgcmVuZGVyaW5nIHBhcmFtZXRlcnMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGV4YWN0IGZvcm1hdCBvZiB0aGUgc291cmNlIGltYWdlIGRlcGVuZHMgb24gdGhlIHJhc3RlcidzIGdseXBoCisgICAqICAgZm9ybWF0IGRlZmluZWQgaW4gaXRzIEBGVF9SYXN0ZXJfRnVuY3Mgc3RydWN0dXJlLiAgSXQgY2FuIGJlIGFuCisgICAqICAgQEZUX091dGxpbmUgb3IgYW55dGhpbmcgZWxzZSBpbiBvcmRlciB0byBzdXBwb3J0IGEgbGFyZ2UgYXJyYXkgb2YKKyAgICogICBnbHlwaCBmb3JtYXRzLgorICAgKgorICAgKiAgIE5vdGUgYWxzbyB0aGF0IHRoZSByZW5kZXIgZnVuY3Rpb24gY2FuIGZhaWwgYW5kIHJldHVybiBhCisgICAqICAgYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGVycm9yIGNvZGUgaWYgdGhlIHJhc3RlciB1c2VkIGRvZXMKKyAgICogICBub3Qgc3VwcG9ydCBkaXJlY3QgY29tcG9zaXRpb24uCisgICAqCisgICAqICAgWFhYOiBGb3Igbm93LCB0aGUgc3RhbmRhcmQgcmFzdGVyIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QKKyAgICogICAgICAgIGNvbXBvc2l0aW9uIGJ1dCB0aGlzIHNob3VsZCBjaGFuZ2UgZm9yIHRoZSBmaW5hbCByZWxlYXNlIChzZWUKKyAgICogICAgICAgIHRoZSBmaWxlcyBgZGVtb3Mvc3JjL2Z0Z3JheXMuYycgYW5kIGBkZW1vcy9zcmMvZnRncmF5czIuYycKKyAgICogICAgICAgIGZvciBleGFtcGxlcyBvZiBkaXN0aW5jdCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IGRpcmVjdAorICAgKiAgICAgICAgY29tcG9zaXRpb24pLgorICAgKi8KICAgdHlwZWRlZiBpbnQKICAgKCpGVF9SYXN0ZXJfUmVuZGVyRnVuYykoIEZUX1Jhc3RlciAgICAgICAgICAgICAgICByYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9SYXN0ZXJfUGFyYW1zKiAgcGFyYW1zICk7CkBAIC0xMTU4LDI1ICsxMjI2LDMwIEBACiAjZGVmaW5lIEZUX1Jhc3Rlcl9SZW5kZXJfRnVuYyAgRlRfUmFzdGVyX1JlbmRlckZ1bmMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Jhc3Rlcl9GdW5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIGdpdmVuIHJhc3RlciBjbGFzcyB0byB0aGUgbGlicmFyeS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2Zvcm1hdCAgOjogVGhlIHN1cHBvcnRlZCBnbHlwaCBmb3JtYXQgZm9yIHRoaXMgcmFzdGVyLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyX25ldyAgICA6OiBUaGUgcmFzdGVyIGNvbnN0cnVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYXN0ZXJfcmVzZXQgIDo6IFVzZWQgdG8gcmVzZXQgdGhlIHJlbmRlciBwb29sIHdpdGhpbiB0aGUgcmFzdGVyLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJhc3Rlcl9yZW5kZXIgOjogQSBmdW5jdGlvbiB0byByZW5kZXIgYSBnbHlwaCBpbnRvIGEgZ2l2ZW4gYml0bWFwLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyX2RvbmUgICA6OiBUaGUgcmFzdGVyIGRlc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9SYXN0ZXJfRnVuY3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIGdpdmVuIHJhc3RlciBjbGFzcyB0byB0aGUgbGlicmFyeS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBnbHlwaF9mb3JtYXQgOjoKKyAgICogICAgIFRoZSBzdXBwb3J0ZWQgZ2x5cGggZm9ybWF0IGZvciB0aGlzIHJhc3Rlci4KKyAgICoKKyAgICogICByYXN0ZXJfbmV3IDo6CisgICAqICAgICBUaGUgcmFzdGVyIGNvbnN0cnVjdG9yLgorICAgKgorICAgKiAgIHJhc3Rlcl9yZXNldCA6OgorICAgKiAgICAgVXNlZCB0byByZXNldCB0aGUgcmVuZGVyIHBvb2wgd2l0aGluIHRoZSByYXN0ZXIuCisgICAqCisgICAqICAgcmFzdGVyX3JlbmRlciA6OgorICAgKiAgICAgQSBmdW5jdGlvbiB0byByZW5kZXIgYSBnbHlwaCBpbnRvIGEgZ2l2ZW4gYml0bWFwLgorICAgKgorICAgKiAgIHJhc3Rlcl9kb25lIDo6CisgICAqICAgICBUaGUgcmFzdGVyIGRlc3RydWN0b3IuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfUmFzdGVyX0Z1bmNzXwogICB7CiAgICAgRlRfR2x5cGhfRm9ybWF0ICAgICAgICBnbHlwaF9mb3JtYXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKaW5kZXggNDQ2MTlmOS4uYjNhMTdjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRpbmNyZW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGluY3JlbWVudGFsIGxvYWRpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRpbmNyZW0uaAorICoKKyAqICAgRnJlZVR5cGUgaW5jcmVtZW50YWwgbG9hZGluZyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRJTkNSRU1fSF8KQEAgLTI4NiwzMCArMjg2LDMwIEBACiAgICAqICAgd2FudHMgdG8gc3VwcG9ydCBpbmNyZW1lbnRhbCBnbHlwaCBsb2FkaW5nLiAgWW91IHNob3VsZCB1c2UgaXQgd2l0aAogICAgKiAgIEBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgogICAgKgotICAgKiAgICAgewotICAgKiAgICAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgIGluY19pbnQ7Ci0gICAqICAgICAgIEZUX1BhcmFtZXRlciAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOwotICAgKiAgICAgICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgIG9wZW5fYXJnczsKKyAgICogICB7CisgICAqICAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgIGluY19pbnQ7CisgICAqICAgICBGVF9QYXJhbWV0ZXIgICAgICAgICAgICAgICAgIHBhcmFtZXRlcjsKKyAgICogICAgIEZUX09wZW5fQXJncyAgICAgICAgICAgICAgICAgb3Blbl9hcmdzOwogICAgKgogICAgKgotICAgKiAgICAgICAvLyBzZXQgdXAgaW5jcmVtZW50YWwgZGVzY3JpcHRvcgotICAgKiAgICAgICBpbmNfaW50LmZ1bmNzICA9IG15X2Z1bmNzOwotICAgKiAgICAgICBpbmNfaW50Lm9iamVjdCA9IG15X29iamVjdDsKKyAgICogICAgIC8vIHNldCB1cCBpbmNyZW1lbnRhbCBkZXNjcmlwdG9yCisgICAqICAgICBpbmNfaW50LmZ1bmNzICA9IG15X2Z1bmNzOworICAgKiAgICAgaW5jX2ludC5vYmplY3QgPSBteV9vYmplY3Q7CiAgICAqCi0gICAqICAgICAgIC8vIHNldCB1cCBvcHRpb25hbCBwYXJhbWV0ZXIKLSAgICogICAgICAgcGFyYW1ldGVyLnRhZyAgPSBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUw7Ci0gICAqICAgICAgIHBhcmFtZXRlci5kYXRhID0gJmluY19pbnQ7CisgICAqICAgICAvLyBzZXQgdXAgb3B0aW9uYWwgcGFyYW1ldGVyCisgICAqICAgICBwYXJhbWV0ZXIudGFnICA9IEZUX1BBUkFNX1RBR19JTkNSRU1FTlRBTDsKKyAgICogICAgIHBhcmFtZXRlci5kYXRhID0gJmluY19pbnQ7CiAgICAqCi0gICAqICAgICAgIC8vIHNldCB1cCBGVF9PcGVuX0FyZ3Mgc3RydWN0dXJlCi0gICAqICAgICAgIG9wZW5fYXJncy5mbGFncyAgICAgID0gRlRfT1BFTl9QQVRITkFNRSB8IEZUX09QRU5fUEFSQU1TOwotICAgKiAgICAgICBvcGVuX2FyZ3MucGF0aG5hbWUgICA9IG15X2ZvbnRfcGF0aG5hbWU7Ci0gICAqICAgICAgIG9wZW5fYXJncy5udW1fcGFyYW1zID0gMTsKLSAgICogICAgICAgb3Blbl9hcmdzLnBhcmFtcyAgICAgPSAmcGFyYW1ldGVyOyAvLyB3ZSB1c2Ugb25lIG9wdGlvbmFsIGFyZ3VtZW50CisgICAqICAgICAvLyBzZXQgdXAgRlRfT3Blbl9BcmdzIHN0cnVjdHVyZQorICAgKiAgICAgb3Blbl9hcmdzLmZsYWdzICAgICAgPSBGVF9PUEVOX1BBVEhOQU1FIHwgRlRfT1BFTl9QQVJBTVM7CisgICAqICAgICBvcGVuX2FyZ3MucGF0aG5hbWUgICA9IG15X2ZvbnRfcGF0aG5hbWU7CisgICAqICAgICBvcGVuX2FyZ3MubnVtX3BhcmFtcyA9IDE7CisgICAqICAgICBvcGVuX2FyZ3MucGFyYW1zICAgICA9ICZwYXJhbWV0ZXI7IC8vIHdlIHVzZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQKICAgICoKLSAgICogICAgICAgLy8gb3BlbiB0aGUgZm9udAotICAgKiAgICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJm9wZW5fYXJncywgaW5kZXgsICZmYWNlICk7Ci0gICAqICAgICAgIC4uLgotICAgKiAgICAgfQorICAgKiAgICAgLy8gb3BlbiB0aGUgZm9udAorICAgKiAgICAgZXJyb3IgPSBGVF9PcGVuX0ZhY2UoIGxpYnJhcnksICZvcGVuX2FyZ3MsIGluZGV4LCAmZmFjZSApOworICAgKiAgICAgLi4uCisgICAqICAgfQogICAgKgogICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlY18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaAppbmRleCAyYTI3MTk2Li44ZDI3MTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGxjZGZpbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAgICAgICAgICAgKi8KLS8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRsY2RmaWwuaAorICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocworICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRMQ0RGSUxfSF8KQEAgLTM2LDk4ICszNiw5MCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCiAgICAqIEBzZWN0aW9uOgotICAgKiAgIGxjZF9maWx0ZXJpbmcKKyAgICogICBsY2RfcmVuZGVyaW5nCiAgICAqCiAgICAqIEB0aXRsZToKLSAgICogICBMQ0QgRmlsdGVyaW5nCisgICAqICAgU3VicGl4ZWwgUmVuZGVyaW5nCiAgICAqCiAgICAqIEBhYnN0cmFjdDoKLSAgICogICBSZWR1Y2UgY29sb3IgZnJpbmdlcyBvZiBzdWJwaXhlbC1yZW5kZXJlZCBiaXRtYXBzLgorICAgKiAgIEFQSSB0byBjb250cm9sIHN1YnBpeGVsIHJlbmRlcmluZy4KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEZyZWVUeXBlIHByb3ZpZGVzIHR3byBhbHRlcm5hdGl2ZSBzdWJwaXhlbCByZW5kZXJpbmcgdGVjaG5vbG9naWVzLgogICAgKiAgIFNob3VsZCB5b3UgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyCi0gICAqICAgYGZ0b3B0aW9uLmgnLCB3aGljaCBlbmFibGVzIHBhdGVudGVkIENsZWFyVHlwZS1zdHlsZSByZW5kZXJpbmcsCi0gICAqICAgdGhlIExDRC1vcHRpbWl6ZWQgZ2x5cGggYml0bWFwcyBzaG91bGQgYmUgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yCi0gICAqICAgZnJpbmdlcyBpbmhlcmVudCB0byB0aGlzIHRlY2hub2xvZ3kuICBUaGUgZGVmYXVsdCBGcmVlVHlwZSBMQ0QKLSAgICogICByZW5kZXJpbmcgdXNlcyBkaWZmZXJlbnQgdGVjaG5vbG9neSwgYW5kIEFQSSBkZXNjcmliZWQgYmVsb3csCi0gICAqICAgYWx0aG91Z2ggYXZhaWxhYmxlLCBkb2VzIG5vdGhpbmcuCisgICAqICAgYGZ0b3B0aW9uLmgnLCB0aGlzIGVuYWJsZXMgcGF0ZW50ZWQgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZy4KKyAgICogICBPdGhlcndpc2UsIEhhcm1vbnkgTENEIHJlbmRlcmluZyBpcyBlbmFibGVkLiAgVGhlc2UgdGVjaG5vbG9naWVzIGFyZQorICAgKiAgIGNvbnRyb2xsZWQgZGlmZmVyZW50bHkgYW5kIEFQSSBkZXNjcmliZWQgYmVsb3csIGFsdGhvdWdoIGFsd2F5cworICAgKiAgIGF2YWlsYWJsZSwgcGVyZm9ybXMgaXRzIGZ1bmN0aW9uIHdoZW4gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGVuYWJsZWQKKyAgICogICBhbmQgZG9lcyBub3RoaW5nIG90aGVyd2lzZS4KICAgICoKICAgICogICBDbGVhclR5cGUtc3R5bGUgTENEIHJlbmRlcmluZyBleHBsb2l0cyB0aGUgY29sb3Itc3RyaXBlZCBzdHJ1Y3R1cmUgb2YKICAgICogICBMQ0QgcGl4ZWxzLCBpbmNyZWFzaW5nIHRoZSBhdmFpbGFibGUgcmVzb2x1dGlvbiBpbiB0aGUgZGlyZWN0aW9uIG9mCi0gICAqICAgdGhlIHN0cmlwZSAodXN1YWxseSBob3Jpem9udGFsIFJHQikgYnkgYSBmYWN0b3Igb2Z+My4gIFNpbmNlIHRoZXNlCi0gICAqICAgc3VicGl4ZWxzIGFyZSBjb2xvciBwaXhlbHMsIHVzaW5nIHRoZW0gdW5maWx0ZXJlZCBjcmVhdGVzIHNldmVyZQotICAgKiAgIGNvbG9yIGZyaW5nZXMuICBVc2UgdGhlIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciBBUEkgdG8gc3BlY2lmeSBhCi0gICAqICAgbG93LXBhc3MgZmlsdGVyLCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8gc3VicGl4ZWwtcmVuZGVyZWQgYml0bWFwcwotICAgKiAgIGdlbmVyYXRlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGguICBUaGUgZmlsdGVyIHNhY3JpZmljZXMgc29tZSBvZgotICAgKiAgIHRoZSBoaWdoZXIgcmVzb2x1dGlvbiB0byByZWR1Y2UgY29sb3IgZnJpbmdlcywgbWFraW5nIHRoZSBnbHlwaCBpbWFnZQotICAgKiAgIHNsaWdodGx5IGJsdXJyaWVyLiAgUG9zaXRpb25hbCBpbXByb3ZlbWVudHMgd2lsbCByZW1haW4uCisgICAqICAgdGhlIHN0cmlwZSAodXN1YWxseSBob3Jpem9udGFsIFJHQikgYnkgYSBmYWN0b3Igb2Z+My4gIFVzaW5nIHRoZQorICAgKiAgIHN1YnBpeGVscyBjb3ZlcmFnZXMgdW5maWx0ZXJlZCBjYW4gY3JlYXRlIHNldmVyZSBjb2xvciBmcmluZ2VzCisgICAqICAgZXNwZWNpYWxseSB3aGVuIHJlbmRlcmluZyB0aGluIGZlYXR1cmVzLiAgSW5kZWVkLCB0byBwcm9kdWNlCisgICAqICAgYmxhY2stb24td2hpdGUgdGV4dCwgdGhlIG5lYXJieSBjb2xvciBzdWJwaXhlbHMgbXVzdCBiZSBkaW1tZWQgZXF1YWxseS4KICAgICoKLSAgICogICBBIGZpbHRlciBzaG91bGQgaGF2ZSB0d28gcHJvcGVydGllczoKKyAgICogICBBIGdvb2QgNS10YXAgRklSIGZpbHRlciBzaG91bGQgYmUgYXBwbGllZCB0byBzdWJwaXhlbCBjb3ZlcmFnZXMKKyAgICogICByZWdhcmRsZXNzIG9mIHBpeGVsIGJvdW5kYXJpZXMgYW5kIHNob3VsZCBoYXZlIHRoZXNlIHByb3BlcnRpZXM6CiAgICAqCi0gICAqICAgMSkgSXQgc2hvdWxkIGJlIG5vcm1hbGl6ZWQsIG1lYW5pbmcgdGhlIHN1bSBvZiB0aGUgNX5jb21wb25lbnRzCi0gICAqICAgICAgc2hvdWxkIGJlIDI1NiAoMHgxMDApLiAgSXQgaXMgcG9zc2libGUgdG8gZ28gYWJvdmUgb3IgdW5kZXIgdGhpcwotICAgKiAgICAgIHRhcmdldCBzdW0sIGhvd2V2ZXI6IGdvaW5nIHVuZGVyIG1lYW5zIHRvc3Npbmcgb3V0IGNvbnRyYXN0LCBnb2luZwotICAgKiAgICAgIG92ZXIgbWVhbnMgaW52b2tpbmcgY2xhbXBpbmcgYW5kIHRoZXJlYnkgbm9uLWxpbmVhcml0aWVzIHRoYXQKLSAgICogICAgICBpbmNyZWFzZSBjb250cmFzdCBzb21ld2hhdCBhdCB0aGUgZXhwZW5zZSBvZiBncmVhdGVyIGRpc3RvcnRpb24KLSAgICogICAgICBhbmQgY29sb3ItZnJpbmdpbmcuICBDb250cmFzdCBpcyBiZXR0ZXIgZW5oYW5jZWQgdGhyb3VnaCBzdGVtCi0gICAqICAgICAgZGFya2VuaW5nLgorICAgKiAgIDEpIEl0IHNob3VsZCBiZSBzeW1tZXRyaWNhbCwgbGlrZSB7fmEsIGIsIGMsIGIsIGF+fSwgdG8gYXZvaWQKKyAgICogICAgICBhbnkgc2hpZnRzIGluIGFwcGVhcmFuY2UuCiAgICAqCi0gICAqICAgMikgSXQgc2hvdWxkIGJlIGNvbG9yLWJhbGFuY2VkLCBtZWFuaW5nIGEgZmlsdGVyIGB7fmEsIGIsIGMsIGIsIGF+fScKLSAgICogICAgICB3aGVyZSBhfisgYn49fmMuICBJdCBkaXN0cmlidXRlcyB0aGUgY29tcHV0ZWQgY292ZXJhZ2UgZm9yIG9uZQotICAgKiAgICAgIHN1YnBpeGVsIHRvIGFsbCBzdWJwaXhlbHMgZXF1YWxseSwgc2FjcmlmaWNpbmcgc29tZSB3b24gcmVzb2x1dGlvbgotICAgKiAgICAgIGJ1dCBkcmFzdGljYWxseSByZWR1Y2luZyBjb2xvci1mcmluZ2luZy4gIFBvc2l0aW9uaW5nIGltcHJvdmVtZW50cwotICAgKiAgICAgIHJlbWFpbiEgIE5vdGUgdGhhdCBjb2xvci1mcmluZ2luZyBjYW4gb25seSByZWFsbHkgYmUgbWluaW1pemVkCi0gICAqICAgICAgd2hlbiB1c2luZyBhIGNvbG9yLWJhbGFuY2VkIGZpbHRlciBhbmQgYWxwaGEtYmxlbmRpbmcgdGhlIGdseXBoCi0gICAqICAgICAgb250byBhIHN1cmZhY2UgaW4gbGluZWFyIHNwYWNlOyBzZWUgQEZUX1JlbmRlcl9HbHlwaC4KKyAgICogICAyKSBJdCBzaG91bGQgYmUgY29sb3ItYmFsYW5jZWQsIG1lYW5pbmcgYX4rIGJ+PX5jLCB0byByZWR1Y2UgY29sb3IKKyAgICogICAgICBmcmluZ2VzIGJ5IGRpc3RyaWJ1dGluZyB0aGUgY29tcHV0ZWQgY292ZXJhZ2UgZm9yIG9uZSBzdWJwaXhlbCB0bworICAgKiAgICAgIGFsbCBzdWJwaXhlbHMgZXF1YWxseS4KICAgICoKLSAgICogICBSZWdhcmRpbmcgdGhlIGZvcm0sIGEgZmlsdGVyIGNhbiBiZSBhIGBib3h5JyBmaWx0ZXIgb3IgYSBgYmV2ZWxlZCcKLSAgICogICBmaWx0ZXIuICBCb3h5IGZpbHRlcnMgYXJlIHNoYXJwZXIgYnV0IGFyZSBsZXNzIGZvcmdpdmluZyBvZiBub24taWRlYWwKLSAgICogICBnYW1tYSBjdXJ2ZXMgb2YgYSBzY3JlZW4gKHZpZXdpbmcgYW5nbGVzISksIGJldmVsZWQgZmlsdGVycyBhcmUKLSAgICogICBmdXp6aWVyIGJ1dCBtb3JlIHRvbGVyYW50LgorICAgKiAgIDMpIEl0IHNob3VsZCBiZSBub3JtYWxpemVkLCBtZWFuaW5nIDJhfisgMmJ+KyBjfj1+MS4wIHRvIG1haW50YWluCisgICAqICAgICAgb3ZlcmFsbCBicmlnaHRuZXNzLgogICAgKgotICAgKiAgIEV4YW1wbGVzOgorICAgKiAgIEJveHkgMy10YXAgZmlsdGVyIHswLCAxLzMsIDEvMywgMS8zLCAwfSBpcyBzaGFycGVyIGJ1dCBpcyBsZXNzCisgICAqICAgZm9yZ2l2aW5nIG9mIG5vbi1pZGVhbCBnYW1tYSBjdXJ2ZXMgb2YgYSBzY3JlZW4gKGFuZCB2aWV3aW5nIGFuZ2xlcyksCisgICAqICAgYmV2ZWxlZCBmaWx0ZXJzIGFyZSBmdXp6aWVyIGJ1dCBtb3JlIHRvbGVyYW50LgogICAgKgotICAgKiAgIC0gWzB4MTAgMHg0MCAweDcwIDB4NDAgMHgxMF0gaXMgYmV2ZWxlZCBhbmQgbmVpdGhlciBiYWxhbmNlZCBub3IKLSAgICogICAgIG5vcm1hbGl6ZWQuCisgICAqICAgVXNlIHRoZSBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgb3IgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0cworICAgKiAgIEFQSSB0byBzcGVjaWZ5IGEgbG93LXBhc3MgZmlsdGVyLCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8KKyAgICogICBzdWJwaXhlbC1yZW5kZXJlZCBiaXRtYXBzIGdlbmVyYXRlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGguCiAgICAqCi0gICAqICAgLSBbMHgxQSAweDMzIDB4NEQgMHgzMyAweDFBXSBpcyBiZXZlbGVkIGFuZCBiYWxhbmNlZCBidXQgbm90Ci0gICAqICAgICBub3JtYWxpemVkLgorICAgKiAgIEhhcm1vbnkgTENEIHJlbmRlcmluZyBpcyBzdWl0YWJsZSB0byBwYW5lbHMgd2l0aCBhbnkgcmVndWxhciBzdWJwaXhlbAorICAgKiAgIHN0cnVjdHVyZSwgbm90IGp1c3QgbW9uaXRvcnMgd2l0aCAzIGNvbG9yIHN0cmlwZWQgc3VicGl4ZWxzLCBhcyBsb25nIGFzCisgICAqICAgdGhlIGNvbG9yIHN1YnBpeGVscyBoYXZlIGZpeGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgcGl4ZWwgY2VudGVyLgorICAgKiAgIEluIHRoaXMgY2FzZSwgZWFjaCBjb2xvciBjaGFubmVsIGlzIHRoZW4gcmVuZGVyZWQgc2VwYXJhdGVseSBhZnRlcgorICAgKiAgIHNoaWZ0aW5nIHRoZSBvdXRsaW5lIG9wcG9zaXRlIHRvIHRoZSBzdWJwaXhlbCBzaGlmdCBzbyB0aGF0IHRoZQorICAgKiAgIGNvdmVyYWdlIG1hcHMgYXJlIGFsaWduZWQuICBUaGlzIG1ldGhvZCBpcyBpbW11bmUgdG8gY29sb3IgZnJpbmdlcworICAgKiAgIGJlY2F1c2UgdGhlIHNoaWZ0cyBkbyBub3QgY2hhbmdlIGludGVncmFsIGNvdmVyYWdlLgogICAgKgotICAgKiAgIC0gWzB4MTkgMHgzMyAweDY2IDB4NGMgMHgxOV0gaXMgYmV2ZWxlZCBhbmQgbm9ybWFsaXplZCBidXQgbm90Ci0gICAqICAgICBiYWxhbmNlZC4KKyAgICogICBUaGUgc3VicGl4ZWwgZ2VvbWV0cnkgbXVzdCBiZSBzcGVjaWZpZWQgYnkgeHktY29vcmRpbmF0ZXMgZm9yIGVhY2gKKyAgICogICBzdWJwaXhlbC4gQnkgY29udmVudGlvbiB0aGV5IG1heSBjb21lIGluIHRoZSBSR0Igb3JkZXI6CisgICAqICAge3stMS8zLCAwfSwgezAsIDB9LCB7MS8zLCAwfX0gZm9yIHN0YW5kYXJkIFJHQiBzdHJpcGVkIHBhbmVsIG9yCisgICAqICAge3stMS82LCAxLzR9LCB7LTEvNiwgLTEvNH0sIHsxLzMsIDB9fSBmb3IgYSBjZXJ0YWluIFBlblRpbGUgcGFuZWwuCiAgICAqCi0gICAqICAgLSBbMHgwMCAweDRjIDB4NjYgMHg0YyAweDAwXSBpcyBib3hpbHkgYmV2ZWxlZCBhbmQgbm9ybWFsaXplZCBidXQgbm90Ci0gICAqICAgICBiYWxhbmNlZC4KKyAgICogICBVc2UgdGhlIEBGVF9MaWJyYXJ5X1NldExjZEdlb21ldHJ5IEFQSSB0byBzcGVjaWZ5IHN1YnBpeGVsIHBvc2l0aW9ucy4KKyAgICogICBJZiBvbmUgZm9sbG93cyB0aGUgUkdCIG9yZGVyIGNvbnZlbnRpb24sIHRoZSBzYW1lIG9yZGVyIGFwcGxpZXMKKyAgICogICB0byB0aGUgcmVzdWx0aW5nIEBGVF9QSVhFTF9NT0RFX0xDRCBhbmQgQEZUX1BJWEVMX01PREVfTENEX1YgYml0bWFwcy4KKyAgICogICBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBjb29yZGluYXRlIGZyYW1lIGZvciB0aGUgbGF0dGVyIG11c3QgYmUgcm90YXRlZAorICAgKiAgIGNsb2Nrd2lzZS4gIEhhcm1vbnkgd2l0aCBkZWZhdWx0IExDRCBnZW9tZXRyeSBpcyBlcXVpdmFsZW50IHRvCisgICAqICAgQ2xlYXJUeXBlIHdpdGggbGlnaHQgZmlsdGVyLgogICAgKgotICAgKiAgIC0gWzB4MDAgMHg1NSAweDU2IDB4NTUgMHgwMF0gaXMgYm94eSwgbm9ybWFsaXplZCwgYW5kIGFsbW9zdAotICAgKiAgICAgYmFsYW5jZWQuCi0gICAqCi0gICAqICAgLSBbMHgwOCAweDREIDB4NTYgMHg0RCAweDA4XSBpcyBiZXZlbGVkLCBub3JtYWxpemVkIGFuZCwgYWxtb3N0Ci0gICAqICAgICBiYWxhbmNlZC4KLSAgICoKLSAgICogICBUaGUgZmlsdGVyIGFmZmVjdHMgZ2x5cGggYml0bWFwcyByZW5kZXJlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGgsCi0gICAqICAgQEZUX0xvYWRfR2x5cGgsIGFuZCBARlRfTG9hZF9DaGFyLiAgSXQgZG9lcyBfbm90XyBhZmZlY3QgdGhlIG91dHB1dAotICAgKiAgIG9mIEBGVF9PdXRsaW5lX1JlbmRlciBhbmQgQEZUX091dGxpbmVfR2V0X0JpdG1hcC4KLSAgICoKLSAgICogICBJZiB0aGlzIGZlYXR1cmUgaXMgYWN0aXZhdGVkLCB0aGUgZGltZW5zaW9ucyBvZiBMQ0QgZ2x5cGggYml0bWFwcyBhcmUKLSAgICogICBlaXRoZXIgd2lkZXIgb3IgdGFsbGVyIHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICogICBvdXRsaW5lIHdpdGggcmVnYXJkIHRvIHRoZSBwaXhlbCBncmlkLiAgRm9yIGV4YW1wbGUsIGZvcgotICAgKiAgIEBGVF9SRU5ERVJfTU9ERV9MQ0QsIHRoZSBmaWx0ZXIgYWRkcyAzfnN1YnBpeGVscyB0byB0aGUgbGVmdCwgYW5kCi0gICAqICAgM35zdWJwaXhlbHMgdG8gdGhlIHJpZ2h0LiAgVGhlIGJpdG1hcCBvZmZzZXQgdmFsdWVzIGFyZSBhZGp1c3RlZAorICAgKiAgIEFzIGEgcmVzdWx0IG9mIENsZWFyVHlwZSBmaWx0ZXJpbmcgb3IgSGFybW9ueSByZW5kZXJpbmcsIHRoZSBkaW1lbnNpb25zCisgICAqICAgb2YgTENEIGJpdG1hcHMgY2FuIGJlIGVpdGhlciB3aWRlciBvciB0YWxsZXIgdGhhbiB0aGUgZGltZW5zaW9ucyBvZgorICAgKiAgIHRoZSBjb3JyZXNwb25kaW5nIG91dGxpbmUgd2l0aCByZWdhcmQgdG8gdGhlIHBpeGVsIGdyaWQuICBGb3IgZXhhbXBsZSwKKyAgICogICBmb3IgQEZUX1JFTkRFUl9NT0RFX0xDRCwgdGhlIGZpbHRlciBhZGRzIDJ+c3VicGl4ZWxzIHRvIHRoZSBsZWZ0LCBhbmQKKyAgICogICAyfnN1YnBpeGVscyB0byB0aGUgcmlnaHQuICBUaGUgYml0bWFwIG9mZnNldCB2YWx1ZXMgYXJlIGFkanVzdGVkCiAgICAqICAgYWNjb3JkaW5nbHksIHNvIGNsaWVudHMgc2hvdWxkbid0IG5lZWQgdG8gbW9kaWZ5IHRoZWlyIGxheW91dCBhbmQKICAgICogICBnbHlwaCBwb3NpdGlvbmluZyBjb2RlIHdoZW4gZW5hYmxpbmcgdGhlIGZpbHRlci4KICAgICoKLSAgICogICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IGxpbmVhciBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEKLSAgICogICBjb3JyZWN0aW9uIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bHkgcmVuZGVyaW5nIGdseXBocyBvbnRvIHN1cmZhY2VzCi0gICAqICAgd2l0aG91dCBhcnRpZmFjdHMgYW5kIGV2ZW4gbW9yZSBjcml0aWNhbCB3aGVuIHN1YnBpeGVsIHJlbmRlcmluZyBpcwotICAgKiAgIGludm9sdmVkLgorICAgKiAgIFRoZSBDbGVhclR5cGUgYW5kIEhhcm1vbnkgcmVuZGVyaW5nIGlzIGFwcGxpY2FibGUgdG8gZ2x5cGggYml0bWFwcworICAgKiAgIHJlbmRlcmVkIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaCwgQEZUX0xvYWRfR2x5cGgsIEBGVF9Mb2FkX0NoYXIsIGFuZAorICAgKiAgIEBGVF9HbHlwaF9Ub19CaXRtYXAsIHdoZW4gQEZUX1JFTkRFUl9NT0RFX0xDRCBvciBARlRfUkVOREVSX01PREVfTENEX1YKKyAgICogICBpcyBzcGVjaWZpZWQuICBUaGlzIEFQSSBkb2VzIG5vdCBjb250cm9sIEBGVF9PdXRsaW5lX1JlbmRlciBhbmQKKyAgICogICBARlRfT3V0bGluZV9HZXRfQml0bWFwLgogICAgKgotICAgKiAgIEVhY2ggb2YgdGhlIDN+YWxwaGEgdmFsdWVzIChzdWJwaXhlbHMpIGlzIGluZGVwZW5kZW50bHkgdXNlZCB0byBibGVuZAotICAgKiAgIG9uZSBjb2xvciBjaGFubmVsLiAgVGhhdCBpcywgcmVkIGFscGhhIGJsZW5kcyB0aGUgcmVkIGNoYW5uZWwgb2YgdGhlCi0gICAqICAgdGV4dCBjb2xvciB3aXRoIHRoZSByZWQgY2hhbm5lbCBvZiB0aGUgYmFja2dyb3VuZCBwaXhlbC4gIFRoZQotICAgKiAgIGRpc3RyaWJ1dGlvbiBvZiBkZW5zaXR5IHZhbHVlcyBieSB0aGUgY29sb3ItYmFsYW5jZWQgZmlsdGVyIGFzc3VtZXMKLSAgICogICBhbHBoYSBibGVuZGluZyBpcyBkb25lIGluIGxpbmVhciBzcGFjZTsgb25seSB0aGVuIGNvbG9yIGFydGlmYWN0cwotICAgKiAgIGNhbmNlbCBvdXQuCisgICAqICAgVGhlIGRlc2NyaWJlZCBhbGdvcml0aG1zIGNhbiBjb21wbGV0ZWx5IHJlbW92ZSBjb2xvciBhcnRlZmFjdHMgd2hlbgorICAgKiAgIGNvbWJpbmVkIHdpdGggZ2FtbWEtY29ycmVjdGVkIGFscGhhIGJsZW5kaW5nIGluIGxpbmVhciBzcGFjZS4KKyAgICogICBFYWNoIG9mIHRoZSAzfmFscGhhIHZhbHVlcyAoc3VicGl4ZWxzKSBtdXN0IGJ5IGluZGVwZW5kZW50bHkgdXNlZCB0bworICAgKiAgIGJsZW5kIG9uZSBjb2xvciBjaGFubmVsLiAgVGhhdCBpcywgcmVkIGFscGhhIGJsZW5kcyB0aGUgcmVkIGNoYW5uZWwgb2YKKyAgICogICB0aGUgdGV4dCBjb2xvciB3aXRoIHRoZSByZWQgY2hhbm5lbCBvZiB0aGUgYmFja2dyb3VuZCBwaXhlbC4KICAgICovCiAKIApAQCAtMTQ1LDQ0ICsxMzcsMjMgQEAKICAgICogICAgIHJlc3VsdHMgaW4gc29tZXRpbWVzIHNldmVyZSBjb2xvciBmcmluZ2VzLgogICAgKgogICAgKiAgIEZUX0xDRF9GSUxURVJfREVGQVVMVCA6OgotICAgKiAgICAgVGhlIGRlZmF1bHQgZmlsdGVyIHJlZHVjZXMgY29sb3IgZnJpbmdlcyBjb25zaWRlcmFibHksIGF0IHRoZSBjb3N0Ci0gICAqICAgICBvZiBhIHNsaWdodCBibHVycmluZXNzIGluIHRoZSBvdXRwdXQuCi0gICAqCi0gICAqICAgICBJdCBpcyBhIGJldmVsZWQsIG5vcm1hbGl6ZWQsIGFuZCBjb2xvci1iYWxhbmNlZCBmaXZlLXRhcCBmaWx0ZXIKLSAgICogICAgIHRoYXQgaXMgbW9yZSBmb3JnaXZpbmcgdG8gc2NyZWVucyB3aXRoIG5vbi1pZGVhbCBnYW1tYSBjdXJ2ZXMgYW5kCi0gICAqICAgICB2aWV3aW5nIGFuZ2xlcy4gIE5vdGUgdGhhdCB3aGlsZSBjb2xvci1mcmluZ2luZyBpcyByZWR1Y2VkLCBpdCBjYW4KLSAgICogICAgIG9ubHkgYmUgbWluaW1pemVkIGJ5IHVzaW5nIGxpbmVhciBhbHBoYSBibGVuZGluZyBhbmQgZ2FtbWEKLSAgICogICAgIGNvcnJlY3Rpb24gdG8gcmVuZGVyIGdseXBocyBvbnRvIHN1cmZhY2VzLiAgVGhlIGRlZmF1bHQgZmlsdGVyCi0gICAqICAgICB3ZWlnaHRzIGFyZSBbMHgwOCAweDREIDB4NTYgMHg0RCAweDA4XS4KKyAgICogICAgIFRoaXMgaXMgYSBiZXZlbGVkLCBub3JtYWxpemVkLCBhbmQgY29sb3ItYmFsYW5jZWQgZml2ZS10YXAgZmlsdGVyCisgICAqICAgICB3aXRoIHdlaWdodHMgb2YgWzB4MDggMHg0RCAweDU2IDB4NEQgMHgwOF0gaW4gMS8yNTZ0aCB1bml0cy4KICAgICoKICAgICogICBGVF9MQ0RfRklMVEVSX0xJR0hUIDo6Ci0gICAqICAgICBUaGUgbGlnaHQgZmlsdGVyIGlzIGEgdmFyaWFudCB0aGF0IGlzIHNoYXJwZXIgYXQgdGhlIGNvc3Qgb2YKLSAgICogICAgIHNsaWdodGx5IG1vcmUgY29sb3IgZnJpbmdlcyB0aGFuIHRoZSBkZWZhdWx0IG9uZS4KLSAgICoKLSAgICogICAgIEl0IGlzIGEgYm94eSwgbm9ybWFsaXplZCwgYW5kIGNvbG9yLWJhbGFuY2VkIHRocmVlLXRhcCBmaWx0ZXIgdGhhdAotICAgKiAgICAgaXMgbGVzcyBmb3JnaXZpbmcgdG8gc2NyZWVucyB3aXRoIG5vbi1pZGVhbCBnYW1tYSBjdXJ2ZXMgYW5kCi0gICAqICAgICB2aWV3aW5nIGFuZ2xlcy4gIFRoaXMgZmlsdGVyIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbQotICAgKiAgICAgdXNlcyBsaW5lYXIgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hIGNvcnJlY3Rpb24gdG8gcmVuZGVyIGdseXBocwotICAgKiAgICAgb250byBzdXJmYWNlcy4gIFRoZSBsaWdodCBmaWx0ZXIgd2VpZ2h0cyBhcmUKLSAgICogICAgIFsweDAwIDB4NTUgMHg1NiAweDU1IDB4MDBdLgorICAgKiAgICAgdGhpcyBpcyBhIGJveHksIG5vcm1hbGl6ZWQsIGFuZCBjb2xvci1iYWxhbmNlZCB0aHJlZS10YXAgZmlsdGVyCisgICAqICAgICB3aXRoIHdlaWdodHMgb2YgWzB4MDAgMHg1NSAweDU2IDB4NTUgMHgwMF0gaW4gMS8yNTZ0aCB1bml0cy4KICAgICoKICAgICogICBGVF9MQ0RfRklMVEVSX0xFR0FDWSA6OgorICAgKiAgIEZUX0xDRF9GSUxURVJfTEVHQUNZMSA6OgogICAgKiAgICAgVGhpcyBmaWx0ZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9yaWdpbmFsIGxpYlhmdCBjb2xvciBmaWx0ZXIuICBJdAogICAgKiAgICAgcHJvdmlkZXMgaGlnaCBjb250cmFzdCBvdXRwdXQgYnV0IGNhbiBleGhpYml0IHJlYWxseSBiYWQgY29sb3IKICAgICogICAgIGZyaW5nZXMgaWYgZ2x5cGhzIGFyZSBub3QgZXh0cmVtZWx5IHdlbGwgaGludGVkIHRvIHRoZSBwaXhlbCBncmlkLgotICAgKiAgICAgSW4gb3RoZXIgd29yZHMsIGl0IG9ubHkgd29ya3Mgd2VsbCBpZiB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUKLSAgICogICAgIGludGVycHJldGVyIGlzIGVuYWJsZWQgKmFuZCogaGlnaC1xdWFsaXR5IGhpbnRlZCBmb250cyBhcmUgdXNlZC4KLSAgICoKICAgICogICAgIFRoaXMgZmlsdGVyIGlzIG9ubHkgcHJvdmlkZWQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMsIGFuZCBtaWdodCBiZQotICAgKiAgICAgZGlzYWJsZWQgb3Igc3RheSB1bnN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgotICAgKgotICAgKiAgIEZUX0xDRF9GSUxURVJfTEVHQUNZMSA6OgotICAgKiAgICAgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIEZvbnRDb25maWcgbGlicmFyeSByZXR1cm5zIGEgZGlmZmVyZW50Ci0gICAqICAgICBlbnVtZXJhdGlvbiB2YWx1ZSBmb3IgbGVnYWN5IExDRCBmaWx0ZXJpbmcuICBUbyBtYWtlIGNvZGUgd29yayB0aGF0Ci0gICAqICAgICAoaW5jb3JyZWN0bHkpIGZvcndhcmRzIEZvbnRDb25maWcncyBlbnVtZXJhdGlvbiB2YWx1ZSB0bwotICAgKiAgICAgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIHdpdGhvdXQgcHJvcGVyIG1hcHBpbmcsIGl0IGlzIHRodXMgZWFzaWVzdAotICAgKiAgICAgdG8gaGF2ZSBhbm90aGVyIGVudW1lcmF0aW9uIHZhbHVlLCB3aGljaCBpcyBjb21wbGV0ZWx5IGVxdWFsIHRvCi0gICAqICAgICBgRlRfTENEX0ZJTFRFUl9MRUdBQ1knLgorICAgKiAgICAgZGlzYWJsZWQgb3Igc3RheSB1bnN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLiBUaGUgc2Vjb25kIHZhbHVlIGlzCisgICAqICAgICBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEZvbnRDb25maWcsIHdoaWNoIGhpc3RvcmljYWxseQorICAgKiAgICAgdXNlZCBkaWZmZXJlbnQgZW51bWVyYXRpb24sIHNvbWV0aW1lcyBpbmNvcnJlY3RseSBmb3J3YXJkZWQgdG8KKyAgICogICAgIEZyZWVUeXBlLgogICAgKgogICAgKiBAc2luY2U6CiAgICAqICAgMi4zLjAgKGBGVF9MQ0RfRklMVEVSX0xFR0FDWTEnIHNpbmNlIDIuNi4yKQpAQCAtMjAyLDcgKzE3Myw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCi0gICAqIEBmdW5jOgorICAgKiBAZnVuY3Rpb246CiAgICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgpAQCAtMjQ1LDcgKzIxNiw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCi0gICAqIEBmdW5jOgorICAgKiBAZnVuY3Rpb246CiAgICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTI1OCw3ICsyMjksNyBAQAogICAgKgogICAgKiAgIHdlaWdodHMgOjoKICAgICogICAgIEEgcG9pbnRlciB0byBhbiBhcnJheTsgdGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUgZmlyc3QgZml2ZSBieXRlcyBhbmQKLSAgICogICAgIHVzZXMgdGhlbSB0byBzcGVjaWZ5IHRoZSBmaWx0ZXIgd2VpZ2h0cy4KKyAgICogICAgIHVzZXMgdGhlbSB0byBzcGVjaWZ5IHRoZSBmaWx0ZXIgd2VpZ2h0cyBpbiAxLzI1NnRoIHVuaXRzLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0yODEsNyArMjUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICAqd2VpZ2h0cyApOwogCiAKLSAgLyoKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCiAgICAqIEB0eXBlOgogICAgKiAgIEZUX0xjZEZpdmVUYXBGaWx0ZXIKICAgICoKQEAgLTI5OCw2ICsyNzAsNTMgQEAKICAgdHlwZWRlZiBGVF9CeXRlICBGVF9MY2RGaXZlVGFwRmlsdGVyW0ZUX0xDRF9GSUxURVJfRklWRV9UQVBTXTsKIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTGlicmFyeV9TZXRMY2RHZW9tZXRyeQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBtb2RpZnkgZGVmYXVsdCBwb3NpdGlvbnMgb2YgY29sb3IKKyAgICogICBzdWJwaXhlbHMsIHdoaWNoIGNvbnRyb2xzIEhhcm1vbnkgTENEIHJlbmRlcmluZy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICBzdWIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiAzIHZlY3RvcnMgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVsIGZvcm1hdDsKKyAgICogICAgIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgZGVmYXVsdCB2YWx1ZXMsIHNlZSB0aGUgbm90ZSBiZWxvdy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBTdWJwaXhlbCBnZW9tZXRyeSBleGFtcGxlczoKKyAgICoKKyAgICogICAtIHt7LTIxLCAwfSwgezAsIDB9LCB7MjEsIDB9fSBpcyB0aGUgZGVmYXVsdCwgY29ycmVzcG9uZGluZyB0byAzIGNvbG9yCisgICAqICAgc3RyaXBlcyBzaGlmdGVkIGJ5IGEgdGhpcmQgb2YgYSBwaXhlbC4gVGhpcyBjb3VsZCBiZSBhbiBSR0IgcGFuZWwuCisgICAqCisgICAqICAgLSB7ezIxLCAwfSwgezAsIDB9LCB7LTIxLCAwfX0gbG9va3MgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgYnV0CisgICAqICAgY2FuIHNwZWNpZnkgYSBCR1IgcGFuZWwgaW5zdGVhZCwgd2hpbGUga2VlcGluZyB0aGUgYml0bWFwIGluIHRoZSBzYW1lCisgICAqICAgUkdCODg4IGZvcm1hdC4KKyAgICoKKyAgICogICAtIHt7MCwgMjF9LCB7MCwgMH0sIHswLCAtMjF9fSBpcyB0aGUgdmVydGljYWwgUkdCLCBidXQgdGhlIGJpdG1hcAorICAgKiAgIHN0YXlzIFJHQjg4OCBhcyBhIHJlc3VsdC4KKyAgICoKKyAgICogICAtIHt7LTExLCAxNn0sIHstMTEsIC0xNn0sIHsyMiwgMH19IGlzIGEgY2VydGFpbiBQZW5UaWxlIGFycmFuZ2VtZW50LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGFuZCByZXR1cm5zIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJworICAgKiAgIGluIHRoZSBjb250ZXh0IG9mIENsZWFyVHlwZS1zdHlsZSBzdWJwaXhlbCByZW5kZXJpbmcgd2hlbgorICAgKiAgIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HIGlzIGRlZmluZWQgaW4geW91ciBidWlsZCBvZiB0aGUKKyAgICogICBsaWJyYXJ5LgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi4xMC4wCisgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTGlicmFyeV9TZXRMY2RHZW9tZXRyeSggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yICAgc3ViWzNdICk7CisKICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaAppbmRleCAxMTc0NzNiLi5jZGVhODk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKQEAgLTEsMjcgKzEsMjcgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bGlzdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBHZW5lcmljIGxpc3Qgc3VwcG9ydCBmb3IgRnJlZVR5cGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bGlzdC5oCisgKgorICogICBHZW5lcmljIGxpc3Qgc3VwcG9ydCBmb3IgRnJlZVR5cGUgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyByZWxhdGl2ZSB0byBsaXN0IHByb2Nlc3NpbmcuICBJdHMgICAgICovCi0gIC8qICBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgaW4gYGZyZWV0eXBlLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBmdW5jdGlvbnMgcmVsYXRpdmUgdG8gbGlzdCBwcm9jZXNzaW5nLiAgSXRzCisgICAqIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBpbiBgZnJlZXR5cGUuaCcuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgRlRMSVNUX0hfCkBAIC00MSwyMjQgKzQxLDI0NiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaXN0X3Byb2Nlc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMaXN0IFByb2Nlc3NpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTaW1wbGUgbWFuYWdlbWVudCBvZiBsaXN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGxpc3QgICAgICAgICAgKi8KLSAgLyogICAgcHJvY2Vzc2luZyB1c2luZyBkb3VibHktbGlua2VkIG5vZGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3ROb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdE5vZGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0FkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdF9JbnNlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfRmluZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X1JlbW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdF9VcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfSXRlcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdF9GaW5hbGl6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfRGVzdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBsaXN0X3Byb2Nlc3NpbmcKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIExpc3QgUHJvY2Vzc2luZworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgU2ltcGxlIG1hbmFnZW1lbnQgb2YgbGlzdHMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGxpc3QKKyAgICogICBwcm9jZXNzaW5nIHVzaW5nIGRvdWJseS1saW5rZWQgbm9kZXMuCisgICAqCisgICAqIEBvcmRlcjoKKyAgICogICBGVF9MaXN0CisgICAqICAgRlRfTGlzdE5vZGUKKyAgICogICBGVF9MaXN0UmVjCisgICAqICAgRlRfTGlzdE5vZGVSZWMKKyAgICoKKyAgICogICBGVF9MaXN0X0FkZAorICAgKiAgIEZUX0xpc3RfSW5zZXJ0CisgICAqICAgRlRfTGlzdF9GaW5kCisgICAqICAgRlRfTGlzdF9SZW1vdmUKKyAgICogICBGVF9MaXN0X1VwCisgICAqICAgRlRfTGlzdF9JdGVyYXRlCisgICAqICAgRlRfTGlzdF9JdGVyYXRvcgorICAgKiAgIEZUX0xpc3RfRmluYWxpemUKKyAgICogICBGVF9MaXN0X0Rlc3RydWN0b3IKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0ZpbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaW5kIHRoZSBsaXN0IG5vZGUgZm9yIGEgZ2l2ZW4gbGlzdGVkIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaXN0IDo6IEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGF0YSA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgbGlzdGVkIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTGlzdCBub2RlLiAgTlVMTCBpZiBpdCB3YXNuJ3QgZm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0xpc3RfRmluZAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRmluZCB0aGUgbGlzdCBub2RlIGZvciBhIGdpdmVuIGxpc3RlZCBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaXN0IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBsaXN0LgorICAgKiAgIGRhdGEgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBsaXN0ZWQgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIExpc3Qgbm9kZS4gIE5VTEwgaWYgaXQgd2Fzbid0IGZvdW5kLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9MaXN0Tm9kZSApCiAgIEZUX0xpc3RfRmluZCggRlRfTGlzdCAgbGlzdCwKICAgICAgICAgICAgICAgICB2b2lkKiAgICBkYXRhICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0FkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBcHBlbmQgYW4gZWxlbWVudCB0byB0aGUgZW5kIG9mIGEgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaXN0IDo6IEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbm9kZSA6OiBUaGUgbm9kZSB0byBhcHBlbmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0xpc3RfQWRkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBcHBlbmQgYW4gZWxlbWVudCB0byB0aGUgZW5kIG9mIGEgbGlzdC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGxpc3QgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuCisgICAqICAgbm9kZSA6OgorICAgKiAgICAgVGhlIG5vZGUgdG8gYXBwZW5kLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfTGlzdF9BZGQoIEZUX0xpc3QgICAgICBsaXN0LAogICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfSW5zZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluc2VydCBhbiBlbGVtZW50IGF0IHRoZSBoZWFkIG9mIGEgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpc3QgOjogQSBwb2ludGVyIHRvIHBhcmVudCBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBub2RlIDo6IFRoZSBub2RlIHRvIGluc2VydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTGlzdF9JbnNlcnQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEluc2VydCBhbiBlbGVtZW50IGF0IHRoZSBoZWFkIG9mIGEgbGlzdC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGxpc3QgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBwYXJlbnQgbGlzdC4KKyAgICogICBub2RlIDo6CisgICAqICAgICBUaGUgbm9kZSB0byBpbnNlcnQuCisgICAqLwogICBGVF9FWFBPUlQoIHZvaWQgKQogICBGVF9MaXN0X0luc2VydCggRlRfTGlzdCAgICAgIGxpc3QsCiAgICAgICAgICAgICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdF9SZW1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVtb3ZlIGEgbm9kZSBmcm9tIGEgbGlzdC4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayB3aGV0aGVyICAgICovCi0gIC8qICAgIHRoZSBub2RlIGlzIGluIHRoZSBsaXN0ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5vZGUgOjogVGhlIG5vZGUgdG8gcmVtb3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpc3QgOjogQSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9MaXN0X1JlbW92ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmVtb3ZlIGEgbm9kZSBmcm9tIGEgbGlzdC4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGVjayB3aGV0aGVyCisgICAqICAgdGhlIG5vZGUgaXMgaW4gdGhlIGxpc3QhCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBub2RlIDo6CisgICAqICAgICBUaGUgbm9kZSB0byByZW1vdmUuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaXN0IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBsaXN0LgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfTGlzdF9SZW1vdmUoIEZUX0xpc3QgICAgICBsaXN0LAogICAgICAgICAgICAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfVXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1vdmUgYSBub2RlIHRvIHRoZSBoZWFkL3RvcCBvZiBhIGxpc3QuICBVc2VkIHRvIG1haW50YWluIExSVSAgICAgICAqLwotICAvKiAgICBsaXN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaXN0IDo6IEEgcG9pbnRlciB0byB0aGUgcGFyZW50IGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbm9kZSA6OiBUaGUgbm9kZSB0byBtb3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0xpc3RfVXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIE1vdmUgYSBub2RlIHRvIHRoZSBoZWFkL3RvcCBvZiBhIGxpc3QuICBVc2VkIHRvIG1haW50YWluIExSVQorICAgKiAgIGxpc3RzLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgbGlzdCA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbGlzdC4KKyAgICogICBub2RlIDo6CisgICAqICAgICBUaGUgbm9kZSB0byBtb3ZlLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfTGlzdF9VcCggRlRfTGlzdCAgICAgIGxpc3QsCiAgICAgICAgICAgICAgIEZUX0xpc3ROb2RlICBub2RlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBGVF9MaXN0IGl0ZXJhdG9yIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBhIGxpc3QgcGFyc2UgICAgKi8KLSAgLyogICAgYnkgQEZUX0xpc3RfSXRlcmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbm9kZSA6OiBUaGUgY3VycmVudCBpdGVyYXRpb24gbGlzdCBub2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB1c2VyIDo6IEEgdHlwZWxlc3MgcG9pbnRlciBwYXNzZWQgdG8gQEZUX0xpc3RfSXRlcmF0ZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIEZUX0xpc3RfSXRlcmF0b3IKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIEZUX0xpc3QgaXRlcmF0b3IgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZHVyaW5nIGEgbGlzdCBwYXJzZQorICAgKiAgIGJ5IEBGVF9MaXN0X0l0ZXJhdGUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBub2RlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBpdGVyYXRpb24gbGlzdCBub2RlLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgdHlwZWxlc3MgcG9pbnRlciBwYXNzZWQgdG8gQEZUX0xpc3RfSXRlcmF0ZS4KKyAgICogICAgIENhbiBiZSB1c2VkIHRvIHBvaW50IHRvIHRoZSBpdGVyYXRpb24ncyBzdGF0ZS4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpGVF9MaXN0X0l0ZXJhdG9yKSggRlRfTGlzdE5vZGUgIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICB1c2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0l0ZXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQYXJzZSBhIGxpc3QgYW5kIGNhbGxzIGEgZ2l2ZW4gaXRlcmF0b3IgZnVuY3Rpb24gb24gZWFjaCBlbGVtZW50LiAgKi8KLSAgLyogICAgTm90ZSB0aGF0IHBhcnNpbmcgaXMgc3RvcHBlZCBhcyBzb29uIGFzIG9uZSBvZiB0aGUgaXRlcmF0b3IgY2FsbHMgICovCi0gIC8qICAgIHJldHVybnMgYSBub24temVybyB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpc3QgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpdGVyYXRvciA6OiBBbiBpdGVyYXRvciBmdW5jdGlvbiwgY2FsbGVkIG9uIGVhY2ggbm9kZSBvZiB0aGUgbGlzdC4gKi8KLSAgLyogICAgdXNlciAgICAgOjogQSB1c2VyLXN1cHBsaWVkIGZpZWxkIHRoYXQgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIGFyZ3VtZW50IHRvIHRoZSBpdGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXN1bHQgKGEgRnJlZVR5cGUgZXJyb3IgY29kZSkgb2YgdGhlIGxhc3QgaXRlcmF0b3IgY2FsbC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9MaXN0X0l0ZXJhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFBhcnNlIGEgbGlzdCBhbmQgY2FsbHMgYSBnaXZlbiBpdGVyYXRvciBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQuCisgICAqICAgTm90ZSB0aGF0IHBhcnNpbmcgaXMgc3RvcHBlZCBhcyBzb29uIGFzIG9uZSBvZiB0aGUgaXRlcmF0b3IgY2FsbHMKKyAgICogICByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaXN0IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlzdC4KKyAgICogICBpdGVyYXRvciA6OgorICAgKiAgICAgQW4gaXRlcmF0b3IgZnVuY3Rpb24sIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIGxpc3QuCisgICAqICAgdXNlciA6OgorICAgKiAgICAgQSB1c2VyLXN1cHBsaWVkIGZpZWxkIHRoYXQgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQKKyAgICogICAgIGFyZ3VtZW50IHRvIHRoZSBpdGVyYXRvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgcmVzdWx0IChhIEZyZWVUeXBlIGVycm9yIGNvZGUpIG9mIHRoZSBsYXN0IGl0ZXJhdG9yIGNhbGwuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTGlzdF9JdGVyYXRlKCBGVF9MaXN0ICAgICAgICAgICBsaXN0LAogICAgICAgICAgICAgICAgICAgIEZUX0xpc3RfSXRlcmF0b3IgIGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgIHVzZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3RfRGVzdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIEBGVF9MaXN0IGl0ZXJhdG9yIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBhIGxpc3QgICAgICAgICAqLwotICAvKiAgICBmaW5hbGl6YXRpb24gYnkgQEZUX0xpc3RfRmluYWxpemUgdG8gZGVzdHJveSBhbGwgZWxlbWVudHMgaW4gYSAgICAgKi8KLSAgLyogICAgZ2l2ZW4gbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3lzdGVtIDo6IFRoZSBjdXJyZW50IHN5c3RlbSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkYXRhICAgOjogVGhlIGN1cnJlbnQgb2JqZWN0IHRvIGRlc3Ryb3kuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVzZXIgICA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgcGFzc2VkIHRvIEBGVF9MaXN0X0l0ZXJhdGUuICBJdCBjYW4gICAqLwotICAvKiAgICAgICAgICAgICAgYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfTGlzdF9EZXN0cnVjdG9yCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBARlRfTGlzdCBpdGVyYXRvciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBkdXJpbmcgYSBsaXN0CisgICAqICAgZmluYWxpemF0aW9uIGJ5IEBGVF9MaXN0X0ZpbmFsaXplIHRvIGRlc3Ryb3kgYWxsIGVsZW1lbnRzIGluIGEKKyAgICogICBnaXZlbiBsaXN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3lzdGVtIDo6CisgICAqICAgICBUaGUgY3VycmVudCBzeXN0ZW0gb2JqZWN0LgorICAgKgorICAgKiAgIGRhdGEgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IG9iamVjdCB0byBkZXN0cm95LgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgdHlwZWxlc3MgcG9pbnRlciBwYXNzZWQgdG8gQEZUX0xpc3RfSXRlcmF0ZS4gIEl0IGNhbgorICAgKiAgICAgYmUgdXNlZCB0byBwb2ludCB0byB0aGUgaXRlcmF0aW9uJ3Mgc3RhdGUuCisgICAqLwogICB0eXBlZGVmIHZvaWQKICAgKCpGVF9MaXN0X0Rlc3RydWN0b3IpKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICB1c2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0X0ZpbmFsaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXN0cm95IGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcyB3ZWxsIGFzIHRoZSBsaXN0IGl0c2VsZi4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaXN0ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlc3Ryb3kgOjogQSBsaXN0IGRlc3RydWN0b3IgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBlbGVtZW50ICAqLwotICAvKiAgICAgICAgICAgICAgIG9mIHRoZSBsaXN0LiAgU2V0IHRoaXMgdG8gTlVMTCBpZiBub3QgbmVlZGVkLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgOjogVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdCB0aGF0IGhhbmRsZXMgZGVhbGxvY2F0aW9uLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciAgICA6OiBBIHVzZXItc3VwcGxpZWQgZmllbGQgdGhhdCBpcyBwYXNzZWQgYXMgdGhlIGxhc3QgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgYXJndW1lbnQgdG8gdGhlIGRlc3RydWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IGFsbCBub2RlcyBhZGRlZCBieSBARlRfTGlzdF9BZGQgb3IgICAgICAqLwotICAvKiAgICBARlRfTGlzdF9JbnNlcnQgaGF2ZSBiZWVuIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTGlzdF9GaW5hbGl6ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGVzdHJveSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3QgYXMgd2VsbCBhcyB0aGUgbGlzdCBpdHNlbGYuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaXN0IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlzdC4KKyAgICoKKyAgICogICBkZXN0cm95IDo6CisgICAqICAgICBBIGxpc3QgZGVzdHJ1Y3RvciB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGVsZW1lbnQKKyAgICogICAgIG9mIHRoZSBsaXN0LiAgU2V0IHRoaXMgdG8gTlVMTCBpZiBub3QgbmVlZGVkLgorICAgKgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdCB0aGF0IGhhbmRsZXMgZGVhbGxvY2F0aW9uLgorICAgKgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgdXNlci1zdXBwbGllZCBmaWVsZCB0aGF0IGlzIHBhc3NlZCBhcyB0aGUgbGFzdAorICAgKiAgICAgYXJndW1lbnQgdG8gdGhlIGRlc3RydWN0b3IuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IGFsbCBub2RlcyBhZGRlZCBieSBARlRfTGlzdF9BZGQgb3IKKyAgICogICBARlRfTGlzdF9JbnNlcnQgaGF2ZSBiZWVuIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX0xpc3RfRmluYWxpemUoIEZUX0xpc3QgICAgICAgICAgICAgbGlzdCwKICAgICAgICAgICAgICAgICAgICAgRlRfTGlzdF9EZXN0cnVjdG9yICBkZXN0cm95LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oCmluZGV4IDE2MTU5MTIuLjAxNDMzY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bHp3LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBMWlctY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bHp3LmgKKyAqCisgKiAgIExaVy1jb21wcmVzc2VkIHN0cmVhbSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUTFpXX0hfCkBAIC0zMSw1OSArMzEsNjEgQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbHp3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTFpXIFN0cmVhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNpbmcgTFpXLWNvbXByZXNzZWQgZm9udCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBMWlctc3BlY2lmaWMgZnVuY3Rpb25zLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGx6dworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgTFpXIFN0cmVhbXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFVzaW5nIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIExaVy1zcGVjaWZpYyBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGZ1bmN0aW9uOgotICAqICAgRlRfU3RyZWFtX09wZW5MWlcKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIE9wZW4gYSBuZXcgc3RyZWFtIHRvIHBhcnNlIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCi0gICogICBtYWlubHkgdXNlZCB0byBzdXBwb3J0IHRoZSBjb21wcmVzc2VkIGAqLnBjZi5aJyBmb250cyB0aGF0IGNvbWUKLSAgKiAgIHdpdGggWEZyZWU4Ni4KLSAgKgotICAqIEBpbnB1dDoKLSAgKiAgIHN0cmVhbSA6OiBUaGUgdGFyZ2V0IGVtYmVkZGluZyBzdHJlYW0uCi0gICoKLSAgKiAgIHNvdXJjZSA6OiBUaGUgc291cmNlIHN0cmVhbS4KLSAgKgotICAqIEByZXR1cm46Ci0gICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgotICAqCi0gICogQG5vdGU6Ci0gICogICBUaGUgc291cmNlIHN0cmVhbSBtdXN0IGJlIG9wZW5lZCBfYmVmb3JlXyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gICoKLSAgKiAgIENhbGxpbmcgdGhlIGludGVybmFsIGZ1bmN0aW9uIGBGVF9TdHJlYW1fQ2xvc2UnIG9uIHRoZSBuZXcgc3RyZWFtIHdpbGwKLSAgKiAgICpub3QqIGNhbGwgYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIHNvdXJjZSBzdHJlYW0uICBOb25lIG9mIHRoZSBzdHJlYW0KLSAgKiAgIG9iamVjdHMgd2lsbCBiZSByZWxlYXNlZCB0byB0aGUgaGVhcC4KLSAgKgotICAqICAgVGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24KLSAgKiAgIHByb2Nlc3MgZWFjaCB0aW1lIHNlZWtpbmcgYmFja3dhcmRzIGlzIG5lZWRlZCB3aXRoaW4gdGhlIHN0cmVhbQotICAqCi0gICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgTFpXIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzCi0gICogICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgd2hlbiBjYWxsaW5nIEBGVF9OZXdfRmFjZSBvciBARlRfT3Blbl9GYWNlLgotICAqICAgVGhpcyBtZWFucyB0aGF0IGlmIG5vIGZvbnQgZHJpdmVyIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgdGhlIHJhdwotICAqICAgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgTFpXIHN0cmVhbSBmcm9tIGl0Ci0gICogICBhbmQgcmUtb3BlbiB0aGUgZmFjZSB3aXRoIGl0LgotICAqCi0gICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKLSAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCBMWlcgc3VwcG9ydC4KLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU3RyZWFtX09wZW5MWlcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIE9wZW4gYSBuZXcgc3RyZWFtIHRvIHBhcnNlIExaVy1jb21wcmVzc2VkIGZvbnQgZmlsZXMuICBUaGlzIGlzCisgICAqICAgbWFpbmx5IHVzZWQgdG8gc3VwcG9ydCB0aGUgY29tcHJlc3NlZCBgKi5wY2YuWicgZm9udHMgdGhhdCBjb21lCisgICAqICAgd2l0aCBYRnJlZTg2LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IGVtYmVkZGluZyBzdHJlYW0uCisgICAqCisgICAqICAgc291cmNlIDo6CisgICAqICAgICBUaGUgc291cmNlIHN0cmVhbS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgc291cmNlIHN0cmVhbSBtdXN0IGJlIG9wZW5lZCBfYmVmb3JlXyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAqCisgICAqICAgQ2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIG5ldyBzdHJlYW0gd2lsbAorICAgKiAgICpub3QqIGNhbGwgYEZUX1N0cmVhbV9DbG9zZScgb24gdGhlIHNvdXJjZSBzdHJlYW0uICBOb25lIG9mIHRoZSBzdHJlYW0KKyAgICogICBvYmplY3RzIHdpbGwgYmUgcmVsZWFzZWQgdG8gdGhlIGhlYXAuCisgICAqCisgICAqICAgVGhlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljIGFuZCByZXNldHMgdGhlIGRlY29tcHJlc3Npb24KKyAgICogICBwcm9jZXNzIGVhY2ggdGltZSBzZWVraW5nIGJhY2t3YXJkcyBpcyBuZWVkZWQgd2l0aGluIHRoZSBzdHJlYW0KKyAgICoKKyAgICogICBJbiBjZXJ0YWluIGJ1aWxkcyBvZiB0aGUgbGlicmFyeSwgTFpXIGNvbXByZXNzaW9uIHJlY29nbml0aW9uIGlzCisgICAqICAgYXV0b21hdGljYWxseSBoYW5kbGVkIHdoZW4gY2FsbGluZyBARlRfTmV3X0ZhY2Ugb3IgQEZUX09wZW5fRmFjZS4KKyAgICogICBUaGlzIG1lYW5zIHRoYXQgaWYgbm8gZm9udCBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUgcmF3CisgICAqICAgY29tcHJlc3NlZCBmaWxlLCB0aGUgbGlicmFyeSB3aWxsIHRyeSB0byBvcGVuIGEgTFpXIHN0cmVhbSBmcm9tIGl0CisgICAqICAgYW5kIHJlLW9wZW4gdGhlIGZhY2Ugd2l0aCBpdC4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKKyAgICogICBvZiBGcmVlVHlwZSB3YXMgbm90IGNvbXBpbGVkIHdpdGggTFpXIHN1cHBvcnQuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU3RyZWFtX09wZW5MWlcoIEZUX1N0cmVhbSAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzb3VyY2UgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaAppbmRleCBjMWU0OTdjLi40MjQ5ZmY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oCkBAIC0xLDI4ICsxLDI4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdG1hYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRkaXRpb25hbCBNYWMtc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG1hYy5oCisgKgorICogICBBZGRpdGlvbmFsIE1hYy1zcGVjaWZpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogSnVzdCB2YW4gUm9zc3VtLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBOT1RFOiBJbmNsdWRlIHRoaXMgZmlsZSBhZnRlciBGVF9GUkVFVFlQRV9IIGFuZCBhZnRlciBhbnkgICAgICAgICAgICAgICAqLwotLyogICAgICAgTWFjLXNwZWNpZmljIGhlYWRlcnMgKGJlY2F1c2UgdGhpcyBoZWFkZXIgdXNlcyBNYWMgdHlwZXMgc3VjaCBhcyAgKi8KLS8qICAgICAgIEhhbmRsZSwgRlNTcGVjLCBGU1JlZiwgZXRjLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTk9URTogSW5jbHVkZSB0aGlzIGZpbGUgYWZ0ZXIgRlRfRlJFRVRZUEVfSCBhbmQgYWZ0ZXIgYW55CisgKiAgICAgICBNYWMtc3BlY2lmaWMgaGVhZGVycyAoYmVjYXVzZSB0aGlzIGhlYWRlciB1c2VzIE1hYyB0eXBlcyBzdWNoIGFzCisgKiAgICAgICBIYW5kbGUsIEZTU3BlYywgRlNSZWYsIGV0Yy4pCisgKgorICovCiAKIAogI2lmbmRlZiBGVE1BQ19IXwpAQCAtNDcsNTYgKzQ3LDYwIEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hY19zcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1hYyBTcGVjaWZpYyBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgYXZhaWxhYmxlIG9uIHRoZSBNYWNpbnRvc2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIEZyZWVUeXBlIGlzICAgICAgICAqLwotICAvKiAgICBjb21waWxlZCBvbiBhIE1hY2ludG9zaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgbWFjX3NwZWNpZmljCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBNYWMgU3BlY2lmaWMgSW50ZXJmYWNlCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBPbmx5IGF2YWlsYWJsZSBvbiB0aGUgTWFjaW50b3NoLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaWYgRnJlZVR5cGUgaXMKKyAgICogICBjb21waWxlZCBvbiBhIE1hY2ludG9zaC4KKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIEZPTkQgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb25kICAgICAgIDo6IEEgRk9ORCByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggOjogT25seSBzdXBwb3J0ZWQgZm9yIHRoZSAtMSBgc2FuaXR5IGNoZWNrJyBzcGVjaWFsICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3Rlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBARlRfRmFjZSBvYmplY3RzIGZyb20gZm9udHMgICAgKi8KLSAgLyogICAgdGhhdCBhcmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gYXMgZm9sbG93cy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBmb25kID0gR2V0UmVzb3VyY2UoICdGT05EJywgZm9udE5hbWUgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIGxpYnJhcnksIGZvbmQsIDAsICZmYWNlICk7ICAgICAgICAqLwotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X0ZhY2VfRnJvbV9GT05ECisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIEZPTkQgcmVzb3VyY2UuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZvbmQgOjoKKyAgICogICAgIEEgRk9ORCByZXNvdXJjZS4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIC0xIGBzYW5pdHkgY2hlY2snIHNwZWNpYWwKKyAgICogICAgIGNhc2UuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBleGFtcGxlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIEBGVF9GYWNlIG9iamVjdHMgZnJvbSBmb250cworICAgKiAgIHRoYXQgYXJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtIGFzIGZvbGxvd3MuCisgICAqCisgICAqICAgeworICAgKiAgICAgZm9uZCAgPSBHZXRSZXNvdXJjZSggJ0ZPTkQnLCBmb250TmFtZSApOworICAgKiAgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX0ZPTkQoIGxpYnJhcnksIGZvbmQsIDAsICZmYWNlICk7CisgICAqICAgfQorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX05ld19GYWNlX0Zyb21fRk9ORCggRlRfTGlicmFyeSAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGUgICAgICBmb25kLApAQCAtMTA1LDI4ICsxMDksMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gYW4gRlNTcGVjIGZvciB0aGUgZGlzayBmaWxlIGNvbnRhaW5pbmcgdGhlIG5hbWVkIGZvbnQuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb250TmFtZSAgIDo6IE1hYyBPUyBuYW1lIG9mIHRoZSBmb250IChlLmcuLCBUaW1lcyBOZXcgUm9tYW4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBCb2xkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGF0aFNwZWMgICA6OiBGU1NwZWMgdG8gdGhlIGZpbGUuICBGb3IgcGFzc2luZyB0byAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZV9pbmRleCA6OiBJbmRleCBvZiB0aGUgZmFjZS4gIEZvciBwYXNzaW5nIHRvICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiBhbiBGU1NwZWMgZm9yIHRoZSBkaXNrIGZpbGUgY29udGFpbmluZyB0aGUgbmFtZWQgZm9udC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZvbnROYW1lIDo6CisgICAqICAgICBNYWMgT1MgbmFtZSBvZiB0aGUgZm9udCAoZS5nLiwgVGltZXMgTmV3IFJvbWFuCisgICAqICAgICBCb2xkKS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBwYXRoU3BlYyA6OgorICAgKiAgICAgRlNTcGVjIHRvIHRoZSBmaWxlLiAgRm9yIHBhc3NpbmcgdG8KKyAgICogICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYy4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBJbmRleCBvZiB0aGUgZmFjZS4gIEZvciBwYXNzaW5nIHRvCisgICAqICAgICBARlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCkBAIC0xMzQsMjcgKzE0MSwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiBhbiBGU1NwZWMgZm9yIHRoZSBkaXNrIGZpbGUgY29udGFpbmluZyB0aGUgbmFtZWQgZm9udC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvbnROYW1lICAgOjogTWFjIE9TIG5hbWUgb2YgdGhlIGZvbnQgaW4gQVRTIGZyYW1ld29yay4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhdGhTcGVjICAgOjogRlNTcGVjIHRvIHRoZSBmaWxlLiBGb3IgcGFzc2luZyB0byAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggOjogSW5kZXggb2YgdGhlIGZhY2UuIEZvciBwYXNzaW5nIHRvICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGFuIEZTU3BlYyBmb3IgdGhlIGRpc2sgZmlsZSBjb250YWluaW5nIHRoZSBuYW1lZCBmb250LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZm9udE5hbWUgOjoKKyAgICogICAgIE1hYyBPUyBuYW1lIG9mIHRoZSBmb250IGluIEFUUyBmcmFtZXdvcmsuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgcGF0aFNwZWMgOjoKKyAgICogICAgIEZTU3BlYyB0byB0aGUgZmlsZS4gRm9yIHBhc3NpbmcgdG8KKyAgICogICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYy4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBJbmRleCBvZiB0aGUgZmFjZS4gRm9yIHBhc3NpbmcgdG8KKyAgICogICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldEZpbGVfRnJvbV9NYWNfQVRTX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNTcGVjKiAgICAgIHBhdGhTcGVjLApAQCAtMTYyLDMwICsxNzIsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0RmlsZVBhdGhfRnJvbV9NYWNfQVRTX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIGEgcGF0aG5hbWUgb2YgdGhlIGRpc2sgZmlsZSBhbmQgZmFjZSBpbmRleCBmb3IgZ2l2ZW4gZm9udCAgICovCi0gIC8qICAgIG5hbWUgdGhhdCBpcyBoYW5kbGVkIGJ5IEFUUyBmcmFtZXdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvbnROYW1lICAgIDo6IE1hYyBPUyBuYW1lIG9mIHRoZSBmb250IGluIEFUUyBmcmFtZXdvcmsuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhdGggICAgICAgIDo6IEJ1ZmZlciB0byBzdG9yZSBwYXRobmFtZSBvZiB0aGUgZmlsZS4gIEZvciBwYXNzaW5nICAqLwotICAvKiAgICAgICAgICAgICAgICAgICB0byBARlRfTmV3X0ZhY2UuICBUaGUgY2xpZW50IG11c3QgYWxsb2NhdGUgdGhpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhQYXRoU2l6ZSA6OiBMZW5ndGhzIG9mIHRoZSBidWZmZXIgYHBhdGgnIHRoYXQgY2xpZW50IGFsbG9jYXRlZC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggIDo6IEluZGV4IG9mIHRoZSBmYWNlLiAgRm9yIHBhc3NpbmcgdG8gQEZUX05ld19GYWNlLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGEgcGF0aG5hbWUgb2YgdGhlIGRpc2sgZmlsZSBhbmQgZmFjZSBpbmRleCBmb3IgZ2l2ZW4gZm9udAorICAgKiAgIG5hbWUgdGhhdCBpcyBoYW5kbGVkIGJ5IEFUUyBmcmFtZXdvcmsuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmb250TmFtZSA6OgorICAgKiAgICAgTWFjIE9TIG5hbWUgb2YgdGhlIGZvbnQgaW4gQVRTIGZyYW1ld29yay4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBwYXRoIDo6CisgICAqICAgICBCdWZmZXIgdG8gc3RvcmUgcGF0aG5hbWUgb2YgdGhlIGZpbGUuICBGb3IgcGFzc2luZworICAgKiAgICAgdG8gQEZUX05ld19GYWNlLiAgVGhlIGNsaWVudCBtdXN0IGFsbG9jYXRlIHRoaXMKKyAgICogICAgIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgKgorICAgKiAgIG1heFBhdGhTaXplIDo6CisgICAqICAgICBMZW5ndGhzIG9mIHRoZSBidWZmZXIgYHBhdGgnIHRoYXQgY2xpZW50IGFsbG9jYXRlZC4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBJbmRleCBvZiB0aGUgZmFjZS4gIEZvciBwYXNzaW5nIHRvIEBGVF9OZXdfRmFjZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldEZpbGVQYXRoX0Zyb21fTWFjX0FUU19OYW1lKCBjb25zdCBjaGFyKiAgZm9udE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50OCogICAgICAgcGF0aCwKQEAgLTE5NCwzMyArMjA4LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIGdpdmVuIHJlc291cmNlIGFuZCB0eXBlZmFjZSBpbmRleCAgKi8KLSAgLyogICAgdXNpbmcgYW4gRlNTcGVjIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3BlYyAgICAgICA6OiBGU1NwZWMgdG8gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIHJlc291cmNlLiAgVGhlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBmaXJzdCBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMgaXMgaWRlbnRpY2FsIHRvIEBGVF9OZXdfRmFjZSBleGNlcHQgICAgICAgKi8KLSAgLyogICAgaXQgYWNjZXB0cyBhbiBGU1NwZWMgaW5zdGVhZCBvZiBhIHBhdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSBhIGdpdmVuIHJlc291cmNlIGFuZCB0eXBlZmFjZSBpbmRleAorICAgKiAgIHVzaW5nIGFuIEZTU3BlYyB0byB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzcGVjIDo6CisgICAqICAgICBGU1NwZWMgdG8gdGhlIGZvbnQgZmlsZS4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSByZXNvdXJjZS4gIFRoZQorICAgKiAgICAgZmlyc3QgZmFjZSBoYXMgaW5kZXh+MC4KKyAgICogQG91dHB1dDoKKyAgICogICBhZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQEZUX05ld19GYWNlX0Zyb21fRlNTcGVjIGlzIGlkZW50aWNhbCB0byBARlRfTmV3X0ZhY2UgZXhjZXB0CisgICAqICAgaXQgYWNjZXB0cyBhbiBGU1NwZWMgaW5zdGVhZCBvZiBhIHBhdGguCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1NwZWMgICpzcGVjLApAQCAtMjI5LDMzICsyNDcsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENyZWF0ZSBhIG5ldyBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcmVzb3VyY2UgYW5kIHR5cGVmYWNlIGluZGV4ICAqLwotICAvKiAgICB1c2luZyBhbiBGU1JlZiB0byB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzcGVjICAgICAgIDo6IEZTUmVmIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmYWNlIHdpdGhpbiB0aGUgcmVzb3VyY2UuICBUaGUgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGZpcnN0IGZhY2UgaGFzIGluZGV4fjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmIGlzIGlkZW50aWNhbCB0byBARlRfTmV3X0ZhY2UgZXhjZXB0ICAgICAgICAqLwotICAvKiAgICBpdCBhY2NlcHRzIGFuIEZTUmVmIGluc3RlYWQgb2YgYSBwYXRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ3JlYXRlIGEgbmV3IGZhY2Ugb2JqZWN0IGZyb20gYSBnaXZlbiByZXNvdXJjZSBhbmQgdHlwZWZhY2UgaW5kZXgKKyAgICogICB1c2luZyBhbiBGU1JlZiB0byB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzcGVjIDo6CisgICAqICAgICBGU1JlZiB0byB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiAgIGZhY2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIHJlc291cmNlLiAgVGhlCisgICAqICAgICBmaXJzdCBmYWNlIGhhcyBpbmRleH4wLgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBARlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiBpcyBpZGVudGljYWwgdG8gQEZUX05ld19GYWNlIGV4Y2VwdAorICAgKiAgIGl0IGFjY2VwdHMgYW4gRlNSZWYgaW5zdGVhZCBvZiBhIHBhdGguCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1JlZiAgKnJlZiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKaW5kZXggOTk0ODEwMi4uYTkwMzI0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBNdWx0aXBsZSBNYXN0ZXIgZm9udCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bW0uaAorICoKKyAqICAgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVE1NX0hfCkBAIC0yNyw0OSArMjcsNTIgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbXVsdGlwbGVfbWFzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTXVsdGlwbGUgTWFzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSG93IHRvIG1hbmFnZSBNdWx0aXBsZSBNYXN0ZXJzIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGZvbGxvd2luZyB0eXBlcyBhbmQgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIG1hbmFnZSBNdWx0aXBsZSAgICAgICovCi0gIC8qICAgIE1hc3RlciBmb250cywgaS5lLiwgdGhlIHNlbGVjdGlvbiBvZiBzcGVjaWZpYyBkZXNpZ24gaW5zdGFuY2VzIGJ5ICAqLwotICAvKiAgICBzZXR0aW5nIGRlc2lnbiBheGlzIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJlc2lkZXMgQWRvYmUgTU0gZm9udHMsIHRoZSBpbnRlcmZhY2Ugc3VwcG9ydHMgQXBwbGUncyBUcnVlVHlwZSBHWCAqLwotICAvKiAgICBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzLiAgU29tZSBvZiB0aGUgcm91dGluZXMgb25seSB3b3JrIHdpdGggKi8KLSAgLyogICAgQWRvYmUgTU0gZm9udHMsIG90aGVycyB3aWxsIHdvcmsgd2l0aCBhbGwgdGhyZWUgdHlwZXMuICBUaGV5IGFyZSAgICovCi0gIC8qICAgIHNpbWlsYXIgZW5vdWdoIHRoYXQgYSBjb25zaXN0ZW50IGludGVyZmFjZSBtYWtlcyBzZW5zZS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBtdWx0aXBsZV9tYXN0ZXJzCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBNdWx0aXBsZSBNYXN0ZXJzCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBIb3cgdG8gbWFuYWdlIE11bHRpcGxlIE1hc3RlcnMgZm9udHMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgZm9sbG93aW5nIHR5cGVzIGFuZCBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gbWFuYWdlIE11bHRpcGxlCisgICAqICAgTWFzdGVyIGZvbnRzLCBpLmUuLCB0aGUgc2VsZWN0aW9uIG9mIHNwZWNpZmljIGRlc2lnbiBpbnN0YW5jZXMgYnkKKyAgICogICBzZXR0aW5nIGRlc2lnbiBheGlzIGNvb3JkaW5hdGVzLgorICAgKgorICAgKiAgIEJlc2lkZXMgQWRvYmUgTU0gZm9udHMsIHRoZSBpbnRlcmZhY2Ugc3VwcG9ydHMgQXBwbGUncyBUcnVlVHlwZSBHWAorICAgKiAgIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMuICBTb21lIG9mIHRoZSByb3V0aW5lcyBvbmx5IHdvcmsgd2l0aAorICAgKiAgIEFkb2JlIE1NIGZvbnRzLCBvdGhlcnMgd2lsbCB3b3JrIHdpdGggYWxsIHRocmVlIHR5cGVzLiAgVGhleSBhcmUKKyAgICogICBzaW1pbGFyIGVub3VnaCB0aGF0IGEgY29uc2lzdGVudCBpbnRlcmZhY2UgbWFrZXMgc2Vuc2UuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTU1fQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBnaXZlbiBheGlzIGluIGRlc2lnbiBzcGFjZSBmb3IgTXVsdGlwbGUgICAgICovCi0gIC8qICAgIE1hc3RlcnMgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY2FuJ3QgYmUgdXNlZCBmb3IgVHJ1ZVR5cGUgR1ggb3IgT3BlblR5cGUgdmFyaWF0aW9uICovCi0gIC8qICAgIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5hbWUgICAgOjogVGhlIGF4aXMncyBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWluaW11bSA6OiBUaGUgYXhpcydzIG1pbmltdW0gZGVzaWduIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhpbXVtIDo6IFRoZSBheGlzJ3MgbWF4aW11bSBkZXNpZ24gY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX01NX0F4aXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIGEgZ2l2ZW4gYXhpcyBpbiBkZXNpZ24gc3BhY2UgZm9yIE11bHRpcGxlCisgICAqICAgTWFzdGVycyBmb250cy4KKyAgICoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24KKyAgICogICBmb250cy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBuYW1lIDo6CisgICAqICAgICBUaGUgYXhpcydzIG5hbWUuCisgICAqCisgICAqICAgbWluaW11bSA6OgorICAgKiAgICAgVGhlIGF4aXMncyBtaW5pbXVtIGRlc2lnbiBjb29yZGluYXRlLgorICAgKgorICAgKiAgIG1heGltdW0gOjoKKyAgICogICAgIFRoZSBheGlzJ3MgbWF4aW11bSBkZXNpZ24gY29vcmRpbmF0ZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9NTV9BeGlzXwogICB7CiAgICAgRlRfU3RyaW5nKiAgbmFtZTsKQEAgLTc5LDI4ICs4MiwzMSBAQAogICB9IEZUX01NX0F4aXM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NdWx0aV9NYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYSBNdWx0aXBsZSBNYXN0ZXJzICAgICAgKi8KLSAgLyogICAgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24gKi8KLSAgLyogICAgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2F4aXMgICAgOjogTnVtYmVyIG9mIGF4ZXMuICBDYW5ub3QgZXhjZWVkfjQuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fZGVzaWducyA6OiBOdW1iZXIgb2YgZGVzaWduczsgc2hvdWxkIGJlIG5vcm1hbGx5IDJebnVtX2F4aXMgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggdGhlIFR5cGV+MSBzcGVjaWZpY2F0aW9uIHN0cmFuZ2VseSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGFsbG93cyBmb3IgaW50ZXJtZWRpYXRlIGRlc2lnbnMgdG8gYmUgcHJlc2VudC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBjYW5ub3QgZXhjZWVkfjE2LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGF4aXMgICAgICAgIDo6IEEgdGFibGUgb2YgYXhpcyBkZXNjcmlwdG9ycy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTXVsdGlfTWFzdGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYSBNdWx0aXBsZSBNYXN0ZXJzCisgICAqICAgZm9udC4KKyAgICoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24KKyAgICogICBmb250cy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBudW1fYXhpcyA6OgorICAgKiAgICAgTnVtYmVyIG9mIGF4ZXMuICBDYW5ub3QgZXhjZWVkfjQuCisgICAqCisgICAqICAgbnVtX2Rlc2lnbnMgOjoKKyAgICogICAgIE51bWJlciBvZiBkZXNpZ25zOyBzaG91bGQgYmUgbm9ybWFsbHkgMl5udW1fYXhpcworICAgKiAgICAgZXZlbiB0aG91Z2ggdGhlIFR5cGV+MSBzcGVjaWZpY2F0aW9uIHN0cmFuZ2VseQorICAgKiAgICAgYWxsb3dzIGZvciBpbnRlcm1lZGlhdGUgZGVzaWducyB0byBiZSBwcmVzZW50LgorICAgKiAgICAgVGhpcyBudW1iZXIgY2Fubm90IGV4Y2VlZH4xNi4KKyAgICoKKyAgICogICBheGlzIDo6CisgICAqICAgICBBIHRhYmxlIG9mIGF4aXMgZGVzY3JpcHRvcnMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfTXVsdGlfTWFzdGVyXwogICB7CiAgICAgRlRfVUludCAgICAgbnVtX2F4aXM7CkBAIC0xMTAsNDIgKzExNiw0OCBAQAogICB9IEZUX011bHRpX01hc3RlcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Zhcl9BeGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIGEgZ2l2ZW4gYXhpcyBpbiBkZXNpZ24gc3BhY2UgZm9yIE11bHRpcGxlICAgICAqLwotICAvKiAgICBNYXN0ZXJzLCBUcnVlVHlwZSBHWCwgYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lICAgIDo6IFRoZSBheGlzJ3MgbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBOb3QgYWx3YXlzIG1lYW5pbmdmdWwgZm9yIFRydWVUeXBlIEdYIG9yIE9wZW5UeXBlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgdmFyaWF0aW9uIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWluaW11bSA6OiBUaGUgYXhpcydzIG1pbmltdW0gZGVzaWduIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWYgICAgIDo6IFRoZSBheGlzJ3MgZGVmYXVsdCBkZXNpZ24gY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBGcmVlVHlwZSBjb21wdXRlcyBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWVzIGZvciBBZG9iZSAgICovCi0gIC8qICAgICAgICAgICAgICAgTU0gZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4aW11bSA6OiBUaGUgYXhpcydzIG1heGltdW0gZGVzaWduIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWcgICAgIDo6IFRoZSBheGlzJ3MgdGFnICh0aGUgZXF1aXZhbGVudCB0byBgbmFtZScgZm9yIFRydWVUeXBlICAgKi8KLSAgLyogICAgICAgICAgICAgICBHWCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzKS4gIEZyZWVUeXBlIHByb3ZpZGVzICAgICovCi0gIC8qICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMgZm9yIEFkb2JlIE1NIGZvbnRzIGlmIHBvc3NpYmxlLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaWQgICA6OiBUaGUgYXhpcyBuYW1lIGVudHJ5IGluIHRoZSBmb250J3MgYG5hbWUnIHRhYmxlLiAgVGhpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgaXMgYW5vdGhlciAoYW5kIG9mdGVuIGJldHRlcikgdmVyc2lvbiBvZiB0aGUgYG5hbWUnICAgICAqLwotICAvKiAgICAgICAgICAgICAgIGZpZWxkIGZvciBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMuICBOb3QgKi8KLSAgLyogICAgICAgICAgICAgICBtZWFuaW5nZnVsIGZvciBBZG9iZSBNTSBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGZpZWxkcyBgbWluaW11bScsIGBkZWYnLCBhbmQgYG1heGltdW0nIGFyZSAxNi4xNiBmcmFjdGlvbmFsICAgICovCi0gIC8qICAgIHZhbHVlcyBmb3IgVHJ1ZVR5cGUgR1ggYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cy4gIEZvciBBZG9iZSBNTSAqLwotICAvKiAgICBmb250cywgdGhlIHZhbHVlcyBhcmUgaW50ZWdlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1Zhcl9BeGlzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIGdpdmVuIGF4aXMgaW4gZGVzaWduIHNwYWNlIGZvciBNdWx0aXBsZQorICAgKiAgIE1hc3RlcnMsIFRydWVUeXBlIEdYLCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG5hbWUgOjoKKyAgICogICAgIFRoZSBheGlzJ3MgbmFtZS4KKyAgICogICAgIE5vdCBhbHdheXMgbWVhbmluZ2Z1bCBmb3IgVHJ1ZVR5cGUgR1ggb3IgT3BlblR5cGUKKyAgICogICAgIHZhcmlhdGlvbiBmb250cy4KKyAgICoKKyAgICogICBtaW5pbXVtIDo6CisgICAqICAgICBUaGUgYXhpcydzIG1pbmltdW0gZGVzaWduIGNvb3JkaW5hdGUuCisgICAqCisgICAqICAgZGVmIDo6CisgICAqICAgICBUaGUgYXhpcydzIGRlZmF1bHQgZGVzaWduIGNvb3JkaW5hdGUuCisgICAqICAgICBGcmVlVHlwZSBjb21wdXRlcyBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWVzIGZvciBBZG9iZQorICAgKiAgICAgTU0gZm9udHMuCisgICAqCisgICAqICAgbWF4aW11bSA6OgorICAgKiAgICAgVGhlIGF4aXMncyBtYXhpbXVtIGRlc2lnbiBjb29yZGluYXRlLgorICAgKgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgVGhlIGF4aXMncyB0YWcgKHRoZSBlcXVpdmFsZW50IHRvIGBuYW1lJyBmb3IgVHJ1ZVR5cGUKKyAgICogICAgIEdYIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMpLiAgRnJlZVR5cGUgcHJvdmlkZXMKKyAgICogICAgIGRlZmF1bHQgdmFsdWVzIGZvciBBZG9iZSBNTSBmb250cyBpZiBwb3NzaWJsZS4KKyAgICoKKyAgICogICBzdHJpZCA6OgorICAgKiAgICAgVGhlIGF4aXMgbmFtZSBlbnRyeSBpbiB0aGUgZm9udCdzIGBuYW1lJyB0YWJsZS4gIFRoaXMKKyAgICogICAgIGlzIGFub3RoZXIgKGFuZCBvZnRlbiBiZXR0ZXIpIHZlcnNpb24gb2YgdGhlIGBuYW1lJworICAgKiAgICAgZmllbGQgZm9yIFRydWVUeXBlIEdYIG9yIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cy4gIE5vdAorICAgKiAgICAgbWVhbmluZ2Z1bCBmb3IgQWRvYmUgTU0gZm9udHMuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoZSBmaWVsZHMgYG1pbmltdW0nLCBgZGVmJywgYW5kIGBtYXhpbXVtJyBhcmUgMTYuMTYgZnJhY3Rpb25hbAorICAgKiAgIHZhbHVlcyBmb3IgVHJ1ZVR5cGUgR1ggYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cy4gIEZvciBBZG9iZSBNTQorICAgKiAgIGZvbnRzLCB0aGUgdmFsdWVzIGFyZSBpbnRlZ2Vycy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9WYXJfQXhpc18KICAgewogICAgIEZUX1N0cmluZyogIG5hbWU7CkBAIC0xNjAsMjcgKzE3MiwzMCBAQAogICB9IEZUX1Zhcl9BeGlzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVmFyX05hbWVkX1N0eWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBuYW1lZCBpbnN0YW5jZSBpbiBhIFRydWVUeXBlIEdYIG9yIE9wZW5UeXBlICovCi0gIC8qICAgIHZhcmlhdGlvbiBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY2FuJ3QgYmUgdXNlZCBmb3IgQWRvYmUgTU0gZm9udHMuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzIDo6IFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgZm9yIHRoaXMgaW5zdGFuY2UuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICBUaGlzIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGF4aXMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaWQgIDo6IFRoZSBlbnRyeSBpbiBgbmFtZScgdGFibGUgaWRlbnRpZnlpbmcgdGhpcyBpbnN0YW5jZS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwc2lkICAgOjogVGhlIGVudHJ5IGluIGBuYW1lJyB0YWJsZSBpZGVudGlmeWluZyBhIFBvc3RTY3JpcHQgbmFtZSAgKi8KLSAgLyogICAgICAgICAgICAgIGZvciB0aGlzIGluc3RhbmNlLiAgVmFsdWUgMHhGRkZGIGluZGljYXRlcyBhIG1pc3NpbmcgICAgICovCi0gIC8qICAgICAgICAgICAgICBlbnRyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfVmFyX05hbWVkX1N0eWxlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIG5hbWVkIGluc3RhbmNlIGluIGEgVHJ1ZVR5cGUgR1ggb3IgT3BlblR5cGUKKyAgICogICB2YXJpYXRpb24gZm9udC4KKyAgICoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBjYW4ndCBiZSB1c2VkIGZvciBBZG9iZSBNTSBmb250cy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBjb29yZHMgOjoKKyAgICogICAgIFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgZm9yIHRoaXMgaW5zdGFuY2UuCisgICAqICAgICBUaGlzIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGF4aXMuCisgICAqCisgICAqICAgc3RyaWQgOjoKKyAgICogICAgIFRoZSBlbnRyeSBpbiBgbmFtZScgdGFibGUgaWRlbnRpZnlpbmcgdGhpcyBpbnN0YW5jZS4KKyAgICoKKyAgICogICBwc2lkIDo6CisgICAqICAgICBUaGUgZW50cnkgaW4gYG5hbWUnIHRhYmxlIGlkZW50aWZ5aW5nIGEgUG9zdFNjcmlwdCBuYW1lCisgICAqICAgICBmb3IgdGhpcyBpbnN0YW5jZS4gIFZhbHVlIDB4RkZGRiBpbmRpY2F0ZXMgYSBtaXNzaW5nCisgICAqICAgICBlbnRyeS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9WYXJfTmFtZWRfU3R5bGVfCiAgIHsKICAgICBGVF9GaXhlZCogIGNvb3JkczsKQEAgLTE5MCw1MCArMjA1LDU1IEBACiAgIH0gRlRfVmFyX05hbWVkX1N0eWxlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTU1fVmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgdGhlIGF4ZXMgYW5kIHNwYWNlIG9mIGFuIEFkb2JlIE1NLCBUcnVlVHlwZSAgICovCi0gIC8qICAgIEdYLCBvciBPcGVuVHlwZSB2YXJpYXRpb24gZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU29tZSBmaWVsZHMgYXJlIHNwZWNpZmljIHRvIG9uZSBmb3JtYXQgYW5kIG5vdCB0byB0aGUgb3RoZXJzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2F4aXMgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgYXhlcy4gIFRoZSBtYXhpbXVtIHZhbHVlIGlzfjQgZm9yICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBBZG9iZSBNTSBmb250czsgbm8gbGltaXQgaW4gVHJ1ZVR5cGUgR1ggb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9kZXNpZ25zICAgICA6OiBUaGUgbnVtYmVyIG9mIGRlc2lnbnM7IHNob3VsZCBiZSBub3JtYWxseSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgMl5udW1fYXhpcyBmb3IgQWRvYmUgTU0gZm9udHMuICBOb3QgbWVhbmluZ2Z1bCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGZvciBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAod2hlcmUgZXZlcnkgZ2x5cGggY291bGQgaGF2ZSBhIGRpZmZlcmVudCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGRlc2lnbnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9uYW1lZHN0eWxlcyA6OiBUaGUgbnVtYmVyIG9mIG5hbWVkIHN0eWxlczsgYSBgbmFtZWQgc3R5bGUnIGlzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgYSB0dXBsZSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgdGhhdCBoYXMgYSBzdHJpbmcgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIElEIChpbiB0aGUgYG5hbWUnIHRhYmxlKSBhc3NvY2lhdGVkIHdpdGggaXQuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9udCBjYW4gdGVsbCB0aGUgdXNlciB0aGF0LCBmb3IgZXhhbXBsZSwgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgW1dlaWdodD0xLjUsV2lkdGg9MS4xXSBpcyBgQm9sZCcuICBBbm90aGVyIG5hbWUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGZvciBgbmFtZWQgc3R5bGUnIGlzIGBuYW1lZCBpbnN0YW5jZScuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFkb2JlIE11bHRpcGxlIE1hc3RlcnMgZm9udHMsIHRoaXMgdmFsdWUgaXMgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGFsd2F5cyB6ZXJvIGJlY2F1c2UgdGhlIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBuYW1lZCBzdHlsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXhpcyAgICAgICAgICAgIDo6IEFuIGF4aXMgZGVzY3JpcHRvciB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBHWCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbiBzbGlnaHRseSBtb3JlIGRhdGEgdGhhbiBBZG9iZSBNTSBmb250cy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoaXMgcG9pbnRlciBpcyBkb25lICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbmFtZWRzdHlsZSAgICAgIDo6IEEgbmFtZWQgc3R5bGUgKGluc3RhbmNlKSB0YWJsZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBPbmx5IG1lYW5pbmdmdWwgZm9yIFRydWVUeXBlIEdYIGFuZCBPcGVuVHlwZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uIGZvbnRzLiAgTWVtb3J5IG1hbmFnZW1lbnQgb2YgdGhpcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgaXMgZG9uZSBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9NTV9WYXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIHRoZSBheGVzIGFuZCBzcGFjZSBvZiBhbiBBZG9iZSBNTSwgVHJ1ZVR5cGUKKyAgICogICBHWCwgb3IgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnQuCisgICAqCisgICAqICAgU29tZSBmaWVsZHMgYXJlIHNwZWNpZmljIHRvIG9uZSBmb3JtYXQgYW5kIG5vdCB0byB0aGUgb3RoZXJzLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG51bV9heGlzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGF4ZXMuICBUaGUgbWF4aW11bSB2YWx1ZSBpc340IGZvcgorICAgKiAgICAgQWRvYmUgTU0gZm9udHM7IG5vIGxpbWl0IGluIFRydWVUeXBlIEdYIG9yCisgICAqICAgICBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMuCisgICAqCisgICAqICAgbnVtX2Rlc2lnbnMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgZGVzaWduczsgc2hvdWxkIGJlIG5vcm1hbGx5CisgICAqICAgICAyXm51bV9heGlzIGZvciBBZG9iZSBNTSBmb250cy4gIE5vdCBtZWFuaW5nZnVsCisgICAqICAgICBmb3IgVHJ1ZVR5cGUgR1ggb3IgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzCisgICAqICAgICAod2hlcmUgZXZlcnkgZ2x5cGggY291bGQgaGF2ZSBhIGRpZmZlcmVudAorICAgKiAgICAgbnVtYmVyIG9mIGRlc2lnbnMpLgorICAgKgorICAgKiAgIG51bV9uYW1lZHN0eWxlcyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBuYW1lZCBzdHlsZXM7IGEgYG5hbWVkIHN0eWxlJyBpcworICAgKiAgICAgYSB0dXBsZSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgdGhhdCBoYXMgYSBzdHJpbmcKKyAgICogICAgIElEIChpbiB0aGUgYG5hbWUnIHRhYmxlKSBhc3NvY2lhdGVkIHdpdGggaXQuCisgICAqICAgICBUaGUgZm9udCBjYW4gdGVsbCB0aGUgdXNlciB0aGF0LCBmb3IgZXhhbXBsZSwKKyAgICogICAgIFtXZWlnaHQ9MS41LFdpZHRoPTEuMV0gaXMgYEJvbGQnLiAgQW5vdGhlciBuYW1lCisgICAqICAgICBmb3IgYG5hbWVkIHN0eWxlJyBpcyBgbmFtZWQgaW5zdGFuY2UnLgorICAgKgorICAgKiAgICAgRm9yIEFkb2JlIE11bHRpcGxlIE1hc3RlcnMgZm9udHMsIHRoaXMgdmFsdWUgaXMKKyAgICogICAgIGFsd2F5cyB6ZXJvIGJlY2F1c2UgdGhlIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0CisgICAqICAgICBuYW1lZCBzdHlsZXMuCisgICAqCisgICAqICAgYXhpcyA6OgorICAgKiAgICAgQW4gYXhpcyBkZXNjcmlwdG9yIHRhYmxlLgorICAgKiAgICAgVHJ1ZVR5cGUgR1ggYW5kIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cworICAgKiAgICAgY29udGFpbiBzbGlnaHRseSBtb3JlIGRhdGEgdGhhbiBBZG9iZSBNTSBmb250cy4KKyAgICogICAgIE1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoaXMgcG9pbnRlciBpcyBkb25lCisgICAqICAgICBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlLgorICAgKgorICAgKiAgIG5hbWVkc3R5bGUgOjoKKyAgICogICAgIEEgbmFtZWQgc3R5bGUgKGluc3RhbmNlKSB0YWJsZS4KKyAgICogICAgIE9ubHkgbWVhbmluZ2Z1bCBmb3IgVHJ1ZVR5cGUgR1ggYW5kIE9wZW5UeXBlCisgICAqICAgICB2YXJpYXRpb24gZm9udHMuICBNZW1vcnkgbWFuYWdlbWVudCBvZiB0aGlzCisgICAqICAgICBwb2ludGVyIGlzIGRvbmUgaW50ZXJuYWxseSBieSBGcmVlVHlwZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9NTV9WYXJfCiAgIHsKICAgICBGVF9VSW50ICAgICAgICAgICAgICBudW1fYXhpczsKQEAgLTI0NSwzODQgKzI2NSw0MDkgQEAKICAgfSBGVF9NTV9WYXI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfTXVsdGlfTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXRyaWV2ZSBhIHZhcmlhdGlvbiBkZXNjcmlwdG9yIG9mIGEgZ2l2ZW4gQWRvYmUgTU0gZm9udC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FuJ3QgYmUgdXNlZCB3aXRoIFRydWVUeXBlIEdYIG9yIE9wZW5UeXBlIHZhcmlhdGlvbiAqLwotICAvKiAgICBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbWFzdGVyIDo6IFRoZSBNdWx0aXBsZSBNYXN0ZXJzIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X011bHRpX01hc3RlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgYSB2YXJpYXRpb24gZGVzY3JpcHRvciBvZiBhIGdpdmVuIEFkb2JlIE1NIGZvbnQuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBjYW4ndCBiZSB1c2VkIHdpdGggVHJ1ZVR5cGUgR1ggb3IgT3BlblR5cGUgdmFyaWF0aW9uCisgICAqICAgZm9udHMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYW1hc3RlciA6OgorICAgKiAgICAgVGhlIE11bHRpcGxlIE1hc3RlcnMgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9NdWx0aV9NYXN0ZXIoIEZUX0ZhY2UgICAgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bHRpX01hc3RlciAgKmFtYXN0ZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9NTV9WYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHJpZXZlIGEgdmFyaWF0aW9uIGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gZm9udC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIGFsbCBzdXBwb3J0ZWQgdmFyaWF0aW9uIGZvcm1hdHMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYW1hc3RlciA6OiBUaGUgdmFyaWF0aW9uIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgQWxsb2NhdGVzIGEgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIHRoZSB1c2VyIG11c3QgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgIGRlYWxsb2NhdGUgd2l0aCBhIGNhbGwgdG8gQEZUX0RvbmVfTU1fVmFyIGFmdGVyIHVzZS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X01NX1ZhcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgYSB2YXJpYXRpb24gZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBmb250LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gd29ya3Mgd2l0aCBhbGwgc3VwcG9ydGVkIHZhcmlhdGlvbiBmb3JtYXRzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFtYXN0ZXIgOjoKKyAgICogICAgIFRoZSB2YXJpYXRpb24gZGVzY3JpcHRvci4KKyAgICogICAgIEFsbG9jYXRlcyBhIGRhdGEgc3RydWN0dXJlLCB3aGljaCB0aGUgdXNlciBtdXN0CisgICAqICAgICBkZWFsbG9jYXRlIHdpdGggYSBjYWxsIHRvIEBGVF9Eb25lX01NX1ZhciBhZnRlciB1c2UuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfTU1fVmFyKCBGVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKmFtYXN0ZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RvbmVfTU1fVmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgQEZUX0dldF9NTV9WYXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgb2YgdGhlIGZhY2UncyBwYXJlbnQgbGlicmFyeSBvYmplY3QgdGhhdCB3YXMgICAqLwotICAvKiAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIGNhbGwgdG8gQEZUX0dldF9NTV9WYXIgdG8gY3JlYXRlIGBhbWFzdGVyJy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRG9uZV9NTV9WYXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgQEZUX0dldF9NTV9WYXIuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSBvZiB0aGUgZmFjZSdzIHBhcmVudCBsaWJyYXJ5IG9iamVjdCB0aGF0IHdhcworICAgKiAgICAgdXNlZCBpbiB0aGUgY2FsbCB0byBARlRfR2V0X01NX1ZhciB0byBjcmVhdGUgYGFtYXN0ZXInLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfRG9uZV9NTV9WYXIoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgRlRfTU1fVmFyICAgKmFtYXN0ZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZvciBBZG9iZSBNTSBmb250cywgY2hvb3NlIGFuIGludGVycG9sYXRlZCBmb250IGRlc2lnbiB0aHJvdWdoICAgICAqLwotICAvKiAgICBkZXNpZ24gY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FuJ3QgYmUgdXNlZCB3aXRoIFRydWVUeXBlIEdYIG9yIE9wZW5UeXBlIHZhcmlhdGlvbiAqLwotICAvKiAgICBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gIElmIGl0ICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzICovCi0gIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvb3JkcyAgICAgOjogQW4gYXJyYXkgb2YgZGVzaWduIGNvb3JkaW5hdGVzLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZSAgICAqLwotICAvKiAgICBmdW5jdGlvbiB3aXRoIGBudW1fY29vcmRzJyBzZXQgdG8gemVybyBhbmQgYGNvb3Jkcycgc2V0IHRvIE5VTEwuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFtTaW5jZSAyLjldIElmIGBudW1fY29vcmRzJyBpcyBsYXJnZXIgdGhhbiB6ZXJvLCB0aGlzIGZ1bmN0aW9uICAgICAqLwotICAvKiAgICBzZXRzIHRoZSBARlRfRkFDRV9GTEFHX1ZBUklBVElPTiBiaXQgaW4gQEZUX0ZhY2UncyBgZmFjZV9mbGFncycgICAgKi8KLSAgLyogICAgZmllbGQgKGkuZS4sIEBGVF9JU19WQVJJQVRJT04gd2lsbCByZXR1cm4gdHJ1ZSkuICBJZiBgbnVtX2Nvb3JkcycgICovCi0gIC8qICAgIGlzIHplcm8sIHRoaXMgYml0IGZsYWcgZ2V0cyB1bnNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBGb3IgQWRvYmUgTU0gZm9udHMsIGNob29zZSBhbiBpbnRlcnBvbGF0ZWQgZm9udCBkZXNpZ24gdGhyb3VnaAorICAgKiAgIGRlc2lnbiBjb29yZGluYXRlcy4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGNhbid0IGJlIHVzZWQgd2l0aCBUcnVlVHlwZSBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24KKyAgICogICBmb250cy4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG51bV9jb29yZHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gIElmIGl0CisgICAqICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzCisgICAqICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLAorICAgKiAgICAgdXNlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuCisgICAqCisgICAqICAgY29vcmRzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgW1NpbmNlIDIuOC4xXSBUbyByZXNldCBhbGwgYXhlcyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIGNhbGwgdGhlCisgICAqICAgZnVuY3Rpb24gd2l0aCBgbnVtX2Nvb3Jkcycgc2V0IHRvIHplcm8gYW5kIGBjb29yZHMnIHNldCB0byBOVUxMLgorICAgKgorICAgKiAgIFtTaW5jZSAyLjldIElmIGBudW1fY29vcmRzJyBpcyBsYXJnZXIgdGhhbiB6ZXJvLCB0aGlzIGZ1bmN0aW9uCisgICAqICAgc2V0cyB0aGUgQEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gYml0IGluIEBGVF9GYWNlJ3MgYGZhY2VfZmxhZ3MnCisgICAqICAgZmllbGQgKGkuZS4sIEBGVF9JU19WQVJJQVRJT04gd2lsbCByZXR1cm4gdHJ1ZSkuICBJZiBgbnVtX2Nvb3JkcycKKyAgICogICBpcyB6ZXJvLCB0aGlzIGJpdCBmbGFnIGdldHMgdW5zZXQuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyggRlRfRmFjZSAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgY29vcmRzICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDaG9vc2UgYW4gaW50ZXJwb2xhdGVkIGZvbnQgZGVzaWduIHRocm91Z2ggZGVzaWduIGNvb3JkaW5hdGVzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gd29ya3Mgd2l0aCBhbGwgc3VwcG9ydGVkIHZhcmlhdGlvbiBmb3JtYXRzLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBhdmFpbGFibGUgZGVzaWduIGNvb3JkaW5hdGVzLiAgSWYgaXQgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgKi8KLSAgLyogICAgICAgICAgICAgICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdXNlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzICAgICA6OiBBbiBhcnJheSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgW1NpbmNlIDIuOC4xXSBUbyByZXNldCBhbGwgYXhlcyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIGNhbGwgdGhlICAgICovCi0gIC8qICAgIGZ1bmN0aW9uIHdpdGggYG51bV9jb29yZHMnIHNldCB0byB6ZXJvIGFuZCBgY29vcmRzJyBzZXQgdG8gTlVMTC4gICAqLwotICAvKiAgICBbU2luY2UgMi45XSBgRGVmYXVsdCB2YWx1ZXMnIG1lYW5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbmFtZWQgICAgKi8KLSAgLyogICAgaW5zdGFuY2UgKG9yIHRoZSBiYXNlIGZvbnQgaWYgbm8gbmFtZWQgaW5zdGFuY2UgaXMgc2VsZWN0ZWQpLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBbU2luY2UgMi45XSBJZiBgbnVtX2Nvb3JkcycgaXMgbGFyZ2VyIHRoYW4gemVybywgdGhpcyBmdW5jdGlvbiAgICAgKi8KLSAgLyogICAgc2V0cyB0aGUgQEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gYml0IGluIEBGVF9GYWNlJ3MgYGZhY2VfZmxhZ3MnICAgICovCi0gIC8qICAgIGZpZWxkIChpLmUuLCBARlRfSVNfVkFSSUFUSU9OIHdpbGwgcmV0dXJuIHRydWUpLiAgSWYgYG51bV9jb29yZHMnICAqLwotICAvKiAgICBpcyB6ZXJvLCB0aGlzIGJpdCBmbGFnIGdldHMgdW5zZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENob29zZSBhbiBpbnRlcnBvbGF0ZWQgZm9udCBkZXNpZ24gdGhyb3VnaCBkZXNpZ24gY29vcmRpbmF0ZXMuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIGFsbCBzdXBwb3J0ZWQgdmFyaWF0aW9uIGZvcm1hdHMuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBudW1fY29vcmRzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNpZ24gY29vcmRpbmF0ZXMuICBJZiBpdAorICAgKiAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBpZ25vcmUgdGhlIGV4Y2VzcworICAgKiAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywKKyAgICogICAgIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLgorICAgKgorICAgKiAgIGNvb3JkcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgZGVzaWduIGNvb3JkaW5hdGVzLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZQorICAgKiAgIGZ1bmN0aW9uIHdpdGggYG51bV9jb29yZHMnIHNldCB0byB6ZXJvIGFuZCBgY29vcmRzJyBzZXQgdG8gTlVMTC4KKyAgICogICBbU2luY2UgMi45XSBgRGVmYXVsdCB2YWx1ZXMnIG1lYW5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbmFtZWQKKyAgICogICBpbnN0YW5jZSAob3IgdGhlIGJhc2UgZm9udCBpZiBubyBuYW1lZCBpbnN0YW5jZSBpcyBzZWxlY3RlZCkuCisgICAqCisgICAqICAgW1NpbmNlIDIuOV0gSWYgYG51bV9jb29yZHMnIGlzIGxhcmdlciB0aGFuIHplcm8sIHRoaXMgZnVuY3Rpb24KKyAgICogICBzZXRzIHRoZSBARlRfRkFDRV9GTEFHX1ZBUklBVElPTiBiaXQgaW4gQEZUX0ZhY2UncyBgZmFjZV9mbGFncycKKyAgICogICBmaWVsZCAoaS5lLiwgQEZUX0lTX1ZBUklBVElPTiB3aWxsIHJldHVybiB0cnVlKS4gIElmIGBudW1fY29vcmRzJworICAgKiAgIGlzIHplcm8sIHRoaXMgYml0IGZsYWcgZ2V0cyB1bnNldC4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgZGVzaWduIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJwb2xhdGVkICAqLwotICAvKiAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gd29ya3Mgd2l0aCBhbGwgc3VwcG9ydGVkIHZhcmlhdGlvbiBmb3JtYXRzLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGRlc2lnbiBjb29yZGluYXRlcyB0byByZXRyaWV2ZS4gIElmIGl0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBzZXQgdGhlIGV4Y2VzcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyB0b34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb29yZHMgICAgIDo6IFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAyLjcuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEdldCB0aGUgZGVzaWduIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJwb2xhdGVkCisgICAqICAgZm9udC4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYWxsIHN1cHBvcnRlZCB2YXJpYXRpb24gZm9ybWF0cy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgICoKKyAgICogICBudW1fY29vcmRzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGRlc2lnbiBjb29yZGluYXRlcyB0byByZXRyaWV2ZS4gIElmIGl0CisgICAqICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIHNldCB0aGUgZXhjZXNzCisgICAqICAgICB2YWx1ZXMgdG9+MC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBjb29yZHMgOjoKKyAgICogICAgIFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNy4xCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDaG9vc2UgYW4gaW50ZXJwb2xhdGVkIGZvbnQgZGVzaWduIHRocm91Z2ggbm9ybWFsaXplZCBibGVuZCAgICAgICAgKi8KLSAgLyogICAgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYWxsIHN1cHBvcnRlZCB2YXJpYXRpb24gZm9ybWF0cy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gIElmIGl0ICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzICovCi0gIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzLiAgSWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvb3JkcyAgICAgOjogVGhlIGRlc2lnbiBjb29yZGluYXRlcyBhcnJheSAoZWFjaCBlbGVtZW50IG11c3QgYmUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGJldHdlZW4gMCBhbmQgMS4wIGZvciBBZG9iZSBNTSBmb250cywgYW5kIGJldHdlZW4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAtMS4wIGFuZCAxLjAgZm9yIFRydWVUeXBlIEdYIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gICovCi0gIC8qICAgICAgICAgICAgICAgICAgZm9udHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZSAgICAqLwotICAvKiAgICBmdW5jdGlvbiB3aXRoIGBudW1fY29vcmRzJyBzZXQgdG8gemVybyBhbmQgYGNvb3Jkcycgc2V0IHRvIE5VTEwuICAgKi8KLSAgLyogICAgW1NpbmNlIDIuOV0gYERlZmF1bHQgdmFsdWVzJyBtZWFucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5hbWVkICAgICovCi0gIC8qICAgIGluc3RhbmNlIChvciB0aGUgYmFzZSBmb250IGlmIG5vIG5hbWVkIGluc3RhbmNlIGlzIHNlbGVjdGVkKS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgW1NpbmNlIDIuOV0gSWYgYG51bV9jb29yZHMnIGlzIGxhcmdlciB0aGFuIHplcm8sIHRoaXMgZnVuY3Rpb24gICAgICovCi0gIC8qICAgIHNldHMgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBpbiBARlRfRmFjZSdzIGBmYWNlX2ZsYWdzJyAgICAqLwotICAvKiAgICBmaWVsZCAoaS5lLiwgQEZUX0lTX1ZBUklBVElPTiB3aWxsIHJldHVybiB0cnVlKS4gIElmIGBudW1fY29vcmRzJyAgKi8KLSAgLyogICAgaXMgemVybywgdGhpcyBiaXQgZmxhZyBnZXRzIHVuc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ2hvb3NlIGFuIGludGVycG9sYXRlZCBmb250IGRlc2lnbiB0aHJvdWdoIG5vcm1hbGl6ZWQgYmxlbmQKKyAgICogICBjb29yZGluYXRlcy4KKyAgICoKKyAgICogICBUaGlzIGZ1bmN0aW9uIHdvcmtzIHdpdGggYWxsIHN1cHBvcnRlZCB2YXJpYXRpb24gZm9ybWF0cy4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG51bV9jb29yZHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2lnbiBjb29yZGluYXRlcy4gIElmIGl0CisgICAqICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzCisgICAqICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLAorICAgKiAgICAgdXNlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuCisgICAqCisgICAqICAgY29vcmRzIDo6CisgICAqICAgICBUaGUgZGVzaWduIGNvb3JkaW5hdGVzIGFycmF5IChlYWNoIGVsZW1lbnQgbXVzdCBiZQorICAgKiAgICAgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIEFkb2JlIE1NIGZvbnRzLCBhbmQgYmV0d2VlbgorICAgKiAgICAgLTEuMCBhbmQgMS4wIGZvciBUcnVlVHlwZSBHWCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uCisgICAqICAgICBmb250cykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgW1NpbmNlIDIuOC4xXSBUbyByZXNldCBhbGwgYXhlcyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIGNhbGwgdGhlCisgICAqICAgZnVuY3Rpb24gd2l0aCBgbnVtX2Nvb3Jkcycgc2V0IHRvIHplcm8gYW5kIGBjb29yZHMnIHNldCB0byBOVUxMLgorICAgKiAgIFtTaW5jZSAyLjldIGBEZWZhdWx0IHZhbHVlcycgbWVhbnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBuYW1lZAorICAgKiAgIGluc3RhbmNlIChvciB0aGUgYmFzZSBmb250IGlmIG5vIG5hbWVkIGluc3RhbmNlIGlzIHNlbGVjdGVkKS4KKyAgICoKKyAgICogICBbU2luY2UgMi45XSBJZiBgbnVtX2Nvb3JkcycgaXMgbGFyZ2VyIHRoYW4gemVybywgdGhpcyBmdW5jdGlvbgorICAgKiAgIHNldHMgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBpbiBARlRfRmFjZSdzIGBmYWNlX2ZsYWdzJworICAgKiAgIGZpZWxkIChpLmUuLCBARlRfSVNfVkFSSUFUSU9OIHdpbGwgcmV0dXJuIHRydWUpLiAgSWYgYG51bV9jb29yZHMnCisgICAqICAgaXMgemVybywgdGhpcyBiaXQgZmxhZyBnZXRzIHVuc2V0LgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcyggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR2V0IHRoZSBub3JtYWxpemVkIGJsZW5kIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgICAgICovCi0gIC8qICAgIGludGVycG9sYXRlZCBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiB3b3JrcyB3aXRoIGFsbCBzdXBwb3J0ZWQgdmFyaWF0aW9uIGZvcm1hdHMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY29vcmRzIDo6IFRoZSBudW1iZXIgb2Ygbm9ybWFsaXplZCBibGVuZCBjb29yZGluYXRlcyB0byAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICByZXRyaWV2ZS4gIElmIGl0IGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgICovCi0gIC8qICAgICAgICAgICAgICAgICAgc2V0IHRoZSBleGNlc3MgdmFsdWVzIHRvfjAuNSBmb3IgQWRvYmUgTU0gZm9udHMsIGFuZCAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRvfjAgZm9yIFRydWVUeXBlIEdYIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gZm9udHMuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb29yZHMgICAgIDo6IFRoZSBub3JtYWxpemVkIGJsZW5kIGNvb3JkaW5hdGVzIGFycmF5LiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAyLjcuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBHZXQgdGhlIG5vcm1hbGl6ZWQgYmxlbmQgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorICAgKiAgIGludGVycG9sYXRlZCBmb250LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gd29ya3Mgd2l0aCBhbGwgc3VwcG9ydGVkIHZhcmlhdGlvbiBmb3JtYXRzLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLgorICAgKgorICAgKiAgIG51bV9jb29yZHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2Ygbm9ybWFsaXplZCBibGVuZCBjb29yZGluYXRlcyB0bworICAgKiAgICAgcmV0cmlldmUuICBJZiBpdCBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsCisgICAqICAgICBzZXQgdGhlIGV4Y2VzcyB2YWx1ZXMgdG9+MC41IGZvciBBZG9iZSBNTSBmb250cywgYW5kCisgICAqICAgICB0b34wIGZvciBUcnVlVHlwZSBHWCBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGNvb3JkcyA6OgorICAgKiAgICAgVGhlIG5vcm1hbGl6ZWQgYmxlbmQgY29vcmRpbmF0ZXMgYXJyYXkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNy4xCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGlzIGFub3RoZXIgbmFtZSBvZiBARlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBpcyBhbm90aGVyIG5hbWUgb2YgQEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgaXMgYW5vdGhlciBuYW1lIG9mIEBGVF9HZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuNy4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGlzIGFub3RoZXIgbmFtZSBvZiBARlRfR2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi43LjEKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1ZBUl9BWElTX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfR2V0X1Zhcl9BeGlzX0ZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9WQVJfQVhJU19GTEFHX0hJRERFTiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgdmFyaWF0aW9uIGF4aXMgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHVzZXIgaW50ZXJmYWNlcy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi44LjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfVkFSX0FYSVNfRkxBR19YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAqICAgQEZUX0dldF9WYXJfQXhpc19GbGFncy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9WQVJfQVhJU19GTEFHX0hJRERFTiA6OgorICAgKiAgICAgVGhlIHZhcmlhdGlvbiBheGlzIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2VyIGludGVyZmFjZXMuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjguMQorICAgKi8KICNkZWZpbmUgRlRfVkFSX0FYSVNfRkxBR19ISURERU4gIDEKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9WYXJfQXhpc19GbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgYGZsYWdzJyBmaWVsZCBvZiBhbiBPcGVuVHlwZSBWYXJpYXRpb24gQXhpcyBSZWNvcmQuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm90IG1lYW5pbmdmdWwgZm9yIEFkb2JlIE1NIGZvbnRzIChgKmZsYWdzJyBpcyBhbHdheXMgemVybykuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWFzdGVyICAgICA6OiBUaGUgdmFyaWF0aW9uIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBheGlzX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIHZhcmlhdGlvbiBheGlzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmbGFncyAgICAgIDo6IFRoZSBgZmxhZ3MnIGZpZWxkLiAgU2VlIEBGVF9WQVJfQVhJU19GTEFHX1hYWCBmb3IgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi44LjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9WYXJfQXhpc19GbGFncworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgR2V0IHRoZSBgZmxhZ3MnIGZpZWxkIG9mIGFuIE9wZW5UeXBlIFZhcmlhdGlvbiBBeGlzIFJlY29yZC4KKyAgICoKKyAgICogICBOb3QgbWVhbmluZ2Z1bCBmb3IgQWRvYmUgTU0gZm9udHMgKGAqZmxhZ3MnIGlzIGFsd2F5cyB6ZXJvKS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1hc3RlciA6OgorICAgKiAgICAgVGhlIHZhcmlhdGlvbiBkZXNjcmlwdG9yLgorICAgKgorICAgKiAgIGF4aXNfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIHZhcmlhdGlvbiBheGlzLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGZsYWdzIDo6CisgICAqICAgICBUaGUgYGZsYWdzJyBmaWVsZC4gIFNlZSBARlRfVkFSX0FYSVNfRkxBR19YWFggZm9yCisgICAqICAgICBwb3NzaWJsZSB2YWx1ZXMuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOC4xCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzKCBGVF9NTV9WYXIqICBtYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgYXhpc19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50KiAgICBmbGFncyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2V0X05hbWVkX0luc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2V0IG9yIGNoYW5nZSB0aGUgY3VycmVudCBuYW1lZCBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbnN0YW5jZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIHJlcXVlc3RlZCBpbnN0YW5jZSwgc3RhcnRpbmcgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgd2l0aCB2YWx1ZSAxLiAgSWYgc2V0IHRvIHZhbHVlIDAsIEZyZWVUeXBlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzIHRvIGZvbnQgYWNjZXNzIHdpdGhvdXQgYSBuYW1lZCAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZnVuY3Rpb24gdXNlcyB0aGUgdmFsdWUgb2YgYGluc3RhbmNlX2luZGV4JyB0byBzZXQgYml0cyAxNi0zMCAgKi8KLSAgLyogICAgb2YgdGhlIGZhY2UncyBgZmFjZV9pbmRleCcgZmllbGQuICBJdCBhbHNvIHJlc2V0cyBhbnkgdmFyaWF0aW9uICAgICovCi0gIC8qICAgIGFwcGxpZWQgdG8gdGhlIGZvbnQsIGFuZCB0aGUgQEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gYml0IG9mIHRoZSAgICAqLwotICAvKiAgICBmYWNlJ3MgYGZhY2VfZmxhZ3MnIGZpZWxkIGdldHMgcmVzZXQgdG8gemVybyAoaS5lLiwgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0lTX1ZBUklBVElPTiB3aWxsIHJldHVybiBmYWxzZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGb3IgQWRvYmUgTU0gZm9udHMgKHdoaWNoIGRvbid0IGhhdmUgbmFtZWQgaW5zdGFuY2VzKSB0aGlzICAgICAgICAgKi8KLSAgLyogICAgZnVuY3Rpb24gc2ltcGx5IHJlc2V0cyB0aGUgY3VycmVudCBmYWNlIHRvIHRoZSBkZWZhdWx0IGluc3RhbmNlLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi45ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NldF9OYW1lZF9JbnN0YW5jZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU2V0IG9yIGNoYW5nZSB0aGUgY3VycmVudCBuYW1lZCBpbnN0YW5jZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgICoKKyAgICogICBpbnN0YW5jZV9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSByZXF1ZXN0ZWQgaW5zdGFuY2UsIHN0YXJ0aW5nCisgICAqICAgICB3aXRoIHZhbHVlIDEuICBJZiBzZXQgdG8gdmFsdWUgMCwgRnJlZVR5cGUKKyAgICogICAgIHN3aXRjaGVzIHRvIGZvbnQgYWNjZXNzIHdpdGhvdXQgYSBuYW1lZAorICAgKiAgICAgaW5zdGFuY2UuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGZ1bmN0aW9uIHVzZXMgdGhlIHZhbHVlIG9mIGBpbnN0YW5jZV9pbmRleCcgdG8gc2V0IGJpdHMgMTYtMzAKKyAgICogICBvZiB0aGUgZmFjZSdzIGBmYWNlX2luZGV4JyBmaWVsZC4gIEl0IGFsc28gcmVzZXRzIGFueSB2YXJpYXRpb24KKyAgICogICBhcHBsaWVkIHRvIHRoZSBmb250LCBhbmQgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBvZiB0aGUKKyAgICogICBmYWNlJ3MgYGZhY2VfZmxhZ3MnIGZpZWxkIGdldHMgcmVzZXQgdG8gemVybyAoaS5lLiwKKyAgICogICBARlRfSVNfVkFSSUFUSU9OIHdpbGwgcmV0dXJuIGZhbHNlKS4KKyAgICoKKyAgICogICBGb3IgQWRvYmUgTU0gZm9udHMgKHdoaWNoIGRvbid0IGhhdmUgbmFtZWQgaW5zdGFuY2VzKSB0aGlzCisgICAqICAgZnVuY3Rpb24gc2ltcGx5IHJlc2V0cyB0aGUgY3VycmVudCBmYWNlIHRvIHRoZSBkZWZhdWx0IGluc3RhbmNlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi45CisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU2V0X05hbWVkX0luc3RhbmNlKCBGVF9GYWNlICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluc3RhbmNlX2luZGV4ICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKaW5kZXggYTZlYjg3Ni4uYzUwYzljZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRtb2RhcGkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRtb2RhcGkuaAorICoKKyAqICAgRnJlZVR5cGUgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVE1PREFQSV9IXwpAQCAtMzMsNzcgKzMzLDc3IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZHVsZV9tYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1vZHVsZSBNYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEhvdyB0byBhZGQsIHVwZ3JhZGUsIHJlbW92ZSwgYW5kIGNvbnRyb2wgbW9kdWxlcyBmcm9tIEZyZWVUeXBlLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBkZWZpbml0aW9ucyBiZWxvdyBhcmUgdXNlZCB0byBtYW5hZ2UgbW9kdWxlcyB3aXRoaW4gRnJlZVR5cGUuICAqLwotICAvKiAgICBNb2R1bGVzIGNhbiBiZSBhZGRlZCwgdXBncmFkZWQsIGFuZCByZW1vdmVkIGF0IHJ1bnRpbWUuICAgICAgICAgICAgKi8KLSAgLyogICAgQWRkaXRpb25hbGx5LCBzb21lIG1vZHVsZSBwcm9wZXJ0aWVzIGNhbiBiZSBjb250cm9sbGVkIGFsc28uICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIZXJlIGlzIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGBtb2R1bGVfbmFtZScgZmllbGQgaW4gICAgKi8KLSAgLyogICAgdGhlIEBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBhdXRvZml0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYmRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGNmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBneHZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgb3R2YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHBjZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBwZnIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgcHNhdXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHBzaGludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBwc25hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgcmFzdGVyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHNmbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBzbW9vdGgsIHNtb290aC1sY2QsIHNtb290aC1sY2R2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgdHJ1ZXR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHR5cGUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICB0eXBlNDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgdDFjaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHdpbmZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgdGhlIEZyZWVUeXBlIENhY2hlIHN1Yi1zeXN0ZW0gaXMgbm90IGEgRnJlZVR5cGUgbW9kdWxlLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Nb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlX0NvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01vZHVsZV9EZXN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Nb2R1bGVfUmVxdWVzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlX0NsYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BZGRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlbW92ZV9Nb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Byb3BlcnR5X1NldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Qcm9wZXJ0eV9HZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2V0X0RlZmF1bHRfUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRG9uZV9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlZmVyZW5jZV9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlbmRlcmVyX0NsYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X1JlbmRlcmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2V0X0RlYnVnX0hvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIG1vZHVsZV9tYW5hZ2VtZW50CisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBNb2R1bGUgTWFuYWdlbWVudAorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgSG93IHRvIGFkZCwgdXBncmFkZSwgcmVtb3ZlLCBhbmQgY29udHJvbCBtb2R1bGVzIGZyb20gRnJlZVR5cGUuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gbWFuYWdlIG1vZHVsZXMgd2l0aGluIEZyZWVUeXBlLgorICAgKiAgIE1vZHVsZXMgY2FuIGJlIGFkZGVkLCB1cGdyYWRlZCwgYW5kIHJlbW92ZWQgYXQgcnVudGltZS4KKyAgICogICBBZGRpdGlvbmFsbHksIHNvbWUgbW9kdWxlIHByb3BlcnRpZXMgY2FuIGJlIGNvbnRyb2xsZWQgYWxzby4KKyAgICoKKyAgICogICBIZXJlIGlzIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGBtb2R1bGVfbmFtZScgZmllbGQgaW4KKyAgICogICB0aGUgQEZUX01vZHVsZV9DbGFzcyBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgeworICAgKiAgICAgYXV0b2ZpdHRlcgorICAgKiAgICAgYmRmCisgICAqICAgICBjZmYKKyAgICogICAgIGd4dmFsaWQKKyAgICogICAgIG90dmFsaWQKKyAgICogICAgIHBjZgorICAgKiAgICAgcGZyCisgICAqICAgICBwc2F1eAorICAgKiAgICAgcHNoaW50ZXIKKyAgICogICAgIHBzbmFtZXMKKyAgICogICAgIHJhc3RlcjEKKyAgICogICAgIHNmbnQKKyAgICogICAgIHNtb290aCwgc21vb3RoLWxjZCwgc21vb3RoLWxjZHYKKyAgICogICAgIHRydWV0eXBlCisgICAqICAgICB0eXBlMQorICAgKiAgICAgdHlwZTQyCisgICAqICAgICB0MWNpZAorICAgKiAgICAgd2luZm9udHMKKyAgICogICB9CisgICAqCisgICAqICAgTm90ZSB0aGF0IHRoZSBGcmVlVHlwZSBDYWNoZSBzdWItc3lzdGVtIGlzIG5vdCBhIEZyZWVUeXBlIG1vZHVsZS4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIEZUX01vZHVsZQorICAgKiAgIEZUX01vZHVsZV9Db25zdHJ1Y3RvcgorICAgKiAgIEZUX01vZHVsZV9EZXN0cnVjdG9yCisgICAqICAgRlRfTW9kdWxlX1JlcXVlc3RlcgorICAgKiAgIEZUX01vZHVsZV9DbGFzcworICAgKgorICAgKiAgIEZUX0FkZF9Nb2R1bGUKKyAgICogICBGVF9HZXRfTW9kdWxlCisgICAqICAgRlRfUmVtb3ZlX01vZHVsZQorICAgKiAgIEZUX0FkZF9EZWZhdWx0X01vZHVsZXMKKyAgICoKKyAgICogICBGVF9Qcm9wZXJ0eV9TZXQKKyAgICogICBGVF9Qcm9wZXJ0eV9HZXQKKyAgICogICBGVF9TZXRfRGVmYXVsdF9Qcm9wZXJ0aWVzCisgICAqCisgICAqICAgRlRfTmV3X0xpYnJhcnkKKyAgICogICBGVF9Eb25lX0xpYnJhcnkKKyAgICogICBGVF9SZWZlcmVuY2VfTGlicmFyeQorICAgKgorICAgKiAgIEZUX1JlbmRlcmVyCisgICAqICAgRlRfUmVuZGVyZXJfQ2xhc3MKKyAgICoKKyAgICogICBGVF9HZXRfUmVuZGVyZXIKKyAgICogICBGVF9TZXRfUmVuZGVyZXIKKyAgICoKKyAgICogICBGVF9TZXRfRGVidWdfSG9vaworICAgKgorICAgKi8KIAogCiAgIC8qIG1vZHVsZSBiaXQgZmxhZ3MgKi8KQEAgLTEzNyw4MyArMTM3LDk5IEBACiAgIHR5cGVkZWYgRlRfUG9pbnRlciAgRlRfTW9kdWxlX0ludGVyZmFjZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01vZHVsZV9Db25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIChub3QgY3JlYXRlKSBhIG5ldyBtb2R1bGUgb2JqZWN0LiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZHVsZSA6OiBUaGUgbW9kdWxlIHRvIGluaXRpYWxpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9Nb2R1bGVfQ29uc3RydWN0b3IKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZnVuY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIChub3QgY3JlYXRlKSBhIG5ldyBtb2R1bGUgb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbW9kdWxlIDo6CisgICAqICAgICBUaGUgbW9kdWxlIHRvIGluaXRpYWxpemUuCisgICAqLwogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfTW9kdWxlX0NvbnN0cnVjdG9yKSggRlRfTW9kdWxlICBtb2R1bGUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01vZHVsZV9EZXN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBmaW5hbGl6ZSAobm90IGRlc3Ryb3kpIGEgZ2l2ZW4gbW9kdWxlIG9iamVjdC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZHVsZSA6OiBUaGUgbW9kdWxlIHRvIGZpbmFsaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9Nb2R1bGVfRGVzdHJ1Y3RvcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiB1c2VkIHRvIGZpbmFsaXplIChub3QgZGVzdHJveSkgYSBnaXZlbiBtb2R1bGUgb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbW9kdWxlIDo6CisgICAqICAgICBUaGUgbW9kdWxlIHRvIGZpbmFsaXplLgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfTW9kdWxlX0Rlc3RydWN0b3IpKCBGVF9Nb2R1bGUgIG1vZHVsZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlX1JlcXVlc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIHF1ZXJ5IGEgZ2l2ZW4gbW9kdWxlIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlIDo6IFRoZSBtb2R1bGUgdG8gYmUgc2VhcmNoZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lIDo6ICAgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSBpbiB0aGUgbW9kdWxlLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfTW9kdWxlX1JlcXVlc3RlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBmdW5jdGlvbiB1c2VkIHRvIHF1ZXJ5IGEgZ2l2ZW4gbW9kdWxlIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1vZHVsZSA6OgorICAgKiAgICAgVGhlIG1vZHVsZSB0byBiZSBzZWFyY2hlZC4KKyAgICoKKyAgICogICBuYW1lIDo6CisgICAqICAgICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGluIHRoZSBtb2R1bGUuCisgICAqLwogICB0eXBlZGVmIEZUX01vZHVsZV9JbnRlcmZhY2UKICAgKCpGVF9Nb2R1bGVfUmVxdWVzdGVyKSggRlRfTW9kdWxlICAgIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG5hbWUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01vZHVsZV9DbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBtb2R1bGUgY2xhc3MgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZHVsZV9mbGFncyAgICA6OiBCaXQgZmxhZ3MgZGVzY3JpYmluZyB0aGUgbW9kdWxlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlX3NpemUgICAgIDo6IFRoZSBzaXplIG9mIG9uZSBtb2R1bGUgb2JqZWN0L2luc3RhbmNlIGluICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlX25hbWUgICAgIDo6IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfdmVyc2lvbiAgOjogVGhlIHZlcnNpb24sIGFzIGEgMTYuMTYgZml4ZWQgbnVtYmVyICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIChtYWpvci5taW5vcikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfcmVxdWlyZXMgOjogVGhlIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhpcyBtb2R1bGUgcmVxdWlyZXMsICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGFzIGEgMTYuMTYgZml4ZWQgbnVtYmVyIChtYWpvci5taW5vcikuICBTdGFydHMgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBhdCB2ZXJzaW9uIDIuMCwgaS5lLiwgMHgyMDAwMC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlX2luaXQgICAgIDo6IFRoZSBpbml0aWFsaXppbmcgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfZG9uZSAgICAgOjogVGhlIGZpbmFsaXppbmcgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdldF9pbnRlcmZhY2UgICA6OiBUaGUgaW50ZXJmYWNlIHJlcXVlc3RpbmcgZnVuY3Rpb24uICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTW9kdWxlX0NsYXNzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgbW9kdWxlIGNsYXNzIGRlc2NyaXB0b3IuICBXaGlsZSBiZWluZyBhIHB1YmxpYyBzdHJ1Y3R1cmUKKyAgICogICBuZWNlc3NhcnkgZm9yIEZyZWVUeXBlJ3MgbW9kdWxlIGJvb2trZWVwaW5nLCBtb3N0IG9mIHRoZSBmaWVsZHMgYXJlCisgICAqICAgZXNzZW50aWFsbHkgaW50ZXJuYWwsIG5vdCB0byBiZSB1c2VkIGRpcmVjdGx5IGJ5IGFuIGFwcGxpY2F0aW9uLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG1vZHVsZV9mbGFncyA6OgorICAgKiAgICAgQml0IGZsYWdzIGRlc2NyaWJpbmcgdGhlIG1vZHVsZS4KKyAgICoKKyAgICogICBtb2R1bGVfc2l6ZSA6OgorICAgKiAgICAgVGhlIHNpemUgb2Ygb25lIG1vZHVsZSBvYmplY3QvaW5zdGFuY2UgaW4gYnl0ZXMuCisgICAqCisgICAqICAgbW9kdWxlX25hbWUgOjoKKyAgICogICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisgICAqCisgICAqICAgbW9kdWxlX3ZlcnNpb24gOjoKKyAgICogICAgIFRoZSB2ZXJzaW9uLCBhcyBhIDE2LjE2IGZpeGVkIG51bWJlciAobWFqb3IubWlub3IpLgorICAgKgorICAgKiAgIG1vZHVsZV9yZXF1aXJlcyA6OgorICAgKiAgICAgVGhlIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhpcyBtb2R1bGUgcmVxdWlyZXMsIGFzIGEgMTYuMTYgZml4ZWQKKyAgICogICAgIG51bWJlciAobWFqb3IubWlub3IpLiAgU3RhcnRzIGF0IHZlcnNpb24gMi4wLCBpLmUuLCAweDIwMDAwLgorICAgKgorICAgKiAgIG1vZHVsZV9pbnRlcmZhY2UgOjoKKyAgICogICAgIEEgdHlwZWxlc3MgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAod2hpY2ggdmFyaWVzIGJldHdlZW4gZGlmZmVyZW50CisgICAqICAgICBtb2R1bGVzKSB0aGF0IGhvbGRzIHRoZSBtb2R1bGUncyBpbnRlcmZhY2UgZnVuY3Rpb25zLiAgVGhpcyBpcworICAgKiAgICAgZXNzZW50aWFsbHkgd2hhdCBgZ2V0X2ludGVyZmFjZScgcmV0dXJucy4KKyAgICoKKyAgICogICBtb2R1bGVfaW5pdCA6OgorICAgKiAgICAgVGhlIGluaXRpYWxpemluZyBmdW5jdGlvbi4KKyAgICoKKyAgICogICBtb2R1bGVfZG9uZSA6OgorICAgKiAgICAgVGhlIGZpbmFsaXppbmcgZnVuY3Rpb24uCisgICAqCisgICAqICAgZ2V0X2ludGVyZmFjZSA6OgorICAgKiAgICAgVGhlIGludGVyZmFjZSByZXF1ZXN0aW5nIGZ1bmN0aW9uLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX01vZHVsZV9DbGFzc18KICAgewogICAgIEZUX1VMb25nICAgICAgICAgICAgICAgbW9kdWxlX2ZsYWdzOwpAQCAtMjMxLDc3ICsyNDcsODMgQEAKICAgfSBGVF9Nb2R1bGVfQ2xhc3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BZGRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBZGQgYSBuZXcgbW9kdWxlIHRvIGEgZ2l2ZW4gbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjbGF6eiAgIDo6IEEgcG9pbnRlciB0byBjbGFzcyBkZXNjcmlwdG9yIGZvciB0aGUgbW9kdWxlLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBlcnJvciB3aWxsIGJlIHJldHVybmVkIGlmIGEgbW9kdWxlIGFscmVhZHkgZXhpc3RzIGJ5IHRoYXQgbmFtZSwgKi8KLSAgLyogICAgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0FkZF9Nb2R1bGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFkZCBhIG5ldyBtb2R1bGUgdG8gYSBnaXZlbiBsaWJyYXJ5IGluc3RhbmNlLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgY2xhenogOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBjbGFzcyBkZXNjcmlwdG9yIGZvciB0aGUgbW9kdWxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQgaWYgYSBtb2R1bGUgYWxyZWFkeSBleGlzdHMgYnkgdGhhdCBuYW1lLAorICAgKiAgIG9yIGlmIHRoZSBtb2R1bGUgcmVxdWlyZXMgYSB2ZXJzaW9uIG9mIEZyZWVUeXBlIHRoYXQgaXMgdG9vIGdyZWF0LgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0FkZF9Nb2R1bGUoIEZUX0xpYnJhcnkgICAgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaW5kIGEgbW9kdWxlIGJ5IGl0cyBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5ICAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1vZHVsZV9uYW1lIDo6IFRoZSBtb2R1bGUncyBuYW1lIChhcyBhbiBBU0NJSSBzdHJpbmcpLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbW9kdWxlIGhhbmRsZS4gIDB+aWYgbm9uZSB3YXMgZm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlJ3MgaW50ZXJuYWwgbW9kdWxlcyBhcmVuJ3QgZG9jdW1lbnRlZCB2ZXJ5IHdlbGwsIGFuZCB5b3UgICAqLwotICAvKiAgICBzaG91bGQgbG9vayB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X01vZHVsZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRmluZCBhIG1vZHVsZSBieSBpdHMgbmFtZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICBtb2R1bGVfbmFtZSA6OgorICAgKiAgICAgVGhlIG1vZHVsZSdzIG5hbWUgKGFzIGFuIEFTQ0lJIHN0cmluZykuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgQSBtb2R1bGUgaGFuZGxlLiAgMH5pZiBub25lIHdhcyBmb3VuZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRnJlZVR5cGUncyBpbnRlcm5hbCBtb2R1bGVzIGFyZW4ndCBkb2N1bWVudGVkIHZlcnkgd2VsbCwgYW5kIHlvdQorICAgKiAgIHNob3VsZCBsb29rIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgZGV0YWlscy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfTW9kdWxlICkKICAgRlRfR2V0X01vZHVsZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2R1bGVfbmFtZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVtb3ZlX01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVtb3ZlIGEgZ2l2ZW4gbW9kdWxlIGZyb20gYSBsaWJyYXJ5IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlICA6OiBBIGhhbmRsZSB0byBhIG1vZHVsZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG1vZHVsZSBvYmplY3QgaXMgZGVzdHJveWVkIGJ5IHRoZSBmdW5jdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3MuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1JlbW92ZV9Nb2R1bGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJlbW92ZSBhIGdpdmVuIG1vZHVsZSBmcm9tIGEgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtb2R1bGUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgbW9kdWxlIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgbW9kdWxlIG9iamVjdCBpcyBkZXN0cm95ZWQgYnkgdGhlIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9SZW1vdmVfTW9kdWxlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGUgICBtb2R1bGUgKTsKQEAgLTMxNywyMSArMzM5LDIxIEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgbGlicmFyeSA6OgotICAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSB0aGUgbW9kdWxlIGlzIHBhcnQgb2YuCisgICAqICAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLgogICAgKgogICAgKiAgICBtb2R1bGVfbmFtZSA6OgotICAgKiAgICAgICBUaGUgbW9kdWxlIG5hbWUuCisgICAqICAgICAgVGhlIG1vZHVsZSBuYW1lLgogICAgKgogICAgKiAgICBwcm9wZXJ0eV9uYW1lIDo6Ci0gICAqICAgICAgIFRoZSBwcm9wZXJ0eSBuYW1lLiAgUHJvcGVydGllcyBhcmUgZGVzY3JpYmVkIGluIHNlY3Rpb24KLSAgICogICAgICAgQHByb3BlcnRpZXMuCisgICAqICAgICAgVGhlIHByb3BlcnR5IG5hbWUuICBQcm9wZXJ0aWVzIGFyZSBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgKiAgICAgIEBwcm9wZXJ0aWVzLgogICAgKgotICAgKiAgICAgICBOb3RlIHRoYXQgb25seSBhIGZldyBtb2R1bGVzIGhhdmUgcHJvcGVydGllcy4KKyAgICogICAgICBOb3RlIHRoYXQgb25seSBhIGZldyBtb2R1bGVzIGhhdmUgcHJvcGVydGllcy4KICAgICoKICAgICogICAgdmFsdWUgOjoKLSAgICogICAgICAgQSBnZW5lcmljIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgdGhhdCBnaXZlcyB0aGUgbmV3Ci0gICAqICAgICAgIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGB2YWx1ZScgaXMKLSAgICogICAgICAgZGVwZW5kZW50IG9uIHRoZSBwcm9wZXJ0eTsgc2VlIHNlY3Rpb24gQHByb3BlcnRpZXMuCisgICAqICAgICAgQSBnZW5lcmljIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgdGhhdCBnaXZlcyB0aGUgbmV3CisgICAqICAgICAgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiAgVGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYHZhbHVlJyBpcworICAgKiAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0zNjIsOCArMzg0LDggQEAKICAgICogICAgc3ViLXN5c3RlbSBpdHNlbGYgd2l0aCBGVF9Qcm9wZXJ0eV9TZXQ7IHVzZSBARlRDX1Byb3BlcnR5X1NldAogICAgKiAgICBpbnN0ZWFkLgogICAgKgotICAgKiAgQHNpbmNlOgotICAgKiAgICAyLjQuMTEKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4xMQogICAgKgogICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCkBAIC0zODMsMjAgKzQwNSwyMCBAQAogICAgKgogICAgKiBAaW5wdXQ6CiAgICAqICAgIGxpYnJhcnkgOjoKLSAgICogICAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgdGhlIG1vZHVsZSBpcyBwYXJ0IG9mLgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHRoZSBtb2R1bGUgaXMgcGFydCBvZi4KICAgICoKICAgICogICAgbW9kdWxlX25hbWUgOjoKLSAgICogICAgICAgVGhlIG1vZHVsZSBuYW1lLgorICAgKiAgICAgIFRoZSBtb2R1bGUgbmFtZS4KICAgICoKICAgICogICAgcHJvcGVydHlfbmFtZSA6OgotICAgKiAgICAgICBUaGUgcHJvcGVydHkgbmFtZS4gIFByb3BlcnRpZXMgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uCi0gICAqICAgICAgIEBwcm9wZXJ0aWVzLgorICAgKiAgICAgIFRoZSBwcm9wZXJ0eSBuYW1lLiAgUHJvcGVydGllcyBhcmUgZGVzY3JpYmVkIGluIHNlY3Rpb24KKyAgICogICAgICBAcHJvcGVydGllcy4KICAgICoKICAgICogQGlub3V0OgogICAgKiAgICB2YWx1ZSA6OgotICAgKiAgICAgICBBIGdlbmVyaWMgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGdpdmVzIHRoZQotICAgKiAgICAgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuICBUaGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmFsdWUnIGlzCi0gICAqICAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzLgorICAgKiAgICAgIEEgZ2VuZXJpYyBwb2ludGVyIHRvIGEgdmFyaWFibGUgb3Igc3RydWN0dXJlIHRoYXQgZ2l2ZXMgdGhlCisgICAqICAgICAgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiAgVGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYHZhbHVlJyBpcworICAgKiAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC00MjUsOCArNDQ3LDggQEAKICAgICogICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZXZlIHByb3BlcnRpZXMgb2YgdGhlIEZyZWVUeXBlIENhY2hlCiAgICAqICAgIHN1Yi1zeXN0ZW0gd2l0aCBGVF9Qcm9wZXJ0eV9HZXQ7IHVzZSBARlRDX1Byb3BlcnR5X0dldCBpbnN0ZWFkLgogICAgKgotICAgKiAgQHNpbmNlOgotICAgKiAgICAyLjQuMTEKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4xMQogICAgKgogICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCkBAIC00MzYsMTM0ICs0NTgsMTM5IEBACiAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdmFsdWUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9EZWZhdWx0X1Byb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGNvbXBpbGF0aW9uIG9wdGlvbiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgaXMgICAqLwotICAvKiAgICBzZXQsIHRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudCAgICAgKi8KLSAgLyogICAgdmFyaWFibGUgdG8gY29udHJvbCBkcml2ZXIgcHJvcGVydGllcy4gIFNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzICAgICovCi0gIC8qICAgIGZvciBtb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlICAgKi8KLSAgLyogICAgaW50byBtdWx0aXBsZSBsaW5lcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICA8b3B0aW9uYWwgd2hpdGVzcGFjZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgPG1vZHVsZS1uYW1lMT4gJzonICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIDxwcm9wZXJ0eS1uYW1lMT4gJz0nIDxwcm9wZXJ0eS12YWx1ZTE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICA8d2hpdGVzcGFjZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgPG1vZHVsZS1uYW1lMj4gJzonICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIDxwcm9wZXJ0eS1uYW1lMj4gJz0nIDxwcm9wZXJ0eS12YWx1ZTI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXhhbXBsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGUkVFVFlQRV9QUk9QRVJUSUVTPXRydWV0eXBlOmludGVycHJldGVyLXZlcnNpb249MzUgXCAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NldF9EZWZhdWx0X1Byb3BlcnRpZXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIElmIGNvbXBpbGF0aW9uIG9wdGlvbiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgaXMKKyAgICogICBzZXQsIHRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlIHRvIGNvbnRyb2wgZHJpdmVyIHByb3BlcnRpZXMuICBTZWUgc2VjdGlvbiBAcHJvcGVydGllcworICAgKiAgIGZvciBtb3JlLgorICAgKgorICAgKiAgIElmIHRoZSBjb21waWxhdGlvbiBvcHRpb24gaXMgbm90IHNldCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgICAqCisgICAqICAgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGhhcyB0aGUgZm9sbG93aW5nIHN5bnRheCBmb3JtIChicm9rZW4gaGVyZQorICAgKiAgIGludG8gbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuCisgICAqCisgICAqICAgeworICAgKiAgICAgPG9wdGlvbmFsIHdoaXRlc3BhY2U+CisgICAqICAgICA8bW9kdWxlLW5hbWUxPiAnOicKKyAgICogICAgIDxwcm9wZXJ0eS1uYW1lMT4gJz0nIDxwcm9wZXJ0eS12YWx1ZTE+CisgICAqICAgICA8d2hpdGVzcGFjZT4KKyAgICogICAgIDxtb2R1bGUtbmFtZTI+ICc6JworICAgKiAgICAgPHByb3BlcnR5LW5hbWUyPiAnPScgPHByb3BlcnR5LXZhbHVlMj4KKyAgICogICAgIC4uLgorICAgKiAgIH0KKyAgICoKKyAgICogICBFeGFtcGxlOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZSRUVUWVBFX1BST1BFUlRJRVM9dHJ1ZXR5cGU6aW50ZXJwcmV0ZXItdmVyc2lvbj0zNSBcCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmluZz0xIFwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEKKyAgICogICB9CisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfU2V0X0RlZmF1bHRfUHJvcGVydGllcyggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVmZXJlbmNlX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBjb3VudGVyIGdldHMgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiBARlRfTGlicmFyeSAgICAgICAgICovCi0gIC8qICAgIHN0cnVjdHVyZSBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgICAgICAqLwotICAvKiAgICBARlRfRG9uZV9MaWJyYXJ5IHRoZW4gb25seSBkZXN0cm95cyBhIGxpYnJhcnkgaWYgdGhlIGNvdW50ZXIgaXN+MSwgKi8KLSAgLyogICAgb3RoZXJ3aXNlIGl0IHNpbXBseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGhlbHBzIGluIG1hbmFnaW5nIGxpZmUtY3ljbGVzIG9mIHN0cnVjdHVyZXMgdGhhdCAgICAgKi8KLSAgLyogICAgcmVmZXJlbmNlIEBGVF9MaWJyYXJ5IG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi40LjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1JlZmVyZW5jZV9MaWJyYXJ5CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGNvdW50ZXIgZ2V0cyBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuIEBGVF9MaWJyYXJ5CisgICAqICAgc3RydWN0dXJlIGlzIGNyZWF0ZWQuICBUaGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlIGNvdW50ZXIuCisgICAqICAgQEZUX0RvbmVfTGlicmFyeSB0aGVuIG9ubHkgZGVzdHJveXMgYSBsaWJyYXJ5IGlmIHRoZSBjb3VudGVyIGlzfjEsCisgICAqICAgb3RoZXJ3aXNlIGl0IHNpbXBseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaGVscHMgaW4gbWFuYWdpbmcgbGlmZS1jeWNsZXMgb2Ygc3RydWN0dXJlcyB0aGF0CisgICAqICAgcmVmZXJlbmNlIEBGVF9MaWJyYXJ5IG9iamVjdHMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi40LjIKKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9SZWZlcmVuY2VfTGlicmFyeSggRlRfTGlicmFyeSAgbGlicmFyeSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlICAgICovCi0gIC8qICAgIGZyb20gYSBnaXZlbiBtZW1vcnkgb2JqZWN0LiAgSXQgaXMgdGh1cyBwb3NzaWJsZSB0byB1c2UgbGlicmFyaWVzICAqLwotICAvKiAgICB3aXRoIGRpc3RpbmN0IG1lbW9yeSBhbGxvY2F0b3JzIHdpdGhpbiB0aGUgc2FtZSBwcm9ncmFtLiAgTm90ZSwgICAgKi8KLSAgLyogICAgaG93ZXZlciwgdGhhdCB0aGUgdXNlZCBARlRfTWVtb3J5IHN0cnVjdHVyZSBpcyBleHBlY3RlZCB0byByZW1haW4gICovCi0gIC8qICAgIHZhbGlkIGZvciB0aGUgbGlmZSBvZiB0aGUgQEZUX0xpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm9ybWFsbHksIHlvdSB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gKGZvbGxvd2VkIGJ5IGEgY2FsbCB0byAgICAgICovCi0gIC8qICAgIEBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIG9yIGEgc2VyaWVzIG9mIGNhbGxzIHRvIEBGVF9BZGRfTW9kdWxlLCAgICAqLwotICAvKiAgICBhbmQgYSBjYWxsIHRvIEBGVF9TZXRfRGVmYXVsdF9Qcm9wZXJ0aWVzKSBpbnN0ZWFkIG9mICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX0luaXRfRnJlZVR5cGUgdG8gaW5pdGlhbGl6ZSB0aGUgRnJlZVR5cGUgbGlicmFyeS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEb24ndCB1c2UgQEZUX0RvbmVfRnJlZVR5cGUgYnV0IEBGVF9Eb25lX0xpYnJhcnkgdG8gZGVzdHJveSBhICAgICAgKi8KLSAgLyogICAgbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5ICAgOjogQSBoYW5kbGUgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWxpYnJhcnkgOjogQSBwb2ludGVyIHRvIGhhbmRsZSBvZiBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCi0gIC8qICAgIEBGVF9SZWZlcmVuY2VfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9OZXdfTGlicmFyeQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlCisgICAqICAgZnJvbSBhIGdpdmVuIG1lbW9yeSBvYmplY3QuICBJdCBpcyB0aHVzIHBvc3NpYmxlIHRvIHVzZSBsaWJyYXJpZXMKKyAgICogICB3aXRoIGRpc3RpbmN0IG1lbW9yeSBhbGxvY2F0b3JzIHdpdGhpbiB0aGUgc2FtZSBwcm9ncmFtLiAgTm90ZSwKKyAgICogICBob3dldmVyLCB0aGF0IHRoZSB1c2VkIEBGVF9NZW1vcnkgc3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIHJlbWFpbgorICAgKiAgIHZhbGlkIGZvciB0aGUgbGlmZSBvZiB0aGUgQEZUX0xpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIE5vcm1hbGx5LCB5b3Ugd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIChmb2xsb3dlZCBieSBhIGNhbGwgdG8KKyAgICogICBARlRfQWRkX0RlZmF1bHRfTW9kdWxlcyBvciBhIHNlcmllcyBvZiBjYWxscyB0byBARlRfQWRkX01vZHVsZSwKKyAgICogICBhbmQgYSBjYWxsIHRvIEBGVF9TZXRfRGVmYXVsdF9Qcm9wZXJ0aWVzKSBpbnN0ZWFkIG9mCisgICAqICAgQEZUX0luaXRfRnJlZVR5cGUgdG8gaW5pdGlhbGl6ZSB0aGUgRnJlZVR5cGUgbGlicmFyeS4KKyAgICoKKyAgICogICBEb24ndCB1c2UgQEZUX0RvbmVfRnJlZVR5cGUgYnV0IEBGVF9Eb25lX0xpYnJhcnkgdG8gZGVzdHJveSBhCisgICAqICAgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWxpYnJhcnkgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBoYW5kbGUgb2YgYSBuZXcgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICogICBARlRfUmVmZXJlbmNlX0xpYnJhcnkuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X0xpYnJhcnkoIEZUX01lbW9yeSAgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAqYWxpYnJhcnkgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RvbmVfTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERpc2NhcmQgYSBnaXZlbiBsaWJyYXJ5IG9iamVjdC4gIFRoaXMgY2xvc2VzIGFsbCBkcml2ZXJzIGFuZCAgICAgICAqLwotICAvKiAgICBkaXNjYXJkcyBhbGwgcmVzb3VyY2Ugb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgcmVmZXJlbmNlIGNvdW50ZXJzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgKi8KLSAgLyogICAgQEZUX1JlZmVyZW5jZV9MaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0RvbmVfTGlicmFyeQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGlzY2FyZCBhIGdpdmVuIGxpYnJhcnkgb2JqZWN0LiAgVGhpcyBjbG9zZXMgYWxsIGRyaXZlcnMgYW5kCisgICAqICAgZGlzY2FyZHMgYWxsIHJlc291cmNlIG9iamVjdHMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGxpYnJhcnkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICogICBARlRfUmVmZXJlbmNlX0xpYnJhcnkuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfRG9uZV9MaWJyYXJ5KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7CiAKQEAgLTU3Myw1MiArNjAwLDU2IEBACiAgICgqRlRfRGVidWdIb29rX0Z1bmMpKCB2b2lkKiAgYXJnICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZXRfRGVidWdfSG9vayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZXQgYSBkZWJ1ZyBob29rIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgdGhlIGludGVycHJldGVyIG9mIGEgZm9udCAgKi8KLSAgLyogICAgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaG9va19pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGRlYnVnIGhvb2suICBZb3Ugc2hvdWxkIHVzZSB0aGUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdmFsdWVzIGRlZmluZWQgaW4gYGZ0b2Jqcy5oJywgZS5nLiwgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlYnVnX2hvb2sgOjogVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVidWcgdGhlIGludGVycHJldGVyLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEN1cnJlbnRseSwgZm91ciBkZWJ1ZyBob29rIHNsb3RzIGFyZSBhdmFpbGFibGUsIGJ1dCBvbmx5IHR3byAoZm9yICAqLwotICAvKiAgICB0aGUgVHJ1ZVR5cGUgYW5kIHRoZSBUeXBlfjEgaW50ZXJwcmV0ZXIpIGFyZSBkZWZpbmVkLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNpbmNlIHRoZSBpbnRlcm5hbCBoZWFkZXJzIG9mIEZyZWVUeXBlIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkLCAgICAqLwotICAvKiAgICB0aGUgc3ltYm9sIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJyBpc24ndCBhdmFpbGFibGUgcHVibGljbHkuICAgICAgKi8KLSAgLyogICAgVGhpcyBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZCBpbiBhIGZvcnRoY29taW5nIHJlbGVhc2UuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1NldF9EZWJ1Z19Ib29rCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBTZXQgYSBkZWJ1ZyBob29rIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgdGhlIGludGVycHJldGVyIG9mIGEgZm9udAorICAgKiAgIGZvcm1hdC4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhvb2tfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgZGVidWcgaG9vay4gIFlvdSBzaG91bGQgdXNlIHRoZQorICAgKiAgICAgdmFsdWVzIGRlZmluZWQgaW4gYGZ0b2Jqcy5oJywgZS5nLiwKKyAgICogICAgIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJy4KKyAgICoKKyAgICogICBkZWJ1Z19ob29rIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWJ1ZyB0aGUgaW50ZXJwcmV0ZXIuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEN1cnJlbnRseSwgZm91ciBkZWJ1ZyBob29rIHNsb3RzIGFyZSBhdmFpbGFibGUsIGJ1dCBvbmx5IHR3byAoZm9yCisgICAqICAgdGhlIFRydWVUeXBlIGFuZCB0aGUgVHlwZX4xIGludGVycHJldGVyKSBhcmUgZGVmaW5lZC4KKyAgICoKKyAgICogICBTaW5jZSB0aGUgaW50ZXJuYWwgaGVhZGVycyBvZiBGcmVlVHlwZSBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCwKKyAgICogICB0aGUgc3ltYm9sIGBGVF9ERUJVR19IT09LX1RSVUVUWVBFJyBpc24ndCBhdmFpbGFibGUgcHVibGljbHkuCisgICAqICAgVGhpcyBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZCBpbiBhIGZvcnRoY29taW5nIHJlbGVhc2UuCisgICAqLwogICBGVF9FWFBPUlQoIHZvaWQgKQogICBGVF9TZXRfRGVidWdfSG9vayggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAgaG9va19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgIEZUX0RlYnVnSG9va19GdW5jICBkZWJ1Z19ob29rICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBZGQgdGhlIHNldCBvZiBkZWZhdWx0IGRyaXZlcnMgdG8gYSBnaXZlbiBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHlvdSBjcmVhdGUgYSBsaWJyYXJ5IG9iamVjdCB3aXRoICAgICAgICAgICovCi0gIC8qICAgIEBGVF9OZXdfTGlicmFyeSAodXN1YWxseSB0byBwbHVnIGEgY3VzdG9tIG1lbW9yeSBtYW5hZ2VyKS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBuZXcgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBZGQgdGhlIHNldCBvZiBkZWZhdWx0IGRyaXZlcnMgdG8gYSBnaXZlbiBsaWJyYXJ5IG9iamVjdC4KKyAgICogICBUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4geW91IGNyZWF0ZSBhIGxpYnJhcnkgb2JqZWN0IHdpdGgKKyAgICogICBARlRfTmV3X0xpYnJhcnkgKHVzdWFsbHkgdG8gcGx1ZyBhIGN1c3RvbSBtZW1vcnkgbWFuYWdlcikuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX0FkZF9EZWZhdWx0X01vZHVsZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIApAQCAtNjQ0LDI4ICs2NzUsMjggQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogIEBlbnVtOgotICAgKiAgICAgRlRfVHJ1ZVR5cGVFbmdpbmVUeXBlCisgICAqIEBlbnVtOgorICAgKiAgICBGVF9UcnVlVHlwZUVuZ2luZVR5cGUKICAgICoKLSAgICogIEBkZXNjcmlwdGlvbjoKLSAgICogICAgIEEgbGlzdCBvZiB2YWx1ZXMgZGVzY3JpYmluZyB3aGljaCBraW5kIG9mIFRydWVUeXBlIGJ5dGVjb2RlCi0gICAqICAgICBlbmdpbmUgaXMgaW1wbGVtZW50ZWQgaW4gYSBnaXZlbiBGVF9MaWJyYXJ5IGluc3RhbmNlLiAgSXQgaXMgdXNlZAotICAgKiAgICAgYnkgdGhlIEBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUgZnVuY3Rpb24uCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgQSBsaXN0IG9mIHZhbHVlcyBkZXNjcmliaW5nIHdoaWNoIGtpbmQgb2YgVHJ1ZVR5cGUgYnl0ZWNvZGUKKyAgICogICAgZW5naW5lIGlzIGltcGxlbWVudGVkIGluIGEgZ2l2ZW4gRlRfTGlicmFyeSBpbnN0YW5jZS4gIEl0IGlzIHVzZWQKKyAgICogICAgYnkgdGhlIEBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUgZnVuY3Rpb24uCiAgICAqCi0gICAqICBAdmFsdWVzOgotICAgKiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfTk9ORSA6OgotICAgKiAgICAgICBUaGUgbGlicmFyeSBkb2Vzbid0IGltcGxlbWVudCBhbnkga2luZCBvZiBieXRlY29kZSBpbnRlcnByZXRlci4KKyAgICogQHZhbHVlczoKKyAgICogICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfTk9ORSA6OgorICAgKiAgICAgIFRoZSBsaWJyYXJ5IGRvZXNuJ3QgaW1wbGVtZW50IGFueSBraW5kIG9mIGJ5dGVjb2RlIGludGVycHJldGVyLgogICAgKgotICAgKiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfVU5QQVRFTlRFRCA6OgotICAgKiAgICAgICBEZXByZWNhdGVkIGFuZCByZW1vdmVkLgorICAgKiAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9VTlBBVEVOVEVEIDo6CisgICAqICAgICAgRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZC4KICAgICoKLSAgICogICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1BBVEVOVEVEIDo6Ci0gICAqICAgICAgIFRoZSBsaWJyYXJ5IGltcGxlbWVudHMgYSBieXRlY29kZSBpbnRlcnByZXRlciB0aGF0IGNvdmVycwotICAgKiAgICAgICB0aGUgZnVsbCBpbnN0cnVjdGlvbiBzZXQgb2YgdGhlIFRydWVUeXBlIHZpcnR1YWwgbWFjaGluZSAodGhpcwotICAgKiAgICAgICB3YXMgZ292ZXJuZWQgYnkgcGF0ZW50cyB1bnRpbCBNYXkgMjAxMCwgaGVuY2UgdGhlIG5hbWUpLgorICAgKiAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRCA6OgorICAgKiAgICAgIFRoZSBsaWJyYXJ5IGltcGxlbWVudHMgYSBieXRlY29kZSBpbnRlcnByZXRlciB0aGF0IGNvdmVycworICAgKiAgICAgIHRoZSBmdWxsIGluc3RydWN0aW9uIHNldCBvZiB0aGUgVHJ1ZVR5cGUgdmlydHVhbCBtYWNoaW5lICh0aGlzCisgICAqICAgICAgd2FzIGdvdmVybmVkIGJ5IHBhdGVudHMgdW50aWwgTWF5IDIwMTAsIGhlbmNlIHRoZSBuYW1lKS4KICAgICoKLSAgICogIEBzaW5jZToKLSAgICogICAgIDIuMgorICAgKiBAc2luY2U6CisgICAqICAgIDIuMgogICAgKgogICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9UcnVlVHlwZUVuZ2luZVR5cGVfCkBAIC02NzksMjIgKzcxMCwyMiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiAgQGZ1bmM6Ci0gICAqICAgICBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUKICAgICoKLSAgICogIEBkZXNjcmlwdGlvbjoKLSAgICogICAgIFJldHVybiBhbiBARlRfVHJ1ZVR5cGVFbmdpbmVUeXBlIHZhbHVlIHRvIGluZGljYXRlIHdoaWNoIGxldmVsIG9mCi0gICAqICAgICB0aGUgVHJ1ZVR5cGUgdmlydHVhbCBtYWNoaW5lIGEgZ2l2ZW4gbGlicmFyeSBpbnN0YW5jZSBzdXBwb3J0cy4KKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBSZXR1cm4gYW4gQEZUX1RydWVUeXBlRW5naW5lVHlwZSB2YWx1ZSB0byBpbmRpY2F0ZSB3aGljaCBsZXZlbCBvZgorICAgKiAgICB0aGUgVHJ1ZVR5cGUgdmlydHVhbCBtYWNoaW5lIGEgZ2l2ZW4gbGlicmFyeSBpbnN0YW5jZSBzdXBwb3J0cy4KICAgICoKLSAgICogIEBpbnB1dDoKLSAgICogICAgIGxpYnJhcnkgOjoKLSAgICogICAgICAgQSBsaWJyYXJ5IGluc3RhbmNlLgorICAgKiBAaW5wdXQ6CisgICAqICAgIGxpYnJhcnkgOjoKKyAgICogICAgICBBIGxpYnJhcnkgaW5zdGFuY2UuCiAgICAqCi0gICAqICBAcmV0dXJuOgotICAgKiAgICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIGxldmVsIGlzIHN1cHBvcnRlZC4KKyAgICogQHJldHVybjoKKyAgICogICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIGxldmVsIGlzIHN1cHBvcnRlZC4KICAgICoKLSAgICogIEBzaW5jZToKLSAgICogICAgIDIuMgorICAgKiBAc2luY2U6CisgICAqICAgIDIuMgogICAgKgogICAgKi8KICAgRlRfRVhQT1JUKCBGVF9UcnVlVHlwZUVuZ2luZVR5cGUgKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oCmluZGV4IGUwZmMxMzEuLjY2MWIwZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKQEAgLTEsOTQgKzEsOTQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bW9kZXJyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBtb2R1bGUgZXJyb3Igb2Zmc2V0cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bW9kZXJyLmgKKyAqCisgKiAgIEZyZWVUeXBlIG1vZHVsZSBlcnJvciBvZmZzZXRzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgRnJlZVR5cGUgbW9kdWxlIGVycm9yIGNvZGVzLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgdGhlIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgaW4gYGZ0b3B0aW9uLmgnIGlzICAgICovCi0gIC8qIHNldCwgdGhlIGxvd2VyIGJ5dGUgb2YgYW4gZXJyb3IgdmFsdWUgaWRlbnRpZmllcyB0aGUgZXJyb3IgY29kZSBhcyAgICAqLwotICAvKiB1c3VhbC4gIEluIGFkZGl0aW9uLCB0aGUgaGlnaGVyIGJ5dGUgaWRlbnRpZmllcyB0aGUgbW9kdWxlLiAgRm9yICAgICAgKi8KLSAgLyogZXhhbXBsZSwgdGhlIGVycm9yIGBGVF9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MDAwMywgdGhlICovCi0gIC8qIGVycm9yIGBUVF9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MTMwMywgdGhlIGVycm9yICAgICAgICAqLwotICAvKiBgVDFfRXJyX0ludmFsaWRfRmlsZV9Gb3JtYXQnIGhhcyB2YWx1ZSAweDE0MDMsIGV0Yy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCBgRlRfRXJyX09rJywgYFRUX0Vycl9PaycsIGV0Yy4gYXJlIGFsd2F5cyBlcXVhbCB0byB6ZXJvLCAgICAqLwotICAvKiBpbmNsdWRpbmcgdGhlIGhpZ2ggYnl0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElmIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgaXNuJ3Qgc2V0LCB0aGUgaGlnaGVyIGJ5dGUgb2YgICAqLwotICAvKiBhbiBlcnJvciB2YWx1ZSBpcyBzZXQgdG8gemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRvIGhpZGUgdGhlIHZhcmlvdXMgYFhYWF9FcnJfJyBwcmVmaXhlcyBpbiB0aGUgc291cmNlIGNvZGUsIEZyZWVUeXBlICAqLwotICAvKiBwcm92aWRlcyBzb21lIG1hY3JvcyBpbiBgZnR0eXBlcy5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJSKCBlcnIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgQWRkIGN1cnJlbnQgZXJyb3IgbW9kdWxlIHByZWZpeCAoYXMgZGVmaW5lZCB3aXRoIHRoZSAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGBGVF9FUlJfUFJFRklYJyBtYWNybykgdG8gYGVycicuICBGb3IgZXhhbXBsZSwgaW4gdGhlIEJERiBtb2R1bGUgICovCi0gIC8qICAgICB0aGUgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfT3V0bGluZSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgZXhwYW5kcyB0byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIGVycm9yID0gQkRGX0Vycl9JbnZhbGlkX091dGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZvciBzaW1wbGljaXR5LCB5b3UgY2FuIGFsd2F5cyB1c2UgYEZUX0Vycl9PaycgZGlyZWN0bHkgaW5zdGVhZCAgICovCi0gIC8qICAgICBvZiBgRlRfRVJSKCBPayApJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGVF9FUlJfRVEoIGVycmNvZGUsIGVyciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJSX05FUSggZXJyY29kZSwgZXJyICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgQ29tcGFyZSBlcnJvciBjb2RlIGBlcnJjb2RlJyB3aXRoIHRoZSBlcnJvciBgZXJyJyBmb3IgZXF1YWxpdHkgICAgKi8KLSAgLyogICAgIGFuZCBpbmVxdWFsaXR5LCByZXNwZWN0aXZlbHkuICBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBpZiAoIEZUX0VSUl9FUSggZXJyb3IsIEludmFsaWRfT3V0bGluZSApICkgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVXNpbmcgdGhpcyBtYWNybyB5b3UgZG9uJ3QgaGF2ZSB0byB0aGluayBhYm91dCBlcnJvciBwcmVmaXhlcy4gICAgKi8KLSAgLyogICAgIE9mIGNvdXJzZSwgaWYgbW9kdWxlIGVycm9ycyBhcmUgbm90IGFjdGl2ZSwgdGhlIGFib3ZlIGV4YW1wbGUgaXMgICovCi0gIC8qICAgICB0aGUgc2FtZSBhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaWYgKCBlcnJvciA9PSBGVF9FcnJfSW52YWxpZF9PdXRsaW5lICkgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBGVF9FUlJPUl9CQVNFKCBlcnJjb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVJST1JfTU9EVUxFKCBlcnJjb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgR2V0IGJhc2UgZXJyb3IgYW5kIG1vZHVsZSBlcnJvciBjb2RlLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBhIG1vZHVsZSBlcnJvciBtZXNzYWdlIHRhYmxlIGVhc2lseSAgICAgKi8KLSAgLyogd2l0aCBzb21ldGhpbmcgbGlrZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICN1bmRlZiBGVE1PREVSUl9IXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAjZGVmaW5lIEZUX01PREVSUkRFRiggZSwgdiwgcyApICB7IEZUX01vZF9FcnJfICMjIGUsIHMgfSwgICAgICAgICAqLwotICAvKiAgICAgI2RlZmluZSBGVF9NT0RFUlJfU1RBUlRfTElTVCAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICNkZWZpbmUgRlRfTU9ERVJSX0VORF9MSVNUICAgICAgIHsgMCwgMCB9IH07ICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgY29uc3Qgc3RydWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIGludCAgICAgICAgICBtb2RfZXJyX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBjb25zdCBjaGFyKiAgbW9kX2Vycl9tc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIH0gZnRfbW9kX2Vycm9yc1tdID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgRnJlZVR5cGUgbW9kdWxlIGVycm9yIGNvZGVzLgorICAgKgorICAgKiBJZiB0aGUgbWFjcm8gRlRfQ09ORklHX09QVElPTl9VU0VfTU9EVUxFX0VSUk9SUyBpbiBgZnRvcHRpb24uaCcgaXMKKyAgICogc2V0LCB0aGUgbG93ZXIgYnl0ZSBvZiBhbiBlcnJvciB2YWx1ZSBpZGVudGlmaWVzIHRoZSBlcnJvciBjb2RlIGFzCisgICAqIHVzdWFsLiAgSW4gYWRkaXRpb24sIHRoZSBoaWdoZXIgYnl0ZSBpZGVudGlmaWVzIHRoZSBtb2R1bGUuICBGb3IKKyAgICogZXhhbXBsZSwgdGhlIGVycm9yIGBGVF9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MDAwMywgdGhlCisgICAqIGVycm9yIGBUVF9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MTMwMywgdGhlIGVycm9yCisgICAqIGBUMV9FcnJfSW52YWxpZF9GaWxlX0Zvcm1hdCcgaGFzIHZhbHVlIDB4MTQwMywgZXRjLgorICAgKgorICAgKiBOb3RlIHRoYXQgYEZUX0Vycl9PaycsIGBUVF9FcnJfT2snLCBldGMuIGFyZSBhbHdheXMgZXF1YWwgdG8gemVybywKKyAgICogaW5jbHVkaW5nIHRoZSBoaWdoIGJ5dGUuCisgICAqCisgICAqIElmIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgaXNuJ3Qgc2V0LCB0aGUgaGlnaGVyIGJ5dGUgb2YKKyAgICogYW4gZXJyb3IgdmFsdWUgaXMgc2V0IHRvIHplcm8uCisgICAqCisgICAqIFRvIGhpZGUgdGhlIHZhcmlvdXMgYFhYWF9FcnJfJyBwcmVmaXhlcyBpbiB0aGUgc291cmNlIGNvZGUsIEZyZWVUeXBlCisgICAqIHByb3ZpZGVzIHNvbWUgbWFjcm9zIGluIGBmdHR5cGVzLmgnLgorICAgKgorICAgKiAgIEZUX0VSUiggZXJyICkKKyAgICogICAgIEFkZCBjdXJyZW50IGVycm9yIG1vZHVsZSBwcmVmaXggKGFzIGRlZmluZWQgd2l0aCB0aGUKKyAgICogICAgIGBGVF9FUlJfUFJFRklYJyBtYWNybykgdG8gYGVycicuICBGb3IgZXhhbXBsZSwgaW4gdGhlIEJERiBtb2R1bGUKKyAgICogICAgIHRoZSBsaW5lCisgICAqCisgICAqICAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX091dGxpbmUgKTsKKyAgICoKKyAgICogICAgIGV4cGFuZHMgdG8KKyAgICoKKyAgICogICAgICAgZXJyb3IgPSBCREZfRXJyX0ludmFsaWRfT3V0bGluZTsKKyAgICoKKyAgICogICAgIEZvciBzaW1wbGljaXR5LCB5b3UgY2FuIGFsd2F5cyB1c2UgYEZUX0Vycl9PaycgZGlyZWN0bHkgaW5zdGVhZAorICAgKiAgICAgb2YgYEZUX0VSUiggT2sgKScuCisgICAqCisgICAqICAgRlRfRVJSX0VRKCBlcnJjb2RlLCBlcnIgKQorICAgKiAgIEZUX0VSUl9ORVEoIGVycmNvZGUsIGVyciApCisgICAqICAgICBDb21wYXJlIGVycm9yIGNvZGUgYGVycmNvZGUnIHdpdGggdGhlIGVycm9yIGBlcnInIGZvciBlcXVhbGl0eQorICAgKiAgICAgYW5kIGluZXF1YWxpdHksIHJlc3BlY3RpdmVseS4gIEV4YW1wbGU6CisgICAqCisgICAqICAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgSW52YWxpZF9PdXRsaW5lICkgKQorICAgKiAgICAgICAgIC4uLgorICAgKgorICAgKiAgICAgVXNpbmcgdGhpcyBtYWNybyB5b3UgZG9uJ3QgaGF2ZSB0byB0aGluayBhYm91dCBlcnJvciBwcmVmaXhlcy4KKyAgICogICAgIE9mIGNvdXJzZSwgaWYgbW9kdWxlIGVycm9ycyBhcmUgbm90IGFjdGl2ZSwgdGhlIGFib3ZlIGV4YW1wbGUgaXMKKyAgICogICAgIHRoZSBzYW1lIGFzCisgICAqCisgICAqICAgICAgIGlmICggZXJyb3IgPT0gRlRfRXJyX0ludmFsaWRfT3V0bGluZSApCisgICAqICAgICAgICAgLi4uCisgICAqCisgICAqICAgRlRfRVJST1JfQkFTRSggZXJyY29kZSApCisgICAqICAgRlRfRVJST1JfTU9EVUxFKCBlcnJjb2RlICkKKyAgICogICAgIEdldCBiYXNlIGVycm9yIGFuZCBtb2R1bGUgZXJyb3IgY29kZSwgcmVzcGVjdGl2ZWx5LgorICAgKgorICAgKgorICAgKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBhIG1vZHVsZSBlcnJvciBtZXNzYWdlIHRhYmxlIGVhc2lseQorICAgKiB3aXRoIHNvbWV0aGluZyBsaWtlCisgICAqCisgICAqIHsKKyAgICogICAjdW5kZWYgRlRNT0RFUlJfSF8KKyAgICogICAjZGVmaW5lIEZUX01PREVSUkRFRiggZSwgdiwgcyApICB7IEZUX01vZF9FcnJfICMjIGUsIHMgfSwKKyAgICogICAjZGVmaW5lIEZUX01PREVSUl9TVEFSVF9MSVNUICAgICB7CisgICAqICAgI2RlZmluZSBGVF9NT0RFUlJfRU5EX0xJU1QgICAgICAgeyAwLCAwIH0gfTsKKyAgICoKKyAgICogICBjb25zdCBzdHJ1Y3QKKyAgICogICB7CisgICAqICAgICBpbnQgICAgICAgICAgbW9kX2Vycl9vZmZzZXQ7CisgICAqICAgICBjb25zdCBjaGFyKiAgbW9kX2Vycl9tc2cKKyAgICogICB9IGZ0X21vZF9lcnJvcnNbXSA9CisgICAqCisgICAqICAgI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICisgICAqIH0KKyAgICoKKyAgICovCiAKIAogI2lmbmRlZiBGVE1PREVSUl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaAppbmRleCAyNjczMWMyLi42OThiNDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaApAQCAtMSwzMCArMSwzMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRvdHZhbC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRvdHZhbC5oCisgKgorICogICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgT3BlblR5cGUgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogV2FybmluZzogVGhpcyBtb2R1bGUgbWlnaHQgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbGlicmFyeSBpbiB0aGUgICAgICAgKi8KLS8qICAgICAgICAgIGZ1dHVyZSB0byBhdm9pZCBhIHRpZ2h0IGRlcGVuZGVuY3kgYmV0d2VlbiBGcmVlVHlwZSBhbmQgdGhlICAgICovCi0vKiAgICAgICAgICBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgorICogV2FybmluZzogVGhpcyBtb2R1bGUgbWlnaHQgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbGlicmFyeSBpbiB0aGUKKyAqICAgICAgICAgIGZ1dHVyZSB0byBhdm9pZCBhIHRpZ2h0IGRlcGVuZGVuY3kgYmV0d2VlbiBGcmVlVHlwZSBhbmQgdGhlCisgKiAgICAgICAgICBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgorICoKKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUT1RWQUxfSF8KQEAgLTQzLDYyICs0Myw2MiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdF92YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPcGVuVHlwZSBWYWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBBUEkgdG8gdmFsaWRhdGUgT3BlblR5cGUgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyB0byB2YWxpZGF0ZSAgICAgKi8KLSAgLyogICAgc29tZSBPcGVuVHlwZSB0YWJsZXMgKEJBU0UsIEdERUYsIEdQT1MsIEdTVUIsIEpTVEYsIE1BVEgpLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3JkZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3BlblR5cGVfVmFsaWRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09wZW5UeXBlX0ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVkFMSURBVEVfT1RYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIG90X3ZhbGlkYXRpb24KKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIE9wZW5UeXBlIFZhbGlkYXRpb24KKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIEFuIEFQSSB0byB2YWxpZGF0ZSBPcGVuVHlwZSB0YWJsZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucyB0byB2YWxpZGF0ZQorICAgKiAgIHNvbWUgT3BlblR5cGUgdGFibGVzIChCQVNFLCBHREVGLCBHUE9TLCBHU1VCLCBKU1RGLCBNQVRIKS4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIEZUX09wZW5UeXBlX1ZhbGlkYXRlCisgICAqICAgRlRfT3BlblR5cGVfRnJlZQorICAgKgorICAgKiAgIEZUX1ZBTElEQVRFX09UWFhYCisgICAqCisgICAqLwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGVudW06Ci0gICogICAgRlRfVkFMSURBVEVfT1RYWFgKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX09wZW5UeXBlX1ZhbGlkYXRlIHRvCi0gICogICAgaW5kaWNhdGUgd2hpY2ggT3BlblR5cGUgdGFibGVzIHNob3VsZCBiZSB2YWxpZGF0ZWQuCi0gICoKLSAgKiBAdmFsdWVzOgotICAqICAgIEZUX1ZBTElEQVRFX0JBU0UgOjoKLSAgKiAgICAgIFZhbGlkYXRlIEJBU0UgdGFibGUuCi0gICoKLSAgKiAgICBGVF9WQUxJREFURV9HREVGIDo6Ci0gICogICAgICBWYWxpZGF0ZSBHREVGIHRhYmxlLgotICAqCi0gICogICAgRlRfVkFMSURBVEVfR1BPUyA6OgotICAqICAgICAgVmFsaWRhdGUgR1BPUyB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX0dTVUIgOjoKLSAgKiAgICAgIFZhbGlkYXRlIEdTVUIgdGFibGUuCi0gICoKLSAgKiAgICBGVF9WQUxJREFURV9KU1RGIDo6Ci0gICogICAgICBWYWxpZGF0ZSBKU1RGIHRhYmxlLgotICAqCi0gICogICAgRlRfVkFMSURBVEVfTUFUSCA6OgotICAqICAgICAgVmFsaWRhdGUgTUFUSCB0YWJsZS4KLSAgKgotICAqICAgIEZUX1ZBTElEQVRFX09UIDo6Ci0gICogICAgICBWYWxpZGF0ZSBhbGwgT3BlblR5cGUgdGFibGVzIChCQVNFLCBHREVGLCBHUE9TLCBHU1VCLCBKU1RGLCBNQVRIKS4KLSAgKgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICAgRlRfVkFMSURBVEVfT1RYWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBBIGxpc3Qgb2YgYml0LWZpZWxkIGNvbnN0YW50cyB1c2VkIHdpdGggQEZUX09wZW5UeXBlX1ZhbGlkYXRlIHRvCisgICAqICAgIGluZGljYXRlIHdoaWNoIE9wZW5UeXBlIHRhYmxlcyBzaG91bGQgYmUgdmFsaWRhdGVkLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgICBGVF9WQUxJREFURV9CQVNFIDo6CisgICAqICAgICAgVmFsaWRhdGUgQkFTRSB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfR0RFRiA6OgorICAgKiAgICAgIFZhbGlkYXRlIEdERUYgdGFibGUuCisgICAqCisgICAqICAgIEZUX1ZBTElEQVRFX0dQT1MgOjoKKyAgICogICAgICBWYWxpZGF0ZSBHUE9TIHRhYmxlLgorICAgKgorICAgKiAgICBGVF9WQUxJREFURV9HU1VCIDo6CisgICAqICAgICAgVmFsaWRhdGUgR1NVQiB0YWJsZS4KKyAgICoKKyAgICogICAgRlRfVkFMSURBVEVfSlNURiA6OgorICAgKiAgICAgIFZhbGlkYXRlIEpTVEYgdGFibGUuCisgICAqCisgICAqICAgIEZUX1ZBTElEQVRFX01BVEggOjoKKyAgICogICAgICBWYWxpZGF0ZSBNQVRIIHRhYmxlLgorICAgKgorICAgKiAgICBGVF9WQUxJREFURV9PVCA6OgorICAgKiAgICAgIFZhbGlkYXRlIGFsbCBPcGVuVHlwZSB0YWJsZXMgKEJBU0UsIEdERUYsIEdQT1MsIEdTVUIsIEpTVEYsIE1BVEgpLgorICAgKgorICAgKi8KICNkZWZpbmUgRlRfVkFMSURBVEVfQkFTRSAgMHgwMTAwCiAjZGVmaW5lIEZUX1ZBTElEQVRFX0dERUYgIDB4MDIwMAogI2RlZmluZSBGVF9WQUxJREFURV9HUE9TICAweDA0MDAKQEAgLTExMyw1MyArMTEzLDU0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0pTVEYgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX01BVEggKQogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBmdW5jdGlvbjoKLSAgKiAgICBGVF9PcGVuVHlwZV9WYWxpZGF0ZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIFZhbGlkYXRlIHZhcmlvdXMgT3BlblR5cGUgdGFibGVzIHRvIGFzc3VyZSB0aGF0IGFsbCBvZmZzZXRzIGFuZAotICAqICAgIGluZGljZXMgYXJlIHZhbGlkLiAgVGhlIGlkZWEgaXMgdGhhdCBhIGhpZ2hlci1sZXZlbCBsaWJyYXJ5IHRoYXQKLSAgKiAgICBhY3R1YWxseSBkb2VzIHRoZSB0ZXh0IGxheW91dCBjYW4gYWNjZXNzIHRob3NlIHRhYmxlcyB3aXRob3V0Ci0gICogICAgZXJyb3IgY2hlY2tpbmcgKHdoaWNoIGNhbiBiZSBxdWl0ZSB0aW1lIGNvbnN1bWluZykuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICAgZmFjZSA6OgotICAqICAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgotICAqCi0gICogICAgdmFsaWRhdGlvbl9mbGFncyA6OgotICAqICAgICAgIEEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSB0YWJsZXMgdG8gYmUgdmFsaWRhdGVkLiAgU2VlCi0gICogICAgICAgQEZUX1ZBTElEQVRFX09UWFhYIGZvciBwb3NzaWJsZSB2YWx1ZXMuCi0gICoKLSAgKiBAb3V0cHV0OgotICAqICAgIEJBU0VfdGFibGUgOjoKLSAgKiAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEJBU0UgdGFibGUuCi0gICoKLSAgKiAgICBHREVGX3RhYmxlIDo6Ci0gICogICAgICAgQSBwb2ludGVyIHRvIHRoZSBHREVGIHRhYmxlLgotICAqCi0gICogICAgR1BPU190YWJsZSA6OgotICAqICAgICAgIEEgcG9pbnRlciB0byB0aGUgR1BPUyB0YWJsZS4KLSAgKgotICAqICAgIEdTVUJfdGFibGUgOjoKLSAgKiAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEdTVUIgdGFibGUuCi0gICoKLSAgKiAgICBKU1RGX3RhYmxlIDo6Ci0gICogICAgICAgQSBwb2ludGVyIHRvIHRoZSBKU1RGIHRhYmxlLgotICAqCi0gICogQHJldHVybjoKLSAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCi0gICoKLSAgKiBAbm90ZToKLSAgKiAgIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIE9wZW5UeXBlIGZvbnRzLCByZXR1cm5pbmcgYW4gZXJyb3IKLSAgKiAgIG90aGVyd2lzZS4KLSAgKgotICAqICAgQWZ0ZXIgdXNlLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGRlYWxsb2NhdGUgdGhlIGZpdmUgdGFibGVzIHdpdGgKLSAgKiAgIEBGVF9PcGVuVHlwZV9GcmVlLiAgQSBOVUxMIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBlaXRoZXIKLSAgKiAgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGZvbnQsIG9yIHRoZSBhcHBsaWNhdGlvbiBoYXNuJ3QgYXNrZWQgZm9yCi0gICogICB2YWxpZGF0aW9uLgotICAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICAgRlRfT3BlblR5cGVfVmFsaWRhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBWYWxpZGF0ZSB2YXJpb3VzIE9wZW5UeXBlIHRhYmxlcyB0byBhc3N1cmUgdGhhdCBhbGwgb2Zmc2V0cyBhbmQKKyAgICogICAgaW5kaWNlcyBhcmUgdmFsaWQuICBUaGUgaWRlYSBpcyB0aGF0IGEgaGlnaGVyLWxldmVsIGxpYnJhcnkgdGhhdAorICAgKiAgICBhY3R1YWxseSBkb2VzIHRoZSB0ZXh0IGxheW91dCBjYW4gYWNjZXNzIHRob3NlIHRhYmxlcyB3aXRob3V0CisgICAqICAgIGVycm9yIGNoZWNraW5nICh3aGljaCBjYW4gYmUgcXVpdGUgdGltZSBjb25zdW1pbmcpLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KKyAgICoKKyAgICogICAgdmFsaWRhdGlvbl9mbGFncyA6OgorICAgKiAgICAgIEEgYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIHRoZSB0YWJsZXMgdG8gYmUgdmFsaWRhdGVkLiAgU2VlCisgICAqICAgICAgQEZUX1ZBTElEQVRFX09UWFhYIGZvciBwb3NzaWJsZSB2YWx1ZXMuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIEJBU0VfdGFibGUgOjoKKyAgICogICAgICBBIHBvaW50ZXIgdG8gdGhlIEJBU0UgdGFibGUuCisgICAqCisgICAqICAgIEdERUZfdGFibGUgOjoKKyAgICogICAgICBBIHBvaW50ZXIgdG8gdGhlIEdERUYgdGFibGUuCisgICAqCisgICAqICAgIEdQT1NfdGFibGUgOjoKKyAgICogICAgICBBIHBvaW50ZXIgdG8gdGhlIEdQT1MgdGFibGUuCisgICAqCisgICAqICAgIEdTVUJfdGFibGUgOjoKKyAgICogICAgICBBIHBvaW50ZXIgdG8gdGhlIEdTVUIgdGFibGUuCisgICAqCisgICAqICAgIEpTVEZfdGFibGUgOjoKKyAgICogICAgICBBIHBvaW50ZXIgdG8gdGhlIEpTVEYgdGFibGUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggT3BlblR5cGUgZm9udHMsIHJldHVybmluZyBhbiBlcnJvcgorICAgKiAgIG90aGVyd2lzZS4KKyAgICoKKyAgICogICBBZnRlciB1c2UsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgZml2ZSB0YWJsZXMgd2l0aAorICAgKiAgIEBGVF9PcGVuVHlwZV9GcmVlLiAgQSBOVUxMIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSB0YWJsZSBlaXRoZXIKKyAgICogICBkb2Vzbid0IGV4aXN0IGluIHRoZSBmb250LCBvciB0aGUgYXBwbGljYXRpb24gaGFzbid0IGFza2VkIGZvcgorICAgKiAgIHZhbGlkYXRpb24uCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3BlblR5cGVfVmFsaWRhdGUoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgdmFsaWRhdGlvbl9mbGFncywKQEAgLTE2OSwzMCArMTcwLDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkdTVUJfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKkpTVEZfdGFibGUgKTsKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICAgRlRfT3BlblR5cGVfRnJlZQotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIEZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgT3BlblR5cGUgdmFsaWRhdG9yLgotICAqCi0gICogQGlucHV0OgotICAqICAgIGZhY2UgOjoKLSAgKiAgICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KLSAgKgotICAqICAgIHRhYmxlIDo6Ci0gICogICAgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCBieQotICAqICAgICAgIEBGVF9PcGVuVHlwZV9WYWxpZGF0ZS4KLSAgKgotICAqIEBub3RlOgotICAqICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgdG8gZnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieQotICAqICAgQEZUX09wZW5UeXBlX1ZhbGlkYXRlIG9ubHkuCi0gICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9PcGVuVHlwZV9GcmVlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgRnJlZSB0aGUgYnVmZmVyIGFsbG9jYXRlZCBieSBPcGVuVHlwZSB2YWxpZGF0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiAgICB0YWJsZSA6OgorICAgKiAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQgYnkKKyAgICogICAgICBARlRfT3BlblR5cGVfVmFsaWRhdGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIGZyZWUgdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKyAgICogICBARlRfT3BlblR5cGVfVmFsaWRhdGUgb25seS4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX09wZW5UeXBlX0ZyZWUoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGUgKTsKIAorCiAgIC8qICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaAppbmRleCA4OTM4OWE0Li45ZGFlMTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRvdXRsbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFN1cHBvcnQgZm9yIHRoZSBGVF9PdXRsaW5lIHR5cGUgdXNlZCB0byBzdG9yZSBnbHlwaCBzaGFwZXMgb2YgICAgICAgICovCi0vKiAgICBtb3N0IHNjYWxhYmxlIGZvbnQgZm9ybWF0cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0b3V0bG4uaAorICoKKyAqICAgU3VwcG9ydCBmb3IgdGhlIEZUX091dGxpbmUgdHlwZSB1c2VkIHRvIHN0b3JlIGdseXBoIHNoYXBlcyBvZgorICogICBtb3N0IHNjYWxhYmxlIGZvbnQgZm9ybWF0cyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRPVVRMTl9IXwpAQCAtMzQsMTI3ICszNCwxMzQgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZV9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3V0bGluZSBQcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnVuY3Rpb25zIHRvIGNyZWF0ZSwgdHJhbnNmb3JtLCBhbmQgcmVuZGVyIHZlY3RvcmlhbCBnbHlwaCBpbWFnZXMuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHJvdXRpbmVzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZXN0cm95IHNjYWxhYmxlICovCi0gIC8qICAgIGdseXBoIGltYWdlcyBrbm93biBhcyBgb3V0bGluZXMnLiAgVGhlc2UgY2FuIGFsc28gYmUgbWVhc3VyZWQsICAgICAqLwotICAvKiAgICB0cmFuc2Zvcm1lZCwgYW5kIGNvbnZlcnRlZCBpbnRvIGJpdG1hcHMgYW5kIHBpeG1hcHMuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9OZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0NvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9UcmFuc2xhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0VtYm9sZGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9FbWJvbGRlblhZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfUmV2ZXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0NoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfR2V0X0NCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0dldF9CQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfR2V0X0JpdG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX1JlbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9EZWNvbXBvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRnVuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX01vdmVUb0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9MaW5lVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0N1YmljVG9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09yaWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX09VVExJTkVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBvdXRsaW5lX3Byb2Nlc3NpbmcKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIE91dGxpbmUgUHJvY2Vzc2luZworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgRnVuY3Rpb25zIHRvIGNyZWF0ZSwgdHJhbnNmb3JtLCBhbmQgcmVuZGVyIHZlY3RvcmlhbCBnbHlwaCBpbWFnZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgcm91dGluZXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgc2NhbGFibGUKKyAgICogICBnbHlwaCBpbWFnZXMga25vd24gYXMgYG91dGxpbmVzJy4gIFRoZXNlIGNhbiBhbHNvIGJlIG1lYXN1cmVkLAorICAgKiAgIHRyYW5zZm9ybWVkLCBhbmQgY29udmVydGVkIGludG8gYml0bWFwcyBhbmQgcGl4bWFwcy4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIEZUX091dGxpbmUKKyAgICogICBGVF9PdXRsaW5lX05ldworICAgKiAgIEZUX091dGxpbmVfRG9uZQorICAgKiAgIEZUX091dGxpbmVfQ29weQorICAgKiAgIEZUX091dGxpbmVfVHJhbnNsYXRlCisgICAqICAgRlRfT3V0bGluZV9UcmFuc2Zvcm0KKyAgICogICBGVF9PdXRsaW5lX0VtYm9sZGVuCisgICAqICAgRlRfT3V0bGluZV9FbWJvbGRlblhZCisgICAqICAgRlRfT3V0bGluZV9SZXZlcnNlCisgICAqICAgRlRfT3V0bGluZV9DaGVjaworICAgKgorICAgKiAgIEZUX091dGxpbmVfR2V0X0NCb3gKKyAgICogICBGVF9PdXRsaW5lX0dldF9CQm94CisgICAqCisgICAqICAgRlRfT3V0bGluZV9HZXRfQml0bWFwCisgICAqICAgRlRfT3V0bGluZV9SZW5kZXIKKyAgICogICBGVF9PdXRsaW5lX0RlY29tcG9zZQorICAgKiAgIEZUX091dGxpbmVfRnVuY3MKKyAgICogICBGVF9PdXRsaW5lX01vdmVUb0Z1bmMKKyAgICogICBGVF9PdXRsaW5lX0xpbmVUb0Z1bmMKKyAgICogICBGVF9PdXRsaW5lX0NvbmljVG9GdW5jCisgICAqICAgRlRfT3V0bGluZV9DdWJpY1RvRnVuYworICAgKgorICAgKiAgIEZUX09yaWVudGF0aW9uCisgICAqICAgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24KKyAgICoKKyAgICogICBGVF9PVVRMSU5FX1hYWAorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdhbGsgb3ZlciBhbiBvdXRsaW5lJ3Mgc3RydWN0dXJlIHRvIGRlY29tcG9zZSBpdCBpbnRvIGluZGl2aWR1YWwgICAqLwotICAvKiAgICBzZWdtZW50cyBhbmQgQmV6aWVyIGFyY3MuICBUaGlzIGZ1bmN0aW9uIGFsc28gZW1pdHMgYG1vdmUgdG8nICAgICAgKi8KLSAgLyogICAgb3BlcmF0aW9ucyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgbmV3IGNvbnRvdXJzIGluIHRoZSBvdXRsaW5lLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgdGFyZ2V0LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdW5jX2ludGVyZmFjZSA6OiBBIHRhYmxlIG9mIGBlbWl0dGVycycsIGkuZS4sIGZ1bmN0aW9uIHBvaW50ZXJzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGggICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVzZXIgICAgICAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCB0byBlYWNoICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVyIGR1cmluZyB0aGUgZGVjb21wb3NpdGlvbi4gIEl0IGNhbiBiZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUgZHVyaW5nIHRoZSAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGRlY29tcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgY29udG91ciB0aGF0IGNvbnRhaW5zIGEgc2luZ2xlIHBvaW50IG9ubHkgaXMgcmVwcmVzZW50ZWQgYnkgYSAgICAqLwotICAvKiAgICBgbW92ZSB0bycgb3BlcmF0aW9uIGZvbGxvd2VkIGJ5IGBsaW5lIHRvJyB0byB0aGUgc2FtZSBwb2ludC4gIEluICAgKi8KLSAgLyogICAgbW9zdCBjYXNlcywgaXQgaXMgYmVzdCB0byBmaWx0ZXIgdGhpcyBvdXQgYmVmb3JlIHVzaW5nIHRoZSAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgZm9yIHN0cm9raW5nIHB1cnBvc2VzIChvdGhlcndpc2UgaXQgd291bGQgcmVzdWx0IGluIGEgICAgICAqLwotICAvKiAgICB2aXNpYmxlIGRvdCB3aGVuIHJvdW5kIGNhcHMgYXJlIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNpbWlsYXJseSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgc3VjY2VzcyBmb3IgYW4gZW1wdHkgb3V0bGluZSBhbHNvICAqLwotICAvKiAgICAoZG9pbmcgbm90aGluZywgdGhpcyBpcywgbm90IGNhbGxpbmcgYW55IGVtaXR0ZXIpOyBpZiBuZWNlc3NhcnksICAgKi8KLSAgLyogICAgeW91IHNob3VsZCBmaWx0ZXIgdGhpcyBvdXQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfRGVjb21wb3NlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXYWxrIG92ZXIgYW4gb3V0bGluZSdzIHN0cnVjdHVyZSB0byBkZWNvbXBvc2UgaXQgaW50byBpbmRpdmlkdWFsCisgICAqICAgc2VnbWVudHMgYW5kIEJlemllciBhcmNzLiAgVGhpcyBmdW5jdGlvbiBhbHNvIGVtaXRzIGBtb3ZlIHRvJworICAgKiAgIG9wZXJhdGlvbnMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIG5ldyBjb250b3VycyBpbiB0aGUgb3V0bGluZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIHRhcmdldC4KKyAgICoKKyAgICogICBmdW5jX2ludGVyZmFjZSA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBgZW1pdHRlcnMnLCBpLmUuLCBmdW5jdGlvbiBwb2ludGVycworICAgKiAgICAgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGgKKyAgICogICAgIG9wZXJhdGlvbnMuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICB1c2VyIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgdG8gZWFjaAorICAgKiAgICAgZW1pdHRlciBkdXJpbmcgdGhlIGRlY29tcG9zaXRpb24uICBJdCBjYW4gYmUKKyAgICogICAgIHVzZWQgdG8gc3RvcmUgdGhlIHN0YXRlIGR1cmluZyB0aGUKKyAgICogICAgIGRlY29tcG9zaXRpb24uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQSBjb250b3VyIHRoYXQgY29udGFpbnMgYSBzaW5nbGUgcG9pbnQgb25seSBpcyByZXByZXNlbnRlZCBieSBhCisgICAqICAgYG1vdmUgdG8nIG9wZXJhdGlvbiBmb2xsb3dlZCBieSBgbGluZSB0bycgdG8gdGhlIHNhbWUgcG9pbnQuICBJbgorICAgKiAgIG1vc3QgY2FzZXMsIGl0IGlzIGJlc3QgdG8gZmlsdGVyIHRoaXMgb3V0IGJlZm9yZSB1c2luZyB0aGUKKyAgICogICBvdXRsaW5lIGZvciBzdHJva2luZyBwdXJwb3NlcyAob3RoZXJ3aXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBhCisgICAqICAgdmlzaWJsZSBkb3Qgd2hlbiByb3VuZCBjYXBzIGFyZSB1c2VkKS4KKyAgICoKKyAgICogICBTaW1pbGFybHksIHRoZSBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3MgZm9yIGFuIGVtcHR5IG91dGxpbmUgYWxzbworICAgKiAgIChkb2luZyBub3RoaW5nLCB0aGlzIGlzLCBub3QgY2FsbGluZyBhbnkgZW1pdHRlcik7IGlmIG5lY2Vzc2FyeSwKKyAgICogICB5b3Ugc2hvdWxkIGZpbHRlciB0aGlzIG91dCwgdG9vLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfRGVjb21wb3NlKCBGVF9PdXRsaW5lKiAgICAgICAgICAgICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX091dGxpbmVfRnVuY3MqICBmdW5jX2ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICB1c2VyICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX05ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGUgYSBuZXcgb3V0bGluZSBvZiBhIGdpdmVuIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5ICAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QgZnJvbSB3aGVyZSB0aGUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgb3V0bGluZSBpcyBhbGxvY2F0ZWQuICBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUgbmV3ICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIG91dGxpbmUgd2lsbCAqbm90KiBuZWNlc3NhcmlseSBiZSAqZnJlZWQqLCB3aGVuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBkZXN0cm95aW5nIHRoZSBsaWJyYXJ5LCBieSBARlRfRG9uZV9GcmVlVHlwZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bVBvaW50cyAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgd2l0aGluIHRoZSBvdXRsaW5lLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBNdXN0IGJlIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byAweEZGRkYgKDY1NTM1KS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bUNvbnRvdXJzIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb250b3VycyB3aXRoaW4gdGhlIG91dGxpbmUuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgdG8gYG51bVBvaW50cycuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm91dGxpbmUgICA6OiBBIGhhbmRsZSB0byB0aGUgbmV3IG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgYGxpYnJhcnknIHBhcmFtZXRlciBpcyBzaW1wbHkgKi8KLSAgLyogICAgdG8gdXNlIHRoZSBsaWJyYXJ5J3MgbWVtb3J5IGFsbG9jYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfTmV3CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGUgYSBuZXcgb3V0bGluZSBvZiBhIGdpdmVuIHNpemUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QgZnJvbSB3aGVyZSB0aGUKKyAgICogICAgIG91dGxpbmUgaXMgYWxsb2NhdGVkLiAgTm90ZSBob3dldmVyIHRoYXQgdGhlIG5ldworICAgKiAgICAgb3V0bGluZSB3aWxsICpub3QqIG5lY2Vzc2FyaWx5IGJlICpmcmVlZCosIHdoZW4KKyAgICogICAgIGRlc3Ryb3lpbmcgdGhlIGxpYnJhcnksIGJ5IEBGVF9Eb25lX0ZyZWVUeXBlLgorICAgKgorICAgKiAgIG51bVBvaW50cyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB3aXRoaW4gdGhlIG91dGxpbmUuCisgICAqICAgICBNdXN0IGJlIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byAweEZGRkYgKDY1NTM1KS4KKyAgICoKKyAgICogICBudW1Db250b3VycyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIHdpdGhpbiB0aGUgb3V0bGluZS4KKyAgICogICAgIFRoaXMgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCB0byBgbnVtUG9pbnRzJy4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhbm91dGxpbmUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBuZXcgb3V0bGluZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgYGxpYnJhcnknIHBhcmFtZXRlciBpcyBzaW1wbHkKKyAgICogICB0byB1c2UgdGhlIGxpYnJhcnkncyBtZW1vcnkgYWxsb2NhdG9yLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfTmV3KCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBudW1Qb2ludHMsCkBAIC0xNjksMjcgKzE3NiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSAgKmFub3V0bGluZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzdHJveSBhbiBvdXRsaW5lIGNyZWF0ZWQgd2l0aCBARlRfT3V0bGluZV9OZXcuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSBvZiB0aGUgbGlicmFyeSBvYmplY3QgdXNlZCB0byBhbGxvY2F0ZSB0aGUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIG91dGxpbmUgb2JqZWN0IHRvIGJlIGRpc2NhcmRlZC4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIG91dGxpbmUncyBgb3duZXInIGZpZWxkIGlzIG5vdCBzZXQsIG9ubHkgdGhlIG91dGxpbmUgICAgICAgICovCi0gIC8qICAgIGRlc2NyaXB0b3Igd2lsbCBiZSByZWxlYXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0RvbmUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3kgYW4gb3V0bGluZSBjcmVhdGVkIHdpdGggQEZUX091dGxpbmVfTmV3LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0IHVzZWQgdG8gYWxsb2NhdGUgdGhlCisgICAqICAgICBvdXRsaW5lLgorICAgKgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgb3V0bGluZSBvYmplY3QgdG8gYmUgZGlzY2FyZGVkLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIElmIHRoZSBvdXRsaW5lJ3MgYG93bmVyJyBmaWVsZCBpcyBub3Qgc2V0LCBvbmx5IHRoZSBvdXRsaW5lCisgICAqICAgZGVzY3JpcHRvciB3aWxsIGJlIHJlbGVhc2VkLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfRG9uZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgKTsKQEAgLTIwMCwzMzQgKzIwOSwzNTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9DaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2hlY2sgdGhlIGNvbnRlbnRzIG9mIGFuIG91dGxpbmUgZGVzY3JpcHRvci4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW1wdHkgb3V0bGluZSwgb3IgYW4gb3V0bGluZSB3aXRoIGEgc2luZ2xlIHBvaW50IG9ubHkgaXMgYWxzbyAgICovCi0gIC8qICAgIHZhbGlkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0NoZWNrCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDaGVjayB0aGUgY29udGVudHMgb2YgYW4gb3V0bGluZSBkZXNjcmlwdG9yLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgb3V0bGluZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBzb3VyY2Ugb3V0bGluZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBBbiBlbXB0eSBvdXRsaW5lLCBvciBhbiBvdXRsaW5lIHdpdGggYSBzaW5nbGUgcG9pbnQgb25seSBpcyBhbHNvCisgICAqICAgdmFsaWQuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9DaGVjayggRlRfT3V0bGluZSogIG91dGxpbmUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfR2V0X0NCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiBhbiBvdXRsaW5lJ3MgYGNvbnRyb2wgYm94Jy4gIFRoZSBjb250cm9sIGJveCBlbmNsb3NlcyBhbGwgICAqLwotICAvKiAgICB0aGUgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIEJlemllciBjb250cm9sIHBvaW50cy4gIFRob3VnaCBpdCAgKi8KLSAgLyogICAgY29pbmNpZGVzIHdpdGggdGhlIGV4YWN0IGJvdW5kaW5nIGJveCBmb3IgbW9zdCBnbHlwaHMsIGl0IGNhbiBiZSAgICovCi0gIC8qICAgIHNsaWdodGx5IGxhcmdlciBpbiBzb21lIHNpdHVhdGlvbnMgKGxpa2Ugd2hlbiByb3RhdGluZyBhbiBvdXRsaW5lICAqLwotICAvKiAgICB0aGF0IGNvbnRhaW5zIEJlemllciBvdXRzaWRlIGFyY3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZyAqLwotICAvKiAgICBib3ggY2FuIHRha2UgbXVjaCBtb3JlIHRpbWUgYXMgaXQgbmVlZHMgdG8gd2FsayBvdmVyIGFsbCBzZWdtZW50cyAgKi8KLSAgLyogICAgYW5kIGFyY3MgaW4gdGhlIG91dGxpbmUuICBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlICAgICAgICovCi0gIC8qICAgIGBmdGJib3gnIGNvbXBvbmVudCwgd2hpY2ggaXMgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHRhc2suICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFjYm94ICAgOjogVGhlIG91dGxpbmUncyBjb250cm9sIGJveC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlZSBARlRfR2x5cGhfR2V0X0NCb3ggZm9yIGEgZGlzY3Vzc2lvbiBvZiB0cmlja3kgZm9udHMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0dldF9DQm94CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gYW4gb3V0bGluZSdzIGBjb250cm9sIGJveCcuICBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsCisgICAqICAgdGhlIG91dGxpbmUncyBwb2ludHMsIGluY2x1ZGluZyBCZXppZXIgY29udHJvbCBwb2ludHMuICBUaG91Z2ggaXQKKyAgICogICBjb2luY2lkZXMgd2l0aCB0aGUgZXhhY3QgYm91bmRpbmcgYm94IGZvciBtb3N0IGdseXBocywgaXQgY2FuIGJlCisgICAqICAgc2xpZ2h0bHkgbGFyZ2VyIGluIHNvbWUgc2l0dWF0aW9ucyAobGlrZSB3aGVuIHJvdGF0aW5nIGFuIG91dGxpbmUKKyAgICogICB0aGF0IGNvbnRhaW5zIEJlemllciBvdXRzaWRlIGFyY3MpLgorICAgKgorICAgKiAgIENvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZworICAgKiAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzCisgICAqICAgYW5kIGFyY3MgaW4gdGhlIG91dGxpbmUuICBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlCisgICAqICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhY2JveCA6OgorICAgKiAgICAgVGhlIG91dGxpbmUncyBjb250cm9sIGJveC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgU2VlIEBGVF9HbHlwaF9HZXRfQ0JveCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRyaWNreSBmb250cy4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX091dGxpbmVfR2V0X0NCb3goIGNvbnN0IEZUX091dGxpbmUqICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAgICAgICAqYWNib3ggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfVHJhbnNsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFwcGx5IGEgc2ltcGxlIHRyYW5zbGF0aW9uIHRvIHRoZSBwb2ludHMgb2YgYW4gb3V0bGluZS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHhPZmZzZXQgOjogVGhlIGhvcml6b250YWwgb2Zmc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeU9mZnNldCA6OiBUaGUgdmVydGljYWwgb2Zmc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfVHJhbnNsYXRlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBcHBseSBhIHNpbXBsZSB0cmFuc2xhdGlvbiB0byB0aGUgcG9pbnRzIG9mIGFuIG91dGxpbmUuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBvdXRsaW5lIGRlc2NyaXB0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICB4T2Zmc2V0IDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBvZmZzZXQuCisgICAqCisgICAqICAgeU9mZnNldCA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIG9mZnNldC4KKyAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICAgICB4T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICAgICAgIHlPZmZzZXQgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfQ29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvcHkgYW4gb3V0bGluZSBpbnRvIGFub3RoZXIgb25lLiAgQm90aCBvYmplY3RzIG11c3QgaGF2ZSB0aGUgICAgICAqLwotICAvKiAgICBzYW1lIHNpemVzIChudW1iZXIgb2YgcG9pbnRzICYgbnVtYmVyIG9mIGNvbnRvdXJzKSB3aGVuIHRoaXMgICAgICAgKi8KLSAgLyogICAgZnVuY3Rpb24gaXMgY2FsbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc291cmNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFyZ2V0IDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfQ29weQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ29weSBhbiBvdXRsaW5lIGludG8gYW5vdGhlciBvbmUuICBCb3RoIG9iamVjdHMgbXVzdCBoYXZlIHRoZQorICAgKiAgIHNhbWUgc2l6ZXMgKG51bWJlciBvZiBwb2ludHMgJiBudW1iZXIgb2YgY29udG91cnMpIHdoZW4gdGhpcworICAgKiAgIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHNvdXJjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBvdXRsaW5lLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHRhcmdldCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBvdXRsaW5lLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9Db3B5KCBjb25zdCBGVF9PdXRsaW5lKiAgc291cmNlLAogICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUgICAgICAgICp0YXJnZXQgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFwcGx5IGEgc2ltcGxlIDJ4MiBtYXRyaXggdG8gYWxsIG9mIGFuIG91dGxpbmUncyBwb2ludHMuICBVc2VmdWwgICAqLwotICAvKiAgICBmb3IgYXBwbHlpbmcgcm90YXRpb25zLCBzbGFudGluZywgZmxpcHBpbmcsIGV0Yy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdXRsaW5lIDo6IEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXRyaXggIDo6IEEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBZb3UgY2FuIHVzZSBARlRfT3V0bGluZV9UcmFuc2xhdGUgaWYgeW91IG5lZWQgdG8gdHJhbnNsYXRlIHRoZSAgICAgKi8KLSAgLyogICAgb3V0bGluZSdzIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfVHJhbnNmb3JtCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBcHBseSBhIHNpbXBsZSAyeDIgbWF0cml4IHRvIGFsbCBvZiBhbiBvdXRsaW5lJ3MgcG9pbnRzLiAgVXNlZnVsCisgICAqICAgZm9yIGFwcGx5aW5nIHJvdGF0aW9ucywgc2xhbnRpbmcsIGZsaXBwaW5nLCBldGMuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBvdXRsaW5lIGRlc2NyaXB0b3IuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBtYXRyaXggOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3UgY2FuIHVzZSBARlRfT3V0bGluZV9UcmFuc2xhdGUgaWYgeW91IG5lZWQgdG8gdHJhbnNsYXRlIHRoZQorICAgKiAgIG91dGxpbmUncyBwb2ludHMuCisgICAqLwogICBGVF9FWFBPUlQoIHZvaWQgKQogICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9NYXRyaXgqICAgbWF0cml4ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0VtYm9sZGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFbWJvbGRlbiBhbiBvdXRsaW5lLiAgVGhlIG5ldyBvdXRsaW5lIHdpbGwgYmUgYXQgbW9zdCA0fnRpbWVzICAgICAgKi8KLSAgLyogICAgYHN0cmVuZ3RoJyBwaXhlbHMgd2lkZXIgYW5kIGhpZ2hlci4gIFlvdSBtYXkgdGhpbmsgb2YgdGhlIGxlZnQgYW5kICovCi0gIC8qICAgIGJvdHRvbSBib3JkZXJzIGFzIHVuY2hhbmdlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTmVnYXRpdmUgYHN0cmVuZ3RoJyB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBvdXRsaW5lIHRoaWNrbmVzcyBhcmUgICAgICovCi0gIC8qICAgIHBvc3NpYmxlIGFsc28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVuZ3RoIDo6IEhvdyBzdHJvbmcgdGhlIGdseXBoIGlzIGVtYm9sZGVuZWQuICBFeHByZXNzZWQgaW4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAyNi42IHBpeGVsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgdXNlZCBhbGdvcml0aG0gdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHRoaWNrbmVzcyBvZiB0aGUgICAgKi8KLSAgLyogICAgZ2x5cGggZG9lc24ndCBjaGFuZ2UgdGhlIG51bWJlciBvZiBwb2ludHM7IHRoaXMgbWVhbnMgdGhhdCBjZXJ0YWluICovCi0gIC8qICAgIHNpdHVhdGlvbnMgbGlrZSBhY3V0ZSBhbmdsZXMgb3IgaW50ZXJzZWN0aW9ucyBhcmUgc29tZXRpbWVzICAgICAgICAqLwotICAvKiAgICBoYW5kbGVkIGluY29ycmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIHlvdSBuZWVkIGBiZXR0ZXInIG1ldHJpY3MgdmFsdWVzIHlvdSBzaG91bGQgY2FsbCAgICAgICAgICAgICAgICAqLwotICAvKiAgICBARlRfT3V0bGluZV9HZXRfQ0JveCBvciBARlRfT3V0bGluZV9HZXRfQkJveC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEV4YW1wbGUgY2FsbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRlRfTG9hZF9HbHlwaCggZmFjZSwgaW5kZXgsIEZUX0xPQURfREVGQVVMVCApOyAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGlmICggZmFjZS0+Z2x5cGgtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSApICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIEZUX091dGxpbmVfRW1ib2xkZW4oICZmYWNlLT5nbHlwaC0+b3V0bGluZSwgc3RyZW5ndGggKTsgICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoICAgICovCi0gIC8qICAgIGZ1bmN0aW9ucyBsaWtlIEBGVF9TZXRfQ2hhcl9TaXplIGJlZm9yZSBjYWxsaW5nIEZUX1JlbmRlcl9HbHlwaC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0VtYm9sZGVuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBFbWJvbGRlbiBhbiBvdXRsaW5lLiAgVGhlIG5ldyBvdXRsaW5lIHdpbGwgYmUgYXQgbW9zdCA0fnRpbWVzCisgICAqICAgYHN0cmVuZ3RoJyBwaXhlbHMgd2lkZXIgYW5kIGhpZ2hlci4gIFlvdSBtYXkgdGhpbmsgb2YgdGhlIGxlZnQgYW5kCisgICAqICAgYm90dG9tIGJvcmRlcnMgYXMgdW5jaGFuZ2VkLgorICAgKgorICAgKiAgIE5lZ2F0aXZlIGBzdHJlbmd0aCcgdmFsdWVzIHRvIHJlZHVjZSB0aGUgb3V0bGluZSB0aGlja25lc3MgYXJlCisgICAqICAgcG9zc2libGUgYWxzby4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgb3V0bGluZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cmVuZ3RoIDo6CisgICAqICAgICBIb3cgc3Ryb25nIHRoZSBnbHlwaCBpcyBlbWJvbGRlbmVkLiAgRXhwcmVzc2VkIGluCisgICAqICAgICAyNi42IHBpeGVsIGZvcm1hdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgdXNlZCBhbGdvcml0aG0gdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHRoaWNrbmVzcyBvZiB0aGUKKyAgICogICBnbHlwaCBkb2Vzbid0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIHBvaW50czsgdGhpcyBtZWFucyB0aGF0IGNlcnRhaW4KKyAgICogICBzaXR1YXRpb25zIGxpa2UgYWN1dGUgYW5nbGVzIG9yIGludGVyc2VjdGlvbnMgYXJlIHNvbWV0aW1lcworICAgKiAgIGhhbmRsZWQgaW5jb3JyZWN0bHkuCisgICAqCisgICAqICAgSWYgeW91IG5lZWQgYGJldHRlcicgbWV0cmljcyB2YWx1ZXMgeW91IHNob3VsZCBjYWxsCisgICAqICAgQEZUX091dGxpbmVfR2V0X0NCb3ggb3IgQEZUX091dGxpbmVfR2V0X0JCb3guCisgICAqCisgICAqICAgVG8gZ2V0IG1lYW5pbmdmdWwgcmVzdWx0cywgZm9udCBzY2FsaW5nIHZhbHVlcyBtdXN0IGJlIHNldCB3aXRoCisgICAqICAgZnVuY3Rpb25zIGxpa2UgQEZUX1NldF9DaGFyX1NpemUgYmVmb3JlIGNhbGxpbmcgRlRfUmVuZGVyX0dseXBoLgorICAgKgorICAgKiBAZXhhbXBsZToKKyAgICogICB7CisgICAqICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCBpbmRleCwgRlRfTE9BRF9ERUZBVUxUICk7CisgICAqCisgICAqICAgICBpZiAoIGZhY2UtPmdseXBoLT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgKiAgICAgICBGVF9PdXRsaW5lX0VtYm9sZGVuKCAmZmFjZS0+Z2x5cGgtPm91dGxpbmUsIHN0cmVuZ3RoICk7CisgICAqICAgfQorICAgKgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfRW1ib2xkZW4oIEZUX091dGxpbmUqICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgc3RyZW5ndGggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRW1ib2xkZW5YWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEVtYm9sZGVuIGFuIG91dGxpbmUuICBUaGUgbmV3IG91dGxpbmUgd2lsbCBiZSBgeHN0cmVuZ3RoJyBwaXhlbHMgICAqLwotICAvKiAgICB3aWRlciBhbmQgYHlzdHJlbmd0aCcgcGl4ZWxzIGhpZ2hlci4gIE90aGVyd2lzZSwgaXQgaXMgc2ltaWxhciB0byAgKi8KLSAgLyogICAgQEZUX091dGxpbmVfRW1ib2xkZW4sIHdoaWNoIHVzZXMgdGhlIHNhbWUgc3RyZW5ndGggaW4gYm90aCAgICAgICAgICovCi0gIC8qICAgIGRpcmVjdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuNC4xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0VtYm9sZGVuWFkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEVtYm9sZGVuIGFuIG91dGxpbmUuICBUaGUgbmV3IG91dGxpbmUgd2lsbCBiZSBgeHN0cmVuZ3RoJyBwaXhlbHMKKyAgICogICB3aWRlciBhbmQgYHlzdHJlbmd0aCcgcGl4ZWxzIGhpZ2hlci4gIE90aGVyd2lzZSwgaXQgaXMgc2ltaWxhciB0bworICAgKiAgIEBGVF9PdXRsaW5lX0VtYm9sZGVuLCB3aGljaCB1c2VzIHRoZSBzYW1lIHN0cmVuZ3RoIGluIGJvdGgKKyAgICogICBkaXJlY3Rpb25zLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi40LjEwCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeHN0cmVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB5c3RyZW5ndGggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfUmV2ZXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldmVyc2UgdGhlIGRyYXdpbmcgZGlyZWN0aW9uIG9mIGFuIG91dGxpbmUuICBUaGlzIGlzIHVzZWQgdG8gICAgICAqLwotICAvKiAgICBlbnN1cmUgY29uc2lzdGVudCBmaWxsIGNvbnZlbnRpb25zIGZvciBtaXJyb3JlZCBnbHlwaHMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdXRsaW5lIDo6IEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIHRvZ2dsZXMgdGhlIGJpdCBmbGFnIEBGVF9PVVRMSU5FX1JFVkVSU0VfRklMTCBpbiAgICAgKi8KLSAgLyogICAgdGhlIG91dGxpbmUncyBgZmxhZ3MnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJdCBzaG91bGRuJ3QgYmUgdXNlZCBieSBhIG5vcm1hbCBjbGllbnQgYXBwbGljYXRpb24sIHVubGVzcyBpdCAgICAgKi8KLSAgLyogICAga25vd3Mgd2hhdCBpdCBpcyBkb2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfUmV2ZXJzZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV2ZXJzZSB0aGUgZHJhd2luZyBkaXJlY3Rpb24gb2YgYW4gb3V0bGluZS4gIFRoaXMgaXMgdXNlZCB0bworICAgKiAgIGVuc3VyZSBjb25zaXN0ZW50IGZpbGwgY29udmVudGlvbnMgZm9yIG1pcnJvcmVkIGdseXBocy4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IG91dGxpbmUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBiaXQgZmxhZyBARlRfT1VUTElORV9SRVZFUlNFX0ZJTEwgaW4KKyAgICogICB0aGUgb3V0bGluZSdzIGBmbGFncycgZmllbGQuCisgICAqCisgICAqICAgSXQgc2hvdWxkbid0IGJlIHVzZWQgYnkgYSBub3JtYWwgY2xpZW50IGFwcGxpY2F0aW9uLCB1bmxlc3MgaXQKKyAgICogICBrbm93cyB3aGF0IGl0IGlzIGRvaW5nLgorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkICkKICAgRlRfT3V0bGluZV9SZXZlcnNlKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT3V0bGluZV9HZXRfQml0bWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVuZGVyIGFuIG91dGxpbmUgd2l0aGluIGEgYml0bWFwLiAgVGhlIG91dGxpbmUncyBpbWFnZSBpcyBzaW1wbHkgICovCi0gIC8qICAgIE9SLWVkIHRvIHRoZSB0YXJnZXQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gYSBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWJpdG1hcCA6OiBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBiaXRtYXAgZGVzY3JpcHRvci4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBDUkVBVEUgdGhlIGJpdG1hcCwgaXQgb25seSByZW5kZXJzIGFuICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgaW1hZ2Ugd2l0aGluIHRoZSBvbmUgeW91IHBhc3MgdG8gaXQhICBDb25zZXF1ZW50bHksIHRoZSAgICAqLwotICAvKiAgICB2YXJpb3VzIGZpZWxkcyBpbiBgYWJpdG1hcCcgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmdseS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEl0IHdpbGwgdXNlIHRoZSByYXN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgZGVmYXVsdCBnbHlwaCBmb3JtYXQuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHZhbHVlIG9mIHRoZSBgbnVtX2dyYXlzJyBmaWVsZCBpbiBgYWJpdG1hcCcgaXMgaWdub3JlZC4gIElmICAgICovCi0gIC8qICAgIHlvdSBzZWxlY3QgdGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciwgYW5kIHlvdSB3YW50IGxlc3MgdGhhbiAyNTYgICAqLwotICAvKiAgICBncmF5IGxldmVscywgeW91IGhhdmUgdG8gdXNlIEBGVF9PdXRsaW5lX1JlbmRlciBkaXJlY3RseS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfT3V0bGluZV9HZXRfQml0bWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZW5kZXIgYW4gb3V0bGluZSB3aXRoaW4gYSBiaXRtYXAuICBUaGUgb3V0bGluZSdzIGltYWdlIGlzIHNpbXBseQorICAgKiAgIE9SLWVkIHRvIHRoZSB0YXJnZXQgYml0bWFwLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBhYml0bWFwIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBiaXRtYXAgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIENSRUFURSB0aGUgYml0bWFwLCBpdCBvbmx5IHJlbmRlcnMgYW4KKyAgICogICBvdXRsaW5lIGltYWdlIHdpdGhpbiB0aGUgb25lIHlvdSBwYXNzIHRvIGl0ISAgQ29uc2VxdWVudGx5LCB0aGUKKyAgICogICB2YXJpb3VzIGZpZWxkcyBpbiBgYWJpdG1hcCcgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmdseS4KKyAgICoKKyAgICogICBJdCB3aWxsIHVzZSB0aGUgcmFzdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlZmF1bHQgZ2x5cGggZm9ybWF0LgorICAgKgorICAgKiAgIFRoZSB2YWx1ZSBvZiB0aGUgYG51bV9ncmF5cycgZmllbGQgaW4gYGFiaXRtYXAnIGlzIGlnbm9yZWQuICBJZgorICAgKiAgIHlvdSBzZWxlY3QgdGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciwgYW5kIHlvdSB3YW50IGxlc3MgdGhhbiAyNTYKKyAgICogICBncmF5IGxldmVscywgeW91IGhhdmUgdG8gdXNlIEBGVF9PdXRsaW5lX1JlbmRlciBkaXJlY3RseS4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PdXRsaW5lX0dldF9CaXRtYXAoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CaXRtYXAgICphYml0bWFwICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX1JlbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZW5kZXIgYW4gb3V0bGluZSB3aXRoaW4gYSBiaXRtYXAgdXNpbmcgdGhlIGN1cnJlbnQgc2Nhbi1jb252ZXJ0LiAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiB1c2VzIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSBhcyBhbiBhcmd1bWVudCwgICovCi0gIC8qICAgIGFsbG93aW5nIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgZGlyZWN0IGNvbXBvc2l0aW9uLCB0cmFuc2x1Y2VuY3ksICAqLwotICAvKiAgICBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhcmFtcyAgOjogQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvICAgICAqLwotICAvKiAgICAgICAgICAgICAgIGRlc2NyaWJlIHRoZSByZW5kZXJpbmcgb3BlcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCBob3cgQEZUX1Jhc3Rlcl9QYXJhbXMgd29ya3MgKi8KLSAgLyogICAgdG8gdXNlIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZmllbGQgYHBhcmFtcy5zb3VyY2UnIHdpbGwgYmUgc2V0IHRvIGBvdXRsaW5lJyBiZWZvcmUgdGhlIHNjYW4gKi8KLSAgLyogICAgY29udmVydGVyIGlzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdmFsdWUgeW91IGdpdmUgdG8gaXQgaXMgICovCi0gIC8qICAgIGFjdHVhbGx5IGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciBhbHdheXMgdXNlcyAyNTYgZ3JheSBsZXZlbHMuICBJZiB5b3UgICAgICovCi0gIC8qICAgIHdhbnQgbGVzcyBncmF5IGxldmVscywgeW91IGhhdmUgdG8gcHJvdmlkZSB5b3VyIG93biBzcGFuIGNhbGxiYWNrLiAqLwotICAvKiAgICBTZWUgdGhlIEBGVF9SQVNURVJfRkxBR19ESVJFQ1QgdmFsdWUgb2YgdGhlIGBmbGFncycgZmllbGQgaW4gdGhlICAgKi8KLSAgLyogICAgQEZUX1Jhc3Rlcl9QYXJhbXMgc3RydWN0dXJlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfUmVuZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZW5kZXIgYW4gb3V0bGluZSB3aXRoaW4gYSBiaXRtYXAgdXNpbmcgdGhlIGN1cnJlbnQgc2Nhbi1jb252ZXJ0LgorICAgKiAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhbiBARlRfUmFzdGVyX1BhcmFtcyBzdHJ1Y3R1cmUgYXMgYW4gYXJndW1lbnQsCisgICAqICAgYWxsb3dpbmcgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBkaXJlY3QgY29tcG9zaXRpb24sIHRyYW5zbHVjZW5jeSwKKyAgICogICBldGMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBsaWJyYXJ5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIHBhcmFtcyA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGFuIEBGVF9SYXN0ZXJfUGFyYW1zIHN0cnVjdHVyZSB1c2VkIHRvCisgICAqICAgICBkZXNjcmliZSB0aGUgcmVuZGVyaW5nIG9wZXJhdGlvbi4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCBob3cgQEZUX1Jhc3Rlcl9QYXJhbXMgd29ya3MKKyAgICogICB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKyAgICoKKyAgICogICBUaGUgZmllbGQgYHBhcmFtcy5zb3VyY2UnIHdpbGwgYmUgc2V0IHRvIGBvdXRsaW5lJyBiZWZvcmUgdGhlIHNjYW4KKyAgICogICBjb252ZXJ0ZXIgaXMgY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IHRoZSB2YWx1ZSB5b3UgZ2l2ZSB0byBpdCBpcworICAgKiAgIGFjdHVhbGx5IGlnbm9yZWQuCisgICAqCisgICAqICAgVGhlIGdyYXktbGV2ZWwgcmFzdGVyaXplciBhbHdheXMgdXNlcyAyNTYgZ3JheSBsZXZlbHMuICBJZiB5b3UKKyAgICogICB3YW50IGxlc3MgZ3JheSBsZXZlbHMsIHlvdSBoYXZlIHRvIHByb3ZpZGUgeW91ciBvd24gc3BhbiBjYWxsYmFjay4KKyAgICogICBTZWUgdGhlIEBGVF9SQVNURVJfRkxBR19ESVJFQ1QgdmFsdWUgb2YgdGhlIGBmbGFncycgZmllbGQgaW4gdGhlCisgICAqICAgQEZUX1Jhc3Rlcl9QYXJhbXMgc3RydWN0dXJlIGZvciBtb3JlIGRldGFpbHMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9SZW5kZXIoIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgRlRfT3V0bGluZSogICAgICAgIG91dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICBGVF9SYXN0ZXJfUGFyYW1zKiAgcGFyYW1zICk7CiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGVudW06Ci0gICogICBGVF9PcmllbnRhdGlvbgotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgQSBsaXN0IG9mIHZhbHVlcyB1c2VkIHRvIGRlc2NyaWJlIGFuIG91dGxpbmUncyBjb250b3VyIG9yaWVudGF0aW9uLgotICAqCi0gICogICBUaGUgVHJ1ZVR5cGUgYW5kIFBvc3RTY3JpcHQgc3BlY2lmaWNhdGlvbnMgdXNlIGRpZmZlcmVudCBjb252ZW50aW9ucwotICAqICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3V0bGluZSBjb250b3VycyBzaG91bGQgYmUgZmlsbGVkIG9yIHVuZmlsbGVkLgotICAqCi0gICogQHZhbHVlczoKLSAgKiAgIEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIDo6Ci0gICogICAgIEFjY29yZGluZyB0byB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiwgY2xvY2t3aXNlIGNvbnRvdXJzIG11c3QKLSAgKiAgICAgYmUgZmlsbGVkLCBhbmQgY291bnRlci1jbG9ja3dpc2Ugb25lcyBtdXN0IGJlIHVuZmlsbGVkLgotICAqCi0gICogICBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUIDo6Ci0gICogICAgIEFjY29yZGluZyB0byB0aGUgUG9zdFNjcmlwdCBzcGVjaWZpY2F0aW9uLCBjb3VudGVyLWNsb2Nrd2lzZSBjb250b3VycwotICAqICAgICBtdXN0IGJlIGZpbGxlZCwgYW5kIGNsb2Nrd2lzZSBvbmVzIG11c3QgYmUgdW5maWxsZWQuCi0gICoKLSAgKiAgIEZUX09SSUVOVEFUSU9OX0ZJTExfUklHSFQgOjoKLSAgKiAgICAgVGhpcyBpcyBpZGVudGljYWwgdG8gQEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFLCBidXQgaXMgdXNlZCB0bwotICAqICAgICByZW1lbWJlciB0aGF0IGluIFRydWVUeXBlLCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIHJpZ2h0IG9mCi0gICogICAgIHRoZSBkcmF3aW5nIGRpcmVjdGlvbiBvZiBhIGNvbnRvdXIgbXVzdCBiZSBmaWxsZWQuCi0gICoKLSAgKiAgIEZUX09SSUVOVEFUSU9OX0ZJTExfTEVGVCA6OgotICAqICAgICBUaGlzIGlzIGlkZW50aWNhbCB0byBARlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVCwgYnV0IGlzIHVzZWQgdG8KLSAgKiAgICAgcmVtZW1iZXIgdGhhdCBpbiBQb3N0U2NyaXB0LCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIGxlZnQgb2YKLSAgKiAgICAgdGhlIGRyYXdpbmcgZGlyZWN0aW9uIG9mIGEgY29udG91ciBtdXN0IGJlIGZpbGxlZC4KLSAgKgotICAqICAgRlRfT1JJRU5UQVRJT05fTk9ORSA6OgotICAqICAgICBUaGUgb3JpZW50YXRpb24gY2Fubm90IGJlIGRldGVybWluZWQuICBUaGF0IGlzLCBkaWZmZXJlbnQgcGFydHMgb2YKLSAgKiAgICAgdGhlIGdseXBoIGhhdmUgZGlmZmVyZW50IG9yaWVudGF0aW9uLgotICAqCi0gICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9PcmllbnRhdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbHVlcyB1c2VkIHRvIGRlc2NyaWJlIGFuIG91dGxpbmUncyBjb250b3VyIG9yaWVudGF0aW9uLgorICAgKgorICAgKiAgIFRoZSBUcnVlVHlwZSBhbmQgUG9zdFNjcmlwdCBzcGVjaWZpY2F0aW9ucyB1c2UgZGlmZmVyZW50IGNvbnZlbnRpb25zCisgICAqICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3V0bGluZSBjb250b3VycyBzaG91bGQgYmUgZmlsbGVkIG9yIHVuZmlsbGVkLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIDo6CisgICAqICAgICBBY2NvcmRpbmcgdG8gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24sIGNsb2Nrd2lzZSBjb250b3VycyBtdXN0CisgICAqICAgICBiZSBmaWxsZWQsIGFuZCBjb3VudGVyLWNsb2Nrd2lzZSBvbmVzIG11c3QgYmUgdW5maWxsZWQuCisgICAqCisgICAqICAgRlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVCA6OgorICAgKiAgICAgQWNjb3JkaW5nIHRvIHRoZSBQb3N0U2NyaXB0IHNwZWNpZmljYXRpb24sIGNvdW50ZXItY2xvY2t3aXNlIGNvbnRvdXJzCisgICAqICAgICBtdXN0IGJlIGZpbGxlZCwgYW5kIGNsb2Nrd2lzZSBvbmVzIG11c3QgYmUgdW5maWxsZWQuCisgICAqCisgICAqICAgRlRfT1JJRU5UQVRJT05fRklMTF9SSUdIVCA6OgorICAgKiAgICAgVGhpcyBpcyBpZGVudGljYWwgdG8gQEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFLCBidXQgaXMgdXNlZCB0bworICAgKiAgICAgcmVtZW1iZXIgdGhhdCBpbiBUcnVlVHlwZSwgZXZlcnl0aGluZyB0aGF0IGlzIHRvIHRoZSByaWdodCBvZgorICAgKiAgICAgdGhlIGRyYXdpbmcgZGlyZWN0aW9uIG9mIGEgY29udG91ciBtdXN0IGJlIGZpbGxlZC4KKyAgICoKKyAgICogICBGVF9PUklFTlRBVElPTl9GSUxMX0xFRlQgOjoKKyAgICogICAgIFRoaXMgaXMgaWRlbnRpY2FsIHRvIEBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBULCBidXQgaXMgdXNlZCB0bworICAgKiAgICAgcmVtZW1iZXIgdGhhdCBpbiBQb3N0U2NyaXB0LCBldmVyeXRoaW5nIHRoYXQgaXMgdG8gdGhlIGxlZnQgb2YKKyAgICogICAgIHRoZSBkcmF3aW5nIGRpcmVjdGlvbiBvZiBhIGNvbnRvdXIgbXVzdCBiZSBmaWxsZWQuCisgICAqCisgICAqICAgRlRfT1JJRU5UQVRJT05fTk9ORSA6OgorICAgKiAgICAgVGhlIG9yaWVudGF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgVGhhdCBpcywgZGlmZmVyZW50IHBhcnRzIG9mCisgICAqICAgICB0aGUgZ2x5cGggaGF2ZSBkaWZmZXJlbnQgb3JpZW50YXRpb24uCisgICAqCisgICAqLwogICB0eXBlZGVmIGVudW0gIEZUX09yaWVudGF0aW9uXwogICB7CiAgICAgRlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgICA9IDAsCkBAIC01MzksMzMgKzU2OCwzNCBAQAogICB9IEZUX09yaWVudGF0aW9uOwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBmdW5jdGlvbjoKLSAgKiAgIEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uCi0gICoKLSAgKiBAZGVzY3JpcHRpb246Ci0gICogICBUaGlzIGZ1bmN0aW9uIGFuYWx5emVzIGEgZ2x5cGggb3V0bGluZSBhbmQgdHJpZXMgdG8gY29tcHV0ZSBpdHMKLSAgKiAgIGZpbGwgb3JpZW50YXRpb24gKHNlZSBARlRfT3JpZW50YXRpb24pLiAgVGhpcyBpcyBkb25lIGJ5IGludGVncmF0aW5nCi0gICogICB0aGUgdG90YWwgYXJlYSBjb3ZlcmVkIGJ5IHRoZSBvdXRsaW5lLiBUaGUgcG9zaXRpdmUgaW50ZWdyYWwKLSAgKiAgIGNvcnJlc3BvbmRzIHRvIHRoZSBjbG9ja3dpc2Ugb3JpZW50YXRpb24gYW5kIEBGVF9PUklFTlRBVElPTl9QT1NUU0NSSVBUCi0gICogICBpcyByZXR1cm5lZC4gVGhlIG5lZ2F0aXZlIGludGVncmFsIGNvcnJlc3BvbmRzIHRvIHRoZSBjb3VudGVyLWNsb2Nrd2lzZQotICAqICAgb3JpZW50YXRpb24gYW5kIEBGVF9PUklFTlRBVElPTl9UUlVFVFlQRSBpcyByZXR1cm5lZC4KLSAgKgotICAqICAgTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gQEZUX09SSUVOVEFUSU9OX1RSVUVUWVBFIGZvciBlbXB0eQotICAqICAgb3V0bGluZXMuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICBvdXRsaW5lIDo6Ci0gICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugb3V0bGluZS4KLSAgKgotICAqIEByZXR1cm46Ci0gICogICBUaGUgb3JpZW50YXRpb24uCi0gICoKLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBhbmFseXplcyBhIGdseXBoIG91dGxpbmUgYW5kIHRyaWVzIHRvIGNvbXB1dGUgaXRzCisgICAqICAgZmlsbCBvcmllbnRhdGlvbiAoc2VlIEBGVF9PcmllbnRhdGlvbikuICBUaGlzIGlzIGRvbmUgYnkgaW50ZWdyYXRpbmcKKyAgICogICB0aGUgdG90YWwgYXJlYSBjb3ZlcmVkIGJ5IHRoZSBvdXRsaW5lLiBUaGUgcG9zaXRpdmUgaW50ZWdyYWwKKyAgICogICBjb3JyZXNwb25kcyB0byB0aGUgY2xvY2t3aXNlIG9yaWVudGF0aW9uIGFuZCBARlRfT1JJRU5UQVRJT05fUE9TVFNDUklQVAorICAgKiAgIGlzIHJldHVybmVkLiBUaGUgbmVnYXRpdmUgaW50ZWdyYWwgY29ycmVzcG9uZHMgdG8gdGhlIGNvdW50ZXItY2xvY2t3aXNlCisgICAqICAgb3JpZW50YXRpb24gYW5kIEBGVF9PUklFTlRBVElPTl9UUlVFVFlQRSBpcyByZXR1cm5lZC4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhpcyB3aWxsIHJldHVybiBARlRfT1JJRU5UQVRJT05fVFJVRVRZUEUgZm9yIGVtcHR5CisgICAqICAgb3V0bGluZXMuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIG91dGxpbmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIG9yaWVudGF0aW9uLgorICAgKgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9PcmllbnRhdGlvbiApCiAgIEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApOwogCisKICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmgKaW5kZXggNWE5MDA2Yy4uMDA0ZWFmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHBhcmFtcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRwYXJhbXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRwYXJhbXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgcG9zc2libGUgRlRfUGFyYW1ldGVyIHRhZ3MgKHNwZWNpZmljYXRpb24gb25seSkuICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwYXJhbXMuaAorICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBwb3NzaWJsZSBGVF9QYXJhbWV0ZXIgdGFncyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxNy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFBBUkFNU19IXwpAQCAtNTMsNyArNTMsNyBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogQGNvbnN0YW50OgorICAgKiBAZW51bToKICAgICogICBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWQogICAgKgogICAgKiBAZGVzY3JpcHRpb246CkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiBAY29uc3RhbnQ6CisgICAqIEBlbnVtOgogICAgKiAgIEZUX1BBUkFNX1RBR19JR05PUkVfVFlQT0dSQVBISUNfU1VCRkFNSUxZCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogQGNvbnN0YW50OgorICAgKiBAZW51bToKICAgICogICBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCi0gICAqIEBjb25zdGFudDoKKyAgICogQGVudW06CiAgICAqICAgRlRfUEFSQU1fVEFHX0xDRF9GSUxURVJfV0VJR0hUUwogICAgKgogICAgKiBAZGVzY3JpcHRpb246CkBAIC0xMzUsNyArMTM1LDcgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKLSAgICogQGNvbnN0YW50OgorICAgKiBAZW51bToKICAgICogICBGVF9QQVJBTV9UQUdfUkFORE9NX1NFRUQKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgpAQCAtMTU0LDcgKzE1NCw3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqCi0gICAqIEBjb25zdGFudDoKKyAgICogQGVudW06CiAgICAqICAgRlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTE3NiwxOSArMTc2LDE5IEBACiAgICAgICAgICAgRlRfTUFLRV9UQUcoICdkJywgJ2EnLCAncicsICdrJyApCiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBjb25zdGFudDoKLSAgKiAgIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIERlcHJlY2F0ZWQsIG5vIGVmZmVjdC4KLSAgKgotICAqICAgUHJldmlvdXNseTogQSBjb25zdGFudCB1c2VkIGFzIHRoZSB0YWcgb2YgYW4gQEZUX1BhcmFtZXRlciBzdHJ1Y3R1cmUgdG8KLSAgKiAgIGluZGljYXRlIHRoYXQgdW5wYXRlbnRlZCBtZXRob2RzIG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIFRydWVUeXBlCi0gICogICBieXRlY29kZSBpbnRlcnByZXRlciBmb3IgYSB0eXBlZmFjZSBvcGVuZWQgYnkgQEZUX09wZW5fRmFjZS4KLSAgKgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlcHJlY2F0ZWQsIG5vIGVmZmVjdC4KKyAgICoKKyAgICogICBQcmV2aW91c2x5OiBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBhbiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZSB0bworICAgKiAgIGluZGljYXRlIHRoYXQgdW5wYXRlbnRlZCBtZXRob2RzIG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIFRydWVUeXBlCisgICAqICAgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgZm9yIGEgdHlwZWZhY2Ugb3BlbmVkIGJ5IEBGVF9PcGVuX0ZhY2UuCisgICAqCisgICAqLwogI2RlZmluZSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HIFwKICAgICAgICAgICBGVF9NQUtFX1RBRyggJ3UnLCAnbicsICdwJywgJ2EnICkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oCmluZGV4IGNlNjBlYjQuLmRlYWFlNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cGZyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cGZyLmgKKyAqCisgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUUEZSX0hfCkBAIC0zMiw2MCArMzIsNjEgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGZyX2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUEZSIEZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUEZSL1RydWVEb2Mgc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBQRlItc3BlY2lmaWMgZnVuY3Rpb25zLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIHBmcl9mb250cworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgUEZSIEZvbnRzCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBQRlIvVHJ1ZURvYy1zcGVjaWZpYyBBUEkuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIFBGUi1zcGVjaWZpYyBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCiAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGZ1bmN0aW9uOgotICAqICAgIEZUX0dldF9QRlJfTWV0cmljcwotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgIFJldHVybiB0aGUgb3V0bGluZSBhbmQgbWV0cmljcyByZXNvbHV0aW9ucyBvZiBhIGdpdmVuIFBGUiBmYWNlLgotICAqCi0gICogQGlucHV0OgotICAqICAgIGZhY2UgOjogSGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLiAgSXQgY2FuIGJlIGEgbm9uLVBGUiBmYWNlLgotICAqCi0gICogQG91dHB1dDoKLSAgKiAgICBhb3V0bGluZV9yZXNvbHV0aW9uIDo6Ci0gICogICAgICBPdXRsaW5lIHJlc29sdXRpb24uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGZhY2UtPnVuaXRzX3Blcl9FTScKLSAgKiAgICAgIGZvciBub24tUEZSIGZvbnRzLiAgT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuCi0gICoKLSAgKiAgICBhbWV0cmljc19yZXNvbHV0aW9uIDo6Ci0gICogICAgICBNZXRyaWNzIHJlc29sdXRpb24uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYG91dGxpbmVfcmVzb2x1dGlvbicKLSAgKiAgICAgIGZvciBub24tUEZSIGZvbnRzLiAgT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuCi0gICoKLSAgKiAgICBhbWV0cmljc194X3NjYWxlIDo6Ci0gICogICAgICBBIDE2LjE2IGZpeGVkLXBvaW50IG51bWJlciB1c2VkIHRvIHNjYWxlIGRpc3RhbmNlIGV4cHJlc3NlZAotICAqICAgICAgaW4gbWV0cmljcyB1bml0cyB0byBkZXZpY2Ugc3ViLXBpeGVscy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAqICAgICAgYGZhY2UtPnNpemUtPnhfc2NhbGUnLCBidXQgZm9yIG1ldHJpY3Mgb25seS4gIE9wdGlvbmFsIChwYXJhbWV0ZXIKLSAgKiAgICAgIGNhbiBiZSBOVUxMKS4KLSAgKgotICAqICAgIGFtZXRyaWNzX3lfc2NhbGUgOjoKLSAgKiAgICAgIFNhbWUgYXMgYGFtZXRyaWNzX3hfc2NhbGUnIGJ1dCBmb3IgdGhlIHZlcnRpY2FsIGRpcmVjdGlvbi4KLSAgKiAgICAgIG9wdGlvbmFsIChwYXJhbWV0ZXIgY2FuIGJlIE5VTEwpLgotICAqCi0gICogQHJldHVybjoKLSAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgotICAqCi0gICogQG5vdGU6Ci0gICogICBJZiB0aGUgaW5wdXQgZmFjZSBpcyBub3QgYSBQRlIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IuCi0gICogICBIb3dldmVyLCBpbiBhbGwgY2FzZXMsIGl0IHdpbGwgcmV0dXJuIHZhbGlkIHZhbHVlcy4KLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgICBGVF9HZXRfUEZSX01ldHJpY3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBSZXR1cm4gdGhlIG91dGxpbmUgYW5kIG1ldHJpY3MgcmVzb2x1dGlvbnMgb2YgYSBnaXZlbiBQRlIgZmFjZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgICBmYWNlIDo6CisgICAqICAgICAgSGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLiAgSXQgY2FuIGJlIGEgbm9uLVBGUiBmYWNlLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgICBhb3V0bGluZV9yZXNvbHV0aW9uIDo6CisgICAqICAgICAgT3V0bGluZSByZXNvbHV0aW9uLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBmYWNlLT51bml0c19wZXJfRU0nCisgICAqICAgICAgZm9yIG5vbi1QRlIgZm9udHMuICBPcHRpb25hbCAocGFyYW1ldGVyIGNhbiBiZSBOVUxMKS4KKyAgICoKKyAgICogICAgYW1ldHJpY3NfcmVzb2x1dGlvbiA6OgorICAgKiAgICAgIE1ldHJpY3MgcmVzb2x1dGlvbi4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgb3V0bGluZV9yZXNvbHV0aW9uJworICAgKiAgICAgIGZvciBub24tUEZSIGZvbnRzLiAgT3B0aW9uYWwgKHBhcmFtZXRlciBjYW4gYmUgTlVMTCkuCisgICAqCisgICAqICAgIGFtZXRyaWNzX3hfc2NhbGUgOjoKKyAgICogICAgICBBIDE2LjE2IGZpeGVkLXBvaW50IG51bWJlciB1c2VkIHRvIHNjYWxlIGRpc3RhbmNlIGV4cHJlc3NlZAorICAgKiAgICAgIGluIG1ldHJpY3MgdW5pdHMgdG8gZGV2aWNlIHN1YnBpeGVscy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgKiAgICAgIGBmYWNlLT5zaXplLT54X3NjYWxlJywgYnV0IGZvciBtZXRyaWNzIG9ubHkuICBPcHRpb25hbCAocGFyYW1ldGVyCisgICAqICAgICAgY2FuIGJlIE5VTEwpLgorICAgKgorICAgKiAgICBhbWV0cmljc195X3NjYWxlIDo6CisgICAqICAgICAgU2FtZSBhcyBgYW1ldHJpY3NfeF9zY2FsZScgYnV0IGZvciB0aGUgdmVydGljYWwgZGlyZWN0aW9uLgorICAgKiAgICAgIG9wdGlvbmFsIChwYXJhbWV0ZXIgY2FuIGJlIE5VTEwpLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJZiB0aGUgaW5wdXQgZmFjZSBpcyBub3QgYSBQRlIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IuCisgICAqICAgSG93ZXZlciwgaW4gYWxsIGNhc2VzLCBpdCB3aWxsIHJldHVybiB2YWxpZCB2YWx1ZXMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X1BGUl9NZXRyaWNzKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICphb3V0bGluZV9yZXNvbHV0aW9uLApAQCAtOTQsMzcgKzk1LDQxIEBACiAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICphbWV0cmljc195X3NjYWxlICk7CiAKIAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAZnVuY3Rpb246Ci0gICogICAgRlRfR2V0X1BGUl9LZXJuaW5nCi0gICoKLSAgKiBAZGVzY3JpcHRpb246Ci0gICogICAgUmV0dXJuIHRoZSBrZXJuaW5nIHBhaXIgY29ycmVzcG9uZGluZyB0byB0d28gZ2x5cGhzIGluIGEgUEZSIGZhY2UuCi0gICogICAgVGhlIGRpc3RhbmNlIGlzIGV4cHJlc3NlZCBpbiBtZXRyaWNzIHVuaXRzLCB1bmxpa2UgdGhlIHJlc3VsdCBvZgotICAqICAgIEBGVF9HZXRfS2VybmluZy4KLSAgKgotICAqIEBpbnB1dDoKLSAgKiAgICBmYWNlICA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KLSAgKgotICAqICAgIGxlZnQgIDo6IEluZGV4IG9mIHRoZSBsZWZ0IGdseXBoLgotICAqCi0gICogICAgcmlnaHQgOjogSW5kZXggb2YgdGhlIHJpZ2h0IGdseXBoLgotICAqCi0gICogQG91dHB1dDoKLSAgKiAgICBhdmVjdG9yIDo6IEEga2VybmluZyB2ZWN0b3IuCi0gICoKLSAgKiBAcmV0dXJuOgotICAqICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCi0gICoKLSAgKiBAbm90ZToKLSAgKiAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gZGlzdGFuY2VzIGluIG9yaWdpbmFsIFBGUiBtZXRyaWNzCi0gICogICAgdW5pdHMuICBUaGlzIGlzIHVubGlrZSBARlRfR2V0X0tlcm5pbmcgd2l0aCB0aGUgQEZUX0tFUk5JTkdfVU5TQ0FMRUQKLSAgKiAgICBtb2RlLCB3aGljaCBhbHdheXMgcmV0dXJucyBkaXN0YW5jZXMgY29udmVydGVkIHRvIG91dGxpbmUgdW5pdHMuCi0gICoKLSAgKiAgICBZb3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGB4X3NjYWxlJyBhbmQgYHlfc2NhbGUnIHBhcmFtZXRlcnMKLSAgKiAgICByZXR1cm5lZCBieSBARlRfR2V0X1BGUl9NZXRyaWNzIHRvIHNjYWxlIHRoZXNlIHRvIGRldmljZSBzdWItcGl4ZWxzLgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9QRlJfS2VybmluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIFJldHVybiB0aGUga2VybmluZyBwYWlyIGNvcnJlc3BvbmRpbmcgdG8gdHdvIGdseXBocyBpbiBhIFBGUiBmYWNlLgorICAgKiAgICBUaGUgZGlzdGFuY2UgaXMgZXhwcmVzc2VkIGluIG1ldHJpY3MgdW5pdHMsIHVubGlrZSB0aGUgcmVzdWx0IG9mCisgICAqICAgIEBGVF9HZXRfS2VybmluZy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgICBmYWNlIDo6CisgICAqICAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqCisgICAqICAgIGxlZnQgOjoKKyAgICogICAgICBJbmRleCBvZiB0aGUgbGVmdCBnbHlwaC4KKyAgICoKKyAgICogICAgcmlnaHQgOjoKKyAgICogICAgICBJbmRleCBvZiB0aGUgcmlnaHQgZ2x5cGguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIGF2ZWN0b3IgOjoKKyAgICogICAgICBBIGtlcm5pbmcgdmVjdG9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGRpc3RhbmNlcyBpbiBvcmlnaW5hbCBQRlIgbWV0cmljcworICAgKiAgICB1bml0cy4gIFRoaXMgaXMgdW5saWtlIEBGVF9HZXRfS2VybmluZyB3aXRoIHRoZSBARlRfS0VSTklOR19VTlNDQUxFRAorICAgKiAgICBtb2RlLCB3aGljaCBhbHdheXMgcmV0dXJucyBkaXN0YW5jZXMgY29udmVydGVkIHRvIG91dGxpbmUgdW5pdHMuCisgICAqCisgICAqICAgIFlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgYHhfc2NhbGUnIGFuZCBgeV9zY2FsZScgcGFyYW1ldGVycworICAgKiAgICByZXR1cm5lZCBieSBARlRfR2V0X1BGUl9NZXRyaWNzIHRvIHNjYWxlIHRoZXNlIHRvIGRldmljZSBzdWJwaXhlbHMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X1BGUl9LZXJuaW5nKCBGVF9GYWNlICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnQsCkBAIC0xMzIsMzAgKzEzNywzMyBAQAogICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciAgKmF2ZWN0b3IgKTsKIAogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqIEBmdW5jdGlvbjoKLSAgKiAgICBGVF9HZXRfUEZSX0FkdmFuY2UKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgICBSZXR1cm4gYSBnaXZlbiBnbHlwaCBhZHZhbmNlLCBleHByZXNzZWQgaW4gb3JpZ2luYWwgbWV0cmljcyB1bml0cywKLSAgKiAgICBmcm9tIGEgUEZSIGZvbnQuCi0gICoKLSAgKiBAaW5wdXQ6Ci0gICogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgotICAqCi0gICogICAgZ2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4KLSAgKgotICAqIEBvdXRwdXQ6Ci0gICogICAgYWFkdmFuY2UgOjogVGhlIGdseXBoIGFkdmFuY2UgaW4gbWV0cmljcyB1bml0cy4KLSAgKgotICAqIEByZXR1cm46Ci0gICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KLSAgKgotICAqIEBub3RlOgotICAqICAgIFlvdSBjYW4gdXNlIHRoZSBgeF9zY2FsZScgb3IgYHlfc2NhbGUnIHJlc3VsdHMgb2YgQEZUX0dldF9QRlJfTWV0cmljcwotICAqICAgIHRvIGNvbnZlcnQgdGhlIGFkdmFuY2UgdG8gZGV2aWNlIHN1Yi1waXhlbHMgKGkuZS4sIDEvNjR0aCBvZiBwaXhlbHMpLgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgIEZUX0dldF9QRlJfQWR2YW5jZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgIFJldHVybiBhIGdpdmVuIGdseXBoIGFkdmFuY2UsIGV4cHJlc3NlZCBpbiBvcmlnaW5hbCBtZXRyaWNzIHVuaXRzLAorICAgKiAgICBmcm9tIGEgUEZSIGZvbnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICAgZmFjZSA6OgorICAgKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBmYWNlLgorICAgKgorICAgKiAgICBnaW5kZXggOjoKKyAgICogICAgICBUaGUgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgIGFhZHZhbmNlIDo6CisgICAqICAgICAgVGhlIGdseXBoIGFkdmFuY2UgaW4gbWV0cmljcyB1bml0cy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgIFlvdSBjYW4gdXNlIHRoZSBgeF9zY2FsZScgb3IgYHlfc2NhbGUnIHJlc3VsdHMgb2YgQEZUX0dldF9QRlJfTWV0cmljcworICAgKiAgICB0byBjb252ZXJ0IHRoZSBhZHZhbmNlIHRvIGRldmljZSBzdWJwaXhlbHMgKGkuZS4sIDEvNjR0aCBvZiBwaXhlbHMpLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9QRlJfQWR2YW5jZSggRlRfRmFjZSAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdpbmRleCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaAppbmRleCBmYThhZDIyLi4yYjdlNWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHJlbmRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHJlbmRlci5oCisgKgorICogICBGcmVlVHlwZSByZW5kZXJlciBtb2R1bGVzIHB1YmxpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUUkVOREVSX0hfCkBAIC0yOCwxMiArMjgsMTIgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlX21hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIG1vZHVsZV9tYW5hZ2VtZW50CisgICAqCisgICAqLwogCiAKICAgLyogY3JlYXRlIGEgbmV3IGdseXBoIG9iamVjdCAqLwpAQCAtMTE2LDMyICsxMTYsMzkgQEAKICNkZWZpbmUgRlRSZW5kZXJlcl9zZXRNb2RlICBGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmVuZGVyZXJfQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlbmRlcmVyIG1vZHVsZSBjbGFzcyBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcm9vdCAgICAgICAgICAgIDo6IFRoZSByb290IEBGVF9Nb2R1bGVfQ2xhc3MgZmllbGRzLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9mb3JtYXQgICAgOjogVGhlIGdseXBoIGltYWdlIGZvcm1hdCB0aGlzIHJlbmRlcmVyIGhhbmRsZXMuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlbmRlcl9nbHlwaCAgICA6OiBBIG1ldGhvZCB1c2VkIHRvIHJlbmRlciB0aGUgaW1hZ2UgdGhhdCBpcyBpbiBhICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gZ2x5cGggc2xvdCBpbnRvIGEgYml0bWFwLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRyYW5zZm9ybV9nbHlwaCA6OiBBIG1ldGhvZCB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgaW1hZ2UgdGhhdCBpcyBpbiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgYSBnaXZlbiBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdldF9nbHlwaF9jYm94ICA6OiBBIG1ldGhvZCB1c2VkIHRvIGFjY2VzcyB0aGUgZ2x5cGgncyBjYm94LiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2V0X21vZGUgICAgICAgIDo6IEEgbWV0aG9kIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYXN0ZXJfY2xhc3MgICAgOjogRm9yIEBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSByZW5kZXJlcnMgb25seS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBwb2ludGVyIHRvIGl0cyByYXN0ZXIncyBjbGFzcy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9SZW5kZXJlcl9DbGFzcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIHJlbmRlcmVyIG1vZHVsZSBjbGFzcyBkZXNjcmlwdG9yLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHJvb3QgOjoKKyAgICogICAgIFRoZSByb290IEBGVF9Nb2R1bGVfQ2xhc3MgZmllbGRzLgorICAgKgorICAgKiAgIGdseXBoX2Zvcm1hdCA6OgorICAgKiAgICAgVGhlIGdseXBoIGltYWdlIGZvcm1hdCB0aGlzIHJlbmRlcmVyIGhhbmRsZXMuCisgICAqCisgICAqICAgcmVuZGVyX2dseXBoIDo6CisgICAqICAgICBBIG1ldGhvZCB1c2VkIHRvIHJlbmRlciB0aGUgaW1hZ2UgdGhhdCBpcyBpbiBhCisgICAqICAgICBnaXZlbiBnbHlwaCBzbG90IGludG8gYSBiaXRtYXAuCisgICAqCisgICAqICAgdHJhbnNmb3JtX2dseXBoIDo6CisgICAqICAgICBBIG1ldGhvZCB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgaW1hZ2UgdGhhdCBpcyBpbgorICAgKiAgICAgYSBnaXZlbiBnbHlwaCBzbG90LgorICAgKgorICAgKiAgIGdldF9nbHlwaF9jYm94IDo6CisgICAqICAgICBBIG1ldGhvZCB1c2VkIHRvIGFjY2VzcyB0aGUgZ2x5cGgncyBjYm94LgorICAgKgorICAgKiAgIHNldF9tb2RlIDo6CisgICAqICAgICBBIG1ldGhvZCB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgIHJhc3Rlcl9jbGFzcyA6OgorICAgKiAgICAgRm9yIEBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSByZW5kZXJlcnMgb25seS4KKyAgICogICAgIFRoaXMgaXMgYSBwb2ludGVyIHRvIGl0cyByYXN0ZXIncyBjbGFzcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9SZW5kZXJlcl9DbGFzc18KICAgewogICAgIEZUX01vZHVsZV9DbGFzcyAgICAgICAgICAgIHJvb3Q7CkBAIC0xNTgsNjQgKzE2NSw3MCBAQAogICB9IEZUX1JlbmRlcmVyX0NsYXNzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X1JlbmRlcmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIGEgZ2l2ZW4gZ2x5cGggZm9ybWF0LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb3JtYXQgIDo6IFRoZSBnbHlwaCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHJlbmRlcmVyIGhhbmRsZS4gIDB+aWYgbm9uZSBmb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBlcnJvciB3aWxsIGJlIHJldHVybmVkIGlmIGEgbW9kdWxlIGFscmVhZHkgZXhpc3RzIGJ5IHRoYXQgbmFtZSwgKi8KLSAgLyogICAgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUbyBhZGQgYSBuZXcgcmVuZGVyZXIsIHNpbXBseSB1c2UgQEZUX0FkZF9Nb2R1bGUuICBUbyByZXRyaWV2ZSBhICAgKi8KLSAgLyogICAgcmVuZGVyZXIgYnkgaXRzIG5hbWUsIHVzZSBARlRfR2V0X01vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9SZW5kZXJlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIGEgZ2l2ZW4gZ2x5cGggZm9ybWF0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIGZvcm1hdCA6OgorICAgKiAgICAgVGhlIGdseXBoIGZvcm1hdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBBIHJlbmRlcmVyIGhhbmRsZS4gIDB+aWYgbm9uZSBmb3VuZC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgQW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZCBpZiBhIG1vZHVsZSBhbHJlYWR5IGV4aXN0cyBieSB0aGF0IG5hbWUsCisgICAqICAgb3IgaWYgdGhlIG1vZHVsZSByZXF1aXJlcyBhIHZlcnNpb24gb2YgRnJlZVR5cGUgdGhhdCBpcyB0b28gZ3JlYXQuCisgICAqCisgICAqICAgVG8gYWRkIGEgbmV3IHJlbmRlcmVyLCBzaW1wbHkgdXNlIEBGVF9BZGRfTW9kdWxlLiAgVG8gcmV0cmlldmUgYQorICAgKiAgIHJlbmRlcmVyIGJ5IGl0cyBuYW1lLCB1c2UgQEZUX0dldF9Nb2R1bGUuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX1JlbmRlcmVyICkKICAgRlRfR2V0X1JlbmRlcmVyKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhfRm9ybWF0ICBmb3JtYXQgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NldF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldCB0aGUgY3VycmVudCByZW5kZXJlciB0byB1c2UsIGFuZCBzZXQgYWRkaXRpb25hbCBtb2RlLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlbmRlcmVyICAgOjogQSBoYW5kbGUgdG8gdGhlIHJlbmRlcmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3BhcmFtcyA6OiBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXJhbWV0ZXJzIDo6IEFkZGl0aW9uYWwgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSByZW5kZXJlciB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBnbHlwaCAgICAgKi8KLSAgLyogICAgaW1hZ2VzIGluIHRoZSByZW5kZXJlcidzIGtub3duIGZvcm1hdCBpbnRvIGJpdG1hcHMuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciBvdGhlciBmb3JtYXRzLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEN1cnJlbnRseSwgbm8gRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlIHVzZXMgYHBhcmFtZXRlcnMnOyB5b3UgICAgICAqLwotICAvKiAgICBzaG91bGQgdGh1cyBhbHdheXMgcGFzcyBOVUxMIGFzIHRoZSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfU2V0X1JlbmRlcmVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBTZXQgdGhlIGN1cnJlbnQgcmVuZGVyZXIgdG8gdXNlLCBhbmQgc2V0IGFkZGl0aW9uYWwgbW9kZS4KKyAgICoKKyAgICogQGlub3V0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHJlbmRlcmVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcmVuZGVyZXIgb2JqZWN0LgorICAgKgorICAgKiAgIG51bV9wYXJhbXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgIHBhcmFtZXRlcnMgOjoKKyAgICogICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSByZW5kZXJlciB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBnbHlwaAorICAgKiAgIGltYWdlcyBpbiB0aGUgcmVuZGVyZXIncyBrbm93biBmb3JtYXQgaW50byBiaXRtYXBzLgorICAgKgorICAgKiAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yIG90aGVyIGZvcm1hdHMuCisgICAqCisgICAqICAgQ3VycmVudGx5LCBubyBGcmVlVHlwZSByZW5kZXJlciBtb2R1bGUgdXNlcyBgcGFyYW1ldGVycyc7IHlvdQorICAgKiAgIHNob3VsZCB0aHVzIGFsd2F5cyBwYXNzIE5VTEwgYXMgdGhlIHZhbHVlLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NldF9SZW5kZXJlciggRlRfTGlicmFyeSAgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJlciAgICByZW5kZXJlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKaW5kZXggNzJjYjA4Yi4uNDgxYTA1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c2l6ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzaXplIG9iamVjdHMgbWFuYWdlbWVudCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c2l6ZXMuaAorICoKKyAqICAgRnJlZVR5cGUgc2l6ZSBvYmplY3RzIG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHlwaWNhbCBhcHBsaWNhdGlvbiB3b3VsZCBub3JtYWxseSBub3QgbmVlZCB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLiAgICovCi0gIC8qIEhvd2V2ZXIsIHRoZXkgaGF2ZSBiZWVuIHBsYWNlZCBpbiBhIHB1YmxpYyBBUEkgZm9yIHRoZSByYXJlIGNhc2VzICAgICAqLwotICAvKiB3aGVyZSB0aGV5IGFyZSBuZWVkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVHlwaWNhbCBhcHBsaWNhdGlvbiB3b3VsZCBub3JtYWxseSBub3QgbmVlZCB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICAgKiBIb3dldmVyLCB0aGV5IGhhdmUgYmVlbiBwbGFjZWQgaW4gYSBwdWJsaWMgQVBJIGZvciB0aGUgcmFyZSBjYXNlcworICAgKiB3aGVyZSB0aGV5IGFyZSBuZWVkZWQuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgRlRTSVpFU19IXwpAQCAtNDIsMTA5ICs0MiwxMTMgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZXNfbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2l6ZSBNYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTWFuYWdpbmcgbXVsdGlwbGUgc2l6ZXMgcGVyIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBjcmVhdGluZyBhIG5ldyBmYWNlIG9iamVjdCAoZS5nLiwgd2l0aCBARlRfTmV3X0ZhY2UpLCBhbiAgICAgICovCi0gIC8qICAgIEBGVF9TaXplIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHVzZWQgdG8gc3RvcmUgYWxsICAgICAqLwotICAvKiAgICBwaXhlbC1zaXplIGRlcGVuZGVudCBpbmZvcm1hdGlvbiwgYXZhaWxhYmxlIGluIHRoZSBgZmFjZS0+c2l6ZScgICAgKi8KLSAgLyogICAgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJdCBpcyBob3dldmVyIHBvc3NpYmxlIHRvIGNyZWF0ZSBtb3JlIHNpemVzIGZvciBhIGdpdmVuIGZhY2UsICAgICAgKi8KLSAgLyogICAgbW9zdGx5IGluIG9yZGVyIHRvIG1hbmFnZSBzZXZlcmFsIGNoYXJhY3RlciBwaXhlbCBzaXplcyBvZiB0aGUgICAgICovCi0gIC8qICAgIHNhbWUgZm9udCBmYW1pbHkgYW5kIHN0eWxlLiAgU2VlIEBGVF9OZXdfU2l6ZSBhbmQgQEZUX0RvbmVfU2l6ZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm90ZSB0aGF0IEBGVF9TZXRfUGl4ZWxfU2l6ZXMgYW5kIEBGVF9TZXRfQ2hhcl9TaXplIG9ubHkgICAgICAgICAgICovCi0gIC8qICAgIG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgYGFjdGl2ZScgc2l6ZTsgeW91IHRodXMgbmVlZCAgICAqLwotICAvKiAgICB0byB1c2UgQEZUX0FjdGl2YXRlX1NpemUgdG8gY2hhbmdlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDk5JSBvZiBhcHBsaWNhdGlvbnMgd29uJ3QgbmVlZCB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUsICAgICAgICAqLwotICAvKiAgICBlc3BlY2lhbGx5IGlmIHRoZXkgdXNlIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0sIHNvIGJlIGNhdXRpb3VzICAgICAgKi8KLSAgLyogICAgd2hlbiB1c2luZyB0aGVzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIHNpemVzX21hbmFnZW1lbnQKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFNpemUgTWFuYWdlbWVudAorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgTWFuYWdpbmcgbXVsdGlwbGUgc2l6ZXMgcGVyIGZhY2UuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXaGVuIGNyZWF0aW5nIGEgbmV3IGZhY2Ugb2JqZWN0IChlLmcuLCB3aXRoIEBGVF9OZXdfRmFjZSksIGFuCisgICAqICAgQEZUX1NpemUgb2JqZWN0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhbmQgdXNlZCB0byBzdG9yZSBhbGwKKyAgICogICBwaXhlbC1zaXplIGRlcGVuZGVudCBpbmZvcm1hdGlvbiwgYXZhaWxhYmxlIGluIHRoZSBgZmFjZS0+c2l6ZScKKyAgICogICBmaWVsZC4KKyAgICoKKyAgICogICBJdCBpcyBob3dldmVyIHBvc3NpYmxlIHRvIGNyZWF0ZSBtb3JlIHNpemVzIGZvciBhIGdpdmVuIGZhY2UsCisgICAqICAgbW9zdGx5IGluIG9yZGVyIHRvIG1hbmFnZSBzZXZlcmFsIGNoYXJhY3RlciBwaXhlbCBzaXplcyBvZiB0aGUKKyAgICogICBzYW1lIGZvbnQgZmFtaWx5IGFuZCBzdHlsZS4gIFNlZSBARlRfTmV3X1NpemUgYW5kIEBGVF9Eb25lX1NpemUuCisgICAqCisgICAqICAgTm90ZSB0aGF0IEBGVF9TZXRfUGl4ZWxfU2l6ZXMgYW5kIEBGVF9TZXRfQ2hhcl9TaXplIG9ubHkKKyAgICogICBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGBhY3RpdmUnIHNpemU7IHlvdSB0aHVzIG5lZWQKKyAgICogICB0byB1c2UgQEZUX0FjdGl2YXRlX1NpemUgdG8gY2hhbmdlIGl0LgorICAgKgorICAgKiAgIDk5JSBvZiBhcHBsaWNhdGlvbnMgd29uJ3QgbmVlZCB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUsCisgICAqICAgZXNwZWNpYWxseSBpZiB0aGV5IHVzZSB0aGUgY2FjaGluZyBzdWItc3lzdGVtLCBzbyBiZSBjYXV0aW91cworICAgKiAgIHdoZW4gdXNpbmcgdGhlc2UuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ3JlYXRlIGEgbmV3IHNpemUgb2JqZWN0IGZyb20gYSBnaXZlbiBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXNpemUgOjogQSBoYW5kbGUgdG8gYSBuZXcgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgWW91IG5lZWQgdG8gY2FsbCBARlRfQWN0aXZhdGVfU2l6ZSBpbiBvcmRlciB0byBzZWxlY3QgdGhlIG5ldyBzaXplICovCi0gIC8qICAgIGZvciB1cGNvbWluZyBjYWxscyB0byBARlRfU2V0X1BpeGVsX1NpemVzLCBARlRfU2V0X0NoYXJfU2l6ZSwgICAgICAqLwotICAvKiAgICBARlRfTG9hZF9HbHlwaCwgQEZUX0xvYWRfQ2hhciwgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENyZWF0ZSBhIG5ldyBzaXplIG9iamVjdCBmcm9tIGEgZ2l2ZW4gZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHBhcmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBuZXcgc2l6ZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IG5lZWQgdG8gY2FsbCBARlRfQWN0aXZhdGVfU2l6ZSBpbiBvcmRlciB0byBzZWxlY3QgdGhlIG5ldyBzaXplCisgICAqICAgZm9yIHVwY29taW5nIGNhbGxzIHRvIEBGVF9TZXRfUGl4ZWxfU2l6ZXMsIEBGVF9TZXRfQ2hhcl9TaXplLAorICAgKiAgIEBGVF9Mb2FkX0dseXBoLCBARlRfTG9hZF9DaGFyLCBldGMuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfTmV3X1NpemUoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgRlRfU2l6ZSogIHNpemUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RvbmVfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERpc2NhcmQgYSBnaXZlbiBzaXplIG9iamVjdC4gIE5vdGUgdGhhdCBARlRfRG9uZV9GYWNlICAgICAgICAgICAgICAqLwotICAvKiAgICBhdXRvbWF0aWNhbGx5IGRpc2NhcmRzIGFsbCBzaXplIG9iamVjdHMgYWxsb2NhdGVkIHdpdGggICAgICAgICAgICAgKi8KLSAgLyogICAgQEZUX05ld19TaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0RvbmVfU2l6ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGlzY2FyZCBhIGdpdmVuIHNpemUgb2JqZWN0LiAgTm90ZSB0aGF0IEBGVF9Eb25lX0ZhY2UKKyAgICogICBhdXRvbWF0aWNhbGx5IGRpc2NhcmRzIGFsbCBzaXplIG9iamVjdHMgYWxsb2NhdGVkIHdpdGgKKyAgICogICBARlRfTmV3X1NpemUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIHRhcmdldCBzaXplIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0RvbmVfU2l6ZSggRlRfU2l6ZSAgc2l6ZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQWN0aXZhdGVfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXZlbiB0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIHNldmVyYWwgc2l6ZSBvYmplY3RzIGZvciBhICAgICovCi0gIC8qICAgIGdpdmVuIGZhY2UgKHNlZSBARlRfTmV3X1NpemUgZm9yIGRldGFpbHMpLCBmdW5jdGlvbnMgbGlrZSAgICAgICAgICAqLwotICAvKiAgICBARlRfTG9hZF9HbHlwaCBvciBARlRfTG9hZF9DaGFyIG9ubHkgdXNlIHRoZSBvbmUgdGhhdCBoYXMgYmVlbiAgICAgKi8KLSAgLyogICAgYWN0aXZhdGVkIGxhc3QgdG8gZGV0ZXJtaW5lIHRoZSBgY3VycmVudCBjaGFyYWN0ZXIgcGl4ZWwgc2l6ZScuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGBhY3RpdmF0ZScgYSBwcmV2aW91c2x5IGNyZWF0ZWQgc2l6ZSAgKi8KLSAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgYGZhY2UnIGlzIHRoZSBzaXplJ3MgcGFyZW50IGZhY2Ugb2JqZWN0LCB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMgICovCi0gIC8qICAgIHRoZSB2YWx1ZSBvZiBgZmFjZS0+c2l6ZScgdG8gdGhlIGlucHV0IHNpemUgaGFuZGxlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9BY3RpdmF0ZV9TaXplCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBFdmVuIHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgc2V2ZXJhbCBzaXplIG9iamVjdHMgZm9yIGEKKyAgICogICBnaXZlbiBmYWNlIChzZWUgQEZUX05ld19TaXplIGZvciBkZXRhaWxzKSwgZnVuY3Rpb25zIGxpa2UKKyAgICogICBARlRfTG9hZF9HbHlwaCBvciBARlRfTG9hZF9DaGFyIG9ubHkgdXNlIHRoZSBvbmUgdGhhdCBoYXMgYmVlbgorICAgKiAgIGFjdGl2YXRlZCBsYXN0IHRvIGRldGVybWluZSB0aGUgYGN1cnJlbnQgY2hhcmFjdGVyIHBpeGVsIHNpemUnLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYGFjdGl2YXRlJyBhIHByZXZpb3VzbHkgY3JlYXRlZCBzaXplCisgICAqICAgb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgc2l6ZSBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgSWYgYGZhY2UnIGlzIHRoZSBzaXplJ3MgcGFyZW50IGZhY2Ugb2JqZWN0LCB0aGlzIGZ1bmN0aW9uIGNoYW5nZXMKKyAgICogICB0aGUgdmFsdWUgb2YgYGZhY2UtPnNpemUnIHRvIHRoZSBpbnB1dCBzaXplIGhhbmRsZS4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9BY3RpdmF0ZV9TaXplKCBGVF9TaXplICBzaXplICk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaAppbmRleCA4ZWI4ZDcwLi4wYTBhYzMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCkBAIC0xLDIyICsxLDIyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHNuYW1lcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU2ltcGxlIGludGVyZmFjZSB0byBhY2Nlc3MgU0ZOVCBgbmFtZScgdGFibGVzICh3aGljaCBhcmUgdXNlZCAgICAgICAgKi8KLS8qICAgIHRvIGhvbGQgZm9udCBuYW1lcywgY29weXJpZ2h0IGluZm8sIG5vdGljZXMsIGV0Yy4pIChzcGVjaWZpY2F0aW9uKS4gICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHNuYW1lcy5oCisgKgorICogICBTaW1wbGUgaW50ZXJmYWNlIHRvIGFjY2VzcyBTRk5UIGBuYW1lJyB0YWJsZXMgKHdoaWNoIGFyZSB1c2VkCisgKiAgIHRvIGhvbGQgZm9udCBuYW1lcywgY29weXJpZ2h0IGluZm8sIG5vdGljZXMsIGV0Yy4pIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEKKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFNOQU1FU19IXwpAQCAtMzcsNzIgKzM3LDc4IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNmbnRfbmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNGTlQgTmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFjY2VzcyB0aGUgbmFtZXMgZW1iZWRkZWQgaW4gVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZpbGVzLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBUcnVlVHlwZSBhbmQgT3BlblR5cGUgc3BlY2lmaWNhdGlvbnMgYWxsb3cgdGhlIGluY2x1c2lvbiBvZiAgICAqLwotICAvKiAgICBhIHNwZWNpYWwgbmFtZXMgdGFibGUgKGBuYW1lJykgaW4gZm9udCBmaWxlcy4gIFRoaXMgdGFibGUgY29udGFpbnMgKi8KLSAgLyogICAgdGV4dHVhbCAoYW5kIGludGVybmF0aW9uYWxpemVkKSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGZvbnQsICAgICovCi0gIC8qICAgIGxpa2UgZmFtaWx5IG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGRlZmluaXRpb25zIGJlbG93IGFyZSB1c2VkIHRvIGFjY2VzcyB0aGVtIGlmIGF2YWlsYWJsZS4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGdseXBoIG5hbWVzISAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgc2ZudF9uYW1lcworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgU0ZOVCBOYW1lcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQWNjZXNzIHRoZSBuYW1lcyBlbWJlZGRlZCBpbiBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZmlsZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIHNwZWNpZmljYXRpb25zIGFsbG93IHRoZSBpbmNsdXNpb24gb2YKKyAgICogICBhIHNwZWNpYWwgbmFtZXMgdGFibGUgKGBuYW1lJykgaW4gZm9udCBmaWxlcy4gIFRoaXMgdGFibGUgY29udGFpbnMKKyAgICogICB0ZXh0dWFsIChhbmQgaW50ZXJuYXRpb25hbGl6ZWQpIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgZm9udCwKKyAgICogICBsaWtlIGZhbWlseSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KKyAgICoKKyAgICogICBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZW0gaWYgYXZhaWxhYmxlLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZ2x5cGggbmFtZXMhCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2ZudE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhbiBTRk5UIGBuYW1lJyB0YWJsZSBlbnRyeS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGxhdGZvcm1faWQgOjogVGhlIHBsYXRmb3JtIElEIGZvciBgc3RyaW5nJy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIFNlZSBAVFRfUExBVEZPUk1fWFhYIGZvciBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZW5jb2RpbmdfaWQgOjogVGhlIGVuY29kaW5nIElEIGZvciBgc3RyaW5nJy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIFNlZSBAVFRfQVBQTEVfSURfWFhYLCBAVFRfTUFDX0lEX1hYWCwgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBAVFRfSVNPX0lEX1hYWCwgQFRUX01TX0lEX1hYWCwgYW5kIEBUVF9BRE9CRV9JRF9YWFggKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZm9yIHBvc3NpYmxlIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsYW5ndWFnZV9pZCA6OiBUaGUgbGFuZ3VhZ2UgSUQgZm9yIGBzdHJpbmcnLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgU2VlIEBUVF9NQUNfTEFOR0lEX1hYWCBhbmQgQFRUX01TX0xBTkdJRF9YWFggZm9yICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJlZCBPcGVuVHlwZSB2YWx1ZXMgZm9yIGBsYW5ndWFnZV9pZCcgYXJlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGFsd2F5cyBzbWFsbGVyIHRoYW4gMHg4MDAwOyB2YWx1ZXMgZXF1YWwgb3IgbGFyZ2VyICAqLwotICAvKiAgICAgICAgICAgICAgICAgICB0aGFuIDB4ODAwMCB1c3VhbGx5IGluZGljYXRlIGEgbGFuZ3VhZ2UgdGFnIHN0cmluZyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgKGludHJvZHVjZWQgaW4gT3BlblR5cGUgdmVyc2lvbiAxLjYpLiAgVXNlIGZ1bmN0aW9uICovCi0gIC8qICAgICAgICAgICAgICAgICAgIEBGVF9HZXRfU2ZudF9MYW5nVGFnIHdpdGggYGxhbmd1YWdlX2lkJyBhcyBpdHMgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBhcmd1bWVudCB0byByZXRyaWV2ZSB0aGUgYXNzb2NpYXRlZCBsYW5ndWFnZSB0YWcuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5hbWVfaWQgICAgIDo6IEFuIGlkZW50aWZpZXIgZm9yIGBzdHJpbmcnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBTZWUgQFRUX05BTUVfSURfWFhYIGZvciBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmluZyAgICAgIDo6IFRoZSBgbmFtZScgc3RyaW5nLiAgTm90ZSB0aGF0IGl0cyBmb3JtYXQgZGlmZmVycyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIChwbGF0Zm9ybSxlbmNvZGluZykgcGFpciwgYmVpbmcgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZWl0aGVyIGEgc3RyaW5nIG9mIGJ5dGVzICh3aXRob3V0IGEgdGVybWluYXRpbmcgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIE5VTEwgYnl0ZSkgb3IgY29udGFpbmluZyBVVEYtMTZCRSBlbnRpdGllcy4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaW5nX2xlbiAgOjogVGhlIGxlbmd0aCBvZiBgc3RyaW5nJyBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBUcnVlVHlwZSBvciBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlICAgICovCi0gIC8qICAgIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU2ZudE5hbWUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYW4gU0ZOVCBgbmFtZScgdGFibGUgZW50cnkuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcGxhdGZvcm1faWQgOjoKKyAgICogICAgIFRoZSBwbGF0Zm9ybSBJRCBmb3IgYHN0cmluZycuCisgICAqICAgICBTZWUgQFRUX1BMQVRGT1JNX1hYWCBmb3IgcG9zc2libGUgdmFsdWVzLgorICAgKgorICAgKiAgIGVuY29kaW5nX2lkIDo6CisgICAqICAgICBUaGUgZW5jb2RpbmcgSUQgZm9yIGBzdHJpbmcnLgorICAgKiAgICAgU2VlIEBUVF9BUFBMRV9JRF9YWFgsIEBUVF9NQUNfSURfWFhYLAorICAgKiAgICAgQFRUX0lTT19JRF9YWFgsIEBUVF9NU19JRF9YWFgsIGFuZCBAVFRfQURPQkVfSURfWFhYCisgICAqICAgICBmb3IgcG9zc2libGUgdmFsdWVzLgorICAgKgorICAgKiAgIGxhbmd1YWdlX2lkIDo6CisgICAqICAgICBUaGUgbGFuZ3VhZ2UgSUQgZm9yIGBzdHJpbmcnLgorICAgKiAgICAgU2VlIEBUVF9NQUNfTEFOR0lEX1hYWCBhbmQgQFRUX01TX0xBTkdJRF9YWFggZm9yCisgICAqICAgICBwb3NzaWJsZSB2YWx1ZXMuCisgICAqCisgICAqICAgICBSZWdpc3RlcmVkIE9wZW5UeXBlIHZhbHVlcyBmb3IgYGxhbmd1YWdlX2lkJyBhcmUKKyAgICogICAgIGFsd2F5cyBzbWFsbGVyIHRoYW4gMHg4MDAwOyB2YWx1ZXMgZXF1YWwgb3IgbGFyZ2VyCisgICAqICAgICB0aGFuIDB4ODAwMCB1c3VhbGx5IGluZGljYXRlIGEgbGFuZ3VhZ2UgdGFnIHN0cmluZworICAgKiAgICAgKGludHJvZHVjZWQgaW4gT3BlblR5cGUgdmVyc2lvbiAxLjYpLiAgVXNlIGZ1bmN0aW9uCisgICAqICAgICBARlRfR2V0X1NmbnRfTGFuZ1RhZyB3aXRoIGBsYW5ndWFnZV9pZCcgYXMgaXRzCisgICAqICAgICBhcmd1bWVudCB0byByZXRyaWV2ZSB0aGUgYXNzb2NpYXRlZCBsYW5ndWFnZSB0YWcuCisgICAqCisgICAqICAgbmFtZV9pZCA6OgorICAgKiAgICAgQW4gaWRlbnRpZmllciBmb3IgYHN0cmluZycuCisgICAqICAgICBTZWUgQFRUX05BTUVfSURfWFhYIGZvciBwb3NzaWJsZSB2YWx1ZXMuCisgICAqCisgICAqICAgc3RyaW5nIDo6CisgICAqICAgICBUaGUgYG5hbWUnIHN0cmluZy4gIE5vdGUgdGhhdCBpdHMgZm9ybWF0IGRpZmZlcnMKKyAgICogICAgIGRlcGVuZGluZyBvbiB0aGUgKHBsYXRmb3JtLGVuY29kaW5nKSBwYWlyLCBiZWluZworICAgKiAgICAgZWl0aGVyIGEgc3RyaW5nIG9mIGJ5dGVzICh3aXRob3V0IGEgdGVybWluYXRpbmcKKyAgICogICAgIE5VTEwgYnl0ZSkgb3IgY29udGFpbmluZyBVVEYtMTZCRSBlbnRpdGllcy4KKyAgICoKKyAgICogICBzdHJpbmdfbGVuIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIG9mIGBzdHJpbmcnIGluIGJ5dGVzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBQbGVhc2UgcmVmZXIgdG8gdGhlIFRydWVUeXBlIG9yIE9wZW5UeXBlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUKKyAgICogICBkZXRhaWxzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NmbnROYW1lXwogICB7CiAgICAgRlRfVVNob3J0ICBwbGF0Zm9ybV9pZDsKQEAgLTExNiw4MyArMTIyLDk2IEBACiAgIH0gRlRfU2ZudE5hbWU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfU2ZudF9OYW1lX0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG5hbWUgc3RyaW5ncyBpbiB0aGUgU0ZOVCBgbmFtZScgdGFibGUuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIGBuYW1lJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X1NmbnRfTmFtZV9Db3VudAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgdGhlIG51bWJlciBvZiBuYW1lIHN0cmluZ3MgaW4gdGhlIFNGTlQgYG5hbWUnIHRhYmxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUgYG5hbWUnIHRhYmxlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBjb25maWcgbWFjcm8KKyAgICogICBgVFRfQ09ORklHX09QVElPTl9TRk5UX05BTUVTJyBpcyBub3QgZGVmaW5lZCBpbiBgZnRvcHRpb24uaCcuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX1VJbnQgKQogICBGVF9HZXRfU2ZudF9OYW1lX0NvdW50KCBGVF9GYWNlICBmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfU2ZudF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXRyaWV2ZSBhIHN0cmluZyBvZiB0aGUgU0ZOVCBgbmFtZScgdGFibGUgZm9yIGEgZ2l2ZW4gaW5kZXguICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGlkeCAgIDo6IFRoZSBpbmRleCBvZiB0aGUgYG5hbWUnIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFuYW1lIDo6IFRoZSBpbmRleGVkIEBGVF9TZm50TmFtZSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBgc3RyaW5nJyBhcnJheSByZXR1cm5lZCBpbiB0aGUgYGFuYW1lJyBzdHJ1Y3R1cmUgaXMgbm90ICAgICAgICAqLwotICAvKiAgICBudWxsLXRlcm1pbmF0ZWQuICBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZGVhbGxvY2F0ZSBgc3RyaW5nJyAgKi8KLSAgLyogICAgYnkgeW91cnNlbGY7IEZyZWVUeXBlIHRha2VzIGNhcmUgb2YgaXQgaWYgeW91IGNhbGwgQEZUX0RvbmVfRmFjZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2UgQEZUX0dldF9TZm50X05hbWVfQ291bnQgdG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlICAgKi8KLSAgLyogICAgYG5hbWUnIHRhYmxlIGVudHJpZXMsIHRoZW4gZG8gYSBsb29wIHVudGlsIHlvdSBnZXQgdGhlIHJpZ2h0ICAgICAgICovCi0gIC8qICAgIHBsYXRmb3JtLCBlbmNvZGluZywgYW5kIG5hbWUgSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYG5hbWUnIHRhYmxlIGZvcm1hdH4xIGVudHJpZXMgY2FuIHVzZSBsYW5ndWFnZSB0YWdzIGFsc28sIHNlZSAgICAgICovCi0gIC8qICAgIEBGVF9HZXRfU2ZudF9MYW5nVGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfU2ZudF9OYW1lCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSBhIHN0cmluZyBvZiB0aGUgU0ZOVCBgbmFtZScgdGFibGUgZm9yIGEgZ2l2ZW4gaW5kZXguCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuCisgICAqCisgICAqICAgaWR4IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGBuYW1lJyBzdHJpbmcuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYW5hbWUgOjoKKyAgICogICAgIFRoZSBpbmRleGVkIEBGVF9TZm50TmFtZSBzdHJ1Y3R1cmUuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGBzdHJpbmcnIGFycmF5IHJldHVybmVkIGluIHRoZSBgYW5hbWUnIHN0cnVjdHVyZSBpcyBub3QKKyAgICogICBudWxsLXRlcm1pbmF0ZWQuICBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZGVhbGxvY2F0ZSBgc3RyaW5nJworICAgKiAgIGJ5IHlvdXJzZWxmOyBGcmVlVHlwZSB0YWtlcyBjYXJlIG9mIGl0IGlmIHlvdSBjYWxsIEBGVF9Eb25lX0ZhY2UuCisgICAqCisgICAqICAgVXNlIEBGVF9HZXRfU2ZudF9OYW1lX0NvdW50IHRvIGdldCB0aGUgdG90YWwgbnVtYmVyIG9mIGF2YWlsYWJsZQorICAgKiAgIGBuYW1lJyB0YWJsZSBlbnRyaWVzLCB0aGVuIGRvIGEgbG9vcCB1bnRpbCB5b3UgZ2V0IHRoZSByaWdodAorICAgKiAgIHBsYXRmb3JtLCBlbmNvZGluZywgYW5kIG5hbWUgSUQuCisgICAqCisgICAqICAgYG5hbWUnIHRhYmxlIGZvcm1hdH4xIGVudHJpZXMgY2FuIHVzZSBsYW5ndWFnZSB0YWdzIGFsc28sIHNlZQorICAgKiAgIEBGVF9HZXRfU2ZudF9MYW5nVGFnLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybworICAgKiAgIGBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMnIGlzIG5vdCBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfU2ZudF9OYW1lKCBGVF9GYWNlICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgaWR4LAogICAgICAgICAgICAgICAgICAgICBGVF9TZm50TmFtZSAgKmFuYW1lICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TZm50TGFuZ1RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIGxhbmd1YWdlIHRhZyBlbnRyeSBmcm9tIGFuIFNGTlQgYG5hbWUnICAgICAgKi8KLSAgLyogICAgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaW5nICAgICAgOjogVGhlIGxhbmd1YWdlIHRhZyBzdHJpbmcsIGVuY29kZWQgaW4gVVRGLTE2QkUgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICh3aXRob3V0IHRyYWlsaW5nIE5VTEwgYnl0ZXMpLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaW5nX2xlbiAgOjogVGhlIGxlbmd0aCBvZiBgc3RyaW5nJyBpbiAqYnl0ZXMqLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBUcnVlVHlwZSBvciBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlICAgICovCi0gIC8qICAgIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU2ZudExhbmdUYWcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIGEgbGFuZ3VhZ2UgdGFnIGVudHJ5IGZyb20gYW4gU0ZOVCBgbmFtZScKKyAgICogICB0YWJsZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBzdHJpbmcgOjoKKyAgICogICAgIFRoZSBsYW5ndWFnZSB0YWcgc3RyaW5nLCBlbmNvZGVkIGluIFVURi0xNkJFCisgICAqICAgICAod2l0aG91dCB0cmFpbGluZyBOVUxMIGJ5dGVzKS4KKyAgICoKKyAgICogICBzdHJpbmdfbGVuIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIG9mIGBzdHJpbmcnIGluICpieXRlcyouCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFBsZWFzZSByZWZlciB0byB0aGUgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZQorICAgKiAgIGRldGFpbHMuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjgKKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TZm50TGFuZ1RhZ18KICAgewogICAgIEZUX0J5dGUqICBzdHJpbmc7ICAgICAgLyogdGhpcyBzdHJpbmcgaXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkISAqLwpAQCAtMjAxLDQxICsyMjAsNDcgQEAKICAgfSBGVF9TZm50TGFuZ1RhZzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9TZm50X0xhbmdUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHJpZXZlIHRoZSBsYW5ndWFnZSB0YWcgYXNzb2NpYXRlZCB3aXRoIGEgbGFuZ3VhZ2UgSUQgb2YgYW4gU0ZOVCAqLwotICAvKiAgICBgbmFtZScgdGFibGUgZW50cnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxhbmdJRCAgIDo6IFRoZSBsYW5ndWFnZSBJRCwgYXMgcmV0dXJuZWQgYnkgQEZUX0dldF9TZm50X05hbWUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICBUaGlzIGlzIGFsd2F5cyBhIHZhbHVlIGxhcmdlciB0aGFuIDB4ODAwMC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbGFuZ1RhZyA6OiBUaGUgbGFuZ3VhZ2UgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5hbWUnIHRhYmxlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgZW50cnkncyBsYW5ndWFnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGBzdHJpbmcnIGFycmF5IHJldHVybmVkIGluIHRoZSBgYWxhbmdUYWcnIHN0cnVjdHVyZSBpcyBub3QgICAgICovCi0gIC8qICAgIG51bGwtdGVybWluYXRlZC4gIE5vdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBkZWFsbG9jYXRlIGBzdHJpbmcnICAqLwotICAvKiAgICBieSB5b3Vyc2VsZjsgRnJlZVR5cGUgdGFrZXMgY2FyZSBvZiBpdCBpZiB5b3UgY2FsbCBARlRfRG9uZV9GYWNlLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgYG5hbWUnIHRhYmxlIGZvcm1hdH4xIHN1cHBvcnRzIGxhbmd1YWdlIHRhZ3MuICBGb3IgZm9ybWF0fjAgICAqLwotICAvKiAgICB0YWJsZXMsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgRlRfRXJyX0ludmFsaWRfVGFibGUuICBGb3IgICAgKi8KLSAgLyogICAgaW52YWxpZCBmb3JtYXR+MSBsYW5ndWFnZSBJRCB2YWx1ZXMsIEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50IGlzICAgICovCi0gIC8qICAgIHJldHVybmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfU2ZudF9MYW5nVGFnCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSB0aGUgbGFuZ3VhZ2UgdGFnIGFzc29jaWF0ZWQgd2l0aCBhIGxhbmd1YWdlIElEIG9mIGFuIFNGTlQKKyAgICogICBgbmFtZScgdGFibGUgZW50cnkuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuCisgICAqCisgICAqICAgbGFuZ0lEIDo6CisgICAqICAgICBUaGUgbGFuZ3VhZ2UgSUQsIGFzIHJldHVybmVkIGJ5IEBGVF9HZXRfU2ZudF9OYW1lLgorICAgKiAgICAgVGhpcyBpcyBhbHdheXMgYSB2YWx1ZSBsYXJnZXIgdGhhbiAweDgwMDAuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgYWxhbmdUYWcgOjoKKyAgICogICAgIFRoZSBsYW5ndWFnZSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbmFtZScgdGFibGUKKyAgICogICAgIGVudHJ5J3MgbGFuZ3VhZ2UgSUQuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGBzdHJpbmcnIGFycmF5IHJldHVybmVkIGluIHRoZSBgYWxhbmdUYWcnIHN0cnVjdHVyZSBpcyBub3QKKyAgICogICBudWxsLXRlcm1pbmF0ZWQuICBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZGVhbGxvY2F0ZSBgc3RyaW5nJworICAgKiAgIGJ5IHlvdXJzZWxmOyBGcmVlVHlwZSB0YWtlcyBjYXJlIG9mIGl0IGlmIHlvdSBjYWxsIEBGVF9Eb25lX0ZhY2UuCisgICAqCisgICAqICAgT25seSBgbmFtZScgdGFibGUgZm9ybWF0fjEgc3VwcG9ydHMgbGFuZ3VhZ2UgdGFncy4gIEZvciBmb3JtYXR+MAorICAgKiAgIHRhYmxlcywgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBGVF9FcnJfSW52YWxpZF9UYWJsZS4gIEZvcgorICAgKiAgIGludmFsaWQgZm9ybWF0fjEgbGFuZ3VhZ2UgSUQgdmFsdWVzLCBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCBpcworICAgKiAgIHJldHVybmVkLgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybworICAgKiAgIGBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMnIGlzIG5vdCBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9TZm50X0xhbmdUYWcoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBsYW5nSUQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgKaW5kZXggNDRiNmZiZS4uOTFkMjc3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzdHJva2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRzdHJva2UuaAorICoKKyAqICAgRnJlZVR5cGUgcGF0aCBzdHJva2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFNUUk9LRV9IXwpAQCAtMjcsNjggKzI3LDY4IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQHNlY3Rpb246Ci0gICogICAgZ2x5cGhfc3Ryb2tlcgotICAqCi0gICogQHRpdGxlOgotICAqICAgIEdseXBoIFN0cm9rZXIKLSAgKgotICAqIEBhYnN0cmFjdDoKLSAgKiAgICBHZW5lcmF0aW5nIGJvcmRlcmVkIGFuZCBzdHJva2VkIGdseXBocy4KLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgICBUaGlzIGNvbXBvbmVudCBnZW5lcmF0ZXMgc3Ryb2tlZCBvdXRsaW5lcyBvZiBhIGdpdmVuIHZlY3RvcmlhbAotICAqICAgIGdseXBoLiAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHJldHJpZXZlIHRoZSBgb3V0c2lkZScgYW5kL29yIHRoZQotICAqICAgIGBpbnNpZGUnIGJvcmRlcnMgb2YgdGhlIHN0cm9rZS4KLSAgKgotICAqICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBnZW5lcmF0ZSBgYm9yZGVyZWQnIGdseXBoLCBpLmUuLCBnbHlwaHMKLSAgKiAgICBkaXNwbGF5ZWQgd2l0aCBhIGNvbG91cmVkIChhbmQgYW50aS1hbGlhc2VkKSBib3JkZXIgYXJvdW5kIHRoZWlyCi0gICogICAgc2hhcGUuCi0gICoKLSAgKiBAb3JkZXI6Ci0gICogICAgRlRfU3Ryb2tlcgotICAqCi0gICogICAgRlRfU3Ryb2tlcl9MaW5lSm9pbgotICAqICAgIEZUX1N0cm9rZXJfTGluZUNhcAotICAqICAgIEZUX1N0cm9rZXJCb3JkZXIKLSAgKgotICAqICAgIEZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyCi0gICogICAgRlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyCi0gICoKLSAgKiAgICBGVF9HbHlwaF9TdHJva2UKLSAgKiAgICBGVF9HbHlwaF9TdHJva2VCb3JkZXIKLSAgKgotICAqICAgIEZUX1N0cm9rZXJfTmV3Ci0gICogICAgRlRfU3Ryb2tlcl9TZXQKLSAgKiAgICBGVF9TdHJva2VyX1Jld2luZAotICAqICAgIEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lCi0gICogICAgRlRfU3Ryb2tlcl9Eb25lCi0gICoKLSAgKiAgICBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aAotICAqICAgIEZUX1N0cm9rZXJfRW5kU3ViUGF0aAotICAqCi0gICogICAgRlRfU3Ryb2tlcl9MaW5lVG8KLSAgKiAgICBGVF9TdHJva2VyX0NvbmljVG8KLSAgKiAgICBGVF9TdHJva2VyX0N1YmljVG8KLSAgKgotICAqICAgIEZUX1N0cm9rZXJfR2V0Qm9yZGVyQ291bnRzCi0gICogICAgRlRfU3Ryb2tlcl9FeHBvcnRCb3JkZXIKLSAgKiAgICBGVF9TdHJva2VyX0dldENvdW50cwotICAqICAgIEZUX1N0cm9rZXJfRXhwb3J0Ci0gICoKLSAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICAgZ2x5cGhfc3Ryb2tlcgorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgIEdseXBoIFN0cm9rZXIKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgICBHZW5lcmF0aW5nIGJvcmRlcmVkIGFuZCBzdHJva2VkIGdseXBocy4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBUaGlzIGNvbXBvbmVudCBnZW5lcmF0ZXMgc3Ryb2tlZCBvdXRsaW5lcyBvZiBhIGdpdmVuIHZlY3RvcmlhbAorICAgKiAgICBnbHlwaC4gIEl0IGFsc28gYWxsb3dzIHlvdSB0byByZXRyaWV2ZSB0aGUgYG91dHNpZGUnIGFuZC9vciB0aGUKKyAgICogICAgYGluc2lkZScgYm9yZGVycyBvZiB0aGUgc3Ryb2tlLgorICAgKgorICAgKiAgICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZ2VuZXJhdGUgYGJvcmRlcmVkJyBnbHlwaCwgaS5lLiwgZ2x5cGhzCisgICAqICAgIGRpc3BsYXllZCB3aXRoIGEgY29sb3VyZWQgKGFuZCBhbnRpLWFsaWFzZWQpIGJvcmRlciBhcm91bmQgdGhlaXIKKyAgICogICAgc2hhcGUuCisgICAqCisgICAqIEBvcmRlcjoKKyAgICogICAgRlRfU3Ryb2tlcgorICAgKgorICAgKiAgICBGVF9TdHJva2VyX0xpbmVKb2luCisgICAqICAgIEZUX1N0cm9rZXJfTGluZUNhcAorICAgKiAgICBGVF9TdHJva2VyQm9yZGVyCisgICAqCisgICAqICAgIEZUX091dGxpbmVfR2V0SW5zaWRlQm9yZGVyCisgICAqICAgIEZUX091dGxpbmVfR2V0T3V0c2lkZUJvcmRlcgorICAgKgorICAgKiAgICBGVF9HbHlwaF9TdHJva2UKKyAgICogICAgRlRfR2x5cGhfU3Ryb2tlQm9yZGVyCisgICAqCisgICAqICAgIEZUX1N0cm9rZXJfTmV3CisgICAqICAgIEZUX1N0cm9rZXJfU2V0CisgICAqICAgIEZUX1N0cm9rZXJfUmV3aW5kCisgICAqICAgIEZUX1N0cm9rZXJfUGFyc2VPdXRsaW5lCisgICAqICAgIEZUX1N0cm9rZXJfRG9uZQorICAgKgorICAgKiAgICBGVF9TdHJva2VyX0JlZ2luU3ViUGF0aAorICAgKiAgICBGVF9TdHJva2VyX0VuZFN1YlBhdGgKKyAgICoKKyAgICogICAgRlRfU3Ryb2tlcl9MaW5lVG8KKyAgICogICAgRlRfU3Ryb2tlcl9Db25pY1RvCisgICAqICAgIEZUX1N0cm9rZXJfQ3ViaWNUbworICAgKgorICAgKiAgICBGVF9TdHJva2VyX0dldEJvcmRlckNvdW50cworICAgKiAgICBGVF9TdHJva2VyX0V4cG9ydEJvcmRlcgorICAgKiAgICBGVF9TdHJva2VyX0dldENvdW50cworICAgKiAgICBGVF9TdHJva2VyX0V4cG9ydAorICAgKgorICAgKi8KIAogCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKiBAdHlwZToKLSAgKiAgIEZUX1N0cm9rZXIKLSAgKgotICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIE9wYXF1ZSBoYW5kbGUgdG8gYSBwYXRoIHN0cm9rZXIgb2JqZWN0LgotICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfU3Ryb2tlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgT3BhcXVlIGhhbmRsZSB0byBhIHBhdGggc3Ryb2tlciBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9TdHJva2VyUmVjXyogIEZUX1N0cm9rZXI7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAppbmRleCBmZjlmYjQzLi5mMmU3ODU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzeW50aC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgICAgICAgICAgICAgICovCi0vKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c3ludGguaAorICoKKyAqICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZworICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKaW5kZXggZjZiMTYyOS4uMGI0MTViNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzeXN0ZW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIGRlZmluaXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRzeXN0ZW0uaAorICoKKyAqICAgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgZGVmaW5pdGlvbiAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRTWVNURU1fSF8KQEAgLTI2LDMxICsyNiwzMSBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHN5c3RlbV9pbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFN5c3RlbSBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEhvdyBGcmVlVHlwZSBtYW5hZ2VzIG1lbW9yeSBhbmQgaS9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB2YXJpb3VzIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5ICAgICAgICAgKi8KLSAgLyogICBtYW5hZ2VtZW50IGFuZCBpL28gYWNjZXNzLiAgWW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzICAgICAgICAgICAgICovCi0gIC8qICAgaW5mb3JtYXRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGEgY3VzdG9tIG1lbW9yeSBtYW5hZ2VyIG9yIHlvdSBvd24gICAqLwotICAvKiAgIGkvbyBzdHJlYW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICBzeXN0ZW1faW50ZXJmYWNlCisgICAqCisgICAqIEB0aXRsZToKKyAgICogIFN5c3RlbSBJbnRlcmZhY2UKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgSG93IEZyZWVUeXBlIG1hbmFnZXMgbWVtb3J5IGFuZCBpL28uCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogIFRoaXMgc2VjdGlvbiBjb250YWlucyB2YXJpb3VzIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5CisgICAqICBtYW5hZ2VtZW50IGFuZCBpL28gYWNjZXNzLiAgWW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzCisgICAqICBpbmZvcm1hdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgYSBjdXN0b20gbWVtb3J5IG1hbmFnZXIgb3IgeW91IG93bgorICAgKiAgaS9vIHN0cmVhbXMuCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIE0gRSBNIE8gUiBZICAgTSBBIE4gQSBHIEUgTSBFIE4gVCAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgIE0gRSBNIE8gUiBZICAgTSBBIE4gQSBHIEUgTSBFIE4gVAorICAgKgorICAgKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzcsMTEgKzE3NywxMSBAQAogICB9OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgSSAvIE8gICBNIEEgTiBBIEcgRSBNIEUgTiBUICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgSSAvIE8gICBNIEEgTiBBIEcgRSBNIEUgTiBUCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgKgogICAgKiBAaW5wdXQ6CiAgICAqICBzdHJlYW0gOjoKLSAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc3RyZWFtLgorICAgKiAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHN0cmVhbS4KICAgICoKICAgICovCiAgIHR5cGVkZWYgdm9pZApAQCAtMzIwLDcgKzMyMCw4IEBACiAgICAqCiAgICAqICAgY3Vyc29yIDo6CiAgICAqICAgICBUaGlzIGZpZWxkIGlzIHNldCBhbmQgdXNlZCBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlIHdoZW4gcGFyc2luZwotICAgKiAgICAgZnJhbWVzLgorICAgKiAgICAgZnJhbWVzLiAgSW4gcGFydGljdWxhciwgdGhlIGBGVF9HRVRfWFhYJyBtYWNyb3MgdXNlIHRoaXMgaW5zdGVhZAorICAgKiAgICAgb2YgdGhlIGBwb3MnIGZpZWxkLgogICAgKgogICAgKiAgIGxpbWl0IDo6CiAgICAqICAgICBUaGlzIGZpZWxkIGlzIHNldCBhbmQgdXNlZCBpbnRlcm5hbGx5IGJ5IEZyZWVUeXBlIHdoZW4gcGFyc2luZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCmluZGV4IDJlM2YzZjEuLjdhMjdiYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0dHJpZ29uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0dHJpZ29uLmgKKyAqCisgKiAgIEZyZWVUeXBlIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFRSSUdPTl9IXwpAQCAtMzEsMTIgKzMxLDEyIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgY29tcHV0YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogIGNvbXB1dGF0aW9ucworICAgKgorICAgKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oCmluZGV4IGY2MzhjMmUuLjlkYTA4YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgc2ltcGxlIHR5cGVzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHR5cGVzLmgKKyAqCisgKiAgIEZyZWVUeXBlIHNpbXBsZSB0eXBlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFRZUEVTX0hfCkBAIC0zMSwzMjYgKzMxLDMyOCBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiYXNpY190eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCYXNpYyBEYXRhIFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYmFzaWMgZGF0YSB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGJhc2ljIGRhdGEgdHlwZXMgZGVmaW5lZCBieSBGcmVlVHlwZX4yLCAgKi8KLSAgLyogICAgcmFuZ2luZyBmcm9tIHNpbXBsZSBzY2FsYXIgdHlwZXMgdG8gYml0bWFwIGRlc2NyaXB0b3JzLiAgTW9yZSAgICAgICovCi0gIC8qICAgIGZvbnQtc3BlY2lmaWMgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0J5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VSW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1VJbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9JbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVUludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ludDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VSW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Mb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUHRyRGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9UYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Qb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1ZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9CQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VRldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRjJEb3QxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1VuaXRWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GMjZEb3Q2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NQUtFX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZW5lcmljX0ZpbmFsaXplciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0JpdG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9QaXhlbF9Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUGFsZXR0ZV9Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dseXBoX0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9JTUFHRV9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYmFzaWNfdHlwZXMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIEJhc2ljIERhdGEgVHlwZXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFRoZSBiYXNpYyBkYXRhIHR5cGVzIGRlZmluZWQgYnkgdGhlIGxpYnJhcnkuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGJhc2ljIGRhdGEgdHlwZXMgZGVmaW5lZCBieSBGcmVlVHlwZX4yLAorICAgKiAgIHJhbmdpbmcgZnJvbSBzaW1wbGUgc2NhbGFyIHR5cGVzIHRvIGJpdG1hcCBkZXNjcmlwdG9ycy4gIE1vcmUKKyAgICogICBmb250LXNwZWNpZmljIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIEZUX0J5dGUKKyAgICogICBGVF9CeXRlcworICAgKiAgIEZUX0NoYXIKKyAgICogICBGVF9JbnQKKyAgICogICBGVF9VSW50CisgICAqICAgRlRfSW50MTYKKyAgICogICBGVF9VSW50MTYKKyAgICogICBGVF9JbnQzMgorICAgKiAgIEZUX1VJbnQzMgorICAgKiAgIEZUX0ludDY0CisgICAqICAgRlRfVUludDY0CisgICAqICAgRlRfU2hvcnQKKyAgICogICBGVF9VU2hvcnQKKyAgICogICBGVF9Mb25nCisgICAqICAgRlRfVUxvbmcKKyAgICogICBGVF9Cb29sCisgICAqICAgRlRfT2Zmc2V0CisgICAqICAgRlRfUHRyRGlzdAorICAgKiAgIEZUX1N0cmluZworICAgKiAgIEZUX1RhZworICAgKiAgIEZUX0Vycm9yCisgICAqICAgRlRfRml4ZWQKKyAgICogICBGVF9Qb2ludGVyCisgICAqICAgRlRfUG9zCisgICAqICAgRlRfVmVjdG9yCisgICAqICAgRlRfQkJveAorICAgKiAgIEZUX01hdHJpeAorICAgKiAgIEZUX0ZXb3JkCisgICAqICAgRlRfVUZXb3JkCisgICAqICAgRlRfRjJEb3QxNAorICAgKiAgIEZUX1VuaXRWZWN0b3IKKyAgICogICBGVF9GMjZEb3Q2CisgICAqICAgRlRfRGF0YQorICAgKgorICAgKiAgIEZUX01BS0VfVEFHCisgICAqCisgICAqICAgRlRfR2VuZXJpYworICAgKiAgIEZUX0dlbmVyaWNfRmluYWxpemVyCisgICAqCisgICAqICAgRlRfQml0bWFwCisgICAqICAgRlRfUGl4ZWxfTW9kZQorICAgKiAgIEZUX1BhbGV0dGVfTW9kZQorICAgKiAgIEZUX0dseXBoX0Zvcm1hdAorICAgKiAgIEZUX0lNQUdFX1RBRworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdHlwZWRlZiBvZiB1bnNpZ25lZCBjaGFyLCB1c2VkIGZvciBzaW1wbGUgYm9vbGVhbnMuICBBcyB1c3VhbCwgICAqLwotICAvKiAgICB2YWx1ZXMgMSBhbmR+MCByZXByZXNlbnQgdHJ1ZSBhbmQgZmFsc2UsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9Cb29sCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgb2YgdW5zaWduZWQgY2hhciwgdXNlZCBmb3Igc2ltcGxlIGJvb2xlYW5zLiAgQXMgdXN1YWwsCisgICAqICAgdmFsdWVzIDEgYW5kfjAgcmVwcmVzZW50IHRydWUgYW5kIGZhbHNlLCByZXNwZWN0aXZlbHkuCisgICAqLwogICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEZUX0Jvb2w7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GV29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpZ25lZCAxNi1iaXQgaW50ZWdlciB1c2VkIHRvIHN0b3JlIGEgZGlzdGFuY2UgaW4gb3JpZ2luYWwgZm9udCAgKi8KLSAgLyogICAgdW5pdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfRldvcmQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHVzZWQgdG8gc3RvcmUgYSBkaXN0YW5jZSBpbiBvcmlnaW5hbCBmb250CisgICAqICAgdW5pdHMuCisgICAqLwogICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgRlRfRldvcmQ7ICAgLyogZGlzdGFuY2UgaW4gRlVuaXRzICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9VRldvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB1c2VkIHRvIHN0b3JlIGEgZGlzdGFuY2UgaW4gb3JpZ2luYWwgICAgKi8KLSAgLyogICAgZm9udCB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVUZXb3JkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB1c2VkIHRvIHN0b3JlIGEgZGlzdGFuY2UgaW4gb3JpZ2luYWwKKyAgICogICBmb250IHVuaXRzLgorICAgKi8KICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVUZXb3JkOyAgLyogdW5zaWduZWQgZGlzdGFuY2UgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBfc2lnbmVkXyBjaGFyIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0NoYXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBfc2lnbmVkXyBjaGFyIHR5cGUuCisgICAqLwogICB0eXBlZGVmIHNpZ25lZCBjaGFyICBGVF9DaGFyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzaW1wbGUgdHlwZWRlZiBmb3IgdGhlIF91bnNpZ25lZF8gY2hhciB0eXBlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfQnl0ZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzaW1wbGUgdHlwZWRlZiBmb3IgdGhlIF91bnNpZ25lZF8gY2hhciB0eXBlLgorICAgKi8KICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBGVF9CeXRlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciBjb25zdGFudCBtZW1vcnkgYXJlYXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfQnl0ZXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3IgY29uc3RhbnQgbWVtb3J5IGFyZWFzLgorICAgKi8KICAgdHlwZWRlZiBjb25zdCBGVF9CeXRlKiAgRlRfQnl0ZXM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9UYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHR5cGVkZWYgZm9yIDMyLWJpdCB0YWdzIChhcyB1c2VkIGluIHRoZSBTRk5UIGZvcm1hdCkuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9UYWcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3IgMzItYml0IHRhZ3MgKGFzIHVzZWQgaW4gdGhlIFNGTlQgZm9ybWF0KS4KKyAgICovCiAgIHR5cGVkZWYgRlRfVUludDMyICBGVF9UYWc7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpbXBsZSB0eXBlZGVmIGZvciB0aGUgY2hhciB0eXBlLCB1c3VhbGx5IHVzZWQgZm9yIHN0cmluZ3MuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9TdHJpbmcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc2ltcGxlIHR5cGVkZWYgZm9yIHRoZSBjaGFyIHR5cGUsIHVzdWFsbHkgdXNlZCBmb3Igc3RyaW5ncy4KKyAgICovCiAgIHR5cGVkZWYgY2hhciAgRlRfU3RyaW5nOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciBzaWduZWQgc2hvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfU2hvcnQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3Igc2lnbmVkIHNob3J0LgorICAgKi8KICAgdHlwZWRlZiBzaWduZWQgc2hvcnQgIEZUX1Nob3J0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVVNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciB1bnNpZ25lZCBzaG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVVNob3J0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgZm9yIHVuc2lnbmVkIHNob3J0LgorICAgKi8KICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgRlRfVVNob3J0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfSW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciB0aGUgaW50IHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfSW50CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHR5cGVkZWYgZm9yIHRoZSBpbnQgdHlwZS4KKyAgICovCiAgIHR5cGVkZWYgc2lnbmVkIGludCAgRlRfSW50OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVUludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciB0aGUgdW5zaWduZWQgaW50IHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVUludAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB0eXBlZGVmIGZvciB0aGUgdW5zaWduZWQgaW50IHR5cGUuCisgICAqLwogICB0eXBlZGVmIHVuc2lnbmVkIGludCAgRlRfVUludDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdHlwZWRlZiBmb3Igc2lnbmVkIGxvbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0xvbmcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3Igc2lnbmVkIGxvbmcuCisgICAqLwogICB0eXBlZGVmIHNpZ25lZCBsb25nICBGVF9Mb25nOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVUxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlZGVmIGZvciB1bnNpZ25lZCBsb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfVUxvbmcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgdHlwZWRlZiBmb3IgdW5zaWduZWQgbG9uZy4KKyAgICovCiAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUxvbmc7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GMkRvdDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpZ25lZCAyLjE0IGZpeGVkLXBvaW50IHR5cGUgdXNlZCBmb3IgdW5pdCB2ZWN0b3JzLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9GMkRvdDE0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpZ25lZCAyLjE0IGZpeGVkLXBvaW50IHR5cGUgdXNlZCBmb3IgdW5pdCB2ZWN0b3JzLgorICAgKi8KICAgdHlwZWRlZiBzaWduZWQgc2hvcnQgIEZUX0YyRG90MTQ7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GMjZEb3Q2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpZ25lZCAyNi42IGZpeGVkLXBvaW50IHR5cGUgdXNlZCBmb3IgdmVjdG9yaWFsIHBpeGVsICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfRjI2RG90NgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzaWduZWQgMjYuNiBmaXhlZC1wb2ludCB0eXBlIHVzZWQgZm9yIHZlY3RvcmlhbCBwaXhlbAorICAgKiAgIGNvb3JkaW5hdGVzLgorICAgKi8KICAgdHlwZWRlZiBzaWduZWQgbG9uZyAgRlRfRjI2RG90NjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHN0b3JlIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlcywgbGlrZSBzY2FsaW5nICAqLwotICAvKiAgICB2YWx1ZXMgb3IgbWF0cml4IGNvZWZmaWNpZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9GaXhlZAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyB0eXBlIGlzIHVzZWQgdG8gc3RvcmUgMTYuMTYgZml4ZWQtcG9pbnQgdmFsdWVzLCBsaWtlIHNjYWxpbmcKKyAgICogICB2YWx1ZXMgb3IgbWF0cml4IGNvZWZmaWNpZW50cy4KKyAgICovCiAgIHR5cGVkZWYgc2lnbmVkIGxvbmcgIEZUX0ZpeGVkOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIEZyZWVUeXBlIGVycm9yIGNvZGUgdHlwZS4gIEEgdmFsdWUgb2Z+MCBpcyBhbHdheXMgaW50ZXJwcmV0ZWQgICovCi0gIC8qICAgIGFzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIEZUX0Vycm9yCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgRnJlZVR5cGUgZXJyb3IgY29kZSB0eXBlLiAgQSB2YWx1ZSBvZn4wIGlzIGFsd2F5cyBpbnRlcnByZXRlZAorICAgKiAgIGFzIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uCisgICAqLwogICB0eXBlZGVmIGludCAgRlRfRXJyb3I7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Qb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNpbXBsZSB0eXBlZGVmIGZvciBhIHR5cGVsZXNzIHBvaW50ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9Qb2ludGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpbXBsZSB0eXBlZGVmIGZvciBhIHR5cGVsZXNzIHBvaW50ZXIuCisgICAqLwogICB0eXBlZGVmIHZvaWQqICBGVF9Qb2ludGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBBTlNJfkMgYHNpemVfdCcgdHlwZSwgaS5lLiwgdGhlIGxhcmdlc3QgICovCi0gIC8qICAgIF91bnNpZ25lZF8gaW50ZWdlciB0eXBlIHVzZWQgdG8gZXhwcmVzcyBhIGZpbGUgc2l6ZSBvciBwb3NpdGlvbiwgICAqLwotICAvKiAgICBvciBhIG1lbW9yeSBibG9jayBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9PZmZzZXQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgQU5TSX5DIGBzaXplX3QnIHR5cGUsIGkuZS4sIHRoZSBsYXJnZXN0CisgICAqICAgX3Vuc2lnbmVkXyBpbnRlZ2VyIHR5cGUgdXNlZCB0byBleHByZXNzIGEgZmlsZSBzaXplIG9yIHBvc2l0aW9uLAorICAgKiAgIG9yIGEgbWVtb3J5IGJsb2NrIHNpemUuCisgICAqLwogICB0eXBlZGVmIHNpemVfdCAgRlRfT2Zmc2V0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUHRyRGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBBTlNJfkMgYHB0cmRpZmZfdCcgdHlwZSwgaS5lLiwgdGhlICAgICAgICovCi0gIC8qICAgIGxhcmdlc3QgX3NpZ25lZF8gaW50ZWdlciB0eXBlIHVzZWQgdG8gZXhwcmVzcyB0aGUgZGlzdGFuY2UgICAgICAgICAqLwotICAvKiAgICBiZXR3ZWVuIHR3byBwb2ludGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9QdHJEaXN0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEFOU0l+QyBgcHRyZGlmZl90JyB0eXBlLCBpLmUuLCB0aGUKKyAgICogICBsYXJnZXN0IF9zaWduZWRfIGludGVnZXIgdHlwZSB1c2VkIHRvIGV4cHJlc3MgdGhlIGRpc3RhbmNlCisgICAqICAgYmV0d2VlbiB0d28gcG9pbnRlcnMuCisgICAqLwogICB0eXBlZGVmIGZ0X3B0cmRpZmZfdCAgRlRfUHRyRGlzdDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1VuaXRWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGEgMkQgdmVjdG9yIHVuaXQgdmVjdG9yLiAgVXNlcyAgICAqLwotICAvKiAgICBGVF9GMkRvdDE0IHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4IDo6IEhvcml6b250YWwgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHkgOjogVmVydGljYWwgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfVW5pdFZlY3RvcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgYSAyRCB2ZWN0b3IgdW5pdCB2ZWN0b3IuICBVc2VzCisgICAqICAgRlRfRjJEb3QxNCB0eXBlcy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB4IDo6CisgICAqICAgICBIb3Jpem9udGFsIGNvb3JkaW5hdGUuCisgICAqCisgICAqICAgeSA6OgorICAgKiAgICAgVmVydGljYWwgY29vcmRpbmF0ZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9Vbml0VmVjdG9yXwogICB7CiAgICAgRlRfRjJEb3QxNCAgeDsKQEAgLTM1OSwyOSArMzYxLDMzIEBACiAgIH0gRlRfVW5pdFZlY3RvcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01hdHJpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc2ltcGxlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGEgMngyIG1hdHJpeC4gIENvZWZmaWNpZW50cyBhcmUgICAqLwotICAvKiAgICBpbiAxNi4xNiBmaXhlZC1wb2ludCBmb3JtYXQuICBUaGUgY29tcHV0YXRpb24gcGVyZm9ybWVkIGlzOiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICB4JyA9IHgqeHggKyB5Knh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgeScgPSB4Knl4ICsgeSp5eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHh4IDo6IE1hdHJpeCBjb2VmZmljaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeHkgOjogTWF0cml4IGNvZWZmaWNpZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5eCA6OiBNYXRyaXggY29lZmZpY2llbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHl5IDo6IE1hdHJpeCBjb2VmZmljaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTWF0cml4CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBhIDJ4MiBtYXRyaXguICBDb2VmZmljaWVudHMgYXJlCisgICAqICAgaW4gMTYuMTYgZml4ZWQtcG9pbnQgZm9ybWF0LiAgVGhlIGNvbXB1dGF0aW9uIHBlcmZvcm1lZCBpczoKKyAgICoKKyAgICogICB7CisgICAqICAgICB4JyA9IHgqeHggKyB5Knh5CisgICAqICAgICB5JyA9IHgqeXggKyB5Knl5CisgICAqICAgfQorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHh4IDo6CisgICAqICAgICBNYXRyaXggY29lZmZpY2llbnQuCisgICAqCisgICAqICAgeHkgOjoKKyAgICogICAgIE1hdHJpeCBjb2VmZmljaWVudC4KKyAgICoKKyAgICogICB5eCA6OgorICAgKiAgICAgTWF0cml4IGNvZWZmaWNpZW50LgorICAgKgorICAgKiAgIHl5IDo6CisgICAqICAgICBNYXRyaXggY29lZmZpY2llbnQuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfTWF0cml4XwogICB7CiAgICAgRlRfRml4ZWQgIHh4LCB4eTsKQEAgLTM5MCwxOSArMzk2LDIxIEBACiAgIH0gRlRfTWF0cml4OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVhZC1vbmx5IGJpbmFyeSBkYXRhIHJlcHJlc2VudGVkIGFzIGEgcG9pbnRlciBhbmQgYSBsZW5ndGguICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9pbnRlciA6OiBUaGUgZGF0YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZW5ndGggIDo6IFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX0RhdGEKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJlYWQtb25seSBiaW5hcnkgZGF0YSByZXByZXNlbnRlZCBhcyBhIHBvaW50ZXIgYW5kIGEgbGVuZ3RoLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHBvaW50ZXIgOjoKKyAgICogICAgIFRoZSBkYXRhLgorICAgKgorICAgKiAgIGxlbmd0aCA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBpbiBieXRlcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9EYXRhXwogICB7CiAgICAgY29uc3QgRlRfQnl0ZSogIHBvaW50ZXI7CkBAIC00MTEsNTEgKzQxOSw1MyBAQAogICB9IEZUX0RhdGE7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZW5lcmljX0ZpbmFsaXplciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXNjcmliZSBhIGZ1bmN0aW9uIHVzZWQgdG8gZGVzdHJveSB0aGUgYGNsaWVudCcgZGF0YSBvZiBhbnkgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgb2JqZWN0LiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQEZUX0dlbmVyaWMgdHlwZSBmb3IgICovCi0gIC8qICAgIGRldGFpbHMgb2YgdXNhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBGcmVlVHlwZSBvYmplY3QgdGhhdCBpcyB1bmRlciBmaW5hbGl6YXRpb24uICAgICAqLwotICAvKiAgICBJdHMgY2xpZW50IGRhdGEgaXMgYWNjZXNzZWQgdGhyb3VnaCBpdHMgYGdlbmVyaWMnIGZpZWxkLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfR2VuZXJpY19GaW5hbGl6ZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlc2NyaWJlIGEgZnVuY3Rpb24gdXNlZCB0byBkZXN0cm95IHRoZSBgY2xpZW50JyBkYXRhIG9mIGFueQorICAgKiAgIEZyZWVUeXBlIG9iamVjdC4gIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIEBGVF9HZW5lcmljIHR5cGUgZm9yCisgICAqICAgZGV0YWlscyBvZiB1c2FnZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIFRoZSBhZGRyZXNzIG9mIHRoZSBGcmVlVHlwZSBvYmplY3QgdGhhdCBpcyB1bmRlciBmaW5hbGl6YXRpb24uCisgICAqICAgSXRzIGNsaWVudCBkYXRhIGlzIGFjY2Vzc2VkIHRocm91Z2ggaXRzIGBnZW5lcmljJyBmaWVsZC4KKyAgICovCiAgIHR5cGVkZWYgdm9pZCAgKCpGVF9HZW5lcmljX0ZpbmFsaXplcikoIHZvaWQqICBvYmplY3QgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dlbmVyaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENsaWVudCBhcHBsaWNhdGlvbnMgb2Z0ZW4gbmVlZCB0byBhc3NvY2lhdGUgdGhlaXIgb3duIGRhdGEgdG8gYSAgICAqLwotICAvKiAgICB2YXJpZXR5IG9mIEZyZWVUeXBlIGNvcmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhIHRleHQgbGF5b3V0IEFQSSAgKi8KLSAgLyogICAgbWlnaHQgd2FudCB0byBhc3NvY2lhdGUgYSBnbHlwaCBjYWNoZSB0byBhIGdpdmVuIHNpemUgb2JqZWN0LiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTb21lIEZyZWVUeXBlIG9iamVjdCBjb250YWlucyBhIGBnZW5lcmljJyBmaWVsZCwgb2YgdHlwZSAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2VuZXJpYywgd2hpY2ggdXNhZ2UgaXMgbGVmdCB0byBjbGllbnQgYXBwbGljYXRpb25zIGFuZCBmb250ICAgICovCi0gIC8qICAgIHNlcnZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIGNsaWVudC1zcGVjaWZpYyBkYXRhLCBhcyB3ZWxsICovCi0gIC8qICAgIGFzIHRoZSBhZGRyZXNzIG9mIGEgYGZpbmFsaXplcicgZnVuY3Rpb24sIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGJ5ICAqLwotICAvKiAgICBGcmVlVHlwZSB3aGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkIChmb3IgZXhhbXBsZSwgdGhlIHByZXZpb3VzICAgKi8KLSAgLyogICAgY2xpZW50IGV4YW1wbGUgd291bGQgcHV0IHRoZSBhZGRyZXNzIG9mIHRoZSBnbHlwaCBjYWNoZSBkZXN0cnVjdG9yICovCi0gIC8qICAgIGluIHRoZSBgZmluYWxpemVyJyBmaWVsZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRhdGEgICAgICA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gYW55IGNsaWVudC1zcGVjaWZpZWQgZGF0YS4gVGhpcyAqLwotICAvKiAgICAgICAgICAgICAgICAgZmllbGQgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5LiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZpbmFsaXplciA6OiBBIHBvaW50ZXIgdG8gYSBgZ2VuZXJpYyBmaW5hbGl6ZXInIGZ1bmN0aW9uLCB3aGljaCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGRlc3Ryb3llZC4gIElmIHRoaXMgKi8KLSAgLyogICAgICAgICAgICAgICAgIGZpZWxkIGlzIHNldCB0byBOVUxMLCBubyBjb2RlIHdpbGwgYmUgY2FsbGVkLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9HZW5lcmljCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDbGllbnQgYXBwbGljYXRpb25zIG9mdGVuIG5lZWQgdG8gYXNzb2NpYXRlIHRoZWlyIG93biBkYXRhIHRvIGEKKyAgICogICB2YXJpZXR5IG9mIEZyZWVUeXBlIGNvcmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhIHRleHQgbGF5b3V0IEFQSQorICAgKiAgIG1pZ2h0IHdhbnQgdG8gYXNzb2NpYXRlIGEgZ2x5cGggY2FjaGUgdG8gYSBnaXZlbiBzaXplIG9iamVjdC4KKyAgICoKKyAgICogICBTb21lIEZyZWVUeXBlIG9iamVjdCBjb250YWlucyBhIGBnZW5lcmljJyBmaWVsZCwgb2YgdHlwZQorICAgKiAgIEZUX0dlbmVyaWMsIHdoaWNoIHVzYWdlIGlzIGxlZnQgdG8gY2xpZW50IGFwcGxpY2F0aW9ucyBhbmQgZm9udAorICAgKiAgIHNlcnZlcnMuCisgICAqCisgICAqICAgSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIGNsaWVudC1zcGVjaWZpYyBkYXRhLCBhcyB3ZWxsCisgICAqICAgYXMgdGhlIGFkZHJlc3Mgb2YgYSBgZmluYWxpemVyJyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgYnkKKyAgICogICBGcmVlVHlwZSB3aGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkIChmb3IgZXhhbXBsZSwgdGhlIHByZXZpb3VzCisgICAqICAgY2xpZW50IGV4YW1wbGUgd291bGQgcHV0IHRoZSBhZGRyZXNzIG9mIHRoZSBnbHlwaCBjYWNoZSBkZXN0cnVjdG9yCisgICAqICAgaW4gdGhlIGBmaW5hbGl6ZXInIGZpZWxkKS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBkYXRhIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gYW55IGNsaWVudC1zcGVjaWZpZWQgZGF0YS4gVGhpcworICAgKiAgICAgZmllbGQgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IHRoZSBGcmVlVHlwZSBsaWJyYXJ5LgorICAgKgorICAgKiAgIGZpbmFsaXplciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgYGdlbmVyaWMgZmluYWxpemVyJyBmdW5jdGlvbiwgd2hpY2gKKyAgICogICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG9iamVjdCBpcyBkZXN0cm95ZWQuICBJZiB0aGlzCisgICAqICAgICBmaWVsZCBpcyBzZXQgdG8gTlVMTCwgbm8gY29kZSB3aWxsIGJlIGNhbGxlZC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9HZW5lcmljXwogICB7CiAgICAgdm9pZCogICAgICAgICAgICAgICAgIGRhdGE7CkBAIC00NjQsMTkgKzQ3NCwxOSBAQAogICB9IEZUX0dlbmVyaWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NQUtFX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIG1hY3JvIGNvbnZlcnRzIGZvdXItbGV0dGVyIHRhZ3MgdGhhdCBhcmUgdXNlZCB0byBsYWJlbCAgICAgICAgKi8KLSAgLyogICAgVHJ1ZVR5cGUgdGFibGVzIGludG8gYW4gdW5zaWduZWQgbG9uZywgdG8gYmUgdXNlZCB3aXRoaW4gRnJlZVR5cGUuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHByb2R1Y2VkIHZhbHVlcyAqbXVzdCogYmUgMzItYml0IGludGVnZXJzLiAgRG9uJ3QgcmVkZWZpbmUgICAgICovCi0gIC8qICAgIHRoaXMgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9NQUtFX1RBRworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBtYWNybyBjb252ZXJ0cyBmb3VyLWxldHRlciB0YWdzIHRoYXQgYXJlIHVzZWQgdG8gbGFiZWwKKyAgICogICBUcnVlVHlwZSB0YWJsZXMgaW50byBhbiB1bnNpZ25lZCBsb25nLCB0byBiZSB1c2VkIHdpdGhpbiBGcmVlVHlwZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHByb2R1Y2VkIHZhbHVlcyAqbXVzdCogYmUgMzItYml0IGludGVnZXJzLiAgRG9uJ3QgcmVkZWZpbmUKKyAgICogICB0aGlzIG1hY3JvLgorICAgKi8KICNkZWZpbmUgRlRfTUFLRV9UQUcoIF94MSwgX3gyLCBfeDMsIF94NCApIFwKICAgICAgICAgICAoRlRfVGFnKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoICggKEZUX1VMb25nKV94MSA8PCAyNCApIHwgICAgIFwKQEAgLTQ5NCw1MyArNTA0LDU2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlzdF9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGxpc3RfcHJvY2Vzc2luZworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0xpc3ROb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBNYW55IGVsZW1lbnRzIGFuZCBvYmplY3RzIGluIEZyZWVUeXBlIGFyZSBsaXN0ZWQgdGhyb3VnaCBhbiAgICAgICAqLwotICAvKiAgICAgQEZUX0xpc3QgcmVjb3JkIChzZWUgQEZUX0xpc3RSZWMpLiAgQXMgaXRzIG5hbWUgc3VnZ2VzdHMsIGFuICAgICAgKi8KLSAgLyogICAgIEZUX0xpc3ROb2RlIGlzIGEgaGFuZGxlIHRvIGEgc2luZ2xlIGxpc3QgZWxlbWVudC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgRlRfTGlzdE5vZGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBNYW55IGVsZW1lbnRzIGFuZCBvYmplY3RzIGluIEZyZWVUeXBlIGFyZSBsaXN0ZWQgdGhyb3VnaCBhbgorICAgKiAgICBARlRfTGlzdCByZWNvcmQgKHNlZSBARlRfTGlzdFJlYykuICBBcyBpdHMgbmFtZSBzdWdnZXN0cywgYW4KKyAgICogICAgRlRfTGlzdE5vZGUgaXMgYSBoYW5kbGUgdG8gYSBzaW5nbGUgbGlzdCBlbGVtZW50LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfTGlzdE5vZGVSZWNfKiAgRlRfTGlzdE5vZGU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIGxpc3QgcmVjb3JkIChzZWUgQEZUX0xpc3RSZWMpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAdHlwZToKKyAgICogICBGVF9MaXN0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIGxpc3QgcmVjb3JkIChzZWUgQEZUX0xpc3RSZWMpLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgRlRfTGlzdFJlY18qICBGVF9MaXN0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdE5vZGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGEgc2luZ2xlIGxpc3QgZWxlbWVudC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHJldiA6OiBUaGUgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUgbGlzdC4gIE5VTEwgaWYgZmlyc3QuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuZXh0IDo6IFRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIGxpc3QuICBOVUxMIGlmIGxhc3QuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRhdGEgOjogQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBsaXN0ZWQgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTGlzdE5vZGVSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gaG9sZCBhIHNpbmdsZSBsaXN0IGVsZW1lbnQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcHJldiA6OgorICAgKiAgICAgVGhlIHByZXZpb3VzIGVsZW1lbnQgaW4gdGhlIGxpc3QuICBOVUxMIGlmIGZpcnN0LgorICAgKgorICAgKiAgIG5leHQgOjoKKyAgICogICAgIFRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIGxpc3QuICBOVUxMIGlmIGxhc3QuCisgICAqCisgICAqICAgZGF0YSA6OgorICAgKiAgICAgQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBsaXN0ZWQgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0xpc3ROb2RlUmVjXwogICB7CiAgICAgRlRfTGlzdE5vZGUgIHByZXY7CkBAIC01NTAsMjAgKzU2MywyMiBAQAogICB9IEZUX0xpc3ROb2RlUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTGlzdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGEgc2ltcGxlIGRvdWJseS1saW5rZWQgbGlzdC4gIFRoZXNlIGFyZSAgICovCi0gIC8qICAgIHVzZWQgaW4gbWFueSBwYXJ0cyBvZiBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhlYWQgOjogVGhlIGhlYWQgKGZpcnN0IGVsZW1lbnQpIG9mIGRvdWJseS1saW5rZWQgbGlzdC4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFpbCA6OiBUaGUgdGFpbCAobGFzdCBlbGVtZW50KSBvZiBkb3VibHktbGlua2VkIGxpc3QuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9MaXN0UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgYSBzaW1wbGUgZG91Ymx5LWxpbmtlZCBsaXN0LiAgVGhlc2UgYXJlCisgICAqICAgdXNlZCBpbiBtYW55IHBhcnRzIG9mIEZyZWVUeXBlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGhlYWQgOjoKKyAgICogICAgIFRoZSBoZWFkIChmaXJzdCBlbGVtZW50KSBvZiBkb3VibHktbGlua2VkIGxpc3QuCisgICAqCisgICAqICAgdGFpbCA6OgorICAgKiAgICAgVGhlIHRhaWwgKGxhc3QgZWxlbWVudCkgb2YgZG91Ymx5LWxpbmtlZCBsaXN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0xpc3RSZWNfCiAgIHsKICAgICBGVF9MaXN0Tm9kZSAgaGVhZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaAppbmRleCA0NjFjNjViLi41ZDBlYjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHdpbmZudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBmbnQtc3BlY2lmaWMgZGF0YS4gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHdpbmZudC5oCisgKgorICogICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBXaW5kb3dzIGZudC1zcGVjaWZpYyBkYXRhLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUV0lORk5UX0hfCkBAIC0zMiwyMiArMzIsMjIgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2luZm50X2ZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2luZG93IEZOVCBGaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2luZG93cyBGTlQgc3BlY2lmaWMgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBvZiBXaW5kb3dzIEZOVCBzcGVjaWZpYyAgICAgICovCi0gIC8qICAgIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB3aW5mbnRfZm9udHMKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFdpbmRvdyBGTlQgRmlsZXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFdpbmRvd3MgRk5ULXNwZWNpZmljIEFQSS4KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgV2luZG93cyBGTlQtc3BlY2lmaWMKKyAgICogICBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTgwLDI2ICs4MCwyNiBAQAogICAgKiAgIEZUX1dpbkZOVF9JRF9PRU0gOjoKICAgICogICAgIEZyb20gTWljaGFlbCBQb2V0dGdlbiA8bWljaGFlbEBwb2V0dGdlbi5kZT46CiAgICAqCi0gICAqICAgICAgIFRoZSBgV2luZG93cyBGb250IE1hcHBpbmcnIGFydGljbGUgc2F5cyB0aGF0IEZUX1dpbkZOVF9JRF9PRU0KLSAgICogICAgICAgaXMgdXNlZCBmb3IgdGhlIGNoYXJzZXQgb2YgdmVjdG9yIGZvbnRzLCBsaWtlIGBtb2Rlcm4uZm9uJywKLSAgICogICAgICAgYHJvbWFuLmZvbicsIGFuZCBgc2NyaXB0LmZvbicgb24gV2luZG93cy4KKyAgICogICAgIFRoZSBgV2luZG93cyBGb250IE1hcHBpbmcnIGFydGljbGUgc2F5cyB0aGF0IEZUX1dpbkZOVF9JRF9PRU0KKyAgICogICAgIGlzIHVzZWQgZm9yIHRoZSBjaGFyc2V0IG9mIHZlY3RvciBmb250cywgbGlrZSBgbW9kZXJuLmZvbicsCisgICAqICAgICBgcm9tYW4uZm9uJywgYW5kIGBzY3JpcHQuZm9uJyBvbiBXaW5kb3dzLgogICAgKgotICAgKiAgICAgICBUaGUgYENyZWF0ZUZvbnQnIGRvY3VtZW50YXRpb24gc2F5czogVGhlIEZUX1dpbkZOVF9JRF9PRU0gdmFsdWUKLSAgICogICAgICAgc3BlY2lmaWVzIGEgY2hhcmFjdGVyIHNldCB0aGF0IGlzIG9wZXJhdGluZy1zeXN0ZW0gZGVwZW5kZW50LgorICAgKiAgICAgVGhlIGBDcmVhdGVGb250JyBkb2N1bWVudGF0aW9uIHNheXM6IFRoZSBGVF9XaW5GTlRfSURfT0VNIHZhbHVlCisgICAqICAgICBzcGVjaWZpZXMgYSBjaGFyYWN0ZXIgc2V0IHRoYXQgaXMgb3BlcmF0aW5nLXN5c3RlbSBkZXBlbmRlbnQuCiAgICAqCi0gICAqICAgICAgIFRoZSBgSUZJTUVUUklDUycgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBgV2luZG93cyBEcml2ZXIKLSAgICogICAgICAgRGV2ZWxvcG1lbnQgS2l0JyBzYXlzOiBUaGlzIGZvbnQgc3VwcG9ydHMgYW4gT0VNLXNwZWNpZmljCi0gICAqICAgICAgIGNoYXJhY3RlciBzZXQuICBUaGUgT0VNIGNoYXJhY3RlciBzZXQgaXMgc3lzdGVtIGRlcGVuZGVudC4KKyAgICogICAgIFRoZSBgSUZJTUVUUklDUycgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBgV2luZG93cyBEcml2ZXIKKyAgICogICAgIERldmVsb3BtZW50IEtpdCcgc2F5czogVGhpcyBmb250IHN1cHBvcnRzIGFuIE9FTS1zcGVjaWZpYworICAgKiAgICAgY2hhcmFjdGVyIHNldC4gIFRoZSBPRU0gY2hhcmFjdGVyIHNldCBpcyBzeXN0ZW0gZGVwZW5kZW50LgogICAgKgotICAgKiAgICAgICBJbiBnZW5lcmFsIE9FTSwgYXMgb3Bwb3NlZCB0byBBTlNJIChpLmUuLCBjcDEyNTIpLCBkZW5vdGVzIHRoZQotICAgKiAgICAgICBzZWNvbmQgZGVmYXVsdCBjb2RlcGFnZSB0aGF0IG1vc3QgaW50ZXJuYXRpb25hbCB2ZXJzaW9ucyBvZgotICAgKiAgICAgICBXaW5kb3dzIGhhdmUuICBJdCBpcyBvbmUgb2YgdGhlIE9FTSBjb2RlcGFnZXMgZnJvbQorICAgKiAgICAgSW4gZ2VuZXJhbCBPRU0sIGFzIG9wcG9zZWQgdG8gQU5TSSAoaS5lLiwgY3AxMjUyKSwgZGVub3RlcyB0aGUKKyAgICogICAgIHNlY29uZCBkZWZhdWx0IGNvZGVwYWdlIHRoYXQgbW9zdCBpbnRlcm5hdGlvbmFsIHZlcnNpb25zIG9mCisgICAqICAgICBXaW5kb3dzIGhhdmUuICBJdCBpcyBvbmUgb2YgdGhlIE9FTSBjb2RlcGFnZXMgZnJvbQogICAgKgotICAgKiAgICAgICAgIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2dvZ2xvYmFsL2JiOTY0NjU1LAorICAgKiAgICAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9kZXNrdG9wL2ludGwvY29kZS1wYWdlLWlkZW50aWZpZXJzICwKICAgICoKLSAgICogICAgICAgYW5kIGlzIHVzZWQgZm9yIHRoZSBgRE9TIGJveGVzJywgdG8gc3VwcG9ydCBsZWdhY3kgYXBwbGljYXRpb25zLgotICAgKiAgICAgICBBIEdlcm1hbiBXaW5kb3dzIHZlcnNpb24gZm9yIGV4YW1wbGUgdXN1YWxseSB1c2VzIEFOU0kgY29kZXBhZ2UKLSAgICogICAgICAgMTI1MiBhbmQgT0VNIGNvZGVwYWdlIDg1MC4KKyAgICogICAgIGFuZCBpcyB1c2VkIGZvciB0aGUgYERPUyBib3hlcycsIHRvIHN1cHBvcnQgbGVnYWN5IGFwcGxpY2F0aW9ucy4KKyAgICogICAgIEEgR2VybWFuIFdpbmRvd3MgdmVyc2lvbiBmb3IgZXhhbXBsZSB1c3VhbGx5IHVzZXMgQU5TSSBjb2RlcGFnZQorICAgKiAgICAgMTI1MiBhbmQgT0VNIGNvZGVwYWdlIDg1MC4KICAgICoKICAgICogICBGVF9XaW5GTlRfSURfQ1A4NzQgOjoKICAgICogICAgIEEgc3VwZXJzZXQgb2YgVGhhaSBUSVMgNjIwIGFuZCBJU08gODg1OS0xMS4KQEAgLTE3MywxNCArMTczLDE0IEBACiAjZGVmaW5lIEZUX1dpbkZOVF9JRF9PRU0gICAgIDI1NQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfV2luRk5UX0hlYWRlclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2luZG93cyBGTlQgSGVhZGVyIGluZm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9XaW5GTlRfSGVhZGVyUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXaW5kb3dzIEZOVCBIZWFkZXIgaW5mby4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9XaW5GTlRfSGVhZGVyUmVjXwogICB7CiAgICAgRlRfVVNob3J0ICB2ZXJzaW9uOwpAQCAtMjIzLDE0ICsyMjMsMTQgQEAKICAgfSBGVF9XaW5GTlRfSGVhZGVyUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfV2luRk5UX0hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYW4gQEZUX1dpbkZOVF9IZWFkZXJSZWMgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9XaW5GTlRfSGVhZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhbiBARlRfV2luRk5UX0hlYWRlclJlYyBzdHJ1Y3R1cmUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBGVF9XaW5GTlRfSGVhZGVyUmVjXyogIEZUX1dpbkZOVF9IZWFkZXI7CiAKIApAQCAtMjQzLDEwICsyNDMsMTIgQEAKICAgICogICAgUmV0cmlldmUgYSBXaW5kb3dzIEZOVCBmb250IGluZm8gaGVhZGVyLgogICAgKgogICAgKiBAaW5wdXQ6Ci0gICAqICAgIGZhY2UgICAgOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IGZhY2UuCisgICAqICAgIGZhY2UgOjoKKyAgICogICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgZmFjZS4KICAgICoKICAgICogQG91dHB1dDoKLSAgICogICAgYWhlYWRlciA6OiBUaGUgV2luRk5UIGhlYWRlci4KKyAgICogICAgYWhlYWRlciA6OgorICAgKiAgICAgIFRoZSBXaW5GTlQgaGVhZGVyLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgKaW5kZXggZjRkMzA4Zi4uYzIwYTE4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaApAQCAtMSw3MyArMSw3MyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYXV0b2hpbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhpZ2gtbGV2ZWwgYGF1dG9oaW50JyBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYXV0b2hpbnQuaAorICoKKyAqICAgSGlnaC1sZXZlbCBgYXV0b2hpbnQnIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGF1dG8taGludGVyIGlzIHVzZWQgdG8gbG9hZCBhbmQgYXV0b21hdGljYWxseSBoaW50IGdseXBocyBpZiBhICAgICovCi0gIC8qIGZvcm1hdC1zcGVjaWZpYyBoaW50ZXIgaXNuJ3QgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgYXV0by1oaW50ZXIgaXMgdXNlZCB0byBsb2FkIGFuZCBhdXRvbWF0aWNhbGx5IGhpbnQgZ2x5cGhzIGlmIGEKKyAgICogZm9ybWF0LXNwZWNpZmljIGhpbnRlciBpc24ndCBhdmFpbGFibGUuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgQVVUT0hJTlRfSF8KICNkZWZpbmUgQVVUT0hJTlRfSF8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSBzbWFsbCB0ZWNobmljYWwgbm90ZSByZWdhcmRpbmcgYXV0b21hdGljIGhpbnRpbmcgaW4gb3JkZXIgdG8gICAgICAgICovCi0gIC8qIGNsYXJpZnkgdGhpcyBtb2R1bGUgaW50ZXJmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQW4gYXV0b21hdGljIGhpbnRlciBtaWdodCBjb21wdXRlIHR3byBraW5kcyBvZiBkYXRhIGZvciBhIGdpdmVuIGZhY2U6ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGdsb2JhbCBoaW50czogVXN1YWxseSBzb21lIG1ldHJpY3MgdGhhdCBkZXNjcmliZSBnbG9iYWwgcHJvcGVydGllcyAgKi8KLSAgLyogICAgICAgICAgICAgICAgIG9mIHRoZSBmYWNlLiAgSXQgaXMgY29tcHV0ZWQgYnkgc2Nhbm5pbmcgbW9yZSBvciBsZXNzICovCi0gIC8qICAgICAgICAgICAgICAgICBhZ2dyZXNzaXZlbHkgdGhlIGdseXBocyBpbiB0aGUgZmFjZSwgYW5kIHRodXMgY2FuIGJlICAqLwotICAvKiAgICAgICAgICAgICAgICAgdmVyeSBzbG93IHRvIGNvbXB1dGUgKGV2ZW4gaWYgdGhlIHNpemUgb2YgZ2xvYmFsICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIGhpbnRzIGlzIHJlYWxseSBzbWFsbCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGdseXBoIGhpbnRzOiAgVGhlc2UgZGVzY3JpYmUgc29tZSBpbXBvcnRhbnQgZmVhdHVyZXMgb2YgdGhlIGdseXBoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIG91dGxpbmUsIGFzIHdlbGwgYXMgaG93IHRvIGFsaWduIHRoZW0uICBUaGV5IGFyZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgbXVjaCBmYXN0ZXIgdG8gY29tcHV0ZSB0aGFuIGdsb2JhbCBoaW50cy4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGN1cnJlbnQgRnJlZVR5cGUgYXV0by1oaW50ZXIgZG9lcyBhIHByZXR0eSBnb29kIGpvYiB3aGlsZSAgICAgICAgICovCi0gIC8qIHBlcmZvcm1pbmcgZmFzdCBjb21wdXRhdGlvbnMgZm9yIGJvdGggZ2xvYmFsIGFuZCBnbHlwaCBoaW50cy4gICAgICAgICAqLwotICAvKiBIb3dldmVyLCB3ZSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIGludHJvZHVjaW5nIG1vcmUgY29tcGxleCBhbmQgICAgICAgKi8KLSAgLyogcG93ZXJmdWwgYWxnb3JpdGhtcyBpbiB0aGUgZnV0dXJlLCBsaWtlIHRoZSBvbmUgZGVzY3JpYmVkIGluIHRoZSBKb2huICovCi0gIC8qIEQuIEhvYmJ5IHBhcGVyLCB3aGljaCB1bmZvcnR1bmF0ZWx5IHJlcXVpcmVzIGEgbG90IG1vcmUgaG9yc2Vwb3dlci4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQmVjYXVzZSBhIHN1ZmZpY2llbnRseSBzb3BoaXN0aWNhdGVkIGZvbnQgbWFuYWdlbWVudCBzeXN0ZW0gd291bGQgICAgICovCi0gIC8qIHR5cGljYWxseSBpbXBsZW1lbnQgYW4gTFJVIGNhY2hlIG9mIG9wZW5lZCBmYWNlIG9iamVjdHMgdG8gcmVkdWNlICAgICAqLwotICAvKiBtZW1vcnkgdXNhZ2UsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGJlIGFibGUgdG8gYXZvaWQgcmVjb21wdXRpbmcgICAgICAgKi8KLSAgLyogZ2xvYmFsIGhpbnRzIGV2ZXJ5IHRpbWUgdGhlIHNhbWUgZmFjZSBpcyByZS1vcGVuZWQuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBXZSB0aHVzIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gY2FjaGUgZ2xvYmFsIGhpbnRzIG91dHNpZGUgb2YgdGhlIGZhY2UgKi8KLSAgLyogb2JqZWN0LCBpbiBvcmRlciB0byBzcGVlZCB1cCBmb250IHJlLW9wZW5pbmcgdGltZS4gIE9mIGNvdXJzZSwgdGhpcyAgICovCi0gIC8qIGZlYXR1cmUgaXMgcHVyZWx5IG9wdGlvbmFsLCBzbyBtb3N0IGNsaWVudCBwcm9ncmFtcyB3b24ndCBldmVuIG5vdGljZSAqLwotICAvKiBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBjYWNoZSB0aGUgZ2x5cGggICAqLwotICAvKiBoaW50cyB0b28uICBIb3dldmVyLCBteSBnZW5lcmFsIGlkZWEgbm93IGlzIHRoYXQgaWYgeW91IHJlYWxseSBuZWVkICAgKi8KLSAgLyogdG8gY2FjaGUgdGhlc2UgdG9vLCB5b3UgYXJlIHNpbXBseSBpbiBuZWVkIG9mIGEgbmV3IGZvbnQgZm9ybWF0LCAgICAgICovCi0gIC8qIHdoZXJlIGFsbCB0aGlzIGluZm9ybWF0aW9uIGNvdWxkIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGZvbnQgZmlsZSBhbmQgICAqLwotICAvKiBkZWNvZGVkIG9uIHRoZSBmbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQSBzbWFsbCB0ZWNobmljYWwgbm90ZSByZWdhcmRpbmcgYXV0b21hdGljIGhpbnRpbmcgaW4gb3JkZXIgdG8KKyAgICogY2xhcmlmeSB0aGlzIG1vZHVsZSBpbnRlcmZhY2UuCisgICAqCisgICAqIEFuIGF1dG9tYXRpYyBoaW50ZXIgbWlnaHQgY29tcHV0ZSB0d28ga2luZHMgb2YgZGF0YSBmb3IgYSBnaXZlbiBmYWNlOgorICAgKgorICAgKiAtIGdsb2JhbCBoaW50czogVXN1YWxseSBzb21lIG1ldHJpY3MgdGhhdCBkZXNjcmliZSBnbG9iYWwgcHJvcGVydGllcworICAgKiAgICAgICAgICAgICAgICAgb2YgdGhlIGZhY2UuICBJdCBpcyBjb21wdXRlZCBieSBzY2FubmluZyBtb3JlIG9yIGxlc3MKKyAgICogICAgICAgICAgICAgICAgIGFnZ3Jlc3NpdmVseSB0aGUgZ2x5cGhzIGluIHRoZSBmYWNlLCBhbmQgdGh1cyBjYW4gYmUKKyAgICogICAgICAgICAgICAgICAgIHZlcnkgc2xvdyB0byBjb21wdXRlIChldmVuIGlmIHRoZSBzaXplIG9mIGdsb2JhbAorICAgKiAgICAgICAgICAgICAgICAgaGludHMgaXMgcmVhbGx5IHNtYWxsKS4KKyAgICoKKyAgICogLSBnbHlwaCBoaW50czogIFRoZXNlIGRlc2NyaWJlIHNvbWUgaW1wb3J0YW50IGZlYXR1cmVzIG9mIHRoZSBnbHlwaAorICAgKiAgICAgICAgICAgICAgICAgb3V0bGluZSwgYXMgd2VsbCBhcyBob3cgdG8gYWxpZ24gdGhlbS4gIFRoZXkgYXJlCisgICAqICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgbXVjaCBmYXN0ZXIgdG8gY29tcHV0ZSB0aGFuIGdsb2JhbCBoaW50cy4KKyAgICoKKyAgICogVGhlIGN1cnJlbnQgRnJlZVR5cGUgYXV0by1oaW50ZXIgZG9lcyBhIHByZXR0eSBnb29kIGpvYiB3aGlsZQorICAgKiBwZXJmb3JtaW5nIGZhc3QgY29tcHV0YXRpb25zIGZvciBib3RoIGdsb2JhbCBhbmQgZ2x5cGggaGludHMuCisgICAqIEhvd2V2ZXIsIHdlIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gaW50cm9kdWNpbmcgbW9yZSBjb21wbGV4IGFuZAorICAgKiBwb3dlcmZ1bCBhbGdvcml0aG1zIGluIHRoZSBmdXR1cmUsIGxpa2UgdGhlIG9uZSBkZXNjcmliZWQgaW4gdGhlIEpvaG4KKyAgICogRC4gSG9iYnkgcGFwZXIsIHdoaWNoIHVuZm9ydHVuYXRlbHkgcmVxdWlyZXMgYSBsb3QgbW9yZSBob3JzZXBvd2VyLgorICAgKgorICAgKiBCZWNhdXNlIGEgc3VmZmljaWVudGx5IHNvcGhpc3RpY2F0ZWQgZm9udCBtYW5hZ2VtZW50IHN5c3RlbSB3b3VsZAorICAgKiB0eXBpY2FsbHkgaW1wbGVtZW50IGFuIExSVSBjYWNoZSBvZiBvcGVuZWQgZmFjZSBvYmplY3RzIHRvIHJlZHVjZQorICAgKiBtZW1vcnkgdXNhZ2UsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGJlIGFibGUgdG8gYXZvaWQgcmVjb21wdXRpbmcKKyAgICogZ2xvYmFsIGhpbnRzIGV2ZXJ5IHRpbWUgdGhlIHNhbWUgZmFjZSBpcyByZS1vcGVuZWQuCisgICAqCisgICAqIFdlIHRodXMgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBjYWNoZSBnbG9iYWwgaGludHMgb3V0c2lkZSBvZiB0aGUgZmFjZQorICAgKiBvYmplY3QsIGluIG9yZGVyIHRvIHNwZWVkIHVwIGZvbnQgcmUtb3BlbmluZyB0aW1lLiAgT2YgY291cnNlLCB0aGlzCisgICAqIGZlYXR1cmUgaXMgcHVyZWx5IG9wdGlvbmFsLCBzbyBtb3N0IGNsaWVudCBwcm9ncmFtcyB3b24ndCBldmVuIG5vdGljZQorICAgKiBpdC4KKyAgICoKKyAgICogSSBpbml0aWFsbHkgdGhvdWdodCB0aGF0IGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoZSBnbHlwaAorICAgKiBoaW50cyB0b28uICBIb3dldmVyLCBteSBnZW5lcmFsIGlkZWEgbm93IGlzIHRoYXQgaWYgeW91IHJlYWxseSBuZWVkCisgICAqIHRvIGNhY2hlIHRoZXNlIHRvbywgeW91IGFyZSBzaW1wbHkgaW4gbmVlZCBvZiBhIG5ldyBmb250IGZvcm1hdCwKKyAgICogd2hlcmUgYWxsIHRoaXMgaW5mb3JtYXRpb24gY291bGQgYmUgc3RvcmVkIHdpdGhpbiB0aGUgZm9udCBmaWxlIGFuZAorICAgKiBkZWNvZGVkIG9uIHRoZSBmbHkuCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtODAsMjcgKzgwLDMxIEBACiAgIHR5cGVkZWYgc3RydWN0IEZUX0F1dG9IaW50ZXJSZWNfICAqRlRfQXV0b0hpbnRlcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfR2xvYmFsR2V0RnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHJpZXZlIHRoZSBnbG9iYWwgaGludHMgY29tcHV0ZWQgZm9yIGEgZ2l2ZW4gZmFjZSBvYmplY3QuICBUaGUgICAqLwotICAvKiAgICByZXN1bHRpbmcgZGF0YSBpcyBkaXNzb2NpYXRlZCBmcm9tIHRoZSBmYWNlIGFuZCB3aWxsIHN1cnZpdmUgYSAgICAgKi8KLSAgLyogICAgY2FsbCB0byBGVF9Eb25lX0ZhY2UoKS4gIEl0IG11c3QgYmUgZGlzY2FyZGVkIHRocm91Z2ggdGhlIEFQSSAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfR2xvYmFsRG9uZUZ1bmMoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhpbnRlciAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGF1dG8taGludGVyLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2xvYmFsX2hpbnRzIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB0byB0aGUgZ2xvYmFsIGhpbnRzLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbG9iYWxfbGVuICAgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGdsb2JhbCBoaW50cy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxHZXRGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXRyaWV2ZSB0aGUgZ2xvYmFsIGhpbnRzIGNvbXB1dGVkIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0LiAgVGhlCisgICAqICAgcmVzdWx0aW5nIGRhdGEgaXMgZGlzc29jaWF0ZWQgZnJvbSB0aGUgZmFjZSBhbmQgd2lsbCBzdXJ2aXZlIGEKKyAgICogICBjYWxsIHRvIEZUX0RvbmVfRmFjZSgpLiAgSXQgbXVzdCBiZSBkaXNjYXJkZWQgdGhyb3VnaCB0aGUgQVBJCisgICAqICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxEb25lRnVuYygpLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgaGludGVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGF1dG8taGludGVyLgorICAgKgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgZ2xvYmFsX2hpbnRzIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIGdsb2JhbCBoaW50cy4KKyAgICoKKyAgICogICBnbG9iYWxfbGVuIDo6CisgICAqICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZ2xvYmFsIGhpbnRzLgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfQXV0b0hpbnRlcl9HbG9iYWxHZXRGdW5jKSggRlRfQXV0b0hpbnRlciAgaGludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UsCkBAIC0xMDgsNjkgKzExMiw3NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcqICAgICAgICAgIGdsb2JhbF9sZW4gKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfR2xvYmFsRG9uZUZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERpc2NhcmQgdGhlIGdsb2JhbCBoaW50cyByZXRyaWV2ZWQgdGhyb3VnaCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9BdXRvSGludGVyX0dsb2JhbEdldEZ1bmMoKS4gIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRoZXNlIGhpbnRzICAgKi8KLSAgLyogICAgYXJlIGZyZWVkIGZyb20gbWVtb3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludGVyIDo6IEEgaGFuZGxlIHRvIHRoZSBhdXRvLWhpbnRlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbG9iYWwgOjogQSBwb2ludGVyIHRvIHJldHJpZXZlZCBnbG9iYWwgaGludHMgdG8gZGlzY2FyZC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxEb25lRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRGlzY2FyZCB0aGUgZ2xvYmFsIGhpbnRzIHJldHJpZXZlZCB0aHJvdWdoCisgICAqICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxHZXRGdW5jKCkuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0aGVzZSBoaW50cworICAgKiAgIGFyZSBmcmVlZCBmcm9tIG1lbW9yeS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGhpbnRlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGF1dG8taGludGVyIG1vZHVsZS4KKyAgICoKKyAgICogICBnbG9iYWwgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byByZXRyaWV2ZWQgZ2xvYmFsIGhpbnRzIHRvIGRpc2NhcmQuCisgICAqLwogICB0eXBlZGVmIHZvaWQKICAgKCpGVF9BdXRvSGludGVyX0dsb2JhbERvbmVGdW5jKSggRlRfQXV0b0hpbnRlciAgaGludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICBnbG9iYWwgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfR2xvYmFsUmVzZXRGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWNvbXB1dGUgdGhlIGdsb2JhbCBtZXRyaWNzIGluIGEgZ2l2ZW4gICAqLwotICAvKiAgICBmb250LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBnbG9iYWwgZm9udCBkYXRhIGNoYW5nZXMgKGUuZy4gTXVsdGlwbGUgKi8KLSAgLyogICAgTWFzdGVycyBmb250cyB3aGVyZSBibGVuZCBjb29yZGluYXRlcyBjaGFuZ2UpLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludGVyIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgYXV0by1oaW50ZXIuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgRlRfQXV0b0hpbnRlcl9HbG9iYWxSZXNldEZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWNvbXB1dGUgdGhlIGdsb2JhbCBtZXRyaWNzIGluIGEgZ2l2ZW4KKyAgICogICBmb250LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBnbG9iYWwgZm9udCBkYXRhIGNoYW5nZXMgKGUuZy4gTXVsdGlwbGUKKyAgICogICBNYXN0ZXJzIGZvbnRzIHdoZXJlIGJsZW5kIGNvb3JkaW5hdGVzIGNoYW5nZSkuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBoaW50ZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgYXV0by1oaW50ZXIuCisgICAqCisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGZhY2UuCisgICAqLwogICB0eXBlZGVmIHZvaWQKICAgKCpGVF9BdXRvSGludGVyX0dsb2JhbFJlc2V0RnVuYykoIEZUX0F1dG9IaW50ZXIgIGhpbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGZhY2UgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfR2x5cGhMb2FkRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkLCBzY2FsZSwgYW5kIGF1dG9tYXRpY2FsbHkgaGludCBhICAgICAqLwotICAvKiAgICBnbHlwaCBmcm9tIGEgZ2l2ZW4gZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9mbGFncyAgOjogVGhlIGxvYWQgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGxvYWRpbmcgY29tcG9zaXRlIGdseXBocyBieSBoaW50aW5nICAgICovCi0gIC8qICAgIGVhY2ggc3ViLWdseXBoIGluZGVwZW5kZW50bHkgKHdoaWNoIGltcHJvdmVzIHF1YWxpdHkpLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSXQgd2lsbCBjYWxsIHRoZSBmb250IGRyaXZlciB3aXRoIEBGVF9Mb2FkX0dseXBoLCB3aXRoICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9MT0FEX05PX1NDQUxFIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBGVF9BdXRvSGludGVyX0dseXBoTG9hZEZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkLCBzY2FsZSwgYW5kIGF1dG9tYXRpY2FsbHkgaGludCBhCisgICAqICAgZ2x5cGggZnJvbSBhIGdpdmVuIGZhY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgZmFjZS4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIFRoZSBsb2FkIGZsYWdzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgbG9hZGluZyBjb21wb3NpdGUgZ2x5cGhzIGJ5IGhpbnRpbmcKKyAgICogICBlYWNoIHN1Yi1nbHlwaCBpbmRlcGVuZGVudGx5ICh3aGljaCBpbXByb3ZlcyBxdWFsaXR5KS4KKyAgICoKKyAgICogICBJdCB3aWxsIGNhbGwgdGhlIGZvbnQgZHJpdmVyIHdpdGggQEZUX0xvYWRfR2x5cGgsIHdpdGgKKyAgICogICBARlRfTE9BRF9OT19TQ0FMRSBzZXQuCisgICAqLwogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfQXV0b0hpbnRlcl9HbHlwaExvYWRGdW5jKSggRlRfQXV0b0hpbnRlciAgaGludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgIHNsb3QsCkBAIC0xNzksMTQgKzE5MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgIGxvYWRfZmxhZ3MgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBhdXRvLWhpbnRlciBtb2R1bGUncyBpbnRlcmZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBhdXRvLWhpbnRlciBtb2R1bGUncyBpbnRlcmZhY2UuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2VSZWNfCiAgIHsKICAgICBGVF9BdXRvSGludGVyX0dsb2JhbFJlc2V0RnVuYyAgcmVzZXRfZmFjZTsKQEAgLTE5Nyw4ICsyMDgsNiBAQAogICB9IEZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlUmVjLCAqRlRfQXV0b0hpbnRlcl9JbnRlcmZhY2U7CiAKIAotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCiAjZGVmaW5lIEZUX0RFRklORV9BVVRPSElOVEVSX0lOVEVSRkFDRSggICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICByZXNldF9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMTQsMjcgKzIyMyw2IEBACiAgICAgbG9hZF9nbHlwaF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9BVVRPSElOVEVSX0lOVEVSRkFDRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZXNldF9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X2dsb2JhbF9oaW50c18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGRvbmVfZ2xvYmFsX2hpbnRzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBsb2FkX2dseXBoXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgbGlicmFyeSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9BdXRvSGludGVyX0ludGVyZmFjZVJlYyogIGNsYXp6ICkgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnJlc2V0X2ZhY2UgICAgICAgID0gcmVzZXRfZmFjZV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfZ2xvYmFsX2hpbnRzICA9IGdldF9nbG9iYWxfaGludHNfOyAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+ZG9uZV9nbG9iYWxfaGludHMgPSBkb25lX2dsb2JhbF9oaW50c187ICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfZ2x5cGggICAgICAgID0gbG9hZF9nbHlwaF87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiBGVF9FTkRfSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oCmluZGV4IDU3ZTc1OTEuLmMwMWRiYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZvdHlwZXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2Zmb3R5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEJhc2ljIE9wZW5UeXBlL0NGRiBvYmplY3QgdHlwZSBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2Zmb3R5cGVzLmgKKyAqCisgKiAgIEJhc2ljIE9wZW5UeXBlL0NGRiBvYmplY3QgdHlwZSBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMTctMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGT1RZUEVTX0hfCkBAIC0zMywxNCArMzMsMTQgQEAKICAgdHlwZWRlZiBUVF9GYWNlICBDRkZfRmFjZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENGRl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIE9wZW5UeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIENGRl9TaXplCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhbiBPcGVuVHlwZSBzaXplIG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBDRkZfU2l6ZVJlY18KICAgewogICAgIEZUX1NpemVSZWMgIHJvb3Q7CkBAIC00OSwxNCArNDksMTQgQEAKICAgfSBDRkZfU2l6ZVJlYywgKkNGRl9TaXplOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0ZGX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgZ2x5cGggc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgQ0ZGX0dseXBoU2xvdAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgZ2x5cGggc2xvdCBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0dseXBoU2xvdFJlY18KICAgewogICAgIEZUX0dseXBoU2xvdFJlYyAgcm9vdDsKQEAgLTcwLDE0ICs3MCwxNCBAQAogICB9IENGRl9HbHlwaFNsb3RSZWMsICpDRkZfR2x5cGhTbG90OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0ZGX0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGludGVyZmFjZSB0byB0aGUgYGludGVybmFsJyBmaWVsZCBvZiBgRlRfU2l6ZScuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHR5cGU6CisgICAqICAgQ0ZGX0ludGVybmFsCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGUgaW50ZXJmYWNlIHRvIHRoZSBgaW50ZXJuYWwnIGZpZWxkIG9mIGBGVF9TaXplJy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBDRkZfSW50ZXJuYWxSZWNfCiAgIHsKICAgICBQU0hfR2xvYmFscyAgdG9wZm9udDsKQEAgLTg2LDEwICs4NiwxMCBAQAogICB9IENGRl9JbnRlcm5hbFJlYywgKkNGRl9JbnRlcm5hbDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3ViZ2x5cGggdHJhbnNmb3JtYXRpb24gcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU3ViZ2x5cGggdHJhbnNmb3JtYXRpb24gcmVjb3JkLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9UcmFuc2Zvcm1fCiAgIHsKICAgICBGVF9GaXhlZCAgICB4eCwgeHk7ICAgICAvKiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggY29lZmZpY2llbnRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmgKaW5kZXggN2MwN2UxYS4uNTM0ZWUxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEJhc2ljIE9wZW5UeXBlL0NGRiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgICovCi0vKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNmZnR5cGVzLmgKKyAqCisgKiAgIEJhc2ljIE9wZW5UeXBlL0NGRiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24KKyAqICAgb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGVFlQRVNfSF8KQEAgLTMzLDM0ICszMyw0MiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDRkZfSW5kZXhSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgQ0ZGIEluZGV4IHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gICAgICA6OiBUaGUgc291cmNlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0YXJ0ICAgICAgIDo6IFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgaW5kZXggYnl0ZSBpbiB0aGUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvdW50ICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGluZGV4LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb2ZmX3NpemUgICAgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2Ygb2JqZWN0IG9mZnNldHMgaW4gaW5kZXguICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkYXRhX29mZnNldCA6OiBUaGUgcG9zaXRpb24gb2YgZmlyc3QgZGF0YSBieXRlIGluIHRoZSBpbmRleCdzICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkYXRhX3NpemUgICA6OiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0YWJsZSBpbiB0aGlzIGluZGV4LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG9mZnNldHMgICAgIDo6IEEgdGFibGUgb2YgZWxlbWVudCBvZmZzZXRzIGluIHRoZSBpbmRleC4gIE11c3QgYmUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBsb2FkZWQgZXhwbGljaXRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJ5dGVzICAgICAgIDo6IElmIHRoZSBpbmRleCBpcyBsb2FkZWQgaW4gbWVtb3J5LCBpdHMgYnl0ZXMuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgQ0ZGX0luZGV4UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgQ0ZGIEluZGV4IHRhYmxlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIHNvdXJjZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICAgc3RhcnQgOjoKKyAgICogICAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgaW5kZXggYnl0ZSBpbiB0aGUKKyAgICogICAgIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICBjb3VudCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaW5kZXguCisgICAqCisgICAqICAgb2ZmX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIG9iamVjdCBvZmZzZXRzIGluIGluZGV4LgorICAgKgorICAgKiAgIGRhdGFfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgcG9zaXRpb24gb2YgZmlyc3QgZGF0YSBieXRlIGluIHRoZSBpbmRleCdzCisgICAqICAgICBieXRlcy4KKyAgICoKKyAgICogICBkYXRhX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSBkYXRhIHRhYmxlIGluIHRoaXMgaW5kZXguCisgICAqCisgICAqICAgb2Zmc2V0cyA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBlbGVtZW50IG9mZnNldHMgaW4gdGhlIGluZGV4LiAgTXVzdCBiZQorICAgKiAgICAgbG9hZGVkIGV4cGxpY2l0bHkuCisgICAqCisgICAqICAgYnl0ZXMgOjoKKyAgICogICAgIElmIHRoZSBpbmRleCBpcyBsb2FkZWQgaW4gbWVtb3J5LCBpdHMgYnl0ZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0luZGV4UmVjXwogICB7CiAgICAgRlRfU3RyZWFtICBzdHJlYW07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaAppbmRleCA4MThhODEyLi43MzNiNjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2FsYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBcml0aG1ldGljIGNvbXB1dGF0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2FsYy5oCisgKgorICogICBBcml0aG1ldGljIGNvbXB1dGF0aW9ucyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRDQUxDX0hfCkBAIC0yNywxMSArMjcsMTEgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9NdWxEaXYoKSBhbmQgRlRfTXVsRml4KCkgYXJlIGRlY2xhcmVkIGluIGZyZWV0eXBlLmguICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRlRfTXVsRGl2KCkgYW5kIEZUX011bEZpeCgpIGFyZSBkZWNsYXJlZCBpbiBmcmVldHlwZS5oLgorICAgKgorICAgKi8KIAogI2lmbmRlZiAgRlRfQ09ORklHX09QVElPTl9OT19BU1NFTUJMRVIKICAgLyogUHJvdmlkZSBhc3NlbWJsZXIgZnJhZ21lbnRzIGZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbnMuICovCkBAIC0yNDYsMjkgKzI0NiwzMiBAQAogI2VuZGlmCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9NdWxEaXZfTm9fUm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gYChhKmIpL2MnICAgKi8KLSAgLyogICAgKHdpdGhvdXQgcm91bmRpbmcpIHdpdGggbWF4aW11bSBhY2N1cmFjeSAoaXQgdXNlcyBhIDY0LWJpdCAgICAgICAgICovCi0gIC8qICAgIGludGVybWVkaWF0ZSBpbnRlZ2VyIHdoZW5ldmVyIG5lY2Vzc2FyeSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpc24ndCBuZWNlc3NhcmlseSBhcyBmYXN0IGFzIHNvbWUgcHJvY2Vzc29yIHNwZWNpZmljICovCi0gIC8qICAgIG9wZXJhdGlvbnMsIGJ1dCBpcyBhdCBsZWFzdCBjb21wbGV0ZWx5IHBvcnRhYmxlLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGEgOjogVGhlIGZpcnN0IG11bHRpcGxpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiIDo6IFRoZSBzZWNvbmQgbXVsdGlwbGllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYyA6OiBUaGUgZGl2aXNvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEqYikvYycuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIHRyYXBzIHdoZW4gdHJ5aW5nIHRvICovCi0gIC8qICAgIGRpdmlkZSBieSB6ZXJvOyBpdCBzaW1wbHkgcmV0dXJucyBgTWF4SW50JyBvciBgTWluSW50JyBkZXBlbmRpbmcgICAqLwotICAvKiAgICBvbiB0aGUgc2lnbnMgb2YgYGEnIGFuZCBgYicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTXVsRGl2X05vX1JvdW5kCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gYChhKmIpL2MnCisgICAqICAgKHdpdGhvdXQgcm91bmRpbmcpIHdpdGggbWF4aW11bSBhY2N1cmFjeSAoaXQgdXNlcyBhIDY0LWJpdAorICAgKiAgIGludGVybWVkaWF0ZSBpbnRlZ2VyIHdoZW5ldmVyIG5lY2Vzc2FyeSkuCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBpc24ndCBuZWNlc3NhcmlseSBhcyBmYXN0IGFzIHNvbWUgcHJvY2Vzc29yLXNwZWNpZmljCisgICAqICAgb3BlcmF0aW9ucywgYnV0IGlzIGF0IGxlYXN0IGNvbXBsZXRlbHkgcG9ydGFibGUuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBhIDo6CisgICAqICAgICBUaGUgZmlyc3QgbXVsdGlwbGllci4KKyAgICogICBiIDo6CisgICAqICAgICBUaGUgc2Vjb25kIG11bHRpcGxpZXIuCisgICAqICAgYyA6OgorICAgKiAgICAgVGhlIGRpdmlzb3IuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVGhlIHJlc3VsdCBvZiBgKGEqYikvYycuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIHRyYXBzIHdoZW4gdHJ5aW5nIHRvCisgICAqICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZworICAgKiAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4KKyAgICovCiAgIEZUX0JBU0UoIEZUX0xvbmcgKQogICBGVF9NdWxEaXZfTm9fUm91bmQoIEZUX0xvbmcgIGEsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgYiwKQEAgLTI3NiwxMiArMjc5LDEyIEBACiAKIAogICAvKgotICAgKiAgQSB2YXJpYW50IG9mIEZUX01hdHJpeF9NdWx0aXBseSB3aGljaCBzY2FsZXMgaXRzIHJlc3VsdCBhZnRlcndhcmRzLgotICAgKiAgVGhlIGlkZWEgaXMgdGhhdCBib3RoIGBhJyBhbmQgYGInIGFyZSBzY2FsZWQgYnkgZmFjdG9ycyBvZiAxMCBzbyB0aGF0Ci0gICAqICB0aGUgdmFsdWVzIGFyZSBhcyBwcmVjaXNlIGFzIHBvc3NpYmxlIHRvIGdldCBhIGNvcnJlY3QgcmVzdWx0IGR1cmluZwotICAgKiAgdGhlIDY0Yml0IG11bHRpcGxpY2F0aW9uLiAgTGV0IGBzYScgYW5kIGBzYicgYmUgdGhlIHNjYWxpbmcgZmFjdG9ycyBvZgotICAgKiAgYGEnIGFuZCBgYicsIHJlc3BlY3RpdmVseSwgdGhlbiB0aGUgc2NhbGluZyBmYWN0b3Igb2YgdGhlIHJlc3VsdCBpcwotICAgKiAgYHNhKnNiJy4KKyAgICogQSB2YXJpYW50IG9mIEZUX01hdHJpeF9NdWx0aXBseSB3aGljaCBzY2FsZXMgaXRzIHJlc3VsdCBhZnRlcndhcmRzLgorICAgKiBUaGUgaWRlYSBpcyB0aGF0IGJvdGggYGEnIGFuZCBgYicgYXJlIHNjYWxlZCBieSBmYWN0b3JzIG9mIDEwIHNvIHRoYXQKKyAgICogdGhlIHZhbHVlcyBhcmUgYXMgcHJlY2lzZSBhcyBwb3NzaWJsZSB0byBnZXQgYSBjb3JyZWN0IHJlc3VsdCBkdXJpbmcKKyAgICogdGhlIDY0Yml0IG11bHRpcGxpY2F0aW9uLiAgTGV0IGBzYScgYW5kIGBzYicgYmUgdGhlIHNjYWxpbmcgZmFjdG9ycyBvZgorICAgKiBgYScgYW5kIGBiJywgcmVzcGVjdGl2ZWx5LCB0aGVuIHRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgcmVzdWx0IGlzCisgICAqIGBzYSpzYicuCiAgICAqLwogICBGVF9CQVNFKCB2b2lkICkKICAgRlRfTWF0cml4X011bHRpcGx5X1NjYWxlZCggY29uc3QgRlRfTWF0cml4KiAgYSwKQEAgLTI5MCw4ICsyOTMsMjMgQEAKIAogCiAgIC8qCi0gICAqICBBIHZhcmlhbnQgb2YgRlRfVmVjdG9yX1RyYW5zZm9ybS4gIFNlZSBjb21tZW50cyBmb3IKLSAgICogIEZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQuCisgICAqIENoZWNrIGEgbWF0cml4LiAgSWYgdGhlIHRyYW5zZm9ybWF0aW9uIHdvdWxkIGxlYWQgdG8gZXh0cmVtZSBzaGVhciBvcgorICAgKiBleHRyZW1lIHNjYWxpbmcsIGZvciBleGFtcGxlLCByZXR1cm4gMC4gIElmIGV2ZXJ5dGhpbmcgaXMgT0ssIHJldHVybiAxLgorICAgKgorICAgKiBCYXNlZCBvbiBnZW9tZXRyaWMgY29uc2lkZXJhdGlvbnMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgaW5lcXVhbGl0eSB0bworICAgKiBpZGVudGlmeSBhIGRlZ2VuZXJhdGUgbWF0cml4LgorICAgKgorICAgKiAgIDUwICogYWJzKHh4Knl5IC0geHkqeXgpIDwgeHheMiArIHh5XjIgKyB5eF4yICsgeXleMgorICAgKgorICAgKiBWYWx1ZSA1MCBpcyBoZXVyaXN0aWMuCisgICAqLworICBGVF9CQVNFKCBGVF9Cb29sICkKKyAgRlRfTWF0cml4X0NoZWNrKCBjb25zdCBGVF9NYXRyaXgqICBtYXRyaXggKTsKKworCisgIC8qCisgICAqIEEgdmFyaWFudCBvZiBGVF9WZWN0b3JfVHJhbnNmb3JtLiAgU2VlIGNvbW1lbnRzIGZvcgorICAgKiBGVF9NYXRyaXhfTXVsdGlwbHlfU2NhbGVkLgogICAgKi8KICAgRlRfQkFTRSggdm9pZCApCiAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkKCBGVF9WZWN0b3IqICAgICAgICB2ZWN0b3IsCkBAIC0zMDAsMjIgKzMxOCwyMiBAQAogCiAKICAgLyoKLSAgICogIFRoaXMgZnVuY3Rpb24gbm9ybWFsaXplcyBhIHZlY3RvciBhbmQgcmV0dXJucyBpdHMgb3JpZ2luYWwgbGVuZ3RoLgotICAgKiAgVGhlIG5vcm1hbGl6ZWQgdmVjdG9yIGlzIGEgMTYuMTYgZml4ZWQtcG9pbnQgdW5pdCB2ZWN0b3Igd2l0aCBsZW5ndGgKLSAgICogIGNsb3NlIHRvIDB4MTAwMDAuICBUaGUgYWNjdXJhY3kgb2YgdGhlIHJldHVybmVkIGxlbmd0aCBpcyBsaW1pdGVkIHRvCi0gICAqICAxNiBiaXRzIGFsc28uICBUaGUgZnVuY3Rpb24gdXRpbGl6ZXMgcXVpY2sgaW52ZXJzZSBzcXVhcmUgcm9vdAotICAgKiAgYXBwcm94aW1hdGlvbiB3aXRob3V0IGRpdmlzaW9ucyBhbmQgc3F1YXJlIHJvb3RzIHJlbHlpbmcgb24gTmV3dG9uJ3MKLSAgICogIGl0ZXJhdGlvbnMgaW5zdGVhZC4KKyAgICogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIGEgdmVjdG9yIGFuZCByZXR1cm5zIGl0cyBvcmlnaW5hbCBsZW5ndGguCisgICAqIFRoZSBub3JtYWxpemVkIHZlY3RvciBpcyBhIDE2LjE2IGZpeGVkLXBvaW50IHVuaXQgdmVjdG9yIHdpdGggbGVuZ3RoCisgICAqIGNsb3NlIHRvIDB4MTAwMDAuICBUaGUgYWNjdXJhY3kgb2YgdGhlIHJldHVybmVkIGxlbmd0aCBpcyBsaW1pdGVkIHRvCisgICAqIDE2IGJpdHMgYWxzby4gIFRoZSBmdW5jdGlvbiB1dGlsaXplcyBxdWljayBpbnZlcnNlIHNxdWFyZSByb290CisgICAqIGFwcHJveGltYXRpb24gd2l0aG91dCBkaXZpc2lvbnMgYW5kIHNxdWFyZSByb290cyByZWx5aW5nIG9uIE5ld3RvbidzCisgICAqIGl0ZXJhdGlvbnMgaW5zdGVhZC4KICAgICovCiAgIEZUX0JBU0UoIEZUX1VJbnQzMiApCiAgIEZUX1ZlY3Rvcl9Ob3JtTGVuKCBGVF9WZWN0b3IqICB2ZWN0b3IgKTsKIAogCiAgIC8qCi0gICAqICBSZXR1cm4gLTEsIDAsIG9yICsxLCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIGEgZ2l2ZW4gY29ybmVyLgotICAgKiAgV2UgdXNlIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0sIHdpdGggcG9zaXRpdmUgdmVydGljYWwgdmFsdWVzCi0gICAqICBnb2luZyB1cHdhcmRzLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgKzEgaWYgdGhlIGNvcm5lciB0dXJucyB0byB0aGUKLSAgICogIGxlZnQsIC0xIHRvIHRoZSByaWdodCwgYW5kIDAgZm9yIHVuZGVjaWRhYmxlIGNhc2VzLgorICAgKiBSZXR1cm4gLTEsIDAsIG9yICsxLCBkZXBlbmRpbmcgb24gdGhlIG9yaWVudGF0aW9uIG9mIGEgZ2l2ZW4gY29ybmVyLgorICAgKiBXZSB1c2UgdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbSwgd2l0aCBwb3NpdGl2ZSB2ZXJ0aWNhbCB2YWx1ZXMKKyAgICogZ29pbmcgdXB3YXJkcy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zICsxIGlmIHRoZSBjb3JuZXIgdHVybnMgdG8gdGhlCisgICAqIGxlZnQsIC0xIHRvIHRoZSByaWdodCwgYW5kIDAgZm9yIHVuZGVjaWRhYmxlIGNhc2VzLgogICAgKi8KICAgRlRfQkFTRSggRlRfSW50ICkKICAgZnRfY29ybmVyX29yaWVudGF0aW9uKCBGVF9Qb3MgIGluX3gsCkBAIC0zMjUsOSArMzQzLDkgQEAKIAogCiAgIC8qCi0gICAqICBSZXR1cm4gVFJVRSBpZiBhIGNvcm5lciBpcyBmbGF0IG9yIG5lYXJseSBmbGF0LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAqICBzYXlpbmcgdGhhdCB0aGUgY29ybmVyIHBvaW50IGlzIGNsb3NlIHRvIGl0cyBuZWlnaGJvcnMsIG9yIGluc2lkZSBhbgotICAgKiAgZWxsaXBzZSBkZWZpbmVkIGJ5IHRoZSBuZWlnaGJvciBmb2NhbCBwb2ludHMgdG8gYmUgbW9yZSBwcmVjaXNlLgorICAgKiBSZXR1cm4gVFJVRSBpZiBhIGNvcm5lciBpcyBmbGF0IG9yIG5lYXJseSBmbGF0LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAqIHNheWluZyB0aGF0IHRoZSBjb3JuZXIgcG9pbnQgaXMgY2xvc2UgdG8gaXRzIG5laWdoYm9ycywgb3IgaW5zaWRlIGFuCisgICAqIGVsbGlwc2UgZGVmaW5lZCBieSB0aGUgbmVpZ2hib3IgZm9jYWwgcG9pbnRzIHRvIGJlIG1vcmUgcHJlY2lzZS4KICAgICovCiAgIEZUX0JBU0UoIEZUX0ludCApCiAgIGZ0X2Nvcm5lcl9pc19mbGF0KCBGVF9Qb3MgIGluX3gsCkBAIC0zMzcsMTAgKzM1NSwxMSBAQAogCiAKICAgLyoKLSAgICogIFJldHVybiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW5kZXguCisgICAqIFJldHVybiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW5kZXguCiAgICAqLwogCiAjaWZuZGVmICBGVF9DT05GSUdfT1BUSU9OX05PX0FTU0VNQkxFUgorCiAjaWYgZGVmaW5lZCggX19HTlVDX18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFwKICAgICAoIF9fR05VQ19fID4gMyB8fCAoIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gNCApICkKIApAQCAtMzUyLDkgKzM3MSwzNCBAQAogCiAjZGVmaW5lIEZUX01TQiggeCApICAoIDMxIC0gX19idWlsdGluX2NsemwoIHggKSApCiAKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisKKyNlbGlmIGRlZmluZWQoIF9NU0NfVkVSICkgJiYgKCBfTVNDX1ZFUiA+PSAxNDAwICkKKworI2lmIEZUX1NJWkVPRl9JTlQgPT0gNAorCisjaW5jbHVkZSA8aW50cmluLmg+CisKKyAgc3RhdGljIF9faW5saW5lIEZUX0ludDMyCisgIEZUX01TQl9pMzg2KCBGVF9VSW50MzIgIHggKQorICB7CisgICAgdW5zaWduZWQgbG9uZyAgd2hlcmU7CisKKworICAgIC8qIG5vdCBhdmFpbGFibGUgaW4gb2xkZXIgVkMgdmVyc2lvbnMgKi8KKyAgICBfQml0U2NhblJldmVyc2UoICZ3aGVyZSwgeCApOworCisgICAgcmV0dXJuIChGVF9JbnQzMil3aGVyZTsKKyAgfQorCisjZGVmaW5lIEZUX01TQiggeCApICAoIEZUX01TQl9pMzg2KCB4ICkgKQorCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworCiAjZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fTk9fQVNTRU1CTEVSICovCiAKICNpZm5kZWYgRlRfTVNCCkBAIC0zNjYsOCArNDEwLDggQEAKIAogCiAgIC8qCi0gICAqICBSZXR1cm4gc3FydCh4KngreSp5KSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgYEZUX1ZlY3Rvcl9MZW5ndGgnIGJ1dCB1c2VzCi0gICAqICB0d28gZml4ZWQtcG9pbnQgYXJndW1lbnRzIGluc3RlYWQuCisgICAqIFJldHVybiBzcXJ0KHgqeCt5KnkpLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBgRlRfVmVjdG9yX0xlbmd0aCcgYnV0IHVzZXMKKyAgICogdHdvIGZpeGVkLXBvaW50IGFyZ3VtZW50cyBpbnN0ZWFkLgogICAgKi8KICAgRlRfQkFTRSggRlRfRml4ZWQgKQogICBGVF9IeXBvdCggRlRfRml4ZWQgIHgsCkBAIC0zNzYsMjMgKzQyMCwyNCBAQAogCiAjaWYgMAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NxcnRGaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHggOjogVGhlIHZhbHVlIHRvIGNvbXB1dGUgdGhlIHJvb3QgZm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByZXN1bHQgb2YgYHNxcnQoeCknLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHZlcnkgZmFzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9TcXJ0Rml4ZWQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIENvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiBhIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgeCA6OgorICAgKiAgICAgVGhlIHZhbHVlIHRvIGNvbXB1dGUgdGhlIHJvb3QgZm9yLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSByZXN1bHQgb2YgYHNxcnQoeCknLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB2ZXJ5IGZhc3QuCisgICAqLwogICBGVF9CQVNFKCBGVF9JbnQzMiApCiAgIEZUX1NxcnRGaXhlZCggRlRfSW50MzIgIHggKTsKIApAQCAtNDA5LDE0ICs0NTQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggLSggKCAzMiAtICh4KSApICYgLTY0ICkgKSApCiAKICAgLyoKLSAgICogIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGhhdmUgdHdvIHB1cnBvc2VzLgorICAgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBoYXZlIHR3byBwdXJwb3Nlcy4KICAgICoKLSAgICogIC4gVGFnIHBsYWNlcyB3aGVyZSBvdmVyZmxvdyBpcyBleHBlY3RlZCBhbmQgaGFybWxlc3MuCisgICAqIC0gVGFnIHBsYWNlcyB3aGVyZSBvdmVyZmxvdyBpcyBleHBlY3RlZCBhbmQgaGFybWxlc3MuCiAgICAqCi0gICAqICAuIEF2b2lkIHJ1bi10aW1lIHNhbml0aXplciBlcnJvcnMuCisgICAqIC0gQXZvaWQgcnVuLXRpbWUgc2FuaXRpemVyIGVycm9ycy4KICAgICoKLSAgICogIFVzZSB3aXRoIGNhcmUhCisgICAqIFVzZSB3aXRoIGNhcmUhCiAgICAqLworI2RlZmluZSBBRERfSU5UKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEZUX0ludCkoIChGVF9VSW50KShhKSArIChGVF9VSW50KShiKSApCisjZGVmaW5lIFNVQl9JTlQoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoRlRfSW50KSggKEZUX1VJbnQpKGEpIC0gKEZUX1VJbnQpKGIpICkKKyNkZWZpbmUgTVVMX0lOVCggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChGVF9JbnQpKCAoRlRfVUludCkoYSkgKiAoRlRfVUludCkoYikgKQorI2RlZmluZSBORUdfSU5UKCBhICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEZUX0ludCkoIChGVF9VSW50KTAgLSAoRlRfVUludCkoYSkgKQorCiAjZGVmaW5lIEFERF9MT05HKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoRlRfTG9uZykoIChGVF9VTG9uZykoYSkgKyAoRlRfVUxvbmcpKGIpICkKICNkZWZpbmUgU1VCX0xPTkcoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAppbmRleCAyOTJhNGVlLi5kNmU4YTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaApAQCAtMSwyNCArMSwyNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRkZWJ1Zy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBJTVBPUlRBTlQ6IEEgZGVzY3JpcHRpb24gb2YgRnJlZVR5cGUncyBkZWJ1Z2dpbmcgc3VwcG9ydCBjYW4gYmUgICAgICAgICovCi0vKiAgICAgICAgICAgICBmb3VuZCBpbiBgZG9jcy9ERUJVRy5UWFQnLiAgUmVhZCBpdCBpZiB5b3UgbmVlZCB0byB1c2Ugb3IgICAqLwotLyogICAgICAgICAgICAgdW5kZXJzdGFuZCB0aGlzIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGRlYnVnLmgKKyAqCisgKiAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKgorICogSU1QT1JUQU5UOiBBIGRlc2NyaXB0aW9uIG9mIEZyZWVUeXBlJ3MgZGVidWdnaW5nIHN1cHBvcnQgY2FuIGJlCisgKiAgICAgICAgICAgICBmb3VuZCBpbiBgZG9jcy9ERUJVRy5UWFQnLiAgUmVhZCBpdCBpZiB5b3UgbmVlZCB0byB1c2Ugb3IKKyAqICAgICAgICAgICAgIHVuZGVyc3RhbmQgdGhpcyBjb2RlLgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRERUJVR19IXwpAQCAtNDIsMTIgKzQyLDEyIEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIHRoZSB0cmFjZSBlbnVtcyBhcyB3ZWxsIGFzIHRoZSB0cmFjZSBsZXZlbHMgYXJyYXkgd2hlbiB0aGV5ICAgICovCi0gIC8qIGFyZSBuZWVkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgdGhlIHRyYWNlIGVudW1zIGFzIHdlbGwgYXMgdGhlIHRyYWNlIGxldmVscyBhcnJheSB3aGVuIHRoZXkKKyAgICogYXJlIG5lZWRlZC4KKyAgICoKKyAgICovCiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogCkBAIC02MiwyNCArNjIsMjUgQEAKICAgfSBGVF9UcmFjZTsKIAogCi0gIC8qIGRlZmluaW5nIHRoZSBhcnJheSBvZiB0cmFjZSBsZXZlbHMsIHByb3ZpZGVkIGJ5IGBzcmMvYmFzZS9mdGRlYnVnLmMnICovCi0gIGV4dGVybiBpbnQgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9jb3VudF07CisgIC8qIGEgcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgdHJhY2UgbGV2ZWxzLCAqLworICAvKiBwcm92aWRlZCBieSBgc3JjL2Jhc2UvZnRkZWJ1Zy5jJyAgICAgICAgKi8KKyAgZXh0ZXJuIGludCogIGZ0X3RyYWNlX2xldmVsczsKIAogI3VuZGVmIEZUX1RSQUNFX0RFRgogCiAjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIHRoZSBGVF9UUkFDRSBtYWNybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJTVBPUlRBTlQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVhY2ggY29tcG9uZW50IG11c3QgZGVmaW5lIHRoZSBtYWNybyBGVF9DT01QT05FTlQgdG8gYSB2YWxpZCBGVF9UcmFjZSAqLwotICAvKiB2YWx1ZSBiZWZvcmUgdXNpbmcgYW55IFRSQUNFIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIHRoZSBGVF9UUkFDRSBtYWNybworICAgKgorICAgKiBJTVBPUlRBTlQhCisgICAqCisgICAqIEVhY2ggY29tcG9uZW50IG11c3QgZGVmaW5lIHRoZSBtYWNybyBGVF9DT01QT05FTlQgdG8gYSB2YWxpZCBGVF9UcmFjZQorICAgKiB2YWx1ZSBiZWZvcmUgdXNpbmcgYW55IFRSQUNFIG1hY3JvLgorICAgKgorICAgKi8KIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAKQEAgLTk3LDYyICs5OCw4NSBAQAogI2VuZGlmIC8qICFGVF9ERUJVR19MRVZFTF9UUkFDRSAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVHJhY2VfR2V0X0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHRyYWNlIGNvbXBvbmVudHMuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG51bWJlciBvZiB0cmFjZSBjb21wb25lbnRzLiAgMCBpZiBGcmVlVHlwZSAyIGlzIG5vdCBidWlsdCB3aXRoICovCi0gIC8qICAgIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgZWxlbWVudHMgb2YgICAgICAqLwotICAvKiAgICB0aGUgaW50ZXJuYWwgYGZ0X3RyYWNlX2xldmVscycgYXJyYXkgYnkgYW4gaW5kZXguICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfVHJhY2VfR2V0X0NvdW50CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgdHJhY2UgY29tcG9uZW50cy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgbnVtYmVyIG9mIHRyYWNlIGNvbXBvbmVudHMuICAwIGlmIEZyZWVUeXBlIDIgaXMgbm90IGJ1aWx0IHdpdGgKKyAgICogICBGVF9ERUJVR19MRVZFTF9UUkFDRSBkZWZpbml0aW9uLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYWNjZXNzIGVsZW1lbnRzIG9mCisgICAqICAgdGhlIGludGVybmFsIHRyYWNlIGxldmVscyBhcnJheSBieSBhbiBpbmRleC4KKyAgICovCiAgIEZUX0JBU0UoIEZUX0ludCApCiAgIEZUX1RyYWNlX0dldF9Db3VudCggdm9pZCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfVHJhY2VfR2V0X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBuYW1lIG9mIGEgdHJhY2UgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGluZGV4IG9mIHRoZSB0cmFjZSBjb21wb25lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG5hbWUgb2YgdGhlIHRyYWNlIGNvbXBvbmVudC4gIFRoaXMgaXMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAgICovCi0gIC8qICAgIEMgc3RyaW5nLCBzbyBkbyBub3QgZnJlZSBpdCBhZnRlciB1c2UuICBOVUxMIGlmIEZyZWVUeXBlIDIgaXMgbm90ICAqLwotICAvKiAgICBidWlsdCB3aXRoIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2UgQEZUX1RyYWNlX0dldF9Db3VudCB0byBnZXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgdHJhY2UgICAgICAgKi8KLSAgLyogICAgY29tcG9uZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY29udHJvbCBGcmVlVHlwZSAyJ3MgICAgKi8KLSAgLyogICAgZGVidWcgbGV2ZWwgaW4geW91ciBhcHBsaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1RyYWNlX0dldF9OYW1lCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIG5hbWUgb2YgYSB0cmFjZSBjb21wb25lbnQuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBUaGUgaW5kZXggb2YgdGhlIHRyYWNlIGNvbXBvbmVudC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgbmFtZSBvZiB0aGUgdHJhY2UgY29tcG9uZW50LiAgVGhpcyBpcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisgICAqICAgQ35zdHJpbmcsIHNvIGRvIG5vdCBmcmVlIGl0IGFmdGVyIHVzZS4gIE5VTEwgaWYgRnJlZVR5cGUgaXMgbm90IGJ1aWx0CisgICAqICAgd2l0aCBGVF9ERUJVR19MRVZFTF9UUkFDRSBkZWZpbml0aW9uLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBVc2UgQEZUX1RyYWNlX0dldF9Db3VudCB0byBnZXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgdHJhY2UKKyAgICogICBjb21wb25lbnRzLgorICAgKi8KICAgRlRfQkFTRSggY29uc3QgY2hhciogKQogICBGVF9UcmFjZV9HZXRfTmFtZSggRlRfSW50ICBpZHggKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWW91IG5lZWQgdHdvIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW50aGVzZXMhICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFeGFtcGxlOiBGVF9UUkFDRTAoKCAiVmFsdWUgaXMgJWkiLCBmb28gKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE91dHB1dCBvZiB0aGUgRlRfVFJBQ0VYIG1hY3JvcyBpcyBzZW50IHRvIHN0ZGVyci4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfVHJhY2VfRGlzYWJsZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU3dpdGNoIG9mZiB0cmFjaW5nIHRlbXBvcmFyaWx5LiAgSXQgY2FuIGJlIGFjdGl2YXRlZCBhZ2FpbiB3aXRoCisgICAqICAgQEZUX1RyYWNlX0VuYWJsZS4KKyAgICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBGVF9UcmFjZV9EaXNhYmxlKCB2b2lkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1RyYWNlX0VuYWJsZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQWN0aXZhdGUgdHJhY2luZy4gIFVzZSBpdCBhZnRlciB0cmFjaW5nIGhhcyBiZWVuIHN3aXRjaGVkIG9mZiB3aXRoCisgICAqICAgQEZUX1RyYWNlX0Rpc2FibGUuCisgICAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgRlRfVHJhY2VfRW5hYmxlKCB2b2lkICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogWW91IG5lZWQgdHdvIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW50aGVzZXMhCisgICAqCisgICAqIEV4YW1wbGU6IEZUX1RSQUNFMCgoICJWYWx1ZSBpcyAlaSIsIGZvbyApKQorICAgKgorICAgKiBPdXRwdXQgb2YgdGhlIEZUX1RSQUNFWCBtYWNyb3MgaXMgc2VudCB0byBzdGRlcnIuCisgICAqCisgICAqLwogCiAjZGVmaW5lIEZUX1RSQUNFMCggdmFyZm9ybWF0ICkgIEZUX1RSQUNFKCAwLCB2YXJmb3JtYXQgKQogI2RlZmluZSBGVF9UUkFDRTEoIHZhcmZvcm1hdCApICBGVF9UUkFDRSggMSwgdmFyZm9ybWF0ICkKQEAgLTE2NCwxMyArMTg4LDEzIEBACiAjZGVmaW5lIEZUX1RSQUNFNyggdmFyZm9ybWF0ICkgIEZUX1RSQUNFKCA3LCB2YXJmb3JtYXQgKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgdGhlIEZUX0VSUk9SIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE91dHB1dCBvZiB0aGlzIG1hY3JvIGlzIHNlbnQgdG8gc3RkZXJyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZpbmUgdGhlIEZUX0VSUk9SIG1hY3JvLgorICAgKgorICAgKiBPdXRwdXQgb2YgdGhpcyBtYWNybyBpcyBzZW50IHRvIHN0ZGVyci4KKyAgICoKKyAgICovCiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9FUlJPUgogCkBAIC0xODMsMTIgKzIwNywxMiBAQAogI2VuZGlmIC8qICFGVF9ERUJVR19MRVZFTF9FUlJPUiAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEZWZpbmUgdGhlIEZUX0FTU0VSVCBhbmQgRlRfVEhST1cgbWFjcm9zLiAgVGhlIGNhbGwgdG8gYEZUX1Rocm93JyAgICAgKi8KLSAgLyogbWFrZXMgaXQgcG9zc2libGUgdG8gZWFzaWx5IHNldCBhIGJyZWFrcG9pbnQgYXQgdGhpcyBmdW5jdGlvbi4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSB0aGUgRlRfQVNTRVJUIGFuZCBGVF9USFJPVyBtYWNyb3MuICBUaGUgY2FsbCB0byBgRlRfVGhyb3cnCisgICAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGVhc2lseSBzZXQgYSBicmVha3BvaW50IGF0IHRoaXMgZnVuY3Rpb24uCisgICAqCisgICAqLwogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKIApAQCAtMjE1LDExICsyMzksMTEgQEAKICNlbmRpZiAvKiAhRlRfREVCVUdfTEVWRUxfRVJST1IgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lIGBGVF9NZXNzYWdlJyBhbmQgYEZUX1BhbmljJyB3aGVuIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERlZmluZSBgRlRfTWVzc2FnZScgYW5kIGBGVF9QYW5pYycgd2hlbiBuZWVkZWQuCisgICAqCisgICAqLwogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfRVJST1IKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oCmluZGV4IDU4ZGQzNWEuLjc0NWI3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0ZHJ2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBpbnRlcm5hbCBmb250IGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0ZHJ2LmgKKyAqCisgKiAgIEZyZWVUeXBlIGludGVybmFsIGZvbnQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlREUlZfSF8KQEAgLTg3LDczICs4Nyw4OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBhZHZhbmNlcyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRHJpdmVyX0NsYXNzUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGZvbnQgZHJpdmVyIGNsYXNzLiAgVGhpcyBzdHJ1Y3R1cmUgbW9zdGx5IGNvbnRhaW5zIHBvaW50ZXJzIHRvICovCi0gIC8qICAgIGRyaXZlciBtZXRob2RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJvb3QgICAgICAgICAgICAgOjogVGhlIHBhcmVudCBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZV9vYmplY3Rfc2l6ZSA6OiBUaGUgc2l6ZSBvZiBhIGZhY2Ugb2JqZWN0IGluIGJ5dGVzLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplX29iamVjdF9zaXplIDo6IFRoZSBzaXplIG9mIGEgc2l6ZSBvYmplY3QgaW4gYnl0ZXMuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNsb3Rfb2JqZWN0X3NpemUgOjogVGhlIHNpemUgb2YgYSBnbHlwaCBvYmplY3QgaW4gYnl0ZXMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaW5pdF9mYWNlICAgICAgICA6OiBUaGUgZm9ybWF0LXNwZWNpZmljIGZhY2UgY29uc3RydWN0b3IuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkb25lX2ZhY2UgICAgICAgIDo6IFRoZSBmb3JtYXQtc3BlY2lmaWMgZmFjZSBkZXN0cnVjdG9yLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluaXRfc2l6ZSAgICAgICAgOjogVGhlIGZvcm1hdC1zcGVjaWZpYyBzaXplIGNvbnN0cnVjdG9yLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZG9uZV9zaXplICAgICAgICA6OiBUaGUgZm9ybWF0LXNwZWNpZmljIHNpemUgZGVzdHJ1Y3Rvci4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbml0X3Nsb3QgICAgICAgIDo6IFRoZSBmb3JtYXQtc3BlY2lmaWMgc2xvdCBjb25zdHJ1Y3Rvci4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRvbmVfc2xvdCAgICAgICAgOjogVGhlIGZvcm1hdC1zcGVjaWZpYyBzbG90IGRlc3RydWN0b3IuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRfZ2x5cGggICAgICAgOjogQSBmdW5jdGlvbiBoYW5kbGUgdG8gbG9hZCBhIGdseXBoIHRvIGEgc2xvdC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgbWFuZGF0b3J5ISAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdldF9rZXJuaW5nICAgICAgOjogQSBmdW5jdGlvbiBoYW5kbGUgdG8gcmV0dXJuIHRoZSB1bnNjYWxlZCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgZm9yIGEgZ2l2ZW4gcGFpciBvZiBnbHlwaHMuICBDYW4gYmUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gMCBpZiB0aGUgZm9ybWF0IGRvZXNuJ3Qgc3VwcG9ydCAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAga2VybmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXR0YWNoX2ZpbGUgICAgICA6OiBUaGlzIGZ1bmN0aW9uIGhhbmRsZSBpcyB1c2VkIHRvIHJlYWQgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBkYXRhIGZvciBhIGZhY2UgZnJvbSBhbm90aGVyICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUvc3RyZWFtLiAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGJlIHVzZWQgdG8gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBhZGQgZGF0YSBmcm9tIEFGTSBvciBQRk0gZmlsZXMgb24gYSBUeXBlIDEgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwgb3IgYSBDSURNYXAgb24gYSBDSUQta2V5ZWQgZmFjZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2V0X2FkdmFuY2VzICAgICA6OiBBIGZ1bmN0aW9uIGhhbmRsZSB1c2VkIHRvIHJldHVybiBhZHZhbmNlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzIG9mIGBjb3VudCcgZ2x5cGhzIChpbiBmb250IHVuaXRzKSwgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IGBmaXJzdCcuICBUaGUgYHZlcnRpY2FsJyBmbGFnIG11c3QgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXQgdG8gZ2V0IHZlcnRpY2FsIGFkdmFuY2UgaGVpZ2h0cy4gIFRoZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgYGFkdmFuY2VzJyBidWZmZXIgaXMgY2FsbGVyLWFsbG9jYXRlZC4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpZGVhIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgYWJsZSB0byAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtIGRldmljZS1pbmRlcGVuZGVudCB0ZXh0IGxheW91dCB3aXRob3V0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZyBhIHNpbmdsZSBnbHlwaCBpbWFnZS4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmVxdWVzdF9zaXplICAgICA6OiBBIGhhbmRsZSB0byBhIGZ1bmN0aW9uIHVzZWQgdG8gcmVxdWVzdCB0aGUgbmV3ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNpemUuICBDYW4gYmUgc2V0IHRvIDAgaWYgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgZG9uZSBpbiB0aGUgYmFzZSBsYXllciBzdWZmaWNlcy4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNlbGVjdF9zaXplICAgICAgOjogQSBoYW5kbGUgdG8gYSBmdW5jdGlvbiB1c2VkIHRvIHNlbGVjdCBhIG5ldyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIHNpemUuICBJdCBpcyB1c2VkIG9ubHkgaWYgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIGlzIHNldC4gIENhbiBiZSBzZXQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgdG8gMCBpZiB0aGUgc2NhbGluZyBkb25lIGluIHRoZSBiYXNlIGxheWVyICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1vc3QgZnVuY3Rpb24gcG9pbnRlcnMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgbG9hZF9nbHlwaCcsIGNhbiBiZSAqLwotICAvKiAgICBzZXQgdG8gMCB0byBpbmRpY2F0ZSBhIGRlZmF1bHQgYmVoYXZpb3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX0RyaXZlcl9DbGFzc1JlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGZvbnQgZHJpdmVyIGNsYXNzLiAgVGhpcyBzdHJ1Y3R1cmUgbW9zdGx5IGNvbnRhaW5zIHBvaW50ZXJzIHRvCisgICAqICAgZHJpdmVyIG1ldGhvZHMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcm9vdCA6OgorICAgKiAgICAgVGhlIHBhcmVudCBtb2R1bGUuCisgICAqCisgICAqICAgZmFjZV9vYmplY3Rfc2l6ZSA6OgorICAgKiAgICAgVGhlIHNpemUgb2YgYSBmYWNlIG9iamVjdCBpbiBieXRlcy4KKyAgICoKKyAgICogICBzaXplX29iamVjdF9zaXplIDo6CisgICAqICAgICBUaGUgc2l6ZSBvZiBhIHNpemUgb2JqZWN0IGluIGJ5dGVzLgorICAgKgorICAgKiAgIHNsb3Rfb2JqZWN0X3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIGEgZ2x5cGggb2JqZWN0IGluIGJ5dGVzLgorICAgKgorICAgKiAgIGluaXRfZmFjZSA6OgorICAgKiAgICAgVGhlIGZvcm1hdC1zcGVjaWZpYyBmYWNlIGNvbnN0cnVjdG9yLgorICAgKgorICAgKiAgIGRvbmVfZmFjZSA6OgorICAgKiAgICAgVGhlIGZvcm1hdC1zcGVjaWZpYyBmYWNlIGRlc3RydWN0b3IuCisgICAqCisgICAqICAgaW5pdF9zaXplIDo6CisgICAqICAgICBUaGUgZm9ybWF0LXNwZWNpZmljIHNpemUgY29uc3RydWN0b3IuCisgICAqCisgICAqICAgZG9uZV9zaXplIDo6CisgICAqICAgICBUaGUgZm9ybWF0LXNwZWNpZmljIHNpemUgZGVzdHJ1Y3Rvci4KKyAgICoKKyAgICogICBpbml0X3Nsb3QgOjoKKyAgICogICAgIFRoZSBmb3JtYXQtc3BlY2lmaWMgc2xvdCBjb25zdHJ1Y3Rvci4KKyAgICoKKyAgICogICBkb25lX3Nsb3QgOjoKKyAgICogICAgIFRoZSBmb3JtYXQtc3BlY2lmaWMgc2xvdCBkZXN0cnVjdG9yLgorICAgKgorICAgKgorICAgKiAgIGxvYWRfZ2x5cGggOjoKKyAgICogICAgIEEgZnVuY3Rpb24gaGFuZGxlIHRvIGxvYWQgYSBnbHlwaCB0byBhIHNsb3QuCisgICAqICAgICBUaGlzIGZpZWxkIGlzIG1hbmRhdG9yeSEKKyAgICoKKyAgICogICBnZXRfa2VybmluZyA6OgorICAgKiAgICAgQSBmdW5jdGlvbiBoYW5kbGUgdG8gcmV0dXJuIHRoZSB1bnNjYWxlZAorICAgKiAgICAga2VybmluZyBmb3IgYSBnaXZlbiBwYWlyIG9mIGdseXBocy4gIENhbiBiZQorICAgKiAgICAgc2V0IHRvIDAgaWYgdGhlIGZvcm1hdCBkb2Vzbid0IHN1cHBvcnQKKyAgICogICAgIGtlcm5pbmcuCisgICAqCisgICAqICAgYXR0YWNoX2ZpbGUgOjoKKyAgICogICAgIFRoaXMgZnVuY3Rpb24gaGFuZGxlIGlzIHVzZWQgdG8gcmVhZAorICAgKiAgICAgYWRkaXRpb25hbCBkYXRhIGZvciBhIGZhY2UgZnJvbSBhbm90aGVyCisgICAqICAgICBmaWxlL3N0cmVhbS4gIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRvCisgICAqICAgICBhZGQgZGF0YSBmcm9tIEFGTSBvciBQRk0gZmlsZXMgb24gYSBUeXBlIDEKKyAgICogICAgIGZhY2UsIG9yIGEgQ0lETWFwIG9uIGEgQ0lELWtleWVkIGZhY2UuCisgICAqCisgICAqICAgZ2V0X2FkdmFuY2VzIDo6CisgICAqICAgICBBIGZ1bmN0aW9uIGhhbmRsZSB1c2VkIHRvIHJldHVybiBhZHZhbmNlCisgICAqICAgICB3aWR0aHMgb2YgYGNvdW50JyBnbHlwaHMgKGluIGZvbnQgdW5pdHMpLAorICAgKiAgICAgc3RhcnRpbmcgYXQgYGZpcnN0Jy4gIFRoZSBgdmVydGljYWwnIGZsYWcgbXVzdAorICAgKiAgICAgYmUgc2V0IHRvIGdldCB2ZXJ0aWNhbCBhZHZhbmNlIGhlaWdodHMuICBUaGUKKyAgICogICAgIGBhZHZhbmNlcycgYnVmZmVyIGlzIGNhbGxlci1hbGxvY2F0ZWQuCisgICAqICAgICBUaGUgaWRlYSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGFibGUgdG8KKyAgICogICAgIHBlcmZvcm0gZGV2aWNlLWluZGVwZW5kZW50IHRleHQgbGF5b3V0IHdpdGhvdXQKKyAgICogICAgIGxvYWRpbmcgYSBzaW5nbGUgZ2x5cGggaW1hZ2UuCisgICAqCisgICAqICAgcmVxdWVzdF9zaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIGZ1bmN0aW9uIHVzZWQgdG8gcmVxdWVzdCB0aGUgbmV3CisgICAqICAgICBjaGFyYWN0ZXIgc2l6ZS4gIENhbiBiZSBzZXQgdG8gMCBpZiB0aGUKKyAgICogICAgIHNjYWxpbmcgZG9uZSBpbiB0aGUgYmFzZSBsYXllciBzdWZmaWNlcy4KKyAgICoKKyAgICogICBzZWxlY3Rfc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBmdW5jdGlvbiB1c2VkIHRvIHNlbGVjdCBhIG5ldworICAgKiAgICAgZml4ZWQgc2l6ZS4gIEl0IGlzIHVzZWQgb25seSBpZgorICAgKiAgICAgQEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyBpcyBzZXQuICBDYW4gYmUgc2V0CisgICAqICAgICB0byAwIGlmIHRoZSBzY2FsaW5nIGRvbmUgaW4gdGhlIGJhc2UgbGF5ZXIKKyAgICogICAgIHN1ZmZpY2VzLgorICAgKiBAbm90ZToKKyAgICogICBNb3N0IGZ1bmN0aW9uIHBvaW50ZXJzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYGxvYWRfZ2x5cGgnLCBjYW4gYmUKKyAgICogICBzZXQgdG8gMCB0byBpbmRpY2F0ZSBhIGRlZmF1bHQgYmVoYXZpb3VyLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0RyaXZlcl9DbGFzc1JlY18KICAgewogICAgIEZUX01vZHVsZV9DbGFzcyAgICAgICAgICByb290OwpAQCAtMTg0LDQ1ICsyMDAsMjggQEAKICAgfSBGVF9Ecml2ZXJfQ2xhc3NSZWMsICpGVF9Ecml2ZXJfQ2xhc3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUNMQVJFX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2VkIHRvIGNyZWF0ZSBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgYW4gRlRfRHJpdmVyX0NsYXNzUmVjICAgICAgKi8KLSAgLyogICAgc3RydWN0IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfREVGSU5FX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX0RyaXZlcl9DbGFzc1JlYyBzdHJ1Y3QuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYSBgY3JlYXRlJyBmdW5jdGlvbiBoYXMgdG8gYmUgKi8KLSAgLyogICAgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzIHJldHVybmVkLiAgICovCi0gIC8qICAgIEFuZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYSBgZGVzdHJveScgZnVuY3Rpb24gbmVlZHMgdG8gYmUgICAqLwotICAvKiAgICBjYWxsZWQgdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBmdGluaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zIGEgICAqLwotICAvKiAgICBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICAgKi8KLSAgLyogICAgZGVzY3JpYmVkIGluIGBmdG1vZHVsZS5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RpY2UgdGhhdCB0aGUgY3JlYXRlZCBgY3JlYXRlJyBhbmQgYGRlc3Ryb3knIGZ1bmN0aW9ucyBjYWxsICAgICAgKi8KLSAgLyogICAgYHBpY19pbml0JyBhbmQgYHBpY19mcmVlJyB0byBhbGxvdyB5b3UgdG8gbWFudWFsbHkgYWxsb2NhdGUgYW5kICAgICovCi0gIC8qICAgIGluaXRpYWxpemUgYW55IGFkZGl0aW9uYWwgZ2xvYmFsIGRhdGEsIGxpa2UgYSBtb2R1bGUgc3BlY2lmaWMgICAgICAqLwotICAvKiAgICBpbnRlcmZhY2UsIGFuZCBwdXQgdGhlbSBpbiB0aGUgZ2xvYmFsIHBpYyBjb250YWluZXIgZGVmaW5lZCBpbiAgICAgKi8KLSAgLyogICAgYGZ0cGljLmgnLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlbSBqdXN0IGltcGxlbWVudCB0aGUgZnVuY3Rpb25zIGFzICovCi0gIC8qICAgIGVtcHR5IHRvIHJlc29sdmUgdGhlIGxpbmsgZXJyb3IuICBBbHNvIHRoZSBgcGljX2luaXQnIGFuZCAgICAgICAgICAqLwotICAvKiAgICBgcGljX2ZyZWUnIGZ1bmN0aW9ucyBzaG91bGQgYmUgZGVjbGFyZWQgaW4gYHBpYy5oJywgdG8gYmUgcmVmZXJyZWQgKi8KLSAgLyogICAgYnkgZHJpdmVyIGRlZmluaXRpb24gY2FsbGluZyBgRlRfREVGSU5FX0RSSVZFUicgaW4gZm9sbG93aW5nLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIG5vdCBkZWZpbmVkIHRoZSBzdHJ1Y3Qgd2lsbCBiZSAgICAgICAgKi8KLSAgLyogICAgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZSB3aGVyZSB0aGUgbWFjcm8gaXMgICAgICovCi0gIC8qICAgIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0RFQ0xBUkVfRFJJVkVSCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBVc2VkIHRvIGNyZWF0ZSBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgYW4gRlRfRHJpdmVyX0NsYXNzUmVjCisgICAqICAgc3RydWN0IGluc3RhbmNlLgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfREVGSU5FX0RSSVZFUgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX0RyaXZlcl9DbGFzc1JlYyBzdHJ1Y3QuCisgICAqCisgICAqICAgYGZ0aW5pdC5jJyAoZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMpIGFscmVhZHkgY29udGFpbnMgYQorICAgKiAgIG1lY2hhbmlzbSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbW9kdWxlcworICAgKiAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuCisgICAqCisgICAqICAgVGhlIHN0cnVjdCB3aWxsIGJlIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUKKyAgICogICB3aGVyZSB0aGUgbWFjcm8gaXMgdXNlZCkuCisgICAqLwogI2RlZmluZSBGVF9ERUNMQVJFX0RSSVZFUiggY2xhc3NfICkgIFwKICAgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICAgICAgICAgICAgICBcCiAgIGNvbnN0IEZUX0RyaXZlcl9DbGFzc1JlYyAgY2xhc3NfOwpAQCAtMjg5LDEwOCArMjg4LDYgQEAKICAgICBzZWxlY3Rfc2l6ZV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUNMQVJFX0RSSVZFUiggY2xhc3NfICkgIEZUX0RFQ0xBUkVfTU9EVUxFKCBjbGFzc18gKQotCi0jZGVmaW5lIEZUX0RFRklORV9EUklWRVIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZsYWdzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBuYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmVxdWlyZXNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZG9uZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZhY2Vfb2JqZWN0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc2l6ZV9vYmplY3Rfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzbG90X29iamVjdF9zaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGluaXRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZG9uZV9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpbml0X3NpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGRvbmVfc2l6ZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW5pdF9zbG90XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkb25lX3Nsb3RfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfZ2x5cGhfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X2tlcm5pbmdfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBhdHRhY2hfZmlsZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdldF9hZHZhbmNlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmVxdWVzdF9zaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzZWxlY3Rfc2l6ZV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiApICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9Ecml2ZXJfQ2xhc3MgIGRjbGF6eiA9IChGVF9Ecml2ZXJfQ2xhc3MpY2xheno7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGFzc18gIyMgX3BpY19mcmVlKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggZGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBkY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqKiAgb3V0cHV0X2NsYXNzICkgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX0RyaXZlcl9DbGFzcyAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfRXJyb3IgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKSApICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlcnJvciA9IGNsYXNzXyAjIyBfcGljX2luaXQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggZXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX0RFRklORV9ST09UX01PRFVMRSggZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9pbnRlcmZhY2VfICkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmZhY2Vfb2JqZWN0X3NpemUgPSBmYWNlX29iamVjdF9zaXplXzsgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+c2l6ZV9vYmplY3Rfc2l6ZSA9IHNpemVfb2JqZWN0X3NpemVfOyAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5zbG90X29iamVjdF9zaXplID0gc2xvdF9vYmplY3Rfc2l6ZV87ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+aW5pdF9mYWNlICAgICAgICA9IGluaXRfZmFjZV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5kb25lX2ZhY2UgICAgICAgID0gZG9uZV9mYWNlXzsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+aW5pdF9zaXplICAgICAgICA9IGluaXRfc2l6ZV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5kb25lX3NpemUgICAgICAgID0gZG9uZV9zaXplXzsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+aW5pdF9zbG90ICAgICAgICA9IGluaXRfc2xvdF87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5kb25lX3Nsb3QgICAgICAgID0gZG9uZV9zbG90XzsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9nbHlwaCAgICAgICA9IGxvYWRfZ2x5cGhfOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmdldF9rZXJuaW5nICAgICAgPSBnZXRfa2VybmluZ187ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+YXR0YWNoX2ZpbGUgICAgICA9IGF0dGFjaF9maWxlXzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfYWR2YW5jZXMgICAgID0gZ2V0X2FkdmFuY2VzXzsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cmVxdWVzdF9zaXplICAgICA9IHJlcXVlc3Rfc2l6ZV87ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5zZWxlY3Rfc2l6ZSAgICAgID0gc2VsZWN0X3NpemVfOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gKEZUX01vZHVsZV9DbGFzcyopY2xheno7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiBGVF9FTkRfSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaAppbmRleCBhMDAyZmRiLi5jNzMxYjJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGdsb2Fkci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGdsb2Fkci5oCisgKgorICogICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUR0xPQURSX0hfCkBAIC0yNywxNSArMjcsMTUgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2x5cGhMb2FkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGdseXBoIGxvYWRlciBpcyBhbiBpbnRlcm5hbCBvYmplY3QgdXNlZCB0byBsb2FkIHNldmVyYWwgZ2x5cGhzICovCi0gIC8qICAgIHRvZ2V0aGVyIChmb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgY29tcG9zaXRlcykuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfR2x5cGhMb2FkZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBnbHlwaCBsb2FkZXIgaXMgYW4gaW50ZXJuYWwgb2JqZWN0IHVzZWQgdG8gbG9hZCBzZXZlcmFsIGdseXBocworICAgKiAgIHRvZ2V0aGVyIChmb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgY29tcG9zaXRlcykuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfU3ViR2x5cGhSZWNfCiAgIHsKICAgICBGVF9JbnQgICAgIGluZGV4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmgKaW5kZXggZjIyZjlkNS4uMjQ5MTg4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGhhc2guaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oCkBAIC0xLDEwICsxLDEwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGhhc2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGFzaGluZyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGhhc2guaAorICoKKyAqICAgSGFzaGluZyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqLwogCiAvKgogICogQ29weXJpZ2h0IDIwMDAgQ29tcHV0aW5nIFJlc2VhcmNoIExhYnMsIE5ldyBNZXhpY28gU3RhdGUgVW5pdmVyc2l0eQpAQCAtMzAsMTMgKzMwLDEzIEBACiAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBjb2RlIGZyb20gYmRmLmMsdiAxLjIyIDIwMDAvMDMvMTYgMjA6MDg6NTAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgdGFrZW4gZnJvbSBNYXJrIExlaXNoZXIncyB4bWJkZmVkIHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBiZGYuYyx2IDEuMjIgMjAwMC8wMy8xNiAyMDowODo1MAorICAgKgorICAgKiB0YWtlbiBmcm9tIE1hcmsgTGVpc2hlcidzIHhtYmRmZWQgcGFja2FnZQorICAgKgorICAgKi8KIAogCiAjaWZuZGVmIEZUSEFTSF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCmluZGV4IDA1NGVhZWMuLmYxNWM3N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bWVtb3J5LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgbWVtb3J5IG1hbmFnZW1lbnQgbWFjcm9zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bWVtb3J5LmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBtZW1vcnkgbWFuYWdlbWVudCBtYWNyb3MgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRNRU1PUllfSF8KQEAgLTI4LDE2ICsyOCwxNiBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TRVRfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gc2V0IGFuIGltcGxpY2l0IGBlcnJvcicgdmFyaWFibGUgdG8gYSBnaXZlbiAgKi8KLSAgLyogICAgZXhwcmVzc2lvbidzIHZhbHVlICh1c3VhbGx5IGEgZnVuY3Rpb24gY2FsbCksIGFuZCBjb252ZXJ0IGl0IHRvIGEgICovCi0gIC8qICAgIGJvb2xlYW4gd2hpY2ggaXMgc2V0IHdoZW5ldmVyIHRoZSB2YWx1ZSBpcyAhPSAwLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9TRVRfRVJST1IKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBzZXQgYW4gaW1wbGljaXQgYGVycm9yJyB2YXJpYWJsZSB0byBhIGdpdmVuCisgICAqICAgZXhwcmVzc2lvbidzIHZhbHVlICh1c3VhbGx5IGEgZnVuY3Rpb24gY2FsbCksIGFuZCBjb252ZXJ0IGl0IHRvIGEKKyAgICogICBib29sZWFuIHdoaWNoIGlzIHNldCB3aGVuZXZlciB0aGUgdmFsdWUgaXMgIT0gMC4KKyAgICovCiAjdW5kZWYgIEZUX1NFVF9FUlJPUgogI2RlZmluZSBGVF9TRVRfRVJST1IoIGV4cHJlc3Npb24gKSBcCiAgICAgICAgICAgKCAoIGVycm9yID0gKGV4cHJlc3Npb24pICkgIT0gMCApCkBAIC01OCw5ICs1OCw5IEBACiAKIAogICAvKgotICAgKiAgQysrIHJlZnVzZXMgdG8gaGFuZGxlIHN0YXRlbWVudHMgbGlrZSBwID0gKHZvaWQqKWFueXRoaW5nLCB3aXRoIGBwJyBhCi0gICAqICB0eXBlZCBwb2ludGVyLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGB0eXBlb2YnIG9wZXJhdG9yIGluIHN0YW5kYXJkCi0gICAqICBDKyssIHdlIGhhdmUgdG8gdXNlIGEgdGVtcGxhdGUgdG8gZW11bGF0ZSBpdC4KKyAgICogQysrIHJlZnVzZXMgdG8gaGFuZGxlIHN0YXRlbWVudHMgbGlrZSBwID0gKHZvaWQqKWFueXRoaW5nLCB3aXRoIGBwJyBhCisgICAqIHR5cGVkIHBvaW50ZXIuICBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgYHR5cGVvZicgb3BlcmF0b3IgaW4gc3RhbmRhcmQKKyAgICogQysrLCB3ZSBoYXZlIHRvIHVzZSBhIHRlbXBsYXRlIHRvIGVtdWxhdGUgaXQuCiAgICAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTEwNyw4ICsxMDcsOCBAQAogCiAKICAgLyoKLSAgICogIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyLCBhbmQgdGhlIGVycm9yIGNvZGUKLSAgICogIGlzIHdyaXR0ZW4gdG8gdGhyb3VnaCB0aGUgYHBfZXJyb3InIHBhcmFtZXRlci4KKyAgICogVGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zIHJldHVybiBhIHBvaW50ZXIsIGFuZCB0aGUgZXJyb3IgY29kZQorICAgKiBpcyB3cml0dGVuIHRvIHRocm91Z2ggdGhlIGBwX2Vycm9yJyBwYXJhbWV0ZXIuCiAgICAqLwogCiAgIC8qIFRoZSBgcScgdmFyaWFudHMgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyAoYHEnIGZvciBgcXVpY2snKSBkb24ndCBmaWxsICovCkBAIC0yNTMsMjAgKzI1MywyMCBAQAogCiAKICAgLyoKLSAgICogIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWRkcmVzc2FibGUgZWxlbWVudHMgaW4gYW4gYXJyYXkuCi0gICAqICBXZSBsaW1pdCBvdXJzZWx2ZXMgdG8gSU5UX01BWCwgcmF0aGVyIHRoYW4gVUlOVF9NQVgsIHRvIGF2b2lkCi0gICAqICBhbnkgcHJvYmxlbXMuCisgICAqIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWRkcmVzc2FibGUgZWxlbWVudHMgaW4gYW4gYXJyYXkuCisgICAqIFdlIGxpbWl0IG91cnNlbHZlcyB0byBJTlRfTUFYLCByYXRoZXIgdGhhbiBVSU5UX01BWCwgdG8gYXZvaWQKKyAgICogYW55IHByb2JsZW1zLgogICAgKi8KICNkZWZpbmUgRlRfQVJSQVlfTUFYKCBwdHIgKSAgICAgICAgICAgKCBGVF9JTlRfTUFYIC8gc2l6ZW9mICggKihwdHIpICkgKQogCiAjZGVmaW5lIEZUX0FSUkFZX0NIRUNLKCBwdHIsIGNvdW50ICkgICggKGNvdW50KSA8PSBGVF9BUlJBWV9NQVgoIHB0ciApICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWFjcm9zIGV4cGVjdCB0aGF0IHRoZWlyIHBvaW50ZXIgYXJndW1lbnQgaXMgICovCi0gIC8qIF90eXBlZF8gaW4gb3JkZXIgdG8gYXV0b21hdGljYWxseSBjb21wdXRlIGFycmF5IGVsZW1lbnQgc2l6ZXMuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG1hY3JvcyBleHBlY3QgdGhhdCB0aGVpciBwb2ludGVyIGFyZ3VtZW50IGlzCisgICAqIF90eXBlZF8gaW4gb3JkZXIgdG8gYXV0b21hdGljYWxseSBjb21wdXRlIGFycmF5IGVsZW1lbnQgc2l6ZXMuCisgICAqLwogCiAjZGVmaW5lIEZUX01FTV9ORVdfQVJSQVkoIHB0ciwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKaW5kZXggMzdjNmJhZi4uODhjZWQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oCkBAIC0xLDI2ICsxLDI2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdG9ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG9ianMuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgYmFzZSBjbGFzc2VzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgYWxsIGludGVybmFsIEZyZWVUeXBlIGNsYXNzZXMuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgYWxsIGludGVybmFsIEZyZWVUeXBlIGNsYXNzZXMuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgRlRPQkpTX0hfCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQVVUT0hJTlRfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCkBAIC00NiwxMCArNDUsMTAgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTb21lIGdlbmVyaWMgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTb21lIGdlbmVyaWMgZGVmaW5pdGlvbnMuCisgICAqLwogI2lmbmRlZiBUUlVFCiAjZGVmaW5lIFRSVUUgIDEKICNlbmRpZgpAQCAtNjMsMjAgKzYyLDIwIEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1pbiBhbmQgbWF4IGZ1bmN0aW9ucyBtaXNzaW5nIGluIEMuICBBcyB1c3VhbCwgYmUgY2FyZWZ1bCBub3QgdG8gICovCi0gIC8qIHdyaXRlIHRoaW5ncyBsaWtlIEZUX01JTiggYSsrLCBiKysgKSB0byBhdm9pZCBzaWRlIGVmZmVjdHMuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtaW4gYW5kIG1heCBmdW5jdGlvbnMgbWlzc2luZyBpbiBDLiAgQXMgdXN1YWwsIGJlIGNhcmVmdWwgbm90IHRvCisgICAqIHdyaXRlIHRoaW5ncyBsaWtlIEZUX01JTiggYSsrLCBiKysgKSB0byBhdm9pZCBzaWRlIGVmZmVjdHMuCisgICAqLwogI2RlZmluZSBGVF9NSU4oIGEsIGIgKSAgKCAoYSkgPCAoYikgPyAoYSkgOiAoYikgKQogI2RlZmluZSBGVF9NQVgoIGEsIGIgKSAgKCAoYSkgPiAoYikgPyAoYSkgOiAoYikgKQogCiAjZGVmaW5lIEZUX0FCUyggYSApICAgICAoIChhKSA8IDAgPyAtKGEpIDogKGEpICkKIAogICAvKgotICAgKiAgQXBwcm94aW1hdGUgc3FydCh4KngreSp5KSB1c2luZyB0aGUgYGFscGhhIG1heCBwbHVzIGJldGEgbWluJwotICAgKiAgYWxnb3JpdGhtLiAgV2UgdXNlIGFscGhhID0gMSwgYmV0YSA9IDMvOCwgZ2l2aW5nIHVzIHJlc3VsdHMgd2l0aCBhCi0gICAqICBsYXJnZXN0IGVycm9yIGxlc3MgdGhhbiA3JSBjb21wYXJlZCB0byB0aGUgZXhhY3QgdmFsdWUuCisgICAqIEFwcHJveGltYXRlIHNxcnQoeCp4K3kqeSkgdXNpbmcgdGhlIGBhbHBoYSBtYXggcGx1cyBiZXRhIG1pbicKKyAgICogYWxnb3JpdGhtLiAgV2UgdXNlIGFscGhhID0gMSwgYmV0YSA9IDMvOCwgZ2l2aW5nIHVzIHJlc3VsdHMgd2l0aCBhCisgICAqIGxhcmdlc3QgZXJyb3IgbGVzcyB0aGFuIDclIGNvbXBhcmVkIHRvIHRoZSBleGFjdCB2YWx1ZS4KICAgICovCiAjZGVmaW5lIEZUX0hZUE9UKCB4LCB5ICkgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIHggPSBGVF9BQlMoIHggKSwgICAgICAgICAgICAgXApAQCAtMTExLDkgKzExMCw5IEBACiAKIAogICAvKgotICAgKiAgY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyAtLSBzaW5jZSB0aGVzZSBhcmUgdXNlZCB0byBwYXJzZQotICAgKiAgZm9udCBmaWxlcywgd2UgbXVzdCBub3QgdXNlIHRob3NlIGluIDxjdHlwZXMuaD4gd2hpY2ggYXJlCi0gICAqICBsb2NhbGUtZGVwZW5kZW50CisgICAqIGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMgLS0gc2luY2UgdGhlc2UgYXJlIHVzZWQgdG8gcGFyc2UKKyAgICogZm9udCBmaWxlcywgd2UgbXVzdCBub3QgdXNlIHRob3NlIGluIDxjdHlwZXMuaD4gd2hpY2ggYXJlCisgICAqIGxvY2FsZS1kZXBlbmRlbnQKICAgICovCiAjZGVmaW5lICBmdF9pc2RpZ2l0KCB4ICkgICAoICggKHVuc2lnbmVkKSh4KSAtICcwJyApIDwgMTBVICkKIApAQCAtMTU1LDcgKzE1NCw3IEBACiAKICAgfSBGVF9DTWFwUmVjOwogCi0gIC8qIHR5cGVjYXNlIGFueSBwb2ludGVyIHRvIGEgY2hhcm1hcCBoYW5kbGUgKi8KKyAgLyogdHlwZWNhc3QgYW55IHBvaW50ZXIgdG8gYSBjaGFybWFwIGhhbmRsZSAqLwogI2RlZmluZSBGVF9DTUFQKCB4ICkgICggKEZUX0NNYXApKCB4ICkgKQogCiAgIC8qIG9idmlvdXMgbWFjcm9zICovCkBAIC0yMjgsOCArMjI3LDYgQEAKICAgfSBGVF9DTWFwX0NsYXNzUmVjOwogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQogI2RlZmluZSBGVF9ERUNMQVJFX0NNQVBfQ0xBU1MoIGNsYXNzXyApICAgICAgICAgICAgICBcCiAgIEZUX0NBTExCQUNLX1RBQkxFIGNvbnN0ICBGVF9DTWFwX0NsYXNzUmVjIGNsYXNzXzsKIApAQCAtMjYwLDQ1ICsyNTcsNiBAQAogICAgIHZhcmlhbnRjaGFyX2xpc3RfICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFQ0xBUkVfQ01BUF9DTEFTUyggY2xhc3NfICkgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQ01hcF9DbGFzc1JlYyogIGNsYXp6ICk7Ci0KLSNkZWZpbmUgRlRfREVGSU5FX0NNQVBfQ0xBU1MoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaGFyX2luZGV4XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaGFyX25leHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaGFyX3Zhcl9pbmRleF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaGFyX3Zhcl9kZWZhdWx0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB2YXJpYW50X2xpc3RfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjaGFydmFyaWFudF9saXN0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB2YXJpYW50Y2hhcl9saXN0XyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9DTWFwX0NsYXNzUmVjKiAgY2xhenogKSAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+c2l6ZSAgICAgICAgICAgICA9IHNpemVfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+aW5pdCAgICAgICAgICAgICA9IGluaXRfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+ZG9uZSAgICAgICAgICAgICA9IGRvbmVfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2hhcl9pbmRleCAgICAgICA9IGNoYXJfaW5kZXhfOyAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2hhcl9uZXh0ICAgICAgICA9IGNoYXJfbmV4dF87ICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2hhcl92YXJfaW5kZXggICA9IGNoYXJfdmFyX2luZGV4XzsgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2hhcl92YXJfZGVmYXVsdCA9IGNoYXJfdmFyX2RlZmF1bHRfOyAgICAgICAgIFwKLSAgICBjbGF6ei0+dmFyaWFudF9saXN0ICAgICA9IHZhcmlhbnRfbGlzdF87ICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2hhcnZhcmlhbnRfbGlzdCA9IGNoYXJ2YXJpYW50X2xpc3RfOyAgICAgICAgIFwKLSAgICBjbGF6ei0+dmFyaWFudGNoYXJfbGlzdCA9IHZhcmlhbnRjaGFyX2xpc3RfOyAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogCiAgIC8qIGNyZWF0ZSBhIG5ldyBjaGFybWFwIGFuZCBhZGQgaXQgdG8gY2hhcm1hcC0+ZmFjZSAqLwogICBGVF9CQVNFKCBGVF9FcnJvciApCkBAIC0zMTIsMTEgKzI3MCwxMSBAQAogICBGVF9DTWFwX0RvbmUoIEZUX0NNYXAgIGNtYXAgKTsKIAogCi0gIC8qIGFkZHMgTENEIHBhZGRpbmcgdG8gTWluIGFuZCBNYXggYm91bmRhcmllcyAqLworICAvKiBhZGQgTENEIHBhZGRpbmcgdG8gQ0JveCAqLwogICBGVF9CQVNFKCB2b2lkICkKLSAgZnRfbGNkX3BhZGRpbmcoIEZUX1BvcyogICAgICAgTWluLAotICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICBNYXgsCi0gICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKyAgZnRfbGNkX3BhZGRpbmcoIEZUX0JCb3gqICAgICAgICBjYm94LAorICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgbW9kZSApOwogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKIApAQCAtMzMzLDc0ICsyOTEsNzQgQEAKIAogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRmFjZV9JbnRlcm5hbFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGludGVybmFsIGZpZWxkcyBvZiBlYWNoIEZUX0ZhY2UgICAgICAgICovCi0gIC8qICAgIG9iamVjdC4gIFRoZXNlIGZpZWxkcyBtYXkgY2hhbmdlIGJldHdlZW4gZGlmZmVyZW50IHJlbGVhc2VzIG9mICAgICAqLwotICAvKiAgICBGcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfcG9pbnRzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgdG8gc3RvcmUgdGhlIHZlY3RvcmlhbCBvdXRsaW5lICovCi0gIC8qICAgICAgb2YgYW55IGdseXBoIGluIHRoaXMgZmFjZS4gIElmIHRoaXMgdmFsdWUgY2Fubm90IGJlIGtub3duIGluICAgICAqLwotICAvKiAgICAgIGFkdmFuY2UsIG9yIGlmIHRoZSBmYWNlIGlzbid0IHNjYWxhYmxlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gMC4gKi8KLSAgLyogICAgICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfY29udG91cnMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgdXNlZCB0byBzdG9yZSB0aGUgdmVjdG9yaWFsICAgICAgICovCi0gIC8qICAgICAgb3V0bGluZSBvZiBhbnkgZ2x5cGggaW4gdGhpcyBmYWNlLiAgSWYgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgICAgICAqLwotICAvKiAgICAgIGtub3duIGluIGFkdmFuY2UsIG9yIGlmIHRoZSBmYWNlIGlzbid0IHNjYWxhYmxlLCB0aGlzIHNob3VsZCBiZSAgKi8KLSAgLyogICAgICBzZXQgdG8gMC4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0cmFuc2Zvcm1fbWF0cml4IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBIDJ4MiBtYXRyaXggb2YgMTYuMTYgY29lZmZpY2llbnRzIHVzZWQgdG8gdHJhbnNmb3JtIGdseXBoICAgICAgICovCi0gIC8qICAgICAgb3V0bGluZXMgYWZ0ZXIgdGhleSBhcmUgbG9hZGVkIGZyb20gdGhlIGZvbnQuICBPbmx5IHVzZWQgYnkgdGhlICAqLwotICAvKiAgICAgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRyYW5zZm9ybV9kZWx0YSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgdHJhbnNsYXRpb24gdmVjdG9yIHVzZWQgdG8gdHJhbnNmb3JtIGdseXBoIG91dGxpbmVzIGFmdGVyIHRoZXkgKi8KLSAgLyogICAgICBhcmUgbG9hZGVkIGZyb20gdGhlIGZvbnQuICBPbmx5IHVzZWQgYnkgdGhlIGNvbnZlbmllbmNlICAgICAgICAgICovCi0gIC8qICAgICAgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHJhbnNmb3JtX2ZsYWdzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgU29tZSBmbGFncyB1c2VkIHRvIGNsYXNzaWZ5IHRoZSB0cmFuc2Zvcm0uICBPbmx5IHVzZWQgYnkgdGhlICAgICAqLwotICAvKiAgICAgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNlcnZpY2VzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgY2FjaGUgZm9yIGZyZXF1ZW50bHkgdXNlZCBzZXJ2aWNlcy4gIEl0IHNob3VsZCBiZSBvbmx5ICAgICAgICAgKi8KLSAgLyogICAgICBhY2Nlc3NlZCB3aXRoIHRoZSBtYWNybyBgRlRfRkFDRV9MT09LVVBfU0VSVklDRScuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbmNyZW1lbnRhbF9pbnRlcmZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBJZiBub24tbnVsbCwgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIGdseXBoIGRhdGEgYW5kIG1ldHJpY3MgICovCi0gIC8qICAgICAgYXJlIGxvYWRlZCBpbmNyZW1lbnRhbGx5IGZvciBmYWNlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGFsbCBvZiAgICAqLwotICAvKiAgICAgIHRoaXMgZGF0YSB3aGVuIGZpcnN0IG9wZW5lZC4gIFRoaXMgZmllbGQgZXhpc3RzIG9ubHkgaWYgICAgICAgICAgKi8KLSAgLyogICAgICBARlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCBpcyBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBub19zdGVtX2RhcmtlbmluZyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBPdmVycmlkZXMgdGhlIG1vZHVsZS1sZXZlbCBkZWZhdWx0LCBzZWUgQHN0ZW0tZGFya2VuaW5nW2NmZl0sICAgICovCi0gIC8qICAgICAgZm9yIGV4YW1wbGUuICBGQUxTRSBhbmQgVFJVRSB0b2dnbGUgc3RlbSBkYXJrZW5pbmcgb24gYW5kIG9mZiwgICAqLwotICAvKiAgICAgIHJlc3BlY3RpdmVseSwgdmFsdWV+LTEgbWVhbnMgdG8gdXNlIHRoZSBtb2R1bGUvZHJpdmVyIGRlZmF1bHQuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJhbmRvbV9zZWVkIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIElmIHBvc2l0aXZlLCBvdmVycmlkZSB0aGUgc2VlZCB2YWx1ZSBmb3IgdGhlIENGRiBgcmFuZG9tJyAgICAgICAgKi8KLSAgLyogICAgICBvcGVyYXRvci4gIFZhbHVlfjAgbWVhbnMgdG8gdXNlIHRoZSBmb250J3MgdmFsdWUuICBWYWx1ZX4tMSAgICAgICovCi0gIC8qICAgICAgbWVhbnMgdG8gdXNlIHRoZSBDRkYgZHJpdmVyJ3MgZGVmYXVsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGNkX3dlaWdodHMgICAgICA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxjZF9maWx0ZXJfZnVuYyAgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIElmIHN1YnBpeGVsIHJlbmRlcmluZyBpcyBhY3RpdmF0ZWQsIHRoZSBMQ0QgZmlsdGVyaW5nIHdlaWdodHMgICAgKi8KLSAgLyogICAgICBhbmQgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByZWZjb3VudCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiBARlRfRmFjZSBzdHJ1Y3R1cmUgaXMgICovCi0gIC8qICAgICAgY3JlYXRlZC4gIEBGVF9SZWZlcmVuY2VfRmFjZSBpbmNyZW1lbnRzIHRoaXMgY291bnRlciwgYW5kICAgICAgICAqLwotICAvKiAgICAgIEBGVF9Eb25lX0ZhY2Ugb25seSBkZXN0cm95cyBhIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXN+MSwgICAgICAgICAgKi8KLSAgLyogICAgICBvdGhlcndpc2UgaXQgc2ltcGx5IGRlY3JlbWVudHMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9GYWNlX0ludGVybmFsUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmllbGRzIG9mIGVhY2ggRlRfRmFjZQorICAgKiAgIG9iamVjdC4gIFRoZXNlIGZpZWxkcyBtYXkgY2hhbmdlIGJldHdlZW4gZGlmZmVyZW50IHJlbGVhc2VzIG9mCisgICAqICAgRnJlZVR5cGUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbWF4X3BvaW50cyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB1c2VkIHRvIHN0b3JlIHRoZSB2ZWN0b3JpYWwgb3V0bGluZQorICAgKiAgICAgb2YgYW55IGdseXBoIGluIHRoaXMgZmFjZS4gIElmIHRoaXMgdmFsdWUgY2Fubm90IGJlIGtub3duIGluCisgICAqICAgICBhZHZhbmNlLCBvciBpZiB0aGUgZmFjZSBpc24ndCBzY2FsYWJsZSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIDAuCisgICAqICAgICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLgorICAgKgorICAgKiAgIG1heF9jb250b3VycyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIHVzZWQgdG8gc3RvcmUgdGhlIHZlY3RvcmlhbAorICAgKiAgICAgb3V0bGluZSBvZiBhbnkgZ2x5cGggaW4gdGhpcyBmYWNlLiAgSWYgdGhpcyB2YWx1ZSBjYW5ub3QgYmUKKyAgICogICAgIGtub3duIGluIGFkdmFuY2UsIG9yIGlmIHRoZSBmYWNlIGlzbid0IHNjYWxhYmxlLCB0aGlzIHNob3VsZCBiZQorICAgKiAgICAgc2V0IHRvIDAuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLgorICAgKgorICAgKiAgIHRyYW5zZm9ybV9tYXRyaXggOjoKKyAgICogICAgIEEgMngyIG1hdHJpeCBvZiAxNi4xNiBjb2VmZmljaWVudHMgdXNlZCB0byB0cmFuc2Zvcm0gZ2x5cGgKKyAgICogICAgIG91dGxpbmVzIGFmdGVyIHRoZXkgYXJlIGxvYWRlZCBmcm9tIHRoZSBmb250LiAgT25seSB1c2VkIGJ5IHRoZQorICAgKiAgICAgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgKgorICAgKiAgIHRyYW5zZm9ybV9kZWx0YSA6OgorICAgKiAgICAgQSB0cmFuc2xhdGlvbiB2ZWN0b3IgdXNlZCB0byB0cmFuc2Zvcm0gZ2x5cGggb3V0bGluZXMgYWZ0ZXIgdGhleQorICAgKiAgICAgYXJlIGxvYWRlZCBmcm9tIHRoZSBmb250LiAgT25seSB1c2VkIGJ5IHRoZSBjb252ZW5pZW5jZQorICAgKiAgICAgZnVuY3Rpb25zLgorICAgKgorICAgKiAgIHRyYW5zZm9ybV9mbGFncyA6OgorICAgKiAgICAgU29tZSBmbGFncyB1c2VkIHRvIGNsYXNzaWZ5IHRoZSB0cmFuc2Zvcm0uICBPbmx5IHVzZWQgYnkgdGhlCisgICAqICAgICBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisgICAqCisgICAqICAgc2VydmljZXMgOjoKKyAgICogICAgIEEgY2FjaGUgZm9yIGZyZXF1ZW50bHkgdXNlZCBzZXJ2aWNlcy4gIEl0IHNob3VsZCBiZSBvbmx5CisgICAqICAgICBhY2Nlc3NlZCB3aXRoIHRoZSBtYWNybyBgRlRfRkFDRV9MT09LVVBfU0VSVklDRScuCisgICAqCisgICAqICAgaW5jcmVtZW50YWxfaW50ZXJmYWNlIDo6CisgICAqICAgICBJZiBub24tbnVsbCwgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIGdseXBoIGRhdGEgYW5kIG1ldHJpY3MKKyAgICogICAgIGFyZSBsb2FkZWQgaW5jcmVtZW50YWxseSBmb3IgZmFjZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhbGwgb2YKKyAgICogICAgIHRoaXMgZGF0YSB3aGVuIGZpcnN0IG9wZW5lZC4gIFRoaXMgZmllbGQgZXhpc3RzIG9ubHkgaWYKKyAgICogICAgIEBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMIGlzIGRlZmluZWQuCisgICAqCisgICAqICAgbm9fc3RlbV9kYXJrZW5pbmcgOjoKKyAgICogICAgIE92ZXJyaWRlcyB0aGUgbW9kdWxlLWxldmVsIGRlZmF1bHQsIHNlZSBAc3RlbS1kYXJrZW5pbmdbY2ZmXSwKKyAgICogICAgIGZvciBleGFtcGxlLiAgRkFMU0UgYW5kIFRSVUUgdG9nZ2xlIHN0ZW0gZGFya2VuaW5nIG9uIGFuZCBvZmYsCisgICAqICAgICByZXNwZWN0aXZlbHksIHZhbHVlfi0xIG1lYW5zIHRvIHVzZSB0aGUgbW9kdWxlL2RyaXZlciBkZWZhdWx0LgorICAgKgorICAgKiAgIHJhbmRvbV9zZWVkIDo6CisgICAqICAgICBJZiBwb3NpdGl2ZSwgb3ZlcnJpZGUgdGhlIHNlZWQgdmFsdWUgZm9yIHRoZSBDRkYgYHJhbmRvbScKKyAgICogICAgIG9wZXJhdG9yLiAgVmFsdWV+MCBtZWFucyB0byB1c2UgdGhlIGZvbnQncyB2YWx1ZS4gIFZhbHVlfi0xCisgICAqICAgICBtZWFucyB0byB1c2UgdGhlIENGRiBkcml2ZXIncyBkZWZhdWx0LgorICAgKgorICAgKiAgIGxjZF93ZWlnaHRzIDo6CisgICAqICAgbGNkX2ZpbHRlcl9mdW5jIDo6CisgICAqICAgICBUaGVzZSBmaWVsZHMgc3BlY2lmeSB0aGUgTENEIGZpbHRlcmluZyB3ZWlnaHRzIGFuZCBjYWxsYmFjaworICAgKiAgICAgZnVuY3Rpb24gZm9yIENsZWFyVHlwZS1zdHlsZSBzdWJwaXhlbCByZW5kZXJpbmcuCisgICAqCisgICAqICAgcmVmY291bnQgOjoKKyAgICogICAgIEEgY291bnRlciBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSBpcworICAgKiAgICAgY3JlYXRlZC4gIEBGVF9SZWZlcmVuY2VfRmFjZSBpbmNyZW1lbnRzIHRoaXMgY291bnRlciwgYW5kCisgICAqICAgICBARlRfRG9uZV9GYWNlIG9ubHkgZGVzdHJveXMgYSBmYWNlIGlmIHRoZSBjb3VudGVyIGlzfjEsCisgICAqICAgICBvdGhlcndpc2UgaXQgc2ltcGx5IGRlY3JlbWVudHMgaXQuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfRmFjZV9JbnRlcm5hbFJlY18KICAgewogICAgIEZUX01hdHJpeCAgdHJhbnNmb3JtX21hdHJpeDsKQEAgLTQyNiwzOSArMzg0LDQ5IEBACiAgIH0gRlRfRmFjZV9JbnRlcm5hbFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1Nsb3RfSW50ZXJuYWxSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbnRlcm5hbCBmaWVsZHMgb2YgZWFjaCBGVF9HbHlwaFNsb3QgICAqLwotICAvKiAgICBvYmplY3QuICBUaGVzZSBmaWVsZHMgbWF5IGNoYW5nZSBiZXR3ZWVuIGRpZmZlcmVudCByZWxlYXNlcyBvZiAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZGVyICAgICAgICAgICAgOjogVGhlIGdseXBoIGxvYWRlciBvYmplY3QgdXNlZCB0byBsb2FkIG91dGxpbmVzICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmxhZ3MgICAgICAgICAgICAgOjogUG9zc2libGUgdmFsdWVzIGFyZSB6ZXJvIG9yICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dMWVBIX09XTl9CSVRNQVAuICBUaGUgbGF0dGVyIGluZGljYXRlcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBGVF9HbHlwaFNsb3Qgc3RydWN0dXJlIG93bnMgdGhlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF90cmFuc2Zvcm1lZCA6OiBCb29sZWFuLiAgU2V0IHRvIFRSVUUgd2hlbiB0aGUgbG9hZGVkIGdseXBoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB0cmFuc2Zvcm1lZCB0aHJvdWdoIGEgc3BlY2lmaWMgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgdHJhbnNmb3JtYXRpb24uICBUaGlzIGlzIF9ub3RfIHRoZSBzYW1lICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgZmFjZSB0cmFuc2Zvcm0gc2V0IHRocm91Z2ggICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2V0X1RyYW5zZm9ybSgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9tYXRyaXggICAgICA6OiBUaGUgMngyIG1hdHJpeCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbHlwaCAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtYXRpb24sIGlmIG5lY2Vzc2FyeS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9kZWx0YSAgICAgICA6OiBUaGUgMmQgdHJhbnNsYXRpb24gdmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdseXBoIHRyYW5zZm9ybWF0aW9uLCBpZiBuZWNlc3NhcnkuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9oaW50cyAgICAgICA6OiBGb3JtYXQtc3BlY2lmaWMgZ2x5cGggaGludHMgbWFuYWdlbWVudC4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX1Nsb3RfSW50ZXJuYWxSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbnRlcm5hbCBmaWVsZHMgb2YgZWFjaCBGVF9HbHlwaFNsb3QKKyAgICogICBvYmplY3QuICBUaGVzZSBmaWVsZHMgbWF5IGNoYW5nZSBiZXR3ZWVuIGRpZmZlcmVudCByZWxlYXNlcyBvZgorICAgKiAgIEZyZWVUeXBlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGxvYWRlciA6OgorICAgKiAgICAgVGhlIGdseXBoIGxvYWRlciBvYmplY3QgdXNlZCB0byBsb2FkIG91dGxpbmVzCisgICAqICAgICBpbnRvIHRoZSBnbHlwaCBzbG90LgorICAgKgorICAgKiAgIGZsYWdzIDo6CisgICAqICAgICBQb3NzaWJsZSB2YWx1ZXMgYXJlIHplcm8gb3IKKyAgICogICAgIEZUX0dMWVBIX09XTl9CSVRNQVAuICBUaGUgbGF0dGVyIGluZGljYXRlcworICAgKiAgICAgdGhhdCB0aGUgRlRfR2x5cGhTbG90IHN0cnVjdHVyZSBvd25zIHRoZQorICAgKiAgICAgYml0bWFwIGJ1ZmZlci4KKyAgICoKKyAgICogICBnbHlwaF90cmFuc2Zvcm1lZCA6OgorICAgKiAgICAgQm9vbGVhbi4gIFNldCB0byBUUlVFIHdoZW4gdGhlIGxvYWRlZCBnbHlwaAorICAgKiAgICAgbXVzdCBiZSB0cmFuc2Zvcm1lZCB0aHJvdWdoIGEgc3BlY2lmaWMKKyAgICogICAgIGZvbnQgdHJhbnNmb3JtYXRpb24uICBUaGlzIGlzIF9ub3RfIHRoZSBzYW1lCisgICAqICAgICBhcyB0aGUgZmFjZSB0cmFuc2Zvcm0gc2V0IHRocm91Z2gKKyAgICogICAgIEZUX1NldF9UcmFuc2Zvcm0oKS4KKyAgICoKKyAgICogICBnbHlwaF9tYXRyaXggOjoKKyAgICogICAgIFRoZSAyeDIgbWF0cml4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdseXBoCisgICAqICAgICB0cmFuc2Zvcm1hdGlvbiwgaWYgbmVjZXNzYXJ5LgorICAgKgorICAgKiAgIGdseXBoX2RlbHRhIDo6CisgICAqICAgICBUaGUgMmQgdHJhbnNsYXRpb24gdmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8KKyAgICogICAgIHRoZSBnbHlwaCB0cmFuc2Zvcm1hdGlvbiwgaWYgbmVjZXNzYXJ5LgorICAgKgorICAgKiAgIGdseXBoX2hpbnRzIDo6CisgICAqICAgICBGb3JtYXQtc3BlY2lmaWMgZ2x5cGggaGludHMgbWFuYWdlbWVudC4KKyAgICoKKyAgICogICBsb2FkX2ZsYWdzIDo6CisgICAqICAgICBUaGUgbG9hZCBmbGFncyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gQEZUX0xvYWRfR2x5cGggd2hpbGUKKyAgICogICAgIGluaXRpYWxpemluZyB0aGUgZ2x5cGggc2xvdC4KKyAgICovCiAKICNkZWZpbmUgRlRfR0xZUEhfT1dOX0JJVE1BUCAgMHgxVQogCkBAIC00NzEsMjYgKzQzOSwzMSBAQAogICAgIEZUX1ZlY3RvciAgICAgICBnbHlwaF9kZWx0YTsKICAgICB2b2lkKiAgICAgICAgICAgZ2x5cGhfaGludHM7CiAKKyAgICBGVF9JbnQzMiAgICAgICAgbG9hZF9mbGFnczsKKwogICB9IEZUX0dseXBoU2xvdF9JbnRlcm5hbFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NpemVfSW50ZXJuYWxSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbnRlcm5hbCBmaWVsZHMgb2YgZWFjaCBGVF9TaXplICAgICAgICAqLwotICAvKiAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfZGF0YSAgICAgIDo6IERhdGEgc3BlY2lmaWMgdG8gYSBkcml2ZXIgbW9kdWxlLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGF1dG9oaW50X21vZGUgICAgOjogVGhlIHVzZWQgYXV0by1oaW50aW5nIG1vZGUuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXV0b2hpbnRfbWV0cmljcyA6OiBNZXRyaWNzIHVzZWQgYnkgdGhlIGF1dG8taGludGVyLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfU2l6ZV9JbnRlcm5hbFJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGludGVybmFsIGZpZWxkcyBvZiBlYWNoIEZUX1NpemUKKyAgICogICBvYmplY3QuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbW9kdWxlX2RhdGEgOjoKKyAgICogICAgIERhdGEgc3BlY2lmaWMgdG8gYSBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKiAgIGF1dG9oaW50X21vZGUgOjoKKyAgICogICAgIFRoZSB1c2VkIGF1dG8taGludGluZyBtb2RlLgorICAgKgorICAgKiAgIGF1dG9oaW50X21ldHJpY3MgOjoKKyAgICogICAgIE1ldHJpY3MgdXNlZCBieSB0aGUgYXV0by1oaW50ZXIuCisgICAqCisgICAqLwogCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX0ludGVybmFsUmVjXwogICB7CkBAIC01MTUsMjEgKzQ4OCwyNCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX01vZHVsZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgbW9kdWxlIG9iamVjdCBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNsYXp6ICAgOjogQSBwb2ludGVyIHRvIHRoZSBtb2R1bGUncyBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgIDo6IEEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIEZUX01vZHVsZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtb2R1bGUgb2JqZWN0IGluc3RhbmNlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGNsYXp6IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIG1vZHVsZSdzIGNsYXNzLgorICAgKgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgbGlicmFyeSBvYmplY3QuCisgICAqCisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IG1hbmFnZXIuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfTW9kdWxlUmVjXwogICB7CiAgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xheno7CkBAIC01NzIsMjcgKzU0OCwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01PRFVMRV9EUklWRVJfSElOVFNfTElHSFRMWSApCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaW5kcyBhIG1vZHVsZSBhbmQgcmV0dXJucyBpdHMgc3BlY2lmaWMgaW50ZXJmYWNlIGFzIGEgdHlwZWxlc3MgICAgKi8KLSAgLyogICAgcG9pbnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGVfbmFtZSA6OiBUaGUgbW9kdWxlJ3MgbmFtZSAoYXMgYW4gQVNDSUkgc3RyaW5nKS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgaWYgYXZhaWxhYmxlLCAwIG90aGVyd2lzZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBZb3Ugc2hvdWxkIGJldHRlciBiZSBmYW1pbGlhciB3aXRoIEZyZWVUeXBlIGludGVybmFscyB0byBrbm93ICAgICAgKi8KLSAgLyogICAgd2hpY2ggbW9kdWxlIHRvIGxvb2sgZm9yLCBhbmQgd2hhdCBpdHMgaW50ZXJmYWNlIGlzIDotKSAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX0dldF9Nb2R1bGVfSW50ZXJmYWNlCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBGaW5kcyBhIG1vZHVsZSBhbmQgcmV0dXJucyBpdHMgc3BlY2lmaWMgaW50ZXJmYWNlIGFzIGEgdHlwZWxlc3MKKyAgICogICBwb2ludGVyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgKgorICAgKiAgIG1vZHVsZV9uYW1lIDo6CisgICAqICAgICBUaGUgbW9kdWxlJ3MgbmFtZSAoYXMgYW4gQVNDSUkgc3RyaW5nKS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBBIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgaWYgYXZhaWxhYmxlLCAwIG90aGVyd2lzZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IHNob3VsZCBiZXR0ZXIgYmUgZmFtaWxpYXIgd2l0aCBGcmVlVHlwZSBpbnRlcm5hbHMgdG8ga25vdworICAgKiAgIHdoaWNoIG1vZHVsZSB0byBsb29rIGZvciwgYW5kIHdoYXQgaXRzIGludGVyZmFjZSBpcyA6LSkKKyAgICovCiAgIEZUX0JBU0UoIGNvbnN0IHZvaWQqICkKICAgRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIEZUX0xpYnJhcnkgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIG1vZF9uYW1lICk7CkBAIC02NDMsNDQgKzYyMSw0NyBAQAogI2RlZmluZSBGVF9GQUNFX1NJWkUoIHggKSAgICAgRlRfRkFDRSggeCApLT5zaXplCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBnbHlwaCBzbG90IGZvciBhICAgICAgKi8KLSAgLyogICAgZ2l2ZW4gZmFjZSBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGFkZGl0aW9uYWwgICAgICovCi0gIC8qICAgIHNsb3RzLiAgQWxsIG9mIHRoZW0gYXJlIGF1dG9tYXRpY2FsbHkgZGlzY2FyZGVkIHdoZW4gdGhlIGZhY2UgaXMgICAqLwotICAvKiAgICBkZXN0cm95ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICA6OiBBIGhhbmRsZSB0byBhIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhc2xvdCA6OiBBIGhhbmRsZSB0byBhIG5ldyBnbHlwaCBzbG90IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X0dseXBoU2xvdAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgZ2x5cGggc2xvdCBmb3IgYQorICAgKiAgIGdpdmVuIGZhY2Ugb2JqZWN0LiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhZGRpdGlvbmFsCisgICAqICAgc2xvdHMuICBBbGwgb2YgdGhlbSBhcmUgYXV0b21hdGljYWxseSBkaXNjYXJkZWQgd2hlbiB0aGUgZmFjZSBpcworICAgKiAgIGRlc3Ryb3llZC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIGEgcGFyZW50IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFzbG90IDo6CisgICAqICAgICBBIGhhbmRsZSB0byBhIG5ldyBnbHlwaCBzbG90IG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfQkFTRSggRlRfRXJyb3IgKQogICBGVF9OZXdfR2x5cGhTbG90KCBGVF9GYWNlICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICphc2xvdCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfRG9uZV9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzdHJveXMgYSBnaXZlbiBnbHlwaCBzbG90LiAgUmVtZW1iZXIgaG93ZXZlciB0aGF0IGFsbCBzbG90cyBhcmUgICovCi0gIC8qICAgIGF1dG9tYXRpY2FsbHkgZGVzdHJveWVkIHdpdGggaXRzIHBhcmVudC4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gaXMgICAqLwotICAvKiAgICBub3QgYWx3YXlzIG1hbmRhdG9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzbG90IDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRG9uZV9HbHlwaFNsb3QKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3lzIGEgZ2l2ZW4gZ2x5cGggc2xvdC4gIFJlbWVtYmVyIGhvd2V2ZXIgdGhhdCBhbGwgc2xvdHMgYXJlCisgICAqICAgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgd2l0aCBpdHMgcGFyZW50LiAgVXNpbmcgdGhpcyBmdW5jdGlvbiBpcworICAgKiAgIG5vdCBhbHdheXMgbWFuZGF0b3J5LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgc2xvdCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgZ2x5cGggc2xvdC4KKyAgICovCiAgIEZUX0JBU0UoIHZvaWQgKQogICBGVF9Eb25lX0dseXBoU2xvdCggRlRfR2x5cGhTbG90ICBzbG90ICk7CiAKQEAgLTgwMiwyOCArNzgzLDMyIEBACiAjZGVmaW5lIEZUX0RSSVZFUl9DTEFTUyggeCApICBGVF9EUklWRVIoIHggKS0+Y2xhenoKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RyaXZlclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSByb290IGZvbnQgZHJpdmVyIGNsYXNzLiAgQSBmb250IGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgICAgICAqLwotICAvKiAgICBtYW5hZ2luZyBhbmQgbG9hZGluZyBmb250IGZpbGVzIG9mIGEgZ2l2ZW4gZm9ybWF0LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgcm9vdCAgICAgICAgIDo6IENvbnRhaW5zIHRoZSBmaWVsZHMgb2YgdGhlIHJvb3QgbW9kdWxlIGNsYXNzLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjbGF6eiAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBmb250IGRyaXZlcidzIGNsYXNzLiAgTm90ZSB0aGF0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgTk9UIHJvb3QuY2xhenouICBgY2xhc3MnIHdhc24ndCB1c2VkICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICBhcyBpdCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gQysrLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgZmFjZXNfbGlzdCAgIDo6IFRoZSBsaXN0IG9mIGZhY2VzIGN1cnJlbnRseSBvcGVuZWQgYnkgdGhpcyAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgZ2x5cGhfbG9hZGVyIDo6IFVudXNlZC4gIFVzZWQgdG8gYmUgZ2x5cGggbG9hZGVyIGZvciBhbGwgZmFjZXMgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9Ecml2ZXJSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSByb290IGZvbnQgZHJpdmVyIGNsYXNzLiAgQSBmb250IGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKKyAgICogICBtYW5hZ2luZyBhbmQgbG9hZGluZyBmb250IGZpbGVzIG9mIGEgZ2l2ZW4gZm9ybWF0LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHJvb3QgOjoKKyAgICogICAgIENvbnRhaW5zIHRoZSBmaWVsZHMgb2YgdGhlIHJvb3QgbW9kdWxlIGNsYXNzLgorICAgKgorICAgKiAgIGNsYXp6IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGZvbnQgZHJpdmVyJ3MgY2xhc3MuICBOb3RlIHRoYXQKKyAgICogICAgIHRoaXMgaXMgTk9UIHJvb3QuY2xhenouICBgY2xhc3MnIHdhc24ndCB1c2VkCisgICAqICAgICBhcyBpdCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gQysrLgorICAgKgorICAgKiAgIGZhY2VzX2xpc3QgOjoKKyAgICogICAgIFRoZSBsaXN0IG9mIGZhY2VzIGN1cnJlbnRseSBvcGVuZWQgYnkgdGhpcworICAgKiAgICAgZHJpdmVyLgorICAgKgorICAgKiAgIGdseXBoX2xvYWRlciA6OgorICAgKiAgICAgVW51c2VkLiAgVXNlZCB0byBiZSBnbHlwaCBsb2FkZXIgZm9yIGFsbCBmYWNlcworICAgKiAgICAgbWFuYWdlZCBieSB0aGlzIGRyaXZlci4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9Ecml2ZXJSZWNfCiAgIHsKICAgICBGVF9Nb2R1bGVSZWMgICAgIHJvb3Q7CkBAIC04NTIsNjcgKzgzNyw4NiBAQAogI2RlZmluZSBGVF9ERUJVR19IT09LX1RSVUVUWVBFICAwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9MaWJyYXJ5UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgRnJlZVR5cGUgbGlicmFyeSBjbGFzcy4gIFRoaXMgaXMgdGhlIHJvb3Qgb2YgYWxsIEZyZWVUeXBlICAgICAgKi8KLSAgLyogICAgZGF0YS4gIFVzZSBGVF9OZXdfTGlicmFyeSgpIHRvIGNyZWF0ZSBhIGxpYnJhcnkgb2JqZWN0LCBhbmQgICAgICAgICovCi0gIC8qICAgIEZUX0RvbmVfTGlicmFyeSgpIHRvIGRpc2NhcmQgaXQgYW5kIGFsbCBjaGlsZCBvYmplY3RzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgICAgICAgICAgOjogVGhlIGxpYnJhcnkncyBtZW1vcnkgb2JqZWN0LiAgTWFuYWdlcyBtZW1vcnkgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnNpb25fbWFqb3IgICAgOjogVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWJyYXJ5LiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVyc2lvbl9taW5vciAgICA6OiBUaGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJzaW9uX3BhdGNoICAgIDo6IFRoZSBjdXJyZW50IHBhdGNoIGxldmVsIG9mIHRoZSBsaWJyYXJ5LiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9tb2R1bGVzICAgICAgOjogVGhlIG51bWJlciBvZiBtb2R1bGVzIGN1cnJlbnRseSByZWdpc3RlcmVkICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIGxpYnJhcnkuICBUaGlzIGlzIHNldCB0byAwIGZvciBuZXcgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMuICBOZXcgbW9kdWxlcyBhcmUgYWRkZWQgdGhyb3VnaCB0aGUgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgRlRfQWRkX01vZHVsZSgpIEFQSSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW9kdWxlcyAgICAgICAgICA6OiBBIHRhYmxlIHVzZWQgdG8gc3RvcmUgaGFuZGxlcyB0byB0aGUgY3VycmVudGx5ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCBtb2R1bGVzLiBOb3RlIHRoYXQgZWFjaCBmb250IGRyaXZlciAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgbGlzdCBvZiBpdHMgb3BlbmVkIGZhY2VzLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlbmRlcmVycyAgICAgICAgOjogVGhlIGxpc3Qgb2YgcmVuZGVyZXJzIGN1cnJlbnRseSByZWdpc3RlcmVkICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGN1cl9yZW5kZXJlciAgICAgOjogVGhlIGN1cnJlbnQgb3V0bGluZSByZW5kZXJlci4gIFRoaXMgaXMgYSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0IHVzZWQgdG8gYXZvaWQgcGFyc2luZyB0aGUgbGlzdCBvbiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBlYWNoIGNhbGwgdG8gRlRfT3V0bGluZV9SZW5kZXIoKS4gIEl0IGlzIGEgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyIGZvciB0aGUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FIGZvcm1hdC4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGF1dG9faGludGVyICAgICAgOjogVGhlIGF1dG8taGludGVyIG1vZHVsZSBpbnRlcmZhY2UuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVidWdfaG9va3MgICAgICA6OiBBbiBhcnJheSBvZiBmb3VyIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgYWxsb3cgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJzIHRvIGhvb2sgaW50byBhIGZvbnQgZm9ybWF0J3MgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJldGVyLiAgQ3VycmVudGx5LCBvbmx5IHRoZSBUcnVlVHlwZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZSBkZWJ1Z2dlciB1c2VzIHRoaXMuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsY2Rfd2VpZ2h0cyAgICAgIDo6IElmIHN1YnBpeGVsIHJlbmRlcmluZyBpcyBhY3RpdmF0ZWQsIHRoZSBMQ0QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgd2VpZ2h0cywgaWYgYW55LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsY2RfZmlsdGVyX2Z1bmMgIDo6IElmIHN1YnBpeGVsIHJlbmRlcmluZyBpcyBhY3RpdmF0ZWQsIHRoZSBMQ0QgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmcgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwaWNfY29udGFpbmVyICAgIDo6IENvbnRhaW5zIGdsb2JhbCBzdHJ1Y3RzIGFuZCB0YWJsZXMsIGluc3RlYWQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBvZiBkZWZpbmluZyB0aGVtIGdsb2JhbGx5LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByZWZjb3VudCAgICAgICAgIDo6IEEgY291bnRlciBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBARlRfTGlicmFyeSBzdHJ1Y3R1cmUgaXMgY3JlYXRlZC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgQEZUX1JlZmVyZW5jZV9MaWJyYXJ5IGluY3JlbWVudHMgdGhpcyBjb3VudGVyLCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBARlRfRG9uZV9MaWJyYXJ5IG9ubHkgZGVzdHJveXMgYSBsaWJyYXJ5ICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgY291bnRlciBpc34xLCBvdGhlcndpc2UgaXQgc2ltcGx5ICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50cyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgRlRfTGlicmFyeVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIEZyZWVUeXBlIGxpYnJhcnkgY2xhc3MuICBUaGlzIGlzIHRoZSByb290IG9mIGFsbCBGcmVlVHlwZQorICAgKiAgIGRhdGEuICBVc2UgRlRfTmV3X0xpYnJhcnkoKSB0byBjcmVhdGUgYSBsaWJyYXJ5IG9iamVjdCwgYW5kCisgICAqICAgRlRfRG9uZV9MaWJyYXJ5KCkgdG8gZGlzY2FyZCBpdCBhbmQgYWxsIGNoaWxkIG9iamVjdHMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBUaGUgbGlicmFyeSdzIG1lbW9yeSBvYmplY3QuICBNYW5hZ2VzIG1lbW9yeQorICAgKiAgICAgYWxsb2NhdGlvbi4KKyAgICoKKyAgICogICB2ZXJzaW9uX21ham9yIDo6CisgICAqICAgICBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkuCisgICAqCisgICAqICAgdmVyc2lvbl9taW5vciA6OgorICAgKiAgICAgVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWJyYXJ5LgorICAgKgorICAgKiAgIHZlcnNpb25fcGF0Y2ggOjoKKyAgICogICAgIFRoZSBjdXJyZW50IHBhdGNoIGxldmVsIG9mIHRoZSBsaWJyYXJ5LgorICAgKgorICAgKiAgIG51bV9tb2R1bGVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIG1vZHVsZXMgY3VycmVudGx5IHJlZ2lzdGVyZWQKKyAgICogICAgIHdpdGhpbiB0aGlzIGxpYnJhcnkuICBUaGlzIGlzIHNldCB0byAwIGZvciBuZXcKKyAgICogICAgIGxpYnJhcmllcy4gIE5ldyBtb2R1bGVzIGFyZSBhZGRlZCB0aHJvdWdoIHRoZQorICAgKiAgICAgRlRfQWRkX01vZHVsZSgpIEFQSSBmdW5jdGlvbi4KKyAgICoKKyAgICogICBtb2R1bGVzIDo6CisgICAqICAgICBBIHRhYmxlIHVzZWQgdG8gc3RvcmUgaGFuZGxlcyB0byB0aGUgY3VycmVudGx5CisgICAqICAgICByZWdpc3RlcmVkIG1vZHVsZXMuIE5vdGUgdGhhdCBlYWNoIGZvbnQgZHJpdmVyCisgICAqICAgICBjb250YWlucyBhIGxpc3Qgb2YgaXRzIG9wZW5lZCBmYWNlcy4KKyAgICoKKyAgICogICByZW5kZXJlcnMgOjoKKyAgICogICAgIFRoZSBsaXN0IG9mIHJlbmRlcmVycyBjdXJyZW50bHkgcmVnaXN0ZXJlZAorICAgKiAgICAgd2l0aGluIHRoZSBsaWJyYXJ5LgorICAgKgorICAgKiAgIGN1cl9yZW5kZXJlciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgb3V0bGluZSByZW5kZXJlci4gIFRoaXMgaXMgYQorICAgKiAgICAgc2hvcnRjdXQgdXNlZCB0byBhdm9pZCBwYXJzaW5nIHRoZSBsaXN0IG9uCisgICAqICAgICBlYWNoIGNhbGwgdG8gRlRfT3V0bGluZV9SZW5kZXIoKS4gIEl0IGlzIGEKKyAgICogICAgIGhhbmRsZSB0byB0aGUgY3VycmVudCByZW5kZXJlciBmb3IgdGhlCisgICAqICAgICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSBmb3JtYXQuCisgICAqCisgICAqICAgYXV0b19oaW50ZXIgOjoKKyAgICogICAgIFRoZSBhdXRvLWhpbnRlciBtb2R1bGUgaW50ZXJmYWNlLgorICAgKgorICAgKiAgIGRlYnVnX2hvb2tzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBmb3VyIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgYWxsb3cKKyAgICogICAgIGRlYnVnZ2VycyB0byBob29rIGludG8gYSBmb250IGZvcm1hdCdzCisgICAqICAgICBpbnRlcnByZXRlci4gIEN1cnJlbnRseSwgb25seSB0aGUgVHJ1ZVR5cGUKKyAgICogICAgIGJ5dGVjb2RlIGRlYnVnZ2VyIHVzZXMgdGhpcy4KKyAgICoKKyAgICogICBsY2Rfd2VpZ2h0cyA6OgorICAgKiAgICAgVGhlIExDRCBmaWx0ZXIgd2VpZ2h0cyBmb3IgQ2xlYXJUeXBlLXN0eWxlCisgICAqICAgICBzdWJwaXhlbCByZW5kZXJpbmcuCisgICAqCisgICAqICAgbGNkX2ZpbHRlcl9mdW5jIDo6CisgICAqICAgICBUaGUgTENEIGZpbHRlcmluZyBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICogICAgIGZvciBDbGVhclR5cGUtc3R5bGUgc3VicGl4ZWwgcmVuZGVyaW5nLgorICAgKgorICAgKiAgIGxjZF9nZW9tZXRyeSA6OgorICAgKiAgICAgVGhpcyBhcnJheSBzcGVjaWZpZXMgTENEIHN1YnBpeGVsIGdlb21ldHJ5CisgICAqICAgICBhbmQgY29udHJvbHMgSGFybW9ueSBMQ0QgcmVuZGVyaW5nIHRlY2huaXF1ZSwKKyAgICogICAgIGFsdGVybmF0aXZlIHRvIENsZWFyVHlwZS4KKyAgICoKKyAgICogICBwaWNfY29udGFpbmVyIDo6CisgICAqICAgICBDb250YWlucyBnbG9iYWwgc3RydWN0cyBhbmQgdGFibGVzLCBpbnN0ZWFkCisgICAqICAgICBvZiBkZWZpbmluZyB0aGVtIGdsb2JhbGx5LgorICAgKgorICAgKiAgIHJlZmNvdW50IDo6CisgICAqICAgICBBIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbgorICAgKiAgICAgQEZUX0xpYnJhcnkgc3RydWN0dXJlIGlzIGNyZWF0ZWQuCisgICAqICAgICBARlRfUmVmZXJlbmNlX0xpYnJhcnkgaW5jcmVtZW50cyB0aGlzIGNvdW50ZXIsCisgICAqICAgICBhbmQgQEZUX0RvbmVfTGlicmFyeSBvbmx5IGRlc3Ryb3lzIGEgbGlicmFyeQorICAgKiAgICAgaWYgdGhlIGNvdW50ZXIgaXN+MSwgb3RoZXJ3aXNlIGl0IHNpbXBseQorICAgKiAgICAgZGVjcmVtZW50cyBpdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9MaWJyYXJ5UmVjXwogICB7CiAgICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsgICAgICAgICAgIC8qIGxpYnJhcnkncyBtZW1vcnkgbWFuYWdlciAqLwpAQCAtOTMzLDEwICs5MzcsOCBAQAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCiAgICAgRlRfTGNkRml2ZVRhcEZpbHRlciAgICAgIGxjZF93ZWlnaHRzOyAgICAgIC8qIGZpbHRlciB3ZWlnaHRzLCBpZiBhbnkgKi8KICAgICBGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyAgbGNkX2ZpbHRlcl9mdW5jOyAgLyogZmlsdGVyaW5nIGNhbGxiYWNrICAgICAqLwotI2VuZGlmCi0KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIEZUX1BJQ19Db250YWluZXIgICBwaWNfY29udGFpbmVyOworI2Vsc2UKKyAgICBGVF9WZWN0b3IgICAgICAgICAgICAgICAgbGNkX2dlb21ldHJ5WzNdOyAgLyogUkdCIHN1YnBpeGVsIHBvc2l0aW9ucyAqLwogI2VuZGlmCiAKICAgICBGVF9JbnQgICAgICAgICAgICAgcmVmY291bnQ7CkBAIC05NzAsMzIgKzk3MiwzMyBAQAogCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fTk9fREVGQVVMVF9TWVNURU0KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfTWVtb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGVzIGEgbmV3IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkgb2JqZWN0LiAgMCBpbiBjYXNlIG9mIGVycm9yLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfTmV3X01lbW9yeQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ3JlYXRlcyBhIG5ldyBtZW1vcnkgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEEgcG9pbnRlciB0byB0aGUgbmV3IG1lbW9yeSBvYmplY3QuICAwIGluIGNhc2Ugb2YgZXJyb3IuCisgICAqLwogICBGVF9CQVNFKCBGVF9NZW1vcnkgKQogICBGVF9OZXdfTWVtb3J5KCB2b2lkICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Eb25lX01lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEaXNjYXJkcyBtZW1vcnkgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgOjogQSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfRG9uZV9NZW1vcnkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERpc2NhcmRzIG1lbW9yeSBtYW5hZ2VyLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IG1hbmFnZXIuCisgICAqLwogICBGVF9CQVNFKCB2b2lkICkKICAgRlRfRG9uZV9NZW1vcnkoIEZUX01lbW9yeSAgbWVtb3J5ICk7CiAKQEAgLTEwMTMsMzcgKzEwMTYsMTYgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCi0gIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLwotICAvKioqKiAgICAgICAgICAgICAgICAgICAgICBQIEkgQyAgIFMgVSBQIFAgTyBSIFQgICAgICAgICAgICAgICAgICAgICAgKioqKi8KLSAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCi0gIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyogUElDIHN1cHBvcnQgbWFjcm9zIGZvciBmdGltYWdlLmggKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9PdXRsaW5lX0Z1bmNzIHN0cnVjdC4gICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW5jdGlvbiB3aWxsIG5lZWQgICAgKi8KLSAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLwotICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KLSAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfREVGSU5FX09VVExJTkVfRlVOQ1MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9PdXRsaW5lX0Z1bmNzIHN0cnVjdC4KKyAgICogICBUaGUgc3RydWN0IHdpbGwgYmUgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZQorICAgKiAgIHdoZXJlIHRoZSBtYWNybyBpcyB1c2VkKS4KKyAgICovCiAjZGVmaW5lIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKCAgICAgICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBtb3ZlX3RvXywgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDYyLDQ3ICsxMDQ0LDE3IEBACiAgICAgZGVsdGFfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCi0jZGVmaW5lIEZUX0RFRklORV9PVVRMSU5FX0ZVTkNTKCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIG1vdmVfdG9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbGluZV90b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjb25pY190b18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGN1YmljX3RvXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc2hpZnRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkZWx0YV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEluaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfT3V0bGluZV9GdW5jcyogIGNsYXp6ICkgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5tb3ZlX3RvICA9IG1vdmVfdG9fOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmxpbmVfdG8gID0gbGluZV90b187ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y29uaWNfdG8gPSBjb25pY190b187ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5jdWJpY190byA9IGN1YmljX3RvXzsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnNoaWZ0ICAgID0gc2hpZnRfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+ZGVsdGEgICAgPSBkZWx0YV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9SQVNURVJfRlVOQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9SYXN0ZXJfRnVuY3Mgc3RydWN0LiAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW5jdGlvbiB3aWxsIG5lZWQgICAgKi8KLSAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLwotICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KLSAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfREVGSU5FX1JBU1RFUl9GVU5DUworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX1Jhc3Rlcl9GdW5jcyBzdHJ1Y3QuCisgICAqICAgVGhlIHN0cnVjdCB3aWxsIGJlIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUKKyAgICogICB3aGVyZSB0aGUgbWFjcm8gaXMgdXNlZCkuCisgICAqLwogI2RlZmluZSBGVF9ERUZJTkVfUkFTVEVSX0ZVTkNTKCAgICBcCiAgICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBnbHlwaF9mb3JtYXRfLCAgICAgICAgICAgXApAQCAtMTEyMSw0OCArMTA3MywxNyBAQAogICAgIHJhc3Rlcl9kb25lXyAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVGSU5FX1JBU1RFUl9GVU5DUyggICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdseXBoX2Zvcm1hdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByYXN0ZXJfbmV3XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmFzdGVyX3Jlc2V0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHJhc3Rlcl9zZXRfbW9kZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByYXN0ZXJfcmVuZGVyXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmFzdGVyX2RvbmVfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9SYXN0ZXJfRnVuY3MqICBjbGF6eiApICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9mb3JtYXQgICAgPSBnbHlwaF9mb3JtYXRfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cmFzdGVyX25ldyAgICAgID0gcmFzdGVyX25ld187ICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnJhc3Rlcl9yZXNldCAgICA9IHJhc3Rlcl9yZXNldF87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5yYXN0ZXJfc2V0X21vZGUgPSByYXN0ZXJfc2V0X21vZGVfOyAgICAgICAgIFwKLSAgICBjbGF6ei0+cmFzdGVyX3JlbmRlciAgID0gcmFzdGVyX3JlbmRlcl87ICAgICAgICAgICBcCi0gICAgY2xhenotPnJhc3Rlcl9kb25lICAgICA9IHJhc3Rlcl9kb25lXzsgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAKLSAgLyogUElDIHN1cHBvcnQgbWFjcm9zIGZvciBmdHJlbmRlci5oICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUZJTkVfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfR2x5cGhfQ2xhc3Mgc3RydWN0LiAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGFuIGluaXQgZnVuY3Rpb24gd2lsbCBuZWVkICAgICovCi0gIC8qICAgIHRvIGJlIGNhbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkLiAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIG5vdCBkZWZpbmVkIHRoZSBzdHJ1Y3Qgd2lsbCBiZSAgICAgICAgKi8KLSAgLyogICAgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZSB3aGVyZSB0aGUgbWFjcm8gICAgICAgICovCi0gIC8qICAgIGlzIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0RFRklORV9HTFlQSAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIHN0cnVjdCB3aWxsIGJlIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUKKyAgICogICB3aGVyZSB0aGUgbWFjcm8gaXMgdXNlZCkuCisgICAqLwogI2RlZmluZSBGVF9ERUZJTkVfR0xZUEgoICAgICAgICAgIFwKICAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICAgICAgXApAQCAtMTE4Niw3MyArMTEwNywyNSBAQAogICAgIHByZXBhcmVfICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAotI2RlZmluZSBGVF9ERUZJTkVfR0xZUEgoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZvcm1hdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNvcHlfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHRyYW5zZm9ybV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGJib3hfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHByZXBhcmVfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0dseXBoX0NsYXNzKiAgY2xhenogKSAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9zaXplICAgICAgPSBzaXplXzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9mb3JtYXQgICAgPSBmb3JtYXRfOyAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9pbml0ICAgICAgPSBpbml0XzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9kb25lICAgICAgPSBkb25lXzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9jb3B5ICAgICAgPSBjb3B5XzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF90cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fOyAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9iYm94ICAgICAgPSBiYm94XzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nbHlwaF9wcmVwYXJlICAgPSBwcmVwYXJlXzsgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfREVDTEFSRV9SRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNlZCB0byBjcmVhdGUgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGEgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1JlbmRlcmVyX0NsYXNzIHN0cnVjdCBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9SRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9SZW5kZXJlcl9DbGFzcyBzdHJ1Y3QuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVuY3Rpb24gd2lsbCAgICAgICovCi0gIC8qICAgIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAqLwotICAvKiAgICByZXR1cm5lZC4gIEFuZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYSBgZGVzdHJveScgZnVuY3Rpb24gICAgKi8KLSAgLyogICAgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBmdGluaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zICAgICAqLwotICAvKiAgICBhIG1lY2hhbmlzbSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbW9kdWxlcyAgICAgICAgKi8KLSAgLyogICAgZGVzY3JpYmVkIGluIGBmdG1vZHVsZS5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RpY2UgdGhhdCB0aGUgY3JlYXRlZCBgY3JlYXRlJyBhbmQgYGRlc3Ryb3knIGZ1bmN0aW9ucyBjYWxsICAgICAgKi8KLSAgLyogICAgYHBpY19pbml0JyBhbmQgYHBpY19mcmVlJyB0byBhbGxvdyB5b3UgdG8gbWFudWFsbHkgYWxsb2NhdGUgYW5kICAgICovCi0gIC8qICAgIGluaXRpYWxpemUgYW55IGFkZGl0aW9uYWwgZ2xvYmFsIGRhdGEsIGxpa2UgYSBtb2R1bGUgc3BlY2lmaWMgICAgICAqLwotICAvKiAgICBpbnRlcmZhY2UsIGFuZCBwdXQgdGhlbSBpbiB0aGUgZ2xvYmFsIHBpYyBjb250YWluZXIgZGVmaW5lZCBpbiAgICAgKi8KLSAgLyogICAgYGZ0cGljLmgnLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlbSBqdXN0IGltcGxlbWVudCB0aGUgZnVuY3Rpb25zIGFzICovCi0gIC8qICAgIGVtcHR5IHRvIHJlc29sdmUgdGhlIGxpbmsgZXJyb3IuICBBbHNvIHRoZSBgcGljX2luaXQnIGFuZCAgICAgICAgICAqLwotICAvKiAgICBgcGljX2ZyZWUnIGZ1bmN0aW9ucyBzaG91bGQgYmUgZGVjbGFyZWQgaW4gYHBpYy5oJywgdG8gYmUgcmVmZXJyZWQgKi8KLSAgLyogICAgYnkgdGhlIHJlbmRlcmVyIGRlZmluaXRpb24gY2FsbGluZyBgRlRfREVGSU5FX1JFTkRFUkVSJyBpbiB0aGUgICAgICovCi0gIC8qICAgIGZvbGxvd2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgc3RydWN0IHdpbGwgYmUgICAgICAgICovCi0gIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvICAgICAgICAqLwotICAvKiAgICBpcyB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9ERUNMQVJFX1JFTkRFUkVSCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBVc2VkIHRvIGNyZWF0ZSBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgYQorICAgKiAgIEZUX1JlbmRlcmVyX0NsYXNzIHN0cnVjdCBpbnN0YW5jZS4KKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0RFRklORV9SRU5ERVJFUgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX1JlbmRlcmVyX0NsYXNzIHN0cnVjdC4KKyAgICoKKyAgICogICBUaGUgc3RydWN0IHdpbGwgYmUgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZQorICAgKiAgIHdoZXJlIHRoZSBtYWNybyBpcyB1c2VkKS4KKyAgICovCiAjZGVmaW5lIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGNsYXNzXyApICAgICAgICAgICAgICAgXAogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9SZW5kZXJlcl9DbGFzcyApIGNsYXNzXzsKIApAQCAtMTI5NSwxNzYgKzExNjgsMzMgQEAKICAgICByYXN0ZXJfY2xhc3NfICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAotI2RlZmluZSBGVF9ERUNMQVJFX1JFTkRFUkVSKCBjbGFzc18gKSAgRlRfREVDTEFSRV9NT0RVTEUoIGNsYXNzXyApCi0KLSNkZWZpbmUgRlRfREVGSU5FX1JFTkRFUkVSKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdldF9pbnRlcmZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2x5cGhfZm9ybWF0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZW5kZXJfZ2x5cGhfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHRyYW5zZm9ybV9nbHlwaF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X2dseXBoX2Nib3hfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzZXRfbW9kZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHJhc3Rlcl9jbGFzc18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICkgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9SZW5kZXJlcl9DbGFzcyogIHJjbGF6eiA9IChGVF9SZW5kZXJlcl9DbGFzcyopY2xheno7ICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXNzXyAjIyBfcGljX2ZyZWUoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCByY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0ZSRUUoIHJjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyoqICBvdXRwdXRfY2xhc3MgKSAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfUmVuZGVyZXJfQ2xhc3MqICBjbGF6eiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSApICkgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVycm9yID0gY2xhc3NfICMjIF9waWNfaW5pdCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBlcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfREVGSU5FX1JPT1RfTU9EVUxFKCBmbGFnc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2x5cGhfZm9ybWF0ICAgID0gZ2x5cGhfZm9ybWF0XzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnJlbmRlcl9nbHlwaCAgICA9IHJlbmRlcl9nbHlwaF87ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+dHJhbnNmb3JtX2dseXBoID0gdHJhbnNmb3JtX2dseXBoXzsgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfZ2x5cGhfY2JveCAgPSBnZXRfZ2x5cGhfY2JveF87ICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnNldF9tb2RlICAgICAgICA9IHNldF9tb2RlXzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5yYXN0ZXJfY2xhc3MgICAgPSByYXN0ZXJfY2xhc3NfOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gKEZUX01vZHVsZV9DbGFzcyopY2xheno7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCi0gIC8qIFBJQyBzdXBwb3J0IG1hY3JvcyBmb3IgZnRtb2RhcGkuaCAqKi8KLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Nb2R1bGVfQ3JlYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIChhbGxvY2F0ZSkgYSBuZXcgbW9kdWxlIGNsYXNzIG9iamVjdC4gICAgKi8KLSAgLyogICAgVGhlIG9iamVjdCdzIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkLCBidXQgdGhlIG1vZHVsZSBpdHNlbGYgaXMgICAgICovCi0gIC8qICAgIG5vdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgbWVtb3J5IG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdXRwdXRfY2xhc3MgOjogSW5pdGlhbGl6ZWQgd2l0aCB0aGUgbmV3bHkgYWxsb2NhdGVkIGNsYXNzLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHR5cGVkZWYgRlRfRXJyb3IKLSAgKCpGVF9Nb2R1bGVfQ3JlYXRvcikoIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqKiAgb3V0cHV0X2NsYXNzICk7Ci0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlX0Rlc3Ryb3llciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGRlc3Ryb3kgKGRlYWxsb2NhdGUpIGEgbW9kdWxlIGNsYXNzIG9iamVjdC4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5IDo6IEEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNsYXp6ICA6OiBNb2R1bGUgY2xhc3MgdG8gZGVzdHJveS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdHlwZWRlZiB2b2lkCi0gICgqRlRfTW9kdWxlX0Rlc3Ryb3llcikoIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKTsKLQotI2VuZGlmCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUNMQVJFX01PRFVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2VkIHRvIGNyZWF0ZSBhIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgYSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTW9kdWxlX0NsYXNzIHN0cnVjdCBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8TWFjcm8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfREVGSU5FX01PRFVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGFuIEZUX01vZHVsZV9DbGFzcyBzdHJ1Y3QuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYSBgY3JlYXRlJyBmdW5jdGlvbiBuZWVkcyAgICAgKi8KLSAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAgICAgICovCi0gIC8qICAgIHJldHVybmVkLiAgQW5kIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhIGBkZXN0cm95JyBmdW5jdGlvbiAgICAqLwotICAvKiAgICBuZWVkcyB0byBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYGZ0aW5pdC5jJyAoZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMpIGFscmVhZHkgY29udGFpbnMgICAgICovCi0gIC8qICAgIGEgbWVjaGFuaXNtIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGZvciB0aGUgZGVmYXVsdCBtb2R1bGVzICAgICAgICAqLwotICAvKiAgICBkZXNjcmliZWQgaW4gYGZ0bW9kdWxlLmgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGljZSB0aGF0IHRoZSBjcmVhdGVkIGBjcmVhdGUnIGFuZCBgZGVzdHJveScgZnVuY3Rpb25zIGNhbGwgICAgICAqLwotICAvKiAgICBgcGljX2luaXQnIGFuZCBgcGljX2ZyZWUnIHRvIGFsbG93IHlvdSB0byBtYW51YWxseSBhbGxvY2F0ZSBhbmQgICAgKi8KLSAgLyogICAgaW5pdGlhbGl6ZSBhbnkgYWRkaXRpb25hbCBnbG9iYWwgZGF0YSwgbGlrZSBhIG1vZHVsZSBzcGVjaWZpYyAgICAgICovCi0gIC8qICAgIGludGVyZmFjZSwgYW5kIHB1dCB0aGVtIGluIHRoZSBnbG9iYWwgcGljIGNvbnRhaW5lciBkZWZpbmVkIGluICAgICAqLwotICAvKiAgICBgZnRwaWMuaCcuICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGVtIGp1c3QgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgYXMgKi8KLSAgLyogICAgZW1wdHkgdG8gcmVzb2x2ZSB0aGUgbGluayBlcnJvci4gIEFsc28gdGhlIGBwaWNfaW5pdCcgYW5kICAgICAgICAgICovCi0gIC8qICAgIGBwaWNfZnJlZScgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWNsYXJlZCBpbiBgcGljLmgnLCB0byBiZSByZWZlcnJlZCAqLwotICAvKiAgICBieSB0aGUgbW9kdWxlIGRlZmluaXRpb24gY2FsbGluZyBgRlRfREVGSU5FX01PRFVMRScgaW4gdGhlICAgICAgICAgKi8KLSAgLyogICAgZm9sbG93aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIG5vdCBkZWZpbmVkIHRoZSBzdHJ1Y3Qgd2lsbCBiZSAgICAgICAgKi8KLSAgLyogICAgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZSB3aGVyZSB0aGUgbWFjcm8gICAgICAgICovCi0gIC8qICAgIGlzIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9ST09UX01PRFVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBhbiBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0IGluc2lkZSAqLwotICAvKiAgICBhbm90aGVyIHN0cnVjdCB0aGF0IGNvbnRhaW5zIGl0IG9yIGluIGEgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyAgKi8KLSAgLyogICAgdGhhdCBjb250YWluaW5nIHN0cnVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfREVDTEFSRV9NT0RVTEUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFVzZWQgdG8gY3JlYXRlIGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBhCisgICAqICAgRlRfTW9kdWxlX0NsYXNzIHN0cnVjdCBpbnN0YW5jZS4KKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0RFRklORV9NT0RVTEUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBhbiBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0LgorICAgKgorICAgKiAgIFRoZSBzdHJ1Y3Qgd2lsbCBiZSBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlCisgICAqICAgd2hlcmUgdGhlIG1hY3JvIGlzIHVzZWQpLgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfREVGSU5FX1JPT1RfTU9EVUxFCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgYW4gRlRfTW9kdWxlX0NsYXNzIHN0cnVjdCBpbnNpZGUKKyAgICogICBhbm90aGVyIHN0cnVjdCB0aGF0IGNvbnRhaW5zIGl0IG9yIGluIGEgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcworICAgKiAgIHRoYXQgY29udGFpbmluZyBzdHJ1Y3QuCisgICAqLwogI2RlZmluZSBGVF9ERUNMQVJFX01PRFVMRSggY2xhc3NfICkgIFwKICAgRlRfQ0FMTEJBQ0tfVEFCTEUgICAgICAgICAgICAgICAgICBcCiAgIGNvbnN0IEZUX01vZHVsZV9DbGFzcyAgY2xhc3NfOwpAQCAtMTUyMywxMDAgKzEyNTMsNiBAQAogICB9OwogCiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVDTEFSRV9NT0RVTEUoIGNsYXNzXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICBsaWJyYXJ5LCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyoqICBvdXRwdXRfY2xhc3MgKTsgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqICBjbGF6eiApOwotCi0jZGVmaW5lIEZUX0RFRklORV9ST09UX01PRFVMRSggICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZsYWdzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbmFtZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHZlcnNpb25fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X2ludGVyZmFjZV8gKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5yb290Lm1vZHVsZV9mbGFncyAgICAgPSBmbGFnc187ICAgICAgICAgIFwKLSAgICBjbGF6ei0+cm9vdC5tb2R1bGVfc2l6ZSAgICAgID0gc2l6ZV87ICAgICAgICAgICBcCi0gICAgY2xhenotPnJvb3QubW9kdWxlX25hbWUgICAgICA9IG5hbWVfOyAgICAgICAgICAgXAotICAgIGNsYXp6LT5yb290Lm1vZHVsZV92ZXJzaW9uICAgPSB2ZXJzaW9uXzsgICAgICAgIFwKLSAgICBjbGF6ei0+cm9vdC5tb2R1bGVfcmVxdWlyZXMgID0gcmVxdWlyZXNfOyAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5yb290Lm1vZHVsZV9pbnRlcmZhY2UgPSBpbnRlcmZhY2VfOyAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnJvb3QubW9kdWxlX2luaXQgICAgICA9IGluaXRfOyAgICAgICAgICAgXAotICAgIGNsYXp6LT5yb290Lm1vZHVsZV9kb25lICAgICAgPSBkb25lXzsgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cm9vdC5nZXRfaW50ZXJmYWNlICAgID0gZ2V0X2ludGVyZmFjZV87Ci0KLSNkZWZpbmUgRlRfREVGSU5FX01PRFVMRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZmxhZ3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIG5hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgdmVyc2lvbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICByZXF1aXJlc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGludGVyZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaW5pdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkb25lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdldF9pbnRlcmZhY2VfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5LCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01vZHVsZV9DbGFzcyogIGNsYXp6ICkgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGFzc18gIyMgX3BpY19mcmVlKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgIGxpYnJhcnksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqKiAgb3V0cHV0X2NsYXNzICkgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKSApICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXJyb3IgPSBjbGFzc18gIyMgX3BpY19pbml0KCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGVycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bW9kdWxlX2ZsYWdzICAgICA9IGZsYWdzXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5tb2R1bGVfc2l6ZSAgICAgID0gc2l6ZV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPm1vZHVsZV9uYW1lICAgICAgPSBuYW1lXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bW9kdWxlX3ZlcnNpb24gICA9IHZlcnNpb25fOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5tb2R1bGVfcmVxdWlyZXMgID0gcmVxdWlyZXNfOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bW9kdWxlX2ludGVyZmFjZSA9IGludGVyZmFjZV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPm1vZHVsZV9pbml0ICAgICAgPSBpbml0XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bW9kdWxlX2RvbmUgICAgICA9IGRvbmVfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfaW50ZXJmYWNlICAgID0gZ2V0X2ludGVyZmFjZV87ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBGVE9CSlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxNGYwNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgKGRlY2xhcmF0aW9uKS4gICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIE1vZHVsZXMgdGhhdCBvcmRpbmFyaWx5IGhhdmUgY29uc3QgZ2xvYmFsIGRhdGEgdGhhdCBuZWVkIGFkZHJlc3MgICAgICovCi0gIC8qICBjYW4gaW5zdGVhZCBkZWZpbmUgcG9pbnRlcnMgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBGVFBJQ19IXwotI2RlZmluZSBGVFBJQ19IXwotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICB0eXBlZGVmIHN0cnVjdCAgRlRfUElDX0NvbnRhaW5lcl8KLSAgewotICAgIC8qIHBpYyBjb250YWluZXJzIGZvciBiYXNlICovCi0gICAgdm9pZCogIGJhc2U7Ci0KLSAgICAvKiBwaWMgY29udGFpbmVycyBmb3IgbW9kdWxlcyAqLwotICAgIHZvaWQqICBhdXRvZml0OwotICAgIHZvaWQqICBjZmY7Ci0gICAgdm9pZCogIHBzaGludGVyOwotICAgIHZvaWQqICBwc25hbWVzOwotICAgIHZvaWQqICByYXN0ZXI7Ci0gICAgdm9pZCogIHNmbnQ7Ci0gICAgdm9pZCogIHNtb290aDsKLSAgICB2b2lkKiAgdHJ1ZXR5cGU7Ci0KLSAgfSBGVF9QSUNfQ29udGFpbmVyOwotCi0KLSAgLyogSW5pdGlhbGl6ZSB0aGUgdmFyaW91cyBmdW5jdGlvbiB0YWJsZXMsIHN0cnVjdHMsIGV0Yy4gKi8KLSAgLyogc3RvcmVkIGluIHRoZSBjb250YWluZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfQkFTRSggRlRfRXJyb3IgKQotICBmdF9waWNfY29udGFpbmVyX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotCi0gIC8qIERlc3Ryb3kgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIuICovCi0gIEZUX0JBU0UoIHZvaWQgKQotICBmdF9waWNfY29udGFpbmVyX2Rlc3Ryb3koIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAvKiAqLwotCi1GVF9FTkRfSEVBREVSCi0KLSNlbmRpZiAvKiBGVFBJQ19IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oCmluZGV4IGFiYmI2MjguLmRkMDU4OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwc3Byb3AuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cHNwcm9wLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBHZXQgYW5kIHNldCBwcm9wZXJ0aWVzIG9mIFBvc3RTY3JpcHQgZHJpdmVycyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cHNwcm9wLmgKKyAqCisgKiAgIEdldCBhbmQgc2V0IHByb3BlcnRpZXMgb2YgUG9zdFNjcmlwdCBkcml2ZXJzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxNy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFBTUFJPUF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaAppbmRleCAxYWNhNDhhLi5hMDU2MTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cmZvcmsuaApAQCAtMSwyNCArMSwyNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRyZm9yay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEVtYmVkZGVkIHJlc291cmNlIGZvcmtzIGFjY2Vzc29yIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRyZm9yay5oCisgKgorICogICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGV2ZWxvcG1lbnQgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIHN1cHBvcnQgb2YgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERldmVsb3BtZW50IG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBzdXBwb3J0IG9mCisgKiBJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuLgorICovCiAKIAogI2lmbmRlZiBGVFJGT1JLX0hfCkBAIC04MCw3NyArODAsNTcgQEAKICAgICBGVF9SRm9ya19SdWxlICAgICAgICAgIHR5cGU7CiAgIH0gZnRfcmFjY2Vzc19ndWVzc19yZWM7CiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIAotICAvKiB0aGlzIGFycmF5IGlzIGEgc3RvcmFnZSBpbiBub24tUElDIG1vZGUsIHNvIDsgaXMgbmVlZGVkIGluIEVORCAqLwogI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0JFR0lOKCBuYW1lLCB0eXBlICkgIFwKICAgICAgICAgICBzdGF0aWMgY29uc3QgdHlwZSBuYW1lW10gPSB7CiAjZGVmaW5lIENPTlNUX0ZUX1JGT1JLX1JVTEVfQVJSQVlfRU5UUlkoIGZ1bmNfc3VmZml4LCB0eXBlX3N1ZmZpeCApICBcCiAgICAgICAgICAgeyByYWNjZXNzX2d1ZXNzXyAjIyBmdW5jX3N1ZmZpeCwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBGVF9SRm9ya19SdWxlXyAjIyB0eXBlX3N1ZmZpeCB9LAorICAvKiB0aGlzIGFycmF5IGlzIGEgc3RvcmFnZSwgdGh1cyBhIGZpbmFsIGA7JyBpcyBuZWVkZWQgKi8KICNkZWZpbmUgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9FTkQgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAgLyogdGhpcyBhcnJheSBpcyBhIGZ1bmN0aW9uIGluIFBJQyBtb2RlLCBzbyBubyA7IGlzIG5lZWRlZCBpbiBFTkQgKi8KLSNkZWZpbmUgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9CRUdJTiggbmFtZSwgdHlwZSApICBcCi0gICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIEZUX0luaXRfVGFibGVfICMjIG5hbWUoIHR5cGUqICBzdG9yYWdlICkgICAgIFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0eXBlKiAgbG9jYWwgPSBzdG9yYWdlOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpbnQgIGkgPSAwOwotI2RlZmluZSBDT05TVF9GVF9SRk9SS19SVUxFX0FSUkFZX0VOVFJZKCBmdW5jX3N1ZmZpeCwgdHlwZV9zdWZmaXggKSAgXAotICAgICAgICAgIGxvY2FsW2ldLmZ1bmMgPSByYWNjZXNzX2d1ZXNzXyAjIyBmdW5jX3N1ZmZpeDsgICAgICAgICAgICAgXAotICAgICAgICAgIGxvY2FsW2ldLnR5cGUgPSBGVF9SRm9ya19SdWxlXyAjIyB0eXBlX3N1ZmZpeDsgICAgICAgICAgICAgXAotICAgICAgICAgIGkrKzsKLSNkZWZpbmUgQ09OU1RfRlRfUkZPUktfUlVMRV9BUlJBWV9FTkQgIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYWNjZXNzX0d1ZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHdWVzcyBhIGZpbGUgbmFtZSBhbmQgb2Zmc2V0IHdoZXJlIHRoZSBhY3R1YWwgcmVzb3VyY2UgZm9yayBpcyAgICAgKi8KLSAgLyogICAgc3RvcmVkLiAgVGhlIG1hY3JvIEZUX1JBQ0NFU1NfTl9SVUxFUyBob2xkcyB0aGUgbnVtYmVyIG9mICAgICAgICAgICovCi0gIC8qICAgIGd1ZXNzaW5nIHJ1bGVzOyAgdGhlIGd1ZXNzZWQgcmVzdWx0IGZvciB0aGUgTnRoIHJ1bGUgaXMgICAgICAgICAgICAqLwotICAvKiAgICByZXByZXNlbnRlZCBhcyBhIHRyaXBsZXQ6IGEgbmV3IGZpbGUgbmFtZSAobmV3X25hbWVzW05dKSwgYSBmaWxlICAgKi8KLSAgLyogICAgb2Zmc2V0IChvZmZzZXRzW05dKSwgYW5kIGFuIGVycm9yIGNvZGUgKGVycm9yc1tOXSkuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBmaWxlIHN0cmVhbSBjb250YWluaW5nIHRoZSByZXNvdXJjZSBmb3JrLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmFzZV9uYW1lIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIChiYXNlKSBmaWxlIG5hbWUgb2YgdGhlIHJlc291cmNlIGZvcmsgdXNlZCBmb3Igc29tZSAgICAgICAgICAqLwotICAvKiAgICAgIGd1ZXNzaW5nIHJ1bGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuZXdfbmFtZXMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBbiBhcnJheSBvZiBndWVzc2VkIGZpbGUgbmFtZXMgaW4gd2hpY2ggdGhlIHJlc291cmNlIGZvcmtzIG1heSAgICovCi0gIC8qICAgICAgZXhpc3QuICBJZiBgbmV3X25hbWVzW05dJyBpcyBOVUxMLCB0aGUgZ3Vlc3NlZCBmaWxlIG5hbWUgaXMgICAgICAqLwotICAvKiAgICAgIGVxdWFsIHRvIGBiYXNlX25hbWUnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG9mZnNldHMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEFuIGFycmF5IG9mIGd1ZXNzZWQgZmlsZSBvZmZzZXRzLiAgYG9mZnNldHNbTl0nIGhvbGRzIHRoZSBmaWxlICAgKi8KLSAgLyogICAgICBvZmZzZXQgb2YgdGhlIHBvc3NpYmxlIHN0YXJ0IG9mIHRoZSByZXNvdXJjZSBmb3JrIGluIGZpbGUgICAgICAgICovCi0gIC8qICAgICAgYG5ld19uYW1lc1tOXScuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZXJyb3JzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQW4gYXJyYXkgb2YgRnJlZVR5cGUgZXJyb3IgY29kZXMuICBgZXJyb3JzW05dJyBpcyB0aGUgZXJyb3IgICAgICAqLwotICAvKiAgICAgIGNvZGUgb2YgTnRoIGd1ZXNzaW5nIHJ1bGUgZnVuY3Rpb24uICBJZiBgZXJyb3JzW05dJyBpcyBub3QgICAgICAgKi8KLSAgLyogICAgICBGVF9FcnJfT2ssIGBuZXdfbmFtZXNbTl0nIGFuZCBgb2Zmc2V0c1tOXScgYXJlIG1lYW5pbmdsZXNzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0aW9uOgorICAgKiAgIEZUX1JhY2Nlc3NfR3Vlc3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEd1ZXNzIGEgZmlsZSBuYW1lIGFuZCBvZmZzZXQgd2hlcmUgdGhlIGFjdHVhbCByZXNvdXJjZSBmb3JrIGlzCisgICAqICAgc3RvcmVkLiAgVGhlIG1hY3JvIEZUX1JBQ0NFU1NfTl9SVUxFUyBob2xkcyB0aGUgbnVtYmVyIG9mCisgICAqICAgZ3Vlc3NpbmcgcnVsZXM7ICB0aGUgZ3Vlc3NlZCByZXN1bHQgZm9yIHRoZSBOdGggcnVsZSBpcworICAgKiAgIHJlcHJlc2VudGVkIGFzIGEgdHJpcGxldDogYSBuZXcgZmlsZSBuYW1lIChuZXdfbmFtZXNbTl0pLCBhIGZpbGUKKyAgICogICBvZmZzZXQgKG9mZnNldHNbTl0pLCBhbmQgYW4gZXJyb3IgY29kZSAoZXJyb3JzW05dKS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgZmlsZSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmVzb3VyY2UgZm9yay4KKyAgICoKKyAgICogICBiYXNlX25hbWUgOjoKKyAgICogICAgIFRoZSAoYmFzZSkgZmlsZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBmb3JrIHVzZWQgZm9yIHNvbWUKKyAgICogICAgIGd1ZXNzaW5nIHJ1bGVzLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIG5ld19uYW1lcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgZ3Vlc3NlZCBmaWxlIG5hbWVzIGluIHdoaWNoIHRoZSByZXNvdXJjZSBmb3JrcyBtYXkKKyAgICogICAgIGV4aXN0LiAgSWYgYG5ld19uYW1lc1tOXScgaXMgTlVMTCwgdGhlIGd1ZXNzZWQgZmlsZSBuYW1lIGlzCisgICAqICAgICBlcXVhbCB0byBgYmFzZV9uYW1lJy4KKyAgICoKKyAgICogICBvZmZzZXRzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBndWVzc2VkIGZpbGUgb2Zmc2V0cy4gIGBvZmZzZXRzW05dJyBob2xkcyB0aGUgZmlsZQorICAgKiAgICAgb2Zmc2V0IG9mIHRoZSBwb3NzaWJsZSBzdGFydCBvZiB0aGUgcmVzb3VyY2UgZm9yayBpbiBmaWxlCisgICAqICAgICBgbmV3X25hbWVzW05dJy4KKyAgICoKKyAgICogICBlcnJvcnMgOjoKKyAgICogICAgIEFuIGFycmF5IG9mIEZyZWVUeXBlIGVycm9yIGNvZGVzLiAgYGVycm9yc1tOXScgaXMgdGhlIGVycm9yCisgICAqICAgICBjb2RlIG9mIE50aCBndWVzc2luZyBydWxlIGZ1bmN0aW9uLiAgSWYgYGVycm9yc1tOXScgaXMgbm90CisgICAqICAgICBGVF9FcnJfT2ssIGBuZXdfbmFtZXNbTl0nIGFuZCBgb2Zmc2V0c1tOXScgYXJlIG1lYW5pbmdsZXNzLgorICAgKi8KICAgRlRfQkFTRSggdm9pZCApCiAgIEZUX1JhY2Nlc3NfR3Vlc3MoIEZUX0xpYnJhcnkgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgIHN0cmVhbSwKQEAgLTE2MCwzNyArMTQwLDM3IEBACiAgICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgIGVycm9ycyApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR2V0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFkZXIgb2YgcmVzb3VyY2UgZm9yay4gIFRoZSAgICAgICAgICovCi0gIC8qICAgIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgbWFwICAgICAgICAqLwotICAvKiAgICBzdGFydHMsIGFuZCB0aGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIGRhdGEgc3RhcnRzLiAgICAgICAgKi8KLSAgLyogICAgYEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzJyByZXF1aXJlcyB0aGVzZSB0d28gZGF0YS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGlicmFyeSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBmaWxlIHN0cmVhbSBjb250YWluaW5nIHRoZSByZXNvdXJjZSBmb3JrLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmZvcmtfb2Zmc2V0IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBmb3JrIHN0YXJ0cy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hcF9vZmZzZXQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgbWFwIHN0YXJ0cy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJkYXRhX3BvcyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgZGF0YSBzdGFydHMuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgRlRfRXJyX09rIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgR2V0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFkZXIgb2YgcmVzb3VyY2UgZm9yay4gIFRoZQorICAgKiAgIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgbWFwCisgICAqICAgc3RhcnRzLCBhbmQgdGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBkYXRhIHN0YXJ0cy4KKyAgICogICBgRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMnIHJlcXVpcmVzIHRoZXNlIHR3byBkYXRhLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbGlicmFyeSA6OgorICAgKiAgICAgQSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlLgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgQSBmaWxlIHN0cmVhbSBjb250YWluaW5nIHRoZSByZXNvdXJjZSBmb3JrLgorICAgKgorICAgKiAgIHJmb3JrX29mZnNldCA6OgorICAgKiAgICAgVGhlIGZpbGUgb2Zmc2V0IHdoZXJlIHRoZSByZXNvdXJjZSBmb3JrIHN0YXJ0cy4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBtYXBfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIG1hcCBzdGFydHMuCisgICAqCisgICAqICAgcmRhdGFfcG9zIDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIGRhdGEgc3RhcnRzLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICBGVF9FcnJfT2sgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0JBU0UoIEZUX0Vycm9yICkKICAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyggRlRfTGlicmFyeSAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLApAQCAtMTk5LDU1ICsxNzksNTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmRhdGFfcG9zICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHZXQgdGhlIGRhdGEgb2Zmc2V0cyBmb3IgYSB0YWcgaW4gYSByZXNvdXJjZSBmb3JrLiAgT2Zmc2V0cyBhcmUgICAgKi8KLSAgLyogICAgc3RvcmVkIGluIGFuIGFycmF5IGJlY2F1c2UsIGluIHNvbWUgY2FzZXMsIHJlc291cmNlcyBpbiBhIHJlc291cmNlICovCi0gIC8qICAgIGZvcmsgaGF2ZSB0aGUgc2FtZSB0YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxpYnJhcnkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgZmlsZSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmVzb3VyY2UgZm9yay4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1hcF9vZmZzZXQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgbWFwIHN0YXJ0cy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJkYXRhX3BvcyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmaWxlIG9mZnNldCB3aGVyZSB0aGUgcmVzb3VyY2UgZGF0YSBzdGFydHMuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhZyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSByZXNvdXJjZSB0YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNvcnRfYnlfcmVzX2lkIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgQm9vbGVhbiB0byBzb3J0IHRoZSBmcmFnbWVudGVkIHJlc291cmNlIGJ5IHRoZWlyIGlkcy4gICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgZnJhZ21lbnRlZCByZXNvdXJjZXMgZm9yIGBQT1NUJyByZXNvdXJjZSBzaG91bGQgYmUgc29ydGVkICAgICovCi0gIC8qICAgICAgdG8gcmVzdG9yZSBUeXBlMSBmb250IHByb3Blcmx5LiAgRm9yIGBzZm50JyByZXNvdXJjZXMsIHNvcnRpbmcgICAqLwotICAvKiAgICAgIG1heSBpbmR1Y2UgYSBkaWZmZXJlbnQgb3JkZXIgb2YgdGhlIGZhY2VzIGluIGNvbXBhcmlzb24gdG8gdGhhdCAgKi8KLSAgLyogICAgICBieSBRdWlja0RyYXcgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb2Zmc2V0cyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHN0cmVhbSBvZmZzZXRzIGZvciB0aGUgcmVzb3VyY2UgZGF0YSBzcGVjaWZpZWQgYnkgYHRhZycuICAgICAqLwotICAvKiAgICAgIFRoaXMgYXJyYXkgaXMgYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlvbiwgc28geW91IGhhdmUgdG8gY2FsbCAgICAgKi8KLSAgLyogICAgICBAZnRfbWVtX2ZyZWUgYWZ0ZXIgdXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb3VudCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgbGVuZ3RoIG9mIG9mZnNldHMgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIEZUX0Vycl9PayBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm9ybWFsbHkgeW91IHNob3VsZCB1c2UgYEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8nIHRvIGdldCB0aGUgICAgICovCi0gIC8qICAgIHZhbHVlIGZvciBgbWFwX29mZnNldCcgYW5kIGByZGF0YV9wb3MnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgR2V0IHRoZSBkYXRhIG9mZnNldHMgZm9yIGEgdGFnIGluIGEgcmVzb3VyY2UgZm9yay4gIE9mZnNldHMgYXJlCisgICAqICAgc3RvcmVkIGluIGFuIGFycmF5IGJlY2F1c2UsIGluIHNvbWUgY2FzZXMsIHJlc291cmNlcyBpbiBhIHJlc291cmNlCisgICAqICAgZm9yayBoYXZlIHRoZSBzYW1lIHRhZy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxpYnJhcnkgOjoKKyAgICogICAgIEEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgZmlsZSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmVzb3VyY2UgZm9yay4KKyAgICoKKyAgICogICBtYXBfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIG1hcCBzdGFydHMuCisgICAqCisgICAqICAgcmRhdGFfcG9zIDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgd2hlcmUgdGhlIHJlc291cmNlIGRhdGEgc3RhcnRzLgorICAgKgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgVGhlIHJlc291cmNlIHRhZy4KKyAgICoKKyAgICogICBzb3J0X2J5X3Jlc19pZCA6OgorICAgKiAgICAgQSBCb29sZWFuIHRvIHNvcnQgdGhlIGZyYWdtZW50ZWQgcmVzb3VyY2UgYnkgdGhlaXIgaWRzLgorICAgKiAgICAgVGhlIGZyYWdtZW50ZWQgcmVzb3VyY2VzIGZvciBgUE9TVCcgcmVzb3VyY2Ugc2hvdWxkIGJlIHNvcnRlZAorICAgKiAgICAgdG8gcmVzdG9yZSBUeXBlMSBmb250IHByb3Blcmx5LiAgRm9yIGBzZm50JyByZXNvdXJjZXMsIHNvcnRpbmcKKyAgICogICAgIG1heSBpbmR1Y2UgYSBkaWZmZXJlbnQgb3JkZXIgb2YgdGhlIGZhY2VzIGluIGNvbXBhcmlzb24gdG8gdGhhdAorICAgKiAgICAgYnkgUXVpY2tEcmF3IEFQSS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBvZmZzZXRzIDo6CisgICAqICAgICBUaGUgc3RyZWFtIG9mZnNldHMgZm9yIHRoZSByZXNvdXJjZSBkYXRhIHNwZWNpZmllZCBieSBgdGFnJy4KKyAgICogICAgIFRoaXMgYXJyYXkgaXMgYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlvbiwgc28geW91IGhhdmUgdG8gY2FsbAorICAgKiAgICAgQGZ0X21lbV9mcmVlIGFmdGVyIHVzZS4KKyAgICoKKyAgICogICBjb3VudCA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiBvZmZzZXRzIGFycmF5LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICBGVF9FcnJfT2sgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgTm9ybWFsbHkgeW91IHNob3VsZCB1c2UgYEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8nIHRvIGdldCB0aGUKKyAgICogICB2YWx1ZSBmb3IgYG1hcF9vZmZzZXQnIGFuZCBgcmRhdGFfcG9zJy4KKyAgICovCiAgIEZUX0JBU0UoIEZUX0Vycm9yICkKICAgRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMoIEZUX0xpYnJhcnkgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICBzdHJlYW0sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaAppbmRleCBlMDFjMTY3Li4zZjQ5M2I1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKQEAgLTEsMzEgKzEsMzEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c2Vydi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgc2VydmljZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c2Vydi5oCisgKgorICogICBUaGUgRnJlZVR5cGUgc2VydmljZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIEVhY2ggbW9kdWxlIGNhbiBleHBvcnQgb25lIG9yIG1vcmUgYHNlcnZpY2VzJy4gIEVhY2ggc2VydmljZSBpcyAgICAgICovCi0gIC8qICBpZGVudGlmaWVkIGJ5IGEgY29uc3RhbnQgc3RyaW5nIGFuZCBtb2RlbGVkIGJ5IGEgcG9pbnRlcjsgdGhlIGxhdHRlciAqLwotICAvKiAgZ2VuZXJhbGx5IGNvcnJlc3BvbmRzIHRvIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZnVuY3Rpb24gcG9pbnRlcnMuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBOb3RlIHRoYXQgYSBzZXJ2aWNlJ3MgZGF0YSBjYW5ub3QgYmUgYSBtZXJlIGZ1bmN0aW9uIHBvaW50ZXIgYmVjYXVzZSAqLwotICAvKiAgaW4gQyBpdCBpcyBwb3NzaWJsZSB0aGF0IGZ1bmN0aW9uIHBvaW50ZXJzIG1pZ2h0IGJlIGltcGxlbWVudGVkICAgICAgKi8KLSAgLyogIGRpZmZlcmVudGx5IHRoYW4gZGF0YSBwb2ludGVycyAoZS5nLiA0OCBiaXRzIGluc3RlYWQgb2YgMzIpLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEVhY2ggbW9kdWxlIGNhbiBleHBvcnQgb25lIG9yIG1vcmUgYHNlcnZpY2VzJy4gIEVhY2ggc2VydmljZSBpcworICAgKiBpZGVudGlmaWVkIGJ5IGEgY29uc3RhbnQgc3RyaW5nIGFuZCBtb2RlbGVkIGJ5IGEgcG9pbnRlcjsgdGhlIGxhdHRlcgorICAgKiBnZW5lcmFsbHkgY29ycmVzcG9uZHMgdG8gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBmdW5jdGlvbiBwb2ludGVycy4KKyAgICoKKyAgICogTm90ZSB0aGF0IGEgc2VydmljZSdzIGRhdGEgY2Fubm90IGJlIGEgbWVyZSBmdW5jdGlvbiBwb2ludGVyIGJlY2F1c2UKKyAgICogaW4gQyBpdCBpcyBwb3NzaWJsZSB0aGF0IGZ1bmN0aW9uIHBvaW50ZXJzIG1pZ2h0IGJlIGltcGxlbWVudGVkCisgICAqIGRpZmZlcmVudGx5IHRoYW4gZGF0YSBwb2ludGVycyAoZS5nLiA0OCBiaXRzIGluc3RlYWQgb2YgMzIpLgorICAgKgorICAgKi8KIAogCiAjaWZuZGVmIEZUU0VSVl9IXwpAQCAtMzQsNyArMzQsOCBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotICAvKgorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKICAgICogQG1hY3JvOgogICAgKiAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFCiAgICAqCkBAIC04NSw3ICs4Niw4IEBACiAjZW5kaWYgLyogIUMrKyAqLwogCiAKLSAgLyoKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCiAgICAqIEBtYWNybzoKICAgICogICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UKICAgICoKQEAgLTE0NCw4ICsxNDYsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBfZGVzY3JpYmVfIGEgZ2l2ZW4gc2VydmljZQotICAgKiAgdG8gdGhlIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCB0byBidWlsZCBzaW1wbGUgc3RhdGljIHNlcnZpY2UgbGlzdHMuCisgICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gX2Rlc2NyaWJlXyBhIGdpdmVuIHNlcnZpY2UKKyAgICogdG8gdGhlIGxpYnJhcnkuICBUaGlzIGlzIHVzZWZ1bCB0byBidWlsZCBzaW1wbGUgc3RhdGljIHNlcnZpY2UgbGlzdHMuCiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfU2VydmljZURlc2NSZWNfCiAgIHsKQEAgLTE1NywzNSArMTU5LDI2IEBACiAgIHR5cGVkZWYgY29uc3QgRlRfU2VydmljZURlc2NSZWMqICBGVF9TZXJ2aWNlRGVzYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gYXJyYXkgb2YgRlRfU2VydmljZURlc2NSZWMgc3RydWN0dXJlcy4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bmN0aW9uIG5lZWRzIHRvICAqLwotICAvKiAgICBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gcmV0dXJuIGFuIGFsbG9jYXRlZCBhcnJheS4gIEFzIHNvb24gYXMgKi8KLSAgLyogICAgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgYSBgZGVzdHJveScgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIHRvICovCi0gIC8qICAgIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBtYW51YWxseSBjYWxsZWQgZnJvbSB0aGUgYHBpY19pbml0JyBhbmQgICovCi0gIC8qICAgIGBwaWNfZnJlZScgZnVuY3Rpb25zIG9mIHlvdXIgbW9kdWxlIChzZWUgRlRfREVGSU5FX01PRFVMRSkuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgYXJyYXkgd2lsbCBiZSAgICAgICAgICovCi0gIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvIGlzICAgICAqLwotICAvKiAgICB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxCisgICAqICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMgorICAgKiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzMKKyAgICogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0CisgICAqICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNQorICAgKiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzYKKyAgICogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM3CisgICAqICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDOAorICAgKiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzkKKyAgICogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxMAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGFycmF5IG9mIEZUX1NlcnZpY2VEZXNjUmVjIHN0cnVjdHVyZXMuCisgICAqCisgICAqICAgVGhlIGFycmF5IHdpbGwgYmUgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZQorICAgKiAgIHdoZXJlIHRoZSBtYWNybyBpcyB1c2VkKS4KKyAgICovCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzEoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xICkgICAgICAgICAgICAgICAgIFwKICAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICBjbGFzc19bXSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zNTYsNTA0ICszNDksMTUgQEAKICAgICB7IE5VTEwsIE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMSggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEgKSAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogMiApICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzIoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiApICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiAzICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IHNlcnZfaWRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzJdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMzKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zICkgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqIDQgKSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsyXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzNdLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elszXS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNCggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQgKSAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogNSApICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzJdLnNlcnZfaWQgICA9IHNlcnZfaWRfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsyXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbM10uc2Vydl9pZCAgID0gc2Vydl9pZF80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzNdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els0XS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNF0uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzUoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMywgc2Vydl9kYXRhXzMsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80LCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSApICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiA2ICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IHNlcnZfaWRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9pZCAgID0gc2Vydl9pZF8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzJdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elszXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbM10uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzRdLnNlcnZfaWQgICA9IHNlcnZfaWRfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els0XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNV0uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzVdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM2KCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF80LCBzZXJ2X2RhdGFfNCwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNSwgc2Vydl9kYXRhXzUsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzYsIHNlcnZfZGF0YV82ICkgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqIDcgKSApICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsyXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzNdLnNlcnZfaWQgICA9IHNlcnZfaWRfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elszXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNF0uc2Vydl9pZCAgID0gc2Vydl9pZF81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzRdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els1XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzZdLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els2XS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81LCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNywgc2Vydl9kYXRhXzcgKSAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogOCApICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzJdLnNlcnZfaWQgICA9IHNlcnZfaWRfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsyXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbM10uc2Vydl9pZCAgID0gc2Vydl9pZF80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzNdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els0XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzVdLnNlcnZfaWQgICA9IHNlcnZfaWRfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els1XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNl0uc2Vydl9pZCAgID0gc2Vydl9pZF83OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzZdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV83OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els3XS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbN10uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzgoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMywgc2Vydl9kYXRhXzMsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80LCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNiwgc2Vydl9kYXRhXzYsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzcsIHNlcnZfZGF0YV83LCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF84LCBzZXJ2X2RhdGFfOCApICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiA5ICkgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfaWQgICA9IHNlcnZfaWRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9pZCAgID0gc2Vydl9pZF8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzJdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elszXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbM10uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzRdLnNlcnZfaWQgICA9IHNlcnZfaWRfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els0XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNV0uc2Vydl9pZCAgID0gc2Vydl9pZF82OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzVdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV82OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els2XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzddLnNlcnZfaWQgICA9IHNlcnZfaWRfODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els3XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbOF0uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzhdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKm91dHB1dF9jbGFzcyA9IGNsYXp6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM5KCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8xLCBzZXJ2X2RhdGFfMSwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMiwgc2Vydl9kYXRhXzIsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzMsIHNlcnZfZGF0YV8zLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF80LCBzZXJ2X2RhdGFfNCwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNSwgc2Vydl9kYXRhXzUsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzYsIHNlcnZfZGF0YV82LCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF83LCBzZXJ2X2RhdGFfNywgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfOCwgc2Vydl9kYXRhXzgsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzksIHNlcnZfZGF0YV85ICkgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBjbGF6eiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRlRfRlJFRSggY2xhenogKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX01lbW9yeSAgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCAqY2xhenogKSAqIDEwICkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elswXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsyXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzNdLnNlcnZfaWQgICA9IHNlcnZfaWRfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elszXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNF0uc2Vydl9pZCAgID0gc2Vydl9pZF81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzRdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els1XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbNV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzZdLnNlcnZfaWQgICA9IHNlcnZfaWRfNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els2XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbN10uc2Vydl9pZCAgID0gc2Vydl9pZF84OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzddLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV84OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els4XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbOF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WzldLnNlcnZfaWQgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6els5XS5zZXJ2X2RhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMTAoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEsIHNlcnZfZGF0YV8xLCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8yLCBzZXJ2X2RhdGFfMiwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMywgc2Vydl9kYXRhXzMsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzQsIHNlcnZfZGF0YV80LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF81LCBzZXJ2X2RhdGFfNSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNiwgc2Vydl9kYXRhXzYsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzcsIHNlcnZfZGF0YV83LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF84LCBzZXJ2X2RhdGFfOCwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfOSwgc2Vydl9kYXRhXzksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzEwLCBzZXJ2X2RhdGFfMTAgKSAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApICAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogMTEgKSApICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDBdLnNlcnZfaWQgICA9IHNlcnZfaWRfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyAwXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgMV0uc2Vydl9pZCAgID0gc2Vydl9pZF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDFdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyAyXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgMl0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDNdLnNlcnZfaWQgICA9IHNlcnZfaWRfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyAzXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgNF0uc2Vydl9pZCAgID0gc2Vydl9pZF81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDRdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV81OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyA1XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgNV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDZdLnNlcnZfaWQgICA9IHNlcnZfaWRfNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyA2XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgN10uc2Vydl9pZCAgID0gc2Vydl9pZF84OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDddLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV84OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyA4XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsgOF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbIDldLnNlcnZfaWQgICA9IHNlcnZfaWRfMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6WyA5XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6elsxMF0uc2Vydl9pZCAgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenpbMTBdLnNlcnZfZGF0YSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogCiAgIC8qCi0gICAqICBQYXJzZSBhIGxpc3Qgb2YgRlRfU2VydmljZURlc2NSZWMgZGVzY3JpcHRvcnMgYW5kIGxvb2sgZm9yCi0gICAqICBhIHNwZWNpZmljIHNlcnZpY2UgYnkgSUQuICBOb3RlIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUKLSAgICogIGFycmF5IG11c3QgYmUgeyBOVUxMLCBOVUxMIH0sIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQKLSAgICogIHJldHVybiBOVUxMIGlmIHRoZSBzZXJ2aWNlIGlzbid0IGF2YWlsYWJsZS4KKyAgICogUGFyc2UgYSBsaXN0IG9mIEZUX1NlcnZpY2VEZXNjUmVjIGRlc2NyaXB0b3JzIGFuZCBsb29rIGZvcgorICAgKiBhIHNwZWNpZmljIHNlcnZpY2UgYnkgSUQuICBOb3RlIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUKKyAgICogYXJyYXkgbXVzdCBiZSB7IE5VTEwsIE5VTEwgfSwgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZAorICAgKiByZXR1cm4gTlVMTCBpZiB0aGUgc2VydmljZSBpc24ndCBhdmFpbGFibGUuCiAgICAqCi0gICAqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IG1vZHVsZXMgdG8gaW1wbGVtZW50IHRoZWlyCi0gICAqICBgZ2V0X3NlcnZpY2UnIG1ldGhvZC4KKyAgICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBtb2R1bGVzIHRvIGltcGxlbWVudCB0aGVpcgorICAgKiBgZ2V0X3NlcnZpY2UnIG1ldGhvZC4KICAgICovCiAgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQogICBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBGVF9TZXJ2aWNlRGVzYyAgc2VydmljZV9kZXNjcmlwdG9ycywKQEAgLTg2OSwxNiArMzczLDE2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIC8qCi0gICAqICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHN0b3JlIGEgY2FjaGUgZm9yIHNldmVyYWwgZnJlcXVlbnRseSB1c2VkCi0gICAqICBzZXJ2aWNlcy4gIEl0IGlzIHRoZSB0eXBlIG9mIGBmYWNlLT5pbnRlcm5hbC0+c2VydmljZXMnLiAgWW91Ci0gICAqICBzaG91bGQgb25seSB1c2UgRlRfRkFDRV9MT09LVVBfU0VSVklDRSB0byBhY2Nlc3MgaXQuCisgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3RvcmUgYSBjYWNoZSBmb3Igc2V2ZXJhbCBmcmVxdWVudGx5IHVzZWQKKyAgICogc2VydmljZXMuICBJdCBpcyB0aGUgdHlwZSBvZiBgZmFjZS0+aW50ZXJuYWwtPnNlcnZpY2VzJy4gIFlvdQorICAgKiBzaG91bGQgb25seSB1c2UgRlRfRkFDRV9MT09LVVBfU0VSVklDRSB0byBhY2Nlc3MgaXQuCiAgICAqCi0gICAqICBBbGwgZmllbGRzIHNob3VsZCBoYXZlIHRoZSB0eXBlIEZUX1BvaW50ZXIgdG8gcmVsYXggY29tcGlsYXRpb24KLSAgICogIGRlcGVuZGVuY2llcy4gIFdlIGFzc3VtZSB0aGUgZGV2ZWxvcGVyIGlzbid0IGNvbXBsZXRlbHkgc3R1cGlkLgorICAgKiBBbGwgZmllbGRzIHNob3VsZCBoYXZlIHRoZSB0eXBlIEZUX1BvaW50ZXIgdG8gcmVsYXggY29tcGlsYXRpb24KKyAgICogZGVwZW5kZW5jaWVzLiAgV2UgYXNzdW1lIHRoZSBkZXZlbG9wZXIgaXNuJ3QgY29tcGxldGVseSBzdHVwaWQuCiAgICAqCi0gICAqICBFYWNoIGZpZWxkIG11c3QgYmUgbmFtZWQgYHNlcnZpY2VfWFhYWCcgd2hlcmUgYFhYWCcgY29ycmVzcG9uZHMgdG8KLSAgICogIHRoZSBjb3JyZWN0IEZUX1NFUlZJQ0VfSURfWFhYWCBtYWNyby4gIFNlZSB0aGUgZGVmaW5pdGlvbiBvZgotICAgKiAgRlRfRkFDRV9MT09LVVBfU0VSVklDRSBiZWxvdyBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4KKyAgICogRWFjaCBmaWVsZCBtdXN0IGJlIG5hbWVkIGBzZXJ2aWNlX1hYWFgnIHdoZXJlIGBYWFgnIGNvcnJlc3BvbmRzIHRvCisgICAqIHRoZSBjb3JyZWN0IEZUX1NFUlZJQ0VfSURfWFhYWCBtYWNyby4gIFNlZSB0aGUgZGVmaW5pdGlvbiBvZgorICAgKiBGVF9GQUNFX0xPT0tVUF9TRVJWSUNFIGJlbG93IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLgogICAgKgogICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NlcnZpY2VDYWNoZVJlY18KQEAgLTg5NCwxNCArMzk4LDE1IEBACiAKIAogICAvKgotICAgKiAgQSBtYWdpYyBudW1iZXIgdXNlZCB3aXRoaW4gdGhlIHNlcnZpY2VzIGNhY2hlLgorICAgKiBBIG1hZ2ljIG51bWJlciB1c2VkIHdpdGhpbiB0aGUgc2VydmljZXMgY2FjaGUuCiAgICAqLwogCiAgIC8qIGVuc3VyZSB0aGF0IHZhbHVlIGAxJyBoYXMgdGhlIHNhbWUgd2lkdGggYXMgYSBwb2ludGVyICovCiAjZGVmaW5lIEZUX1NFUlZJQ0VfVU5BVkFJTEFCTEUgICgoRlRfUG9pbnRlcil+KEZUX1B0ckRpc3QpMSkKIAogCi0gIC8qCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgogICAgKiBAbWFjcm86CiAgICAqICAgRlRfRkFDRV9MT09LVVBfU0VSVklDRQogICAgKgpAQCAtOTEwLDcgKzQxNSw3IEBACiAgICAqICAgdXNpbmcgaXRzIGNhY2hlLgogICAgKgogICAgKiBAaW5wdXQ6Ci0gICAqICAgZmFjZTo6CisgICAqICAgZmFjZSA6OgogICAgKiAgICAgVGhlIHNvdXJjZSBmYWNlIGhhbmRsZSBjb250YWluaW5nIHRoZSBjYWNoZS4KICAgICoKICAgICogICBmaWVsZCA6OgpAQCAtOTY5LDcgKzQ3NCw3IEBACiAjZW5kaWYgLyogIUMrKyAqLwogCiAgIC8qCi0gICAqICBBIG1hY3JvIHVzZWQgdG8gZGVmaW5lIG5ldyBzZXJ2aWNlIHN0cnVjdHVyZSB0eXBlcy4KKyAgICogQSBtYWNybyB1c2VkIHRvIGRlZmluZSBuZXcgc2VydmljZSBzdHJ1Y3R1cmUgdHlwZXMuCiAgICAqLwogCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFKCBuYW1lICkgICAgICAgICAgICBcCkBAIC05ODIsNyArNDg3LDcgQEAKICAgLyogKi8KIAogICAvKgotICAgKiAgVGhlIGhlYWRlciBmaWxlcyBjb250YWluaW5nIHRoZSBzZXJ2aWNlcy4KKyAgICogVGhlIGhlYWRlciBmaWxlcyBjb250YWluaW5nIHRoZSBzZXJ2aWNlcy4KICAgICovCiAKICNkZWZpbmUgRlRfU0VSVklDRV9CREZfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaAppbmRleCBmOTAwMDJmLi5hYWY4ZTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHN0cmVhbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU3RyZWFtIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHN0cmVhbS5oCisgKgorICogICBTdHJlYW0gaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUU1RSRUFNX0hfCkBAIC0xNDcsMTEgKzE0NywxMSBAQAogI2RlZmluZSBGVF9GUkFNRV9TS0lQX0JZVEVTKCBjb3VudCApICB7IGZ0X2ZyYW1lX3NraXAsIGNvdW50LCAwIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW50ZWdlciBleHRyYWN0aW9uIG1hY3JvcyAtLSB0aGUgYGJ1ZmZlcicgcGFyYW1ldGVyIG11c3QgQUxXQVlTIGJlIG9mICovCi0gIC8qIHR5cGUgYGNoYXIqJyBvciBlcXVpdmFsZW50ICgxLWJ5dGUgZWxlbWVudHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEludGVnZXIgZXh0cmFjdGlvbiBtYWNyb3MgLS0gdGhlIGBidWZmZXInIHBhcmFtZXRlciBtdXN0IEFMV0FZUyBiZSBvZgorICAgKiB0eXBlIGBjaGFyKicgb3IgZXF1aXZhbGVudCAoMS1ieXRlIGVsZW1lbnRzKS4KKyAgICovCiAKICNkZWZpbmUgRlRfQllURV8oIHAsIGkgKSAgKCAoKGNvbnN0IEZUX0J5dGUqKShwKSlbKGkpXSApCiAKQEAgLTE2NSw2ICsxNjUsMTAgQEAKICNkZWZpbmUgRlRfQllURV9VMzIoIHAsIGksIHMgKSAgKCBGVF9VSU5UMzIoIEZUX0JZVEVfKCBwLCBpICkgKSA8PCAocykgKQogCiAKKyAgLyoKKyAgICogYEZUX1BFRUtfWFhYJyBhcmUgZ2VuZXJpYyBtYWNyb3MgdG8gZ2V0IGRhdGEgZnJvbSBhIGJ1ZmZlciBwb3NpdGlvbi4KKyAgICogTm8gc2FmZXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkLgorICAgKi8KICNkZWZpbmUgRlRfUEVFS19TSE9SVCggcCApICBGVF9JTlQxNiggRlRfQllURV9VMTYoIHAsIDAsIDggKSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMTYoIHAsIDEsIDAgKSApCiAKQEAgLTIxMyw3ICsyMTcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0JZVEVfVTMyKCBwLCAxLCAgOCApIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMzIoIHAsIDAsICAwICkgKQogCi0KKyAgLyoKKyAgICogYEZUX05FWFRfWFhYJyBhcmUgZ2VuZXJpYyBtYWNyb3MgdG8gZ2V0IGRhdGEgZnJvbSBhIGJ1ZmZlciBwb3NpdGlvbgorICAgKiB3aGljaCBpcyB0aGVuIGluY3JlYXNlZCBhcHByb3ByaWF0ZWx5LiAgTm8gc2FmZXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkLgorICAgKi8KICNkZWZpbmUgRlRfTkVYVF9DSEFSKCBidWZmZXIgKSAgICAgICBcCiAgICAgICAgICAgKCAoc2lnbmVkIGNoYXIpKmJ1ZmZlcisrICkKIApAQCAtMjU4LDEwICsyNjUsMTQgQEAKICAgICAgICAgICAoICh1bnNpZ25lZCBsb25nKSggYnVmZmVyICs9IDQsIEZUX1BFRUtfVUxPTkdfTEUoIGJ1ZmZlciAtIDQgKSApICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRWFjaCBHRVRfeHh4eCgpIG1hY3JvIHVzZXMgYW4gaW1wbGljaXQgYHN0cmVhbScgdmFyaWFibGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIGBGVF9HRVRfWFhYJyBtYWNyb3MgdXNlIGFuIGltcGxpY2l0IGBzdHJlYW0nIHZhcmlhYmxlLgorICAgKgorICAgKiBOb3RlIHRoYXQgYSBjYWxsIHRvIGBGVF9TVFJFQU1fU0VFSycgb3IgYEZUX1NUUkVBTV9QT1MnIGhhcyAqbm8qIGVmZmVjdAorICAgKiBvbiBgRlRfR0VUX1hYWCchICBUaGV5IG9wZXJhdGUgb24gYHN0cmVhbS0+cG9zJywgd2hpbGUgYEZUX0dFVF9YWFgnIHVzZQorICAgKiBgc3RyZWFtLT5jdXJzb3InLgorICAgKi8KICNpZiAwCiAjZGVmaW5lIEZUX0dFVF9NQUNSTyggdHlwZSApICAgIEZUX05FWFRfICMjIHR5cGUgKCBzdHJlYW0tPmN1cnNvciApCiAKQEAgLTI5OSwxMCArMzEwLDE4IEBACiAjZGVmaW5lIEZUX0dFVF9VTE9OR19MRSgpICAgRlRfR0VUX01BQ1JPKCBGVF9TdHJlYW1fR2V0VUxvbmdMRSwgRlRfVUxvbmcgKQogI2VuZGlmCiAKKwogI2RlZmluZSBGVF9SRUFEX01BQ1JPKCBmdW5jLCB0eXBlLCB2YXIgKSAgICAgICAgXAogICAgICAgICAgICggdmFyID0gKHR5cGUpZnVuYyggc3RyZWFtLCAmZXJyb3IgKSwgXAogICAgICAgICAgICAgZXJyb3IgIT0gRlRfRXJyX09rICkKIAorICAvKgorICAgKiBUaGUgYEZUX1JFQURfWFhYJyBtYWNyb3MgdXNlIGltcGxpY2l0IGBzdHJlYW0nIGFuZCBgZXJyb3InIHZhcmlhYmxlcy4KKyAgICoKKyAgICogYEZUX1JFQURfWFhYJyBjYW4gYmUgY29udHJvbGxlZCB3aXRoIGBGVF9TVFJFQU1fU0VFSycgYW5kCisgICAqIGBGVF9TVFJFQU1fUE9TJy4gIFRoZXkgdXNlIHRoZSBmdWxsIG1hY2hpbmVyeSB0byBjaGVjayB3aGV0aGVyIGEgcmVhZAorICAgKiBpcyB2YWxpZC4KKyAgICovCiAjZGVmaW5lIEZUX1JFQURfQllURSggdmFyICkgICAgICAgRlRfUkVBRF9NQUNSTyggRlRfU3RyZWFtX1JlYWRDaGFyLCBGVF9CeXRlLCB2YXIgKQogI2RlZmluZSBGVF9SRUFEX0NIQVIoIHZhciApICAgICAgIEZUX1JFQURfTUFDUk8oIEZUX1N0cmVhbV9SZWFkQ2hhciwgRlRfQ2hhciwgdmFyICkKICNkZWZpbmUgRlRfUkVBRF9TSE9SVCggdmFyICkgICAgICBGVF9SRUFEX01BQ1JPKCBGVF9TdHJlYW1fUmVhZFVTaG9ydCwgRlRfU2hvcnQsIHZhciApCkBAIC0zODcsMTAgKzQwNiwxMCBAQAogCiAgIC8qIEVudGVyIGEgZnJhbWUgb2YgYGNvdW50JyBjb25zZWN1dGl2ZSBieXRlcyBpbiBhIHN0cmVhbS4gIFJldHVybnMgYW4gKi8KICAgLyogZXJyb3IgaWYgdGhlIGZyYW1lIGNvdWxkIG5vdCBiZSByZWFkL2FjY2Vzc2VkLiAgVGhlIGNhbGxlciBjYW4gdXNlICAqLwotICAvKiB0aGUgRlRfU3RyZWFtX0dldF9YWFggZnVuY3Rpb25zIHRvIHJldHJpZXZlIGZyYW1lIGRhdGEgd2l0aG91dCAgICAgICovCisgIC8qIHRoZSBgRlRfU3RyZWFtX0dldF9YWFgnIGZ1bmN0aW9ucyB0byByZXRyaWV2ZSBmcmFtZSBkYXRhIHdpdGhvdXQgICAgKi8KICAgLyogZXJyb3IgY2hlY2tzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFlvdSBtdXN0IF9hbHdheXNfIGNhbGwgRlRfU3RyZWFtX0V4aXRGcmFtZSgpIG9uY2UgeW91IGhhdmUgZW50ZXJlZCAgKi8KKyAgLyogWW91IG11c3QgX2Fsd2F5c18gY2FsbCBgRlRfU3RyZWFtX0V4aXRGcmFtZScgb25jZSB5b3UgaGF2ZSBlbnRlcmVkICAqLwogICAvKiBhIHN0cmVhbSBmcmFtZSEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfQkFTRSggRlRfRXJyb3IgKQpAQCAtNDE1LDcgKzQzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICk7CiAKLSAgLyogcmVsZWFzZSBhbiBleHRyYWN0IGZyYW1lIChzZWUgRlRfU3RyZWFtX0V4dHJhY3RGcmFtZSkgKi8KKyAgLyogcmVsZWFzZSBhbiBleHRyYWN0IGZyYW1lIChzZWUgYEZUX1N0cmVhbV9FeHRyYWN0RnJhbWUnKSAqLwogICBGVF9CQVNFKCB2b2lkICkKICAgRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSggRlRfU3RyZWFtICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcGJ5dGVzICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCmluZGV4IDgwOTJlNDEuLjc4YjczMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHRyYWNlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJhY2luZyBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHRyYWNlLmgKKyAqCisgKiAgIFRyYWNpbmcgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICAgLyogZGVmaW5pdGlvbnMgb2YgdHJhY2UgbGV2ZWxzIGZvciBGcmVlVHlwZSAyICovCkBAIC0yMywyMyArMjMsMjQgQEAKIAogICAvKiBiYXNlIGNvbXBvbmVudHMgKi8KIEZUX1RSQUNFX0RFRiggY2FsYyApICAgICAgLyogY2FsY3VsYXRpb25zICAgICAgICAgICAgKGZ0Y2FsYy5jKSAgICovCitGVF9UUkFDRV9ERUYoIGdsb2FkZXIgKSAgIC8qIGdseXBoIGxvYWRlciAgICAgICAgICAgIChmdGdsb2Fkci5jKSAqLworRlRfVFJBQ0VfREVGKCBnbHlwaCApICAgICAvKiBnbHlwaCBtYW5hZ2VtZW50ICAgICAgICAoZnRnbHlwaC5jKSAgKi8KIEZUX1RSQUNFX0RFRiggbWVtb3J5ICkgICAgLyogbWVtb3J5IG1hbmFnZXIgICAgICAgICAgKGZ0b2Jqcy5jKSAgICovCi1GVF9UUkFDRV9ERUYoIHN0cmVhbSApICAgIC8qIHN0cmVhbSBtYW5hZ2VyICAgICAgICAgIChmdHN0cmVhbS5jKSAqLworRlRfVFJBQ0VfREVGKCBpbml0ICkgICAgICAvKiBpbml0aWFsaXphdGlvbiAgICAgICAgICAoZnRpbml0LmMpICAgKi8KIEZUX1RSQUNFX0RFRiggaW8gKSAgICAgICAgLyogaS9vIGludGVyZmFjZSAgICAgICAgICAgKGZ0c3lzdGVtLmMpICovCiBGVF9UUkFDRV9ERUYoIGxpc3QgKSAgICAgIC8qIGxpc3QgbWFuYWdlbWVudCAgICAgICAgIChmdGxpc3QuYykgICAqLwotRlRfVFJBQ0VfREVGKCBpbml0ICkgICAgICAvKiBpbml0aWFsaXphdGlvbiAgICAgICAgICAoZnRpbml0LmMpICAgKi8KIEZUX1RSQUNFX0RFRiggb2JqcyApICAgICAgLyogYmFzZSBvYmplY3RzICAgICAgICAgICAgKGZ0b2Jqcy5jKSAgICovCiBGVF9UUkFDRV9ERUYoIG91dGxpbmUgKSAgIC8qIG91dGxpbmUgbWFuYWdlbWVudCAgICAgIChmdG91dGxuLmMpICAqLwotRlRfVFJBQ0VfREVGKCBnbHlwaCApICAgICAvKiBnbHlwaCBtYW5hZ2VtZW50ICAgICAgICAoZnRnbHlwaC5jKSAgKi8KLUZUX1RSQUNFX0RFRiggZ2xvYWRlciApICAgLyogZ2x5cGggbG9hZGVyICAgICAgICAgICAgKGZ0Z2xvYWRyLmMpICovCitGVF9UUkFDRV9ERUYoIHN0cmVhbSApICAgIC8qIHN0cmVhbSBtYW5hZ2VyICAgICAgICAgIChmdHN0cmVhbS5jKSAqLwogCitGVF9UUkFDRV9ERUYoIGJpdG1hcCApICAgIC8qIGJpdG1hcCBtYW5pcHVsYXRpb24gICAgIChmdGJpdG1hcC5jKSAqLworRlRfVFJBQ0VfREVGKCBjaGVja3N1bSApICAvKiBiaXRtYXAgY2hlY2tzdW0gICAgICAgICAoZnRvYmpzLmMpICAgKi8KK0ZUX1RSQUNFX0RFRiggbW0gKSAgICAgICAgLyogTU0gaW50ZXJmYWNlICAgICAgICAgICAgKGZ0bW0uYykgICAgICovCitGVF9UUkFDRV9ERUYoIHBzcHJvcHMgKSAgIC8qIFBTIGRyaXZlciBwcm9wZXJ0aWVzICAgIChmdHBzcHJvcC5jKSAqLworRlRfVFJBQ0VfREVGKCByYWNjZXNzICkgICAvKiByZXNvdXJjZSBmb3JrIGFjY2Vzc29yICAoZnRyZm9yay5jKSAgKi8KIEZUX1RSQUNFX0RFRiggcmFzdGVyICkgICAgLyogbW9ub2Nocm9tZSByYXN0ZXJpemVyICAgKGZ0cmFzdGVyLmMpICovCiBGVF9UUkFDRV9ERUYoIHNtb290aCApICAgIC8qIGFudGktYWxpYXNpbmcgcmFzdGVyICAgIChmdGdyYXlzLmMpICAqLwotRlRfVFJBQ0VfREVGKCBtbSApICAgICAgICAvKiBNTSBpbnRlcmZhY2UgICAgICAgICAgICAoZnRtbS5jKSAgICAgKi8KLUZUX1RSQUNFX0RFRiggcmFjY2VzcyApICAgLyogcmVzb3VyY2UgZm9yayBhY2Nlc3NvciAgKGZ0cmZvcmsuYykgICovCiBGVF9UUkFDRV9ERUYoIHN5bnRoICkgICAgIC8qIGJvbGQvc2xhbnQgc3ludGhlc2l6ZXIgIChmdHN5bnRoLmMpICAqLwotRlRfVFJBQ0VfREVGKCBiaXRtYXAgKSAgICAvKiBiaXRtYXAgY2hlY2tzdW0gICAgICAgICAoZnRvYmpzLmMpICAgKi8KLUZUX1RSQUNFX0RFRiggcHNwcm9wcyApICAgLyogUFMgZHJpdmVyIHByb3BlcnRpZXMgICAgKGZ0cHNwcm9wLmMpICovCiAKICAgLyogQ2FjaGUgc3ViLXN5c3RlbSAqLwogRlRfVFJBQ0VfREVGKCBjYWNoZSApICAgICAvKiBjYWNoZSBzdWItc3lzdGVtICAgICAgICAoZnRjYWNoZS5jLCBldGMuKSAqLwpAQCAtNDcsMjEgKzQ4LDIzIEBACiAgIC8qIFNGTlQgZHJpdmVyIGNvbXBvbmVudHMgKi8KIEZUX1RSQUNFX0RFRiggc2Zkcml2ZXIgKSAgLyogU0ZOVCBmb250IGRyaXZlciAgICAgICAgKHNmZHJpdmVyLmMpICovCiBGVF9UUkFDRV9ERUYoIHNmb2JqcyApICAgIC8qIFNGTlQgb2JqZWN0IGhhbmRsZXIgICAgIChzZm9ianMuYykgICAqLworRlRfVFJBQ0VfREVGKCB0dGJkZiApICAgICAvKiBUcnVlVHlwZSBlbWJlZGRlZCBCREYgICAodHRiZGYuYykgICAgKi8KIEZUX1RSQUNFX0RFRiggdHRjbWFwICkgICAgLyogY2hhcm1hcCBoYW5kbGVyICAgICAgICAgKHR0Y21hcC5jKSAgICovCitGVF9UUkFDRV9ERUYoIHR0Y29sciApICAgIC8qIGdseXBoIGxheWVyIHRhYmxlICAgICAgICh0dGNvbHIuYykgICAqLworRlRfVFJBQ0VfREVGKCB0dGNwYWwgKSAgICAvKiBjb2xvciBwYWxldHRlIHRhYmxlICAgICAodHRjcGFsLmMpICAgKi8KIEZUX1RSQUNFX0RFRiggdHRrZXJuICkgICAgLyoga2VybmluZyBoYW5kbGVyICAgICAgICAgKHR0a2Vybi5jKSAgICovCiBGVF9UUkFDRV9ERUYoIHR0bG9hZCApICAgIC8qIGJhc2ljIFRydWVUeXBlIHRhYmxlcyAgICh0dGxvYWQuYykgICAqLwogRlRfVFJBQ0VfREVGKCB0dG10eCApICAgICAvKiBtZXRyaWNzLXJlbGF0ZWQgdGFibGVzICAodHRtdHguYykgICAgKi8KIEZUX1RSQUNFX0RFRiggdHRwb3N0ICkgICAgLyogUFMgdGFibGUgcHJvY2Vzc2luZyAgICAgKHR0cG9zdC5jKSAgICovCiBGVF9UUkFDRV9ERUYoIHR0c2JpdCApICAgIC8qIFRydWVUeXBlIHNiaXQgaGFuZGxpbmcgICh0dHNiaXQuYykgICAqLwotRlRfVFJBQ0VfREVGKCB0dGJkZiApICAgICAvKiBUcnVlVHlwZSBlbWJlZGRlZCBCREYgICAodHRiZGYuYykgICAgKi8KIAogICAvKiBUcnVlVHlwZSBkcml2ZXIgY29tcG9uZW50cyAqLwogRlRfVFJBQ0VfREVGKCB0dGRyaXZlciApICAvKiBUVCBmb250IGRyaXZlciAgICAgICAgICAodHRkcml2ZXIuYykgKi8KIEZUX1RSQUNFX0RFRiggdHRnbG9hZCApICAgLyogVFQgZ2x5cGggbG9hZGVyICAgICAgICAgKHR0Z2xvYWQuYykgICovCitGVF9UUkFDRV9ERUYoIHR0Z3h2YXIgKSAgIC8qIFRydWVUeXBlIEdYIHZhciBoYW5kbGVyICh0dGd4dmFyLmMpICAqLwogRlRfVFJBQ0VfREVGKCB0dGludGVycCApICAvKiBieXRlY29kZSBpbnRlcnByZXRlciAgICAodHRpbnRlcnAuYykgKi8KIEZUX1RSQUNFX0RFRiggdHRvYmpzICkgICAgLyogVFQgb2JqZWN0cyBtYW5hZ2VyICAgICAgKHR0b2Jqcy5jKSAgICovCiBGVF9UUkFDRV9ERUYoIHR0cGxvYWQgKSAgIC8qIFRUIGRhdGEvcHJvZ3JhbSBsb2FkZXIgICh0dHBsb2FkLmMpICAqLwotRlRfVFJBQ0VfREVGKCB0dGd4dmFyICkgICAvKiBUcnVlVHlwZSBHWCB2YXIgaGFuZGxlciAodHRneHZhci5jKSAgKi8KIAogICAvKiBUeXBlIDEgZHJpdmVyIGNvbXBvbmVudHMgKi8KIEZUX1RSQUNFX0RFRiggdDFhZm0gKQpAQCAtNzIsMTQgKzc1LDE0IEBACiBGVF9UUkFDRV9ERUYoIHQxcGFyc2UgKQogCiAgIC8qIFBvc3RTY3JpcHQgaGVscGVyIG1vZHVsZSBgcHNhdXgnICovCi1GVF9UUkFDRV9ERUYoIHQxZGVjb2RlICkKIEZUX1RSQUNFX0RFRiggY2ZmZGVjb2RlICkKLUZUX1RSQUNFX0RFRiggcHNvYmpzICkKIEZUX1RSQUNFX0RFRiggcHNjb252ICkKK0ZUX1RSQUNFX0RFRiggcHNvYmpzICkKK0ZUX1RSQUNFX0RFRiggdDFkZWNvZGUgKQogCiAgIC8qIFBvc3RTY3JpcHQgaGludGluZyBtb2R1bGUgYHBzaGludGVyJyAqLwotRlRfVFJBQ0VfREVGKCBwc2hyZWMgKQogRlRfVFJBQ0VfREVGKCBwc2hhbGdvICkKK0ZUX1RSQUNFX0RFRiggcHNocmVjICkKIAogICAvKiBUeXBlIDIgZHJpdmVyIGNvbXBvbmVudHMgKi8KIEZUX1RSQUNFX0RFRiggY2ZmZHJpdmVyICkKQEAgLTExNyw3ICsxMjAsNiBAQAogRlRfVFJBQ0VfREVGKCBwZnIgKQogCiAgIC8qIE9wZW5UeXBlIHZhbGlkYXRpb24gY29tcG9uZW50cyAqLwotRlRfVFJBQ0VfREVGKCBvdHZtb2R1bGUgKQogRlRfVFJBQ0VfREVGKCBvdHZjb21tb24gKQogRlRfVFJBQ0VfREVGKCBvdHZiYXNlICkKIEZUX1RSQUNFX0RFRiggb3R2Z2RlZiApCkBAIC0xMjUsMjkgKzEyNywzMCBAQAogRlRfVFJBQ0VfREVGKCBvdHZnc3ViICkKIEZUX1RSQUNFX0RFRiggb3R2anN0ZiApCiBGVF9UUkFDRV9ERUYoIG90dm1hdGggKQorRlRfVFJBQ0VfREVGKCBvdHZtb2R1bGUgKQogCiAgIC8qIFRydWVUeXBlR1gvQUFUIHZhbGlkYXRpb24gY29tcG9uZW50cyAqLwotRlRfVFJBQ0VfREVGKCBneHZtb2R1bGUgKQorRlRfVFJBQ0VfREVGKCBneHZic2xuICkKIEZUX1RSQUNFX0RFRiggZ3h2Y29tbW9uICkKIEZUX1RSQUNFX0RFRiggZ3h2ZmVhdCApCi1GVF9UUkFDRV9ERUYoIGd4dm1vcnQgKQotRlRfVFJBQ0VfREVGKCBneHZtb3J4ICkKLUZUX1RSQUNFX0RFRiggZ3h2YnNsbiApCiBGVF9UUkFDRV9ERUYoIGd4dmp1c3QgKQogRlRfVFJBQ0VfREVGKCBneHZrZXJuICkKLUZUX1RSQUNFX0RFRiggZ3h2b3BiZCApCi1GVF9UUkFDRV9ERUYoIGd4dnRyYWsgKQotRlRfVFJBQ0VfREVGKCBneHZwcm9wICkKK0ZUX1RSQUNFX0RFRiggZ3h2bW9kdWxlICkKK0ZUX1RSQUNFX0RFRiggZ3h2bW9ydCApCitGVF9UUkFDRV9ERUYoIGd4dm1vcnggKQogRlRfVFJBQ0VfREVGKCBneHZsY2FyICkKK0ZUX1RSQUNFX0RFRiggZ3h2b3BiZCApCitGVF9UUkFDRV9ERUYoIGd4dnByb3AgKQorRlRfVFJBQ0VfREVGKCBneHZ0cmFrICkKIAogICAvKiBhdXRvZml0IGNvbXBvbmVudHMgKi8KLUZUX1RSQUNFX0RFRiggYWZtb2R1bGUgKQotRlRfVFJBQ0VfREVGKCBhZmhpbnRzICkKIEZUX1RSQUNFX0RFRiggYWZjamsgKQorRlRfVFJBQ0VfREVGKCBhZmdsb2JhbCApCitGVF9UUkFDRV9ERUYoIGFmaGludHMgKQorRlRfVFJBQ0VfREVGKCBhZm1vZHVsZSApCiBGVF9UUkFDRV9ERUYoIGFmbGF0aW4gKQogRlRfVFJBQ0VfREVGKCBhZmxhdGluMiApCi1GVF9UUkFDRV9ERUYoIGFmd2FycCApCiBGVF9UUkFDRV9ERUYoIGFmc2hhcGVyICkKLUZUX1RSQUNFX0RFRiggYWZnbG9iYWwgKQorRlRfVFJBQ0VfREVGKCBhZndhcnAgKQogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmgKaW5kZXggY2FkNDdhNS4uMjY1ZDc5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0dmFsaWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB2YWxpZGF0aW9uIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0dmFsaWQuaAorICoKKyAqICAgRnJlZVR5cGUgdmFsaWRhdGlvbiBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVFZBTElEX0hfCkBAIC00MiwzMSArNDIsMzEgQEAKICAgdHlwZWRlZiBzdHJ1Y3QgRlRfVmFsaWRhdG9yUmVjXyB2b2xhdGlsZSogIEZUX1ZhbGlkYXRvcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlcmUgYXJlIHRocmVlIGRpc3RpbmN0IHZhbGlkYXRpb24gbGV2ZWxzIGRlZmluZWQgaGVyZTogICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9WQUxJREFURV9ERUZBVUxUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBBIHRhYmxlIHRoYXQgcGFzc2VzIHRoaXMgdmFsaWRhdGlvbiBsZXZlbCBjYW4gYmUgdXNlZCByZWxpYWJseSBieSAgICovCi0gIC8qICAgRnJlZVR5cGUuICBJdCBnZW5lcmFsbHkgbWVhbnMgdGhhdCBhbGwgb2Zmc2V0cyBoYXZlIGJlZW4gY2hlY2tlZCB0byAqLwotICAvKiAgIHByZXZlbnQgb3V0LW9mLWJvdW5kIHJlYWRzLCB0aGF0IGFycmF5IGNvdW50cyBhcmUgY29ycmVjdCwgZXRjLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX1ZBTElEQVRFX1RJR0hUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEEgdGFibGUgdGhhdCBwYXNzZXMgdGhpcyB2YWxpZGF0aW9uIGxldmVsIGNhbiBiZSB1c2VkIHJlbGlhYmx5IGFuZCAgKi8KLSAgLyogICBkb2Vzbid0IGNvbnRhaW4gaW52YWxpZCBkYXRhLiAgRm9yIGV4YW1wbGUsIGEgY2hhcm1hcCB0YWJsZSB0aGF0ICAgICovCi0gIC8qICAgcmV0dXJucyBpbnZhbGlkIGdseXBoIGluZGljZXMgd2lsbCBub3QgcGFzcywgZXZlbiB0aG91Z2ggaXQgY2FuICAgICAqLwotICAvKiAgIGJlIHVzZWQgd2l0aCBGcmVlVHlwZSBpbiBkZWZhdWx0IG1vZGUgKHRoZSBsaWJyYXJ5IHdpbGwgc2ltcGx5ICAgICAgKi8KLSAgLyogICByZXR1cm4gYW4gZXJyb3IgbGF0ZXIgd2hlbiB0cnlpbmcgdG8gbG9hZCB0aGUgZ2x5cGgpLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIEl0IGFsc28gY2hlY2tzIHRoYXQgZmllbGRzIHdoaWNoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyLCA0LCBvciA4LCAgKi8KLSAgLyogICBkb24ndCBoYXZlIGluY29ycmVjdCB2YWx1ZXMsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGVF9WQUxJREFURV9QQVJBTk9JRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBPbmx5IGZvciBmb250IGRlYnVnZ2luZy4gIENoZWNrcyB0aGF0IGEgdGFibGUgZm9sbG93cyB0aGUgICAgICAgICAgICovCi0gIC8qICAgc3BlY2lmaWNhdGlvbiBieSAxMDAlLiAgVmVyeSBmZXcgZm9udHMgd2lsbCBiZSBhYmxlIHRvIHBhc3MgdGhpcyAgICAqLwotICAvKiAgIGxldmVsIGFueXdheSBidXQgaXQgY2FuIGJlIHVzZWZ1bCBmb3IgY2VydGFpbiB0b29scyBsaWtlIGZvbnQgICAgICAgKi8KLSAgLyogICBlZGl0b3JzL2NvbnZlcnRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlcmUgYXJlIHRocmVlIGRpc3RpbmN0IHZhbGlkYXRpb24gbGV2ZWxzIGRlZmluZWQgaGVyZToKKyAgICoKKyAgICogRlRfVkFMSURBVEVfREVGQVVMVCA6OgorICAgKiAgIEEgdGFibGUgdGhhdCBwYXNzZXMgdGhpcyB2YWxpZGF0aW9uIGxldmVsIGNhbiBiZSB1c2VkIHJlbGlhYmx5IGJ5CisgICAqICAgRnJlZVR5cGUuICBJdCBnZW5lcmFsbHkgbWVhbnMgdGhhdCBhbGwgb2Zmc2V0cyBoYXZlIGJlZW4gY2hlY2tlZCB0bworICAgKiAgIHByZXZlbnQgb3V0LW9mLWJvdW5kIHJlYWRzLCB0aGF0IGFycmF5IGNvdW50cyBhcmUgY29ycmVjdCwgZXRjLgorICAgKgorICAgKiBGVF9WQUxJREFURV9USUdIVCA6OgorICAgKiAgIEEgdGFibGUgdGhhdCBwYXNzZXMgdGhpcyB2YWxpZGF0aW9uIGxldmVsIGNhbiBiZSB1c2VkIHJlbGlhYmx5IGFuZAorICAgKiAgIGRvZXNuJ3QgY29udGFpbiBpbnZhbGlkIGRhdGEuICBGb3IgZXhhbXBsZSwgYSBjaGFybWFwIHRhYmxlIHRoYXQKKyAgICogICByZXR1cm5zIGludmFsaWQgZ2x5cGggaW5kaWNlcyB3aWxsIG5vdCBwYXNzLCBldmVuIHRob3VnaCBpdCBjYW4KKyAgICogICBiZSB1c2VkIHdpdGggRnJlZVR5cGUgaW4gZGVmYXVsdCBtb2RlICh0aGUgbGlicmFyeSB3aWxsIHNpbXBseQorICAgKiAgIHJldHVybiBhbiBlcnJvciBsYXRlciB3aGVuIHRyeWluZyB0byBsb2FkIHRoZSBnbHlwaCkuCisgICAqCisgICAqICAgSXQgYWxzbyBjaGVja3MgdGhhdCBmaWVsZHMgd2hpY2ggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIsIDQsIG9yIDgsCisgICAqICAgZG9uJ3QgaGF2ZSBpbmNvcnJlY3QgdmFsdWVzLCBldGMuCisgICAqCisgICAqIEZUX1ZBTElEQVRFX1BBUkFOT0lEIDo6CisgICAqICAgT25seSBmb3IgZm9udCBkZWJ1Z2dpbmcuICBDaGVja3MgdGhhdCBhIHRhYmxlIGZvbGxvd3MgdGhlCisgICAqICAgc3BlY2lmaWNhdGlvbiBieSAxMDAlLiAgVmVyeSBmZXcgZm9udHMgd2lsbCBiZSBhYmxlIHRvIHBhc3MgdGhpcworICAgKiAgIGxldmVsIGFueXdheSBidXQgaXQgY2FuIGJlIHVzZWZ1bCBmb3IgY2VydGFpbiB0b29scyBsaWtlIGZvbnQKKyAgICogICBlZGl0b3JzL2NvbnZlcnRlcnMuCisgICAqLwogICB0eXBlZGVmIGVudW0gIEZUX1ZhbGlkYXRpb25MZXZlbF8KICAgewogICAgIEZUX1ZBTElEQVRFX0RFRkFVTFQgPSAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCmluZGV4IDhmNTQ2ZTQuLjgyNjEwNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgKQEAgLTEsMzEgKzEsMzAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGludGVybmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBJbnRlcm5hbCBoZWFkZXIgZmlsZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGludGVybmFsLmgKKyAqCisgKiAgIEludGVybmFsIGhlYWRlciBmaWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IGBmdDJidWlsZC5oJy4gICAgICAgICAgICAgICAgICAqLwotICAvKiBEbyBub3QgaW5jbHVkZSBpdCBtYW51YWxseSEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgYGZ0MmJ1aWxkLmgnLgorICAgKiBEbyBub3QgaW5jbHVkZSBpdCBtYW51YWxseSEKKyAgICoKKyAgICovCiAKIAogI2RlZmluZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0ggICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9QSUNfSCAgICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX1NUUkVBTV9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaD4KICNkZWZpbmUgRlRfSU5URVJOQUxfTUVNT1JZX0ggICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oPgogI2RlZmluZSBGVF9JTlRFUk5BTF9ERUJVR19IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaAppbmRleCBmNzczODBkLi4yYzVhNmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2F1eC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gUG9zdFNjcmlwdCBmb250cyAgKi8KLS8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNhdXguaAorICoKKyAqICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gUG9zdFNjcmlwdCBmb250cworICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNBVVhfSF8KQEAgLTM1LDEwICszNSwxMCBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUG9zdFNjcmlwdCBtb2R1bGVzIGRyaXZlciBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUG9zdFNjcmlwdCBtb2R1bGVzIGRyaXZlciBjbGFzcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQU19Ecml2ZXJSZWNfCiAgIHsKICAgICBGVF9Ecml2ZXJSZWMgIHJvb3Q7CkBAIC02NCwyMyArNjQsMjcgQEAKICAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgUFNfVGFibGVfRnVuY3NSZWNfKiAgUFNfVGFibGVfRnVuY3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19UYWJsZV9GdW5jc1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBtYW5hZ2UgUFNfVGFibGUgb2JqZWN0cy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWJsZV9pbml0ICAgIDo6IFVzZWQgdG8gaW5pdGlhbGl6ZSBhIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhYmxlX2RvbmUgICAgOjogRmluYWxpemVzIHJlc3AuIGRlc3Ryb3kgYSBnaXZlbiB0YWJsZS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFibGVfYWRkICAgICA6OiBBZGRzIGEgbmV3IG9iamVjdCB0byBhIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWJsZV9yZWxlYXNlIDo6IFJlbGVhc2VzIHRhYmxlIGRhdGEsIHRoZW4gZmluYWxpemVzIGl0LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFBTX1RhYmxlX0Z1bmNzUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBtYW5hZ2UgUFNfVGFibGUgb2JqZWN0cy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICB0YWJsZV9pbml0IDo6CisgICAqICAgICBVc2VkIHRvIGluaXRpYWxpemUgYSB0YWJsZS4KKyAgICoKKyAgICogICB0YWJsZV9kb25lIDo6CisgICAqICAgICBGaW5hbGl6ZXMgcmVzcC4gZGVzdHJveSBhIGdpdmVuIHRhYmxlLgorICAgKgorICAgKiAgIHRhYmxlX2FkZCA6OgorICAgKiAgICAgQWRkcyBhIG5ldyBvYmplY3QgdG8gYSB0YWJsZS4KKyAgICoKKyAgICogICB0YWJsZV9yZWxlYXNlIDo6CisgICAqICAgICBSZWxlYXNlcyB0YWJsZSBkYXRhLCB0aGVuIGZpbmFsaXplcyBpdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQU19UYWJsZV9GdW5jc1JlY18KICAgewogICAgIEZUX0Vycm9yCkBAIC0xMDMsNDEgKzEwNyw1MSBAQAogICB9IFBTX1RhYmxlX0Z1bmNzUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfVGFibGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBQU19UYWJsZSBpcyBhIHNpbXBsZSBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBhcnJheSBvZiBvYmplY3RzIGluICovCi0gIC8qICAgIGEgc2luZ2xlIG1lbW9yeSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJsb2NrICAgICA6OiBUaGUgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIGdyb3doZWFwJ3MgYmxvY2suICBUaGlzICAqLwotICAvKiAgICAgICAgICAgICAgICAgY2FuIGNoYW5nZSBiZXR3ZWVuIHR3byBvYmplY3QgYWRkcywgZHVlIHRvICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIHJlYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdXJzb3IgICAgOjogVGhlIGN1cnJlbnQgdG9wIG9mIHRoZSBncm93IGhlYXAgd2l0aGluIGl0cyBibG9jay4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhcGFjaXR5ICA6OiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBoZWFwIGJsb2NrLiAgSW5jcmVtZW50cyBieSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgMWtCeXRlIGNodW5rcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluaXQgICAgICA6OiBTZXQgdG8gMHhERUFEQkVFRiBpZiBgZWxlbWVudHMnIGFuZCBgbGVuZ3RocycgaGF2ZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgYmVlbiBhbGxvY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9lbGVtcyA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGFibGUuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2VsZW1zIDo6IFRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyBpbiB0YWJsZS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBlbGVtZW50cyAgOjogQSB0YWJsZSBvZiBlbGVtZW50IGFkZHJlc3NlcyB3aXRoaW4gdGhlIGJsb2NrLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlbmd0aHMgICA6OiBBIHRhYmxlIG9mIGVsZW1lbnQgc2l6ZXMgd2l0aGluIHRoZSBibG9jay4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5ICAgIDo6IFRoZSBvYmplY3QgdXNlZCBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAoYWxsb2MvcmVhbGxvYykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnVuY3MgICAgIDo6IEEgdGFibGUgb2YgbWV0aG9kIHBvaW50ZXJzIGZvciB0aGlzIG9iamVjdC4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBQU19UYWJsZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBQU19UYWJsZSBpcyBhIHNpbXBsZSBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBhcnJheSBvZiBvYmplY3RzIGluCisgICAqICAgYSBzaW5nbGUgbWVtb3J5IGJsb2NrLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGJsb2NrIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIGdyb3doZWFwJ3MgYmxvY2suICBUaGlzCisgICAqICAgICBjYW4gY2hhbmdlIGJldHdlZW4gdHdvIG9iamVjdCBhZGRzLCBkdWUgdG8KKyAgICogICAgIHJlYWxsb2NhdGlvbi4KKyAgICoKKyAgICogICBjdXJzb3IgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IHRvcCBvZiB0aGUgZ3JvdyBoZWFwIHdpdGhpbiBpdHMgYmxvY2suCisgICAqCisgICAqICAgY2FwYWNpdHkgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAgYmxvY2suICBJbmNyZW1lbnRzIGJ5CisgICAqICAgICAxa0J5dGUgY2h1bmtzLgorICAgKgorICAgKiAgIGluaXQgOjoKKyAgICogICAgIFNldCB0byAweERFQURCRUVGIGlmIGBlbGVtZW50cycgYW5kIGBsZW5ndGhzJyBoYXZlCisgICAqICAgICBiZWVuIGFsbG9jYXRlZC4KKyAgICoKKyAgICogICBtYXhfZWxlbXMgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0YWJsZS4KKyAgICoKKyAgICogICBudW1fZWxlbXMgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyBpbiB0YWJsZS4KKyAgICoKKyAgICogICBlbGVtZW50cyA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBlbGVtZW50IGFkZHJlc3NlcyB3aXRoaW4gdGhlIGJsb2NrLgorICAgKgorICAgKiAgIGxlbmd0aHMgOjoKKyAgICogICAgIEEgdGFibGUgb2YgZWxlbWVudCBzaXplcyB3aXRoaW4gdGhlIGJsb2NrLgorICAgKgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIG9iamVjdCB1c2VkIGZvciBtZW1vcnkgb3BlcmF0aW9ucworICAgKiAgICAgKGFsbG9jL3JlYWxsb2MpLgorICAgKgorICAgKiAgIGZ1bmNzIDo6CisgICAqICAgICBBIHRhYmxlIG9mIG1ldGhvZCBwb2ludGVycyBmb3IgdGhpcyBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgUFNfVGFibGVSZWNfCiAgIHsKICAgICBGVF9CeXRlKiAgICAgICAgICAgYmxvY2s7ICAgICAgICAgIC8qIGN1cnJlbnQgbWVtb3J5IGJsb2NrICAgICAgICAgICAqLwpAQCAtNDI1LDI3ICs0MzksMzMgQEAKICAgfSBQU19QYXJzZXJfRnVuY3NSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19QYXJzZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIFBTX1BhcnNlciBpcyBhbiBvYmplY3QgdXNlZCB0byBwYXJzZSBhIFR5cGUgMSBmb250IHZlcnkgcXVpY2tseS4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdXJzb3IgOjogVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHRleHQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2UgICA6OiBTdGFydCBvZiB0aGUgcHJvY2Vzc2VkIHRleHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGltaXQgIDo6IEVuZCBvZiB0aGUgcHJvY2Vzc2VkIHRleHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBlcnJvciAgOjogVGhlIGxhc3QgZXJyb3IgcmV0dXJuZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSA6OiBUaGUgb2JqZWN0IHVzZWQgZm9yIG1lbW9yeSBvcGVyYXRpb25zIChhbGxvYy9yZWFsbG9jKS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnVuY3MgIDo6IEEgdGFibGUgb2YgZnVuY3Rpb25zIGZvciB0aGUgcGFyc2VyLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBQU19QYXJzZXJSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgUFNfUGFyc2VyIGlzIGFuIG9iamVjdCB1c2VkIHRvIHBhcnNlIGEgVHlwZSAxIGZvbnQgdmVyeSBxdWlja2x5LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGN1cnNvciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHRleHQuCisgICAqCisgICAqICAgYmFzZSA6OgorICAgKiAgICAgU3RhcnQgb2YgdGhlIHByb2Nlc3NlZCB0ZXh0LgorICAgKgorICAgKiAgIGxpbWl0IDo6CisgICAqICAgICBFbmQgb2YgdGhlIHByb2Nlc3NlZCB0ZXh0LgorICAgKgorICAgKiAgIGVycm9yIDo6CisgICAqICAgICBUaGUgbGFzdCBlcnJvciByZXR1cm5lZC4KKyAgICoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIFRoZSBvYmplY3QgdXNlZCBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgKGFsbG9jL3JlYWxsb2MpLgorICAgKgorICAgKiAgIGZ1bmNzIDo6CisgICAqICAgICBBIHRhYmxlIG9mIGZ1bmN0aW9ucyBmb3IgdGhlIHBhcnNlci4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQU19QYXJzZXJSZWNfCiAgIHsKICAgICBGVF9CeXRlKiAgIGN1cnNvcjsKQEAgLTQ4NCw1MSArNTA0LDY4IEBACiAgIH0gUFNfQnVpbGRlcl9GdW5jc1JlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdHVyZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0J1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgICAgICA6OiBUaGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaCAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRlciAgICAgICA6OiBYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmFzZSAgICAgICAgIDo6IFRoZSBiYXNlIGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdXJyZW50ICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBvc194ICAgICAgICA6OiBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9zX3kgICAgICAgIDo6IFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZWZ0X2JlYXJpbmcgOjogVGhlIGxlZnQgc2lkZSBiZWFyaW5nIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFkdmFuY2UgICAgICA6OiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmJveCAgICAgICAgIDo6IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXRoX2JlZ3VuICAgOjogQSBmbGFnIHdoaWNoIGluZGljYXRlcyB0aGF0IGEgbmV3IHBhdGggaGFzIGJlZ3VuLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRfcG9pbnRzICA6OiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbm9fcmVjdXJzZSAgIDo6IFNldCBidXQgbm90IHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZXRyaWNzX29ubHkgOjogQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaXNfdDEgICAgICAgIDo6IFNldCBpZiBjdXJyZW50IGZvbnQgdHlwZSBpcyBUeXBlIDEuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdW5jcyAgICAgICAgOjogQW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBidWlsZGVyLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFBTX0J1aWxkZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdC4KKyAgICoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4KKyAgICoKKyAgICogICBsb2FkZXIgOjoKKyAgICogICAgIFhYWAorICAgKgorICAgKiAgIGJhc2UgOjoKKyAgICogICAgIFRoZSBiYXNlIGdseXBoIG91dGxpbmUuCisgICAqCisgICAqICAgY3VycmVudCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4KKyAgICoKKyAgICogICBwb3NfeCA6OgorICAgKiAgICAgVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuCisgICAqCisgICAqICAgcG9zX3kgOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4KKyAgICoKKyAgICogICBsZWZ0X2JlYXJpbmcgOjoKKyAgICogICAgIFRoZSBsZWZ0IHNpZGUgYmVhcmluZyBwb2ludC4KKyAgICoKKyAgICogICBhZHZhbmNlIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIHZlY3Rvci4KKyAgICoKKyAgICogICBiYm94IDo6CisgICAqICAgICBVbnVzZWQuCisgICAqCisgICAqICAgcGF0aF9iZWd1biA6OgorICAgKiAgICAgQSBmbGFnIHdoaWNoIGluZGljYXRlcyB0aGF0IGEgbmV3IHBhdGggaGFzIGJlZ3VuLgorICAgKgorICAgKiAgIGxvYWRfcG9pbnRzIDo6CisgICAqICAgICBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuCisgICAqCisgICAqICAgbm9fcmVjdXJzZSA6OgorICAgKiAgICAgU2V0IGJ1dCBub3QgdXNlZC4KKyAgICoKKyAgICogICBtZXRyaWNzX29ubHkgOjoKKyAgICogICAgIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUKKyAgICogICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMKKyAgICogICAgIHBvaW50cy4KKyAgICoKKyAgICogICBpc190MSA6OgorICAgKiAgICAgU2V0IGlmIGN1cnJlbnQgZm9udCB0eXBlIGlzIFR5cGUgMS4KKyAgICoKKyAgICogICBmdW5jcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBidWlsZGVyLgorICAgKi8KICAgc3RydWN0ICBQU19CdWlsZGVyXwogICB7CiAgICAgRlRfTWVtb3J5ICAgICAgIG1lbW9yeTsKQEAgLTcyOSw1NCArNzY2LDcyIEBACiAgIH0gVDFfUGFyc2VTdGF0ZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdHVyZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0J1aWxkZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgICAgICA6OiBUaGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaCAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRlciAgICAgICA6OiBYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmFzZSAgICAgICAgIDo6IFRoZSBiYXNlIGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdXJyZW50ICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9wb2ludHMgICA6OiBtYXhpbXVtIHBvaW50cyBpbiBidWlsZGVyIG91dGxpbmUgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4X2NvbnRvdXJzIDo6IE1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGJ1aWxkZXIgb3V0bGluZS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb3NfeCAgICAgICAgOjogVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBvc195ICAgICAgICA6OiBUaGUgdmVydGljYWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGVmdF9iZWFyaW5nIDo6IFRoZSBsZWZ0IHNpZGUgYmVhcmluZyBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZHZhbmNlICAgICAgOjogVGhlIGhvcml6b250YWwgYWR2YW5jZSB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJib3ggICAgICAgICA6OiBVbnVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFyc2Vfc3RhdGUgIDo6IEFuIGVudW1lcmF0aW9uIHdoaWNoIGNvbnRyb2xzIHRoZSBjaGFyc3RyaW5nICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBwYXJzaW5nIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9wb2ludHMgIDo6IElmIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBubyBwb2ludHMgYXJlIGxvYWRlZC4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBub19yZWN1cnNlICAgOjogU2V0IGJ1dCBub3QgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1ldHJpY3Nfb25seSA6OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHdlIG9ubHkgd2FudCB0byBjb21wdXRlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgdGhlIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCwgbm90IGxvYWQgYWxsIG9mIGl0cyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdW5jcyAgICAgICAgOjogQW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBidWlsZGVyLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFQxX0J1aWxkZXJSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdC4KKyAgICoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4KKyAgICoKKyAgICogICBsb2FkZXIgOjoKKyAgICogICAgIFhYWAorICAgKgorICAgKiAgIGJhc2UgOjoKKyAgICogICAgIFRoZSBiYXNlIGdseXBoIG91dGxpbmUuCisgICAqCisgICAqICAgY3VycmVudCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4KKyAgICoKKyAgICogICBtYXhfcG9pbnRzIDo6CisgICAqICAgICBtYXhpbXVtIHBvaW50cyBpbiBidWlsZGVyIG91dGxpbmUKKyAgICoKKyAgICogICBtYXhfY29udG91cnMgOjoKKyAgICogICAgIE1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGJ1aWxkZXIgb3V0bGluZS4KKyAgICoKKyAgICogICBwb3NfeCA6OgorICAgKiAgICAgVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuCisgICAqCisgICAqICAgcG9zX3kgOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4KKyAgICoKKyAgICogICBsZWZ0X2JlYXJpbmcgOjoKKyAgICogICAgIFRoZSBsZWZ0IHNpZGUgYmVhcmluZyBwb2ludC4KKyAgICoKKyAgICogICBhZHZhbmNlIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIHZlY3Rvci4KKyAgICoKKyAgICogICBiYm94IDo6CisgICAqICAgICBVbnVzZWQuCisgICAqCisgICAqICAgcGFyc2Vfc3RhdGUgOjoKKyAgICogICAgIEFuIGVudW1lcmF0aW9uIHdoaWNoIGNvbnRyb2xzIHRoZSBjaGFyc3RyaW5nCisgICAqICAgICBwYXJzaW5nIHN0YXRlLgorICAgKgorICAgKiAgIGxvYWRfcG9pbnRzIDo6CisgICAqICAgICBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuCisgICAqCisgICAqICAgbm9fcmVjdXJzZSA6OgorICAgKiAgICAgU2V0IGJ1dCBub3QgdXNlZC4KKyAgICoKKyAgICogICBtZXRyaWNzX29ubHkgOjoKKyAgICogICAgIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUKKyAgICogICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMKKyAgICogICAgIHBvaW50cy4KKyAgICoKKyAgICogICBmdW5jcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBidWlsZGVyLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFQxX0J1aWxkZXJSZWNfCiAgIHsKICAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5OwpAQCAtODE3LDE5ICs4NzIsMTkgQEAKIAogI2lmIDAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX01BWF9TVUJSU19DQUxMUyBkZXRhaWxzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgc3ViLXJvdXRpbmUgICAqLwotICAvKiBjYWxscyBkdXJpbmcgZ2x5cGggbG9hZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUMV9NQVhfU1VCUlNfQ0FMTFMgZGV0YWlscyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIHN1Yi1yb3V0aW5lCisgICAqIGNhbGxzIGR1cmluZyBnbHlwaCBsb2FkaW5nLgorICAgKi8KICNkZWZpbmUgVDFfTUFYX1NVQlJTX0NBTExTICA4CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFQxX01BWF9DSEFSU1RSSU5HX09QRVJBTkRTIGlzIHRoZSBjaGFyc3RyaW5nIHN0YWNrJ3MgY2FwYWNpdHkuICBBICAgICAqLwotICAvKiBtaW5pbXVtIG9mIDE2IGlzIHJlcXVpcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUMV9NQVhfQ0hBUlNUUklOR19PUEVSQU5EUyBpcyB0aGUgY2hhcnN0cmluZyBzdGFjaydzIGNhcGFjaXR5LiAgQQorICAgKiBtaW5pbXVtIG9mIDE2IGlzIHJlcXVpcmVkLgorICAgKi8KICNkZWZpbmUgVDFfTUFYX0NIQVJTVFJJTkdTX09QRVJBTkRTICAzMgogCiAjZW5kaWYgLyogMCAqLwpAQCAtOTkzLDUzICsxMDQ4LDcxIEBACiAgIH0gQ0ZGX0J1aWxkZXJfRnVuY3NSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3R1cmU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDRkZfQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgQSBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgZ2x5cGggbG9hZGluZyB0byBzdG9yZSBpdHMgb3V0bGluZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgICAgICAgIDo6IFRoZSBjdXJyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggICAgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkZXIgICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIGxvYWRlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2UgICAgICAgICAgOjogVGhlIGJhc2UgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY3VycmVudCAgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb3NfeCAgICAgICAgIDo6IFRoZSBob3Jpem9udGFsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBvc195ICAgICAgICAgOjogVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGVmdF9iZWFyaW5nICA6OiBUaGUgbGVmdCBzaWRlIGJlYXJpbmcgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZHZhbmNlICAgICAgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJib3ggICAgICAgICAgOjogVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGF0aF9iZWd1biAgICA6OiBBIGZsYWcgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYSBuZXcgcGF0aCBoYXMgYmVndW4uICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX3BvaW50cyAgIDo6IElmIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBubyBwb2ludHMgYXJlIGxvYWRlZC4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5vX3JlY3Vyc2UgICAgOjogU2V0IGJ1dCBub3QgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWV0cmljc19vbmx5ICA6OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHdlIG9ubHkgd2FudCB0byBjb21wdXRlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCwgbm90IGxvYWQgYWxsIG9mIGl0cyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhpbnRzX2Z1bmNzICAgOjogQXV4aWxpYXJ5IHBvaW50ZXIgZm9yIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludHNfZ2xvYmFscyA6OiBBdXhpbGlhcnkgcG9pbnRlciBmb3IgaGludGluZy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdW5jcyAgICAgICAgIDo6IEEgdGFibGUgb2YgbWV0aG9kIHBvaW50ZXJzIGZvciB0aGlzIG9iamVjdC4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIENGRl9CdWlsZGVyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAgQSBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgZ2x5cGggbG9hZGluZyB0byBzdG9yZSBpdHMgb3V0bGluZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgZ2x5cGggOjoKKyAgICogICAgIFRoZSBjdXJyZW50IGdseXBoIHNsb3QuCisgICAqCisgICAqICAgbG9hZGVyIDo6CisgICAqICAgICBUaGUgY3VycmVudCBnbHlwaCBsb2FkZXIuCisgICAqCisgICAqICAgYmFzZSA6OgorICAgKiAgICAgVGhlIGJhc2UgZ2x5cGggb3V0bGluZS4KKyAgICoKKyAgICogICBjdXJyZW50IDo6CisgICAqICAgICBUaGUgY3VycmVudCBnbHlwaCBvdXRsaW5lLgorICAgKgorICAgKiAgIHBvc194IDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4KKyAgICoKKyAgICogICBwb3NfeSA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLgorICAgKgorICAgKiAgIGxlZnRfYmVhcmluZyA6OgorICAgKiAgICAgVGhlIGxlZnQgc2lkZSBiZWFyaW5nIHBvaW50LgorICAgKgorICAgKiAgIGFkdmFuY2UgOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGFkdmFuY2UgdmVjdG9yLgorICAgKgorICAgKiAgIGJib3ggOjoKKyAgICogICAgIFVudXNlZC4KKyAgICoKKyAgICogICBwYXRoX2JlZ3VuIDo6CisgICAqICAgICBBIGZsYWcgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYSBuZXcgcGF0aCBoYXMgYmVndW4uCisgICAqCisgICAqICAgbG9hZF9wb2ludHMgOjoKKyAgICogICAgIElmIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBubyBwb2ludHMgYXJlIGxvYWRlZC4KKyAgICoKKyAgICogICBub19yZWN1cnNlIDo6CisgICAqICAgICBTZXQgYnV0IG5vdCB1c2VkLgorICAgKgorICAgKiAgIG1ldHJpY3Nfb25seSA6OgorICAgKiAgICAgQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZQorICAgKiAgICAgdGhlIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCwgbm90IGxvYWQgYWxsIG9mIGl0cworICAgKiAgICAgcG9pbnRzLgorICAgKgorICAgKiAgIGhpbnRzX2Z1bmNzIDo6CisgICAqICAgICBBdXhpbGlhcnkgcG9pbnRlciBmb3IgaGludGluZy4KKyAgICoKKyAgICogICBoaW50c19nbG9iYWxzIDo6CisgICAqICAgICBBdXhpbGlhcnkgcG9pbnRlciBmb3IgaGludGluZy4KKyAgICoKKyAgICogICBmdW5jcyA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBtZXRob2QgcG9pbnRlcnMgZm9yIHRoaXMgb2JqZWN0LgorICAgKi8KICAgc3RydWN0ICBDRkZfQnVpbGRlcl8KICAgewogICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnk7CkBAIC0xMjExLDI1ICsxMjg0LDI5IEBACiAgIHR5cGVkZWYgc3RydWN0IEFGTV9TdHJlYW1SZWNfKiAgQUZNX1N0cmVhbTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFGTV9QYXJzZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIEFGTV9QYXJzZXIgaXMgYSBwYXJzZXIgZm9yIHRoZSBBRk0gZmlsZXMuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSAgICA6OiBUaGUgb2JqZWN0IHVzZWQgZm9yIG1lbW9yeSBvcGVyYXRpb25zIChhbGxvYyBhbmQgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgcmVhbGxvYykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICA6OiBUaGlzIGlzIGFuIG9wYXF1ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9udEluZm8gIDo6IFRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnZXRfaW5kZXggOjogQSB1c2VyIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIGdldCBhIGdseXBoIGluZGV4IGJ5IGl0cyAgKi8KLSAgLyogICAgICAgICAgICAgICAgIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBBRk1fUGFyc2VyUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBBRk1fUGFyc2VyIGlzIGEgcGFyc2VyIGZvciB0aGUgQUZNIGZpbGVzLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIG9iamVjdCB1c2VkIGZvciBtZW1vcnkgb3BlcmF0aW9ucyAoYWxsb2MgYW5kCisgICAqICAgICByZWFsbG9jKS4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoaXMgaXMgYW4gb3BhcXVlIG9iamVjdC4KKyAgICoKKyAgICogICBGb250SW5mbyA6OgorICAgKiAgICAgVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBoZXJlLgorICAgKgorICAgKiAgIGdldF9pbmRleCA6OgorICAgKiAgICAgQSB1c2VyIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIGdldCBhIGdseXBoIGluZGV4IGJ5IGl0cworICAgKiAgICAgbmFtZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBBRk1fUGFyc2VyUmVjXwogICB7CiAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oCmluZGV4IGQyOTMxNGUuLjkwYTI4YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oCkBAIC0xLDIxICsxLDIxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2hpbnRzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSW50ZXJmYWNlIHRvIFBvc3RzY3JpcHQtc3BlY2lmaWMgKFR5cGUgMSBhbmQgVHlwZSAyKSBoaW50cyAgICAgICAgICAgKi8KLS8qICAgIHJlY29yZGVycyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gIFRoZXNlIGFyZSB1c2VkIHRvIHN1cHBvcnQgbmF0aXZlICAgICovCi0vKiAgICBUMS9UMiBoaW50cyBpbiB0aGUgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJyBmb250IGRyaXZlcnMuICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzaGludHMuaAorICoKKyAqICAgSW50ZXJmYWNlIHRvIFBvc3RzY3JpcHQtc3BlY2lmaWMgKFR5cGUgMSBhbmQgVHlwZSAyKSBoaW50cworICogICByZWNvcmRlcnMgKHNwZWNpZmljYXRpb24gb25seSkuICBUaGVzZSBhcmUgdXNlZCB0byBzdXBwb3J0IG5hdGl2ZQorICogICBUMS9UMiBoaW50cyBpbiB0aGUgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJyBmb250IGRyaXZlcnMuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNISU5UU19IXwpAQCAtNjgwLDggKzY4MCw2IEBACiAgIHR5cGVkZWYgUFNIaW50ZXJfSW50ZXJmYWNlKiAgUFNIaW50ZXJfU2VydmljZTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1BTSElOVEVSX0lOVEVSRkFDRSggICAgICAgIFwKICAgICAgICAgICBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBnZXRfZ2xvYmFsc19mdW5jc18sICAgICAgICAgICAgICAgIFwKQEAgLTY5NCwyNSArNjkyLDYgQEAKICAgICBnZXRfdDJfZnVuY3NfICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUZJTkVfUFNISU5URVJfSU5URVJGQUNFKCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfZ2xvYmFsc19mdW5jc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdldF90MV9mdW5jc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X3QyX2Z1bmNzXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNIaW50ZXJfSW50ZXJmYWNlKiAgY2xhenogKSAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2dsb2JhbHNfZnVuY3MgPSBnZXRfZ2xvYmFsc19mdW5jc187ICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfdDFfZnVuY3MgICAgICA9IGdldF90MV9mdW5jc187ICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmdldF90Ml9mdW5jcyAgICAgID0gZ2V0X3QyX2Z1bmNzXzsgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKaW5kZXggNGE5ZWMyMC4uYjI5ZjUzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3ZiZGYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBCREYgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3ZiZGYuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIEJERiBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZCREZfSF8KQEAgLTQ2LDggKzQ2LDYgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQkRGUmVjKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NoYXJzZXRfaWRfLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9wcm9wZXJ0eV8gKSAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU2LDIwICs1NCw2IEBACiAgICAgZ2V0X2NoYXJzZXRfaWRfLCBnZXRfcHJvcGVydHlfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX0JERlJlYyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9jaGFyc2V0X2lkXywgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcHJvcGVydHlfICkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfQkRGUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmdldF9jaGFyc2V0X2lkID0gZ2V0X2NoYXJzZXRfaWRfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfcHJvcGVydHkgICA9IGdldF9wcm9wZXJ0eV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmgKaW5kZXggZGI2MjNlNi4uOWU0NDg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2Y2ZmdGwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgQ0ZGIHRhYmxlcyBsb2FkZXIgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN2Y2ZmdGwuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIENGRiB0YWJsZXMgbG9hZGVyIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDE3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNWQ0ZGVExfSF8KQEAgLTY1LDggKzY1LDYgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQ0ZGTE9BRFJFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3N0YW5kYXJkX2VuY29kaW5nXywgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9wcml2YXRlX2RpY3RfLCAgICAgIFwKQEAgLTgyLDI2ICs4MCw2IEBACiAgICAgYmxlbmRfYnVpbGRfdmVjdG9yXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQ0ZGTE9BRFJFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3N0YW5kYXJkX2VuY29kaW5nXywgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9wcml2YXRlX2RpY3RfLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2VsZWN0X2dldF8sICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRfY2hlY2tfdmVjdG9yXywgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRfYnVpbGRfdmVjdG9yXyApICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9TZXJ2aWNlX0NGRkxvYWRSZWMqICBjbGF6eiApICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X3N0YW5kYXJkX2VuY29kaW5nID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nXzsgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9wcml2YXRlX2RpY3QgICAgID0gbG9hZF9wcml2YXRlX2RpY3RfOyAgICAgICAgIFwKLSAgICBjbGF6ei0+ZmRfc2VsZWN0X2dldCAgICAgICAgID0gZmRfc2VsZWN0X2dldF87ICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+YmxlbmRfY2hlY2tfdmVjdG9yICAgID0gYmxlbmRfY2hlY2tfdmVjdG9yXzsgICAgICAgIFwKLSAgICBjbGF6ei0+YmxlbmRfYnVpbGRfdmVjdG9yICAgID0gYmxlbmRfYnVpbGRfdmVjdG9yXzsgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogCiBGVF9FTkRfSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaAppbmRleCBjYjU5YWM2Li45ZWYwYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdmNpZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIENJRCBmb250IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdmNpZC5oCisgKgorICogICBUaGUgRnJlZVR5cGUgQ0lEIGZvbnQgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTVkNJRF9IXwpAQCAtNDgsOCArNDgsNiBAQAogICB9OwogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQogI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9DSURSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcm9zXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2lzX2NpZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTksMjUgKzU3LDYgQEAKICAgICBnZXRfcm9zXywgZ2V0X2lzX2NpZF8sIGdldF9jaWRfZnJvbV9nbHlwaF9pbmRleF8gICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQ0lEUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Jvc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9pc19jaWRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXhfICkgICAgICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX0NJRFJlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmdldF9yb3MgICAgICAgICAgICAgICAgICA9IGdldF9yb3NfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfaXNfY2lkICAgICAgICAgICAgICAgPSBnZXRfaXNfY2lkXzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2NpZF9mcm9tX2dseXBoX2luZGV4ID0gZ2V0X2NpZF9mcm9tX2dseXBoX2luZGV4XzsgICAgICAgICAgICBcCi0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKaW5kZXggM2I3MzJiZS4uNjE4MjM2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3ZmbnRmbXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBmb250IGZvcm1hdCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3ZmbnRmbXQuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIGZvbnQgZm9ybWF0IHNlcnZpY2UgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZGTlRGTVRfSF8KQEAgLTI2LDkgKzI2LDkgQEAKIAogCiAgIC8qCi0gICAqICBBIHRyaXZpYWwgc2VydmljZSB1c2VkIHRvIHJldHVybiB0aGUgbmFtZSBvZiBhIGZhY2UncyBmb250IGRyaXZlciwKLSAgICogIGFjY29yZGluZyB0byB0aGUgWEZyZWU4NiBub21lbmNsYXR1cmUuICBOb3RlIHRoYXQgdGhlIHNlcnZpY2UgZGF0YQotICAgKiAgaXMgYSBzaW1wbGUgY29uc3RhbnQgc3RyaW5nIHBvaW50ZXIuCisgICAqIEEgdHJpdmlhbCBzZXJ2aWNlIHVzZWQgdG8gcmV0dXJuIHRoZSBuYW1lIG9mIGEgZmFjZSdzIGZvbnQgZHJpdmVyLAorICAgKiBhY2NvcmRpbmcgdG8gdGhlIFhGcmVlODYgbm9tZW5jbGF0dXJlLiAgTm90ZSB0aGF0IHRoZSBzZXJ2aWNlIGRhdGEKKyAgICogaXMgYSBzaW1wbGUgY29uc3RhbnQgc3RyaW5nIHBvaW50ZXIuCiAgICAqLwogCiAjZGVmaW5lIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQgICJmb250LWZvcm1hdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaAppbmRleCBmMWE2OGUzLi4wODQwYjU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdmdsZGljdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIGRpY3Rpb25hcnkgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdmdsZGljdC5oCisgKgorICogICBUaGUgRnJlZVR5cGUgZ2x5cGggZGljdGlvbmFyeSBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZHTERJQ1RfSF8KQEAgLTI2LDggKzI2LDggQEAKIAogCiAgIC8qCi0gICAqICBBIHNlcnZpY2UgdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcywgYXMgd2VsbCBhcyB0byBmaW5kIHRoZQotICAgKiAgaW5kZXggb2YgYSBnaXZlbiBnbHlwaCBuYW1lIGluIGEgZm9udC4KKyAgICogQSBzZXJ2aWNlIHVzZWQgdG8gcmV0cmlldmUgZ2x5cGggbmFtZXMsIGFzIHdlbGwgYXMgdG8gZmluZCB0aGUKKyAgICogaW5kZXggb2YgYSBnaXZlbiBnbHlwaCBuYW1lIGluIGEgZm9udC4KICAgICoKICAgICovCiAKQEAgLTUyLDggKzUyLDYgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfR0xZUEhESUNUUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleF8gKSAgICAgICAgICAgICAgICAgIFwKQEAgLTYyLDIzICs2MCw2IEBACiAgICAgZ2V0X25hbWVfLCBuYW1lX2luZGV4XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9HTFlQSERJQ1RSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X25hbWVfLCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2luZGV4XyApICAgICAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyogIGNsYXp6ICkgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfbmFtZSAgID0gZ2V0X25hbWVfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPm5hbWVfaW5kZXggPSBuYW1lX2luZGV4XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKaW5kZXggZWQ3OWViZS4uN2ZhMjdmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2Z3h2YWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChzcGVjaWZpY2F0aW9uKS4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdmd4dmFsLmgKKyAqCisgKiAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2lmbmRlZiBTVkdYVkFMX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaAppbmRleCBjN2U4ZjZlLi5lZjk1YjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2a2Vybi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgS2VybmluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN2a2Vybi5oCisgKgorICogICBUaGUgRnJlZVR5cGUgS2VybmluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTVktFUk5fSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaAppbmRleCBhYmFhY2RkLi45MWRlMDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdm1ldHJpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIGZvciBtZXRyaWNzIHZhcmlhdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdm1ldHJpYy5oCisgKgorICogICBUaGUgRnJlZVR5cGUgc2VydmljZXMgZm9yIG1ldHJpY3MgdmFyaWF0aW9ucyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZNRVRSSUNfSF8KQEAgLTI2LDcgKzI2LDcgQEAKIAogCiAgIC8qCi0gICAqICBBIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBgSFZBUiwgYE1WQVInLCBhbmQgYFZWQVInIE9wZW5UeXBlIHRhYmxlcy4KKyAgICogQSBzZXJ2aWNlIHRvIG1hbmFnZSB0aGUgYEhWQVIsIGBNVkFSJywgYW5kIGBWVkFSJyBPcGVuVHlwZSB0YWJsZXMuCiAgICAqCiAgICAqLwogCkBAIC05Myw4ICs5Myw2IEBACiAgIH07CiAKIAotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX01FVFJJQ1NWQVJJQVRJT05TUkVDKCBjbGFzc18sICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkdmFuY2VfYWRqdXN0XywgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzYl9hZGp1c3RfLCAgICAgICBcCkBAIC0xMTYsMzIgKzExNCw2IEBACiAgICAgbWV0cmljc19hZGp1c3RfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX01FVFJJQ1NWQVJJQVRJT05TUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkdmFuY2VfYWRqdXN0XywgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzYl9hZGp1c3RfLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2JfYWRqdXN0XywgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFkdmFuY2VfYWRqdXN0XywgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzYl9hZGp1c3RfLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBic2JfYWRqdXN0XywgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9yZ19hZGp1c3RfLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3NfYWRqdXN0XyAgKSAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfTWV0cmljc1ZhcmlhdGlvbnNSZWMqICBjbGF6eiApIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmhhZHZhbmNlX2FkanVzdCA9IGhhZHZhbmNlX2FkanVzdF87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5sc2JfYWRqdXN0ICAgICAgPSBsc2JfYWRqdXN0XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cnNiX2FkanVzdCAgICAgID0gcnNiX2FkanVzdF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnZhZHZhbmNlX2FkanVzdCA9IHZhZHZhbmNlX2FkanVzdF87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT50c2JfYWRqdXN0ICAgICAgPSB0c2JfYWRqdXN0XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+YnNiX2FkanVzdCAgICAgID0gYnNiX2FkanVzdF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnZvcmdfYWRqdXN0ICAgICA9IHZvcmdfYWRqdXN0XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5tZXRyaWNzX2FkanVzdCAgPSBtZXRyaWNzX2FkanVzdF87ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKaW5kZXggYmNiYjM4ZS4uNmFlYWE0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2bW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVycyBhbmQgR1ggdmFyIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN2bW0uaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIE11bHRpcGxlIE1hc3RlcnMgYW5kIEdYIHZhciBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZNTV9IXwpAQCAtMjYsOSArMjYsOSBAQAogCiAKICAgLyoKLSAgICogIEEgc2VydmljZSB1c2VkIHRvIG1hbmFnZSBtdWx0aXBsZS1tYXN0ZXJzIGRhdGEgaW4gYSBnaXZlbiBmYWNlLgorICAgKiBBIHNlcnZpY2UgdXNlZCB0byBtYW5hZ2UgbXVsdGlwbGUtbWFzdGVycyBkYXRhIGluIGEgZ2l2ZW4gZmFjZS4KICAgICoKLSAgICogIFNlZSB0aGUgcmVsYXRlZCBBUElzIGluIGBmdG1tLmgnIChGVF9NVUxUSVBMRV9NQVNURVJTX0gpLgorICAgKiBTZWUgdGhlIHJlbGF0ZWQgQVBJcyBpbiBgZnRtbS5oJyAoRlRfTVVMVElQTEVfTUFTVEVSU19IKS4KICAgICoKICAgICovCiAKQEAgLTEwNCw4ICsxMDQsNiBAQAogICB9OwogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQogI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9NVUxUSU1BU1RFUlNSRUMoIGNsYXNzXywgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tbV8sICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9tbV9kZXNpZ25fLCAgXApAQCAtMTMxLDM2ICsxMjksNiBAQAogICAgIGRvbmVfYmxlbmRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQyggY2xhc3NfLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9tbV9kZXNpZ25fLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X21tX2JsZW5kXywgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fYmxlbmRfLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tbV92YXJfLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3Zhcl9kZXNpZ25fLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdmFyX2Rlc2lnbl8sICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9pbnN0YW5jZV8sICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Zhcl9ibGVuZF8sICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lX2JsZW5kXyApICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfU2VydmljZV9NdWx0aU1hc3RlcnNSZWMqICBjbGF6eiApIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfbW0gICAgICAgICA9IGdldF9tbV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnNldF9tbV9kZXNpZ24gID0gc2V0X21tX2Rlc2lnbl87ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+c2V0X21tX2JsZW5kICAgPSBzZXRfbW1fYmxlbmRfOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfbW1fYmxlbmQgICA9IGdldF9tbV9ibGVuZF87ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmdldF9tbV92YXIgICAgID0gZ2V0X21tX3Zhcl87ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+c2V0X3Zhcl9kZXNpZ24gPSBzZXRfdmFyX2Rlc2lnbl87ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfdmFyX2Rlc2lnbiA9IGdldF92YXJfZGVzaWduXzsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnNldF9pbnN0YW5jZSAgID0gc2V0X2luc3RhbmNlXzsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X3Zhcl9ibGVuZCAgPSBnZXRfdmFyX2JsZW5kXzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5kb25lX2JsZW5kICAgICA9IGRvbmVfYmxlbmRfOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCmluZGV4IDMxMjk0MjkuLjlhM2ZmNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZvdHZhbC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdm90dmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIE9wZW5UeXBlIHZhbGlkYXRpb24gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdm90dmFsLmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBPcGVuVHlwZSB2YWxpZGF0aW9uIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNWT1RWQUxfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaAppbmRleCBlNjVkNTdlLi4yMWRlYjMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdnBmci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdnBmci5oCisgKgorICogICBJbnRlcm5hbCBQRlIgc2VydmljZSBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNWUEZSX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKaW5kZXggNGE0OWQ4Yi4uMWUzOWRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3Zwb3N0bm0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3Zwb3N0bm0uaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgbmFtZSBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZQT1NUTk1fSF8KQEAgLTI1LDEzICsyNSwxMyBAQAogRlRfQkVHSU5fSEVBREVSCiAKICAgLyoKLSAgICogIEEgdHJpdmlhbCBzZXJ2aWNlIHVzZWQgdG8gcmV0cmlldmUgdGhlIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuCi0gICAqICBmb250IHdoZW4gYXZhaWxhYmxlLiAgVGhlIGBnZXRfbmFtZScgZmllbGQgc2hvdWxkIG5ldmVyIGJlIE5VTEwuCisgICAqIEEgdHJpdmlhbCBzZXJ2aWNlIHVzZWQgdG8gcmV0cmlldmUgdGhlIFBvc3RTY3JpcHQgbmFtZSBvZiBhIGdpdmVuCisgICAqIGZvbnQgd2hlbiBhdmFpbGFibGUuICBUaGUgYGdldF9uYW1lJyBmaWVsZCBzaG91bGQgbmV2ZXIgYmUgTlVMTC4KICAgICoKLSAgICogIFRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotICAgKiAgUG9zdFNjcmlwdCBuYW1lIGlzIG5vdCBhdmFpbGFibGUuCisgICAqIFRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGNhbiByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgKiBQb3N0U2NyaXB0IG5hbWUgaXMgbm90IGF2YWlsYWJsZS4KICAgICoKLSAgICogIFRoZSBuYW1lIGlzIG93bmVkIGJ5IHRoZSBmYWNlIGFuZCB3aWxsIGJlIGRlc3Ryb3llZCB3aXRoIGl0LgorICAgKiBUaGUgbmFtZSBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgd2lsbCBiZSBkZXN0cm95ZWQgd2l0aCBpdC4KICAgICovCiAKICNkZWZpbmUgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSAgInBvc3RzY3JpcHQtZm9udC1uYW1lIgpAQCAtNDcsMjggKzQ3LDEyIEBACiAgIH07CiAKIAotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1BTRk9OVE5BTUVSRUMoIGNsYXNzXywgZ2V0X3BzX2ZvbnRfbmFtZV8gKSBcCiAgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX1BzRm9udE5hbWVSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZ2V0X3BzX2ZvbnRfbmFtZV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH07CiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFNGT05UTkFNRVJFQyggY2xhc3NfLCBnZXRfcHNfZm9udF9uYW1lXyApIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICBsaWJyYXJ5LCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX1BzRm9udE5hbWVSZWMqICBjbGF6eiApICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X3BzX2ZvbnRfbmFtZSA9IGdldF9wc19mb250X25hbWVfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCmluZGV4IGFkYzBiY2YuLjdlODRjYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3Zwcm9wLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwcm9wZXJ0eSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3Zwcm9wLmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBwcm9wZXJ0eSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTVlBST1BfSF8KQEAgLTQ1LDggKzQ1LDYgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQyggY2xhc3NfLCAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcm9wZXJ0eV8sICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcHJvcGVydHlfICkgIFwKQEAgLTU2LDIwICs1NCw2IEBACiAgICAgZ2V0X3Byb3BlcnR5XyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1BST1BFUlRJRVNSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJvcGVydHlfLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Byb3BlcnR5XyApICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfUHJvcGVydGllc1JlYyogIGNsYXp6ICkgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnNldF9wcm9wZXJ0eSA9IHNldF9wcm9wZXJ0eV87ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfcHJvcGVydHkgPSBnZXRfcHJvcGVydHlfOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaAppbmRleCA1NTg5NTc1Li4xMzY4NzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdnBzY21hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgY2hhcm1hcCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdnBzY21hcC5oCisgKgorICogICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBjaGFybWFwIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNWUFNDTUFQX0hfCkBAIC0yOSwyNyArMjksMjcgQEAKIAogCiAgIC8qCi0gICAqICBBZG9iZSBnbHlwaCBuYW1lIHRvIHVuaWNvZGUgdmFsdWUuCisgICAqIEFkb2JlIGdseXBoIG5hbWUgdG8gdW5pY29kZSB2YWx1ZS4KICAgICovCiAgIHR5cGVkZWYgRlRfVUludDMyCiAgICgqUFNfVW5pY29kZV9WYWx1ZUZ1bmMpKCBjb25zdCBjaGFyKiAgZ2x5cGhfbmFtZSApOwogCiAgIC8qCi0gICAqICBNYWNpbnRvc2ggbmFtZSBpZCB0byBnbHlwaCBuYW1lLiAgTlVMTCBpZiBpbnZhbGlkIGluZGV4LgorICAgKiBNYWNpbnRvc2ggbmFtZSBpZCB0byBnbHlwaCBuYW1lLiAgTlVMTCBpZiBpbnZhbGlkIGluZGV4LgogICAgKi8KICAgdHlwZWRlZiBjb25zdCBjaGFyKgogICAoKlBTX01hY2ludG9zaF9OYW1lRnVuYykoIEZUX1VJbnQgIG5hbWVfaW5kZXggKTsKIAogICAvKgotICAgKiAgQWRvYmUgc3RhbmRhcmQgc3RyaW5nIElEIHRvIGdseXBoIG5hbWUuICBOVUxMIGlmIGludmFsaWQgaW5kZXguCisgICAqIEFkb2JlIHN0YW5kYXJkIHN0cmluZyBJRCB0byBnbHlwaCBuYW1lLiAgTlVMTCBpZiBpbnZhbGlkIGluZGV4LgogICAgKi8KICAgdHlwZWRlZiBjb25zdCBjaGFyKgogICAoKlBTX0Fkb2JlX1N0ZF9TdHJpbmdzRnVuYykoIEZUX1VJbnQgIHN0cmluZ19pbmRleCApOwogCiAKICAgLyoKLSAgICogIFNpbXBsZSB1bmljb2RlIC0+IGdseXBoIGluZGV4IGNoYXJtYXAgYnVpbHQgZnJvbSBmb250IGdseXBoIG5hbWVzCi0gICAqICB0YWJsZS4KKyAgICogU2ltcGxlIHVuaWNvZGUgLT4gZ2x5cGggaW5kZXggY2hhcm1hcCBidWlsdCBmcm9tIGZvbnQgZ2x5cGggbmFtZXMKKyAgICogdGFibGUuCiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgUFNfVW5pTWFwXwogICB7CkBAIC03MSwxNiArNzEsMTYgQEAKIAogCiAgIC8qCi0gICAqICBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBnbHlwaCBuYW1lIGZvciBhIGdpdmVuIGluZGV4LiAgUmV0dXJucwotICAgKiAgTlVMTCBpZiBpbnZhbGlkIGluZGV4LgorICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBnbHlwaCBuYW1lIGZvciBhIGdpdmVuIGluZGV4LiAgUmV0dXJucworICAgKiBOVUxMIGlmIGludmFsaWQgaW5kZXguCiAgICAqLwogICB0eXBlZGVmIGNvbnN0IGNoYXIqCiAgICgqUFNfR2V0R2x5cGhOYW1lRnVuYykoIEZUX1BvaW50ZXIgIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHN0cmluZ19pbmRleCApOwogCiAgIC8qCi0gICAqICBBIGZ1bmN0aW9uIHVzZWQgdG8gcmVsZWFzZSB0aGUgZ2x5cGggbmFtZSByZXR1cm5lZCBieQotICAgKiAgUFNfR2V0R2x5cGhOYW1lRnVuYywgd2hlbiBuZWVkZWQKKyAgICogQSBmdW5jdGlvbiB1c2VkIHRvIHJlbGVhc2UgdGhlIGdseXBoIG5hbWUgcmV0dXJuZWQgYnkKKyAgICogUFNfR2V0R2x5cGhOYW1lRnVuYywgd2hlbiBuZWVkZWQKICAgICovCiAgIHR5cGVkZWYgdm9pZAogICAoKlBTX0ZyZWVHbHlwaE5hbWVGdW5jKSggRlRfUG9pbnRlciAgZGF0YSwKQEAgLTExOCw4ICsxMTgsNiBAQAogICB9OwogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQogI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9QU0NNQVBTUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZV92YWx1ZV8sICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVzX2luaXRfLCAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTM2LDM1ICsxMzQsNiBAQAogICAgIGFkb2JlX3N0ZF9zdHJpbmdzXywgYWRvYmVfc3RkX2VuY29kaW5nXywgYWRvYmVfZXhwZXJ0X2VuY29kaW5nXyAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9QU0NNQVBTUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZV92YWx1ZV8sICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVzX2luaXRfLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2Rlc19jaGFyX2luZGV4XywgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXNfY2hhcl9uZXh0XywgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2ludG9zaF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG9iZV9zdGRfc3RyaW5nc18sICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRvYmVfc3RkX2VuY29kaW5nXywgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkb2JlX2V4cGVydF9lbmNvZGluZ18gKSAgICAgICAgICAgICAgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0NNYXBzUmVjKiAgY2xhenogKSAgICAgICAgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT51bmljb2RlX3ZhbHVlICAgICAgICAgPSB1bmljb2RlX3ZhbHVlXzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+dW5pY29kZXNfaW5pdCAgICAgICAgID0gdW5pY29kZXNfaW5pdF87ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnVuaWNvZGVzX2NoYXJfaW5kZXggICA9IHVuaWNvZGVzX2NoYXJfaW5kZXhfOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT51bmljb2Rlc19jaGFyX25leHQgICAgPSB1bmljb2Rlc19jaGFyX25leHRfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bWFjaW50b3NoX25hbWUgICAgICAgID0gbWFjaW50b3NoX25hbWVfOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmFkb2JlX3N0ZF9zdHJpbmdzICAgICA9IGFkb2JlX3N0ZF9zdHJpbmdzXzsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5hZG9iZV9zdGRfZW5jb2RpbmcgICAgPSBhZG9iZV9zdGRfZW5jb2RpbmdfOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+YWRvYmVfZXhwZXJ0X2VuY29kaW5nID0gYWRvYmVfZXhwZXJ0X2VuY29kaW5nXzsgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKaW5kZXggNDA4ZjQwNi4uMjE0ZmQxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3Zwc2luZm8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IGluZm8gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3Zwc2luZm8uaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgaW5mbyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTVlBTSU5GT19IXwpAQCAtNjIsOCArNjIsNiBAQAogICB9OwogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQogI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9QU0lORk9SRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2ZvbnRfaW5mb18sICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc19nZXRfZm9udF9leHRyYV8sICAgICAgICAgXApAQCAtNzYsMjkgKzc0LDYgQEAKICAgICBnZXRfZm9udF9wcml2YXRlXywgZ2V0X2ZvbnRfdmFsdWVfICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1BTSU5GT1JFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZm9udF9pbmZvXywgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2dldF9mb250X2V4dHJhXywgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2dseXBoX25hbWVzXywgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZm9udF9wcml2YXRlXywgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9mb250X3ZhbHVlXyApICAgICAgICAgICBcCi0gIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnksICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfUHNJbmZvUmVjKiAgY2xhenogKSAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnBzX2dldF9mb250X2luZm8gICAgPSBnZXRfZm9udF9pbmZvXzsgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cHNfZ2V0X2ZvbnRfZXh0cmEgICA9IHBzX2dldF9mb250X2V4dHJhXzsgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5wc19oYXNfZ2x5cGhfbmFtZXMgID0gaGFzX2dseXBoX25hbWVzXzsgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnBzX2dldF9mb250X3ByaXZhdGUgPSBnZXRfZm9udF9wcml2YXRlXzsgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+cHNfZ2V0X2ZvbnRfdmFsdWUgICA9IGdldF9mb250X3ZhbHVlXzsgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCiAgIC8qICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKaW5kZXggZThiMzdiYy4uMDM1ZTExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdnNmbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIFNGTlQgdGFibGUgbG9hZGluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdnNmbnQuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIFNGTlQgdGFibGUgbG9hZGluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTVlNGTlRfSF8KQEAgLTI3LDcgKzI3LDcgQEAKIAogCiAgIC8qCi0gICAqICBTRk5UIHRhYmxlIGxvYWRpbmcgc2VydmljZS4KKyAgICogU0ZOVCB0YWJsZSBsb2FkaW5nIHNlcnZpY2UuCiAgICAqLwogCiAjZGVmaW5lIEZUX1NFUlZJQ0VfSURfU0ZOVF9UQUJMRSAgInNmbnQtdGFibGUiCkBAIC03MCwyNyArNzAsMTIgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfU0ZOVF9UQUJMRVJFQyggY2xhc3NfLCBsb2FkXywgZ2V0XywgaW5mb18gKSAgXAogICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9TRk5UX1RhYmxlUmVjICBjbGFzc18gPSAgICAgICAgICAgICAgICAgICAgICBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBsb2FkXywgZ2V0XywgaW5mb18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1NGTlRfVEFCTEVSRUMoIGNsYXNzXywgbG9hZF8sIGdldF8sIGluZm9fICkgXAotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9TZXJ2aWNlX1NGTlRfVGFibGVSZWMqICBjbGF6eiApICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5sb2FkX3RhYmxlID0gbG9hZF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X3RhYmxlICA9IGdldF87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2xhenotPnRhYmxlX2luZm8gPSBpbmZvXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCiAgIC8qICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCmluZGV4IGNkMGU2ZmQuLmNjNDMyOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2dHRjbWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUvc2ZudCBjbWFwIGV4dHJhIGluZm9ybWF0aW9uIHNlcnZpY2UuICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdnR0Y21hcC5oCisgKgorICogICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUvc2ZudCBjbWFwIGV4dHJhIGluZm9ybWF0aW9uIHNlcnZpY2UuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogLyogRGV2ZWxvcG1lbnQgb2YgdGhpcyBzZXJ2aWNlIGlzIHN1cHBvcnQgb2YKICAgIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeSwgSmFwYW4uICovCkBAIC0zMiwyOSArMzIsMjkgQEAKICNkZWZpbmUgRlRfU0VSVklDRV9JRF9UVF9DTUFQICAidHQtY21hcHMiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9DTWFwSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIFRydWVUeXBlL3NmbnQgc3BlY2lmaWMgY21hcCBpbmZvcm1hdGlvbiAgKi8KLSAgLyogICAgd2hpY2ggaXMgbm90IGNvdmVyZWQgYnkgdGhlIGdlbmVyaWMgQEZUX0NoYXJNYXAgc3RydWN0dXJlLiAgVGhpcyAgICovCi0gIC8qICAgIHN0cnVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgQEZUX0dldF9UVF9DTWFwX0luZm8gZnVuY3Rpb24uICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxhbmd1YWdlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBsYW5ndWFnZSBJRCB1c2VkIGluIE1hYyBmb250cy4gIERlZmluaXRpb25zIG9mIHZhbHVlcyBhcmUgaW4gKi8KLSAgLyogICAgICBgdHRuYW1laWQuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb3JtYXQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgY21hcCBmb3JtYXQuICBPcGVuVHlwZSAxLjYgZGVmaW5lcyB0aGUgZm9ybWF0cyAwIChieXRlICAgICAgICovCi0gIC8qICAgICAgZW5jb2RpbmcgdGFibGUpLCAyfihoaWdoLWJ5dGUgbWFwcGluZyB0aHJvdWdoIHRhYmxlKSwgNH4oc2VnbWVudCAqLwotICAvKiAgICAgIG1hcHBpbmcgdG8gZGVsdGEgdmFsdWVzKSwgNn4odHJpbW1lZCB0YWJsZSBtYXBwaW5nKSwgOH4obWl4ZWQgICAgKi8KLSAgLyogICAgICAxNi1iaXQgYW5kIDMyLWJpdCBjb3ZlcmFnZSksIDEwfih0cmltbWVkIGFycmF5KSwgMTJ+KHNlZ21lbnRlZCAgICovCi0gIC8qICAgICAgY292ZXJhZ2UpLCAxM34obGFzdCByZXNvcnQgZm9udCksIGFuZCAxNCAoVW5pY29kZSBWYXJpYXRpb24gICAgICAqLwotICAvKiAgICAgIFNlcXVlbmNlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0NNYXBJbmZvCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIFRydWVUeXBlL3NmbnQgc3BlY2lmaWMgY21hcCBpbmZvcm1hdGlvbgorICAgKiAgIHdoaWNoIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBnZW5lcmljIEBGVF9DaGFyTWFwIHN0cnVjdHVyZS4gIFRoaXMKKyAgICogICBzdHJ1Y3R1cmUgY2FuIGJlIGFjY2Vzc2VkIHdpdGggdGhlIEBGVF9HZXRfVFRfQ01hcF9JbmZvIGZ1bmN0aW9uLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGxhbmd1YWdlIDo6CisgICAqICAgICBUaGUgbGFuZ3VhZ2UgSUQgdXNlZCBpbiBNYWMgZm9udHMuICBEZWZpbml0aW9ucyBvZiB2YWx1ZXMgYXJlIGluCisgICAqICAgICBgdHRuYW1laWQuaCcuCisgICAqCisgICAqICAgZm9ybWF0IDo6CisgICAqICAgICBUaGUgY21hcCBmb3JtYXQuICBPcGVuVHlwZSAxLjYgZGVmaW5lcyB0aGUgZm9ybWF0cyAwIChieXRlCisgICAqICAgICBlbmNvZGluZyB0YWJsZSksIDJ+KGhpZ2gtYnl0ZSBtYXBwaW5nIHRocm91Z2ggdGFibGUpLCA0fihzZWdtZW50CisgICAqICAgICBtYXBwaW5nIHRvIGRlbHRhIHZhbHVlcyksIDZ+KHRyaW1tZWQgdGFibGUgbWFwcGluZyksIDh+KG1peGVkCisgICAqICAgICAxNi1iaXQgYW5kIDMyLWJpdCBjb3ZlcmFnZSksIDEwfih0cmltbWVkIGFycmF5KSwgMTJ+KHNlZ21lbnRlZAorICAgKiAgICAgY292ZXJhZ2UpLCAxM34obGFzdCByZXNvcnQgZm9udCksIGFuZCAxNCAoVW5pY29kZSBWYXJpYXRpb24KKyAgICogICAgIFNlcXVlbmNlcykuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfQ01hcEluZm9fCiAgIHsKICAgICBGVF9VTG9uZyAgbGFuZ3VhZ2U7CkBAIC03Myw3ICs3Myw2IEBACiAgICAgVFRfQ01hcF9JbmZvX0dldEZ1bmMgIGdldF9jbWFwX2luZm87CiAgIH07CiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIAogI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9UVENNQVBTUkVDKCBjbGFzc18sIGdldF9jbWFwX2luZm9fICkgIFwKICAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfVFRDTWFwc1JlYyAgY2xhc3NfID0gICAgICAgICAgICAgICAgICBcCkBAIC04MSwyMCArODAsNiBAQAogICAgIGdldF9jbWFwX2luZm9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRV9UVENNQVBTUkVDKCBjbGFzc18sIGdldF9jbWFwX2luZm9fICkgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgICAgbGlicmFyeSwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfVFRDTWFwc1JlYyogIGNsYXp6ICkgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2NtYXBfaW5mbyA9IGdldF9jbWFwX2luZm9fOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KICAgLyogKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCmluZGV4IDkyZTNjNTQuLjI1NjRhNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdnR0ZW5nLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlIGVuZ2luZSBxdWVyeSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzdnR0ZW5nLmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBlbmdpbmUgcXVlcnkgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU1ZUVEVOR19IXwpAQCAtMjcsNyArMjcsNyBAQAogCiAKICAgLyoKLSAgICogIFNGTlQgdGFibGUgbG9hZGluZyBzZXJ2aWNlLgorICAgKiBTRk5UIHRhYmxlIGxvYWRpbmcgc2VydmljZS4KICAgICovCiAKICNkZWZpbmUgRlRfU0VSVklDRV9JRF9UUlVFVFlQRV9FTkdJTkUgICJ0cnVldHlwZS1lbmdpbmUiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKaW5kZXggMTZmYWMxYy4uMzg0NDRlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3Z0dGdseWYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBnbHlwaCBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc3Z0dGdseWYuaAorICoKKyAqICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlIGdseXBoIHNlcnZpY2UuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxOCBieQorICogRGF2aWQgVHVybmVyLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAjaWZuZGVmIFNWVFRHTFlGX0hfCiAjZGVmaW5lIFNWVFRHTFlGX0hfCkBAIC0zOSwyNSArMzksMTIgQEAKICAgfTsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfVFRHTFlGUkVDKCBjbGFzc18sIGdldF9sb2NhdGlvbl8gKSAgXAogICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9UVEdseWZSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBnZXRfbG9jYXRpb25fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX1RUR0xZRlJFQyggY2xhc3NfLCBnZXRfbG9jYXRpb25fICkgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX1NlcnZpY2VfVFRHbHlmUmVjKiAgY2xhenogKSAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2xvY2F0aW9uID0gZ2V0X2xvY2F0aW9uXzsgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCiAgIC8qICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCmluZGV4IDgwZDQ4MWMuLjNhYWE4YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN2d2luZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgV2luZG93cyBGTlQvRk9OVCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN2d2luZm50LmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBXaW5kb3dzIEZOVC9GT05UIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNWV0lORk5UX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCmluZGV4IGZiMWUzMjcuLjE3OGQ4OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzZm50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGlnaC1sZXZlbCBgc2ZudCcgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZm50LmgKKyAqCisgKiAgIEhpZ2gtbGV2ZWwgYHNmbnQnIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFNGTlRfSF8KQEAgLTI4LDQzICsyOCw0OCBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Jbml0X0ZhY2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaXJzdCBwYXJ0IG9mIHRoZSBTRk5UIGZhY2Ugb2JqZWN0IGluaXRpYWxpemF0aW9uLiAgVGhpcyBmaW5kcyAgICAgKi8KLSAgLyogICAgdGhlIGZhY2UgaW4gYSBTRk5UIGZpbGUgb3IgY29sbGVjdGlvbiwgYW5kIGxvYWQgaXRzIGZvcm1hdCB0YWcgaW4gICovCi0gIC8qICAgIGZhY2UtPmZvcm1hdF90YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICAgOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBpbiBiaXRzIDAtMTUuICBUaGUgbnVtYmVyZWQgaW5zdGFuY2UgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzICAqLwotICAvKiAgICAgICAgICAgICAgICAgIDE2LTMwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9wYXJhbXMgOjogVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFyYW1zICAgICA6OiBPcHRpb25hbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgZm9udCBmaWxlJ3Mgb3JpZ2luLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIHJlY29nbml6ZXMgZm9udHMgZW1iZWRkZWQgaW4gYSBgVHJ1ZVR5cGUgICAgICAgICAgICAgKi8KLSAgLyogICAgY29sbGVjdGlvbicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmNlIHRoZSBmb3JtYXQgdGFnIGhhcyBiZWVuIHZhbGlkYXRlZCBieSB0aGUgZm9udCBkcml2ZXIsIGl0ICAgICAgKi8KLSAgLyogICAgc2hvdWxkIHRoZW4gY2FsbCB0aGUgVFRfTG9hZF9GYWNlX0Z1bmMoKSBjYWxsYmFjayB0byByZWFkIHRoZSByZXN0ICovCi0gIC8qICAgIG9mIHRoZSBTRk5UIHRhYmxlcyBpbiB0aGUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9Jbml0X0ZhY2VfRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgRmlyc3QgcGFydCBvZiB0aGUgU0ZOVCBmYWNlIG9iamVjdCBpbml0aWFsaXphdGlvbi4gIFRoaXMgZmluZHMKKyAgICogICB0aGUgZmFjZSBpbiBhIFNGTlQgZmlsZSBvciBjb2xsZWN0aW9uLCBhbmQgbG9hZCBpdHMgZm9ybWF0IHRhZyBpbgorICAgKiAgIGZhY2UtPmZvcm1hdF90YWcuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBmYWNlX2luZGV4IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIFRydWVUeXBlIGZvbnQsIGlmIHdlIGFyZSBvcGVuaW5nIGEKKyAgICogICAgIGNvbGxlY3Rpb24sIGluIGJpdHMgMC0xNS4gIFRoZSBudW1iZXJlZCBpbnN0YW5jZQorICAgKiAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzCisgICAqICAgICAxNi0zMC4KKyAgICoKKyAgICogICBudW1fcGFyYW1zIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4KKyAgICoKKyAgICogICBwYXJhbXMgOjoKKyAgICogICAgIE9wdGlvbmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGUgc3RyZWFtIGN1cnNvciBtdXN0IGJlIGF0IHRoZSBmb250IGZpbGUncyBvcmlnaW4uCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiByZWNvZ25pemVzIGZvbnRzIGVtYmVkZGVkIGluIGEgYFRydWVUeXBlCisgICAqICAgY29sbGVjdGlvbicuCisgICAqCisgICAqICAgT25jZSB0aGUgZm9ybWF0IHRhZyBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgdGhlIGZvbnQgZHJpdmVyLCBpdAorICAgKiAgIHNob3VsZCB0aGVuIGNhbGwgdGhlIFRUX0xvYWRfRmFjZV9GdW5jKCkgY2FsbGJhY2sgdG8gcmVhZCB0aGUgcmVzdAorICAgKiAgIG9mIHRoZSBTRk5UIHRhYmxlcyBpbiB0aGUgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0luaXRfRmFjZV9GdW5jKSggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKQEAgLTczLDM2ICs3OCw0MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Mb2FkX0ZhY2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWNvbmQgcGFydCBvZiB0aGUgU0ZOVCBmYWNlIG9iamVjdCBpbml0aWFsaXphdGlvbi4gIFRoaXMgbG9hZHMgICAgKi8KLSAgLyogICAgdGhlIGNvbW1vbiBTRk5UIHRhYmxlcyAoaGVhZCwgT1MvMiwgbWF4cCwgbWV0cmljcywgZXRjLikgaW4gdGhlICAgICovCi0gIC8qICAgIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICAgOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBpbiBiaXRzIDAtMTUuICBUaGUgbnVtYmVyZWQgaW5zdGFuY2UgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzICAqLwotICAvKiAgICAgICAgICAgICAgICAgIDE2LTMwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9wYXJhbXMgOjogVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFyYW1zICAgICA6OiBPcHRpb25hbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBUVF9Jbml0X0ZhY2VfRnVuYygpLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0xvYWRfRmFjZV9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBTZWNvbmQgcGFydCBvZiB0aGUgU0ZOVCBmYWNlIG9iamVjdCBpbml0aWFsaXphdGlvbi4gIFRoaXMgbG9hZHMKKyAgICogICB0aGUgY29tbW9uIFNGTlQgdGFibGVzIChoZWFkLCBPUy8yLCBtYXhwLCBtZXRyaWNzLCBldGMuKSBpbiB0aGUKKyAgICogICBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGZhY2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYQorICAgKiAgICAgY29sbGVjdGlvbiwgaW4gYml0cyAwLTE1LiAgVGhlIG51bWJlcmVkIGluc3RhbmNlCisgICAqICAgICBpbmRleH4rfjEgb2YgYSBHWCAoc3ViKWZvbnQsIGlmIGFwcGxpY2FibGUsIGluIGJpdHMKKyAgICogICAgIDE2LTMwLgorICAgKgorICAgKiAgIG51bV9wYXJhbXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgorICAgKgorICAgKiAgIHBhcmFtcyA6OgorICAgKiAgICAgT3B0aW9uYWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgVFRfSW5pdF9GYWNlX0Z1bmMoKS4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9Mb2FkX0ZhY2VfRnVuYykoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgIGZhY2UsCkBAIC0xMTEsNjQgKzEyMSw3MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Eb25lX0ZhY2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGNhbGxiYWNrIHVzZWQgdG8gZGVsZXRlIHRoZSBjb21tb24gU0ZOVCBkYXRhIGZyb20gYSBmYWNlLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGRlc3Ryb3kgdGhlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVFRfRG9uZV9GYWNlX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgY2FsbGJhY2sgdXNlZCB0byBkZWxldGUgdGhlIGNvbW1vbiBTRk5UIGRhdGEgZnJvbSBhIGZhY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGRlc3Ryb3kgdGhlIGZhY2Ugb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqVFRfRG9uZV9GYWNlX0Z1bmMpKCBUVF9GYWNlICBmYWNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Mb2FkX0FueV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIGFueSBmb250IHRhYmxlIGludG8gY2xpZW50IG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogVGhlIGZhY2Ugb2JqZWN0IHRvIGxvb2sgZm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhZyAgICA6OiBUaGUgdGFnIG9mIHRhYmxlIHRvIGxvYWQuICBVc2UgdGhlIHZhbHVlIDAgaWYgeW91IHdhbnQgICAqLwotICAvKiAgICAgICAgICAgICAgdG8gYWNjZXNzIHRoZSB3aG9sZSBmb250IGZpbGUsIGVsc2Ugc2V0IHRoaXMgcGFyYW1ldGVyICAgKi8KLSAgLyogICAgICAgICAgICAgIHRvIGEgdmFsaWQgVHJ1ZVR5cGUgdGFibGUgdGFnIHRoYXQgeW91IGNhbiBmb3JnZSB3aXRoICAgICovCi0gIC8qICAgICAgICAgICAgICB0aGUgTUFLRV9UVF9UQUcgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb2Zmc2V0IDo6IFRoZSBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHRhYmxlIChvciB0aGUgZmlsZSBpZiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICB0YWcgPT0gMCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGVuZ3RoIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBkZWNpc2lvbiB2YXJpYWJsZTogICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICBJZiBsZW5ndGggPT0gTlVMTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBMb2FkcyB0aGUgd2hvbGUgdGFibGUuICBSZXR1cm5zIGFuIGVycm9yIGlmICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgYG9mZnNldCcgPT0gMCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgSWYgKmxlbmd0aCA9PSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgRXhpdHMgaW1tZWRpYXRlbHk7IHJldHVybmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiAqLwotICAvKiAgICAgICAgICAgICAgICAgIHRhYmxlIG9yIG9mIHRoZSBmb250IGZpbGUsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgKi8KLSAgLyogICAgICAgICAgICAgICAgICBgdGFnJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICBJZiAqbGVuZ3RoICE9IDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBMb2FkcyB0aGUgbmV4dCBgbGVuZ3RoJyBieXRlcyBvZiB0YWJsZSBvciBmb250LCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgb2Zmc2V0IGBvZmZzZXQnIChpbiB0YWJsZSBvciBmb250IHRvbykuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJ1ZmZlciA6OiBUaGUgYWRkcmVzcyBvZiB0YXJnZXQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9Mb2FkX0FueV9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIGFueSBmb250IHRhYmxlIGludG8gY2xpZW50IG1lbW9yeS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBmYWNlIG9iamVjdCB0byBsb29rIGZvci4KKyAgICoKKyAgICogICB0YWcgOjoKKyAgICogICAgIFRoZSB0YWcgb2YgdGFibGUgdG8gbG9hZC4gIFVzZSB0aGUgdmFsdWUgMCBpZiB5b3Ugd2FudAorICAgKiAgICAgdG8gYWNjZXNzIHRoZSB3aG9sZSBmb250IGZpbGUsIGVsc2Ugc2V0IHRoaXMgcGFyYW1ldGVyCisgICAqICAgICB0byBhIHZhbGlkIFRydWVUeXBlIHRhYmxlIHRhZyB0aGF0IHlvdSBjYW4gZm9yZ2Ugd2l0aAorICAgKiAgICAgdGhlIE1BS0VfVFRfVEFHIG1hY3JvLgorICAgKgorICAgKiAgIG9mZnNldCA6OgorICAgKiAgICAgVGhlIHN0YXJ0aW5nIG9mZnNldCBpbiB0aGUgdGFibGUgKG9yIHRoZSBmaWxlIGlmCisgICAqICAgICB0YWcgPT0gMCkuCisgICAqCisgICAqICAgbGVuZ3RoIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgZGVjaXNpb24gdmFyaWFibGU6CisgICAqCisgICAqICAgICBJZiBsZW5ndGggPT0gTlVMTDoKKyAgICogICAgIExvYWRzIHRoZSB3aG9sZSB0YWJsZS4gIFJldHVybnMgYW4gZXJyb3IgaWYKKyAgICogICAgIGBvZmZzZXQnID09IDAhCisgICAqCisgICAqICAgICBJZiAqbGVuZ3RoID09IDA6CisgICAqICAgICBFeGl0cyBpbW1lZGlhdGVseTsgcmV0dXJuaW5nIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuCisgICAqICAgICB0YWJsZSBvciBvZiB0aGUgZm9udCBmaWxlLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mCisgICAqICAgICBgdGFnJy4KKyAgICoKKyAgICogICAgIElmICpsZW5ndGggIT0gMDoKKyAgICogICAgIExvYWRzIHRoZSBuZXh0IGBsZW5ndGgnIGJ5dGVzIG9mIHRhYmxlIG9yIGZvbnQsCisgICAqICAgICBzdGFydGluZyBhdCBvZmZzZXQgYG9mZnNldCcgKGluIHRhYmxlIG9yIGZvbnQgdG9vKS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBidWZmZXIgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRhcmdldCBidWZmZXIuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgVHJ1ZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9Mb2FkX0FueV9GdW5jKSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHRhZywKQEAgLTE3NywzNCArMTkzLDQwIEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgbGVuZ3RoICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9GaW5kX1NCaXRfSW1hZ2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDaGVjayB3aGV0aGVyIGFuIGVtYmVkZGVkIGJpdG1hcCAoYW4gYHNiaXQnKSBleGlzdHMgZm9yIGEgZ2l2ZW4gICAgKi8KLSAgLyogICAgZ2x5cGgsIGF0IGEgZ2l2ZW4gc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9pbmRleCAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmlrZV9pbmRleCAgOjogVGhlIGN1cnJlbnQgc3RyaWtlIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFyYW5nZSAgICAgICAgOjogVGhlIFNCaXQgcmFuZ2UgY29udGFpbmluZyB0aGUgZ2x5cGggaW5kZXguICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXN0cmlrZSAgICAgICA6OiBUaGUgU0JpdCBzdHJpa2UgY29udGFpbmluZyB0aGUgZ2x5cGggaW5kZXguICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZ2x5cGhfb2Zmc2V0IDo6IFRoZSBvZmZzZXQgb2YgdGhlIGdseXBoIGRhdGEgaW4gYEVCRFQnIHRhYmxlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU0ZOVF9FcnJfSW52YWxpZF9Bcmd1bWVudCBpZiBubyBzYml0IGV4aXN0cyBmb3IgdGhlIHJlcXVlc3RlZCAgICAgICovCi0gIC8qICAgIGdseXBoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9GaW5kX1NCaXRfSW1hZ2VfRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQ2hlY2sgd2hldGhlciBhbiBlbWJlZGRlZCBiaXRtYXAgKGFuIGBzYml0JykgZXhpc3RzIGZvciBhIGdpdmVuCisgICAqICAgZ2x5cGgsIGF0IGEgZ2l2ZW4gc3RyaWtlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIHN0cmlrZV9pbmRleCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgc3RyaWtlIGluZGV4LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFyYW5nZSA6OgorICAgKiAgICAgVGhlIFNCaXQgcmFuZ2UgY29udGFpbmluZyB0aGUgZ2x5cGggaW5kZXguCisgICAqCisgICAqICAgYXN0cmlrZSA6OgorICAgKiAgICAgVGhlIFNCaXQgc3RyaWtlIGNvbnRhaW5pbmcgdGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiAgIGFnbHlwaF9vZmZzZXQgOjoKKyAgICogICAgIFRoZSBvZmZzZXQgb2YgdGhlIGdseXBoIGRhdGEgaW4gYEVCRFQnIHRhYmxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICBSZXR1cm5zCisgICAqICAgU0ZOVF9FcnJfSW52YWxpZF9Bcmd1bWVudCBpZiBubyBzYml0IGV4aXN0cyBmb3IgdGhlIHJlcXVlc3RlZAorICAgKiAgIGdseXBoLgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0ZpbmRfU0JpdF9JbWFnZV9GdW5jKSggVFRfRmFjZSAgICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICBnbHlwaF9pbmRleCwKQEAgLTIxNCw3OCArMjM2LDgxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgKmFnbHlwaF9vZmZzZXQgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0xvYWRfU0JpdF9NZXRyaWNzX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgYmlnIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gZW1iZWRkZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFuZ2UgICAgICAgOjogVGhlIFNCaXQgcmFuZ2UgY29udGFpbmluZyB0aGUgZ2x5cGguICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmlnX21ldHJpY3MgOjogQSBiaWcgU0JpdCBtZXRyaWNzIHN0cnVjdHVyZSBmb3IgdGhlIGdseXBoLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBnbHlwaCdzIG9mZnNldCB3aXRoaW4gICovCi0gIC8qICAgIHRoZSBgRUJEVCcgdGFibGUgYmVmb3JlIHRoZSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSWYgdGhlIGltYWdlIGZvcm1hdCB1c2VzIHZhcmlhYmxlIG1ldHJpY3MsIHRoZSBzdHJlYW0gY3Vyc29yIGlzICAgICovCi0gIC8qICAgIHBvc2l0aW9uZWQganVzdCBhZnRlciB0aGUgbWV0cmljcyBoZWFkZXIgaW4gdGhlIGBFQkRUJyB0YWJsZSBvbiAgICAqLwotICAvKiAgICBmdW5jdGlvbiBleGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVFRfTG9hZF9TQml0X01ldHJpY3NfRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgR2V0IHRoZSBiaWcgbWV0cmljcyBmb3IgYSBnaXZlbiBlbWJlZGRlZCBiaXRtYXAuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICAgcmFuZ2UgOjoKKyAgICogICAgIFRoZSBTQml0IHJhbmdlIGNvbnRhaW5pbmcgdGhlIGdseXBoLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGJpZ19tZXRyaWNzIDo6CisgICAqICAgICBBIGJpZyBTQml0IG1ldHJpY3Mgc3RydWN0dXJlIGZvciB0aGUgZ2x5cGguCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBnbHlwaCdzIG9mZnNldCB3aXRoaW4KKyAgICogICB0aGUgYEVCRFQnIHRhYmxlIGJlZm9yZSB0aGUgY2FsbC4KKyAgICoKKyAgICogICBJZiB0aGUgaW1hZ2UgZm9ybWF0IHVzZXMgdmFyaWFibGUgbWV0cmljcywgdGhlIHN0cmVhbSBjdXJzb3IgaXMKKyAgICogICBwb3NpdGlvbmVkIGp1c3QgYWZ0ZXIgdGhlIG1ldHJpY3MgaGVhZGVyIGluIHRoZSBgRUJEVCcgdGFibGUgb24KKyAgICogICBmdW5jdGlvbiBleGl0LgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0xvYWRfU0JpdF9NZXRyaWNzX0Z1bmMpKCBGVF9TdHJlYW0gICAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdF9SYW5nZSAgICByYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdF9NZXRyaWNzICBtZXRyaWNzICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Mb2FkX1NCaXRfSW1hZ2VfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIGEgZ2l2ZW4gZ2x5cGggc2JpdCBpbWFnZSBmcm9tIHRoZSBmb250IHJlc291cmNlLiAgVGhpcyBhbHNvICAgKi8KLSAgLyogICAgcmV0dXJucyBpdHMgbWV0cmljcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaWtlX2luZGV4IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHN0cmlrZSBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfaW5kZXggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGN1cnJlbnQgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9mbGFncyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGN1cnJlbnQgbG9hZCBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFtYXAgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSB0YXJnZXQgcGl4bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFtZXRyaWNzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgYmlnIHNiaXQgbWV0cmljcyBzdHJ1Y3R1cmUgZm9yIHRoZSBnbHlwaCBpbWFnZS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyBhbiBlcnJvciBpZiBubyAgICAgKi8KLSAgLyogICAgZ2x5cGggc2JpdCBleGlzdHMgZm9yIHRoZSBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGBtYXAuYnVmZmVyJyBmaWVsZCBpcyBhbHdheXMgZnJlZWQgYmVmb3JlIHRoZSBnbHlwaCBpcyBsb2FkZWQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0xvYWRfU0JpdF9JbWFnZV9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIGEgZ2l2ZW4gZ2x5cGggc2JpdCBpbWFnZSBmcm9tIHRoZSBmb250IHJlc291cmNlLiAgVGhpcyBhbHNvCisgICAqICAgcmV0dXJucyBpdHMgbWV0cmljcy4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc3RyaWtlX2luZGV4IDo6CisgICAqICAgICBUaGUgc3RyaWtlIGluZGV4LgorICAgKgorICAgKiAgIGdseXBoX2luZGV4IDo6CisgICAqICAgICBUaGUgY3VycmVudCBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogICBsb2FkX2ZsYWdzIDo6CisgICAqICAgICBUaGUgY3VycmVudCBsb2FkIGZsYWdzLgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhbWFwIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IHBpeG1hcC4KKyAgICoKKyAgICogICBhbWV0cmljcyA6OgorICAgKiAgICAgQSBiaWcgc2JpdCBtZXRyaWNzIHN0cnVjdHVyZSBmb3IgdGhlIGdseXBoIGltYWdlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICBSZXR1cm5zIGFuIGVycm9yIGlmIG5vCisgICAqICAgZ2x5cGggc2JpdCBleGlzdHMgZm9yIHRoZSBpbmRleC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGBtYXAuYnVmZmVyJyBmaWVsZCBpcyBhbHdheXMgZnJlZWQgYmVmb3JlIHRoZSBnbHlwaCBpcyBsb2FkZWQuCisgICAqLwogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqVFRfTG9hZF9TQml0X0ltYWdlX0Z1bmMpKCBUVF9GYWNlICAgICAgICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgICAgc3RyaWtlX2luZGV4LApAQCAtMjk2LDEzMCArMzIxLDE0NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfU0JpdF9NZXRyaWNzUmVjICAqYW1ldHJpY3MgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NldF9TQml0X1N0cmlrZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlbGVjdCBhbiBzYml0IHN0cmlrZSBmb3IgYSBnaXZlbiBzaXplIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgICAgOjogVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmVxICAgICAgICAgICA6OiBUaGUgc2l6ZSByZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXN0cmlrZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIHNiaXQgc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gIFJldHVybnMgYW4gZXJyb3IgaWYgbm8gICAgICovCi0gIC8qICAgIHNiaXQgc3RyaWtlIGV4aXN0cyBmb3IgdGhlIHNlbGVjdGVkIHBwZW0gdmFsdWVzLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU2VsZWN0IGFuIHNiaXQgc3RyaWtlIGZvciBhIGdpdmVuIHNpemUgcmVxdWVzdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgcmVxIDo6CisgICAqICAgICBUaGUgc2l6ZSByZXF1ZXN0LgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIGFzdHJpa2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgc2JpdCBzdHJpa2UuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gIFJldHVybnMgYW4gZXJyb3IgaWYgbm8KKyAgICogICBzYml0IHN0cmlrZSBleGlzdHMgZm9yIHRoZSBzZWxlY3RlZCBwcGVtIHZhbHVlcy4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYykoIFRUX0ZhY2UgICAgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcqICAgICAgICBhc3RyaWtlX2luZGV4ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Mb2FkX1N0cmlrZV9NZXRyaWNzX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICAgIDo6IFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmlrZV9pbmRleCAgOjogVGhlIHN0cmlrZSBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1ldHJpY3MgICAgICAgOjogdGhlIG1ldHJpY3Mgb2YgdGhlIHN0cmlrZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICBSZXR1cm5zIGFuIGVycm9yIGlmIG5vICAgICAqLwotICAvKiAgICBzdWNoIHNiaXQgc3RyaWtlIGV4aXN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVFRfTG9hZF9TdHJpa2VfTWV0cmljc19GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gc3RyaWtlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzdHJpa2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBzdHJpa2UgaW5kZXguCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgbWV0cmljcyA6OgorICAgKiAgICAgdGhlIG1ldHJpY3Mgb2YgdGhlIHN0cmlrZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgUmV0dXJucyBhbiBlcnJvciBpZiBubworICAgKiAgIHN1Y2ggc2JpdCBzdHJpa2UgZXhpc3RzLgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0xvYWRfU3RyaWtlX01ldHJpY3NfRnVuYykoIFRUX0ZhY2UgICAgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgc3RyaWtlX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0dldF9QU19OYW1lX0Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lIG9mIGEgZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGlkeCAgOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNuYW1lIDo6IFRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nIHBvaW50ZXIuICBXaWxsIGJlIE5VTEwgaW4gY2FzZSAgICovCi0gIC8qICAgICAgICAgICAgICBvZiBlcnJvciwgb3RoZXJ3aXNlIGl0IGlzIGEgcG9pbnRlciB0byB0aGUgZ2x5cGggbmFtZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIFlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIHJldHVybmVkIHN0cmluZyEgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0dldF9QU19OYW1lX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEdldCB0aGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lIG9mIGEgZ2x5cGguCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBpZHggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogICBQU25hbWUgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nIHBvaW50ZXIuICBXaWxsIGJlIE5VTEwgaW4gY2FzZQorICAgKiAgICAgb2YgZXJyb3IsIG90aGVyd2lzZSBpdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGdseXBoIG5hbWUuCisgICAqCisgICAqICAgICBZb3UgbXVzdCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzdHJpbmchCisgICAqCisgICAqIEBvdXRwdXQ6CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9HZXRfUFNfTmFtZV9GdW5jKSggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBQU25hbWUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0xvYWRfTWV0cmljc19GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWQgYSBtZXRyaWNzIHRhYmxlLCB3aGljaCBpcyBhIHRhYmxlIHdpdGggYSBob3Jpem9udGFsIGFuZCBhICAgICAqLwotICAvKiAgICB2ZXJ0aWNhbCB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydGljYWwgOjogQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgdGhlIHZlcnRpY2FsIG9uZS4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0xvYWRfTWV0cmljc19GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIGEgbWV0cmljcyB0YWJsZSwgd2hpY2ggaXMgYSB0YWJsZSB3aXRoIGEgaG9yaXpvbnRhbCBhbmQgYQorICAgKiAgIHZlcnRpY2FsIHZlcnNpb24uCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgdGhlIHZlcnRpY2FsIG9uZS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0xvYWRfTWV0cmljc19GdW5jKSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIHZlcnRpY2FsICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9HZXRfTWV0cmljc19GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGhlYWRlciBpbiBhIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRpY2FsIDo6IEEgYm9vbGVhbiBmbGFnLiAgSWYgc2V0LCBsb2FkIHZlcnRpY2FsIG1ldHJpY3MuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2luZGV4ICAgOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWJlYXJpbmcgOjogVGhlIGhvcml6b250YWwgKG9yIHZlcnRpY2FsKSBiZWFyaW5nLiAgU2V0IHRvIHplcm8gaW4gICovCi0gIC8qICAgICAgICAgICAgICAgIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWFkdmFuY2UgOjogVGhlIGhvcml6b250YWwgKG9yIHZlcnRpY2FsKSBhZHZhbmNlLiAgU2V0IHRvIHplcm8gaW4gICovCi0gIC8qICAgICAgICAgICAgICAgIGNhc2Ugb2YgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9HZXRfTWV0cmljc19GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGhlYWRlciBpbiBhIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgdmVydGljYWwgbWV0cmljcy4KKyAgICoKKyAgICogICBnaW5kZXggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhYmVhcmluZyA6OgorICAgKiAgICAgVGhlIGhvcml6b250YWwgKG9yIHZlcnRpY2FsKSBiZWFyaW5nLiAgU2V0IHRvIHplcm8gaW4KKyAgICogICAgIGNhc2Ugb2YgZXJyb3IuCisgICAqCisgICAqICAgYWFkdmFuY2UgOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIChvciB2ZXJ0aWNhbCkgYWR2YW5jZS4gIFNldCB0byB6ZXJvIGluCisgICAqICAgICBjYXNlIG9mIGVycm9yLgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqVFRfR2V0X01ldHJpY3NfRnVuYykoIFRUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIHZlcnRpY2FsLApAQCAtNDI4LDU3ICs0NjksMTY5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogIGFhZHZhbmNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9HZXRfTmFtZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcm9tIHRoZSBgbmFtZScgdGFibGUsIHJldHVybiBhIGdpdmVuIEVOR0xJU0ggbmFtZSByZWNvcmQgaW4gICAgICAgKi8KLSAgLyogICAgQVNDSUkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1laWQgICA6OiBUaGUgbmFtZSBpZCBvZiB0aGUgbmFtZSByZWNvcmQgdG8gcmV0dXJuLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lICAgICA6OiBUaGUgYWRkcmVzcyBvZiBhbiBhbGxvY2F0ZWQgc3RyaW5nIHBvaW50ZXIuICBOVUxMIGlmICAgKi8KLSAgLyogICAgICAgICAgICAgICAgbm8gbmFtZSBpcyBwcmVzZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX1NldF9QYWxldHRlX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIExvYWQgdGhlIGNvbG9ycyBpbnRvIGBmYWNlLT5wYWxldHRlJyBmb3IgYSBnaXZlbiBwYWxldHRlIGluZGV4LgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBpZHggOjoKKyAgICogICAgIFRoZSBwYWxldHRlIGluZGV4LgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfU2V0X1BhbGV0dGVfRnVuYykoIFRUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGlkeCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9HZXRfQ29scl9MYXllcl9GdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBJdGVyYXRpdmVseSBnZXQgdGhlIGNvbG9yIGxheWVyIGRhdGEgb2YgYSBnaXZlbiBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgYmFzZV9nbHlwaCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4IHRoZSBjb2xvcmVkIGdseXBoIGxheWVycyBhcmUgYXNzb2NpYXRlZCB3aXRoLgorICAgKgorICAgKiBAaW5vdXQ6CisgICAqICAgaXRlcmF0b3IgOjoKKyAgICogICAgIEFuIEBGVF9MYXllckl0ZXJhdG9yIG9iamVjdC4gIEZvciB0aGUgZmlyc3QgY2FsbCB5b3Ugc2hvdWxkIHNldAorICAgKiAgICAgYGl0ZXJhdG9yLT5wJyB0byBOVUxMLiAgRm9yIGFsbCBmb2xsb3dpbmcgY2FsbHMsIHNpbXBseSB1c2UgdGhlCisgICAqICAgICBzYW1lIG9iamVjdCBhZ2Fpbi4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBhZ2x5cGhfaW5kZXggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleCBvZiB0aGUgY3VycmVudCBsYXllci4KKyAgICoKKyAgICogICBhY29sb3JfaW5kZXggOjoKKyAgICogICAgIFRoZSBjb2xvciBpbmRleCBpbnRvIHRoZSBmb250IGZhY2UncyBjb2xvciBwYWxldHRlIG9mIHRoZSBjdXJyZW50CisgICAqICAgICBsYXllci4gIFRoZSB2YWx1ZSAweEZGRkYgaXMgc3BlY2lhbDsgaXQgZG9lc24ndCByZWZlcmVuY2UgYSBwYWxldHRlCisgICAqICAgICBlbnRyeSBidXQgaW5kaWNhdGVzIHRoYXQgdGhlIHRleHQgZm9yZWdyb3VuZCBjb2xvciBzaG91bGQgYmUgdXNlZAorICAgKiAgICAgaW5zdGVhZCAodG8gYmUgc2V0IHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiBvdXRzaWRlIG9mIEZyZWVUeXBlKS4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBWYWx1ZX4xIGlmIGV2ZXJ5dGhpbmcgaXMgT0suICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBsYXllcnMgKG9yIGlmCisgICAqICAgdGhlcmUgYXJlIG5vIGxheWVycyBhdCBhbGwpLCB2YWx1ZX4wIGdldHMgcmV0dXJuZWQuICBJbiBjYXNlIG9mIGFuCisgICAqICAgZXJyb3IsIHZhbHVlfjAgaXMgcmV0dXJuZWQgYWxzby4KKyAgICovCisgIHR5cGVkZWYgRlRfQm9vbAorICAoKlRUX0dldF9Db2xyX0xheWVyX0Z1bmMpKCBUVF9GYWNlICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgIGJhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICphZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICphY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xheWVySXRlcmF0b3IqICBpdGVyYXRvciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9CbGVuZF9Db2xyX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEJsZW5kIHRoZSBiaXRtYXAgaW4gYG5ld19nbHlwaCcgaW50byBgYmFzZV9nbHlwaCcgdXNpbmcgdGhlIGNvbG9yCisgICAqICAgc3BlY2lmaWVkIGJ5IGBjb2xvcl9pbmRleCcuICBJZiBgY29sb3JfaW5kZXgnIGlzIDB4RkZGRiwgdXNlCisgICAqICAgYGZhY2UtPmZvcmVncm91bmRfY29sb3InIGlmIGBmYWNlLT5oYXZlX2ZvcmVncm91bmRfY29sb3InIGlzIHNldC4KKyAgICogICBPdGhlcndpc2UgY2hlY2sgYGZhY2UtPnBhbGV0dGVfZGF0YS5wYWxldHRlX2ZsYWdzJzogSWYgcHJlc2VudCBhbmQKKyAgICogICBARlRfUEFMRVRURV9GT1JfREFSS19CQUNLR1JPVU5EIGlzIHNldCwgdXNlIEJHUkEgdmFsdWUgMHhGRkZGRkZGRgorICAgKiAgICh3aGl0ZSBvcGFxdWUpLiAgT3RoZXJ3aXNlIHVzZSBCR1JBIHZhbHVlIDB4MDAwMDAwRkYgKGJsYWNrIG9wYXF1ZSkuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGNvbG9yX2luZGV4IDo6CisgICAqICAgICBDb2xvciBpbmRleCBmcm9tIHRoZSBDT0xSIHRhYmxlLgorICAgKgorICAgKiAgIGJhc2VfZ2x5cGggOjoKKyAgICogICAgIFNsb3QgZm9yIGJpdG1hcCB0byBiZSBtZXJnZWQgaW50by4gIFRoZSB1bmRlcmx5aW5nCisgICAqICAgICBiaXRtYXAgbWF5IGdldCByZWFsbG9jYXRlZC4KKyAgICoKKyAgICogICBuZXdfZ2x5cGggOjoKKyAgICogICAgIFNsb3QgdG8gYmUgaW5jb29wZXJhdGVkIGludG8gYGJhc2VfZ2x5cGgnLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICBSZXR1cm5zIGFuIGVycm9yIGlmCisgICAqICAgY29sb3JfaW5kZXggaXMgaW52YWxpZCBvciByZWFsbG9jYXRpb24gZmFpbHMuCisgICAqLworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqVFRfQmxlbmRfQ29scl9GdW5jKSggVFRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBiYXNlX2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgbmV3X2dseXBoICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0dldF9OYW1lX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEZyb20gdGhlIGBuYW1lJyB0YWJsZSwgcmV0dXJuIGEgZ2l2ZW4gRU5HTElTSCBuYW1lIHJlY29yZCBpbgorICAgKiAgIEFTQ0lJLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBuYW1laWQgOjoKKyAgICogICAgIFRoZSBuYW1lIGlkIG9mIHRoZSBuYW1lIHJlY29yZCB0byByZXR1cm4uCisgICAqCisgICAqIEBpbm91dDoKKyAgICogICBuYW1lIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiBhbiBhbGxvY2F0ZWQgc3RyaW5nIHBvaW50ZXIuICBOVUxMIGlmCisgICAqICAgICBubyBuYW1lIGlzIHByZXNlbnQuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9HZXRfTmFtZV9GdW5jKSggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICBuYW1laWQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyoqICBuYW1lICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jVHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9HZXRfTmFtZV9JRF9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWFyY2ggd2hldGhlciBhbiBFTkdMSVNIIHZlcnNpb24gZm9yIGEgZ2l2ZW4gbmFtZSBJRCBpcyBpbiB0aGUgICAgKi8KLSAgLyogICAgYG5hbWUnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1laWQgICA6OiBUaGUgbmFtZSBpZCBvZiB0aGUgbmFtZSByZWNvcmQgdG8gcmV0dXJuLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aW4gICAgICA6OiBJZiBub24tbmVnYXRpdmUsIGFuIGluZGV4IGludG8gdGhlIGBuYW1lJyB0YWJsZSB3aXRoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgKDMsMSkgb3IgKDMsMCkgV2luZG93cyBlbnRyeS4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhcHBsZSAgICA6OiBJZiBub24tbmVnYXRpdmUsIGFuIGluZGV4IGludG8gdGhlIGBuYW1lJyB0YWJsZSB3aXRoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgKDEsMCkgQXBwbGUgZW50cnkuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMSBpZiB0aGVyZSBpcyBlaXRoZXIgYSB3aW4gb3IgYXBwbGUgZW50cnkgKG9yIGJvdGgpLCAwIG90aGVyaXdzZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0dldF9OYW1lX0lEX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFNlYXJjaCB3aGV0aGVyIGFuIEVOR0xJU0ggdmVyc2lvbiBmb3IgYSBnaXZlbiBuYW1lIElEIGlzIGluIHRoZQorICAgKiAgIGBuYW1lJyB0YWJsZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgbmFtZWlkIDo6CisgICAqICAgICBUaGUgbmFtZSBpZCBvZiB0aGUgbmFtZSByZWNvcmQgdG8gcmV0dXJuLgorICAgKgorICAgKiBAb3V0cHV0OgorICAgKiAgIHdpbiA6OgorICAgKiAgICAgSWYgbm9uLW5lZ2F0aXZlLCBhbiBpbmRleCBpbnRvIHRoZSBgbmFtZScgdGFibGUgd2l0aAorICAgKiAgICAgdGhlIGNvcnJlc3BvbmRpbmcgKDMsMSkgb3IgKDMsMCkgV2luZG93cyBlbnRyeS4KKyAgICoKKyAgICogICBhcHBsZSA6OgorICAgKiAgICAgSWYgbm9uLW5lZ2F0aXZlLCBhbiBpbmRleCBpbnRvIHRoZSBgbmFtZScgdGFibGUgd2l0aAorICAgKiAgICAgdGhlIGNvcnJlc3BvbmRpbmcgKDEsMCkgQXBwbGUgZW50cnkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgMSBpZiB0aGVyZSBpcyBlaXRoZXIgYSB3aW4gb3IgYXBwbGUgZW50cnkgKG9yIGJvdGgpLCAwIG90aGVyaXdzZS4KKyAgICovCiAgIHR5cGVkZWYgRlRfQm9vbAogICAoKlRUX0dldF9OYW1lX0lEX0Z1bmMpKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgbmFtZWlkLApAQCAtNDg2LDQyICs2MzksNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICphcHBsZSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCBhIGdpdmVuIFRydWVUeXBlIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gOjogVGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZnVuY3Rpb24gdXNlcyBgZmFjZS0+Z290b190YWJsZScgdG8gc2VlayB0aGUgc3RyZWFtIHRvIHRoZSAgICAgKi8KLSAgLyogICAgc3RhcnQgb2YgdGhlIHRhYmxlLCBleGNlcHQgd2hpbGUgbG9hZGluZyB0aGUgZm9udCBkaXJlY3RvcnkuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGZ1bmN0eXBlOgorICAgKiAgIFRUX0xvYWRfVGFibGVfRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgTG9hZCBhIGdpdmVuIFRydWVUeXBlIHRhYmxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIGZ1bmN0aW9uIHVzZXMgYGZhY2UtPmdvdG9fdGFibGUnIHRvIHNlZWsgdGhlIHN0cmVhbSB0byB0aGUKKyAgICogICBzdGFydCBvZiB0aGUgdGFibGUsIGV4Y2VwdCB3aGlsZSBsb2FkaW5nIHRoZSBmb250IGRpcmVjdG9yeS4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9Mb2FkX1RhYmxlX0Z1bmMpKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWUgYSBnaXZlbiBUcnVlVHlwZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9GcmVlX1RhYmxlX0Z1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEZyZWUgYSBnaXZlbiBUcnVlVHlwZSB0YWJsZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHZvaWQKICAgKCpUVF9GcmVlX1RhYmxlX0Z1bmMpKCBUVF9GYWNlICBmYWNlICk7CiAKQEAgLTU0NywxOCArNzAzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIHJpZ2h0X2dseXBoICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTRk5UX0ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHN0cnVjdHVyZSBob2xkcyBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHVzZWQgdG8gbG9hZCBhbmQgICAgKi8KLSAgLyogICAgZnJlZSB0aGUgYmFzaWMgdGFibGVzIHRoYXQgYXJlIHJlcXVpcmVkIGluIGEgYHNmbnQnIGZvbnQgZmlsZS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2hlY2sgdGhlIHZhcmlvdXMgeHh4X0Z1bmMoKSBkZXNjcmlwdGlvbnMgZm9yIGRldGFpbHMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBTRk5UX0ludGVyZmFjZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGxvYWQgYW5kCisgICAqICAgZnJlZSB0aGUgYmFzaWMgdGFibGVzIHRoYXQgYXJlIHJlcXVpcmVkIGluIGEgYHNmbnQnIGZvbnQgZmlsZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBDaGVjayB0aGUgdmFyaW91cyB4eHhfRnVuYygpIGRlc2NyaXB0aW9ucyBmb3IgZGV0YWlscy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBTRk5UX0ludGVyZmFjZV8KICAgewogICAgIFRUX0xvYWRlcl9Hb3RvVGFibGVGdW5jICAgICAgZ290b190YWJsZTsKQEAgLTYxNiw2ICs3NzIsMTQgQEAKICAgICBUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYyAgICAgIHNldF9zYml0X3N0cmlrZTsKICAgICBUVF9Mb2FkX1N0cmlrZV9NZXRyaWNzX0Z1bmMgIGxvYWRfc3RyaWtlX21ldHJpY3M7CiAKKyAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgIGxvYWRfY3BhbDsKKyAgICBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICAgICAgIGxvYWRfY29scjsKKyAgICBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICAgICAgIGZyZWVfY3BhbDsKKyAgICBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICAgICAgIGZyZWVfY29scjsKKyAgICBUVF9TZXRfUGFsZXR0ZV9GdW5jICAgICAgICAgIHNldF9wYWxldHRlOworICAgIFRUX0dldF9Db2xyX0xheWVyX0Z1bmMgICAgICAgZ2V0X2NvbHJfbGF5ZXI7CisgICAgVFRfQmxlbmRfQ29scl9GdW5jICAgICAgICAgICBjb2xyX2JsZW5kOworCiAgICAgVFRfR2V0X01ldHJpY3NfRnVuYyAgICAgICAgICBnZXRfbWV0cmljczsKIAogICAgIFRUX0dldF9OYW1lX0Z1bmMgICAgICAgICAgICAgZ2V0X25hbWU7CkBAIC02MjcsNyArNzkxLDYgQEAKICAgLyogdHJhbnNpdGlvbmFsICovCiAgIHR5cGVkZWYgU0ZOVF9JbnRlcmZhY2UqICAgU0ZOVF9TZXJ2aWNlOwogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICNkZWZpbmUgRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKCAgICAgICAgXAogICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02NTksNiArODIyLDEzIEBACiAgICAgICAgICAgZnJlZV9lYmxjXywgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgXAogICAgICAgICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICBcCisgICAgICAgICAgbG9hZF9jcGFsXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBsb2FkX2NvbHJfLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZyZWVfY3BhbF8sICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZnJlZV9jb2xyXywgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzZXRfcGFsZXR0ZV8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGdldF9jb2xyX2xheWVyXywgICAgICAgICAgICAgICBcCisgICAgICAgICAgY29scl9ibGVuZF8sICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZ2V0X25hbWVfaWRfICkgICAgICAgICAgICAgICAgIFwKQEAgLTY5Miw4OSArODYyLDE4IEBACiAgICAgZnJlZV9lYmxjXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzZXRfc2JpdF9zdHJpa2VfLCAgICAgICAgICAgICAgICAgICAgXAogICAgIGxvYWRfc3RyaWtlX21ldHJpY3NfLCAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9jcGFsXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2FkX2NvbHJfLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyZWVfY3BhbF8sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnJlZV9jb2xyXywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXRfcGFsZXR0ZV8sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdldF9jb2xyX2xheWVyXywgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29scl9ibGVuZF8sICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZ2V0X25hbWVfaWRfICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9JTlRFUk5BTCggYSwgYV8gKSAgXAotICAgICAgICAgIGNsYXp6LT5hID0gYV87Ci0KLSNkZWZpbmUgRlRfREVGSU5FX1NGTlRfSU5URVJGQUNFKCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ290b190YWJsZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpbml0X2ZhY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfZmFjZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZG9uZV9mYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfaW50ZXJmYWNlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfYW55XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9oZWFkXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBsb2FkX2hoZWFfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfY21hcF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9tYXhwXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBsb2FkX29zMl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfcG9zdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmcmVlX25hbWVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfa2Vybl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9nYXNwXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBsb2FkX3BjbHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfYmhlZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9zYml0X2ltYWdlXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfcHNuYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZyZWVfcHNuYW1lc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X2tlcm5pbmdfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBsb2FkX2ZvbnRfZGlyXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGxvYWRfaG10eF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9lYmxjXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmcmVlX2VibGNfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHNldF9zYml0X3N0cmlrZV8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbG9hZF9zdHJpa2VfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnZXRfbWV0cmljc18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZ2V0X25hbWVfaWRfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0ZOVF9JbnRlcmZhY2UqICBjbGF6eiApICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUX1VOVVNFRCggbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z290b190YWJsZSAgICAgICAgICA9IGdvdG9fdGFibGVfOyAgICAgICAgICAgXAotICAgIGNsYXp6LT5pbml0X2ZhY2UgICAgICAgICAgID0gaW5pdF9mYWNlXzsgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfZmFjZSAgICAgICAgICAgPSBsb2FkX2ZhY2VfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+ZG9uZV9mYWNlICAgICAgICAgICA9IGRvbmVfZmFjZV87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5nZXRfaW50ZXJmYWNlICAgICAgID0gZ2V0X2ludGVyZmFjZV87ICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfYW55ICAgICAgICAgICAgPSBsb2FkX2FueV87ICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9oZWFkICAgICAgICAgICA9IGxvYWRfaGVhZF87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5sb2FkX2hoZWEgICAgICAgICAgID0gbG9hZF9oaGVhXzsgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfY21hcCAgICAgICAgICAgPSBsb2FkX2NtYXBfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9tYXhwICAgICAgICAgICA9IGxvYWRfbWF4cF87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5sb2FkX29zMiAgICAgICAgICAgID0gbG9hZF9vczJfOyAgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfcG9zdCAgICAgICAgICAgPSBsb2FkX3Bvc3RfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9uYW1lICAgICAgICAgICA9IGxvYWRfbmFtZV87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5mcmVlX25hbWUgICAgICAgICAgID0gZnJlZV9uYW1lXzsgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfa2VybiAgICAgICAgICAgPSBsb2FkX2tlcm5fOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9nYXNwICAgICAgICAgICA9IGxvYWRfZ2FzcF87ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5sb2FkX3BjbHQgICAgICAgICAgID0gbG9hZF9wY2x0XzsgICAgICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfYmhlZCAgICAgICAgICAgPSBsb2FkX2JoZWRfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9zYml0X2ltYWdlICAgICA9IGxvYWRfc2JpdF9pbWFnZV87ICAgICAgXAotICAgIGNsYXp6LT5nZXRfcHNuYW1lICAgICAgICAgID0gZ2V0X3BzbmFtZV87ICAgICAgICAgICBcCi0gICAgY2xhenotPmZyZWVfcHNuYW1lcyAgICAgICAgPSBmcmVlX3BzbmFtZXNfOyAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2tlcm5pbmcgICAgICAgICA9IGdldF9rZXJuaW5nXzsgICAgICAgICAgXAotICAgIGNsYXp6LT5sb2FkX2ZvbnRfZGlyICAgICAgID0gbG9hZF9mb250X2Rpcl87ICAgICAgICBcCi0gICAgY2xhenotPmxvYWRfaG10eCAgICAgICAgICAgPSBsb2FkX2htdHhfOyAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9lYmxjICAgICAgICAgICA9IGxvYWRfZWJsY187ICAgICAgICAgICAgXAotICAgIGNsYXp6LT5mcmVlX2VibGMgICAgICAgICAgID0gZnJlZV9lYmxjXzsgICAgICAgICAgICBcCi0gICAgY2xhenotPnNldF9zYml0X3N0cmlrZSAgICAgPSBzZXRfc2JpdF9zdHJpa2VfOyAgICAgIFwKLSAgICBjbGF6ei0+bG9hZF9zdHJpa2VfbWV0cmljcyA9IGxvYWRfc3RyaWtlX21ldHJpY3NfOyAgXAotICAgIGNsYXp6LT5nZXRfbWV0cmljcyAgICAgICAgID0gZ2V0X21ldHJpY3NfOyAgICAgICAgICBcCi0gICAgY2xhenotPmdldF9uYW1lICAgICAgICAgICAgPSBnZXRfbmFtZV87ICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X25hbWVfaWQgICAgICAgICA9IGdldF9uYW1lX2lkXzsgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiBGVF9FTkRfSEVBREVSCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKaW5kZXggMjExOGUzMy4uNjdjMzg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBCYXNpYyBUeXBlMS9UeXBlMiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgICAqLwotLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0MXR5cGVzLmgKKyAqCisgKiAgIEJhc2ljIFR5cGUxL1R5cGUyIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbgorICogICBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUMVRZUEVTX0hfCkBAIC00NSwyOCArNDUsMzMgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9FbmNvZGluZ1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSBtb2RlbGluZyBhIGN1c3RvbSBlbmNvZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fY2hhcnMgIDo6IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIGNvZGVzIGluIHRoZSBlbmNvZGluZy4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBVc3VhbGx5IDI1Ni4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb2RlX2ZpcnN0IDo6IFRoZSBsb3dlc3QgdmFsaWQgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIGVuY29kaW5nLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvZGVfbGFzdCAgOjogVGhlIGhpZ2hlc3QgdmFsaWQgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIGVuY29kaW5nICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICsgMS4gV2hlbiBlcXVhbCB0byBjb2RlX2ZpcnN0IHRoZXJlIGFyZSBubyB2YWxpZCAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgY29kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyX2luZGV4IDo6IEFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kaWNlcy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJfbmFtZSAgOjogQW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBnbHlwaCBuYW1lcy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVDFfRW5jb2RpbmdSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIGEgY3VzdG9tIGVuY29kaW5nLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIG51bV9jaGFycyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXIgY29kZXMgaW4gdGhlIGVuY29kaW5nLgorICAgKiAgICAgVXN1YWxseSAyNTYuCisgICAqCisgICAqICAgY29kZV9maXJzdCA6OgorICAgKiAgICAgVGhlIGxvd2VzdCB2YWxpZCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgZW5jb2RpbmcuCisgICAqCisgICAqICAgY29kZV9sYXN0IDo6CisgICAqICAgICBUaGUgaGlnaGVzdCB2YWxpZCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgZW5jb2RpbmcKKyAgICogICAgICsgMS4gV2hlbiBlcXVhbCB0byBjb2RlX2ZpcnN0IHRoZXJlIGFyZSBubyB2YWxpZAorICAgKiAgICAgY2hhcmFjdGVyIGNvZGVzLgorICAgKgorICAgKiAgIGNoYXJfaW5kZXggOjoKKyAgICogICAgIEFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kaWNlcy4KKyAgICoKKyAgICogICBjaGFyX25hbWUgOjoKKyAgICogICAgIEFuIGFycmF5IG9mIGNvcnJlc3BvbmRpbmcgZ2x5cGggbmFtZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVDFfRW5jb2RpbmdSZWNSZWNfCiAgIHsKICAgICBGVF9JbnQgICAgICAgbnVtX2NoYXJzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaAppbmRleCAxMGRkMzM2Li40ZGY2YjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHR0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdHlwZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAgICovCi0vKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0dHlwZXMuaAorICoKKyAqICAgQmFzaWMgU0ZOVC9UcnVlVHlwZSB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24KKyAqICAgb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRUWVBFU19IXwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICisjaW5jbHVkZSBGVF9DT0xPUl9ICiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKQEAgLTQ2LDI3ICs0NywzMSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUQ19IZWFkZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRydWVUeXBlIGNvbGxlY3Rpb24gaGVhZGVyLiAgVGhpcyB0YWJsZSBjb250YWlucyB0aGUgb2Zmc2V0cyBvZiAgICAqLwotICAvKiAgICB0aGUgZm9udCBoZWFkZXJzIG9mIGVhY2ggZGlzdGluY3QgVHJ1ZVR5cGUgZmFjZSBpbiB0aGUgZmlsZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWcgICAgIDo6IE11c3QgYmUgYHR0YyAnIHRvIGluZGljYXRlIGEgVHJ1ZVR5cGUgY29sbGVjdGlvbi4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnNpb24gOjogVGhlIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY291bnQgICA6OiBUaGUgbnVtYmVyIG9mIGZhY2VzIGluIHRoZSBjb2xsZWN0aW9uLiAgVGhlICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIGxvbmcsIGJ1dCAqLwotICAvKiAgICAgICAgICAgICAgIHdlIHVzZSBhIHNpZ25lZCBsb25nIHNpbmNlIHdlIG5lZWQgdGhlIHZhbHVlIC0xIGZvciAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBzcGVjaWZpYyBwdXJwb3Nlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvZmZzZXRzIDo6IFRoZSBvZmZzZXRzIG9mIHRoZSBmb250IGhlYWRlcnMsIG9uZSBwZXIgZmFjZS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUQ19IZWFkZXJSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRydWVUeXBlIGNvbGxlY3Rpb24gaGVhZGVyLiAgVGhpcyB0YWJsZSBjb250YWlucyB0aGUgb2Zmc2V0cyBvZgorICAgKiAgIHRoZSBmb250IGhlYWRlcnMgb2YgZWFjaCBkaXN0aW5jdCBUcnVlVHlwZSBmYWNlIGluIHRoZSBmaWxlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgTXVzdCBiZSBgdHRjICcgdG8gaW5kaWNhdGUgYSBUcnVlVHlwZSBjb2xsZWN0aW9uLgorICAgKgorICAgKiAgIHZlcnNpb24gOjoKKyAgICogICAgIFRoZSB2ZXJzaW9uIG51bWJlci4KKyAgICoKKyAgICogICBjb3VudCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBmYWNlcyBpbiB0aGUgY29sbGVjdGlvbi4gIFRoZQorICAgKiAgICAgc3BlY2lmaWNhdGlvbiBzYXlzIHRoaXMgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIGxvbmcsIGJ1dAorICAgKiAgICAgd2UgdXNlIGEgc2lnbmVkIGxvbmcgc2luY2Ugd2UgbmVlZCB0aGUgdmFsdWUgLTEgZm9yCisgICAqICAgICBzcGVjaWZpYyBwdXJwb3Nlcy4KKyAgICoKKyAgICogICBvZmZzZXRzIDo6CisgICAqICAgICBUaGUgb2Zmc2V0cyBvZiB0aGUgZm9udCBoZWFkZXJzLCBvbmUgcGVyIGZhY2UuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRDX0hlYWRlclJlY18KICAgewogICAgIEZUX1VMb25nICAgdGFnOwpAQCAtNzcsMjUgKzgyLDMwIEBACiAgIH0gVFRDX0hlYWRlclJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNGTlRfSGVhZGVyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNGTlQgZmlsZSBmb3JtYXQgaGVhZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvcm1hdF90YWcgICAgIDo6IFRoZSBmb250IGZvcm1hdCB0YWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3RhYmxlcyAgICAgOjogVGhlIG51bWJlciBvZiB0YWJsZXMgaW4gZmlsZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzZWFyY2hfcmFuZ2UgICA6OiBNdXN0IGJlIGAxNiAqIChtYXggcG93ZXIgb2YgMiA8PSBudW1fdGFibGVzKScuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGVudHJ5X3NlbGVjdG9yIDo6IE11c3QgYmUgbG9nMiBvZiBgc2VhcmNoX3JhbmdlIC8gMTYnLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFuZ2Vfc2hpZnQgICAgOjogTXVzdCBiZSBgbnVtX3RhYmxlcyAqIDE2IC0gc2VhcmNoX3JhbmdlJy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBTRk5UX0hlYWRlclJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgU0ZOVCBmaWxlIGZvcm1hdCBoZWFkZXIuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZm9ybWF0X3RhZyA6OgorICAgKiAgICAgVGhlIGZvbnQgZm9ybWF0IHRhZy4KKyAgICoKKyAgICogICBudW1fdGFibGVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHRhYmxlcyBpbiBmaWxlLgorICAgKgorICAgKiAgIHNlYXJjaF9yYW5nZSA6OgorICAgKiAgICAgTXVzdCBiZSBgMTYgKiAobWF4IHBvd2VyIG9mIDIgPD0gbnVtX3RhYmxlcyknLgorICAgKgorICAgKiAgIGVudHJ5X3NlbGVjdG9yIDo6CisgICAqICAgICBNdXN0IGJlIGxvZzIgb2YgYHNlYXJjaF9yYW5nZSAvIDE2Jy4KKyAgICoKKyAgICogICByYW5nZV9zaGlmdCA6OgorICAgKiAgICAgTXVzdCBiZSBgbnVtX3RhYmxlcyAqIDE2IC0gc2VhcmNoX3JhbmdlJy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBTRk5UX0hlYWRlclJlY18KICAgewogICAgIEZUX1VMb25nICAgZm9ybWF0X3RhZzsKQEAgLTEwOSwyNCArMTE5LDI4IEBACiAgIH0gU0ZOVF9IZWFkZXJSZWMsICpTRk5UX0hlYWRlcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1RhYmxlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIGdpdmVuIHRhYmxlIG9mIGEgVHJ1ZVR5cGUgZm9udC4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRhZyAgICAgIDo6IEEgZm91ci1ieXRlcyB0YWcgZGVzY3JpYmluZyB0aGUgdGFibGUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2hlY2tTdW0gOjogVGhlIHRhYmxlIGNoZWNrc3VtLiAgVGhpcyB2YWx1ZSBjYW4gYmUgaWdub3JlZC4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPZmZzZXQgICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSB0YWJsZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgVHJ1ZVR5cGUgKi8KLSAgLyogICAgICAgICAgICAgICAgZm9udCBpbiBpdHMgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMZW5ndGggICA6OiBUaGUgdGFibGUgbGVuZ3RoIChpbiBieXRlcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1RhYmxlUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBnaXZlbiB0YWJsZSBvZiBhIFRydWVUeXBlIGZvbnQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgVGFnIDo6CisgICAqICAgICBBIGZvdXItYnl0ZXMgdGFnIGRlc2NyaWJpbmcgdGhlIHRhYmxlLgorICAgKgorICAgKiAgIENoZWNrU3VtIDo6CisgICAqICAgICBUaGUgdGFibGUgY2hlY2tzdW0uICBUaGlzIHZhbHVlIGNhbiBiZSBpZ25vcmVkLgorICAgKgorICAgKiAgIE9mZnNldCA6OgorICAgKiAgICAgVGhlIG9mZnNldCBvZiB0aGUgdGFibGUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFRydWVUeXBlCisgICAqICAgICBmb250IGluIGl0cyByZXNvdXJjZS4KKyAgICoKKyAgICogICBMZW5ndGggOjoKKyAgICogICAgIFRoZSB0YWJsZSBsZW5ndGggKGluIGJ5dGVzKS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9UYWJsZVJlY18KICAgewogICAgIEZUX1VMb25nICBUYWc7ICAgICAgICAvKiAgICAgICAgdGFibGUgdHlwZSAqLwpAQCAtMTM3LDE5ICsxNTEsMTkgQEAKICAgfSBUVF9UYWJsZVJlYywgKlRUX1RhYmxlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV09GRl9IZWFkZXJSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV09GRiBmaWxlIGZvcm1hdCBoZWFkZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XT0ZGLyNXT0ZGSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFdPRkZfSGVhZGVyUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXT0ZGIGZpbGUgZm9ybWF0IGhlYWRlci4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBTZWUKKyAgICoKKyAgICogICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XT0ZGLyNXT0ZGSGVhZGVyCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgV09GRl9IZWFkZXJSZWNfCiAgIHsKICAgICBGVF9VTG9uZyAgIHNpZ25hdHVyZTsKQEAgLTE2OSwzMCArMTgzLDM2IEBACiAgIH0gV09GRl9IZWFkZXJSZWMsICpXT0ZGX0hlYWRlcjsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdPRkZfVGFibGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIGdpdmVuIHRhYmxlIG9mIGEgV09GRiBmb250LiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRhZyAgICAgICAgOjogQSBmb3VyLWJ5dGVzIHRhZyBkZXNjcmliaW5nIHRoZSB0YWJsZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT2Zmc2V0ICAgICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSB0YWJsZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgV09GRiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgZm9udCBpbiBpdHMgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcExlbmd0aCA6OiBDb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPcmlnTGVuZ3RoIDo6IFVuY29tcHJlc3NlZCB0YWJsZSBsZW5ndGggKGluIGJ5dGVzKS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENoZWNrU3VtICAgOjogVGhlIHRhYmxlIGNoZWNrc3VtLiAgVGhpcyB2YWx1ZSBjYW4gYmUgaWdub3JlZC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3JpZ09mZnNldCA6OiBUaGUgdW5jb21wcmVzc2VkIHRhYmxlIGZpbGUgb2Zmc2V0LiAgVGhpcyB2YWx1ZSBnZXRzICovCi0gIC8qICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgd2hpbGUgY29uc3RydWN0aW5nIHRoZSAodW5jb21wcmVzc2VkKSBTRk5UICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGhlYWRlci4gIEl0IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIFdPRkYgZmlsZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFdPRkZfVGFibGVSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIGdpdmVuIHRhYmxlIG9mIGEgV09GRiBmb250LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIFRhZyA6OgorICAgKiAgICAgQSBmb3VyLWJ5dGVzIHRhZyBkZXNjcmliaW5nIHRoZSB0YWJsZS4KKyAgICoKKyAgICogICBPZmZzZXQgOjoKKyAgICogICAgIFRoZSBvZmZzZXQgb2YgdGhlIHRhYmxlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBXT0ZGCisgICAqICAgICBmb250IGluIGl0cyByZXNvdXJjZS4KKyAgICoKKyAgICogICBDb21wTGVuZ3RoIDo6CisgICAqICAgICBDb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLgorICAgKgorICAgKiAgIE9yaWdMZW5ndGggOjoKKyAgICogICAgIFVuY29tcHJlc3NlZCB0YWJsZSBsZW5ndGggKGluIGJ5dGVzKS4KKyAgICoKKyAgICogICBDaGVja1N1bSA6OgorICAgKiAgICAgVGhlIHRhYmxlIGNoZWNrc3VtLiAgVGhpcyB2YWx1ZSBjYW4gYmUgaWdub3JlZC4KKyAgICoKKyAgICogICBPcmlnT2Zmc2V0IDo6CisgICAqICAgICBUaGUgdW5jb21wcmVzc2VkIHRhYmxlIGZpbGUgb2Zmc2V0LiAgVGhpcyB2YWx1ZSBnZXRzCisgICAqICAgICBjb21wdXRlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgdGhlICh1bmNvbXByZXNzZWQpIFNGTlQKKyAgICogICAgIGhlYWRlci4gIEl0IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIFdPRkYgZmlsZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBXT0ZGX1RhYmxlUmVjXwogICB7CiAgICAgRlRfVUxvbmcgIFRhZzsgICAgICAgICAgIC8qIHRhYmxlIElEICAgICAgICAgICAgICAgICAgKi8KQEAgLTIwNiwyMCArMjI2LDIyIEBACiAgIH0gV09GRl9UYWJsZVJlYywgKldPRkZfVGFibGU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Mb25nTWV0cmljc1JlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSBtb2RlbGluZyB0aGUgbG9uZyBtZXRyaWNzIG9mIHRoZSBgaG10eCcgYW5kIGB2bXR4JyAgICAgKi8KLSAgLyogICAgVHJ1ZVR5cGUgdGFibGVzLiAgVGhlIHZhbHVlcyBhcmUgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWR2YW5jZSA6OiBUaGUgYWR2YW5jZSB3aWR0aCBvciBoZWlnaHQgZm9yIHRoZSBnbHlwaC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiZWFyaW5nIDo6IFRoZSBsZWZ0LXNpZGUgb3IgdG9wLXNpZGUgYmVhcmluZyBmb3IgdGhlIGdseXBoLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0xvbmdNZXRyaWNzUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSBtb2RlbGluZyB0aGUgbG9uZyBtZXRyaWNzIG9mIHRoZSBgaG10eCcgYW5kIGB2bXR4JworICAgKiAgIFRydWVUeXBlIHRhYmxlcy4gIFRoZSB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGFkdmFuY2UgOjoKKyAgICogICAgIFRoZSBhZHZhbmNlIHdpZHRoIG9yIGhlaWdodCBmb3IgdGhlIGdseXBoLgorICAgKgorICAgKiAgIGJlYXJpbmcgOjoKKyAgICogICAgIFRoZSBsZWZ0LXNpZGUgb3IgdG9wLXNpZGUgYmVhcmluZyBmb3IgdGhlIGdseXBoLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0xvbmdNZXRyaWNzUmVjXwogICB7CiAgICAgRlRfVVNob3J0ICBhZHZhbmNlOwpAQCAtMjI4LDQ1ICsyNTAsNTIgQEAKICAgfSBUVF9Mb25nTWV0cmljc1JlYywgKlRUX0xvbmdNZXRyaWNzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfU2hvcnRNZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzaW1wbGUgdHlwZSB0byBtb2RlbCB0aGUgc2hvcnQgbWV0cmljcyBvZiB0aGUgYGhtdHgnIGFuZCBgdm10eCcgICovCi0gIC8qICAgIHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFRUX1Nob3J0TWV0cmljcworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzaW1wbGUgdHlwZSB0byBtb2RlbCB0aGUgc2hvcnQgbWV0cmljcyBvZiB0aGUgYGhtdHgnIGFuZCBgdm10eCcKKyAgICogICB0YWJsZXMuCisgICAqLwogICB0eXBlZGVmIEZUX1Nob3J0ICBUVF9TaG9ydE1ldHJpY3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9OYW1lUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSBtb2RlbGluZyBUcnVlVHlwZSBuYW1lIHJlY29yZHMuICBOYW1lIHJlY29yZHMgYXJlIHVzZWQgKi8KLSAgLyogICAgdG8gc3RvcmUgaW1wb3J0YW50IHN0cmluZ3MgbGlrZSBmYW1pbHkgbmFtZSwgc3R5bGUgbmFtZSwgICAgICAgICAgICovCi0gIC8qICAgIGNvcHlyaWdodCwgZXRjLiBpbiBfbG9jYWxpemVkXyB2ZXJzaW9ucyAoaS5lLiwgbGFuZ3VhZ2UsIGVuY29kaW5nLCAqLwotICAvKiAgICBldGMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwbGF0Zm9ybUlEICAgOjogVGhlIElEIG9mIHRoZSBuYW1lJ3MgZW5jb2RpbmcgcGxhdGZvcm0uICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGVuY29kaW5nSUQgICA6OiBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgSUQgZm9yIHRoZSBuYW1lJ3MgZW5jb2RpbmcuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGFuZ3VhZ2VJRCAgIDo6IFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBJRCBmb3IgdGhlIG5hbWUncyBsYW5ndWFnZS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lSUQgICAgICAgOjogVGhlIElEIHNwZWNpZnlpbmcgd2hhdCBraW5kIG9mIG5hbWUgdGhpcyBpcy4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmluZ0xlbmd0aCA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaW5nT2Zmc2V0IDo6IFRoZSBvZmZzZXQgdG8gdGhlIHN0cmluZyBpbiB0aGUgYG5hbWUnIHRhYmxlLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJpbmcgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBzdHJpbmcncyBieXRlcy4gIE5vdGUgdGhhdCB0aGVzZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgIGFyZSB1c3VhbGx5IFVURi0xNiBlbmNvZGVkIGNoYXJhY3RlcnMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9OYW1lUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSBtb2RlbGluZyBUcnVlVHlwZSBuYW1lIHJlY29yZHMuICBOYW1lIHJlY29yZHMgYXJlIHVzZWQKKyAgICogICB0byBzdG9yZSBpbXBvcnRhbnQgc3RyaW5ncyBsaWtlIGZhbWlseSBuYW1lLCBzdHlsZSBuYW1lLAorICAgKiAgIGNvcHlyaWdodCwgZXRjLiBpbiBfbG9jYWxpemVkXyB2ZXJzaW9ucyAoaS5lLiwgbGFuZ3VhZ2UsIGVuY29kaW5nLAorICAgKiAgIGV0YykuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcGxhdGZvcm1JRCA6OgorICAgKiAgICAgVGhlIElEIG9mIHRoZSBuYW1lJ3MgZW5jb2RpbmcgcGxhdGZvcm0uCisgICAqCisgICAqICAgZW5jb2RpbmdJRCA6OgorICAgKiAgICAgVGhlIHBsYXRmb3JtLXNwZWNpZmljIElEIGZvciB0aGUgbmFtZSdzIGVuY29kaW5nLgorICAgKgorICAgKiAgIGxhbmd1YWdlSUQgOjoKKyAgICogICAgIFRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBJRCBmb3IgdGhlIG5hbWUncyBsYW5ndWFnZS4KKyAgICoKKyAgICogICBuYW1lSUQgOjoKKyAgICogICAgIFRoZSBJRCBzcGVjaWZ5aW5nIHdoYXQga2luZCBvZiBuYW1lIHRoaXMgaXMuCisgICAqCisgICAqICAgc3RyaW5nTGVuZ3RoIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuCisgICAqCisgICAqICAgc3RyaW5nT2Zmc2V0IDo6CisgICAqICAgICBUaGUgb2Zmc2V0IHRvIHRoZSBzdHJpbmcgaW4gdGhlIGBuYW1lJyB0YWJsZS4KKyAgICoKKyAgICogICBzdHJpbmcgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc3RyaW5nJ3MgYnl0ZXMuICBOb3RlIHRoYXQgdGhlc2UKKyAgICogICAgIGFyZSB1c3VhbGx5IFVURi0xNiBlbmNvZGVkIGNoYXJhY3RlcnMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfTmFtZVJlY18KICAgewogICAgIEZUX1VTaG9ydCAgcGxhdGZvcm1JRDsKQEAgLTI4NCwyMyArMzEzLDI2IEBACiAgIH0gVFRfTmFtZVJlYywgKlRUX05hbWU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9MYW5nVGFnUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSBtb2RlbGluZyBsYW5ndWFnZSB0YWcgcmVjb3JkcyBpbiBTRk5UIGBuYW1lJyB0YWJsZXMsICAgKi8KLSAgLyogICAgaW50cm9kdWNlZCBpbiBPcGVuVHlwZSB2ZXJzaW9uIDEuNi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyaW5nTGVuZ3RoIDo6IFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpbiBieXRlcy4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJpbmdPZmZzZXQgOjogVGhlIG9mZnNldCB0byB0aGUgc3RyaW5nIGluIHRoZSBgbmFtZScgdGFibGUuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmluZyAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHN0cmluZydzIGJ5dGVzLiAgTm90ZSB0aGF0IHRoZXNlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgYXJlIFVURi0xNkJFIGVuY29kZWQgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0xhbmdUYWdSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIGxhbmd1YWdlIHRhZyByZWNvcmRzIGluIFNGTlQgYG5hbWUnIHRhYmxlcywKKyAgICogICBpbnRyb2R1Y2VkIGluIE9wZW5UeXBlIHZlcnNpb24gMS42LgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHN0cmluZ0xlbmd0aCA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluIGJ5dGVzLgorICAgKgorICAgKiAgIHN0cmluZ09mZnNldCA6OgorICAgKiAgICAgVGhlIG9mZnNldCB0byB0aGUgc3RyaW5nIGluIHRoZSBgbmFtZScgdGFibGUuCisgICAqCisgICAqICAgc3RyaW5nIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHN0cmluZydzIGJ5dGVzLiAgTm90ZSB0aGF0IHRoZXNlCisgICAqICAgICBhcmUgVVRGLTE2QkUgZW5jb2RlZCBjaGFyYWN0ZXJzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgVFRfTGFuZ1RhZ1JlY18KICAgewogICAgIEZUX1VTaG9ydCAgc3RyaW5nTGVuZ3RoOwpAQCAtMzE0LDMwICszNDYsMzcgQEAKICAgfSBUVF9MYW5nVGFnUmVjLCAqVFRfTGFuZ1RhZzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX05hbWVUYWJsZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIHRoZSBUcnVlVHlwZSBuYW1lIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvcm1hdCAgICAgICAgICAgIDo6IFRoZSBmb3JtYXQgb2YgdGhlIG5hbWUgdGFibGUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtTmFtZVJlY29yZHMgICAgOjogVGhlIG51bWJlciBvZiBuYW1lcyBpbiB0YWJsZS4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdG9yYWdlT2Zmc2V0ICAgICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSBuYW1lIHRhYmxlIGluIHRoZSBgbmFtZScgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBuYW1lcyAgICAgICAgICAgICA6OiBBbiBhcnJheSBvZiBuYW1lIHJlY29yZHMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bUxhbmdUYWdSZWNvcmRzIDo6IFRoZSBudW1iZXIgb2YgbGFuZ3VhZ2UgdGFncyBpbiB0YWJsZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGFuZ1RhZ3MgICAgICAgICAgOjogQW4gYXJyYXkgb2YgbGFuZ3VhZ2UgdGFnIHJlY29yZHMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gICAgICAgICAgICA6OiBUaGUgZmlsZSdzIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX05hbWVUYWJsZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgbW9kZWxpbmcgdGhlIFRydWVUeXBlIG5hbWUgdGFibGUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZm9ybWF0IDo6CisgICAqICAgICBUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIHRhYmxlLgorICAgKgorICAgKiAgIG51bU5hbWVSZWNvcmRzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIG5hbWVzIGluIHRhYmxlLgorICAgKgorICAgKiAgIHN0b3JhZ2VPZmZzZXQgOjoKKyAgICogICAgIFRoZSBvZmZzZXQgb2YgdGhlIG5hbWUgdGFibGUgaW4gdGhlIGBuYW1lJworICAgKiAgICAgVHJ1ZVR5cGUgdGFibGUuCisgICAqCisgICAqICAgbmFtZXMgOjoKKyAgICogICAgIEFuIGFycmF5IG9mIG5hbWUgcmVjb3Jkcy4KKyAgICoKKyAgICogICBudW1MYW5nVGFnUmVjb3JkcyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBsYW5ndWFnZSB0YWdzIGluIHRhYmxlLgorICAgKgorICAgKiAgIGxhbmdUYWdzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBsYW5ndWFnZSB0YWcgcmVjb3Jkcy4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBmaWxlJ3MgaW5wdXQgc3RyZWFtLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX05hbWVUYWJsZVJlY18KICAgewogICAgIEZUX1VTaG9ydCAgICAgICBmb3JtYXQ7CkBAIC0zNjQsMjEgKzQwMywyMyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0dhc3BSYW5nZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgdGlueSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIGdhc3AgcmFuZ2UgYWNjb3JkaW5nIHRvIHRoZSAgICAgICAqLwotICAvKiAgICBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhQUEVNICA6OiBUaGUgbWF4aW11bSBwcGVtIHZhbHVlIHRvIHdoaWNoIGBnYXNwRmxhZycgYXBwbGllcy4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdhc3BGbGFnIDo6IEEgZmxhZyBkZXNjcmliaW5nIHRoZSBncmlkLWZpdHRpbmcgYW5kIGFudGktYWxpYXNpbmcgICAqLwotICAvKiAgICAgICAgICAgICAgICBtb2RlcyB0byBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0dhc3BSYW5nZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB0aW55IHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgZ2FzcCByYW5nZSBhY2NvcmRpbmcgdG8gdGhlCisgICAqICAgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbi4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBtYXhQUEVNIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBwcGVtIHZhbHVlIHRvIHdoaWNoIGBnYXNwRmxhZycgYXBwbGllcy4KKyAgICoKKyAgICogICBnYXNwRmxhZyA6OgorICAgKiAgICAgQSBmbGFnIGRlc2NyaWJpbmcgdGhlIGdyaWQtZml0dGluZyBhbmQgYW50aS1hbGlhc2luZworICAgKiAgICAgbW9kZXMgdG8gYmUgdXNlZC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9HYXNwUmFuZ2VSZWNfCiAgIHsKICAgICBGVF9VU2hvcnQgIG1heFBQRU07CkBAIC0zOTEsMjIgKzQzMiwyNSBAQAogI2RlZmluZSBUVF9HQVNQX0RPR1JBWSAgIDB4MDIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0dhc3BSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIG1vZGVsaW5nIHRoZSBUcnVlVHlwZSBgZ2FzcCcgdGFibGUgdXNlZCB0byBzcGVjaWZ5ICAgICAqLwotICAvKiAgICBncmlkLWZpdHRpbmcgYW5kIGFudGktYWxpYXNpbmcgYmVoYXZpb3VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJzaW9uICAgIDo6IFRoZSB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bVJhbmdlcyAgOjogVGhlIG51bWJlciBvZiBnYXNwIHJhbmdlcyBpbiB0YWJsZS4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2FzcFJhbmdlcyA6OiBBbiBhcnJheSBvZiBnYXNwIHJhbmdlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9HYXNwUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSBtb2RlbGluZyB0aGUgVHJ1ZVR5cGUgYGdhc3AnIHRhYmxlIHVzZWQgdG8gc3BlY2lmeQorICAgKiAgIGdyaWQtZml0dGluZyBhbmQgYW50aS1hbGlhc2luZyBiZWhhdmlvdXIuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgdmVyc2lvbiA6OgorICAgKiAgICAgVGhlIHZlcnNpb24gbnVtYmVyLgorICAgKgorICAgKiAgIG51bVJhbmdlcyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBnYXNwIHJhbmdlcyBpbiB0YWJsZS4KKyAgICoKKyAgICogICBnYXNwUmFuZ2VzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBnYXNwIHJhbmdlcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9HYXNwXwogICB7CiAgICAgRlRfVVNob3J0ICAgICB2ZXJzaW9uOwpAQCAtNDI5LDMzICs0NzMsNDEgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9TQml0X01ldHJpY3NSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGhlIGJpZyBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGggYml0bWFwICAgKi8KLSAgLyogICAgaW4gYSBUcnVlVHlwZSBvciBPcGVuVHlwZSBmb250LiAgVGhlc2UgYXJlIHVzdWFsbHkgZm91bmQgaW4gdGhlICAgICovCi0gIC8qICAgIGBFQkRUJyAoTWljcm9zb2Z0KSBvciBgYmxvYycgKEFwcGxlKSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhlaWdodCAgICAgICA6OiBUaGUgZ2x5cGggaGVpZ2h0IGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggICAgICAgIDo6IFRoZSBnbHlwaCB3aWR0aCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpQmVhcmluZ1ggOjogVGhlIGhvcml6b250YWwgbGVmdCBiZWFyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhvcmlCZWFyaW5nWSA6OiBUaGUgaG9yaXpvbnRhbCB0b3AgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaG9yaUFkdmFuY2UgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0QmVhcmluZ1ggOjogVGhlIHZlcnRpY2FsIGxlZnQgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRCZWFyaW5nWSA6OiBUaGUgdmVydGljYWwgdG9wIGJlYXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydEFkdmFuY2UgIDo6IFRoZSB2ZXJ0aWNhbCBhZHZhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9TQml0X01ldHJpY3NSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gaG9sZCB0aGUgYmlnIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCBiaXRtYXAKKyAgICogICBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlIGZvbnQuICBUaGVzZSBhcmUgdXN1YWxseSBmb3VuZCBpbiB0aGUKKyAgICogICBgRUJEVCcgKE1pY3Jvc29mdCkgb3IgYGJsb2MnIChBcHBsZSkgdGFibGUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgaGVpZ2h0IDo6CisgICAqICAgICBUaGUgZ2x5cGggaGVpZ2h0IGluIHBpeGVscy4KKyAgICoKKyAgICogICB3aWR0aCA6OgorICAgKiAgICAgVGhlIGdseXBoIHdpZHRoIGluIHBpeGVscy4KKyAgICoKKyAgICogICBob3JpQmVhcmluZ1ggOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGxlZnQgYmVhcmluZy4KKyAgICoKKyAgICogICBob3JpQmVhcmluZ1kgOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIHRvcCBiZWFyaW5nLgorICAgKgorICAgKiAgIGhvcmlBZHZhbmNlIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlLgorICAgKgorICAgKiAgIHZlcnRCZWFyaW5nWCA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIGxlZnQgYmVhcmluZy4KKyAgICoKKyAgICogICB2ZXJ0QmVhcmluZ1kgOjoKKyAgICogICAgIFRoZSB2ZXJ0aWNhbCB0b3AgYmVhcmluZy4KKyAgICoKKyAgICogICB2ZXJ0QWR2YW5jZSA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIGFkdmFuY2UuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9NZXRyaWNzUmVjXwogICB7CiAgICAgRlRfVVNob3J0ICBoZWlnaHQ7CkBAIC00NzIsMjcgKzUyNCwzMiBAQAogICB9IFRUX1NCaXRfTWV0cmljc1JlYywgKlRUX1NCaXRfTWV0cmljczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NCaXRfU21hbGxNZXRyaWNzUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gaG9sZCB0aGUgc21hbGwgbWV0cmljcyBvZiBhIGdpdmVuIGdseXBoIGJpdG1hcCAqLwotICAvKiAgICBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlIGZvbnQuICBUaGVzZSBhcmUgdXN1YWxseSBmb3VuZCBpbiB0aGUgICAgKi8KLSAgLyogICAgYEVCRFQnIChNaWNyb3NvZnQpIG9yIHRoZSBgYmRhdCcgKEFwcGxlKSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGVpZ2h0ICAgOjogVGhlIGdseXBoIGhlaWdodCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB3aWR0aCAgICA6OiBUaGUgZ2x5cGggd2lkdGggaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJlYXJpbmdYIDo6IFRoZSBsZWZ0LXNpZGUgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmVhcmluZ1kgOjogVGhlIHRvcC1zaWRlIGJlYXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZHZhbmNlICA6OiBUaGUgYWR2YW5jZSB3aWR0aCBvciBoZWlnaHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1NCaXRfU21hbGxNZXRyaWNzUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGhlIHNtYWxsIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCBiaXRtYXAKKyAgICogICBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlIGZvbnQuICBUaGVzZSBhcmUgdXN1YWxseSBmb3VuZCBpbiB0aGUKKyAgICogICBgRUJEVCcgKE1pY3Jvc29mdCkgb3IgdGhlIGBiZGF0JyAoQXBwbGUpIHRhYmxlLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIGhlaWdodCA6OgorICAgKiAgICAgVGhlIGdseXBoIGhlaWdodCBpbiBwaXhlbHMuCisgICAqCisgICAqICAgd2lkdGggOjoKKyAgICogICAgIFRoZSBnbHlwaCB3aWR0aCBpbiBwaXhlbHMuCisgICAqCisgICAqICAgYmVhcmluZ1ggOjoKKyAgICogICAgIFRoZSBsZWZ0LXNpZGUgYmVhcmluZy4KKyAgICoKKyAgICogICBiZWFyaW5nWSA6OgorICAgKiAgICAgVGhlIHRvcC1zaWRlIGJlYXJpbmcuCisgICAqCisgICAqICAgYWR2YW5jZSA6OgorICAgKiAgICAgVGhlIGFkdmFuY2Ugd2lkdGggb3IgaGVpZ2h0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfU21hbGxfTWV0cmljc18KICAgewogICAgIEZUX0J5dGUgIGhlaWdodDsKQEAgLTUwNSw1NyArNTYyLDY4IEBACiAgIH0gVFRfU0JpdF9TbWFsbE1ldHJpY3NSZWMsICpUVF9TQml0X1NtYWxsTWV0cmljczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NCaXRfTGluZU1ldHJpY3NSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHRleHQgbGluZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gICAgICAqLwotICAvKiAgICBiaXRtYXAgc3RyaWtlLCBmb3IgZWl0aGVyIGEgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBsYXlvdXQuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhc2NlbmRlciAgICAgICAgICAgICAgICA6OiBUaGUgYXNjZW5kZXIgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlc2NlbmRlciAgICAgICAgICAgICAgIDo6IFRoZSBkZXNjZW5kZXIgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4X3dpZHRoICAgICAgICAgICAgICAgOjogVGhlIG1heGltdW0gZ2x5cGggd2lkdGggaW4gcGl4ZWxzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjYXJldF9zbG9wZV9lbnVtZXJhdG9yICA6OiBSaXNlIG9mIHRoZSBjYXJldCBzbG9wZSwgdHlwaWNhbGx5IHNldCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gMSBmb3Igbm9uLWl0YWxpYyBmb250cy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjYXJldF9zbG9wZV9kZW5vbWluYXRvciA6OiBSaXNlIG9mIHRoZSBjYXJldCBzbG9wZSwgdHlwaWNhbGx5IHNldCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gMCBmb3Igbm9uLWl0YWxpYyBmb250cy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjYXJldF9vZmZzZXQgICAgICAgICAgICA6OiBPZmZzZXQgaW4gcGl4ZWxzIHRvIG1vdmUgdGhlIGNhcmV0IGZvciAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVyIHBvc2l0aW9uaW5nLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW5fb3JpZ2luX1NCICAgICAgICAgICA6OiBNaW5pbXVtIG9mIGhvcmlCZWFyaW5nWCAocmVzcC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydEJlYXJpbmdZKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1pbl9hZHZhbmNlX1NCICAgICAgICAgIDo6IE1pbmltdW0gb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsIGFkdmFuY2UgLSAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGhvcmlCZWFyaW5nWCArIHdpZHRoICkgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIGFkdmFuY2UgLSAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdmVydEJlYXJpbmdZICsgaGVpZ2h0ICkgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhfYmVmb3JlX0JMICAgICAgICAgICA6OiBNYXhpbXVtIG9mIGhvcmlCZWFyaW5nWSAocmVzcC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydEJlYXJpbmdZKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW5fYWZ0ZXJfQkwgICAgICAgICAgICA6OiBNaW5pbXVtIG9mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaUJlYXJpbmdZIC0gaGVpZ2h0ICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRCZWFyaW5nWCAtIHdpZHRoICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBhZHMgICAgICAgICAgICAgICAgICAgIDo6IFVudXNlZCAodG8gbWFrZSB0aGUgc2l6ZSBvZiB0aGUgcmVjb3JkICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIG11bHRpcGxlIG9mIDMyIGJpdHMuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1NCaXRfTGluZU1ldHJpY3NSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHRleHQgbGluZSBtZXRyaWNzIG9mIGEgZ2l2ZW4KKyAgICogICBiaXRtYXAgc3RyaWtlLCBmb3IgZWl0aGVyIGEgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBsYXlvdXQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgYXNjZW5kZXIgOjoKKyAgICogICAgIFRoZSBhc2NlbmRlciBpbiBwaXhlbHMuCisgICAqCisgICAqICAgZGVzY2VuZGVyIDo6CisgICAqICAgICBUaGUgZGVzY2VuZGVyIGluIHBpeGVscy4KKyAgICoKKyAgICogICBtYXhfd2lkdGggOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIGdseXBoIHdpZHRoIGluIHBpeGVscy4KKyAgICoKKyAgICogICBjYXJldF9zbG9wZV9lbnVtZXJhdG9yIDo6CisgICAqICAgICBSaXNlIG9mIHRoZSBjYXJldCBzbG9wZSwgdHlwaWNhbGx5IHNldAorICAgKiAgICAgdG8gMSBmb3Igbm9uLWl0YWxpYyBmb250cy4KKyAgICoKKyAgICogICBjYXJldF9zbG9wZV9kZW5vbWluYXRvciA6OgorICAgKiAgICAgUmlzZSBvZiB0aGUgY2FyZXQgc2xvcGUsIHR5cGljYWxseSBzZXQKKyAgICogICAgIHRvIDAgZm9yIG5vbi1pdGFsaWMgZm9udHMuCisgICAqCisgICAqICAgY2FyZXRfb2Zmc2V0IDo6CisgICAqICAgICBPZmZzZXQgaW4gcGl4ZWxzIHRvIG1vdmUgdGhlIGNhcmV0IGZvcgorICAgKiAgICAgcHJvcGVyIHBvc2l0aW9uaW5nLgorICAgKgorICAgKiAgIG1pbl9vcmlnaW5fU0IgOjoKKyAgICogICAgIE1pbmltdW0gb2YgaG9yaUJlYXJpbmdYIChyZXNwLgorICAgKiAgICAgdmVydEJlYXJpbmdZKS4KKyAgICogICBtaW5fYWR2YW5jZV9TQiA6OgorICAgKiAgICAgTWluaW11bSBvZgorICAgKgorICAgKiAgICAgaG9yaXpvbnRhbCBhZHZhbmNlIC0KKyAgICogICAgICggaG9yaUJlYXJpbmdYICsgd2lkdGggKQorICAgKgorICAgKiAgICAgcmVzcC4KKyAgICoKKyAgICogICAgIHZlcnRpY2FsIGFkdmFuY2UgLQorICAgKiAgICAgKCB2ZXJ0QmVhcmluZ1kgKyBoZWlnaHQgKQorICAgKgorICAgKiAgIG1heF9iZWZvcmVfQkwgOjoKKyAgICogICAgIE1heGltdW0gb2YgaG9yaUJlYXJpbmdZIChyZXNwLgorICAgKiAgICAgdmVydEJlYXJpbmdZKS4KKyAgICoKKyAgICogICBtaW5fYWZ0ZXJfQkwgOjoKKyAgICogICAgIE1pbmltdW0gb2YKKyAgICoKKyAgICogICAgIGhvcmlCZWFyaW5nWSAtIGhlaWdodAorICAgKgorICAgKiAgICAgcmVzcC4KKyAgICoKKyAgICogICAgIHZlcnRCZWFyaW5nWCAtIHdpZHRoCisgICAqCisgICAqICAgcGFkcyA6OgorICAgKiAgICAgVW51c2VkICh0byBtYWtlIHRoZSBzaXplIG9mIHRoZSByZWNvcmQKKyAgICogICAgIGEgbXVsdGlwbGUgb2YgMzIgYml0cy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9TQml0X0xpbmVNZXRyaWNzUmVjXwogICB7CiAgICAgRlRfQ2hhciAgYXNjZW5kZXI7CkBAIC01NzMsNDMgKzY0MSw1NCBAQAogICB9IFRUX1NCaXRfTGluZU1ldHJpY3NSZWMsICpUVF9TQml0X0xpbmVNZXRyaWNzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfU0JpdF9SYW5nZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBUcnVlVHlwZS9PcGVuVHlwZSBzdWJJbmRleFRhYmxlIGFzIGRlZmluZWQgaW4gdGhlIGBFQkxDJyAgICAgICAgICovCi0gIC8qICAgIChNaWNyb3NvZnQpIG9yIGBibG9jJyAoQXBwbGUpIHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZpcnN0X2dseXBoICAgOjogVGhlIGZpcnN0IGdseXBoIGluZGV4IGluIHRoZSByYW5nZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGFzdF9nbHlwaCAgICA6OiBUaGUgbGFzdCBnbHlwaCBpbmRleCBpbiB0aGUgcmFuZ2UuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbmRleF9mb3JtYXQgIDo6IFRoZSBmb3JtYXQgb2YgaW5kZXggdGFibGUuICBWYWxpZCB2YWx1ZXMgYXJlIDEgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICB0byA1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbWFnZV9mb3JtYXQgIDo6IFRoZSBmb3JtYXQgb2YgYEVCRFQnIGltYWdlIGRhdGEuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGltYWdlX29mZnNldCAgOjogVGhlIG9mZnNldCB0byBpbWFnZSBkYXRhIGluIGBFQkRUJy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaW1hZ2Vfc2l6ZSAgICA6OiBGb3IgaW5kZXggZm9ybWF0cyAyIGFuZCA1LiAgVGhpcyBpcyB0aGUgc2l6ZSBpbiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgb2YgZWFjaCBnbHlwaCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmlnX21ldHJpY3MgICA6OiBGb3IgaW5kZXggZm9ybWF0cyAyIGFuZCA1LiAgVGhpcyBpcyB0aGUgYmlnICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgbWV0cmljcyBmb3IgZWFjaCBnbHlwaCBiaXRtYXAuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2dseXBocyAgICA6OiBGb3IgaW5kZXggZm9ybWF0cyA0IGFuZCA1LiAgVGhpcyBpcyB0aGUgbnVtYmVyIG9mICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIGluIHRoZSBjb2RlIGFycmF5LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfb2Zmc2V0cyA6OiBGb3IgaW5kZXggZm9ybWF0cyAxIGFuZCAzLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9jb2RlcyAgIDo6IEZvciBpbmRleCBmb3JtYXRzIDQgYW5kIDUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhYmxlX29mZnNldCAgOjogVGhlIG9mZnNldCBvZiB0aGUgaW5kZXggdGFibGUgaW4gdGhlIGBFQkxDJyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIHRhYmxlLiAgT25seSB1c2VkIGR1cmluZyBzdHJpa2UgbG9hZGluZy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1NCaXRfUmFuZ2VSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgVHJ1ZVR5cGUvT3BlblR5cGUgc3ViSW5kZXhUYWJsZSBhcyBkZWZpbmVkIGluIHRoZSBgRUJMQycKKyAgICogICAoTWljcm9zb2Z0KSBvciBgYmxvYycgKEFwcGxlKSB0YWJsZXMuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZmlyc3RfZ2x5cGggOjoKKyAgICogICAgIFRoZSBmaXJzdCBnbHlwaCBpbmRleCBpbiB0aGUgcmFuZ2UuCisgICAqCisgICAqICAgbGFzdF9nbHlwaCA6OgorICAgKiAgICAgVGhlIGxhc3QgZ2x5cGggaW5kZXggaW4gdGhlIHJhbmdlLgorICAgKgorICAgKiAgIGluZGV4X2Zvcm1hdCA6OgorICAgKiAgICAgVGhlIGZvcm1hdCBvZiBpbmRleCB0YWJsZS4gIFZhbGlkIHZhbHVlcyBhcmUgMQorICAgKiAgICAgdG8gNS4KKyAgICoKKyAgICogICBpbWFnZV9mb3JtYXQgOjoKKyAgICogICAgIFRoZSBmb3JtYXQgb2YgYEVCRFQnIGltYWdlIGRhdGEuCisgICAqCisgICAqICAgaW1hZ2Vfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgb2Zmc2V0IHRvIGltYWdlIGRhdGEgaW4gYEVCRFQnLgorICAgKgorICAgKiAgIGltYWdlX3NpemUgOjoKKyAgICogICAgIEZvciBpbmRleCBmb3JtYXRzIDIgYW5kIDUuICBUaGlzIGlzIHRoZSBzaXplIGluCisgICAqICAgICBieXRlcyBvZiBlYWNoIGdseXBoIGJpdG1hcC4KKyAgICoKKyAgICogICBiaWdfbWV0cmljcyA6OgorICAgKiAgICAgRm9yIGluZGV4IGZvcm1hdHMgMiBhbmQgNS4gIFRoaXMgaXMgdGhlIGJpZworICAgKiAgICAgbWV0cmljcyBmb3IgZWFjaCBnbHlwaCBiaXRtYXAuCisgICAqCisgICAqICAgbnVtX2dseXBocyA6OgorICAgKiAgICAgRm9yIGluZGV4IGZvcm1hdHMgNCBhbmQgNS4gIFRoaXMgaXMgdGhlIG51bWJlciBvZgorICAgKiAgICAgZ2x5cGhzIGluIHRoZSBjb2RlIGFycmF5LgorICAgKgorICAgKiAgIGdseXBoX29mZnNldHMgOjoKKyAgICogICAgIEZvciBpbmRleCBmb3JtYXRzIDEgYW5kIDMuCisgICAqCisgICAqICAgZ2x5cGhfY29kZXMgOjoKKyAgICogICAgIEZvciBpbmRleCBmb3JtYXRzIDQgYW5kIDUuCisgICAqCisgICAqICAgdGFibGVfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgb2Zmc2V0IG9mIHRoZSBpbmRleCB0YWJsZSBpbiB0aGUgYEVCTEMnCisgICAqICAgICB0YWJsZS4gIE9ubHkgdXNlZCBkdXJpbmcgc3RyaWtlIGxvYWRpbmcuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9SYW5nZVJlY18KICAgewogICAgIEZUX1VTaG9ydCAgICAgICAgICAgZmlyc3RfZ2x5cGg7CkBAIC02MzEsNDcgKzcxMCw1OCBAQAogICB9IFRUX1NCaXRfUmFuZ2VSZWMsICpUVF9TQml0X1JhbmdlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfU0JpdF9TdHJpa2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCBkZXNjcmliZSBhIGdpdmVuIGJpdG1hcCBzdHJpa2UgaW4gdGhlIGBFQkxDJyAgICAgICovCi0gIC8qICAgIChNaWNyb3NvZnQpIG9yIGBibG9jJyAoQXBwbGUpIHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgbnVtX2luZGV4X3JhbmdlcyA6OiBUaGUgbnVtYmVyIG9mIGluZGV4IHJhbmdlcy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBpbmRleF9yYW5nZXMgICAgIDo6IEFuIGFycmF5IG9mIGdseXBoIGluZGV4IHJhbmdlcy4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGNvbG9yX3JlZiAgICAgICAgOjogVW51c2VkLiAgYGNvbG9yX3JlZicgaXMgcHV0IGluIGZvciBmdXR1cmUgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGVuaGFuY2VtZW50cywgYnV0IHRoZXNlIGZpZWxkcyBhcmUgYWxyZWFkeSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBpbiB1c2UgYnkgb3RoZXIgcGxhdGZvcm1zIChlLmcuIE5ld3RvbikuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMsIHBsZWFzZSBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZibG9jLmh0bWwgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgaG9yaSAgICAgICAgICAgICA6OiBUaGUgbGluZSBtZXRyaWNzIGZvciBob3Jpem9udGFsIGxheW91dHMuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB2ZXJ0ICAgICAgICAgICAgIDo6IFRoZSBsaW5lIG1ldHJpY3MgZm9yIHZlcnRpY2FsIGxheW91dHMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHN0YXJ0X2dseXBoICAgICAgOjogVGhlIGxvd2VzdCBnbHlwaCBpbmRleCBmb3IgdGhpcyBzdHJpa2UuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZW5kX2dseXBoICAgICAgICA6OiBUaGUgaGlnaGVzdCBnbHlwaCBpbmRleCBmb3IgdGhpcyBzdHJpa2UuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB4X3BwZW0gICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCBwaXhlbHMgcGVyIEVNLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHlfcHBlbSAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiB2ZXJ0aWNhbCBwaXhlbHMgcGVyIEVNLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgYml0X2RlcHRoICAgICAgICA6OiBUaGUgYml0IGRlcHRoLiAgVmFsaWQgdmFsdWVzIGFyZSAxLCAyLCA0LCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIDguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZmxhZ3MgICAgICAgICAgICA6OiBJcyB0aGlzIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBzdHJpa2U/ICBGb3IgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscywgcGxlYXNlIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZibG9jLmh0bWwgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1NCaXRfU3RyaWtlUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIGRlc2NyaWJlIGEgZ2l2ZW4gYml0bWFwIHN0cmlrZSBpbiB0aGUgYEVCTEMnCisgICAqICAgKE1pY3Jvc29mdCkgb3IgYGJsb2MnIChBcHBsZSkgdGFibGVzLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgbnVtX2luZGV4X3JhbmdlcyA6OgorICAgKiAgICBUaGUgbnVtYmVyIG9mIGluZGV4IHJhbmdlcy4KKyAgICoKKyAgICogIGluZGV4X3JhbmdlcyA6OgorICAgKiAgICBBbiBhcnJheSBvZiBnbHlwaCBpbmRleCByYW5nZXMuCisgICAqCisgICAqICBjb2xvcl9yZWYgOjoKKyAgICogICAgVW51c2VkLiAgYGNvbG9yX3JlZicgaXMgcHV0IGluIGZvciBmdXR1cmUKKyAgICogICAgZW5oYW5jZW1lbnRzLCBidXQgdGhlc2UgZmllbGRzIGFyZSBhbHJlYWR5CisgICAqICAgIGluIHVzZSBieSBvdGhlciBwbGF0Zm9ybXMgKGUuZy4gTmV3dG9uKS4KKyAgICogICAgRm9yIGRldGFpbHMsIHBsZWFzZSBzZWUKKyAgICoKKyAgICogICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmJsb2MuaHRtbAorICAgKgorICAgKiAgaG9yaSA6OgorICAgKiAgICBUaGUgbGluZSBtZXRyaWNzIGZvciBob3Jpem9udGFsIGxheW91dHMuCisgICAqCisgICAqICB2ZXJ0IDo6CisgICAqICAgIFRoZSBsaW5lIG1ldHJpY3MgZm9yIHZlcnRpY2FsIGxheW91dHMuCisgICAqCisgICAqICBzdGFydF9nbHlwaCA6OgorICAgKiAgICBUaGUgbG93ZXN0IGdseXBoIGluZGV4IGZvciB0aGlzIHN0cmlrZS4KKyAgICoKKyAgICogIGVuZF9nbHlwaCA6OgorICAgKiAgICBUaGUgaGlnaGVzdCBnbHlwaCBpbmRleCBmb3IgdGhpcyBzdHJpa2UuCisgICAqCisgICAqICB4X3BwZW0gOjoKKyAgICogICAgVGhlIG51bWJlciBvZiBob3Jpem9udGFsIHBpeGVscyBwZXIgRU0uCisgICAqCisgICAqICB5X3BwZW0gOjoKKyAgICogICAgVGhlIG51bWJlciBvZiB2ZXJ0aWNhbCBwaXhlbHMgcGVyIEVNLgorICAgKgorICAgKiAgYml0X2RlcHRoIDo6CisgICAqICAgIFRoZSBiaXQgZGVwdGguICBWYWxpZCB2YWx1ZXMgYXJlIDEsIDIsIDQsCisgICAqICAgIGFuZCA4LgorICAgKgorICAgKiAgZmxhZ3MgOjoKKyAgICogICAgSXMgdGhpcyBhIHZlcnRpY2FsIG9yIGhvcml6b250YWwgc3RyaWtlPyAgRm9yCisgICAqICAgIGRldGFpbHMsIHBsZWFzZSBzZWUKKyAgICoKKyAgICogICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNmJsb2MuaHRtbAorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfU3RyaWtlUmVjXwogICB7CiAgICAgRlRfSW50ICAgICAgICAgICAgICAgICAgbnVtX3JhbmdlczsKQEAgLTY5NSwyMSArNzg1LDI0IEBACiAgIH0gVFRfU0JpdF9TdHJpa2VSZWMsICpUVF9TQml0X1N0cmlrZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NCaXRfQ29tcG9uZW50UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc2ltcGxlIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhIGNvbXBvdW5kIHNiaXQgZWxlbWVudC4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2NvZGUgOjogVGhlIGVsZW1lbnQncyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeF9vZmZzZXQgICA6OiBUaGUgZWxlbWVudCdzIGxlZnQgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5X29mZnNldCAgIDo6IFRoZSBlbGVtZW50J3MgdG9wIGJlYXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1NCaXRfQ29tcG9uZW50UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHNpbXBsZSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBjb21wb3VuZCBzYml0IGVsZW1lbnQuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgZ2x5cGhfY29kZSA6OgorICAgKiAgICAgVGhlIGVsZW1lbnQncyBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogICB4X29mZnNldCA6OgorICAgKiAgICAgVGhlIGVsZW1lbnQncyBsZWZ0IGJlYXJpbmcuCisgICAqCisgICAqICAgeV9vZmZzZXQgOjoKKyAgICogICAgIFRoZSBlbGVtZW50J3MgdG9wIGJlYXJpbmcuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfU0JpdF9Db21wb25lbnRSZWNfCiAgIHsKICAgICBGVF9VU2hvcnQgIGdseXBoX2NvZGU7CkBAIC03MTksMjggKzgxMiwzNCBAQAogICB9IFRUX1NCaXRfQ29tcG9uZW50UmVjLCAqVFRfU0JpdF9Db21wb25lbnQ7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9TQml0X1NjYWxlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIGRlc2NyaWJlIGEgZ2l2ZW4gYml0bWFwIHNjYWxpbmcgdGFibGUsIGFzIGRlZmluZWQgKi8KLSAgLyogICAgaW4gdGhlIGBFQlNDJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaG9yaSAgICAgICAgICAgICAgOjogVGhlIGhvcml6b250YWwgbGluZSBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0ICAgICAgICAgICAgICA6OiBUaGUgdmVydGljYWwgbGluZSBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHhfcHBlbSAgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCBwaXhlbHMgcGVyIEVNLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeV9wcGVtICAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiB2ZXJ0aWNhbCBwaXhlbHMgcGVyIEVNLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4X3BwZW1fc3Vic3RpdHV0ZSA6OiBTdWJzdGl0dXRpb24geF9wcGVtIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHlfcHBlbV9zdWJzdGl0dXRlIDo6IFN1YnN0aXR1dGlvbiB5X3BwZW0gdmFsdWUuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVFRfU0JpdF9TY2FsZVJlYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdXNlZCBkZXNjcmliZSBhIGdpdmVuIGJpdG1hcCBzY2FsaW5nIHRhYmxlLCBhcyBkZWZpbmVkCisgICAqICAgaW4gdGhlIGBFQlNDJyB0YWJsZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBob3JpIDo6CisgICAqICAgICBUaGUgaG9yaXpvbnRhbCBsaW5lIG1ldHJpY3MuCisgICAqCisgICAqICAgdmVydCA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIGxpbmUgbWV0cmljcy4KKyAgICoKKyAgICogICB4X3BwZW0gOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCBwaXhlbHMgcGVyIEVNLgorICAgKgorICAgKiAgIHlfcHBlbSA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiB2ZXJ0aWNhbCBwaXhlbHMgcGVyIEVNLgorICAgKgorICAgKiAgIHhfcHBlbV9zdWJzdGl0dXRlIDo6CisgICAqICAgICBTdWJzdGl0dXRpb24geF9wcGVtIHZhbHVlLgorICAgKgorICAgKiAgIHlfcHBlbV9zdWJzdGl0dXRlIDo6CisgICAqICAgICBTdWJzdGl0dXRpb24geV9wcGVtIHZhbHVlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1NCaXRfU2NhbGVSZWNfCiAgIHsKICAgICBUVF9TQml0X0xpbmVNZXRyaWNzUmVjICBob3JpOwpAQCAtNzY4LDI0ICs4NjcsMjggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qb3N0XzIwUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQb3N0c2NyaXB0IG5hbWVzIHN1Yi10YWJsZSwgZm9ybWF0IDIuMC4gIFN0b3JlcyB0aGUgUFMgbmFtZSBvZiAgICAgKi8KLSAgLyogICAgZWFjaCBnbHlwaCBpbiB0aGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2dseXBocyAgICA6OiBUaGUgbnVtYmVyIG9mIG5hbWVkIGdseXBocyBpbiB0aGUgdGFibGUuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fbmFtZXMgICAgIDo6IFRoZSBudW1iZXIgb2YgUFMgbmFtZXMgc3RvcmVkIGluIHRoZSB0YWJsZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2luZGljZXMgOjogVGhlIGluZGljZXMgb2YgdGhlIGdseXBocyBpbiB0aGUgbmFtZXMgYXJyYXlzLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfbmFtZXMgICA6OiBUaGUgUFMgbmFtZXMgbm90IGluIE1hYyBFbmNvZGluZy4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9Qb3N0XzIwUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBQb3N0c2NyaXB0IG5hbWVzIHN1Yi10YWJsZSwgZm9ybWF0IDIuMC4gIFN0b3JlcyB0aGUgUFMgbmFtZSBvZgorICAgKiAgIGVhY2ggZ2x5cGggaW4gdGhlIGZvbnQgZmFjZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBudW1fZ2x5cGhzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIG5hbWVkIGdseXBocyBpbiB0aGUgdGFibGUuCisgICAqCisgICAqICAgbnVtX25hbWVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIFBTIG5hbWVzIHN0b3JlZCBpbiB0aGUgdGFibGUuCisgICAqCisgICAqICAgZ2x5cGhfaW5kaWNlcyA6OgorICAgKiAgICAgVGhlIGluZGljZXMgb2YgdGhlIGdseXBocyBpbiB0aGUgbmFtZXMgYXJyYXlzLgorICAgKgorICAgKiAgIGdseXBoX25hbWVzIDo6CisgICAqICAgICBUaGUgUFMgbmFtZXMgbm90IGluIE1hYyBFbmNvZGluZy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9Qb3N0XzIwUmVjXwogICB7CiAgICAgRlRfVVNob3J0ICAgbnVtX2dseXBoczsKQEAgLTc5NiwyMSArODk5LDIzIEBACiAgIH0gVFRfUG9zdF8yMFJlYywgKlRUX1Bvc3RfMjA7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qb3N0XzI1UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQb3N0c2NyaXB0IG5hbWVzIHN1Yi10YWJsZSwgZm9ybWF0IDIuNS4gIFN0b3JlcyB0aGUgUFMgbmFtZSBvZiAgICAgKi8KLSAgLyogICAgZWFjaCBnbHlwaCBpbiB0aGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2dseXBocyA6OiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgdGFibGUuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvZmZzZXRzICAgIDo6IEFuIGFycmF5IG9mIHNpZ25lZCBvZmZzZXRzIGluIGEgbm9ybWFsIE1hYyAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBQb3N0c2NyaXB0IG5hbWUgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9Qb3N0XzI1UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBQb3N0c2NyaXB0IG5hbWVzIHN1Yi10YWJsZSwgZm9ybWF0IDIuNS4gIFN0b3JlcyB0aGUgUFMgbmFtZSBvZgorICAgKiAgIGVhY2ggZ2x5cGggaW4gdGhlIGZvbnQgZmFjZS4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBudW1fZ2x5cGhzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgdGFibGUuCisgICAqCisgICAqICAgb2Zmc2V0cyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2Ygc2lnbmVkIG9mZnNldHMgaW4gYSBub3JtYWwgTWFjCisgICAqICAgICBQb3N0c2NyaXB0IG5hbWUgZW5jb2RpbmcuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfUG9zdF8yNV8KICAgewogICAgIEZUX1VTaG9ydCAgbnVtX2dseXBoczsKQEAgLTgxOSwyMSArOTI0LDI0IEBACiAgIH0gVFRfUG9zdF8yNVJlYywgKlRUX1Bvc3RfMjU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qb3N0X05hbWVzUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQb3N0c2NyaXB0IG5hbWVzIHRhYmxlLCBlaXRoZXIgZm9ybWF0IDIuMCBvciAyLjUuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkZWQgICAgOjogQSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIFBTIG5hbWVzIGFyZSBsb2FkZWQuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZvcm1hdF8yMCA6OiBUaGUgc3ViLXRhYmxlIHVzZWQgZm9yIGZvcm1hdCAyLjAuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZm9ybWF0XzI1IDo6IFRoZSBzdWItdGFibGUgdXNlZCBmb3IgZm9ybWF0IDIuNS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9Qb3N0X05hbWVzUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBQb3N0c2NyaXB0IG5hbWVzIHRhYmxlLCBlaXRoZXIgZm9ybWF0IDIuMCBvciAyLjUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgbG9hZGVkIDo6CisgICAqICAgICBBIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgUFMgbmFtZXMgYXJlIGxvYWRlZC4KKyAgICoKKyAgICogICBmb3JtYXRfMjAgOjoKKyAgICogICAgIFRoZSBzdWItdGFibGUgdXNlZCBmb3IgZm9ybWF0IDIuMC4KKyAgICoKKyAgICogICBmb3JtYXRfMjUgOjoKKyAgICogICAgIFRoZSBzdWItdGFibGUgdXNlZCBmb3IgZm9ybWF0IDIuNS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9Qb3N0X05hbWVzUmVjXwogICB7CiAgICAgRlRfQm9vbCAgbG9hZGVkOwpAQCAtOTQ1LDMxICsxMDUzLDMxIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIHN0cnVjdHVyZS9jbGFzcyBpcyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBpdCBpcyBjb21tb24gdG8gdGhlICAgICAgKi8KLSAgLyogZm9sbG93aW5nIGZvcm1hdHM6IFRURiwgT3BlblR5cGUtVFQsIGFuZCBPcGVuVHlwZS1DRkYuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBjbGFzc2VzIFRUX1NpemUgYW5kIFRUX0dseXBoU2xvdCBhcmUgbm90ICAgICAgKi8KLSAgLyogc2hhcmVkIGJldHdlZW4gZm9udCBkcml2ZXJzLCBhbmQgYXJlIHRodXMgZGVmaW5lZCBpbiBgdHRvYmpzLmgnLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgc3RydWN0dXJlL2NsYXNzIGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGl0IGlzIGNvbW1vbiB0byB0aGUKKyAgICogZm9sbG93aW5nIGZvcm1hdHM6IFRURiwgT3BlblR5cGUtVFQsIGFuZCBPcGVuVHlwZS1DRkYuCisgICAqCisgICAqIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIGNsYXNzZXMgVFRfU2l6ZSBhbmQgVFRfR2x5cGhTbG90IGFyZSBub3QKKyAgICogc2hhcmVkIGJldHdlZW4gZm9udCBkcml2ZXJzLCBhbmQgYXJlIHRodXMgZGVmaW5lZCBpbiBgdHRvYmpzLmgnLgorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgZmFjZS9mb250IG9iamVjdC4gIEEgVFRfRmFjZSBlbmNhcHN1bGF0ZXMgICAqLwotICAvKiAgICB0aGUgcmVzb2x1dGlvbiBhbmQgc2NhbGluZyBpbmRlcGVuZGVudCBwYXJ0cyBvZiBhIFRydWVUeXBlIGZvbnQgICAgKi8KLSAgLyogICAgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRUX0ZhY2Ugc3RydWN0dXJlIGlzIGFsc28gdXNlZCBhcyBhIGBwYXJlbnQgY2xhc3MnIGZvciB0aGUgICAgICovCi0gIC8qICAgIE9wZW5UeXBlLUNGRiBjbGFzcyAoVDJfRmFjZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFRUX0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgZmFjZS9mb250IG9iamVjdC4gIEEgVFRfRmFjZSBlbmNhcHN1bGF0ZXMKKyAgICogICB0aGUgcmVzb2x1dGlvbiBhbmQgc2NhbGluZyBpbmRlcGVuZGVudCBwYXJ0cyBvZiBhIFRydWVUeXBlIGZvbnQKKyAgICogICByZXNvdXJjZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIFRUX0ZhY2Ugc3RydWN0dXJlIGlzIGFsc28gdXNlZCBhcyBhIGBwYXJlbnQgY2xhc3MnIGZvciB0aGUKKyAgICogICBPcGVuVHlwZS1DRkYgY2xhc3MgKFQyX0ZhY2UpLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgVFRfRmFjZVJlY18qICBUVF9GYWNlOwogCiAKQEAgLTk4MSwzMSArMTA4OSwzNSBAQAogICB0eXBlZGVmIHN0cnVjdCBUVF9Mb2FkZXJSZWNfKiAgVFRfTG9hZGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2Vla3MgYSBzdHJlYW0gdG8gdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gVHJ1ZVR5cGUgdGFibGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWcgICAgOjogQSA0LWJ5dGUgdGFnIHVzZWQgdG8gbmFtZSB0aGUgdGFibGUuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlbmd0aCA6OiBUaGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSBpbiBieXRlcy4gIFNldCB0byAwIGlmIG5vdCAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgc3RyZWFtIGN1cnNvciBtdXN0IGJlIGF0IHRoZSBmb250IGZpbGUncyBvcmlnaW4uICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFNlZWtzIGEgc3RyZWFtIHRvIHRoZSBzdGFydCBvZiBhIGdpdmVuIFRydWVUeXBlIHRhYmxlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICB0YWcgOjoKKyAgICogICAgIEEgNC1ieXRlIHRhZyB1c2VkIHRvIG5hbWUgdGhlIHRhYmxlLgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBsZW5ndGggOjoKKyAgICogICAgIFRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIGluIGJ5dGVzLiAgU2V0IHRvIDAgaWYgbm90CisgICAqICAgICBuZWVkZWQuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgZm9udCBmaWxlJ3Mgb3JpZ2luLgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0xvYWRlcl9Hb3RvVGFibGVGdW5jKSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICB0YWcsCkBAIC0xMDEzLDM0ICsxMTI1LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIGxlbmd0aCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZGVyX1N0YXJ0R2x5cGhGdW5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2Vla3MgYSBzdHJlYW0gdG8gdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gZ2x5cGggZWxlbWVudCwgYW5kIG9wZW5zIGEgICovCi0gIC8qICAgIGZyYW1lIGZvciBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRlciAgICAgIDo6IFRoZSBjdXJyZW50IFRydWVUeXBlIGdseXBoIGxvYWRlciBvYmplY3QuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBnbHlwaCB0byBhY2Nlc3MuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvZmZzZXQgICAgICA6OiBUaGUgb2Zmc2V0IG9mIHRoZSBnbHlwaCBhY2NvcmRpbmcgdG8gdGhlICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgYGxvY2F0aW9ucycgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBieXRlX2NvdW50ICA6OiBUaGUgc2l6ZSBvZiB0aGUgZnJhbWUgaW4gYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IGVxdWl2YWxlbnQgdG8gRlRfU1RSRUFNX1NFRUsob2Zmc2V0KSAgICAgKi8KLSAgLyogICAgZm9sbG93ZWQgYnkgRlRfRlJBTUVfRU5URVIoYnl0ZV9jb3VudCkgd2l0aCB0aGUgbG9hZGVyJ3Mgc3RyZWFtLCAgICovCi0gIC8qICAgIGJ1dCBhbHRlcm5hdGl2ZSBmb3JtYXRzIChlLmcuIGNvbXByZXNzZWQgb25lcykgbWlnaHQgdXNlIHNvbWV0aGluZyAqLwotICAvKiAgICBkaWZmZXJlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3R5cGU6CisgICAqICAgVFRfTG9hZGVyX1N0YXJ0R2x5cGhGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBTZWVrcyBhIHN0cmVhbSB0byB0aGUgc3RhcnQgb2YgYSBnaXZlbiBnbHlwaCBlbGVtZW50LCBhbmQgb3BlbnMgYQorICAgKiAgIGZyYW1lIGZvciBpdC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxvYWRlciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIG9iamVjdC4KKyAgICoKKyAgICogICAgIGdseXBoIGluZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggdG8gYWNjZXNzLgorICAgKgorICAgKiAgIG9mZnNldCA6OgorICAgKiAgICAgVGhlIG9mZnNldCBvZiB0aGUgZ2x5cGggYWNjb3JkaW5nIHRvIHRoZQorICAgKiAgICAgYGxvY2F0aW9ucycgdGFibGUuCisgICAqCisgICAqICAgYnl0ZV9jb3VudCA6OgorICAgKiAgICAgVGhlIHNpemUgb2YgdGhlIGZyYW1lIGluIGJ5dGVzLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgZXF1aXZhbGVudCB0byBGVF9TVFJFQU1fU0VFSyhvZmZzZXQpCisgICAqICAgZm9sbG93ZWQgYnkgRlRfRlJBTUVfRU5URVIoYnl0ZV9jb3VudCkgd2l0aCB0aGUgbG9hZGVyJ3Mgc3RyZWFtLAorICAgKiAgIGJ1dCBhbHRlcm5hdGl2ZSBmb3JtYXRzIChlLmcuIGNvbXByZXNzZWQgb25lcykgbWlnaHQgdXNlIHNvbWV0aGluZworICAgKiAgIGRpZmZlcmVudC4KKyAgICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpUVF9Mb2FkZXJfU3RhcnRHbHlwaEZ1bmMpKCBUVF9Mb2FkZXIgIGxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LApAQCAtMTA0OCwzNiArMTE2MywzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgYnl0ZV9jb3VudCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZGVyX1JlYWRHbHlwaEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVhZHMgb25lIGdseXBoIGVsZW1lbnQgKGl0cyBoZWFkZXIsIGEgc2ltcGxlIGdseXBoLCBvciBhICAgICAgICAgICovCi0gIC8qICAgIGNvbXBvc2l0ZSkgZnJvbSB0aGUgbG9hZGVyJ3MgY3VycmVudCBzdHJlYW0gZnJhbWUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRlciA6OiBUaGUgY3VycmVudCBUcnVlVHlwZSBnbHlwaCBsb2FkZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9Mb2FkZXJfUmVhZEdseXBoRnVuYworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmVhZHMgb25lIGdseXBoIGVsZW1lbnQgKGl0cyBoZWFkZXIsIGEgc2ltcGxlIGdseXBoLCBvciBhCisgICAqICAgY29tcG9zaXRlKSBmcm9tIHRoZSBsb2FkZXIncyBjdXJyZW50IHN0cmVhbSBmcmFtZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGxvYWRlciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKlRUX0xvYWRlcl9SZWFkR2x5cGhGdW5jKSggVFRfTG9hZGVyICBsb2FkZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmNUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0xvYWRlcl9FbmRHbHlwaEZ1bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENsb3NlcyB0aGUgY3VycmVudCBsb2FkZXIgc3RyZWFtIGZyYW1lIGZvciB0aGUgZ2x5cGguICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRlciA6OiBUaGUgY3VycmVudCBUcnVlVHlwZSBnbHlwaCBsb2FkZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdHlwZToKKyAgICogICBUVF9Mb2FkZXJfRW5kR2x5cGhGdW5jCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBDbG9zZXMgdGhlIGN1cnJlbnQgbG9hZGVyIHN0cmVhbSBmcmFtZSBmb3IgdGhlIGdseXBoLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgbG9hZGVyIDo6CisgICAqICAgICBUaGUgY3VycmVudCBUcnVlVHlwZSBnbHlwaCBsb2FkZXIgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqVFRfTG9hZGVyX0VuZEdseXBoRnVuYykoIFRUX0xvYWRlciAgbG9hZGVyICk7CiAKQEAgLTExMjQsMjcwICsxMjQxLDM2NiBAQAogI2RlZmluZSBUVF9GQUNFX0ZMQUdfVkFSX01WQVIgICggMSA8PCA4ICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgRmFjZSBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRydWVUeXBlIGZhY2UgY2xhc3MuICBUaGVzZSBvYmplY3RzIG1vZGVsIHRoZSByZXNvbHV0aW9uIGFuZCAgICovCi0gIC8qICAgIHBvaW50LXNpemUgaW5kZXBlbmRlbnQgZGF0YSBmb3VuZCBpbiBhIFRydWVUeXBlIGZvbnQgZmlsZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJvb3QgICAgICAgICAgICAgICAgIDo6IFRoZSBiYXNlIEZUX0ZhY2Ugc3RydWN0dXJlLCBtYW5hZ2VkIGJ5IHRoZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0Y19oZWFkZXIgICAgICAgICAgIDo6IFRoZSBUcnVlVHlwZSBjb2xsZWN0aW9uIGhlYWRlciwgdXNlZCB3aGVuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSBpcyBhIGB0dGMnIHJhdGhlciB0aGFuIGEgYHR0ZicuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG9yZGluYXJ5IGZvbnQgZmlsZXMsIHRoZSBmaWVsZCAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB0dGNfaGVhZGVyLmNvdW50JyBpcyBzZXQgdG8gMC4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZm9ybWF0X3RhZyAgICAgICAgICAgOjogVGhlIGZvbnQgZm9ybWF0IHRhZy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fdGFibGVzICAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIFRydWVUeXBlIHRhYmxlcyBpbiB0aGlzIGZvbnQgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkaXJfdGFibGVzICAgICAgICAgICA6OiBUaGUgZGlyZWN0b3J5IG9mIFRydWVUeXBlIHRhYmxlcyBmb3IgdGhpcyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZWFkZXIgICAgICAgICAgICAgICA6OiBUaGUgZm9udCdzIGZvbnQgaGVhZGVyIChgaGVhZCcgdGFibGUpLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBvbiBmb250IG9wZW5pbmcuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3Jpem9udGFsICAgICAgICAgICA6OiBUaGUgZm9udCdzIGhvcml6b250YWwgaGVhZGVyIChgaGhlYScgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUpLiAgVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgaG9yaXpvbnRhbCBtZXRyaWNzIHRhYmxlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYGhtdHgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heF9wcm9maWxlICAgICAgICAgIDo6IFRoZSBmb250J3MgbWF4aW11bSBwcm9maWxlIHRhYmxlLiAgUmVhZCBvbiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IG9wZW5pbmcuICBOb3RlIHRoYXQgc29tZSBtYXhpbXVtICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNhbm5vdCBiZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoaXMgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLiAgV2UgdGh1cyBkZWZpbmUgYWRkaXRpb25hbCBmaWVsZHMgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvdyB0byBob2xkIHRoZSBjb21wdXRlZCBtYXhpbWEuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRpY2FsX2luZm8gICAgICAgIDo6IEEgYm9vbGVhbiB3aGljaCBpcyBzZXQgd2hlbiB0aGUgZm9udCBmaWxlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB2ZXJ0aWNhbCBtZXRyaWNzLiAgSWYgbm90LCB0aGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgdGhlIGB2ZXJ0aWNhbCcgZmllbGQgaXMgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydGljYWwgICAgICAgICAgICAgOjogVGhlIGZvbnQncyB2ZXJ0aWNhbCBoZWFkZXIgKGB2aGVhJyB0YWJsZSkuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgYWxzbyBjb250YWlucyB0aGUgYXNzb2NpYXRlZCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlIChgdm10eCcpLCBpZiBmb3VuZC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JUQU5UOiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWVsZCBpcyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBpZiB0aGUgYHZlcnRpY2FsX2luZm8nIGZpZWxkIGlzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9uYW1lcyAgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgbmFtZSByZWNvcmRzIHdpdGhpbiB0aGlzICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5hbWVfdGFibGUgICAgICAgICAgIDo6IFRoZSB0YWJsZSBvZiBuYW1lIHJlY29yZHMgKGBuYW1lJykuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3MyICAgICAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBPUy8yIHRhYmxlIChgT1MvMicpLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb3N0c2NyaXB0ICAgICAgICAgICA6OiBUaGUgZm9udCdzIFBvc3RTY3JpcHQgdGFibGUgKGBwb3N0JyAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUpLiAgVGhlIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMgYXJlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBsb2FkZWQgYnkgdGhlIGRyaXZlciBvbiBmYWNlIG9wZW5pbmcuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGB0dHBvc3QnIG1vZHVsZSBmb3IgbW9yZSBkZXRhaWxzLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNtYXBfdGFibGUgICAgICAgICAgIDo6IEFkZHJlc3Mgb2YgdGhlIGZhY2UncyBgY21hcCcgU0ZOVCB0YWJsZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtZW1vcnkgKGl0J3MgYW4gZXh0cmFjdGVkIGZyYW1lKS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNtYXBfc2l6ZSAgICAgICAgICAgIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBgY21hcF90YWJsZScgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgYWJvdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdvdG9fdGFibGUgICAgICAgICAgIDo6IEEgZnVuY3Rpb24gY2FsbGVkIGJ5IGVhY2ggVHJ1ZVR5cGUgdGFibGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIgdG8gcG9zaXRpb24gYSBzdHJlYW0ncyBjdXJzb3IgdG8gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4gdGFibGUgYWNjb3JkaW5nIHRvICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyB0YWcuICBJdCBkZWZhdWx0cyB0byBUVF9Hb3RvX0ZhY2UgYnV0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZGlmZmVyZW50IGZvciBzdHJhbmdlIGZvcm1hdHMgKGUuZy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA0MikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhY2Nlc3NfZ2x5cGhfZnJhbWUgICA6OiBBIGZ1bmN0aW9uIHVzZWQgdG8gYWNjZXNzIHRoZSBmcmFtZSBvZiBhICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gZ2x5cGggd2l0aGluIHRoZSBmYWNlJ3MgZm9udCBmaWxlLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb3JnZXRfZ2x5cGhfZnJhbWUgICA6OiBBIGZ1bmN0aW9uIHVzZWQgdG8gZm9yZ2V0IHRoZSBmcmFtZSBvZiBhICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gZ2x5cGggd2hlbiBhbGwgZGF0YSBoYXMgYmVlbiBsb2FkZWQuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByZWFkX2dseXBoX2hlYWRlciAgICA6OiBBIGZ1bmN0aW9uIHVzZWQgdG8gcmVhZCBhIGdseXBoIGhlYWRlci4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBhbiBgYWNjZXNzJyBhbmQgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmb3JnZXQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmVhZF9zaW1wbGVfZ2x5cGggICAgOjogQSBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBzaW1wbGUgZ2x5cGguICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBoZWFkZXIgd2FzICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkLCBhbmQgYmVmb3JlIHRoZSBgZm9yZ2V0Jy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJlYWRfY29tcG9zaXRlX2dseXBoIDo6IEEgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgY29tcG9zaXRlIGdseXBoLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgaGVhZGVyIHdhcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCwgYW5kIGJlZm9yZSB0aGUgYGZvcmdldCcuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzZm50ICAgICAgICAgICAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIFNGTlQgc2VydmljZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBzbmFtZXMgICAgICAgICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgUG9zdFNjcmlwdCBuYW1lcyBzZXJ2aWNlLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbW0gICAgICAgICAgICAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBNdWx0aXBsZSBNYXN0ZXJzIHNlcnZpY2UuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2YXIgICAgICAgICAgICAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIE1ldHJpY3MgVmFyaWF0aW9ucyAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZG14ICAgICAgICAgICAgICAgICA6OiBUaGUgZmFjZSdzIGhvcml6b250YWwgZGV2aWNlIG1ldHJpY3MgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBoZG14JyB0YWJsZSkuICBUaGlzIHRhYmxlIGlzIG9wdGlvbmFsIGluICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2FzcCAgICAgICAgICAgICAgICAgOjogVGhlIGdyaWQtZml0dGluZyBhbmQgc2NhbGluZyBwcm9wZXJ0aWVzICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlIChgZ2FzcCcpLiAgVGhpcyB0YWJsZSBpcyBvcHRpb25hbCBpbiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZS9PcGVuVHlwZSBmb250cy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBjbHQgICAgICAgICAgICAgICAgIDo6IFRoZSBgcGNsdCcgU0ZOVCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3NiaXRfc2NhbGVzICAgICAgOjogVGhlIG51bWJlciBvZiBzYml0IHNjYWxlcyBmb3IgdGhpcyBmb250LiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzYml0X3NjYWxlcyAgICAgICAgICA6OiBBcnJheSBvZiBzYml0IHNjYWxlcyBlbWJlZGRlZCBpbiB0aGlzICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC4gIFRoaXMgdGFibGUgaXMgb3B0aW9uYWwgaW4gYSAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnQuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9zdHNjcmlwdF9uYW1lcyAgICAgOjogQSB0YWJsZSB1c2VkIHRvIHN0b3JlIHRoZSBQb3N0c2NyaXB0IG5hbWVzICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mICB0aGUgZ2x5cGhzIGZvciB0aGlzIGZvbnQuICBTZWUgdGhlICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlICBgdHRjb25maWcuaCcgZm9yIGNvbW1lbnRzIG9uIHRoZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIG9wdGlvbi4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmb250X3Byb2dyYW1fc2l6ZSAgICA6OiBTaXplIGluIGJ5dGVjb2RlcyBvZiB0aGUgZmFjZSdzIGZvbnQgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS4gIDAgaWYgbm9uZSBkZWZpbmVkLiAgSWdub3JlZCBmb3IgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgMiBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZm9udF9wcm9ncmFtICAgICAgICAgOjogVGhlIGZhY2UncyBmb250IHByb2dyYW0gKGJ5dGVjb2RlIHN0cmVhbSkgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGF0IGxvYWQgdGltZSwgYWxzbyB1c2VkIGR1cmluZyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCByZW5kZXJpbmcuICBDb21lcyBmcm9tIHRoZSBgZnBnbScgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udCBmb250cy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdnRfcHJvZ3JhbV9zaXplICAgICA6OiBUaGUgc2l6ZSBpbiBieXRlY29kZXMgb2YgdGhlIGZhY2UncyBjdnQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdnRfcHJvZ3JhbSAgICAgICAgICA6OiBUaGUgZmFjZSdzIGN2dCBwcm9ncmFtIChieXRlY29kZSBzdHJlYW0pICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZWFjaCB0aW1lIGFuIGluc3RhbmNlL3NpemUgaXMgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQvcmVzZXQuICBDb21lcyBmcm9tIHRoZSBgcHJlcCcgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGN2dF9zaXplICAgICAgICAgICAgIDo6IFNpemUgb2YgdGhlIGNvbnRyb2wgdmFsdWUgdGFibGUgKGluICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzKS4gICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udHMuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGN2dCAgICAgICAgICAgICAgICAgIDo6IFRoZSBmYWNlJ3Mgb3JpZ2luYWwgY29udHJvbCB2YWx1ZSB0YWJsZS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29yZGluYXRlcyBhcmUgZXhwcmVzc2VkIGluIHVuc2NhbGVkIGZvbnQgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMuICBDb21lcyBmcm9tIHRoZSBgY3Z0ICcgdGFibGUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaW50ZXJwcmV0ZXIgICAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBUcnVlVHlwZSBieXRlY29kZSAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJldGVycyBmaWVsZCBpcyBhbHNvIHVzZWQgdG8gaG9vayAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVidWdnZXIgaW4gYHR0ZGVidWcnLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGV4dHJhICAgICAgICAgICAgICAgIDo6IFJlc2VydmVkIGZvciB0aGlyZC1wYXJ0eSBmb250IGRyaXZlcnMuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9zdHNjcmlwdF9uYW1lICAgICAgOjogVGhlIFBTIG5hbWUgb2YgdGhlIGZvbnQuICBVc2VkIGJ5IHRoZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RzY3JpcHQgbmFtZSBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5Zl9sZW4gICAgICAgICAgICAgOjogVGhlIGxlbmd0aCBvZiB0aGUgYGdseWYnIHRhYmxlLiAgTmVlZGVkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtYWxmb3JtZWQgYGxvY2EnIHRhYmxlcy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5Zl9vZmZzZXQgICAgICAgICAgOjogVGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSBgZ2x5ZicgdGFibGUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpc19jZmYyICAgICAgICAgICAgICA6OiBTZXQgaWYgdGhlIGZvbnQgZm9ybWF0IGlzIENGRjIuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRvYmxlbmQgICAgICAgICAgICAgIDo6IEEgYm9vbGVhbiB3aGljaCBpcyBzZXQgaWYgdGhlIGZvbnQgc2hvdWxkICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBibGVuZGVkICh0aGlzIGlzIGZvciBHWCB2YXIpLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJsZW5kICAgICAgICAgICAgICAgIDo6IENvbnRhaW5zIHRoZSBkYXRhIG5lZWRlZCB0byBjb250cm9sIEdYICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gdGFibGVzIChyYXRoZXIgbGlrZSBNdWx0aXBsZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFzdGVyIGRhdGEpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2YXJpYXRpb25fc3VwcG9ydCAgICA6OiBGbGFncyB0aGF0IGluZGljYXRlIHdoaWNoIE9wZW5UeXBlICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGZvbnQgdmFyaWF0aW9uICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgaXMgcHJlc2VudCwgdmFsaWQsIGFuZCB1c2FibGUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgVFRfRkFDRV9GTEFHX1ZBUl9GVkFSIGlzIG9ubHkgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lIGRlc2lnbiBheGlzLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2YXJfcG9zdHNjcmlwdF9wcmVmaXggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBvc3RTY3JpcHQgbmFtZSBwcmVmaXggbmVlZGVkIGZvciAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGluZyBhIHZhcmlhdGlvbiBmb250IGluc3RhbmNlJ3MgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUyBuYW1lIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBgdmFyX3Bvc3RzY3JpcHRfcHJlZml4JyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3J6X21ldHJpY3Nfc2l6ZSAgICA6OiBUaGUgc2l6ZSBvZiB0aGUgYGhtdHgnIHRhYmxlLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRfbWV0cmljc19zaXplICAgIDo6IFRoZSBzaXplIG9mIHRoZSBgdm10eCcgdGFibGUuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2xvY2F0aW9ucyAgICAgICAgOjogVGhlIG51bWJlciBvZiBnbHlwaCBsb2NhdGlvbnMgaW4gdGhpcyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlIGZpbGUuICBUaGlzIHNob3VsZCBiZSAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGljYWwgdG8gdGhlIG51bWJlciBvZiBnbHlwaHMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWdub3JlZCBmb3IgVHlwZSAyIGZvbnRzLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9sb2NhdGlvbnMgICAgICA6OiBBbiBhcnJheSBvZiBsb25ncy4gIFRoZXNlIGFyZSBvZmZzZXRzIHRvICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGggZGF0YSB3aXRoaW4gdGhlIGBnbHlmJyB0YWJsZS4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgZm9yIFR5cGUgMiBmb250IGZhY2VzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGRteF90YWJsZSAgICAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBgaGRteCcgdGFibGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZG14X3RhYmxlX3NpemUgICAgICA6OiBUaGUgc2l6ZSBvZiB0aGUgYGhkbXgnIHRhYmxlLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhkbXhfcmVjb3JkX2NvdW50ICAgIDo6IFRoZSBudW1iZXIgb2YgaGRteCByZWNvcmRzLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGRteF9yZWNvcmRfc2l6ZSAgICAgOjogVGhlIHNpemUgb2YgYSBzaW5nbGUgaGRteCByZWNvcmQuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoZG14X3JlY29yZF9zaXplcyAgICA6OiBBbiBhcnJheSBob2xkaW5nIHRoZSBwcGVtIHNpemVzIGF2YWlsYWJsZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGBoZG14JyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzYml0X3RhYmxlICAgICAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIGZvbnQncyBlbWJlZGRlZCBiaXRtYXAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzYml0X3RhYmxlX3NpemUgICAgICA6OiBUaGUgc2l6ZSBvZiBgc2JpdF90YWJsZScuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNiaXRfdGFibGVfdHlwZSAgICAgIDo6IFRoZSBzYml0IHRhYmxlIHR5cGUgKENCTEMsIHNiaXgsIGV0Yy4pLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2JpdF9udW1fc3RyaWtlcyAgICAgOjogVGhlIG51bWJlciBvZiBzYml0IHN0cmlrZXMgZXhwb3NlZCBieSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVUeXBlJ3MgQVBJLCBvbWl0dGluZyBpbnZhbGlkIHN0cmlrZXMuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2JpdF9zdHJpa2VfbWFwICAgICAgOjogQSBtYXBwaW5nIGJldHdlZW4gdGhlIHN0cmlrZSBpbmRpY2VzICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZWQgYnkgdGhlIEFQSSBhbmQgdGhlIGluZGljZXMgdXNlZCBpbiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9udCdzIHNiaXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGtlcm5fdGFibGUgICAgICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgYGtlcm4nIHRhYmxlLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAga2Vybl90YWJsZV9zaXplICAgICAgOjogVGhlIHNpemUgb2YgdGhlIGBrZXJuJyB0YWJsZS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBudW1fa2Vybl90YWJsZXMgICAgICA6OiBUaGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBrZXJuIHN1YnRhYmxlcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwIHRvIDMyOyBGcmVlVHlwZSByZWNvZ25pemVzIG9ubHkgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWwgb25lcyB3aXRoIGZvcm1hdCAwKS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAga2Vybl9hdmFpbF9iaXRzICAgICAgOjogVGhlIGF2YWlsYWJpbGl0eSBzdGF0dXMgb2Yga2VybiBzdWJ0YWJsZXM7ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJpdCBuIGlzIHNldCwgdGFibGUgbiBpcyBhdmFpbGFibGUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAga2Vybl9vcmRlcl9iaXRzICAgICAgOjogVGhlIHNvcnRlZG5lc3Mgc3RhdHVzIG9mIGtlcm4gc3VidGFibGVzOyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJpdCBuIGlzIHNldCwgdGFibGUgbiBpcyBzb3J0ZWQuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmRmICAgICAgICAgICAgICAgICAgOjogRGF0YSByZWxhdGVkIHRvIGFuIFNGTlQgZm9udCdzIGBiZGYnICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOyBzZWUgYHR0dHlwZXMuaCcuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaG9yel9tZXRyaWNzX29mZnNldCAgOjogVGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSBgaG10eCcgdGFibGUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0X21ldHJpY3Nfb2Zmc2V0ICA6OiBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIGB2bXR4JyB0YWJsZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNwaF9mb3VuZF9mdW5jX2ZsYWdzIDo6IEZsYWdzIGlkZW50aWZ5aW5nIHNwZWNpYWwgYnl0ZWNvZGUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgKHVzZWQgYnkgdGhlIHYzOCBpbXBsZW1lbnRhdGlvbiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyKS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmbGFnIGlzIHNldCBpZiB3ZSBhcmUgaW4gQ2xlYXJUeXBlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZSAodXNlZCBieSB0aGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MzggaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ5dGVjb2RlICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBlYmR0X3N0YXJ0ICAgICAgICAgICA6OiBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIHNiaXQgZGF0YSB0YWJsZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKENCRFQsIGJkYXQsIGV0Yy4pLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBlYmR0X3NpemUgICAgICAgICAgICA6OiBUaGUgc2l6ZSBvZiB0aGUgc2JpdCBkYXRhIHRhYmxlLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlIEZhY2UgVHlwZQorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0ZhY2UKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBUcnVlVHlwZSBmYWNlIGNsYXNzLiAgVGhlc2Ugb2JqZWN0cyBtb2RlbCB0aGUgcmVzb2x1dGlvbiBhbmQKKyAgICogICBwb2ludC1zaXplIGluZGVwZW5kZW50IGRhdGEgZm91bmQgaW4gYSBUcnVlVHlwZSBmb250IGZpbGUuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgcm9vdCA6OgorICAgKiAgICAgVGhlIGJhc2UgRlRfRmFjZSBzdHJ1Y3R1cmUsIG1hbmFnZWQgYnkgdGhlCisgICAqICAgICBiYXNlIGxheWVyLgorICAgKgorICAgKiAgIHR0Y19oZWFkZXIgOjoKKyAgICogICAgIFRoZSBUcnVlVHlwZSBjb2xsZWN0aW9uIGhlYWRlciwgdXNlZCB3aGVuCisgICAqICAgICB0aGUgZmlsZSBpcyBhIGB0dGMnIHJhdGhlciB0aGFuIGEgYHR0ZicuCisgICAqICAgICBGb3Igb3JkaW5hcnkgZm9udCBmaWxlcywgdGhlIGZpZWxkCisgICAqICAgICBgdHRjX2hlYWRlci5jb3VudCcgaXMgc2V0IHRvIDAuCisgICAqCisgICAqICAgZm9ybWF0X3RhZyA6OgorICAgKiAgICAgVGhlIGZvbnQgZm9ybWF0IHRhZy4KKyAgICoKKyAgICogICBudW1fdGFibGVzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIFRydWVUeXBlIHRhYmxlcyBpbiB0aGlzIGZvbnQKKyAgICogICAgIGZpbGUuCisgICAqCisgICAqICAgZGlyX3RhYmxlcyA6OgorICAgKiAgICAgVGhlIGRpcmVjdG9yeSBvZiBUcnVlVHlwZSB0YWJsZXMgZm9yIHRoaXMKKyAgICogICAgIGZvbnQgZmlsZS4KKyAgICoKKyAgICogICBoZWFkZXIgOjoKKyAgICogICAgIFRoZSBmb250J3MgZm9udCBoZWFkZXIgKGBoZWFkJyB0YWJsZSkuCisgICAqICAgICBSZWFkIG9uIGZvbnQgb3BlbmluZy4KKyAgICoKKyAgICogICBob3Jpem9udGFsIDo6CisgICAqICAgICBUaGUgZm9udCdzIGhvcml6b250YWwgaGVhZGVyIChgaGhlYScKKyAgICogICAgIHRhYmxlKS4gIFRoaXMgZmllbGQgYWxzbyBjb250YWlucyB0aGUKKyAgICogICAgIGFzc29jaWF0ZWQgaG9yaXpvbnRhbCBtZXRyaWNzIHRhYmxlCisgICAqICAgICAoYGhtdHgnKS4KKyAgICoKKyAgICogICBtYXhfcHJvZmlsZSA6OgorICAgKiAgICAgVGhlIGZvbnQncyBtYXhpbXVtIHByb2ZpbGUgdGFibGUuICBSZWFkIG9uCisgICAqICAgICBmb250IG9wZW5pbmcuICBOb3RlIHRoYXQgc29tZSBtYXhpbXVtCisgICAqICAgICB2YWx1ZXMgY2Fubm90IGJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhpcworICAgKiAgICAgdGFibGUuICBXZSB0aHVzIGRlZmluZSBhZGRpdGlvbmFsIGZpZWxkcworICAgKiAgICAgYmVsb3cgdG8gaG9sZCB0aGUgY29tcHV0ZWQgbWF4aW1hLgorICAgKgorICAgKiAgIHZlcnRpY2FsX2luZm8gOjoKKyAgICogICAgIEEgYm9vbGVhbiB3aGljaCBpcyBzZXQgd2hlbiB0aGUgZm9udCBmaWxlCisgICAqICAgICBjb250YWlucyB2ZXJ0aWNhbCBtZXRyaWNzLiAgSWYgbm90LCB0aGUKKyAgICogICAgIHZhbHVlIG9mIHRoZSBgdmVydGljYWwnIGZpZWxkIGlzCisgICAqICAgICB1bmRlZmluZWQuCisgICAqCisgICAqICAgdmVydGljYWwgOjoKKyAgICogICAgIFRoZSBmb250J3MgdmVydGljYWwgaGVhZGVyIChgdmhlYScgdGFibGUpLgorICAgKiAgICAgVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRoZSBhc3NvY2lhdGVkCisgICAqICAgICB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlIChgdm10eCcpLCBpZiBmb3VuZC4KKyAgICogICAgIElNUE9SVEFOVDogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmllbGQgaXMKKyAgICogICAgIHVuZGVmaW5lZCBpZiB0aGUgYHZlcnRpY2FsX2luZm8nIGZpZWxkIGlzCisgICAqICAgICB1bnNldC4KKyAgICoKKyAgICogICBudW1fbmFtZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgbmFtZSByZWNvcmRzIHdpdGhpbiB0aGlzCisgICAqICAgICBUcnVlVHlwZSBmb250LgorICAgKgorICAgKiAgIG5hbWVfdGFibGUgOjoKKyAgICogICAgIFRoZSB0YWJsZSBvZiBuYW1lIHJlY29yZHMgKGBuYW1lJykuCisgICAqCisgICAqICAgb3MyIDo6CisgICAqICAgICBUaGUgZm9udCdzIE9TLzIgdGFibGUgKGBPUy8yJykuCisgICAqCisgICAqICAgcG9zdHNjcmlwdCA6OgorICAgKiAgICAgVGhlIGZvbnQncyBQb3N0U2NyaXB0IHRhYmxlIChgcG9zdCcKKyAgICogICAgIHRhYmxlKS4gIFRoZSBQb3N0U2NyaXB0IGdseXBoIG5hbWVzIGFyZQorICAgKiAgICAgbm90IGxvYWRlZCBieSB0aGUgZHJpdmVyIG9uIGZhY2Ugb3BlbmluZy4KKyAgICogICAgIFNlZSB0aGUgYHR0cG9zdCcgbW9kdWxlIGZvciBtb3JlIGRldGFpbHMuCisgICAqCisgICAqICAgY21hcF90YWJsZSA6OgorICAgKiAgICAgQWRkcmVzcyBvZiB0aGUgZmFjZSdzIGBjbWFwJyBTRk5UIHRhYmxlCisgICAqICAgICBpbiBtZW1vcnkgKGl0J3MgYW4gZXh0cmFjdGVkIGZyYW1lKS4KKyAgICoKKyAgICogICBjbWFwX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBgY21hcF90YWJsZScKKyAgICogICAgIGRlc2NyaWJlZCBhYm92ZS4KKyAgICoKKyAgICogICBnb3RvX3RhYmxlIDo6CisgICAqICAgICBBIGZ1bmN0aW9uIGNhbGxlZCBieSBlYWNoIFRydWVUeXBlIHRhYmxlCisgICAqICAgICBsb2FkZXIgdG8gcG9zaXRpb24gYSBzdHJlYW0ncyBjdXJzb3IgdG8KKyAgICogICAgIHRoZSBzdGFydCBvZiBhIGdpdmVuIHRhYmxlIGFjY29yZGluZyB0bworICAgKiAgICAgaXRzIHRhZy4gIEl0IGRlZmF1bHRzIHRvIFRUX0dvdG9fRmFjZSBidXQKKyAgICogICAgIGNhbiBiZSBkaWZmZXJlbnQgZm9yIHN0cmFuZ2UgZm9ybWF0cyAoZS5nLgorICAgKiAgICAgVHlwZSA0MikuCisgICAqCisgICAqICAgYWNjZXNzX2dseXBoX2ZyYW1lIDo6CisgICAqICAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gYWNjZXNzIHRoZSBmcmFtZSBvZiBhCisgICAqICAgICBnaXZlbiBnbHlwaCB3aXRoaW4gdGhlIGZhY2UncyBmb250IGZpbGUuCisgICAqCisgICAqICAgZm9yZ2V0X2dseXBoX2ZyYW1lIDo6CisgICAqICAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gZm9yZ2V0IHRoZSBmcmFtZSBvZiBhCisgICAqICAgICBnaXZlbiBnbHlwaCB3aGVuIGFsbCBkYXRhIGhhcyBiZWVuIGxvYWRlZC4KKyAgICoKKyAgICogICByZWFkX2dseXBoX2hlYWRlciA6OgorICAgKiAgICAgQSBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBnbHlwaCBoZWFkZXIuCisgICAqICAgICBJdCBtdXN0IGJlIGNhbGxlZCBiZXR3ZWVuIGFuIGBhY2Nlc3MnIGFuZAorICAgKiAgICAgYGZvcmdldCcuCisgICAqCisgICAqICAgcmVhZF9zaW1wbGVfZ2x5cGggOjoKKyAgICogICAgIEEgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgc2ltcGxlIGdseXBoLgorICAgKiAgICAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGhlYWRlciB3YXMKKyAgICogICAgIHJlYWQsIGFuZCBiZWZvcmUgdGhlIGBmb3JnZXQnLgorICAgKgorICAgKiAgIHJlYWRfY29tcG9zaXRlX2dseXBoIDo6CisgICAqICAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gcmVhZCBhIGNvbXBvc2l0ZSBnbHlwaC4KKyAgICogICAgIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBoZWFkZXIgd2FzCisgICAqICAgICByZWFkLCBhbmQgYmVmb3JlIHRoZSBgZm9yZ2V0Jy4KKyAgICoKKyAgICogICBzZm50IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIFNGTlQgc2VydmljZS4KKyAgICoKKyAgICogICBwc25hbWVzIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIFBvc3RTY3JpcHQgbmFtZXMgc2VydmljZS4KKyAgICoKKyAgICogICBtbSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBNdWx0aXBsZSBNYXN0ZXJzIHNlcnZpY2UuCisgICAqCisgICAqICAgdmFyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIE1ldHJpY3MgVmFyaWF0aW9ucworICAgKiAgICAgc2VydmljZS4KKyAgICoKKyAgICogICBoZG14IDo6CisgICAqICAgICBUaGUgZmFjZSdzIGhvcml6b250YWwgZGV2aWNlIG1ldHJpY3MKKyAgICogICAgIChgaGRteCcgdGFibGUpLiAgVGhpcyB0YWJsZSBpcyBvcHRpb25hbCBpbgorICAgKiAgICAgVHJ1ZVR5cGUvT3BlblR5cGUgZm9udHMuCisgICAqCisgICAqICAgZ2FzcCA6OgorICAgKiAgICAgVGhlIGdyaWQtZml0dGluZyBhbmQgc2NhbGluZyBwcm9wZXJ0aWVzCisgICAqICAgICB0YWJsZSAoYGdhc3AnKS4gIFRoaXMgdGFibGUgaXMgb3B0aW9uYWwgaW4KKyAgICogICAgIFRydWVUeXBlL09wZW5UeXBlIGZvbnRzLgorICAgKgorICAgKiAgIHBjbHQgOjoKKyAgICogICAgIFRoZSBgcGNsdCcgU0ZOVCB0YWJsZS4KKyAgICoKKyAgICogICBudW1fc2JpdF9zY2FsZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2Ygc2JpdCBzY2FsZXMgZm9yIHRoaXMgZm9udC4KKyAgICoKKyAgICogICBzYml0X3NjYWxlcyA6OgorICAgKiAgICAgQXJyYXkgb2Ygc2JpdCBzY2FsZXMgZW1iZWRkZWQgaW4gdGhpcworICAgKiAgICAgZm9udC4gIFRoaXMgdGFibGUgaXMgb3B0aW9uYWwgaW4gYQorICAgKiAgICAgVHJ1ZVR5cGUvT3BlblR5cGUgZm9udC4KKyAgICoKKyAgICogICBwb3N0c2NyaXB0X25hbWVzIDo6CisgICAqICAgICBBIHRhYmxlIHVzZWQgdG8gc3RvcmUgdGhlIFBvc3RzY3JpcHQgbmFtZXMKKyAgICogICAgIG9mICB0aGUgZ2x5cGhzIGZvciB0aGlzIGZvbnQuICBTZWUgdGhlCisgICAqICAgICBmaWxlICBgdHRjb25maWcuaCcgZm9yIGNvbW1lbnRzIG9uIHRoZQorICAgKiAgICAgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTIG9wdGlvbi4KKyAgICoKKyAgICogICBwYWxldHRlX2RhdGEgOjoKKyAgICogICAgIFNvbWUgZmllbGRzIGZyb20gdGhlIGBDUEFMJyB0YWJsZSB0aGF0IGFyZSBkaXJlY3RseSBpbmRleGVkLgorICAgKgorICAgKiAgIHBhbGV0dGVfaW5kZXggOjoKKyAgICogICAgIFRoZSBjdXJyZW50IHBhbGV0dGUgaW5kZXgsIGFzIHNldCBieSBARlRfUGFsZXR0ZV9TZWxlY3QuCisgICAqCisgICAqICAgcGFsZXR0ZSA6OgorICAgKiAgICAgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY3VycmVudCBwYWxldHRlJ3MgY29sb3JzLgorICAgKgorICAgKiAgIGhhdmVfZm9yZWdyb3VuZF9jb2xvciA6OgorICAgKiAgICAgVGhlcmUgd2FzIGEgY2FsbCB0byBARlRfUGFsZXR0ZV9TZXRfRm9yZWdyb3VuZF9Db2xvci4KKyAgICoKKyAgICogICBmb3JlZ3JvdW5kX2NvbG9yIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmb3JlZ3JvdW5kIGNvbG9yIGNvcnJlc3BvbmRpbmcgdG8gYENQQUwnIGNvbG9yIGluZGV4CisgICAqICAgICAweEZGRkYuICBPbmx5IHZhbGlkIGlmIGBoYXZlX2ZvcmVncm91bmRfY29sb3InIGlzIHNldC4KKyAgICoKKyAgICogICBmb250X3Byb2dyYW1fc2l6ZSA6OgorICAgKiAgICAgU2l6ZSBpbiBieXRlY29kZXMgb2YgdGhlIGZhY2UncyBmb250CisgICAqICAgICBwcm9ncmFtLiAgMCBpZiBub25lIGRlZmluZWQuICBJZ25vcmVkIGZvcgorICAgKiAgICAgVHlwZSAyIGZvbnRzLgorICAgKgorICAgKiAgIGZvbnRfcHJvZ3JhbSA6OgorICAgKiAgICAgVGhlIGZhY2UncyBmb250IHByb2dyYW0gKGJ5dGVjb2RlIHN0cmVhbSkKKyAgICogICAgIGV4ZWN1dGVkIGF0IGxvYWQgdGltZSwgYWxzbyB1c2VkIGR1cmluZworICAgKiAgICAgZ2x5cGggcmVuZGVyaW5nLiAgQ29tZXMgZnJvbSB0aGUgYGZwZ20nCisgICAqICAgICB0YWJsZS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250IGZvbnRzLgorICAgKgorICAgKiAgIGN2dF9wcm9ncmFtX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIGluIGJ5dGVjb2RlcyBvZiB0aGUgZmFjZSdzIGN2dAorICAgKiAgICAgcHJvZ3JhbS4gIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4KKyAgICoKKyAgICogICBjdnRfcHJvZ3JhbSA6OgorICAgKiAgICAgVGhlIGZhY2UncyBjdnQgcHJvZ3JhbSAoYnl0ZWNvZGUgc3RyZWFtKQorICAgKiAgICAgZXhlY3V0ZWQgZWFjaCB0aW1lIGFuIGluc3RhbmNlL3NpemUgaXMKKyAgICogICAgIGNoYW5nZWQvcmVzZXQuICBDb21lcyBmcm9tIHRoZSBgcHJlcCcKKyAgICogICAgIHRhYmxlLiAgSWdub3JlZCBmb3IgVHlwZSAyIGZvbnRzLgorICAgKgorICAgKiAgIGN2dF9zaXplIDo6CisgICAqICAgICBTaXplIG9mIHRoZSBjb250cm9sIHZhbHVlIHRhYmxlIChpbgorICAgKiAgICAgZW50cmllcykuICAgSWdub3JlZCBmb3IgVHlwZSAyIGZvbnRzLgorICAgKgorICAgKiAgIGN2dCA6OgorICAgKiAgICAgVGhlIGZhY2UncyBvcmlnaW5hbCBjb250cm9sIHZhbHVlIHRhYmxlLgorICAgKiAgICAgQ29vcmRpbmF0ZXMgYXJlIGV4cHJlc3NlZCBpbiB1bnNjYWxlZCBmb250CisgICAqICAgICB1bml0cy4gIENvbWVzIGZyb20gdGhlIGBjdnQgJyB0YWJsZS4KKyAgICogICAgIElnbm9yZWQgZm9yIFR5cGUgMiBmb250cy4KKyAgICoKKyAgICogICBpbnRlcnByZXRlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBUcnVlVHlwZSBieXRlY29kZQorICAgKiAgICAgaW50ZXJwcmV0ZXJzIGZpZWxkIGlzIGFsc28gdXNlZCB0byBob29rCisgICAqICAgICB0aGUgZGVidWdnZXIgaW4gYHR0ZGVidWcnLgorICAgKgorICAgKiAgIGV4dHJhIDo6CisgICAqICAgICBSZXNlcnZlZCBmb3IgdGhpcmQtcGFydHkgZm9udCBkcml2ZXJzLgorICAgKgorICAgKiAgIHBvc3RzY3JpcHRfbmFtZSA6OgorICAgKiAgICAgVGhlIFBTIG5hbWUgb2YgdGhlIGZvbnQuICBVc2VkIGJ5IHRoZQorICAgKiAgICAgcG9zdHNjcmlwdCBuYW1lIHNlcnZpY2UuCisgICAqCisgICAqICAgZ2x5Zl9sZW4gOjoKKyAgICogICAgIFRoZSBsZW5ndGggb2YgdGhlIGBnbHlmJyB0YWJsZS4gIE5lZWRlZAorICAgKiAgICAgZm9yIG1hbGZvcm1lZCBgbG9jYScgdGFibGVzLgorICAgKgorICAgKiAgIGdseWZfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIGBnbHlmJyB0YWJsZS4KKyAgICoKKyAgICogICBpc19jZmYyIDo6CisgICAqICAgICBTZXQgaWYgdGhlIGZvbnQgZm9ybWF0IGlzIENGRjIuCisgICAqCisgICAqICAgZG9ibGVuZCA6OgorICAgKiAgICAgQSBib29sZWFuIHdoaWNoIGlzIHNldCBpZiB0aGUgZm9udCBzaG91bGQKKyAgICogICAgIGJlIGJsZW5kZWQgKHRoaXMgaXMgZm9yIEdYIHZhcikuCisgICAqCisgICAqICAgYmxlbmQgOjoKKyAgICogICAgIENvbnRhaW5zIHRoZSBkYXRhIG5lZWRlZCB0byBjb250cm9sIEdYCisgICAqICAgICB2YXJpYXRpb24gdGFibGVzIChyYXRoZXIgbGlrZSBNdWx0aXBsZQorICAgKiAgICAgTWFzdGVyIGRhdGEpLgorICAgKgorICAgKiAgIHZhcmlhdGlvbl9zdXBwb3J0IDo6CisgICAqICAgICBGbGFncyB0aGF0IGluZGljYXRlIHdoaWNoIE9wZW5UeXBlCisgICAqICAgICBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZm9udCB2YXJpYXRpb24KKyAgICogICAgIHN1cHBvcnQgaXMgcHJlc2VudCwgdmFsaWQsIGFuZCB1c2FibGUuCisgICAqICAgICBGb3IgZXhhbXBsZSwgVFRfRkFDRV9GTEFHX1ZBUl9GVkFSIGlzIG9ubHkKKyAgICogICAgIHNldCBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkZXNpZ24gYXhpcy4KKyAgICoKKyAgICogICB2YXJfcG9zdHNjcmlwdF9wcmVmaXggOjoKKyAgICogICAgIFRoZSBQb3N0U2NyaXB0IG5hbWUgcHJlZml4IG5lZWRlZCBmb3IKKyAgICogICAgIGNvbnN0cnVjdGluZyBhIHZhcmlhdGlvbiBmb250IGluc3RhbmNlJ3MKKyAgICogICAgIFBTIG5hbWUgLgorICAgKgorICAgKiAgIHZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4gOjoKKyAgICogICAgIFRoZSBsZW5ndGggb2YgdGhlIGB2YXJfcG9zdHNjcmlwdF9wcmVmaXgnCisgICAqICAgICBzdHJpbmcuCisgICAqCisgICAqICAgaG9yel9tZXRyaWNzX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSBgaG10eCcgdGFibGUuCisgICAqCisgICAqICAgdmVydF9tZXRyaWNzX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSBgdm10eCcgdGFibGUuCisgICAqCisgICAqICAgbnVtX2xvY2F0aW9ucyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBnbHlwaCBsb2NhdGlvbnMgaW4gdGhpcworICAgKiAgICAgVHJ1ZVR5cGUgZmlsZS4gIFRoaXMgc2hvdWxkIGJlCisgICAqICAgICBpZGVudGljYWwgdG8gdGhlIG51bWJlciBvZiBnbHlwaHMuCisgICAqICAgICBJZ25vcmVkIGZvciBUeXBlIDIgZm9udHMuCisgICAqCisgICAqICAgZ2x5cGhfbG9jYXRpb25zIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBsb25ncy4gIFRoZXNlIGFyZSBvZmZzZXRzIHRvCisgICAqICAgICBnbHlwaCBkYXRhIHdpdGhpbiB0aGUgYGdseWYnIHRhYmxlLgorICAgKiAgICAgSWdub3JlZCBmb3IgVHlwZSAyIGZvbnQgZmFjZXMuCisgICAqCisgICAqICAgaGRteF90YWJsZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBgaGRteCcgdGFibGUuCisgICAqCisgICAqICAgaGRteF90YWJsZV9zaXplIDo6CisgICAqICAgICBUaGUgc2l6ZSBvZiB0aGUgYGhkbXgnIHRhYmxlLgorICAgKgorICAgKiAgIGhkbXhfcmVjb3JkX2NvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGhkbXggcmVjb3Jkcy4KKyAgICoKKyAgICogICBoZG14X3JlY29yZF9zaXplIDo6CisgICAqICAgICBUaGUgc2l6ZSBvZiBhIHNpbmdsZSBoZG14IHJlY29yZC4KKyAgICoKKyAgICogICBoZG14X3JlY29yZF9zaXplcyA6OgorICAgKiAgICAgQW4gYXJyYXkgaG9sZGluZyB0aGUgcHBlbSBzaXplcyBhdmFpbGFibGUKKyAgICogICAgIGluIHRoZSBgaGRteCcgdGFibGUuCisgICAqCisgICAqICAgc2JpdF90YWJsZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBmb250J3MgZW1iZWRkZWQgYml0bWFwCisgICAqICAgICBsb2NhdGlvbiB0YWJsZS4KKyAgICoKKyAgICogICBzYml0X3RhYmxlX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIGBzYml0X3RhYmxlJy4KKyAgICoKKyAgICogICBzYml0X3RhYmxlX3R5cGUgOjoKKyAgICogICAgIFRoZSBzYml0IHRhYmxlIHR5cGUgKENCTEMsIHNiaXgsIGV0Yy4pLgorICAgKgorICAgKiAgIHNiaXRfbnVtX3N0cmlrZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2Ygc2JpdCBzdHJpa2VzIGV4cG9zZWQgYnkKKyAgICogICAgIEZyZWVUeXBlJ3MgQVBJLCBvbWl0dGluZyBpbnZhbGlkIHN0cmlrZXMuCisgICAqCisgICAqICAgc2JpdF9zdHJpa2VfbWFwIDo6CisgICAqICAgICBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3RyaWtlIGluZGljZXMKKyAgICogICAgIGV4cG9zZWQgYnkgdGhlIEFQSSBhbmQgdGhlIGluZGljZXMgdXNlZCBpbgorICAgKiAgICAgdGhlIGZvbnQncyBzYml0IHRhYmxlLgorICAgKgorICAgKiAgIGNwYWwgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBkYXRhIHJlbGF0ZWQgdG8gdGhlIGBDUEFMJyB0YWJsZS4gIE5VTEwgaWYgdGhlIHRhYmxlCisgICAqICAgICBpcyBub3QgYXZhaWxhYmxlLgorICAgKgorICAgKiAgIGNvbHIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byBkYXRhIHJlbGF0ZWQgdG8gdGhlIGBDT0xSJyB0YWJsZS4gIE5VTEwgaWYgdGhlIHRhYmxlCisgICAqICAgICBpcyBub3QgYXZhaWxhYmxlLgorICAgKgorICAgKiAgIGtlcm5fdGFibGUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgYGtlcm4nIHRhYmxlLgorICAgKgorICAgKiAgIGtlcm5fdGFibGVfc2l6ZSA6OgorICAgKiAgICAgVGhlIHNpemUgb2YgdGhlIGBrZXJuJyB0YWJsZS4KKyAgICoKKyAgICogICBudW1fa2Vybl90YWJsZXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGtlcm4gc3VidGFibGVzCisgICAqICAgICAodXAgdG8gMzI7IEZyZWVUeXBlIHJlY29nbml6ZXMgb25seQorICAgKiAgICAgaG9yaXpvbnRhbCBvbmVzIHdpdGggZm9ybWF0IDApLgorICAgKgorICAgKiAgIGtlcm5fYXZhaWxfYml0cyA6OgorICAgKiAgICAgVGhlIGF2YWlsYWJpbGl0eSBzdGF0dXMgb2Yga2VybiBzdWJ0YWJsZXM7CisgICAqICAgICBpZiBiaXQgbiBpcyBzZXQsIHRhYmxlIG4gaXMgYXZhaWxhYmxlLgorICAgKgorICAgKiAgIGtlcm5fb3JkZXJfYml0cyA6OgorICAgKiAgICAgVGhlIHNvcnRlZG5lc3Mgc3RhdHVzIG9mIGtlcm4gc3VidGFibGVzOworICAgKiAgICAgaWYgYml0IG4gaXMgc2V0LCB0YWJsZSBuIGlzIHNvcnRlZC4KKyAgICoKKyAgICogICBiZGYgOjoKKyAgICogICAgIERhdGEgcmVsYXRlZCB0byBhbiBTRk5UIGZvbnQncyBgYmRmJworICAgKiAgICAgdGFibGU7IHNlZSBgdHR0eXBlcy5oJy4KKyAgICoKKyAgICogICBob3J6X21ldHJpY3Nfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIGBobXR4JyB0YWJsZS4KKyAgICoKKyAgICogICB2ZXJ0X21ldHJpY3Nfb2Zmc2V0IDo6CisgICAqICAgICBUaGUgZmlsZSBvZmZzZXQgb2YgdGhlIGB2bXR4JyB0YWJsZS4KKyAgICoKKyAgICogICBzcGhfZm91bmRfZnVuY19mbGFncyA6OgorICAgKiAgICAgRmxhZ3MgaWRlbnRpZnlpbmcgc3BlY2lhbCBieXRlY29kZQorICAgKiAgICAgZnVuY3Rpb25zICh1c2VkIGJ5IHRoZSB2MzggaW1wbGVtZW50YXRpb24KKyAgICogICAgIG9mIHRoZSBieXRlY29kZSBpbnRlcnByZXRlcikuCisgICAqCisgICAqICAgc3BoX2NvbXBhdGliaWxpdHlfbW9kZSA6OgorICAgKiAgICAgVGhpcyBmbGFnIGlzIHNldCBpZiB3ZSBhcmUgaW4gQ2xlYXJUeXBlCisgICAqICAgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUgKHVzZWQgYnkgdGhlCisgICAqICAgICB2MzggaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ5dGVjb2RlCisgICAqICAgICBpbnRlcnByZXRlcikuCisgICAqCisgICAqICAgZWJkdF9zdGFydCA6OgorICAgKiAgICAgVGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSBzYml0IGRhdGEgdGFibGUKKyAgICogICAgIChDQkRULCBiZGF0LCBldGMuKS4KKyAgICoKKyAgICogICBlYmR0X3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSBzYml0IGRhdGEgdGFibGUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfRmFjZVJlY18KICAgewogICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICByb290OwpAQCAtMTQ0NSwxMSArMTY1OCwxMSBAQAogICAgIHZvaWQqICAgICAgICAgICAgICAgICBwc2F1eDsKIAogCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBPcHRpb25hbCBUcnVlVHlwZS9PcGVuVHlwZSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBPcHRpb25hbCBUcnVlVHlwZS9PcGVuVHlwZSB0YWJsZXMKKyAgICAgKgorICAgICAqLwogCiAgICAgLyogZ3JpZC1maXR0aW5nIGFuZCBzY2FsaW5nIHRhYmxlICovCiAgICAgVFRfR2FzcFJlYyAgICAgICAgICAgIGdhc3A7ICAgICAgICAgICAgICAgICAvKiB0aGUgYGdhc3AnIHRhYmxlICovCkBAIC0xNDY0LDEyICsxNjc3LDE5IEBACiAgICAgLyogcG9zdHNjcmlwdCBuYW1lcyB0YWJsZSAqLwogICAgIFRUX1Bvc3RfTmFtZXNSZWMgICAgICBwb3N0c2NyaXB0X25hbWVzOwogCisgICAgLyogZ2x5cGggY29sb3JzICovCisgICAgRlRfUGFsZXR0ZV9EYXRhICAgICAgIHBhbGV0dGVfZGF0YTsgICAgICAgICAvKiBzaW5jZSAyLjEwICovCisgICAgRlRfVVNob3J0ICAgICAgICAgICAgIHBhbGV0dGVfaW5kZXg7CisgICAgRlRfQ29sb3IqICAgICAgICAgICAgIHBhbGV0dGU7CisgICAgRlRfQm9vbCAgICAgICAgICAgICAgIGhhdmVfZm9yZWdyb3VuZF9jb2xvcjsKKyAgICBGVF9Db2xvciAgICAgICAgICAgICAgZm9yZWdyb3VuZF9jb2xvcjsKIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogVHJ1ZVR5cGUtc3BlY2lmaWMgZmllbGRzIChpZ25vcmVkIGJ5IHRoZSBDRkYgZHJpdmVyKSAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBUcnVlVHlwZS1zcGVjaWZpYyBmaWVsZHMgKGlnbm9yZWQgYnkgdGhlIENGRiBkcml2ZXIpCisgICAgICoKKyAgICAgKi8KIAogICAgIC8qIHRoZSBmb250IHByb2dyYW0sIGlmIGFueSAqLwogICAgIEZUX1VMb25nICAgICAgICAgICAgICBmb250X3Byb2dyYW1fc2l6ZTsKQEAgLTE0ODgsMTIgKzE3MDgsMTIgQEAKICAgICBUVF9JbnRlcnByZXRlciAgICAgICAgaW50ZXJwcmV0ZXI7CiAKIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogT3RoZXIgdGFibGVzIG9yIGZpZWxkcy4gVGhpcyBpcyB1c2VkIGJ5IGRlcml2YXRpdmUgZm9ybWF0cyBsaWtlICAgICAqLwotICAgIC8qIE9wZW5UeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIE90aGVyIHRhYmxlcyBvciBmaWVsZHMuIFRoaXMgaXMgdXNlZCBieSBkZXJpdmF0aXZlIGZvcm1hdHMgbGlrZQorICAgICAqIE9wZW5UeXBlLgorICAgICAqCisgICAgICovCiAKICAgICBGVF9HZW5lcmljICAgICAgICAgICAgZXh0cmE7CiAKQEAgLTE1NjIsNDAgKzE3ODIsNTQgQEAKICAgICBGVF9VTG9uZyAgICAgICAgICAgICAgZWJkdF9zaXplOwogI2VuZGlmCiAKKyAgICAvKiBzaW5jZSAyLjEwICovCisgICAgdm9pZCogICAgICAgICAgICAgICAgIGNwYWw7CisgICAgdm9pZCogICAgICAgICAgICAgICAgIGNvbHI7CisKICAgfSBUVF9GYWNlUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIFRUX0dseXBoWm9uZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEEgZ2x5cGggem9uZSBpcyB1c2VkIHRvIGxvYWQsIHNjYWxlIGFuZCBoaW50IGdseXBoIG91dGxpbmUgICAgICAgICovCi0gIC8qICAgICBjb29yZGluYXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBtZW1vcnkgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIG1heF9wb2ludHMgICA6OiBUaGUgbWF4aW11bSBzaXplIGluIHBvaW50cyBvZiB0aGUgem9uZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgbWF4X2NvbnRvdXJzIDo6IE1heCBzaXplIGluIGxpbmtzIGNvbnRvdXJzIG9mIHRoZSB6b25lLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBuX3BvaW50cyAgICAgOjogVGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgem9uZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIG5fY29udG91cnMgICA6OiBUaGUgY3VycmVudCBudW1iZXIgb2YgY29udG91cnMgaW4gdGhlIHpvbmUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgb3JnICAgICAgICAgIDo6IFRoZSBvcmlnaW5hbCBnbHlwaCBjb29yZGluYXRlcyAoZm9udCAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICB1bml0cy9zY2FsZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgY3VyICAgICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIGNvb3JkaW5hdGVzIChzY2FsZWQvaGludGVkKS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICB0YWdzICAgICAgICAgOjogVGhlIHBvaW50IGNvbnRyb2wgdGFncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGNvbnRvdXJzICAgICA6OiBUaGUgY29udG91cnMgZW5kIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgZmlyc3RfcG9pbnQgIDo6IE9mZnNldCBvZiB0aGUgY3VycmVudCBzdWJnbHlwaCdzIGZpcnN0IHBvaW50LiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgICBUVF9HbHlwaFpvbmVSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgZ2x5cGggem9uZSBpcyB1c2VkIHRvIGxvYWQsIHNjYWxlIGFuZCBoaW50IGdseXBoIG91dGxpbmUKKyAgICogICBjb29yZGluYXRlcy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4KKyAgICoKKyAgICogICBtYXhfcG9pbnRzIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBzaXplIGluIHBvaW50cyBvZiB0aGUgem9uZS4KKyAgICoKKyAgICogICBtYXhfY29udG91cnMgOjoKKyAgICogICAgIE1heCBzaXplIGluIGxpbmtzIGNvbnRvdXJzIG9mIHRoZSB6b25lLgorICAgKgorICAgKiAgIG5fcG9pbnRzIDo6CisgICAqICAgICBUaGUgY3VycmVudCBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSB6b25lLgorICAgKgorICAgKiAgIG5fY29udG91cnMgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IG51bWJlciBvZiBjb250b3VycyBpbiB0aGUgem9uZS4KKyAgICoKKyAgICogICBvcmcgOjoKKyAgICogICAgIFRoZSBvcmlnaW5hbCBnbHlwaCBjb29yZGluYXRlcyAoZm9udAorICAgKiAgICAgdW5pdHMvc2NhbGVkKS4KKyAgICoKKyAgICogICBjdXIgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IGdseXBoIGNvb3JkaW5hdGVzIChzY2FsZWQvaGludGVkKS4KKyAgICoKKyAgICogICB0YWdzIDo6CisgICAqICAgICBUaGUgcG9pbnQgY29udHJvbCB0YWdzLgorICAgKgorICAgKiAgIGNvbnRvdXJzIDo6CisgICAqICAgICBUaGUgY29udG91cnMgZW5kIHBvaW50cy4KKyAgICoKKyAgICogICBmaXJzdF9wb2ludCA6OgorICAgKiAgICAgT2Zmc2V0IG9mIHRoZSBjdXJyZW50IHN1YmdseXBoJ3MgZmlyc3QgcG9pbnQuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfR2x5cGhab25lUmVjXwogICB7CiAgICAgRlRfTWVtb3J5ICAgbWVtb3J5OwpAQCAtMTYyMCwxNCArMTg1NCwxNCBAQAogICB0eXBlZGVmIHN0cnVjdCBUVF9FeGVjQ29udGV4dFJlY18qICBUVF9FeGVjQ29udGV4dDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEB0eXBlOgorICAgKiAgIFRUX1NpemUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgc2l6ZSBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBUVF9TaXplUmVjXyogIFRUX1NpemU7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCmluZGV4IDM1MDNjMjYuLjc4NGYxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxdGFibGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBCYXNpYyBUeXBlIDEvVHlwZSAyIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAqLwotLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0MXRhYmxlcy5oCisgKgorICogICBCYXNpYyBUeXBlIDEvVHlwZSAyIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uCisgKiAgIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFQxVEFCTEVTX0hfCkBAIC0zNCw1OCArMzQsNTggQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHlwZTFfdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHlwZSAxIFRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHlwZX4xIChQb3N0U2NyaXB0KSBzcGVjaWZpYyBmb250IHRhYmxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIFR5cGUgMS1zcGVjaWZpYyB0YWJsZXMsICAgICovCi0gIC8qICAgIGluY2x1ZGluZyBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gb3RoZXIgUG9zdFNjcmlwdCBmb250IGZvcm1hdHMuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0ZvbnRJbmZvUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19Gb250SW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfUHJpdmF0ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX1ByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lEX0ZhY2VEaWN0UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9GYWNlRGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDSURfRmFjZUluZm9SZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lEX0ZhY2VJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9IYXNfUFNfR2x5cGhfTmFtZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X1BTX0ZvbnRfSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9QU19Gb250X1ByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfUFNfRm9udF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0JsZW5kX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9FbmNvZGluZ1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRGljdF9LZXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIHR5cGUxX3RhYmxlcworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgVHlwZSAxIFRhYmxlcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgVHlwZX4xLXNwZWNpZmljIGZvbnQgdGFibGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9mIFR5cGV+MS1zcGVjaWZpYyB0YWJsZXMsCisgICAqICAgaW5jbHVkaW5nIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBvdGhlciBQb3N0U2NyaXB0IGZvbnQgZm9ybWF0cy4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIFBTX0ZvbnRJbmZvUmVjCisgICAqICAgUFNfRm9udEluZm8KKyAgICogICBQU19Qcml2YXRlUmVjCisgICAqICAgUFNfUHJpdmF0ZQorICAgKgorICAgKiAgIENJRF9GYWNlRGljdFJlYworICAgKiAgIENJRF9GYWNlRGljdAorICAgKiAgIENJRF9GYWNlSW5mb1JlYworICAgKiAgIENJRF9GYWNlSW5mbworICAgKgorICAgKiAgIEZUX0hhc19QU19HbHlwaF9OYW1lcworICAgKiAgIEZUX0dldF9QU19Gb250X0luZm8KKyAgICogICBGVF9HZXRfUFNfRm9udF9Qcml2YXRlCisgICAqICAgRlRfR2V0X1BTX0ZvbnRfVmFsdWUKKyAgICoKKyAgICogICBUMV9CbGVuZF9GbGFncworICAgKiAgIFQxX0VuY29kaW5nVHlwZQorICAgKiAgIFBTX0RpY3RfS2V5cworICAgKgorICAgKi8KIAogCiAgIC8qIE5vdGUgdGhhdCB3ZSBzZXBhcmF0ZSBmb250IGRhdGEgaW4gUFNfRm9udEluZm9SZWMgYW5kIFBTX1ByaXZhdGVSZWMgKi8KICAgLyogc3RydWN0dXJlcyBpbiBvcmRlciB0byBzdXBwb3J0IE11bHRpcGxlIE1hc3RlciBmb250cy4gICAgICAgICAgICAgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRm9udEluZm9SZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFR5cGV+MSBvciBUeXBlfjIgRm9udEluZm8gZGljdGlvbmFyeS4gICovCi0gIC8qICAgIE5vdGUgdGhhdCBmb3IgTXVsdGlwbGUgTWFzdGVyIGZvbnRzLCBlYWNoIGluc3RhbmNlIGhhcyBpdHMgb3duICAgICAqLwotICAvKiAgICBGb250SW5mbyBkaWN0aW9uYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFBTX0ZvbnRJbmZvUmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgVHlwZX4xIG9yIFR5cGV+MiBGb250SW5mbyBkaWN0aW9uYXJ5LgorICAgKiAgIE5vdGUgdGhhdCBmb3IgTXVsdGlwbGUgTWFzdGVyIGZvbnRzLCBlYWNoIGluc3RhbmNlIGhhcyBpdHMgb3duCisgICAqICAgRm9udEluZm8gZGljdGlvbmFyeS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQU19Gb250SW5mb1JlY18KICAgewogICAgIEZUX1N0cmluZyogIHZlcnNpb247CkBAIC0xMDEsNDAgKzEwMSw0MCBAQAogICB9IFBTX0ZvbnRJbmZvUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRm9udEluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBAUFNfRm9udEluZm9SZWMgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBQU19Gb250SW5mbworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBAUFNfRm9udEluZm9SZWMgc3RydWN0dXJlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgUFNfRm9udEluZm9SZWNfKiAgUFNfRm9udEluZm87CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9Gb250SW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byBAUFNfRm9udEluZm9SZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dCAgKi8KLSAgLyogICAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgICovCi0gIC8qICAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVDFfRm9udEluZm8KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIEBQU19Gb250SW5mb1JlYy4gIEl0IGlzIGRlcHJlY2F0ZWQgYnV0CisgICAqICAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YKKyAgICogICBGcmVlVHlwZS4KKyAgICovCiAgIHR5cGVkZWYgUFNfRm9udEluZm9SZWMgIFQxX0ZvbnRJbmZvOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfUHJpdmF0ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFR5cGV+MSBvciBUeXBlfjIgcHJpdmF0ZSBkaWN0aW9uYXJ5LiAgICovCi0gIC8qICAgIE5vdGUgdGhhdCBmb3IgTXVsdGlwbGUgTWFzdGVyIGZvbnRzLCBlYWNoIGluc3RhbmNlIGhhcyBpdHMgb3duICAgICAqLwotICAvKiAgICBQcml2YXRlIGRpY3Rpb25hcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFBTX1ByaXZhdGVSZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUeXBlfjEgb3IgVHlwZX4yIHByaXZhdGUgZGljdGlvbmFyeS4KKyAgICogICBOb3RlIHRoYXQgZm9yIE11bHRpcGxlIE1hc3RlciBmb250cywgZWFjaCBpbnN0YW5jZSBoYXMgaXRzIG93bgorICAgKiAgIFByaXZhdGUgZGljdGlvbmFyeS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQU19Qcml2YXRlUmVjXwogICB7CiAgICAgRlRfSW50ICAgICB1bmlxdWVfaWQ7CkBAIC0xNzYsNTYgKzE3Niw1NiBAQAogICB9IFBTX1ByaXZhdGVSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19Qcml2YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIEBQU19Qcml2YXRlUmVjIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFBTX1ByaXZhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgQFBTX1ByaXZhdGVSZWMgc3RydWN0dXJlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgUFNfUHJpdmF0ZVJlY18qICBQU19Qcml2YXRlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfUHJpdmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGlzIHR5cGUgaXMgZXF1aXZhbGVudCB0byBAUFNfUHJpdmF0ZVJlYy4gIEl0IGlzIGRlcHJlY2F0ZWQgYnV0ICAgICovCi0gIC8qICAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YgICAqLwotICAvKiAgIEZyZWVUeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFQxX1ByaXZhdGUKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgVGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gQFBTX1ByaXZhdGVSZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dAorICAgKiAga2VwdCB0byBtYWludGFpbiBzb3VyY2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHZhcmlvdXMgdmVyc2lvbnMgb2YKKyAgICogIEZyZWVUeXBlLgorICAgKi8KICAgdHlwZWRlZiBQU19Qcml2YXRlUmVjICBUMV9Qcml2YXRlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQmxlbmRfRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzZXQgb2YgZmxhZ3MgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gYSAgICAgICovCi0gIC8qICAgIGdpdmVuIGJsZW5kIGRpY3Rpb25hcnkgKGZvbnQgaW5mbyBvciBwcml2YXRlKS4gIFVzZWQgdG8gc3VwcG9ydCAgICAqLwotICAvKiAgICBNdWx0aXBsZSBNYXN0ZXJzIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9CTEVORF9VTkRFUkxJTkVfUE9TSVRJT04gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQkxFTkRfVU5ERVJMSU5FX1RISUNLTkVTUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0JMRU5EX0lUQUxJQ19BTkdMRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9CTEVORF9CTFVFX1ZBTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQkxFTkRfT1RIRVJfQkxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0JMRU5EX1NUQU5EQVJEX1dJRFRIIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9CTEVORF9TVEFOREFSRF9IRUlHSFQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQkxFTkRfU1RFTV9TTkFQX1dJRFRIUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0JMRU5EX1NURU1fU05BUF9IRUlHSFRTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9CTEVORF9CTFVFX1NDQUxFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQkxFTkRfQkxVRV9TSElGVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0JMRU5EX0ZBTUlMWV9CTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9CTEVORF9GQU1JTFlfT1RIRVJfQkxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfQkxFTkRfRk9SQ0VfQk9MRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgVDFfQmxlbmRfRmxhZ3MKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc2V0IG9mIGZsYWdzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggZmllbGRzIGFyZSBwcmVzZW50IGluIGEKKyAgICogICBnaXZlbiBibGVuZCBkaWN0aW9uYXJ5IChmb250IGluZm8gb3IgcHJpdmF0ZSkuICBVc2VkIHRvIHN1cHBvcnQKKyAgICogICBNdWx0aXBsZSBNYXN0ZXJzIGZvbnRzLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIFQxX0JMRU5EX1VOREVSTElORV9QT1NJVElPTiA6OgorICAgKiAgIFQxX0JMRU5EX1VOREVSTElORV9USElDS05FU1MgOjoKKyAgICogICBUMV9CTEVORF9JVEFMSUNfQU5HTEUgOjoKKyAgICogICBUMV9CTEVORF9CTFVFX1ZBTFVFUyA6OgorICAgKiAgIFQxX0JMRU5EX09USEVSX0JMVUVTIDo6CisgICAqICAgVDFfQkxFTkRfU1RBTkRBUkRfV0lEVEggOjoKKyAgICogICBUMV9CTEVORF9TVEFOREFSRF9IRUlHSFQgOjoKKyAgICogICBUMV9CTEVORF9TVEVNX1NOQVBfV0lEVEhTIDo6CisgICAqICAgVDFfQkxFTkRfU1RFTV9TTkFQX0hFSUdIVFMgOjoKKyAgICogICBUMV9CTEVORF9CTFVFX1NDQUxFIDo6CisgICAqICAgVDFfQkxFTkRfQkxVRV9TSElGVCA6OgorICAgKiAgIFQxX0JMRU5EX0ZBTUlMWV9CTFVFUyA6OgorICAgKiAgIFQxX0JMRU5EX0ZBTUlMWV9PVEhFUl9CTFVFUyA6OgorICAgKiAgIFQxX0JMRU5EX0ZPUkNFX0JPTEQgOjoKKyAgICovCiAgIHR5cGVkZWYgZW51bSAgVDFfQmxlbmRfRmxhZ3NfCiAgIHsKICAgICAvKiByZXF1aXJlZCBmaWVsZHMgaW4gYSBGb250SW5mbyBibGVuZCBkaWN0aW9uYXJ5ICovCkBAIC0zMzAsMTQgKzMzMCwyMyBAQAogICB0eXBlZGVmIFBTX0JsZW5kUmVjICBUMV9CbGVuZDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9GYWNlRGljdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gcmVwcmVzZW50IGRhdGEgaW4gYSBDSUQgdG9wLWxldmVsIGRpY3Rpb25hcnkuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgQ0lEX0ZhY2VEaWN0UmVjCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB1c2VkIHRvIHJlcHJlc2VudCBkYXRhIGluIGEgQ0lEIHRvcC1sZXZlbCBkaWN0aW9uYXJ5LiAgSW4KKyAgICogICBtb3N0IGNhc2VzLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBmb250J3MgYC9GREFycmF5JyBhcnJheS4gIFdpdGhpbiBhCisgICAqICAgQ0lEIGZvbnQgZmlsZSwgc3VjaCAoaW50ZXJuYWwpIHN1YmZvbnQgZGljdGlvbmFyaWVzIGFyZSBlbmNsb3NlZCBieQorICAgKiAgIGAlQURPQmVnaW5Gb250RGljdCcgYW5kIGAlQURPRW5kRm9udERpY3QnIGNvbW1lbnRzLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBgQ0lEX0ZhY2VEaWN0UmVjJyBtaXNzZXMgYSBmaWVsZCBmb3IgdGhlIGAvRm9udE5hbWUnCisgICAqICAga2V5d29yZCwgc3BlY2lmeWluZyB0aGUgc3ViZm9udCdzIG5hbWUgKHRoZSB0b3AtbGV2ZWwgZm9udCBuYW1lIGlzCisgICAqICAgZ2l2ZW4gYnkgdGhlIGAvQ0lERm9udE5hbWUnIGtleXdvcmQpLiAgVGhpcyBpcyBhbiBvdmVyc2lnaHQsIGJ1dCBpdAorICAgKiAgIGRvZXNuJ3QgbGltaXQgdGhlIGBjaWQnIGZvbnQgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIEZyZWVUeXBlCisgICAqICAgbmVpdGhlciBuZWVkcyB0aGlzIGVudHJ5IG5vciBnaXZlcyBhY2Nlc3MgdG8gQ0lEIHN1YmZvbnRzLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIENJRF9GYWNlRGljdFJlY18KICAgewogICAgIFBTX1ByaXZhdGVSZWMgIHByaXZhdGVfZGljdDsKQEAgLTM0NSw4ICszNTQsOCBAQAogICAgIEZUX1VJbnQgICAgICAgIGxlbl9idWlsZGNoYXI7CiAgICAgRlRfRml4ZWQgICAgICAgZm9yY2Vib2xkX3RocmVzaG9sZDsKICAgICBGVF9Qb3MgICAgICAgICBzdHJva2Vfd2lkdGg7Ci0gICAgRlRfRml4ZWQgICAgICAgZXhwYW5zaW9uX2ZhY3RvcjsKLQorICAgIEZUX0ZpeGVkICAgICAgIGV4cGFuc2lvbl9mYWN0b3I7ICAgLyogdGhpcyBpcyBhIGR1cGxpY2F0ZSBvZiAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGBwcml2YXRlX2RpY3QtPmV4cGFuc2lvbl9mYWN0b3InICovCiAgICAgRlRfQnl0ZSAgICAgICAgcGFpbnRfdHlwZTsKICAgICBGVF9CeXRlICAgICAgICBmb250X3R5cGU7CiAgICAgRlRfTWF0cml4ICAgICAgZm9udF9tYXRyaXg7CkBAIC0zNTksMzggKzM2OCwzOCBAQAogICB9IENJRF9GYWNlRGljdFJlYzsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9GYWNlRGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgQENJRF9GYWNlRGljdFJlYyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgQ0lEX0ZhY2VEaWN0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIEBDSURfRmFjZURpY3RSZWMgc3RydWN0dXJlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX0ZhY2VEaWN0UmVjXyogIENJRF9GYWNlRGljdDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9Gb250RGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIEBDSURfRmFjZURpY3RSZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dCAqLwotICAvKiAgICBrZXB0IHRvIG1haW50YWluIHNvdXJjZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiAgKi8KLSAgLyogICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBDSURfRm9udERpY3QKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIEBDSURfRmFjZURpY3RSZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dAorICAgKiAgIGtlcHQgdG8gbWFpbnRhaW4gc291cmNlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mCisgICAqICAgRnJlZVR5cGUuCisgICAqLwogICB0eXBlZGVmIENJRF9GYWNlRGljdFJlYyAgQ0lEX0ZvbnREaWN0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lEX0ZhY2VJbmZvUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byByZXByZXNlbnQgQ0lEIEZhY2UgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBDSURfRmFjZUluZm9SZWMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gcmVwcmVzZW50IENJRCBGYWNlIGluZm9ybWF0aW9uLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIENJRF9GYWNlSW5mb1JlY18KICAgewogICAgIEZUX1N0cmluZyogICAgICBjaWRfZm9udF9uYW1lOwpAQCAtNDIxLDI3ICs0MzAsMjcgQEAKICAgfSBDSURfRmFjZUluZm9SZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDSURfRmFjZUluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIEBDSURfRmFjZUluZm9SZWMgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIENJRF9GYWNlSW5mbworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBAQ0lEX0ZhY2VJbmZvUmVjIHN0cnVjdHVyZS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IENJRF9GYWNlSW5mb1JlY18qICBDSURfRmFjZUluZm87CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDSURfSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIEBDSURfRmFjZUluZm9SZWMuICBJdCBpcyBkZXByZWNhdGVkIGJ1dCAgKi8KLSAgLyogICBrZXB0IHRvIG1haW50YWluIHNvdXJjZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiAgICovCi0gIC8qICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgQ0lEX0luZm8KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgVGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gQENJRF9GYWNlSW5mb1JlYy4gIEl0IGlzIGRlcHJlY2F0ZWQgYnV0CisgICAqICBrZXB0IHRvIG1haW50YWluIHNvdXJjZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZgorICAgKiAgRnJlZVR5cGUuCisgICAqLwogICB0eXBlZGVmIENJRF9GYWNlSW5mb1JlYyAgQ0lEX0luZm87CiAKIApAQCAtNDYxLDcgKzQ3MCw3IEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgotICAgKiAgICAgICBmYWNlIGhhbmRsZQorICAgKiAgICAgIGZhY2UgaGFuZGxlCiAgICAqCiAgICAqIEByZXR1cm46CiAgICAqICAgIEJvb2xlYW4uICBUcnVlIGlmIGdseXBoIG5hbWVzIGFyZSByZWxpYWJsZS4KQEAgLTQ4MiwxMSArNDkxLDExIEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgotICAgKiAgICAgICBQb3N0U2NyaXB0IGZhY2UgaGFuZGxlLgorICAgKiAgICAgIFBvc3RTY3JpcHQgZmFjZSBoYW5kbGUuCiAgICAqCiAgICAqIEBvdXRwdXQ6CiAgICAqICAgIGFmb250X2luZm8gOjoKLSAgICogICAgICAgT3V0cHV0IGZvbnQgaW5mbyBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAgICogICAgICBPdXRwdXQgZm9udCBpbmZvIHN0cnVjdHVyZSBwb2ludGVyLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgpAQCAtNTE2LDExICs1MjUsMTEgQEAKICAgICoKICAgICogQGlucHV0OgogICAgKiAgICBmYWNlIDo6Ci0gICAqICAgICAgIFBvc3RTY3JpcHQgZmFjZSBoYW5kbGUuCisgICAqICAgICAgUG9zdFNjcmlwdCBmYWNlIGhhbmRsZS4KICAgICoKICAgICogQG91dHB1dDoKICAgICogICAgYWZvbnRfcHJpdmF0ZSA6OgotICAgKiAgICAgICBPdXRwdXQgcHJpdmF0ZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBwb2ludGVyLgorICAgKiAgICAgIE91dHB1dCBwcml2YXRlIGRpY3Rpb25hcnkgc3RydWN0dXJlIHBvaW50ZXIuCiAgICAqCiAgICAqIEByZXR1cm46CiAgICAqICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC01MzgsMjUgKzU0NywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBQU19Qcml2YXRlICBhZm9udF9wcml2YXRlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9FbmNvZGluZ1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBlbnVtZXJhdGlvbiBkZXNjcmliaW5nIHRoZSBgRW5jb2RpbmcnIGVudHJ5IGluIGEgVHlwZSAxICAgICAgICAgKi8KLSAgLyogICAgZGljdGlvbmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfRU5DT0RJTkdfVFlQRV9OT05FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0VOQ09ESU5HX1RZUEVfQVJSQVkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9FTkNPRElOR19UWVBFX1NUQU5EQVJEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfRU5DT0RJTkdfVFlQRV9JU09MQVRJTjEgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0VOQ09ESU5HX1RZUEVfRVhQRVJUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIDIuNC44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIFQxX0VuY29kaW5nVHlwZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQW4gZW51bWVyYXRpb24gZGVzY3JpYmluZyB0aGUgYEVuY29kaW5nJyBlbnRyeSBpbiBhIFR5cGUgMQorICAgKiAgIGRpY3Rpb25hcnkuCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgVDFfRU5DT0RJTkdfVFlQRV9OT05FIDo6CisgICAqICAgVDFfRU5DT0RJTkdfVFlQRV9BUlJBWSA6OgorICAgKiAgIFQxX0VOQ09ESU5HX1RZUEVfU1RBTkRBUkQgOjoKKyAgICogICBUMV9FTkNPRElOR19UWVBFX0lTT0xBVElOMSA6OgorICAgKiAgIFQxX0VOQ09ESU5HX1RZUEVfRVhQRVJUIDo6CisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjQuOAorICAgKi8KICAgdHlwZWRlZiBlbnVtICBUMV9FbmNvZGluZ1R5cGVfCiAgIHsKICAgICBUMV9FTkNPRElOR19UWVBFX05PTkUgPSAwLApAQCAtNTY4LDY2ICs1NzcsNjYgQEAKICAgfSBUMV9FbmNvZGluZ1R5cGU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19EaWN0X0tleXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBlbnVtZXJhdGlvbiB1c2VkIGluIGNhbGxzIHRvIEBGVF9HZXRfUFNfRm9udF9WYWx1ZSB0byBpZGVudGlmeSAgKi8KLSAgLyogICAgdGhlIFR5cGV+MSBkaWN0aW9uYXJ5IGVudHJ5IHRvIHJldHJpZXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9GT05UX1RZUEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfRk9OVF9NQVRSSVggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0ZPTlRfQkJPWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9QQUlOVF9UWVBFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfRk9OVF9OQU1FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX1VOSVFVRV9JRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9OVU1fQ0hBUl9TVFJJTkdTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfQ0hBUl9TVFJJTkdfS0VZIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0NIQVJfU1RSSU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9FTkNPRElOR19UWVBFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfRU5DT0RJTkdfRU5UUlkgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX05VTV9TVUJSUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9TVUJSIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfU1REX0hXIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX1NURF9WVyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9OVU1fQkxVRV9WQUxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfQkxVRV9WQUxVRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0JMVUVfRlVaWiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9OVU1fT1RIRVJfQkxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfT1RIRVJfQkxVRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX05VTV9GQU1JTFlfQkxVRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9GQU1JTFlfQkxVRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfTlVNX0ZBTUlMWV9PVEhFUl9CTFVFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0ZBTUlMWV9PVEhFUl9CTFVFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9CTFVFX1NDQUxFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfQkxVRV9TSElGVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX05VTV9TVEVNX1NOQVBfSCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9TVEVNX1NOQVBfSCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfTlVNX1NURU1fU05BUF9WIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX1NURU1fU05BUF9WIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9GT1JDRV9CT0xEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfUk5EX1NURU1fVVAgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX01JTl9GRUFUVVJFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9MRU5fSVYgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfUEFTU1dPUkQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0xBTkdVQUdFX0dST1VQIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9WRVJTSU9OIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfTk9USUNFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0ZVTExfTkFNRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9GQU1JTFlfTkFNRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfV0VJR0hUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0lTX0ZJWEVEX1BJVENIIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9VTkRFUkxJTkVfUE9TSVRJT04gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0RJQ1RfVU5ERVJMSU5FX1RISUNLTkVTUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQU19ESUNUX0ZTX1RZUEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNfRElDVF9JVEFMSUNfQU5HTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMi40LjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgUFNfRGljdF9LZXlzCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBlbnVtZXJhdGlvbiB1c2VkIGluIGNhbGxzIHRvIEBGVF9HZXRfUFNfRm9udF9WYWx1ZSB0byBpZGVudGlmeQorICAgKiAgIHRoZSBUeXBlfjEgZGljdGlvbmFyeSBlbnRyeSB0byByZXRyaWV2ZS4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBQU19ESUNUX0ZPTlRfVFlQRSA6OgorICAgKiAgIFBTX0RJQ1RfRk9OVF9NQVRSSVggOjoKKyAgICogICBQU19ESUNUX0ZPTlRfQkJPWCA6OgorICAgKiAgIFBTX0RJQ1RfUEFJTlRfVFlQRSA6OgorICAgKiAgIFBTX0RJQ1RfRk9OVF9OQU1FIDo6CisgICAqICAgUFNfRElDVF9VTklRVUVfSUQgOjoKKyAgICogICBQU19ESUNUX05VTV9DSEFSX1NUUklOR1MgOjoKKyAgICogICBQU19ESUNUX0NIQVJfU1RSSU5HX0tFWSA6OgorICAgKiAgIFBTX0RJQ1RfQ0hBUl9TVFJJTkcgOjoKKyAgICogICBQU19ESUNUX0VOQ09ESU5HX1RZUEUgOjoKKyAgICogICBQU19ESUNUX0VOQ09ESU5HX0VOVFJZIDo6CisgICAqICAgUFNfRElDVF9OVU1fU1VCUlMgOjoKKyAgICogICBQU19ESUNUX1NVQlIgOjoKKyAgICogICBQU19ESUNUX1NURF9IVyA6OgorICAgKiAgIFBTX0RJQ1RfU1REX1ZXIDo6CisgICAqICAgUFNfRElDVF9OVU1fQkxVRV9WQUxVRVMgOjoKKyAgICogICBQU19ESUNUX0JMVUVfVkFMVUUgOjoKKyAgICogICBQU19ESUNUX0JMVUVfRlVaWiA6OgorICAgKiAgIFBTX0RJQ1RfTlVNX09USEVSX0JMVUVTIDo6CisgICAqICAgUFNfRElDVF9PVEhFUl9CTFVFIDo6CisgICAqICAgUFNfRElDVF9OVU1fRkFNSUxZX0JMVUVTIDo6CisgICAqICAgUFNfRElDVF9GQU1JTFlfQkxVRSA6OgorICAgKiAgIFBTX0RJQ1RfTlVNX0ZBTUlMWV9PVEhFUl9CTFVFUyA6OgorICAgKiAgIFBTX0RJQ1RfRkFNSUxZX09USEVSX0JMVUUgOjoKKyAgICogICBQU19ESUNUX0JMVUVfU0NBTEUgOjoKKyAgICogICBQU19ESUNUX0JMVUVfU0hJRlQgOjoKKyAgICogICBQU19ESUNUX05VTV9TVEVNX1NOQVBfSCA6OgorICAgKiAgIFBTX0RJQ1RfU1RFTV9TTkFQX0ggOjoKKyAgICogICBQU19ESUNUX05VTV9TVEVNX1NOQVBfViA6OgorICAgKiAgIFBTX0RJQ1RfU1RFTV9TTkFQX1YgOjoKKyAgICogICBQU19ESUNUX0ZPUkNFX0JPTEQgOjoKKyAgICogICBQU19ESUNUX1JORF9TVEVNX1VQIDo6CisgICAqICAgUFNfRElDVF9NSU5fRkVBVFVSRSA6OgorICAgKiAgIFBTX0RJQ1RfTEVOX0lWIDo6CisgICAqICAgUFNfRElDVF9QQVNTV09SRCA6OgorICAgKiAgIFBTX0RJQ1RfTEFOR1VBR0VfR1JPVVAgOjoKKyAgICogICBQU19ESUNUX1ZFUlNJT04gOjoKKyAgICogICBQU19ESUNUX05PVElDRSA6OgorICAgKiAgIFBTX0RJQ1RfRlVMTF9OQU1FIDo6CisgICAqICAgUFNfRElDVF9GQU1JTFlfTkFNRSA6OgorICAgKiAgIFBTX0RJQ1RfV0VJR0hUIDo6CisgICAqICAgUFNfRElDVF9JU19GSVhFRF9QSVRDSCA6OgorICAgKiAgIFBTX0RJQ1RfVU5ERVJMSU5FX1BPU0lUSU9OIDo6CisgICAqICAgUFNfRElDVF9VTkRFUkxJTkVfVEhJQ0tORVNTIDo6CisgICAqICAgUFNfRElDVF9GU19UWVBFIDo6CisgICAqICAgUFNfRElDVF9JVEFMSUNfQU5HTEUgOjoKKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC44CisgICAqLwogICB0eXBlZGVmIGVudW0gIFBTX0RpY3RfS2V5c18KICAgewogICAgIC8qIGNvbnZlbnRpb25hbGx5IGluIHRoZSBmb250IGRpY3Rpb25hcnkgKi8KQEAgLTY5NywyMyArNzA2LDIzIEBACiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgotICAgKiAgICAgICBQb3N0U2NyaXB0IGZhY2UgaGFuZGxlLgorICAgKiAgICAgIFBvc3RTY3JpcHQgZmFjZSBoYW5kbGUuCiAgICAqCiAgICAqICAgIGtleSA6OgotICAgKiAgICAgICBBbiBlbnVtZXJhdGlvbiB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGRpY3Rpb25hcnkga2V5IHRvIHJldHJpZXZlLgorICAgKiAgICAgIEFuIGVudW1lcmF0aW9uIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZGljdGlvbmFyeSBrZXkgdG8gcmV0cmlldmUuCiAgICAqCiAgICAqICAgIGlkeCA6OgotICAgKiAgICAgICBGb3IgYXJyYXkgdmFsdWVzLCB0aGlzIHNwZWNpZmllcyB0aGUgaW5kZXggdG8gYmUgcmV0dXJuZWQuCisgICAqICAgICAgRm9yIGFycmF5IHZhbHVlcywgdGhpcyBzcGVjaWZpZXMgdGhlIGluZGV4IHRvIGJlIHJldHVybmVkLgogICAgKgogICAgKiAgICB2YWx1ZSA6OgotICAgKiAgICAgICBBIHBvaW50ZXIgdG8gbWVtb3J5IGludG8gd2hpY2ggdG8gd3JpdGUgdGhlIHZhbHVlLgorICAgKiAgICAgIEEgcG9pbnRlciB0byBtZW1vcnkgaW50byB3aGljaCB0byB3cml0ZSB0aGUgdmFsdWUuCiAgICAqCiAgICAqICAgIHZhbGVuX2xlbiA6OgotICAgKiAgICAgICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBtZW1vcnkgc3VwcGxpZWQgZm9yIHRoZSB2YWx1ZS4KKyAgICogICAgICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBtZW1vcnkgc3VwcGxpZWQgZm9yIHRoZSB2YWx1ZS4KICAgICoKICAgICogQG91dHB1dDoKICAgICogICAgdmFsdWUgOjoKLSAgICogICAgICAgVGhlIHZhbHVlIG1hdGNoaW5nIHRoZSBhYm92ZSBrZXksIGlmIGl0IGV4aXN0cy4KKyAgICogICAgICBUaGUgdmFsdWUgbWF0Y2hpbmcgdGhlIGFib3ZlIGtleSwgaWYgaXQgZXhpc3RzLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSAoaW4gYnl0ZXMpIHJlcXVpcmVkIHRvIGhvbGQgdGhlIHJlcXVlc3RlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oIGIvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCmluZGV4IDg2MDUxODMuLmY3MTUxNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0bmFtZWlkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBuYW1lIElEIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0bmFtZWlkLmgKKyAqCisgKiAgIFRydWVUeXBlIG5hbWUgSUQgZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFROQU1FSURfSF8KQEAgLTI2LDE5ICsyNiwxOSBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0cnVldHlwZV90YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB0cnVldHlwZV90YWJsZXMKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIGBwbGF0Zm9ybScgaWRlbnRpZmllciBjb2RlIGluIHRoZSBuYW1lICAgICAgICAqLwotICAvKiByZWNvcmRzIG9mIGFuIFNGTlQgYG5hbWUnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUG9zc2libGUgdmFsdWVzIGZvciB0aGUgYHBsYXRmb3JtJyBpZGVudGlmaWVyIGNvZGUgaW4gdGhlIG5hbWUKKyAgICogcmVjb3JkcyBvZiBhbiBTRk5UIGBuYW1lJyB0YWJsZS4KKyAgICoKKyAgICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgKgogICAgKiAgIFRoZSBjYW5vbmljYWwgc291cmNlIGZvciBNaWNyb3NvZnQncyBJRHMgaXMKICAgICoKLSAgICogICAgIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vZ2xvYmFsZGV2L3JlZmVyZW5jZS9sY2lkLWFsbC5tc3B4ICwKKyAgICogICAgIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3MvZGVza3RvcC9JbnRsL2xhbmd1YWdlLWlkZW50aWZpZXItY29uc3RhbnRzLWFuZC1zdHJpbmdzICwKICAgICoKICAgICogICBob3dldmVyLCB3ZSBvbmx5IHByb3ZpZGUgbWFjcm9zIGZvciBsYW5ndWFnZSBpZGVudGlmaWVycyBwcmVzZW50IGluCiAgICAqICAgdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb246IE1pY3Jvc29mdCBoYXMgYWJhbmRvbmVkIHRoZSBjb25jZXB0IG9mCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKaW5kZXggY2U2YTYxNy4uOGVjYzhlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHR0YWJsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdGFibGVzIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICovCi0vKiAgICAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0dGFibGVzLmgKKyAqCisgKiAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdGFibGVzIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UKKyAqICAgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRUQUJMRVNfSF8KQEAgLTMzLDUzICszMyw1MyBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0cnVldHlwZV90YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUcnVlVHlwZSBUYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUcnVlVHlwZSBzcGVjaWZpYyB0YWJsZSB0eXBlcyBhbmQgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgb2Ygc29tZSBiYXNpYyB0YWJsZXMgc3BlY2lmaWMgdG8gKi8KLSAgLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGFzIHdlbGwgYXMgc29tZSByb3V0aW5lcyB1c2VkIHRvIGFjY2VzcyBhbmQgICovCi0gIC8qICAgIHByb2Nlc3MgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Ib3JpSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfVmVydEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX09TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qb3N0c2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfUENMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX01heFByb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2ZudF9UYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9TZm50X1RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9Mb2FkX1NmbnRfVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU2ZudF9UYWJsZV9JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0NNYXBfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgdHJ1ZXR5cGVfdGFibGVzCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUcnVlVHlwZSBUYWJsZXMKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlIHR5cGVzIGFuZCBmdW5jdGlvbnMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgb2Ygc29tZSBiYXNpYyB0YWJsZXMgc3BlY2lmaWMgdG8KKyAgICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgYXMgd2VsbCBhcyBzb21lIHJvdXRpbmVzIHVzZWQgdG8gYWNjZXNzIGFuZAorICAgKiAgIHByb2Nlc3MgdGhlbS4KKyAgICoKKyAgICogQG9yZGVyOgorICAgKiAgIFRUX0hlYWRlcgorICAgKiAgIFRUX0hvcmlIZWFkZXIKKyAgICogICBUVF9WZXJ0SGVhZGVyCisgICAqICAgVFRfT1MyCisgICAqICAgVFRfUG9zdHNjcmlwdAorICAgKiAgIFRUX1BDTFQKKyAgICogICBUVF9NYXhQcm9maWxlCisgICAqCisgICAqICAgRlRfU2ZudF9UYWcKKyAgICogICBGVF9HZXRfU2ZudF9UYWJsZQorICAgKiAgIEZUX0xvYWRfU2ZudF9UYWJsZQorICAgKiAgIEZUX1NmbnRfVGFibGVfSW5mbworICAgKgorICAgKiAgIEZUX0dldF9DTWFwX0xhbmd1YWdlX0lECisgICAqICAgRlRfR2V0X0NNYXBfRm9ybWF0CisgICAqCisgICAqICAgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIGEgVHJ1ZVR5cGUgZm9udCBoZWFkZXIgdGFibGUuICBBbGwgZmllbGRzICAgICAqLwotICAvKiAgICBmb2xsb3cgdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX0hlYWRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBmb250IGhlYWRlciB0YWJsZS4gIEFsbCBmaWVsZHMKKyAgICogICBmb2xsb3cgdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfSGVhZGVyXwogICB7CiAgICAgRlRfRml4ZWQgICBUYWJsZV9WZXJzaW9uOwpAQCAtMTA5LDkzICsxMDksMTA5IEBACiAgIH0gVFRfSGVhZGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfSG9yaUhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBob3Jpem9udGFsIGhlYWRlciwgdGhlIGBoaGVhJyAgICAgICovCi0gIC8qICAgIHRhYmxlLCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIGhvcml6b250YWwgbWV0cmljcyB0YWJsZSwgICAgICAqLwotICAvKiAgICBgaG10eCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBWZXJzaW9uICAgICAgICAgICAgICAgIDo6IFRoZSB0YWJsZSB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFzY2VuZGVyICAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBhc2NlbmRlciwgaS5lLiwgdGhlIGRpc3RhbmNlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCBvZiBhbGwgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBwb2ludHMgZm91bmQgaW4gdGhlIGZvbnQuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgaW52YWxpZCBpbiBtYW55IGZvbnRzLCBhcyAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyB1c3VhbGx5IHNldCBieSB0aGUgZm9udCBkZXNpZ25lciwgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgQVNDSUkpLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0FzY2VuZGVyJyBmaWVsZCAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBgT1MvMicgdGFibGUgaW5zdGVhZCBpZiB5b3Ugd2FudCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXNjZW5kZXIgICAgICAgICAgICAgIDo6IFRoZSBmb250J3MgZGVzY2VuZGVyLCBpLmUuLCB0aGUgZGlzdGFuY2UgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgYm90dG9tLW1vc3Qgb2YgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGdseXBoIHBvaW50cyBmb3VuZCBpbiB0aGUgZm9udC4gIEl0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5lZ2F0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Z0ZW4gcmVmbGVjdHMgb25seSBhIHBvcnRpb24gb2YgdGhlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZSBBU0NJSSkuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGUgYHNUeXBvRGVzY2VuZGVyJyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmIHlvdSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgdGhlIGNvcnJlY3Qgb25lLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExpbmVfR2FwICAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBsaW5lIGdhcCwgaS5lLiwgdGhlIGRpc3RhbmNlICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCB0byB0aGUgYXNjZW5kZXIgYW5kIGRlc2NlbmRlciB0byAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgdGhlIEJUQiwgaS5lLiwgdGhlICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmUtdG8tYmFzZWxpbmUgZGlzdGFuY2UgZm9yIHRoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFkdmFuY2VfV2lkdGhfTWF4ICAgICAgOjogVGhpcyBmaWVsZCBpcyB0aGUgbWF4aW11bSBvZiBhbGwgYWR2YW5jZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocyBmb3VuZCBpbiB0aGUgZm9udC4gIEl0IGNhbiBiZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGNvbXB1dGUgdGhlIG1heGltdW0gd2lkdGggb2YgYW4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJiaXRyYXJ5IHN0cmluZyBvZiB0ZXh0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWluX0xlZnRfU2lkZV9CZWFyaW5nICA6OiBUaGUgbWluaW11bSBsZWZ0IHNpZGUgYmVhcmluZyBvZiBhbGwgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWluX1JpZ2h0X1NpZGVfQmVhcmluZyA6OiBUaGUgbWluaW11bSByaWdodCBzaWRlIGJlYXJpbmcgb2YgYWxsICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeE1heF9FeHRlbnQgICAgICAgICAgICA6OiBUaGUgbWF4aW11bSBob3Jpem9udGFsIGV4dGVudCAoaS5lLiwgdGhlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHdpZHRoJyBvZiBhIGdseXBoJ3MgYm91bmRpbmcgYm94KSBmb3IgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhcmV0X1Nsb3BlX1Jpc2UgICAgICAgOjogVGhlIHJpc2UgY29lZmZpY2llbnQgb2YgdGhlIGN1cnNvcidzICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3BlIG9mIHRoZSBjdXJzb3IgKHNsb3BlPXJpc2UvcnVuKS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhcmV0X1Nsb3BlX1J1biAgICAgICAgOjogVGhlIHJ1biBjb2VmZmljaWVudCBvZiB0aGUgY3Vyc29yJ3MgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3BlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhcmV0X09mZnNldCAgICAgICAgICAgOjogVGhlIGN1cnNvcidzIG9mZnNldCBmb3Igc2xhbnRlZCBmb250cy4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICA6OiA4fnJlc2VydmVkIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZXRyaWNfRGF0YV9Gb3JtYXQgICAgIDo6IEFsd2F5c34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bWJlcl9PZl9ITWV0cmljcyAgICAgOjogTnVtYmVyIG9mIEhNZXRyaWNzIGVudHJpZXMgaW4gdGhlIGBobXR4JyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlIC0tIHRoaXMgdmFsdWUgY2FuIGJlIHNtYWxsZXIgdGhhbiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb25nX21ldHJpY3MgICAgICAgICAgIDo6IEEgcG9pbnRlciBpbnRvIHRoZSBgaG10eCcgdGFibGUuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNob3J0X21ldHJpY3MgICAgICAgICAgOjogQSBwb2ludGVyIGludG8gdGhlIGBobXR4JyB0YWJsZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZvciBhbiBPcGVuVHlwZSB2YXJpYXRpb24gZm9udCwgdGhlIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcyAqLwotICAvKiAgICBjYW4gY2hhbmdlIGFmdGVyIGEgY2FsbCB0byBARlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMgKGFuZCAgICAgKi8KLSAgLyogICAgZnJpZW5kcykgaWYgdGhlIGZvbnQgY29udGFpbnMgYW4gYE1WQVInIHRhYmxlOiBgY2FyZXRfU2xvcGVfUmlzZScsICovCi0gIC8qICAgIGBjYXJldF9TbG9wZV9SdW4nLCBhbmQgYGNhcmV0X09mZnNldCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVFRfSG9yaUhlYWRlcgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBob3Jpem9udGFsIGhlYWRlciwgdGhlIGBoaGVhJworICAgKiAgIHRhYmxlLCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIGhvcml6b250YWwgbWV0cmljcyB0YWJsZSwKKyAgICogICBgaG10eCcuCisgICAqCisgICAqIEBmaWVsZHM6CisgICAqICAgVmVyc2lvbiA6OgorICAgKiAgICAgVGhlIHRhYmxlIHZlcnNpb24uCisgICAqCisgICAqICAgQXNjZW5kZXIgOjoKKyAgICogICAgIFRoZSBmb250J3MgYXNjZW5kZXIsIGkuZS4sIHRoZSBkaXN0YW5jZQorICAgKiAgICAgZnJvbSB0aGUgYmFzZWxpbmUgdG8gdGhlIHRvcC1tb3N0IG9mIGFsbAorICAgKiAgICAgZ2x5cGggcG9pbnRzIGZvdW5kIGluIHRoZSBmb250LgorICAgKgorICAgKiAgICAgVGhpcyB2YWx1ZSBpcyBpbnZhbGlkIGluIG1hbnkgZm9udHMsIGFzCisgICAqICAgICBpdCBpcyB1c3VhbGx5IHNldCBieSB0aGUgZm9udCBkZXNpZ25lciwKKyAgICogICAgIGFuZCBvZnRlbiByZWZsZWN0cyBvbmx5IGEgcG9ydGlvbiBvZiB0aGUKKyAgICogICAgIGdseXBocyBmb3VuZCBpbiB0aGUgZm9udCAobWF5YmUgQVNDSUkpLgorICAgKgorICAgKiAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0FzY2VuZGVyJyBmaWVsZAorICAgKiAgICAgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmIHlvdSB3YW50CisgICAqICAgICB0aGUgY29ycmVjdCBvbmUuCisgICAqCisgICAqICAgRGVzY2VuZGVyIDo6CisgICAqICAgICBUaGUgZm9udCdzIGRlc2NlbmRlciwgaS5lLiwgdGhlIGRpc3RhbmNlCisgICAqICAgICBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgYm90dG9tLW1vc3Qgb2YKKyAgICogICAgIGFsbCBnbHlwaCBwb2ludHMgZm91bmQgaW4gdGhlIGZvbnQuICBJdAorICAgKiAgICAgaXMgbmVnYXRpdmUuCisgICAqCisgICAqICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMKKyAgICogICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLAorICAgKiAgICAgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mIHRoZQorICAgKiAgICAgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZSBBU0NJSSkuCisgICAqCisgICAqICAgICBZb3Ugc2hvdWxkIHVzZSB0aGUgYHNUeXBvRGVzY2VuZGVyJworICAgKiAgICAgZmllbGQgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmIHlvdQorICAgKiAgICAgd2FudCB0aGUgY29ycmVjdCBvbmUuCisgICAqCisgICAqICAgTGluZV9HYXAgOjoKKyAgICogICAgIFRoZSBmb250J3MgbGluZSBnYXAsIGkuZS4sIHRoZSBkaXN0YW5jZQorICAgKiAgICAgdG8gYWRkIHRvIHRoZSBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHRvCisgICAqICAgICBnZXQgdGhlIEJUQiwgaS5lLiwgdGhlCisgICAqICAgICBiYXNlbGluZS10by1iYXNlbGluZSBkaXN0YW5jZSBmb3IgdGhlCisgICAqICAgICBmb250LgorICAgKgorICAgKiAgIGFkdmFuY2VfV2lkdGhfTWF4IDo6CisgICAqICAgICBUaGlzIGZpZWxkIGlzIHRoZSBtYXhpbXVtIG9mIGFsbCBhZHZhbmNlCisgICAqICAgICB3aWR0aHMgZm91bmQgaW4gdGhlIGZvbnQuICBJdCBjYW4gYmUKKyAgICogICAgIHVzZWQgdG8gY29tcHV0ZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbgorICAgKiAgICAgYXJiaXRyYXJ5IHN0cmluZyBvZiB0ZXh0LgorICAgKgorICAgKiAgIG1pbl9MZWZ0X1NpZGVfQmVhcmluZyA6OgorICAgKiAgICAgVGhlIG1pbmltdW0gbGVmdCBzaWRlIGJlYXJpbmcgb2YgYWxsCisgICAqICAgICBnbHlwaHMgd2l0aGluIHRoZSBmb250LgorICAgKgorICAgKiAgIG1pbl9SaWdodF9TaWRlX0JlYXJpbmcgOjoKKyAgICogICAgIFRoZSBtaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZyBvZiBhbGwKKyAgICogICAgIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuCisgICAqCisgICAqICAgeE1heF9FeHRlbnQgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIGhvcml6b250YWwgZXh0ZW50IChpLmUuLCB0aGUKKyAgICogICAgIGB3aWR0aCcgb2YgYSBnbHlwaCdzIGJvdW5kaW5nIGJveCkgZm9yCisgICAqICAgICBhbGwgZ2x5cGhzIGluIHRoZSBmb250LgorICAgKgorICAgKiAgIGNhcmV0X1Nsb3BlX1Jpc2UgOjoKKyAgICogICAgIFRoZSByaXNlIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncworICAgKiAgICAgc2xvcGUgb2YgdGhlIGN1cnNvciAoc2xvcGU9cmlzZS9ydW4pLgorICAgKgorICAgKiAgIGNhcmV0X1Nsb3BlX1J1biA6OgorICAgKiAgICAgVGhlIHJ1biBjb2VmZmljaWVudCBvZiB0aGUgY3Vyc29yJ3MKKyAgICogICAgIHNsb3BlLgorICAgKgorICAgKiAgIGNhcmV0X09mZnNldCA6OgorICAgKiAgICAgVGhlIGN1cnNvcidzIG9mZnNldCBmb3Igc2xhbnRlZCBmb250cy4KKyAgICoKKyAgICogICBSZXNlcnZlZCA6OgorICAgKiAgICAgOH5yZXNlcnZlZCBieXRlcy4KKyAgICoKKyAgICogICBtZXRyaWNfRGF0YV9Gb3JtYXQgOjoKKyAgICogICAgIEFsd2F5c34wLgorICAgKgorICAgKiAgIG51bWJlcl9PZl9ITWV0cmljcyA6OgorICAgKiAgICAgTnVtYmVyIG9mIEhNZXRyaWNzIGVudHJpZXMgaW4gdGhlIGBobXR4JworICAgKiAgICAgdGFibGUgLS0gdGhpcyB2YWx1ZSBjYW4gYmUgc21hbGxlciB0aGFuCisgICAqICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udC4KKyAgICoKKyAgICogICBsb25nX21ldHJpY3MgOjoKKyAgICogICAgIEEgcG9pbnRlciBpbnRvIHRoZSBgaG10eCcgdGFibGUuCisgICAqCisgICAqICAgc2hvcnRfbWV0cmljcyA6OgorICAgKiAgICAgQSBwb2ludGVyIGludG8gdGhlIGBobXR4JyB0YWJsZS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRm9yIGFuIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250LCB0aGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzCisgICAqICAgY2FuIGNoYW5nZSBhZnRlciBhIGNhbGwgdG8gQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIChhbmQKKyAgICogICBmcmllbmRzKSBpZiB0aGUgZm9udCBjb250YWlucyBhbiBgTVZBUicgdGFibGU6IGBjYXJldF9TbG9wZV9SaXNlJywKKyAgICogICBgY2FyZXRfU2xvcGVfUnVuJywgYW5kIGBjYXJldF9PZmZzZXQnLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0hvcmlIZWFkZXJfCiAgIHsKICAgICBGVF9GaXhlZCAgIFZlcnNpb247CkBAIC0yMjcsOTcgKzI0MywxMTMgQEAKICAgfSBUVF9Ib3JpSGVhZGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfVmVydEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBtb2RlbCBhIFRydWVUeXBlIHZlcnRpY2FsIGhlYWRlciwgdGhlIGB2aGVhJyAgICovCi0gIC8qICAgIHRhYmxlLCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIHZlcnRpY2FsIG1ldHJpY3MgdGFibGUsICAgICAgICAqLwotICAvKiAgICBgdm10eCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBWZXJzaW9uICAgICAgICAgICAgICAgICA6OiBUaGUgdGFibGUgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFzY2VuZGVyICAgICAgICAgICAgICAgIDo6IFRoZSBmb250J3MgYXNjZW5kZXIsIGkuZS4sIHRoZSBkaXN0YW5jZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgdG9wLW1vc3Qgb2YgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGdseXBoIHBvaW50cyBmb3VuZCBpbiB0aGUgZm9udC4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgdXN1YWxseSBzZXQgYnkgdGhlIGZvbnQgZGVzaWduZXIsICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvZnRlbiByZWZsZWN0cyBvbmx5IGEgcG9ydGlvbiBvZiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGUgYHNUeXBvQXNjZW5kZXInICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRoZSBjb3JyZWN0IG9uZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVzY2VuZGVyICAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBkZXNjZW5kZXIsIGkuZS4sIHRoZSAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20tbW9zdCBvZiBhbGwgZ2x5cGggcG9pbnRzIGZvdW5kICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvbnQuICBJdCBpcyBuZWdhdGl2ZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgdXN1YWxseSBzZXQgYnkgdGhlIGZvbnQgZGVzaWduZXIsICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvZnRlbiByZWZsZWN0cyBvbmx5IGEgcG9ydGlvbiBvZiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGUgYHNUeXBvRGVzY2VuZGVyJyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRoZSBjb3JyZWN0IG9uZS4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTGluZV9HYXAgICAgICAgICAgICAgICAgOjogVGhlIGZvbnQncyBsaW5lIGdhcCwgaS5lLiwgdGhlIGRpc3RhbmNlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCB0byB0aGUgYXNjZW5kZXIgYW5kIGRlc2NlbmRlciB0byAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgdGhlIEJUQiwgaS5lLiwgdGhlICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmUtdG8tYmFzZWxpbmUgZGlzdGFuY2UgZm9yIHRoZSAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWR2YW5jZV9IZWlnaHRfTWF4ICAgICAgOjogVGhpcyBmaWVsZCBpcyB0aGUgbWF4aW11bSBvZiBhbGwgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgaGVpZ2h0cyBmb3VuZCBpbiB0aGUgZm9udC4gIEl0ICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgdXNlZCB0byBjb21wdXRlIHRoZSBtYXhpbXVtICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IG9mIGFuIGFyYml0cmFyeSBzdHJpbmcgb2YgdGV4dC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW5fVG9wX1NpZGVfQmVhcmluZyAgICA6OiBUaGUgbWluaW11bSB0b3Agc2lkZSBiZWFyaW5nIG9mIGFsbCAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW5fQm90dG9tX1NpZGVfQmVhcmluZyA6OiBUaGUgbWluaW11bSBib3R0b20gc2lkZSBiZWFyaW5nIG9mIGFsbCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5TWF4X0V4dGVudCAgICAgICAgICAgICA6OiBUaGUgbWF4aW11bSB2ZXJ0aWNhbCBleHRlbnQgKGkuZS4sIHRoZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGhlaWdodCcgb2YgYSBnbHlwaCdzIGJvdW5kaW5nIGJveCkgZm9yICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBnbHlwaHMgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2FyZXRfU2xvcGVfUmlzZSAgICAgICAgOjogVGhlIHJpc2UgY29lZmZpY2llbnQgb2YgdGhlIGN1cnNvcidzICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3BlIG9mIHRoZSBjdXJzb3IgKHNsb3BlPXJpc2UvcnVuKS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2FyZXRfU2xvcGVfUnVuICAgICAgICAgOjogVGhlIHJ1biBjb2VmZmljaWVudCBvZiB0aGUgY3Vyc29yJ3MgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3BlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2FyZXRfT2Zmc2V0ICAgICAgICAgICAgOjogVGhlIGN1cnNvcidzIG9mZnNldCBmb3Igc2xhbnRlZCBmb250cy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICA6OiA4fnJlc2VydmVkIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1ldHJpY19EYXRhX0Zvcm1hdCAgICAgIDo6IEFsd2F5c34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtYmVyX09mX1ZNZXRyaWNzICAgICAgOjogTnVtYmVyIG9mIFZNZXRyaWNzIGVudHJpZXMgaW4gdGhlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2bXR4JyB0YWJsZSAtLSB0aGlzIHZhbHVlIGNhbiBiZSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBnbHlwaHMgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb25nX21ldHJpY3MgICAgICAgICAgICA6OiBBIHBvaW50ZXIgaW50byB0aGUgYHZtdHgnIHRhYmxlLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNob3J0X21ldHJpY3MgICAgICAgICAgIDo6IEEgcG9pbnRlciBpbnRvIHRoZSBgdm10eCcgdGFibGUuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZvciBhbiBPcGVuVHlwZSB2YXJpYXRpb24gZm9udCwgdGhlIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcyAqLwotICAvKiAgICBjYW4gY2hhbmdlIGFmdGVyIGEgY2FsbCB0byBARlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMgKGFuZCAgICAgKi8KLSAgLyogICAgZnJpZW5kcykgaWYgdGhlIGZvbnQgY29udGFpbnMgYW4gYE1WQVInIHRhYmxlOiBgQXNjZW5kZXInLCAgICAgICAgICovCi0gIC8qICAgIGBEZXNjZW5kZXInLCBgTGluZV9HYXAnLCBgY2FyZXRfU2xvcGVfUmlzZScsIGBjYXJldF9TbG9wZV9SdW4nLCAgICAqLwotICAvKiAgICBhbmQgYGNhcmV0X09mZnNldCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc3RydWN0OgorICAgKiAgIFRUX1ZlcnRIZWFkZXIKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgYSBUcnVlVHlwZSB2ZXJ0aWNhbCBoZWFkZXIsIHRoZSBgdmhlYScKKyAgICogICB0YWJsZSwgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyB2ZXJ0aWNhbCBtZXRyaWNzIHRhYmxlLAorICAgKiAgIGB2bXR4Jy4KKyAgICoKKyAgICogQGZpZWxkczoKKyAgICogICBWZXJzaW9uIDo6CisgICAqICAgICBUaGUgdGFibGUgdmVyc2lvbi4KKyAgICoKKyAgICogICBBc2NlbmRlciA6OgorICAgKiAgICAgVGhlIGZvbnQncyBhc2NlbmRlciwgaS5lLiwgdGhlIGRpc3RhbmNlCisgICAqICAgICBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgdG9wLW1vc3Qgb2YKKyAgICogICAgIGFsbCBnbHlwaCBwb2ludHMgZm91bmQgaW4gdGhlIGZvbnQuCisgICAqCisgICAqICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMKKyAgICogICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLAorICAgKiAgICAgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mCisgICAqICAgICB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZQorICAgKiAgICAgQVNDSUkpLgorICAgKgorICAgKiAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0FzY2VuZGVyJworICAgKiAgICAgZmllbGQgb2YgdGhlIGBPUy8yJyB0YWJsZSBpbnN0ZWFkIGlmCisgICAqICAgICB5b3Ugd2FudCB0aGUgY29ycmVjdCBvbmUuCisgICAqCisgICAqICAgRGVzY2VuZGVyIDo6CisgICAqICAgICBUaGUgZm9udCdzIGRlc2NlbmRlciwgaS5lLiwgdGhlCisgICAqICAgICBkaXN0YW5jZSBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUKKyAgICogICAgIGJvdHRvbS1tb3N0IG9mIGFsbCBnbHlwaCBwb2ludHMgZm91bmQKKyAgICogICAgIGluIHRoZSBmb250LiAgSXQgaXMgbmVnYXRpdmUuCisgICAqCisgICAqICAgICBUaGlzIHZhbHVlIGlzIGludmFsaWQgaW4gbWFueSBmb250cywgYXMKKyAgICogICAgIGl0IGlzIHVzdWFsbHkgc2V0IGJ5IHRoZSBmb250IGRlc2lnbmVyLAorICAgKiAgICAgYW5kIG9mdGVuIHJlZmxlY3RzIG9ubHkgYSBwb3J0aW9uIG9mCisgICAqICAgICB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250IChtYXliZQorICAgKiAgICAgQVNDSUkpLgorICAgKgorICAgKiAgICAgWW91IHNob3VsZCB1c2UgdGhlIGBzVHlwb0Rlc2NlbmRlcicKKyAgICogICAgIGZpZWxkIG9mIHRoZSBgT1MvMicgdGFibGUgaW5zdGVhZCBpZgorICAgKiAgICAgeW91IHdhbnQgdGhlIGNvcnJlY3Qgb25lLgorICAgKgorICAgKiAgIExpbmVfR2FwIDo6CisgICAqICAgICBUaGUgZm9udCdzIGxpbmUgZ2FwLCBpLmUuLCB0aGUgZGlzdGFuY2UKKyAgICogICAgIHRvIGFkZCB0byB0aGUgYXNjZW5kZXIgYW5kIGRlc2NlbmRlciB0bworICAgKiAgICAgZ2V0IHRoZSBCVEIsIGkuZS4sIHRoZQorICAgKiAgICAgYmFzZWxpbmUtdG8tYmFzZWxpbmUgZGlzdGFuY2UgZm9yIHRoZQorICAgKiAgICAgZm9udC4KKyAgICoKKyAgICogICBhZHZhbmNlX0hlaWdodF9NYXggOjoKKyAgICogICAgIFRoaXMgZmllbGQgaXMgdGhlIG1heGltdW0gb2YgYWxsCisgICAqICAgICBhZHZhbmNlIGhlaWdodHMgZm91bmQgaW4gdGhlIGZvbnQuICBJdAorICAgKiAgICAgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgbWF4aW11bQorICAgKiAgICAgaGVpZ2h0IG9mIGFuIGFyYml0cmFyeSBzdHJpbmcgb2YgdGV4dC4KKyAgICoKKyAgICogICBtaW5fVG9wX1NpZGVfQmVhcmluZyA6OgorICAgKiAgICAgVGhlIG1pbmltdW0gdG9wIHNpZGUgYmVhcmluZyBvZiBhbGwKKyAgICogICAgIGdseXBocyB3aXRoaW4gdGhlIGZvbnQuCisgICAqCisgICAqICAgbWluX0JvdHRvbV9TaWRlX0JlYXJpbmcgOjoKKyAgICogICAgIFRoZSBtaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJpbmcgb2YgYWxsCisgICAqICAgICBnbHlwaHMgd2l0aGluIHRoZSBmb250LgorICAgKgorICAgKiAgIHlNYXhfRXh0ZW50IDo6CisgICAqICAgICBUaGUgbWF4aW11bSB2ZXJ0aWNhbCBleHRlbnQgKGkuZS4sIHRoZQorICAgKiAgICAgYGhlaWdodCcgb2YgYSBnbHlwaCdzIGJvdW5kaW5nIGJveCkgZm9yCisgICAqICAgICBhbGwgZ2x5cGhzIGluIHRoZSBmb250LgorICAgKgorICAgKiAgIGNhcmV0X1Nsb3BlX1Jpc2UgOjoKKyAgICogICAgIFRoZSByaXNlIGNvZWZmaWNpZW50IG9mIHRoZSBjdXJzb3IncworICAgKiAgICAgc2xvcGUgb2YgdGhlIGN1cnNvciAoc2xvcGU9cmlzZS9ydW4pLgorICAgKgorICAgKiAgIGNhcmV0X1Nsb3BlX1J1biA6OgorICAgKiAgICAgVGhlIHJ1biBjb2VmZmljaWVudCBvZiB0aGUgY3Vyc29yJ3MKKyAgICogICAgIHNsb3BlLgorICAgKgorICAgKiAgIGNhcmV0X09mZnNldCA6OgorICAgKiAgICAgVGhlIGN1cnNvcidzIG9mZnNldCBmb3Igc2xhbnRlZCBmb250cy4KKyAgICoKKyAgICogICBSZXNlcnZlZCA6OgorICAgKiAgICAgOH5yZXNlcnZlZCBieXRlcy4KKyAgICoKKyAgICogICBtZXRyaWNfRGF0YV9Gb3JtYXQgOjoKKyAgICogICAgIEFsd2F5c34wLgorICAgKgorICAgKiAgIG51bWJlcl9PZl9WTWV0cmljcyA6OgorICAgKiAgICAgTnVtYmVyIG9mIFZNZXRyaWNzIGVudHJpZXMgaW4gdGhlCisgICAqICAgICBgdm10eCcgdGFibGUgLS0gdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICogICAgIHNtYWxsZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocworICAgKiAgICAgaW4gdGhlIGZvbnQuCisgICAqCisgICAqICAgbG9uZ19tZXRyaWNzIDo6CisgICAqICAgICBBIHBvaW50ZXIgaW50byB0aGUgYHZtdHgnIHRhYmxlLgorICAgKgorICAgKiAgIHNob3J0X21ldHJpY3MgOjoKKyAgICogICAgIEEgcG9pbnRlciBpbnRvIHRoZSBgdm10eCcgdGFibGUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEZvciBhbiBPcGVuVHlwZSB2YXJpYXRpb24gZm9udCwgdGhlIHZhbHVlcyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcworICAgKiAgIGNhbiBjaGFuZ2UgYWZ0ZXIgYSBjYWxsIHRvIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyAoYW5kCisgICAqICAgZnJpZW5kcykgaWYgdGhlIGZvbnQgY29udGFpbnMgYW4gYE1WQVInIHRhYmxlOiBgQXNjZW5kZXInLAorICAgKiAgIGBEZXNjZW5kZXInLCBgTGluZV9HYXAnLCBgY2FyZXRfU2xvcGVfUmlzZScsIGBjYXJldF9TbG9wZV9SdW4nLAorICAgKiAgIGFuZCBgY2FyZXRfT2Zmc2V0Jy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9WZXJ0SGVhZGVyXwogICB7CiAgICAgRlRfRml4ZWQgICBWZXJzaW9uOwpAQCAtMzQ5LDMzICszODEsMzMgQEAKICAgfSBUVF9WZXJ0SGVhZGVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBgT1MvMicgdGFibGUuICBBbGwgZmllbGRzIGNvbXBseSAgICovCi0gIC8qICAgIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm90ZSB0aGF0IHdlIG5vdyBzdXBwb3J0IG9sZCBNYWMgZm9udHMgdGhhdCBkbyBub3QgaW5jbHVkZSBhbiAgICAgICovCi0gIC8qICAgIGBPUy8yJyB0YWJsZS4gIEluIHRoaXMgY2FzZSwgdGhlIGB2ZXJzaW9uJyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvICAqLwotICAvKiAgICAweEZGRkYuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGb3IgYW4gT3BlblR5cGUgdmFyaWF0aW9uIGZvbnQsIHRoZSB2YWx1ZXMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMgKi8KLSAgLyogICAgY2FuIGNoYW5nZSBhZnRlciBhIGNhbGwgdG8gQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIChhbmQgICAgICovCi0gIC8qICAgIGZyaWVuZHMpIGlmIHRoZSBmb250IGNvbnRhaW5zIGFuIGBNVkFSJyB0YWJsZTogYHNDYXBIZWlnaHQnLCAgICAgICAqLwotICAvKiAgICBgc1R5cG9Bc2NlbmRlcicsIGBzVHlwb0Rlc2NlbmRlcicsIGBzVHlwb0xpbmVHYXAnLCBgc3hIZWlnaHQnLCAgICAgKi8KLSAgLyogICAgYHVzV2luQXNjZW50JywgYHVzV2luRGVzY2VudCcsIGB5U3RyaWtlb3V0UG9zaXRpb24nLCAgICAgICAgICAgICAgICovCi0gIC8qICAgIGB5U3RyaWtlb3V0U2l6ZScsIGB5U3Vic2NyaXB0WE9mZnNldCcsIGB5U3ViU2NyaXB0WFNpemUnLCAgICAgICAgICAqLwotICAvKiAgICBgeVN1YnNjcmlwdFlPZmZzZXQnLCBgeVN1YnNjcmlwdFlTaXplJywgYHlTdXBlcnNjcmlwdFhPZmZzZXQnLCAgICAgKi8KLSAgLyogICAgYHlTdXBlcnNjcmlwdFhTaXplJywgYHlTdXBlcnNjcmlwdFlPZmZzZXQnLCBhbmQgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGB5U3VwZXJzY3JpcHRZU2l6ZScuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUG9zc2libGUgdmFsdWVzIGZvciBiaXRzIGluIHRoZSBgdWxVbmljb2RlUmFuZ2VYJyBmaWVsZHMgYXJlIGdpdmVuICovCi0gIC8qICAgIGJ5IHRoZSBAVFRfVUNSX1hYWCBtYWNyb3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVFRfT1MyCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIFRydWVUeXBlIGBPUy8yJyB0YWJsZS4gIEFsbCBmaWVsZHMgY29tcGx5CisgICAqICAgdG8gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uCisgICAqCisgICAqICAgTm90ZSB0aGF0IHdlIG5vdyBzdXBwb3J0IG9sZCBNYWMgZm9udHMgdGhhdCBkbyBub3QgaW5jbHVkZSBhbgorICAgKiAgIGBPUy8yJyB0YWJsZS4gIEluIHRoaXMgY2FzZSwgdGhlIGB2ZXJzaW9uJyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvCisgICAqICAgMHhGRkZGLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBGb3IgYW4gT3BlblR5cGUgdmFyaWF0aW9uIGZvbnQsIHRoZSB2YWx1ZXMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMKKyAgICogICBjYW4gY2hhbmdlIGFmdGVyIGEgY2FsbCB0byBARlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMgKGFuZAorICAgKiAgIGZyaWVuZHMpIGlmIHRoZSBmb250IGNvbnRhaW5zIGFuIGBNVkFSJyB0YWJsZTogYHNDYXBIZWlnaHQnLAorICAgKiAgIGBzVHlwb0FzY2VuZGVyJywgYHNUeXBvRGVzY2VuZGVyJywgYHNUeXBvTGluZUdhcCcsIGBzeEhlaWdodCcsCisgICAqICAgYHVzV2luQXNjZW50JywgYHVzV2luRGVzY2VudCcsIGB5U3RyaWtlb3V0UG9zaXRpb24nLAorICAgKiAgIGB5U3RyaWtlb3V0U2l6ZScsIGB5U3Vic2NyaXB0WE9mZnNldCcsIGB5U3ViU2NyaXB0WFNpemUnLAorICAgKiAgIGB5U3Vic2NyaXB0WU9mZnNldCcsIGB5U3Vic2NyaXB0WVNpemUnLCBgeVN1cGVyc2NyaXB0WE9mZnNldCcsCisgICAqICAgYHlTdXBlcnNjcmlwdFhTaXplJywgYHlTdXBlcnNjcmlwdFlPZmZzZXQnLCBhbmQKKyAgICogICBgeVN1cGVyc2NyaXB0WVNpemUnLgorICAgKgorICAgKiAgIFBvc3NpYmxlIHZhbHVlcyBmb3IgYml0cyBpbiB0aGUgYHVsVW5pY29kZVJhbmdlWCcgZmllbGRzIGFyZSBnaXZlbgorICAgKiAgIGJ5IHRoZSBAVFRfVUNSX1hYWCBtYWNyb3MuCisgICAqLwogCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9PUzJfCiAgIHsKQEAgLTQzNSwyMyArNDY3LDIzIEBACiAgIH0gVFRfT1MyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfUG9zdHNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBgcG9zdCcgdGFibGUuICBBbGwgZmllbGRzIGNvbXBseSAgICovCi0gIC8qICAgIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgVGhpcyBzdHJ1Y3R1cmUgZG9lcyBub3QgcmVmZXJlbmNlICAqLwotICAvKiAgICBhIGZvbnQncyBQb3N0U2NyaXB0IGdseXBoIG5hbWVzOyB1c2UgQEZUX0dldF9HbHlwaF9OYW1lIHRvICAgICAgICAgKi8KLSAgLyogICAgcmV0cmlldmUgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRm9yIGFuIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250LCB0aGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzICovCi0gIC8qICAgIGNhbiBjaGFuZ2UgYWZ0ZXIgYSBjYWxsIHRvIEBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyAoYW5kICAgICAqLwotICAvKiAgICBmcmllbmRzKSBpZiB0aGUgZm9udCBjb250YWlucyBhbiBgTVZBUicgdGFibGU6IGB1bmRlcmxpbmVQb3NpdGlvbicgKi8KLSAgLyogICAgYW5kIGB1bmRlcmxpbmVUaGlja25lc3MnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBUVF9Qb3N0c2NyaXB0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHN0cnVjdHVyZSB0byBtb2RlbCBhIFRydWVUeXBlIGBwb3N0JyB0YWJsZS4gIEFsbCBmaWVsZHMgY29tcGx5CisgICAqICAgdG8gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uICBUaGlzIHN0cnVjdHVyZSBkb2VzIG5vdCByZWZlcmVuY2UKKyAgICogICBhIGZvbnQncyBQb3N0U2NyaXB0IGdseXBoIG5hbWVzOyB1c2UgQEZUX0dldF9HbHlwaF9OYW1lIHRvCisgICAqICAgcmV0cmlldmUgdGhlbS4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgRm9yIGFuIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250LCB0aGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzCisgICAqICAgY2FuIGNoYW5nZSBhZnRlciBhIGNhbGwgdG8gQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIChhbmQKKyAgICogICBmcmllbmRzKSBpZiB0aGUgZm9udCBjb250YWlucyBhbiBgTVZBUicgdGFibGU6IGB1bmRlcmxpbmVQb3NpdGlvbicKKyAgICogICBhbmQgYHVuZGVybGluZVRoaWNrbmVzcycuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfUG9zdHNjcmlwdF8KICAgewogICAgIEZUX0ZpeGVkICBGb3JtYXRUeXBlOwpAQCAtNDcwLDE1ICs1MDIsMTUgQEAKICAgfSBUVF9Qb3N0c2NyaXB0OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfUENMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBgUENMVCcgdGFibGUuICBBbGwgZmllbGRzIGNvbXBseSAgICovCi0gIC8qICAgIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVFRfUENMVAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBzdHJ1Y3R1cmUgdG8gbW9kZWwgYSBUcnVlVHlwZSBgUENMVCcgdGFibGUuICBBbGwgZmllbGRzIGNvbXBseQorICAgKiAgIHRvIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1BDTFRfCiAgIHsKICAgICBGVF9GaXhlZCAgIFZlcnNpb247CkBAIC01MDAsNzAgKzUzMiw4NSBAQAogICB9IFRUX1BDTFQ7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9NYXhQcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbWF4aW11bSBwcm9maWxlIChgbWF4cCcpIHRhYmxlIGNvbnRhaW5zIG1hbnkgbWF4IHZhbHVlcywgd2hpY2ggKi8KLSAgLyogICAgY2FuIGJlIHVzZWQgdG8gcHJlLWFsbG9jYXRlIGFycmF5cyBmb3Igc3BlZWRpbmcgdXAgZ2x5cGggbG9hZGluZyAgICovCi0gIC8qICAgIGFuZCBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnNpb24gICAgICAgICAgICAgICA6OiBUaGUgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtR2x5cGhzICAgICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoaXMgVHJ1ZVR5cGUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4UG9pbnRzICAgICAgICAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gYSAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tY29tcG9zaXRlIFRydWVUeXBlIGdseXBoLiAgU2VlIGFsc28gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG1heENvbXBvc2l0ZVBvaW50cycuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heENvbnRvdXJzICAgICAgICAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgaW4gYSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uLWNvbXBvc2l0ZSBUcnVlVHlwZSBnbHlwaC4gIFNlZSBhbHNvICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBtYXhDb21wb3NpdGVDb250b3VycycuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhDb21wb3NpdGVQb2ludHMgICAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBhICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSBUcnVlVHlwZSBnbHlwaC4gIFNlZSBhbHNvICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbWF4UG9pbnRzJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4Q29tcG9zaXRlQ29udG91cnMgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBhICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguICBTZWUgYWxzbyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG1heENvbnRvdXJzJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heFpvbmVzICAgICAgICAgICAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygem9uZXMgdXNlZCBmb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGggaGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heFR3aWxpZ2h0UG9pbnRzICAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdpbGlnaHQgem9uZSB1c2VkIGZvciBnbHlwaCBoaW50aW5nLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heFN0b3JhZ2UgICAgICAgICAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSBhcmVhIHVzZWQgZm9yIGdseXBoIGhpbnRpbmcuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heEZ1bmN0aW9uRGVmcyAgICAgICA6OiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMgaW4gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGZvciAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXhJbnN0cnVjdGlvbkRlZnMgICAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9uICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zIGluIHRoZSBUcnVlVHlwZSBieXRlY29kZSBmb3IgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4U3RhY2tFbGVtZW50cyAgICAgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFjayBlbGVtZW50cyB1c2VkICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBUcnVlVHlwZSBvcGNvZGVzICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGZvciBnbHlwaCBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4Q29tcG9uZW50RWxlbWVudHMgIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW1wbGUgKGkuZS4sIG5vbi0gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGUpIGdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4Q29tcG9uZW50RGVwdGggICAgIDo6IFRoZSBtYXhpbXVtIG5lc3RpbmcgZGVwdGggb2YgY29tcG9zaXRlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIGlzIG9ubHkgdXNlZCBkdXJpbmcgZm9udCBsb2FkaW5nLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzdHJ1Y3Q6CisgICAqICAgVFRfTWF4UHJvZmlsZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIG1heGltdW0gcHJvZmlsZSAoYG1heHAnKSB0YWJsZSBjb250YWlucyBtYW55IG1heCB2YWx1ZXMsIHdoaWNoCisgICAqICAgY2FuIGJlIHVzZWQgdG8gcHJlLWFsbG9jYXRlIGFycmF5cyBmb3Igc3BlZWRpbmcgdXAgZ2x5cGggbG9hZGluZworICAgKiAgIGFuZCBoaW50aW5nLgorICAgKgorICAgKiBAZmllbGRzOgorICAgKiAgIHZlcnNpb24gOjoKKyAgICogICAgIFRoZSB2ZXJzaW9uIG51bWJlci4KKyAgICoKKyAgICogICBudW1HbHlwaHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoaXMgVHJ1ZVR5cGUKKyAgICogICAgIGZvbnQuCisgICAqCisgICAqICAgbWF4UG9pbnRzIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGEKKyAgICogICAgIG5vbi1jb21wb3NpdGUgVHJ1ZVR5cGUgZ2x5cGguICBTZWUgYWxzbworICAgKiAgICAgYG1heENvbXBvc2l0ZVBvaW50cycuCisgICAqCisgICAqICAgbWF4Q29udG91cnMgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBhCisgICAqICAgICBub24tY29tcG9zaXRlIFRydWVUeXBlIGdseXBoLiAgU2VlIGFsc28KKyAgICogICAgIGBtYXhDb21wb3NpdGVDb250b3VycycuCisgICAqCisgICAqICAgbWF4Q29tcG9zaXRlUG9pbnRzIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGEKKyAgICogICAgIGNvbXBvc2l0ZSBUcnVlVHlwZSBnbHlwaC4gIFNlZSBhbHNvCisgICAqICAgICBgbWF4UG9pbnRzJy4KKyAgICoKKyAgICogICBtYXhDb21wb3NpdGVDb250b3VycyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGEKKyAgICogICAgIGNvbXBvc2l0ZSBUcnVlVHlwZSBnbHlwaC4gIFNlZSBhbHNvCisgICAqICAgICBgbWF4Q29udG91cnMnLgorICAgKgorICAgKiAgIG1heFpvbmVzIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygem9uZXMgdXNlZCBmb3IKKyAgICogICAgIGdseXBoIGhpbnRpbmcuCisgICAqCisgICAqICAgbWF4VHdpbGlnaHRQb2ludHMgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gdGhlCisgICAqICAgICB0d2lsaWdodCB6b25lIHVzZWQgZm9yIGdseXBoIGhpbnRpbmcuCisgICAqCisgICAqICAgbWF4U3RvcmFnZSA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQorICAgKiAgICAgc3RvcmFnZSBhcmVhIHVzZWQgZm9yIGdseXBoIGhpbnRpbmcuCisgICAqCisgICAqICAgbWF4RnVuY3Rpb25EZWZzIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24KKyAgICogICAgIGRlZmluaXRpb25zIGluIHRoZSBUcnVlVHlwZSBieXRlY29kZSBmb3IKKyAgICogICAgIHRoaXMgZm9udC4KKyAgICoKKyAgICogICBtYXhJbnN0cnVjdGlvbkRlZnMgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbgorICAgKiAgICAgZGVmaW5pdGlvbnMgaW4gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGZvcgorICAgKiAgICAgdGhpcyBmb250LgorICAgKgorICAgKiAgIG1heFN0YWNrRWxlbWVudHMgOjoKKyAgICogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFjayBlbGVtZW50cyB1c2VkCisgICAqICAgICBkdXJpbmcgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uCisgICAqCisgICAqICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zIDo6CisgICAqICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgVHJ1ZVR5cGUgb3Bjb2RlcworICAgKiAgICAgdXNlZCBmb3IgZ2x5cGggaGludGluZy4KKyAgICoKKyAgICogICBtYXhDb21wb25lbnRFbGVtZW50cyA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXBsZSAoaS5lLiwKKyAgICogICAgIG5vbi1jb21wb3NpdGUpIGdseXBocyBpbiBhIGNvbXBvc2l0ZSBnbHlwaC4KKyAgICoKKyAgICogICBtYXhDb21wb25lbnREZXB0aCA6OgorICAgKiAgICAgVGhlIG1heGltdW0gbmVzdGluZyBkZXB0aCBvZiBjb21wb3NpdGUKKyAgICogICAgIGdseXBocy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGR1cmluZyBmb250IGxvYWRpbmcuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfTWF4UHJvZmlsZV8KICAgewogICAgIEZUX0ZpeGVkICAgdmVyc2lvbjsKQEAgLTU4NSwzMSArNjMyLDM4IEBACiAgIH0gVFRfTWF4UHJvZmlsZTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NmbnRfVGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIGVudW1lcmF0aW9uIHRvIHNwZWNpZnkgaW5kaWNlcyBvZiBTRk5UIHRhYmxlcyBsb2FkZWQgYW5kIHBhcnNlZCAqLwotICAvKiAgICBieSBGcmVlVHlwZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgYW4gU0ZOVCBmb250LiAgVXNlZCBpbiB0aGUgICAgKi8KLSAgLyogICAgQEZUX0dldF9TZm50X1RhYmxlIEFQSSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0ZOVF9IRUFEIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9IZWFkZXIgc3RydWN0dXJlLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TRk5UX01BWFAgOjogVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX01heFByb2ZpbGUgc3RydWN0dXJlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NGTlRfT1MyICA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfT1MyIHN0cnVjdHVyZS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0ZOVF9ISEVBIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9Ib3JpSGVhZGVyIHN0cnVjdHVyZS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9TRk5UX1ZIRUEgOjogVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX1ZlcnRIZWFkZXIgc3RydWN0dXJlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX1NGTlRfUE9TVCA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfUG9zdHNjcmlwdCBzdHJ1Y3R1cmUuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0ZOVF9QQ0xUIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9QQ0xUIHN0cnVjdHVyZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfU2ZudF9UYWcKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIGVudW1lcmF0aW9uIHRvIHNwZWNpZnkgaW5kaWNlcyBvZiBTRk5UIHRhYmxlcyBsb2FkZWQgYW5kIHBhcnNlZAorICAgKiAgIGJ5IEZyZWVUeXBlIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiBhbiBTRk5UIGZvbnQuICBVc2VkIGluIHRoZQorICAgKiAgIEBGVF9HZXRfU2ZudF9UYWJsZSBBUEkgZnVuY3Rpb24uCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfU0ZOVF9IRUFEIDo6CisgICAqICAgICBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfSGVhZGVyIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICBGVF9TRk5UX01BWFAgOjoKKyAgICogICAgIFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9NYXhQcm9maWxlIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICBGVF9TRk5UX09TMiA6OgorICAgKiAgICAgVG8gYWNjZXNzIHRoZSBmb250J3MgQFRUX09TMiBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgRlRfU0ZOVF9ISEVBIDo6CisgICAqICAgICBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfSG9yaUhlYWRlciBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgRlRfU0ZOVF9WSEVBIDo6CisgICAqICAgICBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfVmVydEhlYWRlciBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgRlRfU0ZOVF9QT1NUIDo6CisgICAqICAgICBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfUG9zdHNjcmlwdCBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgRlRfU0ZOVF9QQ0xUIDo6CisgICAqICAgICBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfUENMVCBzdHJ1Y3R1cmUuCisgICAqLwogICB0eXBlZGVmIGVudW0gIEZUX1NmbnRfVGFnXwogICB7CiAgICAgRlRfU0ZOVF9IRUFELApAQCAtNjM1LDQ0ICs2ODksNDcgQEAKICNkZWZpbmUgZnRfc2ZudF9wY2x0ICBGVF9TRk5UX1BDTFQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0dldF9TZm50X1RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBnaXZlbiBTRk5UIHRhYmxlIHN0b3JlZCB3aXRoaW4gYSBmYWNlLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFnICA6OiBUaGUgaW5kZXggb2YgdGhlIFNGTlQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSB0eXBlLWxlc3MgcG9pbnRlciB0byB0aGUgdGFibGUuICBUaGlzIHdpbGwgYmUgTlVMTCBpbiBjYXNlIG9mICAgICovCi0gIC8qICAgIGVycm9yLCBvciBpZiB0aGUgY29ycmVzcG9uZGluZyB0YWJsZSB3YXMgbm90IGZvdW5kICpPUiogbG9hZGVkICAgICAqLwotICAvKiAgICBmcm9tIHRoZSBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFVzZSBhIHR5cGVjYXN0IGFjY29yZGluZyB0byBgdGFnJyB0byBhY2Nlc3MgdGhlIHN0cnVjdHVyZSAgICAgICAgICAqLwotICAvKiAgICBlbGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgdGFibGUgaXMgb3duZWQgYnkgdGhlIGZhY2Ugb2JqZWN0IGFuZCBkaXNhcHBlYXJzIHdpdGggaXQuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VmdWwgdG8gYWNjZXNzIFNGTlQgdGFibGVzIHRoYXQgYXJlIGxvYWRlZCAqLwotICAvKiAgICBieSB0aGUgc2ZudCwgdHJ1ZXR5cGUsIGFuZCBvcGVudHlwZSBkcml2ZXJzLiAgU2VlIEBGVF9TZm50X1RhZyBmb3IgKi8KLSAgLyogICAgYSBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIZXJlIGFuIGV4YW1wbGUgaG93IHRvIGFjY2VzcyB0aGUgYHZoZWEnIHRhYmxlOiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRUX1ZlcnRIZWFkZXIqICB2ZXJ0X2hlYWRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIHZlcnRfaGVhZGVyID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIChUVF9WZXJ0SGVhZGVyKilGVF9HZXRfU2ZudF9UYWJsZSggZmFjZSwgRlRfU0ZOVF9WSEVBICk7ICAgICAgICovCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfU2ZudF9UYWJsZQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIGdpdmVuIFNGTlQgdGFibGUgc3RvcmVkIHdpdGhpbiBhIGZhY2UuCisgICAqCisgICAqIEBpbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlLgorICAgKgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBTRk5UIHRhYmxlLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIEEgdHlwZS1sZXNzIHBvaW50ZXIgdG8gdGhlIHRhYmxlLiAgVGhpcyB3aWxsIGJlIE5VTEwgaW4gY2FzZSBvZgorICAgKiAgIGVycm9yLCBvciBpZiB0aGUgY29ycmVzcG9uZGluZyB0YWJsZSB3YXMgbm90IGZvdW5kICpPUiogbG9hZGVkCisgICAqICAgZnJvbSB0aGUgZmlsZS4KKyAgICoKKyAgICogICBVc2UgYSB0eXBlY2FzdCBhY2NvcmRpbmcgdG8gYHRhZycgdG8gYWNjZXNzIHRoZSBzdHJ1Y3R1cmUKKyAgICogICBlbGVtZW50cy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHRhYmxlIGlzIG93bmVkIGJ5IHRoZSBmYWNlIG9iamVjdCBhbmQgZGlzYXBwZWFycyB3aXRoIGl0LgorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VmdWwgdG8gYWNjZXNzIFNGTlQgdGFibGVzIHRoYXQgYXJlIGxvYWRlZAorICAgKiAgIGJ5IHRoZSBzZm50LCB0cnVldHlwZSwgYW5kIG9wZW50eXBlIGRyaXZlcnMuICBTZWUgQEZUX1NmbnRfVGFnIGZvcgorICAgKiAgIGEgbGlzdC4KKyAgICoKKyAgICogQGV4YW1wbGU6CisgICAqICAgSGVyZSBhbiBleGFtcGxlIGhvdyB0byBhY2Nlc3MgdGhlIGB2aGVhJyB0YWJsZS4KKyAgICoKKyAgICogICB7CisgICAqICAgICBUVF9WZXJ0SGVhZGVyKiAgdmVydF9oZWFkZXI7CisgICAqCisgICAqCisgICAqICAgICB2ZXJ0X2hlYWRlciA9CisgICAqICAgICAgIChUVF9WZXJ0SGVhZGVyKilGVF9HZXRfU2ZudF9UYWJsZSggZmFjZSwgRlRfU0ZOVF9WSEVBICk7CisgICAqICAgfQorICAgKi8KICAgRlRfRVhQT1JUKCB2b2lkKiApCiAgIEZUX0dldF9TZm50X1RhYmxlKCBGVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1NmbnRfVGFnICB0YWcgKTsKQEAgLTcyMiwxOSArNzc5LDE5IEBACiAgICAqICAgSWYgeW91IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSB0YWJsZSdzIGxlbmd0aCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwgdGhpcwogICAgKiAgIGZ1bmN0aW9uIHdpdGggYCpsZW5ndGgnIHNldCB0b34wLCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CiAgICAqCi0gICAqICAgICB7Ci0gICAqICAgICAgIEZUX1VMb25nICBsZW5ndGggPSAwOworICAgKiAgIHsKKyAgICogICAgIEZUX1VMb25nICBsZW5ndGggPSAwOwogICAgKgogICAgKgotICAgKiAgICAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZSggZmFjZSwgdGFnLCAwLCBOVUxMLCAmbGVuZ3RoICk7Ci0gICAqICAgICAgIGlmICggZXJyb3IgKSB7IC4uLiB0YWJsZSBkb2VzIG5vdCBleGlzdCAuLi4gfQorICAgKiAgICAgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUoIGZhY2UsIHRhZywgMCwgTlVMTCwgJmxlbmd0aCApOworICAgKiAgICAgaWYgKCBlcnJvciApIHsgLi4uIHRhYmxlIGRvZXMgbm90IGV4aXN0IC4uLiB9CiAgICAqCi0gICAqICAgICAgIGJ1ZmZlciA9IG1hbGxvYyggbGVuZ3RoICk7Ci0gICAqICAgICAgIGlmICggYnVmZmVyID09IE5VTEwgKSB7IC4uLiBub3QgZW5vdWdoIG1lbW9yeSAuLi4gfQorICAgKiAgICAgYnVmZmVyID0gbWFsbG9jKCBsZW5ndGggKTsKKyAgICogICAgIGlmICggYnVmZmVyID09IE5VTEwgKSB7IC4uLiBub3QgZW5vdWdoIG1lbW9yeSAuLi4gfQogICAgKgotICAgKiAgICAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZSggZmFjZSwgdGFnLCAwLCBidWZmZXIsICZsZW5ndGggKTsKLSAgICogICAgICAgaWYgKCBlcnJvciApIHsgLi4uIGNvdWxkIG5vdCBsb2FkIHRhYmxlIC4uLiB9Ci0gICAqICAgICB9CisgICAqICAgICBlcnJvciA9IEZUX0xvYWRfU2ZudF9UYWJsZSggZmFjZSwgdGFnLCAwLCBidWZmZXIsICZsZW5ndGggKTsKKyAgICogICAgIGlmICggZXJyb3IgKSB7IC4uLiBjb3VsZCBub3QgbG9hZCB0YWJsZSAuLi4gfQorICAgKiAgIH0KICAgICoKICAgICogICBOb3RlIHRoYXQgc3RydWN0dXJlcyBsaWtlIEBUVF9IZWFkZXIgb3IgQFRUX09TMiBjYW4ndCBiZSB1c2VkIHdpdGgKICAgICogICB0aGlzIGZ1bmN0aW9uOyB0aGV5IGFyZSBsaW1pdGVkIHRvIEBGVF9HZXRfU2ZudF9UYWJsZS4gIFJlYXNvbiBpcyB0aGF0CkBAIC03OTIsNDYgKzg0OSw0NiBAQAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAqbGVuZ3RoICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm4gY21hcCBsYW5ndWFnZSBJRCBhcyBzcGVjaWZpZWQgaW4gdGhlIE9wZW5UeXBlIHN0YW5kYXJkLiAgICAgKi8KLSAgLyogICAgRGVmaW5pdGlvbnMgb2YgbGFuZ3VhZ2UgSUQgdmFsdWVzIGFyZSBpbiBmaWxlIEBGVF9UUlVFVFlQRV9JRFNfSC4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcm1hcCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHRhcmdldCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBsYW5ndWFnZSBJRCBvZiBgY2hhcm1hcCcuICBJZiBgY2hhcm1hcCcgZG9lc24ndCBiZWxvbmcgdG8gYW4gICAqLwotICAvKiAgICBTRk5UIGZhY2UsIGp1c3QgcmV0dXJufjAgYXMgdGhlIGRlZmF1bHQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZvciBhIGZvcm1hdH4xNCBjbWFwICh0byBhY2Nlc3MgVW5pY29kZSBJVlMpLCB0aGUgcmV0dXJuIHZhbHVlIGlzICAqLwotICAvKiAgICAweEZGRkZGRkZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIFJldHVybiBjbWFwIGxhbmd1YWdlIElEIGFzIHNwZWNpZmllZCBpbiB0aGUgT3BlblR5cGUgc3RhbmRhcmQuCisgICAqICAgRGVmaW5pdGlvbnMgb2YgbGFuZ3VhZ2UgSUQgdmFsdWVzIGFyZSBpbiBmaWxlIEBGVF9UUlVFVFlQRV9JRFNfSC4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNoYXJtYXAgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgY2hhcm1hcC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgbGFuZ3VhZ2UgSUQgb2YgYGNoYXJtYXAnLiAgSWYgYGNoYXJtYXAnIGRvZXNuJ3QgYmVsb25nIHRvIGFuCisgICAqICAgU0ZOVCBmYWNlLCBqdXN0IHJldHVybn4wIGFzIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgKgorICAgKiAgIEZvciBhIGZvcm1hdH4xNCBjbWFwICh0byBhY2Nlc3MgVW5pY29kZSBJVlMpLCB0aGUgcmV0dXJuIHZhbHVlIGlzCisgICAqICAgMHhGRkZGRkZGRi4KKyAgICovCiAgIEZUX0VYUE9SVCggRlRfVUxvbmcgKQogICBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCggRlRfQ2hhck1hcCAgY2hhcm1hcCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfR2V0X0NNYXBfRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBmb3JtYXQgb2YgYW4gU0ZOVCBgY21hcCcgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcm1hcCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIHRhcmdldCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBmb3JtYXQgb2YgYGNoYXJtYXAnLiAgSWYgYGNoYXJtYXAnIGRvZXNuJ3QgYmVsb25nIHRvIGFuIFNGTlQgICAqLwotICAvKiAgICBmYWNlLCByZXR1cm4gLTEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuY3Rpb246CisgICAqICAgRlRfR2V0X0NNYXBfRm9ybWF0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIGZvcm1hdCBvZiBhbiBTRk5UIGBjbWFwJyB0YWJsZS4KKyAgICoKKyAgICogQGlucHV0OgorICAgKiAgIGNoYXJtYXAgOjoKKyAgICogICAgIFRoZSB0YXJnZXQgY2hhcm1hcC4KKyAgICoKKyAgICogQHJldHVybjoKKyAgICogICBUaGUgZm9ybWF0IG9mIGBjaGFybWFwJy4gIElmIGBjaGFybWFwJyBkb2Vzbid0IGJlbG9uZyB0byBhbiBTRk5UCisgICAqICAgZmFjZSwgcmV0dXJuIC0xLgorICAgKi8KICAgRlRfRVhQT1JUKCBGVF9Mb25nICkKICAgRlRfR2V0X0NNYXBfRm9ybWF0KCBGVF9DaGFyTWFwICBjaGFybWFwICk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCmluZGV4IGU1Y2VlNjguLjVlNWQ3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHR0YWdzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRhZ3MgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHR0YWdzLmgKKyAqCisgKiAgIFRhZ3MgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRBR1NfSF8KQEAgLTQ2LDYgKzQ2LDggQEAKICNkZWZpbmUgVFRBR19DRkYyICBGVF9NQUtFX1RBRyggJ0MnLCAnRicsICdGJywgJzInICkKICNkZWZpbmUgVFRBR19DSUQgICBGVF9NQUtFX1RBRyggJ0MnLCAnSScsICdEJywgJyAnICkKICNkZWZpbmUgVFRBR19jbWFwICBGVF9NQUtFX1RBRyggJ2MnLCAnbScsICdhJywgJ3AnICkKKyNkZWZpbmUgVFRBR19DT0xSICBGVF9NQUtFX1RBRyggJ0MnLCAnTycsICdMJywgJ1InICkKKyNkZWZpbmUgVFRBR19DUEFMICBGVF9NQUtFX1RBRyggJ0MnLCAnUCcsICdBJywgJ0wnICkKICNkZWZpbmUgVFRBR19jdmFyICBGVF9NQUtFX1RBRyggJ2MnLCAndicsICdhJywgJ3InICkKICNkZWZpbmUgVFRBR19jdnQgICBGVF9NQUtFX1RBRyggJ2MnLCAndicsICd0JywgJyAnICkKICNkZWZpbmUgVFRBR19EU0lHICBGVF9NQUtFX1RBRyggJ0QnLCAnUycsICdJJywgJ0cnICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnQyYnVpbGQuaCBiL2luY2x1ZGUvZnQyYnVpbGQuaAppbmRleCBlN2NlOTliLi45N2RiZDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Z0MmJ1aWxkLmgKKysrIGIvaW5jbHVkZS9mdDJidWlsZC5oCkBAIC0xLDM0ICsxLDM2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdDJidWlsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdDJidWlsZC5oCisgKgorICogICBGcmVlVHlwZSAyIGJ1aWxkIGFuZCBzZXR1cCBtYWNyb3MuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGlzIHRoZSBgZW50cnkgcG9pbnQnIGZvciBGcmVlVHlwZSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zLiAgSXQgaXMgKi8KLSAgLyogdGhlIG9ubHkgaGVhZGVyIGZpbGUgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkIGRpcmVjdGx5OyBhbGwgb3RoZXIgICAgICovCi0gIC8qIEZyZWVUeXBlIGhlYWRlciBmaWxlcyBzaG91bGQgYmUgYWNjZXNzZWQgd2l0aCBtYWNybyBuYW1lcyAoYWZ0ZXIgICAgICAqLwotICAvKiBpbmNsdWRpbmcgYGZ0MmJ1aWxkLmgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEEgdHlwaWNhbCBleGFtcGxlIGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgI2luY2x1ZGUgRlRfRlJFRVRZUEVfSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGlzIHRoZSBgZW50cnkgcG9pbnQnIGZvciBGcmVlVHlwZSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zLiAgSXQgaXMKKyAgICogdGhlIG9ubHkgaGVhZGVyIGZpbGUgd2hpY2ggc2hvdWxkIGJlIGluY2x1ZGVkIGRpcmVjdGx5OyBhbGwgb3RoZXIKKyAgICogRnJlZVR5cGUgaGVhZGVyIGZpbGVzIHNob3VsZCBiZSBhY2Nlc3NlZCB3aXRoIG1hY3JvIG5hbWVzIChhZnRlcgorICAgKiBpbmNsdWRpbmcgYGZ0MmJ1aWxkLmgnKS4KKyAgICoKKyAgICogQSB0eXBpY2FsIGV4YW1wbGUgaXMKKyAgICoKKyAgICogeworICAgKiAgICNpbmNsdWRlIDxmdDJidWlsZC5oPgorICAgKiAgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyAgICogfQorICAgKgorICAgKi8KIAogCiAjaWZuZGVmIEZUMkJVSUxEX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzLmNmZyBiL21vZHVsZXMuY2ZnCmluZGV4IDZjZTBmM2UuLmM0NmU2MTkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMuY2ZnCisrKyBiL21vZHVsZXMuY2ZnCkBAIC0zNyw3ICszNyw2IEBACiAjIFBvc3RTY3JpcHQgVHlwZSAxIGZvbnQgZHJpdmVyLgogIwogIyBUaGlzIGRyaXZlciBuZWVkcyB0aGUgYHBzYXV4JywgYHBzaGludGVyJywgYW5kIGBwc25hbWVzJyBtb2R1bGVzLgotIyBObyBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LgogRk9OVF9NT0RVTEVTICs9IHR5cGUxCiAKICMgQ0ZGL09wZW5UeXBlIGZvbnQgZHJpdmVyLgpAQCAtNDgsMzAgKzQ3LDI0IEBACiAjIFR5cGUgMSBDSUQta2V5ZWQgZm9udCBkcml2ZXIuCiAjCiAjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgcHNhdXgnLCBgcHNoaW50ZXInLCBhbmQgYHBzbmFtZXMnIG1vZHVsZXMuCi0jIE5vIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuCiBGT05UX01PRFVMRVMgKz0gY2lkCiAKICMgUEZSL1RydWVEb2MgZm9udCBkcml2ZXIuICBTZWUgb3B0aW9uYWwgZXh0ZW5zaW9uIGZ0cGZyLmMgYmVsb3cgYWxzby4KLSMgTm8gRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4KIEZPTlRfTU9EVUxFUyArPSBwZnIKIAogIyBQb3N0U2NyaXB0IFR5cGUgNDIgZm9udCBkcml2ZXIuCiAjCiAjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgdHJ1ZXR5cGUnIGFuZCBgcHNhdXgnIG1vZHVsZXMuCi0jIE5vIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuCiBGT05UX01PRFVMRVMgKz0gdHlwZTQyCiAKICMgV2luZG93cyBGT05UL0ZOVCBmb250IGRyaXZlci4gIFNlZSBvcHRpb25hbCBleHRlbnNpb24gZnR3aW5mbnQuYyBiZWxvdwogIyBhbHNvLgotIyBObyBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LgogRk9OVF9NT0RVTEVTICs9IHdpbmZvbnRzCiAKLSMgUENGIGZvbnQgZHJpdmVyLgotIyBObyBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LgorIyBQQ0YgZm9udCBkcml2ZXIuICBJZiBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcgaXMgZW5hYmxlZCwgbmVlZHMgYGZ0Yml0bWFwLmMnLgogRk9OVF9NT0RVTEVTICs9IHBjZgogCiAjIEJERiBmb250IGRyaXZlci4gIFNlZSBvcHRpb25hbCBleHRlbnNpb24gZnRiZGYuYyBiZWxvdyBhbHNvLgotIyBObyBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LgogRk9OVF9NT0RVTEVTICs9IGJkZgogCiAjIFNGTlQgZmlsZXMgc3VwcG9ydC4gIElmIHVzZWQgd2l0aG91dCBgdHJ1ZXR5cGUnIG9yIGBjZmYnLCBpdCBzdXBwb3J0cwpAQCAtMTEzLDQyICsxMDYsMzUgQEAKIAogIyBGcmVlVHlwZSdzIGNhY2hlIHN1Yi1zeXN0ZW0gKHF1aXRlIHN0YWJsZSBidXQgc3RpbGwgaW4gYmV0YSAtLSB0aGlzIG1lYW5zCiAjIHRoYXQgaXRzIHB1YmxpYyBBUEkgaXMgc3ViamVjdCB0byBjaGFuZ2UgaWYgbmVjZXNzYXJ5KS4gIFNlZQotIyBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaC4gIE5lZWRzIGZ0Z2x5cGguYy4KLSMgTm8gRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4KKyMgaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmguICBOZWVkcyBgZnRnbHlwaC5jJy4KIEFVWF9NT0RVTEVTICs9IGNhY2hlCiAKLSMgVHJ1ZVR5cGUgR1gvQUFUIHRhYmxlIHZhbGlkYXRpb24uICBOZWVkcyBmdGd4dmFsLmMgYmVsb3cuCisjIFRydWVUeXBlIEdYL0FBVCB0YWJsZSB2YWxpZGF0aW9uLiAgTmVlZHMgYGZ0Z3h2YWwuYycgYmVsb3cuCiAjCi0jIE5vIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuCiAjIEFVWF9NT0RVTEVTICs9IGd4dmFsaWQKIAogIyBTdXBwb3J0IGZvciBzdHJlYW1zIGNvbXByZXNzZWQgd2l0aCBnemlwIChmaWxlcyB3aXRoIHN1ZmZpeCAuZ3opLgogIwogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaCBmb3IgdGhlIEFQSS4KLSMgTm8gRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4KIEFVWF9NT0RVTEVTICs9IGd6aXAKIAogIyBTdXBwb3J0IGZvciBzdHJlYW1zIGNvbXByZXNzZWQgd2l0aCBMWlcgKGZpbGVzIHdpdGggc3VmZml4IC5aKS4KICMKICMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRsencuaCBmb3IgdGhlIEFQSS4KLSMgTm8gRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4KIEFVWF9NT0RVTEVTICs9IGx6dwogCiAjIFN1cHBvcnQgZm9yIHN0cmVhbXMgY29tcHJlc3NlZCB3aXRoIGJ6aXAyIChmaWxlcyB3aXRoIHN1ZmZpeCAuYnoyKS4KICMKICMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oIGZvciB0aGUgQVBJLgotIyBObyBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0LgogQVVYX01PRFVMRVMgKz0gYnppcDIKIAotIyBPcGVuVHlwZSB0YWJsZSB2YWxpZGF0aW9uLiAgTmVlZHMgZnRvdHZhbC5jIGJlbG93LgorIyBPcGVuVHlwZSB0YWJsZSB2YWxpZGF0aW9uLiAgTmVlZHMgYGZ0b3R2YWwuYycgYmVsb3cuCiAjCi0jIE5vIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuCiAjIEFVWF9NT0RVTEVTICs9IG90dmFsaWQKIAogIyBBdXhpbGlhcnkgUG9zdFNjcmlwdCBkcml2ZXIgY29tcG9uZW50IHRvIHNoYXJlIGNvbW1vbiBjb2RlLgogIwogIyBUaGlzIG1vZHVsZSBkZXBlbmRzIG9uIGBwc25hbWVzJy4KLSMgTm8gRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydC4KIEFVWF9NT0RVTEVTICs9IHBzYXV4CiAKICMgU3VwcG9ydCBmb3IgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4KQEAgLTE4MywxMiArMTY5LDcgQEAKICMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaCBmb3IgdGhlIEFQSS4KIEJBU0VfRVhURU5TSU9OUyArPSBmdGNpZC5jCiAKLSMgU3VwcG9ydCBmdW5jdGlvbnMgZm9yIGZvbnQgZm9ybWF0cy4KLSMKLSMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaCBmb3IgdGhlIEFQSS4KLUJBU0VfRVhURU5TSU9OUyArPSBmdGZudGZtdC5jCi0KLSMgQWNjZXNzIEZTVHlwZSBpbmZvcm1hdGlvbi4gIE5lZWRzIGZ0dHlwZTEuYy4KKyMgQWNjZXNzIEZTVHlwZSBpbmZvcm1hdGlvbi4gIE5lZWRzIGBmdHR5cGUxLmMnLgogIwogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIGZvciB0aGUgQVBJLgogQkFTRV9FWFRFTlNJT05TICs9IGZ0ZnN0eXBlLmMKQEAgLTE5OCw3ICsxNzksNyBAQAogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCBmb3IgdGhlIEFQSS4KIEJBU0VfRVhURU5TSU9OUyArPSBmdGdhc3AuYwogCi0jIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzLiAgTmVlZHMgZnRiaXRtYXAuYy4KKyMgQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBnbHlwaHMuICBOZWVkcyBgZnRiaXRtYXAuYycuCiAjCiAjIFNlZSBpbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaCBmb3IgdGhlIEFQSS4KIEJBU0VfRVhURU5TSU9OUyArPSBmdGdseXBoLmMKQEAgLTIwOCwxMSArMTg5LDYgQEAKICMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oIGZvciB0aGUgQVBJLgogQkFTRV9FWFRFTlNJT05TICs9IGZ0Z3h2YWwuYwogCi0jIFN1cHBvcnQgZm9yIExDRCBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwcy4KLSMKLSMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCBmb3IgdGhlIEFQSS4KLUJBU0VfRVhURU5TSU9OUyArPSBmdGxjZGZpbC5jCi0KICMgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlLgogIwogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdG1tLmggZm9yIHRoZSBBUEkuCkBAIC0yMzMsMTIgKzIwOSwxMyBAQAogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oIGZvciB0aGUgQVBJLgogQkFTRV9FWFRFTlNJT05TICs9IGZ0cGZyLmMKIAotIyBQYXRoIHN0cm9rZXIuICBOZWVkcyBmdGdseXBoLmMuCisjIFBhdGggc3Ryb2tlci4gIE5lZWRzIGBmdGdseXBoLmMnLgogIwogIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oIGZvciB0aGUgQVBJLgogQkFTRV9FWFRFTlNJT05TICs9IGZ0c3Ryb2tlLmMKIAotIyBTdXBwb3J0IGZvciBzeW50aGV0aWMgZW1ib2xkZW5pbmcgYW5kIHNsYW50aW5nIG9mIGZvbnRzLiAgTmVlZHMgZnRiaXRtYXAuYy4KKyMgU3VwcG9ydCBmb3Igc3ludGhldGljIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZyBvZiBmb250cy4gIE5lZWRzCisjIGBmdGJpdG1hcC5jJy4KICMKICMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oIGZvciB0aGUgQVBJLgogQkFTRV9FWFRFTlNJT05TICs9IGZ0c3ludGguYwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuYyBiL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKaW5kZXggYzY1YTNhZS4uZjdiMWMyYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jCkBAIC0xLDI4ICsxLDI4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmFuZ2xlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUm91dGluZXMgdXNlZCB0byBjb21wdXRlIHZlY3RvciBhbmdsZXMgd2l0aCBsaW1pdGVkIGFjY3VyYWN5ICAgICAgICAgKi8KLS8qICAgIGFuZCB2ZXJ5IGhpZ2ggc3BlZWQuICBJdCBhbHNvIGNvbnRhaW5zIHNvcnRpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZhbmdsZXMuYworICoKKyAqICAgUm91dGluZXMgdXNlZCB0byBjb21wdXRlIHZlY3RvciBhbmdsZXMgd2l0aCBsaW1pdGVkIGFjY3VyYWN5CisgKiAgIGFuZCB2ZXJ5IGhpZ2ggc3BlZWQuICBJdCBhbHNvIGNvbnRhaW5zIHNvcnRpbmcgcm91dGluZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiYWZ0eXBlcy5oIgogCiAKICAgLyoKLSAgICogIFdlIGFyZSBub3QgdXNpbmcgYGFmX2FuZ2xlX2F0YW4nIGFueW1vcmUsIGJ1dCB3ZSBrZWVwIHRoZSBzb3VyY2UKLSAgICogIGNvZGUgYmVsb3cganVzdCBpbiBjYXNlLi4uCisgICAqIFdlIGFyZSBub3QgdXNpbmcgYGFmX2FuZ2xlX2F0YW4nIGFueW1vcmUsIGJ1dCB3ZSBrZWVwIHRoZSBzb3VyY2UKKyAgICogY29kZSBiZWxvdyBqdXN0IGluIGNhc2UuLi4KICAgICovCiAKIApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIAogICAvKgotICAgKiAgVGhlIHRyaWNrIGhlcmUgaXMgdG8gcmVhbGl6ZSB0aGF0IHdlIGRvbid0IG5lZWQgYSB2ZXJ5IGFjY3VyYXRlIGFuZ2xlCi0gICAqICBhcHByb3hpbWF0aW9uLiAgV2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVzdWx0IG9mIGBhZl9hbmdsZV9hdGFuJyB0bwotICAgKiAgb25seSBjb21wYXJlIHRoZSBzaWduIG9mIGFuZ2xlIGRpZmZlcmVuY2VzLCBvciBjaGVjayB3aGV0aGVyIGl0cwotICAgKiAgbWFnbml0dWRlIGlzIHZlcnkgc21hbGwuCisgICAqIFRoZSB0cmljayBoZXJlIGlzIHRvIHJlYWxpemUgdGhhdCB3ZSBkb24ndCBuZWVkIGEgdmVyeSBhY2N1cmF0ZSBhbmdsZQorICAgKiBhcHByb3hpbWF0aW9uLiAgV2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcmVzdWx0IG9mIGBhZl9hbmdsZV9hdGFuJyB0bworICAgKiBvbmx5IGNvbXBhcmUgdGhlIHNpZ24gb2YgYW5nbGUgZGlmZmVyZW5jZXMsIG9yIGNoZWNrIHdoZXRoZXIgaXRzCisgICAqIG1hZ25pdHVkZSBpcyB2ZXJ5IHNtYWxsLgogICAgKgotICAgKiAgVGhlIGFwcHJveGltYXRpb24KKyAgICogVGhlIGFwcHJveGltYXRpb24KICAgICoKLSAgICogICAgZHkgKiBQSSAvICh8ZHh8K3xkeXwpCisgICAqICAgZHkgKiBQSSAvICh8ZHh8K3xkeXwpCiAgICAqCi0gICAqICBzaG91bGQgYmUgZW5vdWdoLCBhbmQgbXVjaCBmYXN0ZXIgdG8gY29tcHV0ZS4KKyAgICogc2hvdWxkIGJlIGVub3VnaCwgYW5kIG11Y2ggZmFzdGVyIHRvIGNvbXB1dGUuCiAgICAqLwogICBGVF9MT0NBTF9ERUYoIEFGX0FuZ2xlICkKICAgYWZfYW5nbGVfYXRhbiggRlRfRml4ZWQgIGR4LApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuaCBiL3NyYy9hdXRvZml0L2FmYW5nbGVzLmgKaW5kZXggZjMzZjllMS4uMThkN2RhZSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBhZmFuZ2xlcy5oCisgKiBhZmFuZ2xlcy5oCiAgKgotICogIFRoaXMgaXMgYSBkdW1teSBmaWxlLCB1c2VkIHRvIHBsZWFzZSB0aGUgYnVpbGQgc3lzdGVtLiAgSXQgaXMgbmV2ZXIKLSAqICBpbmNsdWRlZCBieSB0aGUgYXV0by1maXR0ZXIgc291cmNlcy4KKyAqIFRoaXMgaXMgYSBkdW1teSBmaWxlLCB1c2VkIHRvIHBsZWFzZSB0aGUgYnVpbGQgc3lzdGVtLiAgSXQgaXMgbmV2ZXIKKyAqIGluY2x1ZGVkIGJ5IHRoZSBhdXRvLWZpdHRlciBzb3VyY2VzLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmMgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuYwppbmRleCA2MWFiNzk1Li45YjBhYzEzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuYworKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuYwpAQCAtMSwyMiArMSwyMiBAQAogLyogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSB0aGUgUGVybCBzY3JpcHQgYGFmYmx1ZS5wbCcsICovCiAvKiB1c2luZyBkYXRhIGZyb20gZmlsZSBgYWZibHVlLmRhdCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZibHVlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZibHVlLmMKKyAqCisgKiAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMTMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJhZnR5cGVzLmgiCkBAIC0xNjYsNiArMTY2LDEwIEBACiAgICAgJ1wwJywKICAgICAnXHhFMicsICdceEI0JywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4NScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDgyJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTgnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5RCcsICAvKiDitIQg4rSFIOK0lCDitJUg4rSBIOK0giDitJgg4rSdICovCiAgICAgJ1wwJywKKyAgICAnXHhFMScsICdceEIyJywgJ1x4OUMnLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHg5RicsICcgJywgJ1x4RTEnLCAnXHhCMicsICdceEIzJywgJyAnLCAnXHhFMScsICdceEIyJywgJ1x4QjgnLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHg5MicsICcgJywgJ1x4RTEnLCAnXHhCMicsICdceDk0JywgJyAnLCAnXHhFMScsICdceEIyJywgJ1x4OUQnLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHhCNCcsICAvKiDhspwg4bKfIOGysyDhsrgg4bKSIOGylCDhsp0g4bK0ICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceEIyJywgJ1x4OTgnLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHhCMicsICcgJywgJ1x4RTEnLCAnXHhCMicsICdceDlEJywgJyAnLCAnXHhFMScsICdceEIyJywgJ1x4QTknLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHhCMicsICdceEE4JywgJyAnLCAnXHhFMScsICdceEIyJywgJ1x4QUYnLCAnICcsICdceEUxJywgJ1x4QjInLCAnXHhCRCcsICAvKiDhspgg4bKyIOGynSDhsqkg4bKbIOGyqCDhsq8g4bK9ICovCisgICAgJ1wwJywKICAgICAnXHhFMicsICdceEIwJywgJ1x4ODUnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg5NCcsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEFBJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceDhBJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4QUInLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg4QicsICAvKiDisIUg4rCUIOKwqiDisIQg4rCCIOKwiiDisKsg4rCLICovCiAgICAgJ1wwJywKICAgICAnXHhFMicsICdceEIwJywgJ1x4ODUnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg4NCcsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceDgyJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4QUEnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg5RScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEExJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4OEEnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg5NCcsICAvKiDisIUg4rCEIOKwgiDisKog4rCeIOKwoSDisIog4rCUICovCkBAIC01MzksNiArNTQzLDggQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01UQVZSVUxJX1RPUCwgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTVRBVlJVTElfQk9UVE9NLCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4KaW5kZXggNDkxM2UyZS4uYjc0MzdlMyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmJsdWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmJsdWUuYworICoKKyAqICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0CmluZGV4IGQzY2M0MjguLjFiOGQ1ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQKKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmRhdApAQCAtMSwxNSArMSwxNSBAQAotLy8gIGFmYmx1ZS5kYXQKKy8vIGFmYmx1ZS5kYXQKIC8vCi0vLyAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MuCisvLyAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncy4KIC8vCi0vLyAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieQotLy8gIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKy8vIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKy8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCi0vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAotLy8gIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0Ci0vLyAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCi0vLyAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCi0vLyAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorLy8gbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKy8vIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorLy8gdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisvLyB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCiAKIAogLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgc3BlY2lmaWMgdG8gYmx1ZSB6b25lcy4gIEl0IGdldHMgcHJvY2Vzc2VkIGJ5CkBAIC0yNDIsNiArMjQyLDExIEBACiAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0RFU0NFTkRFUgogICAgICLitIQg4rSFIOK0lCDitJUg4rSBIOK0giDitJgg4rSdIgogCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01UQVZSVUxJX1RPUAorICAgICLhspwg4bKfIOGysyDhsrgg4bKSIOGylCDhsp0g4bK0IgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NVEFWUlVMSV9CT1RUT00KKyAgICAi4bKYIOGysiDhsp0g4bKpIOGymyDhsqgg4bKvIOGyvSIKKwogICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfVE9QCiAgICAgIuKwhSDisJQg4rCqIOKwhCDisIIg4rCKIOKwqyDisIsiCiAgIEFGX0JMVUVfU1RSSU5HX0dMQUdPTElUSUNfQ0FQSVRBTF9CT1RUT00KQEAgLTc5NSwxMyArODAwLDE0IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gIC8vIGJsdWUgem9uZXMgZm9yIE10YXZydWxpIGFyZSBtaXNzaW5nIChub3QgeWV0IGRlZmluZWQgaW4gVW5pY29kZSkKICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPUgogICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTVRBVlJVTElfVE9QLCAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01UQVZSVUxJX0JPVFRPTSwgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT0sKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oIGIvc3JjL2F1dG9maXQvYWZibHVlLmgKaW5kZXggNTZiNTkxYS4uMWZiYWRiZSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmgKKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmgKQEAgLTEsMjIgKzEsMjIgQEAKIC8qIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIFBlcmwgc2NyaXB0IGBhZmJsdWUucGwnLCAqLwogLyogdXNpbmcgZGF0YSBmcm9tIGZpbGUgYGFmYmx1ZS5kYXQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmYmx1ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmYmx1ZS5oCisgKgorICogICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGQkxVRV9IXwpAQCAtMTQ3LDExOSArMTQ3LDEyMSBAQAogICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0JPVFRPTSA9IDE4MTMsCiAgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIgPSAxODQ1LAogICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0RFU0NFTkRFUiA9IDE4NzcsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19DQVBJVEFMX1RPUCA9IDE5MDksCi0gICAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19DQVBJVEFMX0JPVFRPTSA9IDE5NDEsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9UT1AgPSAxOTczLAotICAgIEFGX0JMVUVfU1RSSU5HX0dMQUdPTElUSUNfU01BTExfQk9UVE9NID0gMjAwNSwKLSAgICBBRl9CTFVFX1NUUklOR19HT1RISUNfVE9QID0gMjAzNywKLSAgICBBRl9CTFVFX1NUUklOR19HT1RISUNfQk9UVE9NID0gMjA3NywKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX1RPUCA9IDIwOTcsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00gPSAyMTE4LAotICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0JFVEFfVE9QID0gMjEzNiwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTCA9IDIxNTQsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfREVTQ0VOREVSID0gMjE3OCwKLSAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9UT1AgPSAyMjAyLAotICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0JPVFRPTSA9IDIyMzQsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQVNDRU5ERVIgPSAyMjY2LAotICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0RFU0NFTkRFUiA9IDIzMTYsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfRElHSVRfVE9QID0gMjM0OSwKLSAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9CQVNFID0gMjM2OSwKLSAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9IRUFEID0gMjQwMSwKLSAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9UT1AgPSAyNDMzLAotICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JPVFRPTSA9IDI0NjUsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfRElHSVRfVE9QID0gMjQ5NywKLSAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfVE9QID0gMjUxNywKLSAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NID0gMjU0MSwKLSAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSID0gMjU1OSwKLSAgICBBRl9CTFVFX1NUUklOR19LQU5OQURBX1RPUCA9IDI1NzQsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9CT1RUT00gPSAyNjE4LAotICAgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX1RPUCA9IDI2NTAsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfQk9UVE9NID0gMjY3NCwKLSAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9BU0NFTkRFUiA9IDI2OTQsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfREVTQ0VOREVSID0gMjcwMiwKLSAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9MQVJHRV9ERVNDRU5ERVIgPSAyNzE0LAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1RPUCA9IDI3MzUsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1VCU0NSSVBUX1RPUCA9IDI3NTksCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfQk9UVE9NID0gMjc5OSwKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9ERVNDRU5ERVIgPSAyODMxLAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0xBUkdFX0RFU0NFTkRFUiA9IDI4NjUsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQVhJTkdfVE9QID0gMjk1MiwKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00gPSAyOTYwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19UT1AgPSAyOTY4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19CT1RUT00gPSAzMDAwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19BU0NFTkRFUiA9IDMwMzIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFPX0xBUkdFX0FTQ0VOREVSID0gMzA0OCwKLSAgICBBRl9CTFVFX1NUUklOR19MQU9fREVTQ0VOREVSID0gMzA2MCwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX1RPUCA9IDMwODQsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9CT1RUT00gPSAzMTAwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QID0gMzExNiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9UT1AgPSAzMTMwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0JPVFRPTSA9IDMxNDYsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfREVTQ0VOREVSID0gMzE2MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfVE9QID0gMzE3MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfQk9UVE9NID0gMzE5MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMX0ZfVE9QID0gMzIxMiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMID0gMzIzMiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMX0RFU0NFTkRFUiA9IDMyNjgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19DQVBJVEFMX1RPUCA9IDMyODgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19DQVBJVEFMX0JPVFRPTSA9IDMzMTksCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTF9GX1RPUCA9IDMzNDgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTCA9IDMzNzQsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTF9ERVNDRU5ERVIgPSAzMzk5LAotICAgIEFGX0JMVUVfU1RSSU5HX0xJU1VfVE9QID0gMzQxMCwKLSAgICBBRl9CTFVFX1NUUklOR19MSVNVX0JPVFRPTSA9IDM0NDIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCA9IDM0NzQsCi0gICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSA9IDM1MTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9UT1AgPSAzNTUwLAotICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQk9UVE9NID0gMzU4MiwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSID0gMzYxNCwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiA9IDM2NDIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTktPX1RPUCA9IDM2NzQsCi0gICAgQUZfQkxVRV9TVFJJTkdfTktPX0JPVFRPTSA9IDM2OTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX1RPUCA9IDM3MTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX0JPVFRPTSA9IDM3MjIsCi0gICAgQUZfQkxVRV9TVFJJTkdfT0xfQ0hJS0kgPSAzNzM0LAotICAgIEFGX0JMVUVfU1RSSU5HX09MRF9UVVJLSUNfVE9QID0gMzc1OCwKLSAgICBBRl9CTFVFX1NUUklOR19PTERfVFVSS0lDX0JPVFRPTSA9IDM3NzMsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9UT1AgPSAzNzkzLAotICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfQk9UVE9NID0gMzgzMywKLSAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX0RFU0NFTkRFUiA9IDM4NjMsCi0gICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfVE9QID0gMzg3OCwKLSAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9CT1RUT00gPSAzOTE4LAotICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0FTQ0VOREVSID0gMzk1OCwKLSAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9ERVNDRU5ERVIgPSAzOTgzLAotICAgIEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfVE9QID0gMzk5OCwKLSAgICBBRl9CTFVFX1NUUklOR19PU01BTllBX0JPVFRPTSA9IDQwMzgsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9UT1AgPSA0MDc4LAotICAgIEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfQk9UVE9NID0gNDExMCwKLSAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1RPUCA9IDQxMzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9CT1RUT00gPSA0MTQwLAotICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fREVTQ0VOREVSID0gNDE2NSwKLSAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX1RPUCA9IDQxNzUsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9TTUFMTF9CT1RUT00gPSA0MjEwLAotICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfVE9QID0gNDIyNSwKLSAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTSA9IDQyNTcsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9ERVNDRU5ERVIgPSA0Mjg5LAotICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9UT1AgPSA0MzMzLAotICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9CT1RUT00gPSA0MzU3LAotICAgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9ERVNDRU5ERVIgPSA0Mzg5LAotICAgIEFGX0JMVUVfU1RSSU5HX1RBSV9WSUVUX1RPUCA9IDQzOTcsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfQk9UVE9NID0gNDQxNywKLSAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9UT1AgPSA0NDI5LAotICAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX0JPVFRPTSA9IDQ0NjEsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCA9IDQ0OTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSA9IDQ1MjEsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9UT1AgPSA0NTQ5LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQk9UVE9NID0gNDU3MywKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0FTQ0VOREVSID0gNDYwMSwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0FTQ0VOREVSID0gNDYxMywKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0RFU0NFTkRFUiA9IDQ2MjUsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIgPSA0NjQxLAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QID0gNDY0OSwKLSAgICBBRl9CTFVFX1NUUklOR19USUZJTkFHSCA9IDQ2NjEsCi0gICAgQUZfQkxVRV9TVFJJTkdfVkFJX1RPUCA9IDQ2OTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTSA9IDQ3MjUsCi0gICAgYWZfYmx1ZV8xXzEgPSA0NzU2LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01UQVZSVUxJX1RPUCA9IDE5MDksCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTVRBVlJVTElfQk9UVE9NID0gMTk0MSwKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfVE9QID0gMTk3MywKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfQk9UVE9NID0gMjAwNSwKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX1NNQUxMX1RPUCA9IDIwMzcsCisgICAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9CT1RUT00gPSAyMDY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dPVEhJQ19UT1AgPSAyMTAxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dPVEhJQ19CT1RUT00gPSAyMTQxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QID0gMjE2MSwKKyAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSA9IDIxODIsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AgPSAyMjAwLAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMID0gMjIxOCwKKyAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAyMjQyLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCA9IDIyNjYsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NID0gMjI5OCwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUiA9IDIzMzAsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfREVTQ0VOREVSID0gMjM4MCwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AgPSAyNDEzLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UgPSAyNDMzLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0hFQUQgPSAyNDY1LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCA9IDI0OTcsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NID0gMjUyOSwKKyAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AgPSAyNTYxLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AgPSAyNTgxLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00gPSAyNjA1LAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAyNjIzLAorICAgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QID0gMjYzOCwKKyAgICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTSA9IDI2ODIsCisgICAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfVE9QID0gMjcxNCwKKyAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9CT1RUT00gPSAyNzM4LAorICAgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0FTQ0VOREVSID0gMjc1OCwKKyAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9ERVNDRU5ERVIgPSAyNzY2LAorICAgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0xBUkdFX0RFU0NFTkRFUiA9IDI3NzgsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QID0gMjc5OSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QID0gMjgyMywKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9CT1RUT00gPSAyODYzLAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiA9IDI4OTUsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfTEFSR0VfREVTQ0VOREVSID0gMjkyOSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBWElOR19UT1AgPSAzMDE2LAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTSA9IDMwMjQsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCA9IDMwMzIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSA9IDMwNjQsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSID0gMzA5NiwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIgPSAzMTEyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIgPSAzMTI0LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gMzE0OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSA9IDMxNjQsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AgPSAzMTgwLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX1RPUCA9IDMxOTQsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfQk9UVE9NID0gMzIxMCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIgPSAzMjI2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9UT1AgPSAzMjM2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00gPSAzMjU2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfRl9UT1AgPSAzMjc2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTEwgPSAzMjk2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSID0gMzMzMiwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfVE9QID0gMzM1MiwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NID0gMzM4MywKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QID0gMzQxMiwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMID0gMzQzOCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiA9IDM0NjMsCisgICAgQUZfQkxVRV9TVFJJTkdfTElTVV9UT1AgPSAzNDc0LAorICAgIEFGX0JMVUVfU1RSSU5HX0xJU1VfQk9UVE9NID0gMzUwNiwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fVE9QID0gMzUzOCwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NID0gMzU4MiwKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCA9IDM2MTQsCisgICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00gPSAzNjQ2LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIgPSAzNjc4LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSID0gMzcwNiwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fVE9QID0gMzczOCwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fQk9UVE9NID0gMzc2MiwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfVE9QID0gMzc3NywKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfQk9UVE9NID0gMzc4NiwKKyAgICBBRl9CTFVFX1NUUklOR19PTF9DSElLSSA9IDM3OTgsCisgICAgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19UT1AgPSAzODIyLAorICAgIEFGX0JMVUVfU1RSSU5HX09MRF9UVVJLSUNfQk9UVE9NID0gMzgzNywKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX1RPUCA9IDM4NTcsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9CT1RUT00gPSAzODk3LAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfREVTQ0VOREVSID0gMzkyNywKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9UT1AgPSAzOTQyLAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0JPVFRPTSA9IDM5ODIsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQVNDRU5ERVIgPSA0MDIyLAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0RFU0NFTkRFUiA9IDQwNDcsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AgPSA0MDYyLAorICAgIEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NID0gNDEwMiwKKyAgICBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX1RPUCA9IDQxNDIsCisgICAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9CT1RUT00gPSA0MTc0LAorICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fVE9QID0gNDE5NCwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX0JPVFRPTSA9IDQyMDQsCisgICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9ERVNDRU5ERVIgPSA0MjI5LAorICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fU01BTExfVE9QID0gNDIzOSwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX0JPVFRPTSA9IDQyNzQsCisgICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AgPSA0Mjg5LAorICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfQk9UVE9NID0gNDMyMSwKKyAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiA9IDQzNTMsCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX1RPUCA9IDQzOTcsCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0JPVFRPTSA9IDQ0MjEsCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0RFU0NFTkRFUiA9IDQ0NTMsCisgICAgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfVE9QID0gNDQ2MSwKKyAgICBBRl9CTFVFX1NUUklOR19UQUlfVklFVF9CT1RUT00gPSA0NDgxLAorICAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX1RPUCA9IDQ0OTMsCisgICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NID0gNDUyNSwKKyAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QID0gNDU1NywKKyAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NID0gNDU4NSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX1RPUCA9IDQ2MTMsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00gPSA0NjM3LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQVNDRU5ERVIgPSA0NjY1LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIgPSA0Njc3LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSID0gNDY4OSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0RFU0NFTkRFUiA9IDQ3MDUsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AgPSA0NzEzLAorICAgIEFGX0JMVUVfU1RSSU5HX1RJRklOQUdIID0gNDcyNSwKKyAgICBBRl9CTFVFX1NUUklOR19WQUlfVE9QID0gNDc1NywKKyAgICBBRl9CTFVFX1NUUklOR19WQUlfQk9UVE9NID0gNDc4OSwKKyAgICBhZl9ibHVlXzFfMSA9IDQ4MjAsCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICAgICBBRl9CTFVFX1NUUklOR19DSktfVE9QID0gYWZfYmx1ZV8xXzEgKyAxLAogICAgIEFGX0JMVUVfU1RSSU5HX0NKS19CT1RUT00gPSBhZl9ibHVlXzFfMSArIDIwMywKQEAgLTMzNiw0MSArMzM4LDQxIEBACiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfRFNSVCA9IDc1LAogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0VUSEkgPSA4MCwKICAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9SID0gODMsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPSyA9IDg4LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dMQUcgPSA5NSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9HT1RIID0gMTAwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsgPSAxMDMsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VKUiA9IDExMCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9HVVJVID0gMTE2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hFQlIgPSAxMjIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfS0FMSSA9IDEyNiwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1SID0gMTMyLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVMgPSAxMzgsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQSA9IDE0MSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9MQU8gPSAxNDQsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDE1MCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRCID0gMTU3LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVFAgPSAxNjQsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTElTVSA9IDE3MSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNID0gMTc0LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIgPSAxNzcsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTktPTyA9IDE4MiwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9OT05FID0gMTg3LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX09MQ0sgPSAxODgsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfT1JLSCA9IDE5MSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9PU0dFID0gMTk0LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX09TTUEgPSAyMDIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfU0FVUiA9IDIwNSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9TSEFXID0gMjA4LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkggPSAyMTQsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfU1VORCA9IDIxOCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9UQU1MID0gMjIyLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBVlQgPSAyMjUsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVSA9IDIyOCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9URk5HID0gMjMxLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUkgPSAyMzQsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVkFJSSA9IDI0MiwKLSAgICBhZl9ibHVlXzJfMSA9IDI0NSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9LID0gOTAsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0xBRyA9IDk3LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dPVEggPSAxMDIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1JFSyA9IDEwNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HVUpSID0gMTEyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dVUlUgPSAxMTgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEVCUiA9IDEyNCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LQUxJID0gMTI4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVIgPSAxMzQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUyA9IDE0MCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LTkRBID0gMTQzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTyA9IDE0NiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVROID0gMTUyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVEIgPSAxNTksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUUCA9IDE2NiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MSVNVID0gMTczLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX01MWU0gPSAxNzYsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTVlNUiA9IDE3OSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9OS09PID0gMTg0LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX05PTkUgPSAxODksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfT0xDSyA9IDE5MCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9PUktIID0gMTkzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX09TR0UgPSAxOTYsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfT1NNQSA9IDIwNCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9TQVVSID0gMjA3LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NIQVcgPSAyMTAsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSCA9IDIxNiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9TVU5EID0gMjIwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBTUwgPSAyMjQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFWVCA9IDIyNywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9URUxVID0gMjMwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RGTkcgPSAyMzMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEhBSSA9IDIzNiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9WQUlJID0gMjQ0LAorICAgIGFmX2JsdWVfMl8xID0gMjQ3LAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fQ0pLCiAgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEFOSSA9IGFmX2JsdWVfMl8xICsgMCwKICAgICBhZl9ibHVlXzJfMV8xID0gYWZfYmx1ZV8yXzEgKyAyLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmhpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KaW5kZXggNjgyMTQ3Yy4uM2YxZDMxMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmhpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmJsdWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmJsdWUuaAorICoKKyAqICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBBRkJMVUVfSF8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmY2prLmMgYi9zcmMvYXV0b2ZpdC9hZmNqay5jCmluZGV4IDIxYjZiZmYuLmRjMzgxNTMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmY2prLmMKKysrIGIvc3JjL2F1dG9maXQvYWZjamsuYwpAQCAtMSwyNCArMSwyNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZjamsuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZjamsuYworICoKKyAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICAgLyoKLSAgICogIFRoZSBhbGdvcml0aG0gaXMgYmFzZWQgb24gYWtpdG8ncyBhdXRvaGludCBwYXRjaCwgYXJjaGl2ZWQgYXQKKyAgICogVGhlIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBha2l0bydzIGF1dG9oaW50IHBhdGNoLCBhcmNoaXZlZCBhdAogICAgKgotICAgKiAgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDUxMjE5MTYwNDU0L2h0dHA6Ly93d3cua2RlLmdyLmpwOjgwL35ha2l0by9wYXRjaC9mcmVldHlwZTIvMi4xLjcvCisgICAqIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA1MTIxOTE2MDQ1NC9odHRwOi8vd3d3LmtkZS5nci5qcDo4MC9+YWtpdG8vcGF0Y2gvZnJlZXR5cGUyLzIuMS43LwogICAgKgogICAgKi8KIApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKLSNpbmNsdWRlICJhZnBpYy5oIgogI2luY2x1ZGUgImFmbGF0aW4uaCIKICNpbmNsdWRlICJhZmNqay5oIgogCkBAIC00NCwxMiArNDMsMTIgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmY2prCiAKQEAgLTkyLDIzICs5MSwyOSBAQAogICAgICAgQUZfQ0pLTWV0cmljc1JlYyAgZHVtbXlbMV07CiAgICAgICBBRl9TY2FsZXIgICAgICAgICBzY2FsZXIgPSAmZHVtbXktPnJvb3Quc2NhbGVyOwogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICAgIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzID0gbWV0cmljcy0+cm9vdC5nbG9iYWxzOworICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzICA9IG1ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3M7CisgICAgICBBRl9TY3JpcHRDbGFzcyAgc2NyaXB0X2NsYXNzID0gYWZfc2NyaXB0X2NsYXNzZXNbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICAgIC8qIElmIEhhcmZCdXp6IGlzIG5vdCBhdmFpbGFibGUsIHdlIG5lZWQgYSBwb2ludGVyIHRvIGEgc2luZ2xlICovCisgICAgICAvKiB1bnNpZ25lZCBsb25nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZjsKKyNlbHNlCisgICAgICBGVF9VTG9uZyAgc2hhcGVyX2J1Zl87CisgICAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZiA9ICZzaGFwZXJfYnVmXzsKICNlbmRpZgogCi0gICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzczsKLSAgICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKLQotICAgICAgdm9pZCogICAgICAgIHNoYXBlcl9idWY7CiAgICAgICBjb25zdCBjaGFyKiAgcDsKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICBGVF9VTG9uZyAgY2ggPSAwOwogI2VuZGlmCiAKLSAgICAgIHAgICAgICAgICAgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXJzdHJpbmc7CisgICAgICBwID0gc2NyaXB0X2NsYXNzLT5zdGFuZGFyZF9jaGFyc3RyaW5nOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKICAgICAgIHNoYXBlcl9idWYgPSBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggZmFjZSApOworI2VuZGlmCiAKICAgICAgIC8qIFdlIGNoZWNrIGEgbGlzdCBvZiBzdGFuZGFyZCBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IG1hdGNoIHdpbnMuICovCiAKQEAgLTE5MywxMCArMTk4LDEwIEBACiAgICAgICAgICAgZ290byBFeGl0OwogCiAgICAgICAgIC8qCi0gICAgICAgICAqICBXZSBhc3N1bWUgdGhhdCB0aGUgZ2x5cGhzIHNlbGVjdGVkIGZvciB0aGUgc3RlbSB3aWR0aAotICAgICAgICAgKiAgY29tcHV0YXRpb24gYXJlIGBmZWF0dXJlbGVzcycgZW5vdWdoIHNvIHRoYXQgdGhlIGxpbmtpbmcKLSAgICAgICAgICogIGFsZ29yaXRobSB3b3JrcyBmaW5lIHdpdGhvdXQgYWRqdXN0bWVudHMgb2YgaXRzIHNjb3JpbmcKLSAgICAgICAgICogIGZ1bmN0aW9uLgorICAgICAgICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgZ2x5cGhzIHNlbGVjdGVkIGZvciB0aGUgc3RlbSB3aWR0aAorICAgICAgICAgKiBjb21wdXRhdGlvbiBhcmUgYGZlYXR1cmVsZXNzJyBlbm91Z2ggc28gdGhhdCB0aGUgbGlua2luZworICAgICAgICAgKiBhbGdvcml0aG0gd29ya3MgZmluZSB3aXRob3V0IGFkanVzdG1lbnRzIG9mIGl0cyBzY29yaW5nCisgICAgICAgICAqIGZ1bmN0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgYWZfbGF0aW5faGludHNfbGlua19zZWdtZW50cyggaGludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCkBAIC0yOTYsNyArMzAxLDE0IEBACiAgICAgQUZfQmx1ZV9TdHJpbmdzZXQgICAgICAgICBic3MgPSBzYy0+Ymx1ZV9zdHJpbmdzZXQ7CiAgICAgY29uc3QgQUZfQmx1ZV9TdHJpbmdSZWMqICBicyAgPSAmYWZfYmx1ZV9zdHJpbmdzZXRzW2Jzc107CiAKLSAgICB2b2lkKiAgc2hhcGVyX2J1ZjsKKyAgICAvKiBJZiBIYXJmQnV6eiBpcyBub3QgYXZhaWxhYmxlLCB3ZSBuZWVkIGEgcG9pbnRlciB0byBhIHNpbmdsZSAqLworICAgIC8qIHVuc2lnbmVkIGxvbmcgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKKyAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZjsKKyNlbHNlCisgICAgRlRfVUxvbmcgIHNoYXBlcl9idWZfOworICAgIHZvaWQqICAgICBzaGFwZXJfYnVmID0gJnNoYXBlcl9idWZfOworI2VuZGlmCiAKIAogICAgIC8qIHdlIHdhbGsgb3ZlciB0aGUgYmx1ZSBjaGFyYWN0ZXIgc3RyaW5ncyBhcyBzcGVjaWZpZWQgaW4gdGhlICAgKi8KQEAgLTMwNyw3ICszMTksOSBAQAogICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogICAgICAgICAgICAgICAgICJcbiIgKSk7CiAKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgogICAgIHNoYXBlcl9idWYgPSBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggZmFjZSApOworI2VuZGlmCiAKICAgICBmb3IgKCA7IGJzLT5zdHJpbmcgIT0gQUZfQkxVRV9TVFJJTkdfTUFYOyBicysrICkKICAgICB7CkBAIC00ODMsOCArNDk3LDggQEAKICAgICAgIGlmICggbnVtX2ZsYXRzID09IDAgJiYgbnVtX2ZpbGxzID09IDAgKQogICAgICAgewogICAgICAgICAvKgotICAgICAgICAgKiAgd2UgY291bGRuJ3QgZmluZCBhIHNpbmdsZSBnbHlwaCB0byBjb21wdXRlIHRoaXMgYmx1ZSB6b25lLAotICAgICAgICAgKiAgd2Ugd2lsbCBzaW1wbHkgaWdub3JlIGl0IHRoZW4KKyAgICAgICAgICogd2UgY291bGRuJ3QgZmluZCBhIHNpbmdsZSBnbHlwaCB0byBjb21wdXRlIHRoaXMgYmx1ZSB6b25lLAorICAgICAgICAgKiB3ZSB3aWxsIHNpbXBseSBpZ25vcmUgaXQgdGhlbgogICAgICAgICAgKi8KICAgICAgICAgRlRfVFJBQ0U1KCggIiAgZW1wdHlcbiIgKSk7CiAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTY1LDE1ICs1NzksMjUgQEAKICAgICBGVF9Cb29sICAgc3RhcnRlZCA9IDAsIHNhbWVfd2lkdGggPSAxOwogICAgIEZUX0ZpeGVkICBhZHZhbmNlID0gMCwgb2xkX2FkdmFuY2UgPSAwOwogCi0gICAgdm9pZCogIHNoYXBlcl9idWY7CisgICAgLyogSWYgSGFyZkJ1enogaXMgbm90IGF2YWlsYWJsZSwgd2UgbmVlZCBhIHBvaW50ZXIgdG8gYSBzaW5nbGUgKi8KKyAgICAvKiB1bnNpZ25lZCBsb25nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgdm9pZCogICAgIHNoYXBlcl9idWY7CisjZWxzZQorICAgIEZUX1VMb25nICBzaGFwZXJfYnVmXzsKKyAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZiA9ICZzaGFwZXJfYnVmXzsKKyNlbmRpZgogCiAgICAgLyogaW4gYWxsIHN1cHBvcnRlZCBjaGFybWFwcywgZGlnaXRzIGhhdmUgY2hhcmFjdGVyIGNvZGVzIDB4MzAtMHgzOSAqLwogICAgIGNvbnN0IGNoYXIgICBkaWdpdHNbXSA9ICIwIDEgMiAzIDQgNSA2IDcgOCA5IjsKICAgICBjb25zdCBjaGFyKiAgcDsKIAogCi0gICAgcCAgICAgICAgICA9IGRpZ2l0czsKKyAgICBwID0gZGlnaXRzOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKICAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKKyNlbmRpZgogCiAgICAgd2hpbGUgKCAqcCApCiAgICAgewpAQCAtODkwLDExICs5MTQsMTEgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqICBub3cgY29tcHV0ZSB0aGUgYHNlcmlmJyBzZWdtZW50cworICAgICAqIG5vdyBjb21wdXRlIHRoZSBgc2VyaWYnIHNlZ21lbnRzCiAgICAgICoKLSAgICAgKiAgSW4gSGFuemksIHNvbWUgc3Ryb2tlcyBhcmUgd2lkZXIgb24gb25lIG9yIGJvdGggb2YgdGhlIGVuZHMuCi0gICAgICogIFdlIGVpdGhlciBpZGVudGlmeSB0aGUgc3RlbXMgb24gdGhlIGVuZHMgYXMgc2VyaWZzIG9yIHJlbW92ZQotICAgICAqICB0aGUgbGlua2FnZSwgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgdGhlIHN0ZW1zLgorICAgICAqIEluIEhhbnppLCBzb21lIHN0cm9rZXMgYXJlIHdpZGVyIG9uIG9uZSBvciBib3RoIG9mIHRoZSBlbmRzLgorICAgICAqIFdlIGVpdGhlciBpZGVudGlmeSB0aGUgc3RlbXMgb24gdGhlIGVuZHMgYXMgc2VyaWZzIG9yIHJlbW92ZQorICAgICAqIHRoZSBsaW5rYWdlLCBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZiB0aGUgc3RlbXMuCiAgICAgICoKICAgICAgKi8KIApAQCAtMTAwMCwyMSArMTAyNCwyMSBAQAogICAgIHNjYWxlID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/IGhpbnRzLT54X3NjYWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGludHMtPnlfc2NhbGU7CiAKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogV2UgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlIGN1cnJlbnQgICAgKi8KLSAgICAvKiBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkgdG8gZmluZCAqLwotICAgIC8qIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLiAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBJZiBubyBlZGdlIGlzIGZvdW5kLCB3ZSBjcmVhdGUgYW5kIGluc2VydCBhIG5ldyBlZGdlIGluIHRoZSAgICAgICAqLwotICAgIC8qIHNvcnRlZCB0YWJsZS4gIE90aGVyd2lzZSwgd2Ugc2ltcGx5IGFkZCB0aGUgc2VnbWVudCB0byB0aGUgZWRnZSdzICovCi0gICAgLyogbGlzdCB3aGljaCBpcyB0aGVuIHByb2Nlc3NlZCBpbiB0aGUgc2Vjb25kIHN0ZXAgdG8gY29tcHV0ZSB0aGUgICAgKi8KLSAgICAvKiBlZGdlJ3MgcHJvcGVydGllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogTm90ZSB0aGF0IHRoZSBlZGdlcyB0YWJsZSBpcyBzb3J0ZWQgYWxvbmcgdGhlIHNlZ21lbnQvZWRnZSAgICAgICAgKi8KLSAgICAvKiBwb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogV2UgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkgdG8gZmluZAorICAgICAqIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLgorICAgICAqCisgICAgICogSWYgbm8gZWRnZSBpcyBmb3VuZCwgd2UgY3JlYXRlIGFuZCBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUKKyAgICAgKiBzb3J0ZWQgdGFibGUuICBPdGhlcndpc2UsIHdlIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncworICAgICAqIGxpc3Qgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgaW4gdGhlIHNlY29uZCBzdGVwIHRvIGNvbXB1dGUgdGhlCisgICAgICogZWRnZSdzIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgdGhlIGVkZ2VzIHRhYmxlIGlzIHNvcnRlZCBhbG9uZyB0aGUgc2VnbWVudC9lZGdlCisgICAgICogcG9zaXRpb24uCisgICAgICoKKyAgICAgKi8KIAogICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gRlRfTXVsRml4KCBsYXhpcy0+ZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CkBAIC0xMTE0LDE3ICsxMTM4LDE3IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIEdvb2QsIHdlIG5vdyBjb21wdXRlIGVhY2ggZWRnZSdzIHByb3BlcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSAgICovCi0gICAgLyogc2VnbWVudHMgZm91bmQgb24gaXRzIHBvc2l0aW9uLiAgQmFzaWNhbGx5LCB0aGVzZSBhcmUgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAtIHRoZSBlZGdlJ3MgbWFpbiBkaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogIC0gc3RlbSBlZGdlLCBzZXJpZiBlZGdlIG9yIGJvdGggKHdoaWNoIGRlZmF1bHRzIHRvIHN0ZW0gdGhlbikgKi8KLSAgICAvKiAgLSByb3VuZGVkIGVkZ2UsIHN0cmFpZ2h0IG9yIGJvdGggKHdoaWNoIGRlZmF1bHRzIHRvIHN0cmFpZ2h0KSAqLwotICAgIC8qICAtIGxpbmsgZm9yIGVkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBHb29kLCB3ZSBub3cgY29tcHV0ZSBlYWNoIGVkZ2UncyBwcm9wZXJ0aWVzIGFjY29yZGluZyB0byB0aGUKKyAgICAgKiBzZWdtZW50cyBmb3VuZCBvbiBpdHMgcG9zaXRpb24uICBCYXNpY2FsbHksIHRoZXNlIGFyZQorICAgICAqCisgICAgICogLSB0aGUgZWRnZSdzIG1haW4gZGlyZWN0aW9uCisgICAgICogLSBzdGVtIGVkZ2UsIHNlcmlmIGVkZ2Ugb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RlbSB0aGVuKQorICAgICAqIC0gcm91bmRlZCBlZGdlLCBzdHJhaWdodCBvciBib3RoICh3aGljaCBkZWZhdWx0cyB0byBzdHJhaWdodCkKKyAgICAgKiAtIGxpbmsgZm9yIGVkZ2UKKyAgICAgKgorICAgICAqLwogCiAgICAgLyogZmlyc3Qgb2YgYWxsLCBzZXQgdGhlIGBlZGdlJyBmaWVsZCBpbiBlYWNoIHNlZ21lbnQgLS0gdGhpcyBpcyAqLwogICAgIC8qIHJlcXVpcmVkIGluIG9yZGVyIHRvIGNvbXB1dGUgZWRnZSBsaW5rcyAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNjQsOCArMTM4OCw4IEBACiAgICAgYWZfZ2x5cGhfaGludHNfcmVzY2FsZSggaGludHMsIChBRl9TdHlsZU1ldHJpY3MpbWV0cmljcyApOwogCiAgICAgLyoKLSAgICAgKiAgY29ycmVjdCB4X3NjYWxlIGFuZCB5X3NjYWxlIHdoZW4gbmVlZGVkLCBzaW5jZSB0aGV5IG1heSBoYXZlCi0gICAgICogIGJlZW4gbW9kaWZpZWQgYWZfY2prX3NjYWxlX2RpbSBhYm92ZQorICAgICAqIGNvcnJlY3QgeF9zY2FsZSBhbmQgeV9zY2FsZSB3aGVuIG5lZWRlZCwgc2luY2UgdGhleSBtYXkgaGF2ZQorICAgICAqIGJlZW4gbW9kaWZpZWQgYWZfY2prX3NjYWxlX2RpbSBhYm92ZQogICAgICAqLwogICAgIGhpbnRzLT54X3NjYWxlID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0uc2NhbGU7CiAgICAgaGludHMtPnhfZGVsdGEgPSBtZXRyaWNzLT5heGlzW0FGX0RJTUVOU0lPTl9IT1JaXS5kZWx0YTsKQEAgLTEzODQsMjEgKzE0MDgsMjEgQEAKICAgICBvdGhlcl9mbGFncyAgPSAwOwogCiAgICAgLyoKLSAgICAgKiAgV2Ugc25hcCB0aGUgd2lkdGggb2YgdmVydGljYWwgc3RlbXMgZm9yIHRoZSBtb25vY2hyb21lIGFuZAotICAgICAqICBob3Jpem9udGFsIExDRCByZW5kZXJpbmcgdGFyZ2V0cyBvbmx5LgorICAgICAqIFdlIHNuYXAgdGhlIHdpZHRoIG9mIHZlcnRpY2FsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiBob3Jpem9udGFsIExDRCByZW5kZXJpbmcgdGFyZ2V0cyBvbmx5LgogICAgICAqLwogICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9NT05PIHx8IG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICkKICAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX0hPUlpfU05BUDsKIAogICAgIC8qCi0gICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIGhvcml6b250YWwgc3RlbXMgZm9yIHRoZSBtb25vY2hyb21lIGFuZAotICAgICAqICB2ZXJ0aWNhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKiBXZSBzbmFwIHRoZSB3aWR0aCBvZiBob3Jpem9udGFsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKKyAgICAgKiB2ZXJ0aWNhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRF9WICkKICAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX1ZFUlRfU05BUDsKIAogICAgIC8qCi0gICAgICogIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyB1bmxlc3MgaW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlLgorICAgICAqIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyB1bmxlc3MgaW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlLgogICAgICAqLwogICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJiBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xDRCApCiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19TVEVNX0FESlVTVDsKQEAgLTIwOTQsOCArMjExOCw4IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKgotICAgICAqICBub3cgaGludCB0aGUgcmVtYWluaW5nIGVkZ2VzIChzZXJpZnMgYW5kIHNpbmdsZSkgaW4gb3JkZXIKLSAgICAgKiAgdG8gY29tcGxldGUgb3VyIHByb2Nlc3NpbmcKKyAgICAgKiBub3cgaGludCB0aGUgcmVtYWluaW5nIGVkZ2VzIChzZXJpZnMgYW5kIHNpbmdsZSkgaW4gb3JkZXIKKyAgICAgKiB0byBjb21wbGV0ZSBvdXIgcHJvY2Vzc2luZwogICAgICAqLwogICAgIGZvciAoIGVkZ2UgPSBlZGdlczsgZWRnZSA8IGVkZ2VfbGltaXQ7IGVkZ2UrKyApCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuaCBiL3NyYy9hdXRvZml0L2FmY2prLmgKaW5kZXggZDIyOWMwYy4uNzA3MjcxYiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmNqay5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgQ0pLIHdyaXRpbmcgc3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmNqay5oCisgKgorICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBDSksgd3JpdGluZyBzeXN0ZW0gKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGQ0pLX0hfCkBAIC00MSw5ICs0MSw5IEBACiAKIAogICAvKgotICAgKiAgQ0pLIGdseXBocyB0ZW5kIHRvIGZpbGwgdGhlIHNxdWFyZS4gIFNvIHdlIGhhdmUgYm90aCB2ZXJ0aWNhbCBhbmQKLSAgICogIGhvcml6b250YWwgYmx1ZSB6b25lcy4gIEJ1dCBzb21lIGdseXBocyBoYXZlIGZsYXQgYm91bmRpbmcgc3Ryb2tlcyB0aGF0Ci0gICAqICBsZWF2ZSBzb21lIHNwYWNlIGJldHdlZW4gbmVpZ2hib3VyIGdseXBocy4KKyAgICogQ0pLIGdseXBocyB0ZW5kIHRvIGZpbGwgdGhlIHNxdWFyZS4gIFNvIHdlIGhhdmUgYm90aCB2ZXJ0aWNhbCBhbmQKKyAgICogaG9yaXpvbnRhbCBibHVlIHpvbmVzLiAgQnV0IHNvbWUgZ2x5cGhzIGhhdmUgZmxhdCBib3VuZGluZyBzdHJva2VzIHRoYXQKKyAgICogbGVhdmUgc29tZSBzcGFjZSBiZXR3ZWVuIG5laWdoYm91ciBnbHlwaHMuCiAgICAqLwogCiAjZGVmaW5lIEFGX0NKS19JU19UT1BfQkxVRSggYiApIFwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmY292ZXIuaCBiL3NyYy9hdXRvZml0L2FmY292ZXIuaAppbmRleCA2ZWViOGZjLi40N2YzZTQ3IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZjb3Zlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmNvdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgY292ZXJhZ2VzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmNvdmVyLmgKKyAqCisgKiAgIEF1dG8tZml0dGVyIGNvdmVyYWdlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogICAvKiBUaGlzIGhlYWRlciBmaWxlIGNhbiBiZSBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZHVtbXkuYyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuYwppbmRleCBmMzBjNTE3Li5hYmQ5NTA5IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmMKKysrIGIvc3JjL2F1dG9maXQvYWZkdW1teS5jCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmR1bW15LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZSAgICAgICAgKi8KLS8qICAgIHBlcmZvcm1lZCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZkdW1teS5jCisgKgorICogICBBdXRvLWZpdHRlciBkdW1teSByb3V0aW5lcyB0byBiZSB1c2VkIGlmIG5vIGhpbnRpbmcgc2hvdWxkIGJlCisgKiAgIHBlcmZvcm1lZCAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJhZmR1bW15LmgiCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmggYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKaW5kZXggYjM4MmFjZC4uZTAxYzQ5YyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZkdW1teS5oCisrKyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuaApAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZkdW1teS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIGR1bW15IHJvdXRpbmVzIHRvIGJlIHVzZWQgaWYgbm8gaGludGluZyBzaG91bGQgYmUgICAgICAgICovCi0vKiAgICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmZHVtbXkuaAorICoKKyAqICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZQorICogICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGRFVNTVlfSF8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZXJyb3JzLmggYi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCmluZGV4IGU1ZGU1NDMuLjU2ZTAwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZlcnJvcnMuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG9maXR0ZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZlcnJvcnMuaAorICoKKyAqICAgQXV0b2ZpdHRlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQXV0b2ZpdHRlciBlcnJvciBlbnVtZXJhdGlvbiAgICAgICAgICAqLwotICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBBdXRvZml0dGVyIGVycm9yIGVudW1lcmF0aW9uCisgICAqIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgQUZFUlJPUlNfSF8KICNkZWZpbmUgQUZFUlJPUlNfSF8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCmluZGV4IDNkMDljNTMuLjllNzc2NGIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKKysrIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZnbG9iYWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIHJvdXRpbmVzIHRvIGNvbXB1dGUgZ2xvYmFsIGhpbnRpbmcgdmFsdWVzIChib2R5KS4gICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZnbG9iYWwuYworICoKKyAqICAgQXV0by1maXR0ZXIgcm91dGluZXMgdG8gY29tcHV0ZSBnbG9iYWwgaGludGluZyB2YWx1ZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKQEAgLTIyLDEyICsyMiwxMiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmZ2xvYmFsCiAKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJhZndydHN5cy5oIgogCiAjaW5jbHVkZSAiYWZlcnJvcnMuaCIKLSNpbmNsdWRlICJhZnBpYy5oIgogCiAKICN1bmRlZiAgU0NSSVBUCkBAIC02Nyw4ICs2Niw2IEBACiAjaW5jbHVkZSAiYWZzdHlsZXMuaCIKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICN1bmRlZiAgV1JJVElOR19TWVNURU0KICNkZWZpbmUgV1JJVElOR19TWVNURU0oIHdzLCBXUyApICAgICAgICAgICAgICAgXAogICAgICAgICAgICZhZl8gIyMgd3MgIyMgX3dyaXRpbmdfc3lzdGVtX2NsYXNzLApAQCAtMTEwLDggKzEwNyw2IEBACiAgICAgTlVMTCAgLyogZG8gbm90IHJlbW92ZSAqLwogICB9OwogCi0jZW5kaWYgLyogIUZUX0NPTkZJR19PUFRJT05fUElDICovCi0KIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAKQEAgLTE1OSwxMiArMTU0LDEyIEBACiAgICAgfQogCiAgICAgLyogc2NhbiBlYWNoIHN0eWxlIGluIGEgVW5pY29kZSBjaGFybWFwICovCi0gICAgZm9yICggc3MgPSAwOyBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107IHNzKysgKQorICAgIGZvciAoIHNzID0gMDsgYWZfc3R5bGVfY2xhc3Nlc1tzc107IHNzKysgKQogICAgIHsKICAgICAgIEFGX1N0eWxlQ2xhc3MgICAgICAgc3R5bGVfY2xhc3MgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZl9zdHlsZV9jbGFzc2VzW3NzXTsKICAgICAgIEFGX1NjcmlwdENsYXNzICAgICAgc2NyaXB0X2NsYXNzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TQ1JJUFRfQ0xBU1NFU19HRVRbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZfc2NyaXB0X2NsYXNzZXNbc3R5bGVfY2xhc3MtPnNjcmlwdF07CiAgICAgICBBRl9TY3JpcHRfVW5pUmFuZ2UgIHJhbmdlOwogCiAKQEAgLTE3Miw4ICsxNjcsOCBAQAogICAgICAgICBjb250aW51ZTsKIAogICAgICAgLyoKLSAgICAgICAqICBTY2FuIGFsbCBVbmljb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UgYW5kIHNldCB0aGUgY29ycmVzcG9uZGluZwotICAgICAgICogIGdseXBoIHN0eWxlIGluZGV4LgorICAgICAgICogU2NhbiBhbGwgVW5pY29kZSBwb2ludHMgaW4gdGhlIHJhbmdlIGFuZCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAqIGdseXBoIHN0eWxlIGluZGV4LgogICAgICAgICovCiAgICAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKICAgICAgIHsKQEAgLTI0Niw5ICsyNDEsOSBAQAogICAgIH0KIAogICAgIC8qIGhhbmRsZSB0aGUgcmVtYWluaW5nIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgLi4uICovCi0gICAgZm9yICggc3MgPSAwOyBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107IHNzKysgKQorICAgIGZvciAoIHNzID0gMDsgYWZfc3R5bGVfY2xhc3Nlc1tzc107IHNzKysgKQogICAgIHsKLSAgICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzID0gQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOworICAgICAgQUZfU3R5bGVDbGFzcyAgc3R5bGVfY2xhc3MgPSBhZl9zdHlsZV9jbGFzc2VzW3NzXTsKIAogCiAgICAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKQEAgLTI1Niw3ICsyNTEsNyBAQAogICAgIH0KIAogICAgIC8qIC4uLiBhbmQgZmluYWxseSB0aGUgZGVmYXVsdCBPcGVuVHlwZSBmZWF0dXJlcyBvZiB0aGUgZGVmYXVsdCBzY3JpcHQgKi8KLSAgICBhZl9zaGFwZXJfZ2V0X2NvdmVyYWdlKCBnbG9iYWxzLCBBRl9TVFlMRV9DTEFTU0VTX0dFVFtkZmx0XSwgZ3N0eWxlcywgMSApOworICAgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIGdsb2JhbHMsIGFmX3N0eWxlX2NsYXNzZXNbZGZsdF0sIGdzdHlsZXMsIDEgKTsKIAogICAgIC8qIG1hcmsgQVNDSUkgZGlnaXRzICovCiAgICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKQEAgLTI3MCw4ICsyNjUsOCBAQAogCiAgIEV4aXQ6CiAgICAgLyoKLSAgICAgKiAgQnkgZGVmYXVsdCwgYWxsIHVuY292ZXJlZCBnbHlwaHMgYXJlIHNldCB0byB0aGUgZmFsbGJhY2sgc3R5bGUuCi0gICAgICogIFhYWDogU2hvdWxkbid0IHdlIGRpc2FibGUgaGludGluZyBvciBkbyBzb21ldGhpbmcgc2ltaWxhcj8KKyAgICAgKiBCeSBkZWZhdWx0LCBhbGwgdW5jb3ZlcmVkIGdseXBocyBhcmUgc2V0IHRvIHRoZSBmYWxsYmFjayBzdHlsZS4KKyAgICAgKiBYWFg6IFNob3VsZG4ndCB3ZSBkaXNhYmxlIGhpbnRpbmcgb3IgZG8gc29tZXRoaW5nIHNpbWlsYXI/CiAgICAgICovCiAgICAgaWYgKCBnbG9iYWxzLT5tb2R1bGUtPmZhbGxiYWNrX3N0eWxlICE9IEFGX1NUWUxFX1VOQVNTSUdORUQgKQogICAgIHsKQEAgLTI5NSw5ICsyOTAsOSBAQAogICAgICAgICAgICAgICAgICI9PT09PT09PT09PT09PVxuIgogICAgICAgICAgICAgICAgICJcbiIgKSk7CiAKLSAgICBmb3IgKCBzcyA9IDA7IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsgc3MrKyApCisgICAgZm9yICggc3MgPSAwOyBhZl9zdHlsZV9jbGFzc2VzW3NzXTsgc3MrKyApCiAgICAgewotICAgICAgQUZfU3R5bGVDbGFzcyAgc3R5bGVfY2xhc3MgPSBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107CisgICAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzcyA9IGFmX3N0eWxlX2NsYXNzZXNbc3NdOwogICAgICAgRlRfVUludCAgICAgICAgY291bnQgICAgICAgPSAwOwogICAgICAgRlRfTG9uZyAgICAgICAgaWR4OwogCkBAIC0zOTcsOSArMzkyLDkgQEAKICAgICAgICAgaWYgKCBnbG9iYWxzLT5tZXRyaWNzW25uXSApCiAgICAgICAgIHsKICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgICAgICAgIHN0eWxlX2NsYXNzID0KLSAgICAgICAgICAgIEFGX1NUWUxFX0NMQVNTRVNfR0VUW25uXTsKKyAgICAgICAgICAgIGFmX3N0eWxlX2NsYXNzZXNbbm5dOwogICAgICAgICAgIEFGX1dyaXRpbmdTeXN0ZW1DbGFzcyAgd3JpdGluZ19zeXN0ZW1fY2xhc3MgPQotICAgICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVRbc3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKyAgICAgICAgICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNbc3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKIAogCiAgICAgICAgICAgaWYgKCB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19kb25lICkKQEAgLTQ0OCw4ICs0NDMsOCBAQAogICAgICAgc3R5bGUgPSAoQUZfU3R5bGUpKCBnbG9iYWxzLT5nbHlwaF9zdHlsZXNbZ2luZGV4XSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX1NUWUxFX1VOQVNTSUdORUQgICAgICAgICAgICk7CiAKLSAgICBzdHlsZV9jbGFzcyAgICAgICAgICA9IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3N0eWxlXTsKLSAgICB3cml0aW5nX3N5c3RlbV9jbGFzcyA9IEFGX1dSSVRJTkdfU1lTVEVNX0NMQVNTRVNfR0VUCisgICAgc3R5bGVfY2xhc3MgICAgICAgICAgPSBhZl9zdHlsZV9jbGFzc2VzW3N0eWxlXTsKKyAgICB3cml0aW5nX3N5c3RlbV9jbGFzcyA9IGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlX2NsYXNzLT53cml0aW5nX3N5c3RlbV07CiAKICAgICBtZXRyaWNzID0gZ2xvYmFscy0+bWV0cmljc1tzdHlsZV07CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuaAppbmRleCA0ODllZDQ2Li5lMjZlYTJmIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oCisrKyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmZ2xvYmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAgICAgICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmdsb2JhbC5oCisgKgorICogICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcworICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQUZHTE9CQUxfSF8KQEAgLTYwLDggKzYwLDggQEAKIAogCiAgIC8qCi0gICAqICBEZWZhdWx0IHZhbHVlcyBhbmQgZmxhZ3MgZm9yIGJvdGggYXV0b2ZpdHRlciBnbG9iYWxzIChmb3VuZCBpbgotICAgKiAgQUZfTW9kdWxlUmVjKSBhbmQgZmFjZSBnbG9iYWxzIChpbiBBRl9GYWNlR2xvYmFsc1JlYykuCisgICAqIERlZmF1bHQgdmFsdWVzIGFuZCBmbGFncyBmb3IgYm90aCBhdXRvZml0dGVyIGdsb2JhbHMgKGZvdW5kIGluCisgICAqIEFGX01vZHVsZVJlYykgYW5kIGZhY2UgZ2xvYmFscyAoaW4gQUZfRmFjZUdsb2JhbHNSZWMpLgogICAgKi8KIAogICAvKiBpbmRleCBvZiBmYWxsYmFjayBzdHlsZSBpbiBgYWZfc3R5bGVfY2xhc3NlcycgKi8KQEAgLTk4LDggKzk4LDggQEAKIAogCiAgIC8qCi0gICAqICBOb3RlIHRoYXQgZ2x5cGhfc3R5bGVzW10gbWFwcyBlYWNoIGdseXBoIHRvIGFuIGluZGV4IGludG8gdGhlCi0gICAqICBgYWZfc3R5bGVfY2xhc3NlcycgYXJyYXkuCisgICAqIE5vdGUgdGhhdCBnbHlwaF9zdHlsZXNbXSBtYXBzIGVhY2ggZ2x5cGggdG8gYW4gaW5kZXggaW50byB0aGUKKyAgICogYGFmX3N0eWxlX2NsYXNzZXMnIGFycmF5LgogICAgKgogICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0ZhY2VHbG9iYWxzUmVjXwpAQCAtMTQwLDggKzE0MCw4IEBACiAKIAogICAvKgotICAgKiAgbW9kZWwgdGhlIGdsb2JhbCBoaW50cyBkYXRhIGZvciBhIGdpdmVuIGZhY2UsIGRlY29tcG9zZWQgaW50bwotICAgKiAgc3R5bGUtc3BlY2lmaWMgaXRlbXMKKyAgICogbW9kZWwgdGhlIGdsb2JhbCBoaW50cyBkYXRhIGZvciBhIGdpdmVuIGZhY2UsIGRlY29tcG9zZWQgaW50bworICAgKiBzdHlsZS1zcGVjaWZpYyBpdGVtcwogICAgKi8KIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZoaW50cy5jIGIvc3JjL2F1dG9maXQvYWZoaW50cy5jCmluZGV4IDA2NjZkYmMuLjY1ZjBlODUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaGludHMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmaGludHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmaGludHMuYworICoKKyAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCkBAIC0yMiwxMiArMjIsMTIgQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmhpbnRzCiAKQEAgLTU1OCw4ICs1NTgsOCBAQAogCiAKICAgICAgIC8qCi0gICAgICAgKiAgbm90ZTogQUZfRElNRU5TSU9OX0hPUlogY29ycmVzcG9uZHMgdG8gX3ZlcnRpY2FsXyBlZGdlcwotICAgICAgICogICAgICAgIHNpbmNlIHRoZXkgaGF2ZSBhIGNvbnN0YW50IFggY29vcmRpbmF0ZS4KKyAgICAgICAqIG5vdGU6IEFGX0RJTUVOU0lPTl9IT1JaIGNvcnJlc3BvbmRzIHRvIF92ZXJ0aWNhbF8gZWRnZXMKKyAgICAgICAqICAgICAgIHNpbmNlIHRoZXkgaGF2ZSBhIGNvbnN0YW50IFggY29vcmRpbmF0ZS4KICAgICAgICAqLwogICAgICAgaWYgKCBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogKQogICAgICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIGVkZ2VzICgxcHg9JS4yZnUsIDEwdT0lLjJmcHgpOlxuIiwKQEAgLTY4MSw4ICs2ODEsOCBAQAogICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CiAKICAgICAvKgotICAgICAqICBub3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBmcmVlIHRoZSBzZWdtZW50IGFuZCBlZGdlCi0gICAgICogIGJ1ZmZlcnMgc2luY2UgdGhleSBhcmUgcmVhbGx5IHdpdGhpbiB0aGUgaGludHMtPnBvaW50cyBhcnJheQorICAgICAqIG5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGZyZWUgdGhlIHNlZ21lbnQgYW5kIGVkZ2UKKyAgICAgKiBidWZmZXJzIHNpbmNlIHRoZXkgYXJlIHJlYWxseSB3aXRoaW4gdGhlIGhpbnRzLT5wb2ludHMgYXJyYXkKICAgICAgKi8KICAgICBmb3IgKCBkaW0gPSAwOyBkaW0gPCBBRl9ESU1FTlNJT05fTUFYOyBkaW0rKyApCiAgICAgewpAQCAtNzc2LDkgKzc3Niw5IEBACiAgICAgfQogCiAgICAgLyoKLSAgICAgKiAgdGhlbiByZWFsbG9jYXRlIHRoZSBwb2ludHMgYXJyYXlzIGlmIG5lY2Vzc2FyeSAtLQotICAgICAqICBub3RlIHRoYXQgd2UgcmVzZXJ2ZSB0d28gYWRkaXRpb25hbCBwb2ludCBwb3NpdGlvbnMsIHVzZWQgdG8KLSAgICAgKiAgaGludCBtZXRyaWNzIGFwcHJvcHJpYXRlbHkKKyAgICAgKiB0aGVuIHJlYWxsb2NhdGUgdGhlIHBvaW50cyBhcnJheXMgaWYgbmVjZXNzYXJ5IC0tCisgICAgICogbm90ZSB0aGF0IHdlIHJlc2VydmUgdHdvIGFkZGl0aW9uYWwgcG9pbnQgcG9zaXRpb25zLCB1c2VkIHRvCisgICAgICogaGludCBtZXRyaWNzIGFwcHJvcHJpYXRlbHkKICAgICAgKi8KICAgICBuZXdfbWF4ID0gKEZUX1VJbnQpKCBvdXRsaW5lLT5uX3BvaW50cyArIDIgKTsKICAgICBvbGRfbWF4ID0gKEZUX1VJbnQpaGludHMtPm1heF9wb2ludHM7CkBAIC05MTgsMTUgKzkxOCwxNSBAQAogCiAgICAgICB7CiAgICAgICAgIC8qCi0gICAgICAgICAqICBDb21wdXRlIGRpcmVjdGlvbnMgb2YgYGluJyBhbmQgYG91dCcgdmVjdG9ycy4KKyAgICAgICAgICogQ29tcHV0ZSBkaXJlY3Rpb25zIG9mIGBpbicgYW5kIGBvdXQnIHZlY3RvcnMuCiAgICAgICAgICAqCi0gICAgICAgICAqICBOb3RlIHRoYXQgZGlzdGFuY2VzIGJldHdlZW4gcG9pbnRzIHRoYXQgYXJlIHZlcnkgbmVhciB0byBlYWNoCi0gICAgICAgICAqICBvdGhlciBhcmUgYWNjdW11bGF0ZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGF1dG8taGludGVyIGVpdGhlcgotICAgICAgICAgKiAgcHJlcGVuZHMgdGhlIHNtYWxsIHZlY3RvcnMgYmV0d2VlbiBuZWFyIHBvaW50cyB0byB0aGUgZmlyc3QKLSAgICAgICAgICogIG5vbi1uZWFyIHZlY3Rvciwgb3IgdGhlIHN1bSBvZiBzbWFsbCB2ZWN0b3IgbGVuZ3RocyBleGNlZWRzIGEKLSAgICAgICAgICogIHRocmVzaG9sZCwgdGh1cyBgZ3JvdXBpbmcnIHRoZSBzbWFsbCB2ZWN0b3JzLiAgQWxsIGludGVybWVkaWF0ZQotICAgICAgICAgKiAgcG9pbnRzIGFyZSB0YWdnZWQgYXMgd2VhazsgdGhlIGRpcmVjdGlvbnMgYXJlIGFkanVzdGVkIGFsc28gdG8KLSAgICAgICAgICogIGJlIGVxdWFsIHRvIHRoZSBhY2N1bXVsYXRlZCBvbmUuCisgICAgICAgICAqIE5vdGUgdGhhdCBkaXN0YW5jZXMgYmV0d2VlbiBwb2ludHMgdGhhdCBhcmUgdmVyeSBuZWFyIHRvIGVhY2gKKyAgICAgICAgICogb3RoZXIgYXJlIGFjY3VtdWxhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBhdXRvLWhpbnRlciBlaXRoZXIKKyAgICAgICAgICogcHJlcGVuZHMgdGhlIHNtYWxsIHZlY3RvcnMgYmV0d2VlbiBuZWFyIHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAgICogbm9uLW5lYXIgdmVjdG9yLCBvciB0aGUgc3VtIG9mIHNtYWxsIHZlY3RvciBsZW5ndGhzIGV4Y2VlZHMgYQorICAgICAgICAgKiB0aHJlc2hvbGQsIHRodXMgYGdyb3VwaW5nJyB0aGUgc21hbGwgdmVjdG9ycy4gIEFsbCBpbnRlcm1lZGlhdGUKKyAgICAgICAgICogcG9pbnRzIGFyZSB0YWdnZWQgYXMgd2VhazsgdGhlIGRpcmVjdGlvbnMgYXJlIGFkanVzdGVkIGFsc28gdG8KKyAgICAgICAgICogYmUgZXF1YWwgdG8gdGhlIGFjY3VtdWxhdGVkIG9uZS4KICAgICAgICAgICovCiAKICAgICAgICAgRlRfSW50ICBuZWFyX2xpbWl0MiA9IDIgKiBuZWFyX2xpbWl0IC0gMTsKQEAgLTk1NiwxMiArOTU2LDEyIEBACiAgICAgICAgICAgICBvdXRfeSA9IHBvaW50LT5meSAtIHByZXYtPmZ5OwogCiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogIFdlIHVzZSBUYXhpY2FiIG1ldHJpY3MgdG8gbWVhc3VyZSB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICAgICAgICAgICAqIFdlIHVzZSBUYXhpY2FiIG1ldHJpY3MgdG8gbWVhc3VyZSB0aGUgdmVjdG9yIGxlbmd0aC4KICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhY2N1bXVsYXRlZCBkaXN0YW5jZXMgc28gZmFyIGNvdWxkIGhhdmUgdGhlCi0gICAgICAgICAgICAgKiAgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHRoZSBkaXN0YW5jZSBtZWFzdXJlZCBoZXJlLiAgRm9yIHRoaXMKLSAgICAgICAgICAgICAqICByZWFzb24gd2UgdXNlIGBuZWFyX2xpbWl0MicgZm9yIHRoZSBjb21wYXJpc29uIHRvIGdldCBhCi0gICAgICAgICAgICAgKiAgbm9uLW5lYXIgcG9pbnQgZXZlbiBpbiB0aGUgd29yc3QgY2FzZS4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgYWNjdW11bGF0ZWQgZGlzdGFuY2VzIHNvIGZhciBjb3VsZCBoYXZlIHRoZQorICAgICAgICAgICAgICogb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHRoZSBkaXN0YW5jZSBtZWFzdXJlZCBoZXJlLiAgRm9yIHRoaXMKKyAgICAgICAgICAgICAqIHJlYXNvbiB3ZSB1c2UgYG5lYXJfbGltaXQyJyBmb3IgdGhlIGNvbXBhcmlzb24gdG8gZ2V0IGEKKyAgICAgICAgICAgICAqIG5vbi1uZWFyIHBvaW50IGV2ZW4gaW4gdGhlIHdvcnN0IGNhc2UuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICggRlRfQUJTKCBvdXRfeCApICsgRlRfQUJTKCBvdXRfeSApID49IG5lYXJfbGltaXQyICkKICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NzksMTEgKzk3OSwxMSBAQAogICAgICAgICAgIGN1cnIgPSBmaXJzdDsKIAogICAgICAgICAgIC8qCi0gICAgICAgICAgICogIFdlIGFidXNlIHRoZSBgdScgYW5kIGB2JyBmaWVsZHMgdG8gc3RvcmUgaW5kZXggZGVsdGFzIHRvIHRoZQotICAgICAgICAgICAqICBuZXh0IGFuZCBwcmV2aW91cyBub24tbmVhciBwb2ludCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAqIFdlIGFidXNlIHRoZSBgdScgYW5kIGB2JyBmaWVsZHMgdG8gc3RvcmUgaW5kZXggZGVsdGFzIHRvIHRoZQorICAgICAgICAgICAqIG5leHQgYW5kIHByZXZpb3VzIG5vbi1uZWFyIHBvaW50LCByZXNwZWN0aXZlbHkuCiAgICAgICAgICAgICoKLSAgICAgICAgICAgKiAgVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBub3QgaGF2aW5nIG5vbi1uZWFyIHBvaW50cywgd2UgcG9pbnQgdG8KLSAgICAgICAgICAgKiAgYGZpcnN0JyBieSBkZWZhdWx0IGFzIHRoZSBuZXh0IG5vbi1uZWFyIHBvaW50LgorICAgICAgICAgICAqIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggbm90IGhhdmluZyBub24tbmVhciBwb2ludHMsIHdlIHBvaW50IHRvCisgICAgICAgICAgICogYGZpcnN0JyBieSBkZWZhdWx0IGFzIHRoZSBuZXh0IG5vbi1uZWFyIHBvaW50LgogICAgICAgICAgICAqCiAgICAgICAgICAgICovCiAgICAgICAgICAgY3Vyci0+dSAgPSAoRlRfUG9zKSggZmlyc3QgLSBjdXJyICk7CkBAIC0xMDM1LDEyICsxMDM1LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKgotICAgICAgICAgKiAgVGhlIG5leHQgc3RlcCBpcyB0byBgc2ltcGxpZnknIGFuIG91dGxpbmUncyB0b3BvbG9neSBzbyB0aGF0IHdlCi0gICAgICAgICAqICBjYW4gaWRlbnRpZnkgbG9jYWwgZXh0cmVtYSBtb3JlIHJlbGlhYmx5OiBBIHNlcmllcyBvZgotICAgICAgICAgKiAgbm9uLWhvcml6b250YWwgb3Igbm9uLXZlcnRpY2FsIHZlY3RvcnMgcG9pbnRpbmcgaW50byB0aGUgc2FtZQotICAgICAgICAgKiAgcXVhZHJhbnQgYXJlIGhhbmRsZWQgYXMgYSBzaW5nbGUsIGxvbmcgdmVjdG9yLiAgRnJvbSBhCi0gICAgICAgICAqICB0b3BvbG9naWNhbCBwb2ludCBvZiB0aGUgdmlldywgdGhlIGludGVybWVkaWF0ZSBwb2ludHMgYXJlIG9mIG5vCi0gICAgICAgICAqICBpbnRlcmVzdCBhbmQgdGh1cyB0YWdnZWQgYXMgd2Vhay4KKyAgICAgICAgICogVGhlIG5leHQgc3RlcCBpcyB0byBgc2ltcGxpZnknIGFuIG91dGxpbmUncyB0b3BvbG9neSBzbyB0aGF0IHdlCisgICAgICAgICAqIGNhbiBpZGVudGlmeSBsb2NhbCBleHRyZW1hIG1vcmUgcmVsaWFibHk6IEEgc2VyaWVzIG9mCisgICAgICAgICAqIG5vbi1ob3Jpem9udGFsIG9yIG5vbi12ZXJ0aWNhbCB2ZWN0b3JzIHBvaW50aW5nIGludG8gdGhlIHNhbWUKKyAgICAgICAgICogcXVhZHJhbnQgYXJlIGhhbmRsZWQgYXMgYSBzaW5nbGUsIGxvbmcgdmVjdG9yLiAgRnJvbSBhCisgICAgICAgICAqIHRvcG9sb2dpY2FsIHBvaW50IG9mIHRoZSB2aWV3LCB0aGUgaW50ZXJtZWRpYXRlIHBvaW50cyBhcmUgb2Ygbm8KKyAgICAgICAgICogaW50ZXJlc3QgYW5kIHRodXMgdGFnZ2VkIGFzIHdlYWsuCiAgICAgICAgICAqLwogCiAgICAgICAgIGZvciAoIHBvaW50ID0gcG9pbnRzOyBwb2ludCA8IHBvaW50X2xpbWl0OyBwb2ludCsrICkKQEAgLTEwODAsOSArMTA4MCw5IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKgotICAgICAgICAgKiAgRmluYWxseSwgY2hlY2sgZm9yIHJlbWFpbmluZyB3ZWFrIHBvaW50cy4gIEV2ZXJ5dGhpbmcgZWxzZSBub3QKLSAgICAgICAgICogIGNvbGxlY3RlZCBpbiBlZGdlcyBzbyBmYXIgaXMgdGhlbiBpbXBsaWNpdGx5IGNsYXNzaWZpZWQgYXMgc3Ryb25nCi0gICAgICAgICAqICBwb2ludHMuCisgICAgICAgICAqIEZpbmFsbHksIGNoZWNrIGZvciByZW1haW5pbmcgd2VhayBwb2ludHMuICBFdmVyeXRoaW5nIGVsc2Ugbm90CisgICAgICAgICAqIGNvbGxlY3RlZCBpbiBlZGdlcyBzbyBmYXIgaXMgdGhlbiBpbXBsaWNpdGx5IGNsYXNzaWZpZWQgYXMgc3Ryb25nCisgICAgICAgICAqIHBvaW50cy4KICAgICAgICAgICovCiAKICAgICAgICAgZm9yICggcG9pbnQgPSBwb2ludHM7IHBvaW50IDwgcG9pbnRfbGltaXQ7IHBvaW50KysgKQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZoaW50cy5oIGIvc3JjL2F1dG9maXQvYWZoaW50cy5oCmluZGV4IDMzMjZlYmMuLmFlZTlkNDYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaGludHMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmaGludHMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmaGludHMuaAorICoKKyAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQUZISU5UU19IXwpAQCAtMjYsOCArMjYsOCBAQAogRlRfQkVHSU5fSEVBREVSCiAKICAgLyoKLSAgICogIFRoZSBkZWZpbml0aW9uIG9mIG91dGxpbmUgZ2x5cGggaGludHMuICBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbAotICAgKiAgd3JpdGluZyBzeXN0ZW0gYW5hbHlzaXMgcm91dGluZXMgKHVudGlsIG5vdykuCisgICAqIFRoZSBkZWZpbml0aW9uIG9mIG91dGxpbmUgZ2x5cGggaGludHMuICBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbAorICAgKiB3cml0aW5nIHN5c3RlbSBhbmFseXNpcyByb3V0aW5lcyAodW50aWwgbm93KS4KICAgICovCiAKICAgdHlwZWRlZiBlbnVtICBBRl9EaW1lbnNpb25fCkBAIC01NiwxNTMgKzU2LDE1MyBAQAogCiAKICAgLyoKLSAgICogIFRoZSBmb2xsb3dpbmcgZXhwbGFuYXRpb25zIGFyZSBtb3N0bHkgdGFrZW4gZnJvbSB0aGUgYXJ0aWNsZQorICAgKiBUaGUgZm9sbG93aW5nIGV4cGxhbmF0aW9ucyBhcmUgbW9zdGx5IHRha2VuIGZyb20gdGhlIGFydGljbGUKICAgICoKLSAgICogICAgUmVhbC1UaW1lIEdyaWQgRml0dGluZyBvZiBUeXBvZ3JhcGhpYyBPdXRsaW5lcworICAgKiAgIFJlYWwtVGltZSBHcmlkIEZpdHRpbmcgb2YgVHlwb2dyYXBoaWMgT3V0bGluZXMKICAgICoKLSAgICogIGJ5IERhdmlkIFR1cm5lciBhbmQgV2VybmVyIExlbWJlcmcKKyAgICogYnkgRGF2aWQgVHVybmVyIGFuZCBXZXJuZXIgTGVtYmVyZwogICAgKgotICAgKiAgICBodHRwczovL3d3dy50dWcub3JnL1RVR2JvYXQvQXJ0aWNsZXMvdGIyNC0zL2xlbWJlcmcucGRmCisgICAqICAgaHR0cHM6Ly93d3cudHVnLm9yZy9UVUdib2F0L0FydGljbGVzL3RiMjQtMy9sZW1iZXJnLnBkZgogICAgKgotICAgKiAgd2l0aCBhcHByb3ByaWF0ZSB1cGRhdGVzLgorICAgKiB3aXRoIGFwcHJvcHJpYXRlIHVwZGF0ZXMuCiAgICAqCiAgICAqCi0gICAqICBTZWdtZW50cworICAgKiBTZWdtZW50cwogICAgKgotICAgKiAgICBgYWZfe2NqayxsYXRpbiwuLi59X2hpbnRzX2NvbXB1dGVfc2VnbWVudHMnIGFyZSB0aGUgZnVuY3Rpb25zIHRvCi0gICAqICAgIGZpbmQgc2VnbWVudHMgaW4gYW4gb3V0bGluZS4KKyAgICogICBgYWZfe2NqayxsYXRpbiwuLi59X2hpbnRzX2NvbXB1dGVfc2VnbWVudHMnIGFyZSB0aGUgZnVuY3Rpb25zIHRvCisgICAqICAgZmluZCBzZWdtZW50cyBpbiBhbiBvdXRsaW5lLgogICAgKgotICAgKiAgICBBIHNlZ21lbnQgaXMgYSBzZXJpZXMgb2YgYXQgbGVhc3QgdHdvIGNvbnNlY3V0aXZlIHBvaW50cyB0aGF0IGFyZQotICAgKiAgICBhcHByb3hpbWF0ZWx5IGFsaWduZWQgYWxvbmcgYSBjb29yZGluYXRlIGF4aXMuICBUaGUgYW5hbHlzaXMgdG8gZG8KLSAgICogICAgc28gaXMgc3BlY2lmaWMgdG8gYSB3cml0aW5nIHN5c3RlbS4KKyAgICogICBBIHNlZ21lbnQgaXMgYSBzZXJpZXMgb2YgYXQgbGVhc3QgdHdvIGNvbnNlY3V0aXZlIHBvaW50cyB0aGF0IGFyZQorICAgKiAgIGFwcHJveGltYXRlbHkgYWxpZ25lZCBhbG9uZyBhIGNvb3JkaW5hdGUgYXhpcy4gIFRoZSBhbmFseXNpcyB0byBkbworICAgKiAgIHNvIGlzIHNwZWNpZmljIHRvIGEgd3JpdGluZyBzeXN0ZW0uCiAgICAqCiAgICAqCi0gICAqICBFZGdlcworICAgKiBFZGdlcwogICAgKgotICAgKiAgICBgYWZfe2NqayxsYXRpbiwuLi59X2hpbnRzX2NvbXB1dGVfZWRnZXMnIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZpbmQKLSAgICogICAgZWRnZXMuCisgICAqICAgYGFmX3tjamssbGF0aW4sLi4ufV9oaW50c19jb21wdXRlX2VkZ2VzJyBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmaW5kCisgICAqICAgZWRnZXMuCiAgICAqCi0gICAqICAgIEFzIHNvb24gYXMgc2VnbWVudHMgYXJlIGRlZmluZWQsIHRoZSBhdXRvLWhpbnRlciBncm91cHMgdGhlbSBpbnRvCi0gICAqICAgIGVkZ2VzLiAgQW4gZWRnZSBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSBwb3NpdGlvbiBvbiB0aGUgbWFpbgotICAgKiAgICBkaW1lbnNpb24gdGhhdCBjb2xsZWN0cyBvbmUgb3IgbW9yZSBzZWdtZW50cyAoYWxsb3dpbmcgZm9yIGEgc21hbGwKLSAgICogICAgdGhyZXNob2xkKS4KKyAgICogICBBcyBzb29uIGFzIHNlZ21lbnRzIGFyZSBkZWZpbmVkLCB0aGUgYXV0by1oaW50ZXIgZ3JvdXBzIHRoZW0gaW50bworICAgKiAgIGVkZ2VzLiAgQW4gZWRnZSBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSBwb3NpdGlvbiBvbiB0aGUgbWFpbgorICAgKiAgIGRpbWVuc2lvbiB0aGF0IGNvbGxlY3RzIG9uZSBvciBtb3JlIHNlZ21lbnRzIChhbGxvd2luZyBmb3IgYSBzbWFsbAorICAgKiAgIHRocmVzaG9sZCkuCiAgICAqCi0gICAqICAgIEFzIGFuIGV4YW1wbGUsIHRoZSBgbGF0aW4nIHdyaXRpbmcgc3lzdGVtIGZpcnN0IHRyaWVzIHRvIGdyaWQtZml0Ci0gICAqICAgIGVkZ2VzLCB0aGVuIHRvIGFsaWduIHNlZ21lbnRzIG9uIHRoZSBlZGdlcyB1bmxlc3MgaXQgZGV0ZWN0cyB0aGF0Ci0gICAqICAgIHRoZXkgZm9ybSBhIHNlcmlmLgorICAgKiAgIEFzIGFuIGV4YW1wbGUsIHRoZSBgbGF0aW4nIHdyaXRpbmcgc3lzdGVtIGZpcnN0IHRyaWVzIHRvIGdyaWQtZml0CisgICAqICAgZWRnZXMsIHRoZW4gdG8gYWxpZ24gc2VnbWVudHMgb24gdGhlIGVkZ2VzIHVubGVzcyBpdCBkZXRlY3RzIHRoYXQKKyAgICogICB0aGV5IGZvcm0gYSBzZXJpZi4KICAgICoKICAgICoKLSAgICogICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICBICi0gICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8Ci0gICAqICAgICAgICAgQyAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIEYKLSAgICogICAgICAgICAgKy0tLS0tLTwtLS0tLSsgICAgICAgICstLS0tLTwtLS0tLS0rCi0gICAqICAgICAgICAgIHwgICAgICAgICAgICAgQiAgICAgIEcgICAgICAgICAgICAgfAotICAgKiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0+LS0tLS0tLS0tLS0tLS0tLS0tKwotICAgKiAgICAgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFCisgICAqICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICBICisgICAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICogICAgICAgIEMgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICBGCisgICAqICAgICAgICAgKy0tLS0tLTwtLS0tLSsgICAgICAgICstLS0tLTwtLS0tLS0rCisgICAqICAgICAgICAgfCAgICAgICAgICAgICBCICAgICAgRyAgICAgICAgICAgICB8CisgICAqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLT4tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAqICAgICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRQogICAgKgogICAgKgotICAgKiAgU3RlbXMKKyAgICogU3RlbXMKICAgICoKLSAgICogICAgU3RlbXMgYXJlIGRldGVjdGVkIGJ5IGBhZl97Y2prLGxhdGluLC4uLn1faGludF9lZGdlcycuCisgICAqICAgU3RlbXMgYXJlIGRldGVjdGVkIGJ5IGBhZl97Y2prLGxhdGluLC4uLn1faGludF9lZGdlcycuCiAgICAqCi0gICAqICAgIFNlZ21lbnRzIG5lZWQgdG8gYmUgYGxpbmtlZCcgdG8gb3RoZXIgb25lcyBpbiBvcmRlciB0byBkZXRlY3Qgc3RlbXMuCi0gICAqICAgIEEgc3RlbSBpcyBtYWRlIG9mIHR3byBzZWdtZW50cyB0aGF0IGZhY2UgZWFjaCBvdGhlciBpbiBvcHBvc2l0ZQotICAgKiAgICBkaXJlY3Rpb25zIGFuZCB0aGF0IGFyZSBzdWZmaWNpZW50bHkgY2xvc2UgdG8gZWFjaCBvdGhlci4gIFVzaW5nCi0gICAqICAgIHZvY2FidWxhcnkgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiwgc3RlbSBzZWdtZW50cyBmb3JtIGEKLSAgICogICAgYGJsYWNrIGRpc3RhbmNlJy4KKyAgICogICBTZWdtZW50cyBuZWVkIHRvIGJlIGBsaW5rZWQnIHRvIG90aGVyIG9uZXMgaW4gb3JkZXIgdG8gZGV0ZWN0IHN0ZW1zLgorICAgKiAgIEEgc3RlbSBpcyBtYWRlIG9mIHR3byBzZWdtZW50cyB0aGF0IGZhY2UgZWFjaCBvdGhlciBpbiBvcHBvc2l0ZQorICAgKiAgIGRpcmVjdGlvbnMgYW5kIHRoYXQgYXJlIHN1ZmZpY2llbnRseSBjbG9zZSB0byBlYWNoIG90aGVyLiAgVXNpbmcKKyAgICogICB2b2NhYnVsYXJ5IGZyb20gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24sIHN0ZW0gc2VnbWVudHMgZm9ybSBhCisgICAqICAgYGJsYWNrIGRpc3RhbmNlJy4KICAgICoKLSAgICogICAgSW4gdGhlIGFib3ZlIEFTQ0lJIGRyYXdpbmcsIHRoZSBob3Jpem9udGFsIHNlZ21lbnRzIGFyZSBCQywgREUsIGFuZAotICAgKiAgICBGRzsgdGhlIHZlcnRpY2FsIHNlZ21lbnRzIGFyZSBBQiwgQ0QsIEVGLCBhbmQgR0guCisgICAqICAgSW4gdGhlIGFib3ZlIEFTQ0lJIGRyYXdpbmcsIHRoZSBob3Jpem9udGFsIHNlZ21lbnRzIGFyZSBCQywgREUsIGFuZAorICAgKiAgIEZHOyB0aGUgdmVydGljYWwgc2VnbWVudHMgYXJlIEFCLCBDRCwgRUYsIGFuZCBHSC4KICAgICoKLSAgICogICAgRWFjaCBzZWdtZW50IGhhcyBhdCBtb3N0IG9uZSBgYmVzdCcgY2FuZGlkYXRlIHRvIGZvcm0gYSBibGFjawotICAgKiAgICBkaXN0YW5jZSwgb3Igbm8gY2FuZGlkYXRlIGF0IGFsbC4gIE5vdGljZSB0aGF0IHR3byBkaXN0aW5jdCBzZWdtZW50cwotICAgKiAgICBjYW4gaGF2ZSB0aGUgc2FtZSBjYW5kaWRhdGUsIHdoaWNoIGZyZXF1ZW50bHkgbWVhbnMgYSBzZXJpZi4KKyAgICogICBFYWNoIHNlZ21lbnQgaGFzIGF0IG1vc3Qgb25lIGBiZXN0JyBjYW5kaWRhdGUgdG8gZm9ybSBhIGJsYWNrCisgICAqICAgZGlzdGFuY2UsIG9yIG5vIGNhbmRpZGF0ZSBhdCBhbGwuICBOb3RpY2UgdGhhdCB0d28gZGlzdGluY3Qgc2VnbWVudHMKKyAgICogICBjYW4gaGF2ZSB0aGUgc2FtZSBjYW5kaWRhdGUsIHdoaWNoIGZyZXF1ZW50bHkgbWVhbnMgYSBzZXJpZi4KICAgICoKLSAgICogICAgQSBzdGVtIGlzIHJlY29nbml6ZWQgYnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb246CisgICAqICAgQSBzdGVtIGlzIHJlY29nbml6ZWQgYnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb246CiAgICAqCi0gICAqICAgICAgYmVzdCBzZWdtZW50XzEgPSBzZWdtZW50XzIgJiYgYmVzdCBzZWdtZW50XzIgPSBzZWdtZW50XzEKKyAgICogICAgIGJlc3Qgc2VnbWVudF8xID0gc2VnbWVudF8yICYmIGJlc3Qgc2VnbWVudF8yID0gc2VnbWVudF8xCiAgICAqCi0gICAqICAgIFRoZSBiZXN0IGNhbmRpZGF0ZSBpcyBzdG9yZWQgaW4gZmllbGQgYGxpbmsnIGluIHN0cnVjdHVyZQotICAgKiAgICBgQUZfU2VnbWVudCcuCisgICAqICAgVGhlIGJlc3QgY2FuZGlkYXRlIGlzIHN0b3JlZCBpbiBmaWVsZCBgbGluaycgaW4gc3RydWN0dXJlCisgICAqICAgYEFGX1NlZ21lbnQnLgogICAgKgotICAgKiAgICBJbiB0aGUgYWJvdmUgQVNDSUkgZHJhd2luZywgdGhlIGJlc3QgY2FuZGlkYXRlIGZvciBib3RoIEFCIGFuZCBDRCBpcwotICAgKiAgICBHSCwgd2hpbGUgdGhlIGJlc3QgY2FuZGlkYXRlIGZvciBHSCBpcyBBQi4gIFNpbWlsYXJseSwgdGhlIGJlc3QKLSAgICogICAgY2FuZGlkYXRlIGZvciBFRiBhbmQgR0ggaXMgQUIsIHdoaWxlIHRoZSBiZXN0IGNhbmRpZGF0ZSBmb3IgQUIgaXMKLSAgICogICAgR0guCisgICAqICAgSW4gdGhlIGFib3ZlIEFTQ0lJIGRyYXdpbmcsIHRoZSBiZXN0IGNhbmRpZGF0ZSBmb3IgYm90aCBBQiBhbmQgQ0QgaXMKKyAgICogICBHSCwgd2hpbGUgdGhlIGJlc3QgY2FuZGlkYXRlIGZvciBHSCBpcyBBQi4gIFNpbWlsYXJseSwgdGhlIGJlc3QKKyAgICogICBjYW5kaWRhdGUgZm9yIEVGIGFuZCBHSCBpcyBBQiwgd2hpbGUgdGhlIGJlc3QgY2FuZGlkYXRlIGZvciBBQiBpcworICAgKiAgIEdILgogICAgKgotICAgKiAgICBUaGUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyBvZiBzdGVtcyBpcyBkZXBlbmRlbnQgb24gdGhlIHdyaXRpbmcKLSAgICogICAgc3lzdGVtLgorICAgKiAgIFRoZSBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nIG9mIHN0ZW1zIGlzIGRlcGVuZGVudCBvbiB0aGUgd3JpdGluZworICAgKiAgIHN5c3RlbS4KICAgICoKICAgICoKLSAgICogIFNlcmlmcworICAgKiBTZXJpZnMKICAgICoKLSAgICogICAgU2VyaWZzIGFyZSBkZXRlY3RlZCBieSBgYWZfe2NqayxsYXRpbiwuLi59X2hpbnRfZWRnZXMnLgorICAgKiAgIFNlcmlmcyBhcmUgZGV0ZWN0ZWQgYnkgYGFmX3tjamssbGF0aW4sLi4ufV9oaW50X2VkZ2VzJy4KICAgICoKLSAgICogICAgSW4gY29tcGFyaXNvbiB0byBhIHN0ZW0sIGEgc2VyaWYgKGFzIGhhbmRsZWQgYnkgdGhlIGF1dG8taGludGVyCi0gICAqICAgIG1vZHVsZSB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGBsYXRpbicgd3JpdGluZyBzeXN0ZW0pIGhhcworICAgKiAgIEluIGNvbXBhcmlzb24gdG8gYSBzdGVtLCBhIHNlcmlmIChhcyBoYW5kbGVkIGJ5IHRoZSBhdXRvLWhpbnRlcgorICAgKiAgIG1vZHVsZSB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGBsYXRpbicgd3JpdGluZyBzeXN0ZW0pIGhhcwogICAgKgotICAgKiAgICAgIGJlc3Qgc2VnbWVudF8xID0gc2VnbWVudF8yICYmIGJlc3Qgc2VnbWVudF8yICE9IHNlZ21lbnRfMQorICAgKiAgICAgYmVzdCBzZWdtZW50XzEgPSBzZWdtZW50XzIgJiYgYmVzdCBzZWdtZW50XzIgIT0gc2VnbWVudF8xCiAgICAqCi0gICAqICAgIHdoZXJlIHNlZ21lbnRfMSBjb3JyZXNwb25kcyB0byB0aGUgc2VyaWYgc2VnbWVudCAoQ0QgYW5kIEVGIGluIHRoZQotICAgKiAgICBhYm92ZSBBU0NJSSBkcmF3aW5nKS4KKyAgICogICB3aGVyZSBzZWdtZW50XzEgY29ycmVzcG9uZHMgdG8gdGhlIHNlcmlmIHNlZ21lbnQgKENEIGFuZCBFRiBpbiB0aGUKKyAgICogICBhYm92ZSBBU0NJSSBkcmF3aW5nKS4KICAgICoKLSAgICogICAgVGhlIGJlc3QgY2FuZGlkYXRlIGlzIHN0b3JlZCBpbiBmaWVsZCBgc2VyaWYnIGluIHN0cnVjdHVyZQotICAgKiAgICBgQUZfU2VnbWVudCcgKGFuZCBgbGluaycgaXMgc2V0IHRvIE5VTEwpLgorICAgKiAgIFRoZSBiZXN0IGNhbmRpZGF0ZSBpcyBzdG9yZWQgaW4gZmllbGQgYHNlcmlmJyBpbiBzdHJ1Y3R1cmUKKyAgICogICBgQUZfU2VnbWVudCcgKGFuZCBgbGluaycgaXMgc2V0IHRvIE5VTEwpLgogICAgKgogICAgKgotICAgKiAgVG91Y2hlZCBwb2ludHMKKyAgICogVG91Y2hlZCBwb2ludHMKICAgICoKLSAgICogICAgQSBwb2ludCBpcyBjYWxsZWQgYHRvdWNoZWQnIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZCBzb21laG93IGJ5IHRoZQotICAgKiAgICBhdXRvLWhpbnRlci4gIEl0IGJhc2ljYWxseSBtZWFucyB0aGF0IGl0IHNob3VsZG4ndCBiZSBtb3ZlZCBhZ2FpbgotICAgKiAgICAob3IgbW92ZWQgb25seSB1bmRlciBjZXJ0YWluIGNvbnN0cmFpbnRzIHRvIHByZXNlcnZlIHRoZSBhbHJlYWR5Ci0gICAqICAgIGFwcGxpZWQgcHJvY2Vzc2luZykuCisgICAqICAgQSBwb2ludCBpcyBjYWxsZWQgYHRvdWNoZWQnIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZCBzb21laG93IGJ5IHRoZQorICAgKiAgIGF1dG8taGludGVyLiAgSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgaXQgc2hvdWxkbid0IGJlIG1vdmVkIGFnYWluCisgICAqICAgKG9yIG1vdmVkIG9ubHkgdW5kZXIgY2VydGFpbiBjb25zdHJhaW50cyB0byBwcmVzZXJ2ZSB0aGUgYWxyZWFkeQorICAgKiAgIGFwcGxpZWQgcHJvY2Vzc2luZykuCiAgICAqCiAgICAqCi0gICAqICBGbGF0IGFuZCByb3VuZCBzZWdtZW50cworICAgKiBGbGF0IGFuZCByb3VuZCBzZWdtZW50cwogICAgKgotICAgKiAgICBTZWdtZW50cyBhcmUgYHJvdW5kJyBvciBgZmxhdCcsIGRlcGVuZGluZyBvbiB0aGUgc2VyaWVzIG9mIHBvaW50cwotICAgKiAgICB0aGF0IGRlZmluZSB0aGVtLiAgQSBzZWdtZW50IGlzIHJvdW5kIGlmIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBwb2ludAotICAgKiAgICBvZiBhbiBleHRyZW11bSAod2hpY2ggY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBwb2ludCBvciBzZXF1ZW5jZSBvZgotICAgKiAgICBwb2ludHMpIGFyZSBib3RoIGNvbmljIG9yIGN1YmljIGNvbnRyb2wgcG9pbnRzLiAgT3RoZXJ3aXNlLCBhCi0gICAqICAgIHNlZ21lbnQgd2l0aCBhbiBleHRyZW11bSBpcyBmbGF0LgorICAgKiAgIFNlZ21lbnRzIGFyZSBgcm91bmQnIG9yIGBmbGF0JywgZGVwZW5kaW5nIG9uIHRoZSBzZXJpZXMgb2YgcG9pbnRzCisgICAqICAgdGhhdCBkZWZpbmUgdGhlbS4gIEEgc2VnbWVudCBpcyByb3VuZCBpZiB0aGUgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnQKKyAgICogICBvZiBhbiBleHRyZW11bSAod2hpY2ggY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBwb2ludCBvciBzZXF1ZW5jZSBvZgorICAgKiAgIHBvaW50cykgYXJlIGJvdGggY29uaWMgb3IgY3ViaWMgY29udHJvbCBwb2ludHMuICBPdGhlcndpc2UsIGEKKyAgICogICBzZWdtZW50IHdpdGggYW4gZXh0cmVtdW0gaXMgZmxhdC4KICAgICoKICAgICoKLSAgICogIFN0cm9uZyBQb2ludHMKKyAgICogU3Ryb25nIFBvaW50cwogICAgKgotICAgKiAgICBFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHBvaW50cyBub3QgcGFydCBvZiBhbiBlZGdlIG5lZWQgdG8gYmUKLSAgICogICAgaW50ZXJwb2xhdGVkIGxpbmVhcmx5IGJldHdlZW4gdGhlaXIgdHdvIGNsb3Nlc3QgZWRnZXMsIGV2ZW4gaWYgdGhlc2UKLSAgICogICAgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb250b3VyIG9mIHRob3NlIHBhcnRpY3VsYXIgcG9pbnRzLiAgVHlwaWNhbAotICAgKiAgICBjYW5kaWRhdGVzIGZvciB0aGlzIGFyZQorICAgKiAgIEV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgcG9pbnRzIG5vdCBwYXJ0IG9mIGFuIGVkZ2UgbmVlZCB0byBiZQorICAgKiAgIGludGVycG9sYXRlZCBsaW5lYXJseSBiZXR3ZWVuIHRoZWlyIHR3byBjbG9zZXN0IGVkZ2VzLCBldmVuIGlmIHRoZXNlCisgICAqICAgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb250b3VyIG9mIHRob3NlIHBhcnRpY3VsYXIgcG9pbnRzLiAgVHlwaWNhbAorICAgKiAgIGNhbmRpZGF0ZXMgZm9yIHRoaXMgYXJlCiAgICAqCi0gICAqICAgIC0gYW5nbGUgcG9pbnRzIChpLmUuLCBwb2ludHMgd2hlcmUgdGhlIGBpbicgYW5kIGBvdXQnIGRpcmVjdGlvbgotICAgKiAgICAgIGRpZmZlciBncmVhdGx5KQorICAgKiAgIC0gYW5nbGUgcG9pbnRzIChpLmUuLCBwb2ludHMgd2hlcmUgdGhlIGBpbicgYW5kIGBvdXQnIGRpcmVjdGlvbgorICAgKiAgICAgZGlmZmVyIGdyZWF0bHkpCiAgICAqCi0gICAqICAgIC0gaW5mbGVjdGlvbiBwb2ludHMgKGkuZS4sIHdoZXJlIHRoZSBgaW4nIGFuZCBgb3V0JyBhbmdsZXMgYXJlIHRoZQotICAgKiAgICAgIHNhbWUsIGJ1dCB0aGUgY3VydmF0dXJlIGNoYW5nZXMgc2lnbikgW2N1cnJlbnRseSwgc3VjaCBwb2ludHMKLSAgICogICAgICBhcmVuJ3QgaGFuZGxlZCBzcGVjaWFsbHkgaW4gdGhlIGF1dG8taGludGVyXQorICAgKiAgIC0gaW5mbGVjdGlvbiBwb2ludHMgKGkuZS4sIHdoZXJlIHRoZSBgaW4nIGFuZCBgb3V0JyBhbmdsZXMgYXJlIHRoZQorICAgKiAgICAgc2FtZSwgYnV0IHRoZSBjdXJ2YXR1cmUgY2hhbmdlcyBzaWduKSBbY3VycmVudGx5LCBzdWNoIHBvaW50cworICAgKiAgICAgYXJlbid0IGhhbmRsZWQgc3BlY2lhbGx5IGluIHRoZSBhdXRvLWhpbnRlcl0KICAgICoKLSAgICogICAgYGFmX2dseXBoX2hpbnRzX2FsaWduX3N0cm9uZ19wb2ludHMnIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzCi0gICAqICAgIGNhcmUgb2Ygc3VjaCBzaXR1YXRpb25zOyBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBUcnVlVHlwZSBgSVAnCi0gICAqICAgIGhpbnRpbmcgaW5zdHJ1Y3Rpb24uCisgICAqICAgYGFmX2dseXBoX2hpbnRzX2FsaWduX3N0cm9uZ19wb2ludHMnIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzCisgICAqICAgY2FyZSBvZiBzdWNoIHNpdHVhdGlvbnM7IGl0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIFRydWVUeXBlIGBJUCcKKyAgICogICBoaW50aW5nIGluc3RydWN0aW9uLgogICAgKgogICAgKgotICAgKiAgV2VhayBQb2ludHMKKyAgICogV2VhayBQb2ludHMKICAgICoKLSAgICogICAgT3RoZXIgcG9pbnRzIGluIHRoZSBvdXRsaW5lIG11c3QgYmUgaW50ZXJwb2xhdGVkIHVzaW5nIHRoZQotICAgKiAgICBjb29yZGluYXRlcyBvZiB0aGVpciBwcmV2aW91cyBhbmQgbmV4dCB1bmZpdHRlZCBjb250b3VyIG5laWdoYm91cnMuCi0gICAqICAgIFRoZXNlIGFyZSBjYWxsZWQgYHdlYWsgcG9pbnRzJyBhbmQgYXJlIHRvdWNoZWQgYnkgdGhlIGZ1bmN0aW9uCi0gICAqICAgIGBhZl9nbHlwaF9oaW50c19hbGlnbl93ZWFrX3BvaW50cycsIGVxdWl2YWxlbnQgdG8gdGhlIFRydWVUeXBlIGBJVVAnCi0gICAqICAgIGhpbnRpbmcgaW5zdHJ1Y3Rpb24uICBUeXBpY2FsIGNhbmRpZGF0ZXMgYXJlIGNvbnRyb2wgcG9pbnRzIGFuZAotICAgKiAgICBwb2ludHMgb24gdGhlIGNvbnRvdXIgd2l0aG91dCBhIG1ham9yIGRpcmVjdGlvbi4KKyAgICogICBPdGhlciBwb2ludHMgaW4gdGhlIG91dGxpbmUgbXVzdCBiZSBpbnRlcnBvbGF0ZWQgdXNpbmcgdGhlCisgICAqICAgY29vcmRpbmF0ZXMgb2YgdGhlaXIgcHJldmlvdXMgYW5kIG5leHQgdW5maXR0ZWQgY29udG91ciBuZWlnaGJvdXJzLgorICAgKiAgIFRoZXNlIGFyZSBjYWxsZWQgYHdlYWsgcG9pbnRzJyBhbmQgYXJlIHRvdWNoZWQgYnkgdGhlIGZ1bmN0aW9uCisgICAqICAgYGFmX2dseXBoX2hpbnRzX2FsaWduX3dlYWtfcG9pbnRzJywgZXF1aXZhbGVudCB0byB0aGUgVHJ1ZVR5cGUgYElVUCcKKyAgICogICBoaW50aW5nIGluc3RydWN0aW9uLiAgVHlwaWNhbCBjYW5kaWRhdGVzIGFyZSBjb250cm9sIHBvaW50cyBhbmQKKyAgICogICBwb2ludHMgb24gdGhlIGNvbnRvdXIgd2l0aG91dCBhIG1ham9yIGRpcmVjdGlvbi4KICAgICoKLSAgICogICAgVGhlIG1ham9yIGVmZmVjdCBpcyB0byByZWR1Y2UgcG9zc2libGUgZGlzdG9ydGlvbiBjYXVzZWQgYnkKLSAgICogICAgYWxpZ25tZW50IG9mIGVkZ2VzIGFuZCBzdHJvbmcgcG9pbnRzLCB0aHVzIHdlYWsgcG9pbnRzIGFyZSBwcm9jZXNzZWQKLSAgICogICAgYWZ0ZXIgc3Ryb25nIHBvaW50cy4KKyAgICogICBUaGUgbWFqb3IgZWZmZWN0IGlzIHRvIHJlZHVjZSBwb3NzaWJsZSBkaXN0b3J0aW9uIGNhdXNlZCBieQorICAgKiAgIGFsaWdubWVudCBvZiBlZGdlcyBhbmQgc3Ryb25nIHBvaW50cywgdGh1cyB3ZWFrIHBvaW50cyBhcmUgcHJvY2Vzc2VkCisgICAqICAgYWZ0ZXIgc3Ryb25nIHBvaW50cy4KICAgICovCiAKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZpbmRpYy5jIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5jCmluZGV4IGRmYmVhNWYuLjQ1YzFhMTAgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaW5kaWMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmaW5kaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgUmFodWwgQmhhbGVyYW8gPHJhaHVsLmJoYWxlcmFvQHJlZGhhdC5jb20+LCA8Yi5yYWh1bC5wbUBnbWFpbC5jb20+LiAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmaW5kaWMuYworICoKKyAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgSW5kaWMgd3JpdGluZyBzeXN0ZW0gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiYWZ0eXBlcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZpbmRpYy5oIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5oCmluZGV4IDU2ODg3MzguLjk0ZmY3NjQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaW5kaWMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmaW5kaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4gICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmluZGljLmgKKyAqCisgKiAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIEluZGljIHdyaXRpbmcgc3lzdGVtCisgKiAgIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5CisgKiBSYWh1bCBCaGFsZXJhbyA8cmFodWwuYmhhbGVyYW9AcmVkaGF0LmNvbT4sIDxiLnJhaHVsLnBtQGdtYWlsLmNvbT4uCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBBRklORElDX0hfCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmMgYi9zcmMvYXV0b2ZpdC9hZmxhdGluLmMKaW5kZXggOWYxYjU0MC4uYTkwZmMxYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbi5jCisrKyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZsYXRpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZsYXRpbi5jCisgKgorICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKLSNpbmNsdWRlICJhZnBpYy5oIgogI2luY2x1ZGUgImFmbGF0aW4uaCIKICNpbmNsdWRlICJhZmVycm9ycy5oIgogCkBAIC0zMSwxMiArMzAsMTIgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmbGF0aW4KIApAQCAtODMsMjQgKzgyLDMwIEBACiAgICAgICBBRl9MYXRpbk1ldHJpY3NSZWMgIGR1bW15WzFdOwogICAgICAgQUZfU2NhbGVyICAgICAgICAgICBzY2FsZXIgPSAmZHVtbXktPnJvb3Quc2NhbGVyOwogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICAgIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzID0gbWV0cmljcy0+cm9vdC5nbG9iYWxzOworICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzICA9IG1ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3M7CisgICAgICBBRl9TY3JpcHRDbGFzcyAgc2NyaXB0X2NsYXNzID0gYWZfc2NyaXB0X2NsYXNzZXNbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICAgIC8qIElmIEhhcmZCdXp6IGlzIG5vdCBhdmFpbGFibGUsIHdlIG5lZWQgYSBwb2ludGVyIHRvIGEgc2luZ2xlICovCisgICAgICAvKiB1bnNpZ25lZCBsb25nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZjsKKyNlbHNlCisgICAgICBGVF9VTG9uZyAgc2hhcGVyX2J1Zl87CisgICAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZiA9ICZzaGFwZXJfYnVmXzsKICNlbmRpZgogCi0gICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gbWV0cmljcy0+cm9vdC5zdHlsZV9jbGFzczsKLSAgICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKLQotICAgICAgdm9pZCogICAgICAgIHNoYXBlcl9idWY7CiAgICAgICBjb25zdCBjaGFyKiAgcDsKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICBGVF9VTG9uZyAgY2ggPSAwOwogI2VuZGlmCiAKLSAgICAgIHAgICAgICAgICAgPSBzY3JpcHRfY2xhc3MtPnN0YW5kYXJkX2NoYXJzdHJpbmc7Ci0gICAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKIAorICAgICAgcCA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcnN0cmluZzsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKKyNlbmRpZgogICAgICAgLyoKICAgICAgICAqIFdlIGNoZWNrIGEgbGlzdCBvZiBzdGFuZGFyZCBjaGFyYWN0ZXJzIHRvIGNhdGNoIGZlYXR1cmVzIGxpa2UKICAgICAgICAqIGBjMnNjJyAoc21hbGwgY2FwcyBmcm9tIGNhcHMpIHRoYXQgZG9uJ3QgY29udGFpbiBsb3dlcmNhc2UgbGV0dGVycwpAQCAtMTg2LDEwICsxOTEsMTAgQEAKICAgICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgICAgLyoKLSAgICAgICAgICogIFdlIGFzc3VtZSB0aGF0IHRoZSBnbHlwaHMgc2VsZWN0ZWQgZm9yIHRoZSBzdGVtIHdpZHRoCi0gICAgICAgICAqICBjb21wdXRhdGlvbiBhcmUgYGZlYXR1cmVsZXNzJyBlbm91Z2ggc28gdGhhdCB0aGUgbGlua2luZwotICAgICAgICAgKiAgYWxnb3JpdGhtIHdvcmtzIGZpbmUgd2l0aG91dCBhZGp1c3RtZW50cyBvZiBpdHMgc2NvcmluZwotICAgICAgICAgKiAgZnVuY3Rpb24uCisgICAgICAgICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBnbHlwaHMgc2VsZWN0ZWQgZm9yIHRoZSBzdGVtIHdpZHRoCisgICAgICAgICAqIGNvbXB1dGF0aW9uIGFyZSBgZmVhdHVyZWxlc3MnIGVub3VnaCBzbyB0aGF0IHRoZSBsaW5raW5nCisgICAgICAgICAqIGFsZ29yaXRobSB3b3JrcyBmaW5lIHdpdGhvdXQgYWRqdXN0bWVudHMgb2YgaXRzIHNjb3JpbmcKKyAgICAgICAgICogZnVuY3Rpb24uCiAgICAgICAgICAqLwogICAgICAgICBhZl9sYXRpbl9oaW50c19saW5rX3NlZ21lbnRzKCBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKQEAgLTMyOSw3ICszMzQsMTQgQEAKIAogICAgIEZUX1BvcyAgZmxhdF90aHJlc2hvbGQgPSBGTEFUX1RIUkVTSE9MRCggbWV0cmljcy0+dW5pdHNfcGVyX2VtICk7CiAKLSAgICB2b2lkKiAgc2hhcGVyX2J1ZjsKKyAgICAvKiBJZiBIYXJmQnV6eiBpcyBub3QgYXZhaWxhYmxlLCB3ZSBuZWVkIGEgcG9pbnRlciB0byBhIHNpbmdsZSAqLworICAgIC8qIHVuc2lnbmVkIGxvbmcgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKKyAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZjsKKyNlbHNlCisgICAgRlRfVUxvbmcgIHNoYXBlcl9idWZfOworICAgIHZvaWQqICAgICBzaGFwZXJfYnVmID0gJnNoYXBlcl9idWZfOworI2VuZGlmCiAKIAogICAgIC8qIHdlIHdhbGsgb3ZlciB0aGUgYmx1ZSBjaGFyYWN0ZXIgc3RyaW5ncyBhcyBzcGVjaWZpZWQgaW4gdGhlICovCkBAIC0zMzksNyArMzUxLDkgQEAKICAgICAgICAgICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogICAgICAgICAgICAgICAgICJcbiIgKSk7CiAKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgogICAgIHNoYXBlcl9idWYgPSBhZl9zaGFwZXJfYnVmX2NyZWF0ZSggZmFjZSApOworI2VuZGlmCiAKICAgICBmb3IgKCA7IGJzLT5zdHJpbmcgIT0gQUZfQkxVRV9TVFJJTkdfTUFYOyBicysrICkKICAgICB7CkBAIC04ODQsOCArODk4LDggQEAKICAgICAgIGlmICggbnVtX2ZsYXRzID09IDAgJiYgbnVtX3JvdW5kcyA9PSAwICkKICAgICAgIHsKICAgICAgICAgLyoKLSAgICAgICAgICogIHdlIGNvdWxkbid0IGZpbmQgYSBzaW5nbGUgZ2x5cGggdG8gY29tcHV0ZSB0aGlzIGJsdWUgem9uZSwKLSAgICAgICAgICogIHdlIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCB0aGVuCisgICAgICAgICAqIHdlIGNvdWxkbid0IGZpbmQgYSBzaW5nbGUgZ2x5cGggdG8gY29tcHV0ZSB0aGlzIGJsdWUgem9uZSwKKyAgICAgICAgICogd2Ugd2lsbCBzaW1wbHkgaWdub3JlIGl0IHRoZW4KICAgICAgICAgICovCiAgICAgICAgIEZUX1RSQUNFNSgoICIgIGVtcHR5XG4iICkpOwogICAgICAgICBjb250aW51ZTsKQEAgLTEwMzYsMTUgKzEwNTAsMjUgQEAKICAgICBGVF9Cb29sICAgc3RhcnRlZCA9IDAsIHNhbWVfd2lkdGggPSAxOwogICAgIEZUX0ZpeGVkICBhZHZhbmNlID0gMCwgb2xkX2FkdmFuY2UgPSAwOwogCi0gICAgdm9pZCogIHNoYXBlcl9idWY7CisgICAgLyogSWYgSGFyZkJ1enogaXMgbm90IGF2YWlsYWJsZSwgd2UgbmVlZCBhIHBvaW50ZXIgdG8gYSBzaW5nbGUgKi8KKyAgICAvKiB1bnNpZ25lZCBsb25nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCisgICAgdm9pZCogICAgIHNoYXBlcl9idWY7CisjZWxzZQorICAgIEZUX1VMb25nICBzaGFwZXJfYnVmXzsKKyAgICB2b2lkKiAgICAgc2hhcGVyX2J1ZiA9ICZzaGFwZXJfYnVmXzsKKyNlbmRpZgogCiAgICAgLyogaW4gYWxsIHN1cHBvcnRlZCBjaGFybWFwcywgZGlnaXRzIGhhdmUgY2hhcmFjdGVyIGNvZGVzIDB4MzAtMHgzOSAqLwogICAgIGNvbnN0IGNoYXIgICBkaWdpdHNbXSA9ICIwIDEgMiAzIDQgNSA2IDcgOCA5IjsKICAgICBjb25zdCBjaGFyKiAgcDsKIAogCi0gICAgcCAgICAgICAgICA9IGRpZ2l0czsKKyAgICBwID0gZGlnaXRzOworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKICAgICBzaGFwZXJfYnVmID0gYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIGZhY2UgKTsKKyNlbmRpZgogCiAgICAgd2hpbGUgKCAqcCApCiAgICAgewpAQCAtMTk2NywxNyArMTk5MSwxNyBAQAogICAgICAgICAgIGlmICggbGVuID49IGxlbl90aHJlc2hvbGQgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiAgVGhlIHNjb3JlIGlzIHRoZSBzdW0gb2YgdHdvIGRlbWVyaXRzIGluZGljYXRpbmcgdGhlCi0gICAgICAgICAgICAgKiAgYGJhZG5lc3MnIG9mIGEgZml0LCBtZWFzdXJlZCBhbG9uZyB0aGUgc2VnbWVudHMnIG1haW4gYXhpcwotICAgICAgICAgICAgICogIGFuZCBvcnRob2dvbmFsIHRvIGl0LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgKiBUaGUgc2NvcmUgaXMgdGhlIHN1bSBvZiB0d28gZGVtZXJpdHMgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgICAgICAqIGBiYWRuZXNzJyBvZiBhIGZpdCwgbWVhc3VyZWQgYWxvbmcgdGhlIHNlZ21lbnRzJyBtYWluIGF4aXMKKyAgICAgICAgICAgICAqIGFuZCBvcnRob2dvbmFsIHRvIGl0LCByZXNwZWN0aXZlbHkuCiAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICogIG8gVGhlIGxlc3Mgb3ZlcmxhcHBpbmcgYWxvbmcgdGhlIG1haW4gYXhpcywgdGhlIHdvcnNlIGl0Ci0gICAgICAgICAgICAgKiAgICBpcywgY2F1c2luZyBhIGxhcmdlciBkZW1lcml0LgorICAgICAgICAgICAgICogLSBUaGUgbGVzcyBvdmVybGFwcGluZyBhbG9uZyB0aGUgbWFpbiBheGlzLCB0aGUgd29yc2UgaXQKKyAgICAgICAgICAgICAqICAgaXMsIGNhdXNpbmcgYSBsYXJnZXIgZGVtZXJpdC4KICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiAgbyBUaGUgbmVhcmVyIHRoZSBvcnRob2dvbmFsIGRpc3RhbmNlIHRvIGEgc3RlbSB3aWR0aCwgdGhlCi0gICAgICAgICAgICAgKiAgICBiZXR0ZXIgaXQgaXMsIGNhdXNpbmcgYSBzbWFsbGVyIGRlbWVyaXQuICBGb3Igc2ltcGxpY2l0eSwKLSAgICAgICAgICAgICAqICAgIGhvd2V2ZXIsIHdlIG9ubHkgaW5jcmVhc2UgdGhlIGRlbWVyaXQgZm9yIHZhbHVlcyB0aGF0Ci0gICAgICAgICAgICAgKiAgICBleGNlZWQgdGhlIGxhcmdlc3Qgc3RlbSB3aWR0aC4KKyAgICAgICAgICAgICAqIC0gVGhlIG5lYXJlciB0aGUgb3J0aG9nb25hbCBkaXN0YW5jZSB0byBhIHN0ZW0gd2lkdGgsIHRoZQorICAgICAgICAgICAgICogICBiZXR0ZXIgaXQgaXMsIGNhdXNpbmcgYSBzbWFsbGVyIGRlbWVyaXQuICBGb3Igc2ltcGxpY2l0eSwKKyAgICAgICAgICAgICAqICAgaG93ZXZlciwgd2Ugb25seSBpbmNyZWFzZSB0aGUgZGVtZXJpdCBmb3IgdmFsdWVzIHRoYXQKKyAgICAgICAgICAgICAqICAgZXhjZWVkIHRoZSBsYXJnZXN0IHN0ZW0gd2lkdGguCiAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgRlRfUG9zICBkaXN0ID0gcG9zMiAtIHBvczE7CkBAIC0yMDQ5LDEzICsyMDczLDggQEAKICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CiAgICAgQUZfTGF0aW5BeGlzICBsYXhpcyAgPSAmKChBRl9MYXRpbk1ldHJpY3MpaGludHMtPm1ldHJpY3MpLT5heGlzW2RpbV07CiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzID0gaGludHMtPm1ldHJpY3MtPmdsb2JhbHM7Ci0jZW5kaWYKLQogICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzcyAgPSBoaW50cy0+bWV0cmljcy0+c3R5bGVfY2xhc3M7Ci0gICAgQUZfU2NyaXB0Q2xhc3MgIHNjcmlwdF9jbGFzcyA9IEFGX1NDUklQVF9DTEFTU0VTX0dFVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKKyAgICBBRl9TY3JpcHRDbGFzcyAgc2NyaXB0X2NsYXNzID0gYWZfc2NyaXB0X2NsYXNzZXNbc3R5bGVfY2xhc3MtPnNjcmlwdF07CiAKICAgICBGVF9Cb29sICB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPSAwOwogCkBAIC0yMDg2LDkgKzIxMDUsOSBAQAogICAgICAgdG9wX3RvX2JvdHRvbV9oaW50aW5nID0gc2NyaXB0X2NsYXNzLT50b3BfdG9fYm90dG9tX2hpbnRpbmc7CiAKICAgICAvKgotICAgICAqICBXZSBpZ25vcmUgYWxsIHNlZ21lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiAxIHBpeGVsIGluIGxlbmd0aAotICAgICAqICB0byBhdm9pZCBtYW55IHByb2JsZW1zIHdpdGggc2VyaWYgZm9udHMuICBXZSBjb21wdXRlIHRoZQotICAgICAqICBjb3JyZXNwb25kaW5nIHRocmVzaG9sZCBpbiBmb250IHVuaXRzLgorICAgICAqIFdlIGlnbm9yZSBhbGwgc2VnbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIDEgcGl4ZWwgaW4gbGVuZ3RoCisgICAgICogdG8gYXZvaWQgbWFueSBwcm9ibGVtcyB3aXRoIHNlcmlmIGZvbnRzLiAgV2UgY29tcHV0ZSB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRocmVzaG9sZCBpbiBmb250IHVuaXRzLgogICAgICAqLwogICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICkKICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggNjQsIGhpbnRzLT55X3NjYWxlICk7CkBAIC0yMDk2LDI2ICsyMTE1LDI2IEBACiAgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSAwOwogCiAgICAgLyoKLSAgICAgKiAgU2ltaWxhcmx5LCB3ZSBpZ25vcmUgc2VnbWVudHMgdGhhdCBoYXZlIGEgd2lkdGggZGVsdGEKLSAgICAgKiAgbGFyZ2VyIHRoYW4gMC41cHggKGkuZS4sIGEgd2lkdGggbGFyZ2VyIHRoYW4gMXB4KS4KKyAgICAgKiBTaW1pbGFybHksIHdlIGlnbm9yZSBzZWdtZW50cyB0aGF0IGhhdmUgYSB3aWR0aCBkZWx0YQorICAgICAqIGxhcmdlciB0aGFuIDAuNXB4IChpLmUuLCBhIHdpZHRoIGxhcmdlciB0aGFuIDFweCkuCiAgICAgICovCiAgICAgc2VnbWVudF93aWR0aF90aHJlc2hvbGQgPSBGVF9EaXZGaXgoIDMyLCBzY2FsZSApOwogCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIFdlIGJlZ2luIGJ5IGdlbmVyYXRpbmcgYSBzb3J0ZWQgdGFibGUgb2YgZWRnZXMgZm9yIHRoZSBjdXJyZW50ICAgICovCi0gICAgLyogZGlyZWN0aW9uLiAgVG8gZG8gc28sIHdlIHNpbXBseSBzY2FuIGVhY2ggc2VnbWVudCBhbmQgdHJ5IHRvIGZpbmQgKi8KLSAgICAvKiBhbiBlZGdlIGluIG91ciB0YWJsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0cyBwb3NpdGlvbi4gICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogSWYgbm8gZWRnZSBpcyBmb3VuZCwgd2UgY3JlYXRlIGFuZCBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUgICAgICAgKi8KLSAgICAvKiBzb3J0ZWQgdGFibGUuICBPdGhlcndpc2UsIHdlIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncyAqLwotICAgIC8qIGxpc3Qgd2hpY2ggZ2V0cyBwcm9jZXNzZWQgaW4gdGhlIHNlY29uZCBzdGVwIHRvIGNvbXB1dGUgdGhlICAgICAgICovCi0gICAgLyogZWRnZSdzIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIE5vdGUgdGhhdCB0aGUgdGFibGUgb2YgZWRnZXMgaXMgc29ydGVkIGFsb25nIHRoZSBzZWdtZW50L2VkZ2UgICAgICovCi0gICAgLyogcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIFdlIGJlZ2luIGJ5IGdlbmVyYXRpbmcgYSBzb3J0ZWQgdGFibGUgb2YgZWRnZXMgZm9yIHRoZSBjdXJyZW50CisgICAgICogZGlyZWN0aW9uLiAgVG8gZG8gc28sIHdlIHNpbXBseSBzY2FuIGVhY2ggc2VnbWVudCBhbmQgdHJ5IHRvIGZpbmQKKyAgICAgKiBhbiBlZGdlIGluIG91ciB0YWJsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0cyBwb3NpdGlvbi4KKyAgICAgKgorICAgICAqIElmIG5vIGVkZ2UgaXMgZm91bmQsIHdlIGNyZWF0ZSBhbmQgaW5zZXJ0IGEgbmV3IGVkZ2UgaW4gdGhlCisgICAgICogc29ydGVkIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSBzaW1wbHkgYWRkIHRoZSBzZWdtZW50IHRvIHRoZSBlZGdlJ3MKKyAgICAgKiBsaXN0IHdoaWNoIGdldHMgcHJvY2Vzc2VkIGluIHRoZSBzZWNvbmQgc3RlcCB0byBjb21wdXRlIHRoZQorICAgICAqIGVkZ2UncyBwcm9wZXJ0aWVzLgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoZSB0YWJsZSBvZiBlZGdlcyBpcyBzb3J0ZWQgYWxvbmcgdGhlIHNlZ21lbnQvZWRnZQorICAgICAqIHBvc2l0aW9uLgorICAgICAqCisgICAgICovCiAKICAgICAvKiBhc3N1cmUgdGhhdCBlZGdlIGRpc3RhbmNlIHRocmVzaG9sZCBpcyBhdCBtb3N0IDAuMjVweCAqLwogICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gRlRfTXVsRml4KCBsYXhpcy0+ZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCkBAIC0yMjM3LDE3ICsyMjU2LDE3IEBACiAgICAgfQogCiAKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogR29vZCwgd2Ugbm93IGNvbXB1dGUgZWFjaCBlZGdlJ3MgcHJvcGVydGllcyBhY2NvcmRpbmcgdG8gdGhlICAgKi8KLSAgICAvKiBzZWdtZW50cyBmb3VuZCBvbiBpdHMgcG9zaXRpb24uICBCYXNpY2FsbHksIHRoZXNlIGFyZSAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogIC0gdGhlIGVkZ2UncyBtYWluIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgLSBzdGVtIGVkZ2UsIHNlcmlmIGVkZ2Ugb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RlbSB0aGVuKSAqLwotICAgIC8qICAtIHJvdW5kZWQgZWRnZSwgc3RyYWlnaHQgb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RyYWlnaHQpICovCi0gICAgLyogIC0gbGluayBmb3IgZWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIEdvb2QsIHdlIG5vdyBjb21wdXRlIGVhY2ggZWRnZSdzIHByb3BlcnRpZXMgYWNjb3JkaW5nIHRvIHRoZQorICAgICAqIHNlZ21lbnRzIGZvdW5kIG9uIGl0cyBwb3NpdGlvbi4gIEJhc2ljYWxseSwgdGhlc2UgYXJlCisgICAgICoKKyAgICAgKiAtIHRoZSBlZGdlJ3MgbWFpbiBkaXJlY3Rpb24KKyAgICAgKiAtIHN0ZW0gZWRnZSwgc2VyaWYgZWRnZSBvciBib3RoICh3aGljaCBkZWZhdWx0cyB0byBzdGVtIHRoZW4pCisgICAgICogLSByb3VuZGVkIGVkZ2UsIHN0cmFpZ2h0IG9yIGJvdGggKHdoaWNoIGRlZmF1bHRzIHRvIHN0cmFpZ2h0KQorICAgICAqIC0gbGluayBmb3IgZWRnZQorICAgICAqCisgICAgICovCiAKICAgICAvKiBmaXJzdCBvZiBhbGwsIHNldCB0aGUgYGVkZ2UnIGZpZWxkIGluIGVhY2ggc2VnbWVudCAtLSB0aGlzIGlzICovCiAgICAgLyogcmVxdWlyZWQgaW4gb3JkZXIgdG8gY29tcHV0ZSBlZGdlIGxpbmtzICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjU0Niw4ICsyNTY1LDggQEAKICAgICBhZl9nbHlwaF9oaW50c19yZXNjYWxlKCBoaW50cywgKEFGX1N0eWxlTWV0cmljcyltZXRyaWNzICk7CiAKICAgICAvKgotICAgICAqICBjb3JyZWN0IHhfc2NhbGUgYW5kIHlfc2NhbGUgaWYgbmVlZGVkLCBzaW5jZSB0aGV5IG1heSBoYXZlCi0gICAgICogIGJlZW4gbW9kaWZpZWQgYnkgYGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltJyBhYm92ZQorICAgICAqIGNvcnJlY3QgeF9zY2FsZSBhbmQgeV9zY2FsZSBpZiBuZWVkZWQsIHNpbmNlIHRoZXkgbWF5IGhhdmUKKyAgICAgKiBiZWVuIG1vZGlmaWVkIGJ5IGBhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbScgYWJvdmUKICAgICAgKi8KICAgICBoaW50cy0+eF9zY2FsZSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLnNjYWxlOwogICAgIGhpbnRzLT54X2RlbHRhID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0uZGVsdGE7CkBAIC0yNTY2LDIxICsyNTg1LDIxIEBACiAgICAgb3RoZXJfZmxhZ3MgID0gMDsKIAogICAgIC8qCi0gICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIHZlcnRpY2FsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKLSAgICAgKiAgaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKiBXZSBzbmFwIHRoZSB3aWR0aCBvZiB2ZXJ0aWNhbCBzdGVtcyBmb3IgdGhlIG1vbm9jaHJvbWUgYW5kCisgICAgICogaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCApCiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19IT1JaX1NOQVA7CiAKICAgICAvKgotICAgICAqICBXZSBzbmFwIHRoZSB3aWR0aCBvZiBob3Jpem9udGFsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKLSAgICAgKiAgdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCisgICAgICogV2Ugc25hcCB0aGUgd2lkdGggb2YgaG9yaXpvbnRhbCBzdGVtcyBmb3IgdGhlIG1vbm9jaHJvbWUgYW5kCisgICAgICogdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCiAgICAgICovCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19WRVJUX1NOQVA7CiAKICAgICAvKgotICAgICAqICBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgdW5sZXNzIGluIGBsaWdodCcgb3IgYGxjZCcgbW9kZS4KKyAgICAgKiBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgdW5sZXNzIGluIGBsaWdodCcgb3IgYGxjZCcgbW9kZS4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYgbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MQ0QgKQogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfU1RFTV9BREpVU1Q7CkBAIC0yNTg5LDExICsyNjA4LDExIEBACiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19NT05POwogCiAgICAgLyoKLSAgICAgKiAgSW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlIHdlIGRpc2FibGUgaG9yaXpvbnRhbCBoaW50aW5nIGNvbXBsZXRlbHkuCi0gICAgICogIFdlIGFsc28gZG8gaXQgaWYgdGhlIGZhY2UgaXMgaXRhbGljLgorICAgICAqIEluIGBsaWdodCcgb3IgYGxjZCcgbW9kZSB3ZSBkaXNhYmxlIGhvcml6b250YWwgaGludGluZyBjb21wbGV0ZWx5LgorICAgICAqIFdlIGFsc28gZG8gaXQgaWYgdGhlIGZhY2UgaXMgaXRhbGljLgogICAgICAqCi0gICAgICogIEhvd2V2ZXIsIGlmIHdhcnBpbmcgaXMgZW5hYmxlZCAod2hpY2ggb25seSB3b3JrcyBpbiBgbGlnaHQnIGhpbnRpbmcKLSAgICAgKiAgbW9kZSksIGFkdmFuY2Ugd2lkdGhzIGdldCBhZGp1c3RlZCwgdG9vLgorICAgICAqIEhvd2V2ZXIsIGlmIHdhcnBpbmcgaXMgZW5hYmxlZCAod2hpY2ggb25seSB3b3JrcyBpbiBgbGlnaHQnIGhpbnRpbmcKKyAgICAgKiBtb2RlKSwgYWR2YW5jZSB3aWR0aHMgZ2V0IGFkanVzdGVkLCB0b28uCiAgICAgICovCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUIHx8IG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEIHx8CiAgICAgICAgICAoIGZhY2UtPnN0eWxlX2ZsYWdzICYgRlRfU1RZTEVfRkxBR19JVEFMSUMgKSAhPSAwICAgICAgICAgICkKQEAgLTI5MzYsMTMgKzI5NTUsOCBAQAogICAgIEFGX0VkZ2UgICAgICAgYW5jaG9yICAgICA9IE5VTEw7CiAgICAgRlRfSW50ICAgICAgICBoYXNfc2VyaWZzID0gMDsKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0gICAgQUZfRmFjZUdsb2JhbHMgIGdsb2JhbHMgPSBoaW50cy0+bWV0cmljcy0+Z2xvYmFsczsKLSNlbmRpZgotCiAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzICA9IGhpbnRzLT5tZXRyaWNzLT5zdHlsZV9jbGFzczsKLSAgICBBRl9TY3JpcHRDbGFzcyAgc2NyaXB0X2NsYXNzID0gQUZfU0NSSVBUX0NMQVNTRVNfR0VUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlX2NsYXNzLT5zY3JpcHRdOworICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBhZl9zY3JpcHRfY2xhc3Nlc1tzdHlsZV9jbGFzcy0+c2NyaXB0XTsKIAogICAgIEZUX0Jvb2wgIHRvcF90b19ib3R0b21faGludGluZyA9IDA7CiAKQEAgLTI5NzYsMTIgKzI5OTAsMTIgQEAKICAgICAgICAgZWRnZTIgPSBlZGdlLT5saW5rOwogCiAgICAgICAgIC8qCi0gICAgICAgICAqICBJZiBhIHN0ZW0gY29udGFpbnMgYm90aCBhIG5ldXRyYWwgYW5kIGEgbm9uLW5ldXRyYWwgYmx1ZSB6b25lLAotICAgICAgICAgKiAgc2tpcCB0aGUgbmV1dHJhbCBvbmUuICBPdGhlcndpc2UsIG91dGxpbmVzIHdpdGggZGlmZmVyZW50Ci0gICAgICAgICAqICBkaXJlY3Rpb25zIG1pZ2h0IGJlIGluY29ycmVjdGx5IGFsaWduZWQgYXQgdGhlIHNhbWUgdmVydGljYWwKLSAgICAgICAgICogIHBvc2l0aW9uLgorICAgICAgICAgKiBJZiBhIHN0ZW0gY29udGFpbnMgYm90aCBhIG5ldXRyYWwgYW5kIGEgbm9uLW5ldXRyYWwgYmx1ZSB6b25lLAorICAgICAgICAgKiBza2lwIHRoZSBuZXV0cmFsIG9uZS4gIE90aGVyd2lzZSwgb3V0bGluZXMgd2l0aCBkaWZmZXJlbnQKKyAgICAgICAgICogZGlyZWN0aW9ucyBtaWdodCBiZSBpbmNvcnJlY3RseSBhbGlnbmVkIGF0IHRoZSBzYW1lIHZlcnRpY2FsCisgICAgICAgICAqIHBvc2l0aW9uLgogICAgICAgICAgKgotICAgICAgICAgKiAgSWYgd2UgaGF2ZSB0d28gbmV1dHJhbCBibHVlIHpvbmVzLCBza2lwIG9uZSBvZiB0aGVtLgorICAgICAgICAgKiBJZiB3ZSBoYXZlIHR3byBuZXV0cmFsIGJsdWUgem9uZXMsIHNraXAgb25lIG9mIHRoZW0uCiAgICAgICAgICAqCiAgICAgICAgICAqLwogICAgICAgICBpZiAoIGVkZ2UtPmJsdWVfZWRnZSAmJiBlZGdlMiAmJiBlZGdlMi0+Ymx1ZV9lZGdlICkKQEAgLTMzNDQsOCArMzM1OCw4IEBACiAgICAgaWYgKCBoYXNfc2VyaWZzIHx8ICFhbmNob3IgKQogICAgIHsKICAgICAgIC8qCi0gICAgICAgKiAgbm93IGhpbnQgdGhlIHJlbWFpbmluZyBlZGdlcyAoc2VyaWZzIGFuZCBzaW5nbGUpIGluIG9yZGVyCi0gICAgICAgKiAgdG8gY29tcGxldGUgb3VyIHByb2Nlc3NpbmcKKyAgICAgICAqIG5vdyBoaW50IHRoZSByZW1haW5pbmcgZWRnZXMgKHNlcmlmcyBhbmQgc2luZ2xlKSBpbiBvcmRlcgorICAgICAgICogdG8gY29tcGxldGUgb3VyIHByb2Nlc3NpbmcKICAgICAgICAqLwogICAgICAgZm9yICggZWRnZSA9IGVkZ2VzOyBlZGdlIDwgZWRnZV9saW1pdDsgZWRnZSsrICkKICAgICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uaCBiL3NyYy9hdXRvZml0L2FmbGF0aW4uaAppbmRleCA0MzJjY2NjLi42YjQyOWJkIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5oCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmxhdGluLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KLS8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZsYXRpbi5oCisgKgorICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbQorICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQUZMQVRJTl9IXwpAQCAtNDUsOSArNDUsOSBAQAogCiAKICAgLyoKLSAgICogIFRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGNvdWxkIGJlIGVtYmVkZGVkIGluIHRoZSBmaWxlIGBhZmxhdGluLmMnOwotICAgKiAgdGhleSBoYXZlIGJlZW4gbWFkZSBzZW1pLXB1YmxpYyB0byBhbGxvdyBhbHRlcm5hdGUgd3JpdGluZyBzeXN0ZW0KLSAgICogIGhpbnRlcnMgdG8gcmUtdXNlIHNvbWUgb2YgdGhlbS4KKyAgICogVGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnMgY291bGQgYmUgZW1iZWRkZWQgaW4gdGhlIGZpbGUgYGFmbGF0aW4uYyc7CisgICAqIHRoZXkgaGF2ZSBiZWVuIG1hZGUgc2VtaS1wdWJsaWMgdG8gYWxsb3cgYWx0ZXJuYXRlIHdyaXRpbmcgc3lzdGVtCisgICAqIGhpbnRlcnMgdG8gcmUtdXNlIHNvbWUgb2YgdGhlbS4KICAgICovCiAKIApAQCAtMTYxLDggKzE2MSw4IEBACiAKIAogICAvKgotICAgKiAgVGhlIG5leHQgZnVuY3Rpb25zIHNob3VsZG4ndCBub3JtYWxseSBiZSBleHBvcnRlZC4gIEhvd2V2ZXIsIG90aGVyCi0gICAqICB3cml0aW5nIHN5c3RlbXMgbWlnaHQgbGlrZSB0byB1c2UgdGhlc2UgZnVuY3Rpb25zIGFzLWlzLgorICAgKiBUaGUgbmV4dCBmdW5jdGlvbnMgc2hvdWxkbid0IG5vcm1hbGx5IGJlIGV4cG9ydGVkLiAgSG93ZXZlciwgb3RoZXIKKyAgICogd3JpdGluZyBzeXN0ZW1zIG1pZ2h0IGxpa2UgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcy1pcy4KICAgICovCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMoIEFGX0dseXBoSGludHMgIGhpbnRzLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMKaW5kZXggNWM3MTM3OC4uYzVjZTA0MyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYworKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCkBAIC0zLDIyICszLDIyIEBACiAvKiAgICAgICAgICAgIG1hcmtlZCBhcyBleHBlcmltZW50YWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmxhdGluMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gKGJvZHkpLiAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmxhdGluMi5jCisgKgorICogICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKQEAgLTM3LDEyICszNywxMiBAQAogI2VuZGlmCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYWZsYXRpbjIKIApAQCAtMzU4LDggKzM1OCw4IEBACiAgICAgICBpZiAoIG51bV9mbGF0cyA9PSAwICYmIG51bV9yb3VuZHMgPT0gMCApCiAgICAgICB7CiAgICAgICAgIC8qCi0gICAgICAgICAqICB3ZSBjb3VsZG4ndCBmaW5kIGEgc2luZ2xlIGdseXBoIHRvIGNvbXB1dGUgdGhpcyBibHVlIHpvbmUsCi0gICAgICAgICAqICB3ZSB3aWxsIHNpbXBseSBpZ25vcmUgaXQgdGhlbgorICAgICAgICAgKiB3ZSBjb3VsZG4ndCBmaW5kIGEgc2luZ2xlIGdseXBoIHRvIGNvbXB1dGUgdGhpcyBibHVlIHpvbmUsCisgICAgICAgICAqIHdlIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCB0aGVuCiAgICAgICAgICAqLwogICAgICAgICBGVF9UUkFDRTUoKCAiICBlbXB0eVxuIiApKTsKICAgICAgICAgY29udGludWU7CkBAIC0xMTA4LDEzICsxMTA4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFGX0RJUl9SSUdIVDsKIAogICAgIC8qCi0gICAgICogIFdlIHdhbnQgdG8gaWdub3JlIHZlcnkgc21hbGwgKG1vc3RseSBzZXJpZikgc2VnbWVudHMsIHdlIGRvIHRoYXQKLSAgICAgKiAgYnkgaWdub3JpbmcgdGhvc2UgdGhhdCB3aG9zZSBsZW5ndGggaXMgbGVzcyB0aGFuIGEgZ2l2ZW4gZnJhY3Rpb24KLSAgICAgKiAgb2YgdGhlIHN0YW5kYXJkIHdpZHRoLiBJZiB0aGVyZSBpcyBubyBzdGFuZGFyZCB3aWR0aCwgd2UgaWdub3JlCi0gICAgICogIHRob3NlIHRoYXQgYXJlIGxlc3MgdGhhbiBhIGdpdmVuIHNpemUgaW4gcGl4ZWxzCisgICAgICogV2Ugd2FudCB0byBpZ25vcmUgdmVyeSBzbWFsbCAobW9zdGx5IHNlcmlmKSBzZWdtZW50cywgd2UgZG8gdGhhdAorICAgICAqIGJ5IGlnbm9yaW5nIHRob3NlIHRoYXQgd2hvc2UgbGVuZ3RoIGlzIGxlc3MgdGhhbiBhIGdpdmVuIGZyYWN0aW9uCisgICAgICogb2YgdGhlIHN0YW5kYXJkIHdpZHRoLiBJZiB0aGVyZSBpcyBubyBzdGFuZGFyZCB3aWR0aCwgd2UgaWdub3JlCisgICAgICogdGhvc2UgdGhhdCBhcmUgbGVzcyB0aGFuIGEgZ2l2ZW4gc2l6ZSBpbiBwaXhlbHMKICAgICAgKgotICAgICAqICBhbHNvLCB1bmxpbmsgc2VyaWYgc2VnbWVudHMgdGhhdCBhcmUgbGlua2VkIHRvIHNlZ21lbnRzIGZhcnRoZXIKLSAgICAgKiAgdGhhbiA1MCUgb2YgdGhlIHN0YW5kYXJkIHdpZHRoCisgICAgICogYWxzbywgdW5saW5rIHNlcmlmIHNlZ21lbnRzIHRoYXQgYXJlIGxpbmtlZCB0byBzZWdtZW50cyBmYXJ0aGVyCisgICAgICogdGhhbiA1MCUgb2YgdGhlIHN0YW5kYXJkIHdpZHRoCiAgICAgICovCiAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKQogICAgIHsKQEAgLTExMjYsMjEgKzExMjYsMjEgQEAKICAgICBlbHNlCiAgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSAwOwogCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIFdlIHdpbGwgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlICAgICAgICovCi0gICAgLyogY3VycmVudCBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkgKi8KLSAgICAvKiB0byBmaW5kIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLiAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogSWYgbm8gZWRnZSBpcyBmb3VuZCwgd2UgY3JlYXRlIGFuZCBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUgICAgICAgKi8KLSAgICAvKiBzb3J0ZWQgdGFibGUuICBPdGhlcndpc2UsIHdlIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncyAqLwotICAgIC8qIGxpc3Qgd2hpY2ggd2lsbCBiZSBwcm9jZXNzZWQgaW4gdGhlIHNlY29uZCBzdGVwIHRvIGNvbXB1dGUgdGhlICAgICovCi0gICAgLyogZWRnZSdzIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIE5vdGUgdGhhdCB0aGUgZWRnZXMgdGFibGUgaXMgc29ydGVkIGFsb25nIHRoZSBzZWdtZW50L2VkZ2UgICAgICAgICovCi0gICAgLyogcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIFdlIHdpbGwgYmVnaW4gYnkgZ2VuZXJhdGluZyBhIHNvcnRlZCB0YWJsZSBvZiBlZGdlcyBmb3IgdGhlCisgICAgICogY3VycmVudCBkaXJlY3Rpb24uICBUbyBkbyBzbywgd2Ugc2ltcGx5IHNjYW4gZWFjaCBzZWdtZW50IGFuZCB0cnkKKyAgICAgKiB0byBmaW5kIGFuIGVkZ2UgaW4gb3VyIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uLgorICAgICAqCisgICAgICogSWYgbm8gZWRnZSBpcyBmb3VuZCwgd2UgY3JlYXRlIGFuZCBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUKKyAgICAgKiBzb3J0ZWQgdGFibGUuICBPdGhlcndpc2UsIHdlIHNpbXBseSBhZGQgdGhlIHNlZ21lbnQgdG8gdGhlIGVkZ2UncworICAgICAqIGxpc3Qgd2hpY2ggd2lsbCBiZSBwcm9jZXNzZWQgaW4gdGhlIHNlY29uZCBzdGVwIHRvIGNvbXB1dGUgdGhlCisgICAgICogZWRnZSdzIHByb3BlcnRpZXMuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgdGhlIGVkZ2VzIHRhYmxlIGlzIHNvcnRlZCBhbG9uZyB0aGUgc2VnbWVudC9lZGdlCisgICAgICogcG9zaXRpb24uCisgICAgICoKKyAgICAgKi8KIAogICAgIGVkZ2VfZGlzdGFuY2VfdGhyZXNob2xkID0gRlRfTXVsRml4KCBsYXhpcy0+ZWRnZV9kaXN0YW5jZV90aHJlc2hvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICk7CkBAIC0xMjMwLDE3ICsxMjMwLDE3IEBACiAgICAgfQogCiAKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogR29vZCwgd2Ugd2lsbCBub3cgY29tcHV0ZSBlYWNoIGVkZ2UncyBwcm9wZXJ0aWVzIGFjY29yZGluZyB0byAgICAgKi8KLSAgICAvKiBzZWdtZW50cyBmb3VuZCBvbiBpdHMgcG9zaXRpb24uICBCYXNpY2FsbHksIHRoZXNlIGFyZTogICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogIC0gZWRnZSdzIG1haW4gZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgLSBzdGVtIGVkZ2UsIHNlcmlmIGVkZ2Ugb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RlbSB0aGVuKSAgICAqLwotICAgIC8qICAtIHJvdW5kZWQgZWRnZSwgc3RyYWlnaHQgb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RyYWlnaHQpICAgICovCi0gICAgLyogIC0gbGluayBmb3IgZWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIEdvb2QsIHdlIHdpbGwgbm93IGNvbXB1dGUgZWFjaCBlZGdlJ3MgcHJvcGVydGllcyBhY2NvcmRpbmcgdG8KKyAgICAgKiBzZWdtZW50cyBmb3VuZCBvbiBpdHMgcG9zaXRpb24uICBCYXNpY2FsbHksIHRoZXNlIGFyZToKKyAgICAgKgorICAgICAqIC0gZWRnZSdzIG1haW4gZGlyZWN0aW9uCisgICAgICogLSBzdGVtIGVkZ2UsIHNlcmlmIGVkZ2Ugb3IgYm90aCAod2hpY2ggZGVmYXVsdHMgdG8gc3RlbSB0aGVuKQorICAgICAqIC0gcm91bmRlZCBlZGdlLCBzdHJhaWdodCBvciBib3RoICh3aGljaCBkZWZhdWx0cyB0byBzdHJhaWdodCkKKyAgICAgKiAtIGxpbmsgZm9yIGVkZ2UKKyAgICAgKgorICAgICAqLwogCiAgICAgLyogZmlyc3Qgb2YgYWxsLCBzZXQgdGhlIGBlZGdlJyBmaWVsZCBpbiBlYWNoIHNlZ21lbnQgLS0gdGhpcyBpcyAqLwogICAgIC8qIHJlcXVpcmVkIGluIG9yZGVyIHRvIGNvbXB1dGUgZWRnZSBsaW5rcyAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE1MjQsOCArMTUyNCw4IEBACiAgICAgYWZfZ2x5cGhfaGludHNfcmVzY2FsZSggaGludHMsIChBRl9TdHlsZU1ldHJpY3MpbWV0cmljcyApOwogCiAgICAgLyoKLSAgICAgKiAgY29ycmVjdCB4X3NjYWxlIGFuZCB5X3NjYWxlIGlmIG5lZWRlZCwgc2luY2UgdGhleSBtYXkgaGF2ZQotICAgICAqICBiZWVuIG1vZGlmaWVkIGBhZl9sYXRpbjJfbWV0cmljc19zY2FsZV9kaW0nIGFib3ZlCisgICAgICogY29ycmVjdCB4X3NjYWxlIGFuZCB5X3NjYWxlIGlmIG5lZWRlZCwgc2luY2UgdGhleSBtYXkgaGF2ZQorICAgICAqIGJlZW4gbW9kaWZpZWQgYGFmX2xhdGluMl9tZXRyaWNzX3NjYWxlX2RpbScgYWJvdmUKICAgICAgKi8KICAgICBoaW50cy0+eF9zY2FsZSA9IG1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdLnNjYWxlOwogICAgIGhpbnRzLT54X2RlbHRhID0gbWV0cmljcy0+YXhpc1tBRl9ESU1FTlNJT05fSE9SWl0uZGVsdGE7CkBAIC0xNTQ0LDIxICsxNTQ0LDIxIEBACiAgICAgb3RoZXJfZmxhZ3MgID0gMDsKIAogICAgIC8qCi0gICAgICogIFdlIHNuYXAgdGhlIHdpZHRoIG9mIHZlcnRpY2FsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKLSAgICAgKiAgaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KKyAgICAgKiBXZSBzbmFwIHRoZSB3aWR0aCBvZiB2ZXJ0aWNhbCBzdGVtcyBmb3IgdGhlIG1vbm9jaHJvbWUgYW5kCisgICAgICogaG9yaXpvbnRhbCBMQ0QgcmVuZGVyaW5nIHRhcmdldHMgb25seS4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTU9OTyB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCApCiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19IT1JaX1NOQVA7CiAKICAgICAvKgotICAgICAqICBXZSBzbmFwIHRoZSB3aWR0aCBvZiBob3Jpem9udGFsIHN0ZW1zIGZvciB0aGUgbW9ub2Nocm9tZSBhbmQKLSAgICAgKiAgdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCisgICAgICogV2Ugc25hcCB0aGUgd2lkdGggb2YgaG9yaXpvbnRhbCBzdGVtcyBmb3IgdGhlIG1vbm9jaHJvbWUgYW5kCisgICAgICogdmVydGljYWwgTENEIHJlbmRlcmluZyB0YXJnZXRzIG9ubHkuCiAgICAgICovCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApCiAgICAgICBvdGhlcl9mbGFncyB8PSBBRl9MQVRJTl9ISU5UU19WRVJUX1NOQVA7CiAKICAgICAvKgotICAgICAqICBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgdW5sZXNzIGluIGBsaWdodCcgb3IgYGxjZCcgbW9kZS4KKyAgICAgKiBXZSBhZGp1c3Qgc3RlbXMgdG8gZnVsbCBwaXhlbHMgdW5sZXNzIGluIGBsaWdodCcgb3IgYGxjZCcgbW9kZS4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYgbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MQ0QgKQogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfU1RFTV9BREpVU1Q7CkBAIC0xNTY3LDggKzE1NjcsOCBAQAogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfTU9OTzsKIAogICAgIC8qCi0gICAgICogIEluIGBsaWdodCcgb3IgYGxjZCcgbW9kZSB3ZSBkaXNhYmxlIGhvcml6b250YWwgaGludGluZyBjb21wbGV0ZWx5LgotICAgICAqICBXZSBhbHNvIGRvIGl0IGlmIHRoZSBmYWNlIGlzIGl0YWxpYy4KKyAgICAgKiBJbiBgbGlnaHQnIG9yIGBsY2QnIG1vZGUgd2UgZGlzYWJsZSBob3Jpem9udGFsIGhpbnRpbmcgY29tcGxldGVseS4KKyAgICAgKiBXZSBhbHNvIGRvIGl0IGlmIHRoZSBmYWNlIGlzIGl0YWxpYy4KICAgICAgKi8KICAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgfHwgbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgfHwKICAgICAgICAgICggZmFjZS0+c3R5bGVfZmxhZ3MgJiBGVF9TVFlMRV9GTEFHX0lUQUxJQyApICE9IDAgICAgICAgICAgKQpAQCAtMjIzMyw4ICsyMjMzLDggQEAKICAgICBpZiAoIGhhc19zZXJpZnMgfHwgIWFuY2hvciApCiAgICAgewogICAgICAgLyoKLSAgICAgICAqICBub3cgaGludCB0aGUgcmVtYWluaW5nIGVkZ2VzIChzZXJpZnMgYW5kIHNpbmdsZSkgaW4gb3JkZXIKLSAgICAgICAqICB0byBjb21wbGV0ZSBvdXIgcHJvY2Vzc2luZworICAgICAgICogbm93IGhpbnQgdGhlIHJlbWFpbmluZyBlZGdlcyAoc2VyaWZzIGFuZCBzaW5nbGUpIGluIG9yZGVyCisgICAgICAgKiB0byBjb21wbGV0ZSBvdXIgcHJvY2Vzc2luZwogICAgICAgICovCiAgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBlZGdlX2xpbWl0OyBlZGdlKysgKQogICAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuaCBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKaW5kZXggMDEyOWRjNy4uZThlNzM4MiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCkBAIC0zLDIzICszLDIzIEBACiAvKiAgICAgICAgICAgIG1hcmtlZCBhcyBleHBlcmltZW50YWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmxhdGluMi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KLS8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZsYXRpbjIuaAorICoKKyAqICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0KKyAqICAgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGTEFUSU4yX0hfCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuYwppbmRleCBhNTU1NTBiLi4zMDFmMzc3IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCisrKyBiL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmbG9hZGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmbG9hZGVyLmMKKyAqCisgKiAgIEF1dG8tZml0dGVyIGdseXBoIGxvYWRpbmcgcm91dGluZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAjaW5jbHVkZSAiYWZlcnJvcnMuaCIKICNpbmNsdWRlICJhZm1vZHVsZS5oIgotI2luY2x1ZGUgImFmcGljLmgiCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAogCkBAIC0xMTksMTIgKzExOCwxMiBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogIFdlIGRlcGVuZCBvbiB0aGUgd3JpdGluZyBzeXN0ZW0gKHNjcmlwdCBhbmFseXplcnMpIHRvIHN1cHBseQotICAgICAqICBzdGFuZGFyZCB3aWR0aHMgZm9yIHRoZSBzY3JpcHQgb2YgdGhlIGdseXBoIHdlIGFyZSBsb29raW5nIGF0LiAgSWYKLSAgICAgKiAgaXQgY2FuJ3QgZGVsaXZlciwgc3RlbSBkYXJrZW5pbmcgaXMgZGlzYWJsZWQuCisgICAgICogV2UgZGVwZW5kIG9uIHRoZSB3cml0aW5nIHN5c3RlbSAoc2NyaXB0IGFuYWx5emVycykgdG8gc3VwcGx5CisgICAgICogc3RhbmRhcmQgd2lkdGhzIGZvciB0aGUgc2NyaXB0IG9mIHRoZSBnbHlwaCB3ZSBhcmUgbG9va2luZyBhdC4gIElmCisgICAgICogaXQgY2FuJ3QgZGVsaXZlciwgc3RlbSBkYXJrZW5pbmcgaXMgZGlzYWJsZWQuCiAgICAgICovCiAgICAgd3JpdGluZ19zeXN0ZW1fY2xhc3MgPQotICAgICAgQUZfV1JJVElOR19TWVNURU1fQ0xBU1NFU19HRVRbc3R5bGVfbWV0cmljcy0+c3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKKyAgICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNbc3R5bGVfbWV0cmljcy0+c3R5bGVfY2xhc3MtPndyaXRpbmdfc3lzdGVtXTsKIAogICAgIGlmICggd3JpdGluZ19zeXN0ZW1fY2xhc3MtPnN0eWxlX21ldHJpY3NfZ2V0c3RkdyApCiAgICAgICB3cml0aW5nX3N5c3RlbV9jbGFzcy0+c3R5bGVfbWV0cmljc19nZXRzdGR3KCBzdHlsZV9tZXRyaWNzLApAQCAtMTc0LDIyICsxNzMsMjIgQEAKICAgICAgIGdsb2JhbHMtPmRhcmtlbl95ICAgICAgICAgICAgICAgICAgPSBhZl9maXhlZFRvSW50KCBkYXJrZW5feSApOwogCiAgICAgICAvKgotICAgICAgICogIFNjYWxlIG91dGxpbmVzIGRvd24gb24gdGhlIFktYXhpcyB0byBrZWVwIHRoZW0gaW5zaWRlIHRoZWlyIGJsdWUKLSAgICAgICAqICB6b25lcy4gIFRoZSBzdHJvbmdlciB0aGUgZW1ib2xkZW5pbmcsIHRoZSBzdHJvbmdlciB0aGUgZG93bnNjYWxpbmcKLSAgICAgICAqICAocGx1cyBoZXVyaXN0aWNhbCBwYWRkaW5nIHRvIHByZXZlbnQgb3V0bGluZXMgc3RpbGwgZmFsbGluZyBvdXQKLSAgICAgICAqICB0aGVpciB6b25lcyBkdWUgdG8gcm91bmRpbmcpLgorICAgICAgICogU2NhbGUgb3V0bGluZXMgZG93biBvbiB0aGUgWS1heGlzIHRvIGtlZXAgdGhlbSBpbnNpZGUgdGhlaXIgYmx1ZQorICAgICAgICogem9uZXMuICBUaGUgc3Ryb25nZXIgdGhlIGVtYm9sZGVuaW5nLCB0aGUgc3Ryb25nZXIgdGhlIGRvd25zY2FsaW5nCisgICAgICAgKiAocGx1cyBoZXVyaXN0aWNhbCBwYWRkaW5nIHRvIHByZXZlbnQgb3V0bGluZXMgc3RpbGwgZmFsbGluZyBvdXQKKyAgICAgICAqIHRoZWlyIHpvbmVzIGR1ZSB0byByb3VuZGluZykuCiAgICAgICAgKgotICAgICAgICogIFJlYXNvbjogYEZUX091dGxpbmVfRW1ib2xkZW4nIHdvcmtzIGJ5IHNoaWZ0aW5nIHRoZSByaWdodG1vc3QKLSAgICAgICAqICBwb2ludHMgb2Ygc3RlbXMgZmFydGhlciB0byB0aGUgcmlnaHQsIGFuZCB0b3Btb3N0IHBvaW50cyBmYXJ0aGVyCi0gICAgICAgKiAgdXAuICBUaGlzIHBvc2l0aW9ucyBwb2ludHMgb24gdGhlIFktYXhpcyBvdXRzaWRlIHRoZWlyCi0gICAgICAgKiAgcHJlLWNvbXB1dGVkIGJsdWUgem9uZXMgYW5kIGxlYWRzIHRvIGRpc3RvcnRpb24gd2hlbiBhcHBseWluZyB0aGUKLSAgICAgICAqICBoaW50cyBpbiB0aGUgY29kZSBmdXJ0aGVyIGJlbG93LiAgQ29kZSBvdXRzaWRlIHRoaXMgZW1ib2xkZW5pbmcKLSAgICAgICAqICBibG9jayBkb2Vzbid0IGtub3cgd2UgYXJlIHByZXNlbnRpbmcgaXQgd2l0aCBtb2RpZmllZCBvdXRsaW5lcyB0aGUKLSAgICAgICAqICBhbmFseXplciBkaWRuJ3Qgc2VlIQorICAgICAgICogUmVhc29uOiBgRlRfT3V0bGluZV9FbWJvbGRlbicgd29ya3MgYnkgc2hpZnRpbmcgdGhlIHJpZ2h0bW9zdAorICAgICAgICogcG9pbnRzIG9mIHN0ZW1zIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LCBhbmQgdG9wbW9zdCBwb2ludHMgZmFydGhlcgorICAgICAgICogdXAuICBUaGlzIHBvc2l0aW9ucyBwb2ludHMgb24gdGhlIFktYXhpcyBvdXRzaWRlIHRoZWlyCisgICAgICAgKiBwcmUtY29tcHV0ZWQgYmx1ZSB6b25lcyBhbmQgbGVhZHMgdG8gZGlzdG9ydGlvbiB3aGVuIGFwcGx5aW5nIHRoZQorICAgICAgICogaGludHMgaW4gdGhlIGNvZGUgZnVydGhlciBiZWxvdy4gIENvZGUgb3V0c2lkZSB0aGlzIGVtYm9sZGVuaW5nCisgICAgICAgKiBibG9jayBkb2Vzbid0IGtub3cgd2UgYXJlIHByZXNlbnRpbmcgaXQgd2l0aCBtb2RpZmllZCBvdXRsaW5lcyB0aGUKKyAgICAgICAqIGFuYWx5emVyIGRpZG4ndCBzZWUhCiAgICAgICAgKgotICAgICAgICogIEFuIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IG9mIGRvd25zY2FsaW5nIGlzIHRoYXQgdGhlIGVtYm9sZGVuaW5nCi0gICAgICAgKiAgZWZmZWN0IGlzIHNsaWdodGx5IGRlY3JlYXNlZC4gIFRoZSBsb3NzIGJlY29tZXMgbW9yZSBwcm9ub3VuY2VkCi0gICAgICAgKiAgdmVyc3VzIHRoZSBDRkYgZHJpdmVyIGF0IHNtYWxsZXIgc2l6ZXMsIGUuZy4sIGF0IDlwcGVtIGFuZCBiZWxvdy4KKyAgICAgICAqIEFuIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IG9mIGRvd25zY2FsaW5nIGlzIHRoYXQgdGhlIGVtYm9sZGVuaW5nCisgICAgICAgKiBlZmZlY3QgaXMgc2xpZ2h0bHkgZGVjcmVhc2VkLiAgVGhlIGxvc3MgYmVjb21lcyBtb3JlIHByb25vdW5jZWQKKyAgICAgICAqIHZlcnN1cyB0aGUgQ0ZGIGRyaXZlciBhdCBzbWFsbGVyIHNpemVzLCBlLmcuLCBhdCA5cHBlbSBhbmQgYmVsb3cuCiAgICAgICAgKi8KICAgICAgIGdsb2JhbHMtPnNjYWxlX2Rvd25fZmFjdG9yID0KICAgICAgICAgRlRfRGl2Rml4KCBlbV9zaXplIC0gKCBkYXJrZW5fYnlfZm9udF91bml0c195ICsgYWZfaW50VG9GaXhlZCggOCApICksCkBAIC0yMzIsMTAgKzIzMSw2IEBACiAgICAgQUZfU3R5bGVDbGFzcyAgICAgICAgICBzdHlsZV9jbGFzczsKICAgICBBRl9Xcml0aW5nU3lzdGVtQ2xhc3MgIHdyaXRpbmdfc3lzdGVtX2NsYXNzOwogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscyA9IGxvYWRlci0+Z2xvYmFsczsKLSNlbmRpZgotCiAKICAgICBpZiAoICFzaXplICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TaXplX0hhbmRsZSApOwpAQCAtMjgyLDEzICsyNzcsMTMgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqICBUT0RPOiBUaGlzIGNvZGUgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBmcmFjdGlvbmFsIGFkdmFuY2Ugd2lkdGhzLAotICAgICAqICBpLmUuLCBwbGFjaW5nIGhpbnRlZCBnbHlwaHMgYXQgYW55dGhpbmcgb3RoZXIgdGhhbiBpbnRlZ2VyCi0gICAgICogIHgtcG9zaXRpb25zLiAgVGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgd2FycGVyIGNvZGUsIHdoaWNoCi0gICAgICogIHNjYWxlcyBhbmQgc2hpZnRzIGdseXBocyB0byBvcHRpbWl6ZSBibGFja25lc3Mgb2Ygc3RlbXMgKGhpbnRpbmcgb24KLSAgICAgKiAgdGhlIHgtYXhpcyBieSBuYXR1cmUgcGxhY2VzIHRoaW5ncyBvbiBwaXhlbCBpbnRlZ2VycywgaGludGluZyBvbiB0aGUKLSAgICAgKiAgeS1heGlzIG9ubHksIGkuZS4sIExJR0hUIG1vZGUsIGRvZXNuJ3QgdG91Y2ggdGhlIHgtYXhpcykuICBUaGUgZGVsdGEKLSAgICAgKiAgdmFsdWVzIG9mIHRoZSBzY2FsZXIgd291bGQgbmVlZCB0byBiZSBhZGp1c3RlZC4KKyAgICAgKiBUT0RPOiBUaGlzIGNvZGUgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBmcmFjdGlvbmFsIGFkdmFuY2Ugd2lkdGhzLAorICAgICAqIGkuZS4sIHBsYWNpbmcgaGludGVkIGdseXBocyBhdCBhbnl0aGluZyBvdGhlciB0aGFuIGludGVnZXIKKyAgICAgKiB4LXBvc2l0aW9ucy4gIFRoaXMgaXMgb25seSByZWxldmFudCBmb3IgdGhlIHdhcnBlciBjb2RlLCB3aGljaAorICAgICAqIHNjYWxlcyBhbmQgc2hpZnRzIGdseXBocyB0byBvcHRpbWl6ZSBibGFja25lc3Mgb2Ygc3RlbXMgKGhpbnRpbmcgb24KKyAgICAgKiB0aGUgeC1heGlzIGJ5IG5hdHVyZSBwbGFjZXMgdGhpbmdzIG9uIHBpeGVsIGludGVnZXJzLCBoaW50aW5nIG9uIHRoZQorICAgICAqIHktYXhpcyBvbmx5LCBpLmUuLCBMSUdIVCBtb2RlLCBkb2Vzbid0IHRvdWNoIHRoZSB4LWF4aXMpLiAgVGhlIGRlbHRhCisgICAgICogdmFsdWVzIG9mIHRoZSBzY2FsZXIgd291bGQgbmVlZCB0byBiZSBhZGp1c3RlZC4KICAgICAgKi8KICAgICBzY2FsZXIuZmFjZSAgICA9IGZhY2U7CiAgICAgc2NhbGVyLnhfc2NhbGUgPSBzaXplX2ludGVybmFsLT5hdXRvaGludF9tZXRyaWNzLnhfc2NhbGU7CkBAIC0zMTIsMTAgKzMwNywxMCBAQAogI2VuZGlmCiAKICAgICAvKgotICAgICAqICBHbHlwaHMgKHJlYWxseSBjb2RlIHBvaW50cykgYXJlIGFzc2lnbmVkIHRvIHNjcmlwdHMuICBTY3JpcHQKLSAgICAgKiAgYW5hbHlzaXMgaXMgZG9uZSBsYXppbHk6IEZvciBlYWNoIGdseXBoIHRoYXQgcGFzc2VzIHRocm91Z2ggaGVyZSwKLSAgICAgKiAgdGhlIGNvcnJlc3BvbmRpbmcgc2NyaXB0IGFuYWx5emVyIGlzIGNhbGxlZCwgYnV0IHJldHVybnMgaW1tZWRpYXRlbHkKLSAgICAgKiAgaWYgaXQgaGFzIGJlZW4gcnVuIGFscmVhZHkuCisgICAgICogR2x5cGhzIChyZWFsbHkgY29kZSBwb2ludHMpIGFyZSBhc3NpZ25lZCB0byBzY3JpcHRzLiAgU2NyaXB0CisgICAgICogYW5hbHlzaXMgaXMgZG9uZSBsYXppbHk6IEZvciBlYWNoIGdseXBoIHRoYXQgcGFzc2VzIHRocm91Z2ggaGVyZSwKKyAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBzY3JpcHQgYW5hbHl6ZXIgaXMgY2FsbGVkLCBidXQgcmV0dXJucyBpbW1lZGlhdGVseQorICAgICAqIGlmIGl0IGhhcyBiZWVuIHJ1biBhbHJlYWR5LgogICAgICAqLwogICAgIGVycm9yID0gYWZfZmFjZV9nbG9iYWxzX2dldF9tZXRyaWNzKCBsb2FkZXItPmdsb2JhbHMsIGdseXBoX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9vcHRpb25zLCAmc3R5bGVfbWV0cmljcyApOwpAQCAtMzI0LDcgKzMxOSw3IEBACiAKICAgICBzdHlsZV9jbGFzcyAgICAgICAgICA9IHN0eWxlX21ldHJpY3MtPnN0eWxlX2NsYXNzOwogICAgIHdyaXRpbmdfc3lzdGVtX2NsYXNzID0KLSAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0NMQVNTRVNfR0VUW3N0eWxlX2NsYXNzLT53cml0aW5nX3N5c3RlbV07CisgICAgICBhZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzW3N0eWxlX2NsYXNzLT53cml0aW5nX3N5c3RlbV07CiAKICAgICBsb2FkZXItPm1ldHJpY3MgPSBzdHlsZV9tZXRyaWNzOwogCkBAIC0zNDIsMTEgKzMzNywxMSBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogIERvIHRoZSBtYWluIHdvcmsgb2YgYGFmX2xvYWRlcl9sb2FkX2dseXBoJy4gIE5vdGUgdGhhdCB3ZSBuZXZlciBoYXZlCi0gICAgICogIHRvIGRlYWwgd2l0aCBjb21wb3NpdGUgZ2x5cGhzIGFzIHRob3NlIGdldCBsb2FkZWQgaW50bwotICAgICAqICBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSBieSB0aGUgcmVjdXJzZWQgYEZUX0xvYWRfR2x5cGgnIGZ1bmN0aW9uLgotICAgICAqICBJbiB0aGUgcmFyZSBjYXNlcyB3aGVyZSBGVF9MT0FEX05PX1JFQ1VSU0UgaXMgc2V0LCBpdCBpbXBsaWVzCi0gICAgICogIEZUX0xPQURfTk9fU0NBTEUgYW5kIGFzIHN1Y2ggdGhlIGF1dG8taGludGVyIGlzIG5ldmVyIGNhbGxlZC4KKyAgICAgKiBEbyB0aGUgbWFpbiB3b3JrIG9mIGBhZl9sb2FkZXJfbG9hZF9nbHlwaCcuICBOb3RlIHRoYXQgd2UgbmV2ZXIgaGF2ZQorICAgICAqIHRvIGRlYWwgd2l0aCBjb21wb3NpdGUgZ2x5cGhzIGFzIHRob3NlIGdldCBsb2FkZWQgaW50bworICAgICAqIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FIGJ5IHRoZSByZWN1cnNlZCBgRlRfTG9hZF9HbHlwaCcgZnVuY3Rpb24uCisgICAgICogSW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgRlRfTE9BRF9OT19SRUNVUlNFIGlzIHNldCwgaXQgaW1wbGllcworICAgICAqIEZUX0xPQURfTk9fU0NBTEUgYW5kIGFzIHN1Y2ggdGhlIGF1dG8taGludGVyIGlzIG5ldmVyIGNhbGxlZC4KICAgICAgKi8KICAgICBsb2FkX2ZsYWdzIHw9ICBGVF9MT0FEX05PX1NDQUxFICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSB8CkBAIC0zNTgsMjYgKzM1MywyNiBAQAogICAgICAgZ290byBFeGl0OwogCiAgICAgLyoKLSAgICAgKiAgQXBwbHkgc3RlbSBkYXJrZW5pbmcgKGVtYm9sZGVuaW5nKSBoZXJlIGJlZm9yZSBoaW50cyBhcmUgYXBwbGllZCB0bwotICAgICAqICB0aGUgb3V0bGluZS4gIEdseXBocyBhcmUgc2NhbGVkIGRvd24gcHJvcG9ydGlvbmFsbHkgdG8gdGhlCi0gICAgICogIGVtYm9sZGVuaW5nIHNvIHRoYXQgY3VydmUgcG9pbnRzIGRvbid0IGZhbGwgb3V0c2lkZSB0aGVpcgotICAgICAqICBwcmVjb21wdXRlZCBibHVlIHpvbmVzLgorICAgICAqIEFwcGx5IHN0ZW0gZGFya2VuaW5nIChlbWJvbGRlbmluZykgaGVyZSBiZWZvcmUgaGludHMgYXJlIGFwcGxpZWQgdG8KKyAgICAgKiB0aGUgb3V0bGluZS4gIEdseXBocyBhcmUgc2NhbGVkIGRvd24gcHJvcG9ydGlvbmFsbHkgdG8gdGhlCisgICAgICogZW1ib2xkZW5pbmcgc28gdGhhdCBjdXJ2ZSBwb2ludHMgZG9uJ3QgZmFsbCBvdXRzaWRlIHRoZWlyCisgICAgICogcHJlY29tcHV0ZWQgYmx1ZSB6b25lcy4KICAgICAgKgotICAgICAqICBBbnkgZW1ib2xkZW5pbmcgZG9uZSBieSB0aGUgZm9udCBkcml2ZXIgKGUuZy4sIHRoZSBDRkYgZHJpdmVyKQotICAgICAqICBkb2Vzbid0IHJlYWNoIGhlcmUgYmVjYXVzZSB0aGUgYXV0b2hpbnRlciBsb2FkcyB0aGUgdW5wcm9jZXNzZWQKLSAgICAgKiAgZ2x5cGhzIGluIGZvbnQgdW5pdHMgZm9yIGFuYWx5c2lzIChmdW5jdGlvbnMgYGFmXypfbWV0cmljc19pbml0XyonKQotICAgICAqICBhbmQgdGhlbiBhYm92ZSB0byBwcmVwYXJlIGl0IGZvciB0aGUgcmFzdGVyaXplcnMgYnkgaXRzZWxmLAotICAgICAqICBpbmRlcGVuZGVudGx5IG9mIHRoZSBmb250IGRyaXZlci4gIFNvIGVtYm9sZGVuaW5nIG11c3QgYmUgZG9uZSBoZXJlLAotICAgICAqICB3aXRoaW4gdGhlIGF1dG9oaW50ZXIuCisgICAgICogQW55IGVtYm9sZGVuaW5nIGRvbmUgYnkgdGhlIGZvbnQgZHJpdmVyIChlLmcuLCB0aGUgQ0ZGIGRyaXZlcikKKyAgICAgKiBkb2Vzbid0IHJlYWNoIGhlcmUgYmVjYXVzZSB0aGUgYXV0b2hpbnRlciBsb2FkcyB0aGUgdW5wcm9jZXNzZWQKKyAgICAgKiBnbHlwaHMgaW4gZm9udCB1bml0cyBmb3IgYW5hbHlzaXMgKGZ1bmN0aW9ucyBgYWZfKl9tZXRyaWNzX2luaXRfKicpCisgICAgICogYW5kIHRoZW4gYWJvdmUgdG8gcHJlcGFyZSBpdCBmb3IgdGhlIHJhc3Rlcml6ZXJzIGJ5IGl0c2VsZiwKKyAgICAgKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBmb250IGRyaXZlci4gIFNvIGVtYm9sZGVuaW5nIG11c3QgYmUgZG9uZSBoZXJlLAorICAgICAqIHdpdGhpbiB0aGUgYXV0b2hpbnRlci4KICAgICAgKgotICAgICAqICBBbGwgZ2x5cGhzIHRvIGJlIGF1dG9oaW50ZWQgcGFzcyB0aHJvdWdoIGhlcmUgb25lIGJ5IG9uZS4gIFRoZQotICAgICAqICBzdGFuZGFyZCB3aWR0aHMgY2FuIHRoZXJlZm9yZSBjaGFuZ2UgZnJvbSBvbmUgZ2x5cGggdG8gdGhlIG5leHQsCi0gICAgICogIGRlcGVuZGluZyBvbiB3aGF0IHNjcmlwdCBhIGdseXBoIGlzIGFzc2lnbmVkIHRvIChlYWNoIHNjcmlwdCBoYXMgaXRzCi0gICAgICogIG93biBzZXQgb2Ygc3RhbmRhcmQgd2lkdGhzIGFuZCBvdGhlciBtZXRyaWNzKS4gIFRoZSBkYXJrZW5pbmcgYW1vdW50Ci0gICAgICogIG11c3QgdGhlcmVmb3JlIGJlIHJlY29tcHV0ZWQgZm9yIGVhY2ggc2l6ZSBhbmQKLSAgICAgKiAgYHN0YW5kYXJkX3t2ZXJ0aWNhbCxob3Jpem9udGFsfV93aWR0aCcgY2hhbmdlLgorICAgICAqIEFsbCBnbHlwaHMgdG8gYmUgYXV0b2hpbnRlZCBwYXNzIHRocm91Z2ggaGVyZSBvbmUgYnkgb25lLiAgVGhlCisgICAgICogc3RhbmRhcmQgd2lkdGhzIGNhbiB0aGVyZWZvcmUgY2hhbmdlIGZyb20gb25lIGdseXBoIHRvIHRoZSBuZXh0LAorICAgICAqIGRlcGVuZGluZyBvbiB3aGF0IHNjcmlwdCBhIGdseXBoIGlzIGFzc2lnbmVkIHRvIChlYWNoIHNjcmlwdCBoYXMgaXRzCisgICAgICogb3duIHNldCBvZiBzdGFuZGFyZCB3aWR0aHMgYW5kIG90aGVyIG1ldHJpY3MpLiAgVGhlIGRhcmtlbmluZyBhbW91bnQKKyAgICAgKiBtdXN0IHRoZXJlZm9yZSBiZSByZWNvbXB1dGVkIGZvciBlYWNoIHNpemUgYW5kCisgICAgICogYHN0YW5kYXJkX3t2ZXJ0aWNhbCxob3Jpem9udGFsfV93aWR0aCcgY2hhbmdlLgogICAgICAqCi0gICAgICogIElnbm9yZSBlcnJvcnMgYW5kIGNhcnJ5IG9uIHdpdGhvdXQgZW1ib2xkZW5pbmcuCisgICAgICogSWdub3JlIGVycm9ycyBhbmQgY2Fycnkgb24gd2l0aG91dCBlbWJvbGRlbmluZy4KICAgICAgKgogICAgICAqLwogCkBAIC00MzUsMjYgKzQzMCwyNSBAQAogICAgICAgLyogd2lkdGgvcG9zaXRpb25pbmcgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhlIGhpbnRpbmcgcHJvY2VzcyAgICovCiAgICAgICBpZiAoIHNjYWxlci5yZW5kZXJfbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCiAgICAgICB7Ci0gICAgICAgIEZUX1BvcyAgb2xkX3JzYiwgb2xkX2xzYiwgbmV3X2xzYjsKLSAgICAgICAgRlRfUG9zICBwcDF4X3VoLCBwcDJ4X3VoOwotCiAgICAgICAgIEFGX0F4aXNIaW50cyAgYXhpcyAgPSAmaGludHMtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdOwotICAgICAgICBBRl9FZGdlICAgICAgIGVkZ2UxID0gYXhpcy0+ZWRnZXM7ICAgICAgICAgLyogbGVmdG1vc3QgZWRnZSAgKi8KLSAgICAgICAgQUZfRWRnZSAgICAgICBlZGdlMiA9IGVkZ2UxICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMtPm51bV9lZGdlcyAtIDE7IC8qIHJpZ2h0bW9zdCBlZGdlICovCiAKIAogICAgICAgICBpZiAoIGF4aXMtPm51bV9lZGdlcyA+IDEgJiYgQUZfSElOVFNfRE9fQURWQU5DRSggaGludHMgKSApCiAgICAgICAgIHsKLSAgICAgICAgICBvbGRfcnNiID0gbG9hZGVyLT5wcDIueCAtIGVkZ2UyLT5vcG9zOworICAgICAgICAgIEFGX0VkZ2UgIGVkZ2UxID0gYXhpcy0+ZWRnZXM7ICAgICAgICAgLyogbGVmdG1vc3QgZWRnZSAgKi8KKyAgICAgICAgICBBRl9FZGdlICBlZGdlMiA9IGVkZ2UxICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMtPm51bV9lZGdlcyAtIDE7IC8qIHJpZ2h0bW9zdCBlZGdlICovCisKKyAgICAgICAgICBGVF9Qb3MgIG9sZF9yc2IgPSBsb2FkZXItPnBwMi54IC0gZWRnZTItPm9wb3M7CiAgICAgICAgICAgLyogbG9hZGVyLT5wcDEueCBpcyBhbHdheXMgemVybyBhdCB0aGlzIHBvaW50IG9mIHRpbWUgKi8KLSAgICAgICAgICBvbGRfbHNiID0gZWRnZTEtPm9wb3MgLyogLSBsb2FkZXItPnBwMS54ICovOwotICAgICAgICAgIG5ld19sc2IgPSBlZGdlMS0+cG9zOworICAgICAgICAgIEZUX1BvcyAgb2xkX2xzYiA9IGVkZ2UxLT5vcG9zOyAgICAgLyogLSBsb2FkZXItPnBwMS54ICovCisgICAgICAgICAgRlRfUG9zICBuZXdfbHNiID0gZWRnZTEtPnBvczsKIAogICAgICAgICAgIC8qIHJlbWVtYmVyIHVuaGludGVkIHZhbHVlcyB0byBsYXRlciBhY2NvdW50ICovCiAgICAgICAgICAgLyogZm9yIHJvdW5kaW5nIGVycm9ycyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBwcDF4X3VoID0gbmV3X2xzYiAgICAtIG9sZF9sc2I7Ci0gICAgICAgICAgcHAyeF91aCA9IGVkZ2UyLT5wb3MgKyBvbGRfcnNiOworICAgICAgICAgIEZUX1BvcyAgcHAxeF91aCA9IG5ld19sc2IgICAgLSBvbGRfbHNiOworICAgICAgICAgIEZUX1BvcyAgcHAyeF91aCA9IGVkZ2UyLT5wb3MgKyBvbGRfcnNiOworCiAKICAgICAgICAgICAvKiBwcmVmZXIgdG9vIG11Y2ggc3BhY2Ugb3ZlciB0b28gbGl0dGxlIHNwYWNlICovCiAgICAgICAgICAgLyogZm9yIHZlcnkgc21hbGwgc2l6ZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuaCBiL3NyYy9hdXRvZml0L2FmbG9hZGVyLmgKaW5kZXggZDRkNzJkMS4uNzczZmY2MCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZmxvYWRlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgZ2x5cGggbG9hZGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZmxvYWRlci5oCisgKgorICogICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBBRkxPQURFUl9IXwpAQCAtMjcsMTEgKzI3LDExIEBACiBGVF9CRUdJTl9IRUFERVIKIAogICAvKgotICAgKiAgVGhlIGF1dG9maXR0ZXIgbW9kdWxlJ3MgKGdsb2JhbCkgZGF0YSBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgd2l0aAotICAgKiAgYWN0dWFsIGZvbnRzLiAgSWYgbmVjZXNzYXJ5LCBgbG9jYWwnIGRhdGEgbGlrZSB0aGUgY3VycmVudCBmYWNlLCB0aGUKLSAgICogIGN1cnJlbnQgZmFjZSdzIGF1dG8taGludCBkYXRhLCBvciB0aGUgY3VycmVudCBnbHlwaCdzIHBhcmFtZXRlcnMKLSAgICogIHJlbGV2YW50IHRvIGF1dG8taGludGluZyBhcmUgYHN3YXBwZWQgaW4nLiAgQ2YuIGZ1bmN0aW9ucyBsaWtlCi0gICAqICBgYWZfbG9hZGVyX3Jlc2V0JyBhbmQgYGFmX2xvYWRlcl9sb2FkX2cnLgorICAgKiBUaGUgYXV0b2ZpdHRlciBtb2R1bGUncyAoZ2xvYmFsKSBkYXRhIHN0cnVjdHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoCisgICAqIGFjdHVhbCBmb250cy4gIElmIG5lY2Vzc2FyeSwgYGxvY2FsJyBkYXRhIGxpa2UgdGhlIGN1cnJlbnQgZmFjZSwgdGhlCisgICAqIGN1cnJlbnQgZmFjZSdzIGF1dG8taGludCBkYXRhLCBvciB0aGUgY3VycmVudCBnbHlwaCdzIHBhcmFtZXRlcnMKKyAgICogcmVsZXZhbnQgdG8gYXV0by1oaW50aW5nIGFyZSBgc3dhcHBlZCBpbicuICBDZi4gZnVuY3Rpb25zIGxpa2UKKyAgICogYGFmX2xvYWRlcl9yZXNldCcgYW5kIGBhZl9sb2FkZXJfbG9hZF9nJy4KICAgICovCiAKICAgdHlwZWRlZiBzdHJ1Y3QgIEFGX0xvYWRlclJlY18KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jCmluZGV4IGRjYWExN2EuLjdmOWYwNDMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKKysrIGIvc3JjL2F1dG9maXQvYWZtb2R1bGUuYwpAQCAtMSwyNiArMSwyNSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZtb2R1bGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZtb2R1bGUuYworICoKKyAqICAgQXV0by1maXR0ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgImFmZ2xvYmFsLmgiCiAjaW5jbHVkZSAiYWZtb2R1bGUuaCIKICNpbmNsdWRlICJhZmxvYWRlci5oIgogI2luY2x1ZGUgImFmZXJyb3JzLmgiCi0jaW5jbHVkZSAiYWZwaWMuaCIKIAogI2lmZGVmIEZUX0RFQlVHX0FVVE9GSVQKIApAQCAtNjAsMTIgKzU5LDEyIEBACiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2FmbW9kdWxlCiAKQEAgLTEwNCwxOSArMTAzLDYgQEAKICAgfQogCiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jdW5kZWYgIEFGX1NDUklQVF9DTEFTU0VTX0dFVAotI2RlZmluZSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGZ0X21vZHVsZS0+bGlicmFyeSApLT5hZl9zY3JpcHRfY2xhc3NlcyApCi0KLSN1bmRlZiAgQUZfU1RZTEVfQ0xBU1NFU19HRVQKLSNkZWZpbmUgQUZfU1RZTEVfQ0xBU1NFU19HRVQgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGZ0X21vZHVsZS0+bGlicmFyeSApLT5hZl9zdHlsZV9jbGFzc2VzICkKLQotI2VuZGlmCi0KLQogICBzdGF0aWMgRlRfRXJyb3IKICAgYWZfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgZnRfbW9kdWxlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLApAQCAtMTQ3LDkgKzEzMyw5IEBACiAgICAgICAvKiBXZSB0cmFuc2xhdGUgdGhlIGZhbGxiYWNrIHNjcmlwdCB0byBhIGZhbGxiYWNrIHN0eWxlIHRoYXQgdXNlcyAqLwogICAgICAgLyogYGZhbGxiYWNrLXNjcmlwdCcgYXMgaXRzIHNjcmlwdCBhbmQgYEFGX0NPVkVSQUdFX05PTkUnIGFzIGl0cyAgKi8KICAgICAgIC8qIGNvdmVyYWdlIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBmb3IgKCBzcyA9IDA7IEFGX1NUWUxFX0NMQVNTRVNfR0VUW3NzXTsgc3MrKyApCisgICAgICBmb3IgKCBzcyA9IDA7IGFmX3N0eWxlX2NsYXNzZXNbc3NdOyBzcysrICkKICAgICAgIHsKLSAgICAgICAgQUZfU3R5bGVDbGFzcyAgc3R5bGVfY2xhc3MgPSBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107CisgICAgICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzID0gYWZfc3R5bGVfY2xhc3Nlc1tzc107CiAKIAogICAgICAgICBpZiAoIChGVF9VSW50KXN0eWxlX2NsYXNzLT5zY3JpcHQgPT0gKmZhbGxiYWNrX3NjcmlwdCAmJgpAQCAtMTYwLDcgKzE0Niw3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgaWYgKCAhQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdICkKKyAgICAgIGlmICggIWFmX3N0eWxlX2NsYXNzZXNbc3NdICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UwKCggImFmX3Byb3BlcnR5X3NldDogSW52YWxpZCB2YWx1ZSAlZCBmb3IgcHJvcGVydHkgYCVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tfc2NyaXB0LCBwcm9wZXJ0eV9uYW1lICkpOwpAQCAtMzU3LDcgKzM0Myw3IEBACiAgICAgewogICAgICAgRlRfVUludCogIHZhbCA9IChGVF9VSW50Kil2YWx1ZTsKIAotICAgICAgQUZfU3R5bGVDbGFzcyAgc3R5bGVfY2xhc3MgPSBBRl9TVFlMRV9DTEFTU0VTX0dFVFtmYWxsYmFja19zdHlsZV07CisgICAgICBBRl9TdHlsZUNsYXNzICBzdHlsZV9jbGFzcyA9IGFmX3N0eWxlX2NsYXNzZXNbZmFsbGJhY2tfc3R5bGVdOwogCiAKICAgICAgICp2YWwgPSBzdHlsZV9jbGFzcy0+c2NyaXB0OwpAQCAtNDQwLDI4ICs0MjYsMTYgQEAKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMSgKICAgICBhZl9zZXJ2aWNlcywKIAotICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgJkFGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgKQorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgJmFmX3NlcnZpY2VfcHJvcGVydGllcyApCiAKIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX01vZHVsZV9JbnRlcmZhY2UgKQogICBhZl9nZXRfaW50ZXJmYWNlKCBGVF9Nb2R1bGUgICAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbW9kdWxlX2ludGVyZmFjZSApCiAgIHsKLSAgICAvKiBBRl9TRVJWSUNFU19HRVQgZGVyZWZlcmVuY2VzIGBsaWJyYXJ5JyBpbiBQSUMgbW9kZSAqLwotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0gICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLQotCi0gICAgaWYgKCAhbW9kdWxlICkKLSAgICAgIHJldHVybiBOVUxMOwotICAgIGxpYnJhcnkgPSBtb2R1bGUtPmxpYnJhcnk7Ci0gICAgaWYgKCAhbGlicmFyeSApCi0gICAgICByZXR1cm4gTlVMTDsKLSNlbHNlCiAgICAgRlRfVU5VU0VEKCBtb2R1bGUgKTsKLSNlbmRpZgogCi0gICAgcmV0dXJuIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIEFGX1NFUlZJQ0VTX0dFVCwgbW9kdWxlX2ludGVyZmFjZSApOworICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBhZl9zZXJ2aWNlcywgbW9kdWxlX2ludGVyZmFjZSApOwogICB9CiAKIApAQCAtNTg5LDcgKzU2Myw3IEBACiAgICAgMHgxMDAwMEwsICAgLyogdmVyc2lvbiAxLjAgb2YgdGhlIGF1dG9maXR0ZXIgICovCiAgICAgMHgyMDAwMEwsICAgLyogcmVxdWlyZXMgRnJlZVR5cGUgMi4wIG9yIGFib3ZlICovCiAKLSAgICAoY29uc3Qgdm9pZCopJkFGX0lOVEVSRkFDRV9HRVQsCisgICAgKGNvbnN0IHZvaWQqKSZhZl9hdXRvZml0dGVyX2ludGVyZmFjZSwKIAogICAgIChGVF9Nb2R1bGVfQ29uc3RydWN0b3IpYWZfYXV0b2ZpdHRlcl9pbml0LCAgLyogbW9kdWxlX2luaXQgICAqLwogICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgYWZfYXV0b2ZpdHRlcl9kb25lLCAgLyogbW9kdWxlX2RvbmUgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaCBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKaW5kZXggNTZmNjRlYS4uMGRiNmVmMCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZm1vZHVsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZm1vZHVsZS5oCisgKgorICogICBBdXRvLWZpdHRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGTU9EVUxFX0hfCkBAIC0yOCw4ICsyOCw4IEBACiAKIAogICAvKgotICAgKiAgVGhpcyBpcyB0aGUgYGV4dGVuZGVkJyBGVF9Nb2R1bGUgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlCi0gICAqICBhdXRvZml0dGVyJ3MgZ2xvYmFsIGRhdGEuCisgICAqIFRoaXMgaXMgdGhlIGBleHRlbmRlZCcgRlRfTW9kdWxlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZQorICAgKiBhdXRvZml0dGVyJ3MgZ2xvYmFsIGRhdGEuCiAgICAqLwogCiAgIHR5cGVkZWYgc3RydWN0ICBBRl9Nb2R1bGVSZWNfCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnBpYy5jIGIvc3JjL2F1dG9maXQvYWZwaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4ZDAxNi4uMDAwMDAwMAotLS0gYS9zcmMvYXV0b2ZpdC9hZnBpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmcGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYXV0b2ZpdCBtb2R1bGUuICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlICJhZnBpYy5oIgotI2luY2x1ZGUgImFmZ2xvYmFsLmgiCi0jaW5jbHVkZSAiYWZlcnJvcnMuaCIKLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIGFmbW9kdWxlLmMgKi8KLSAgRlRfRXJyb3IKLSAgRlRfQ3JlYXRlX0NsYXNzX2FmX3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOwotCi0gIHZvaWQKLSAgRlRfRGVzdHJveV9DbGFzc19hZl9zZXJ2aWNlcyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICk7Ci0KLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX2FmX3NlcnZpY2VfcHJvcGVydGllcyggRlRfU2VydmljZV9Qcm9wZXJ0aWVzUmVjKiAgY2xhenogKTsKLQotICB2b2lkIEZUX0luaXRfQ2xhc3NfYWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UoCi0gICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgIEZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlUmVjKiAgY2xhenogKTsKLQotCi0gIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gd3JpdGluZyBzeXN0ZW0gY2xhc3NlcyAqLwotI3VuZGVmICBXUklUSU5HX1NZU1RFTQotI2RlZmluZSBXUklUSU5HX1NZU1RFTSggd3MsIFdTICkgIC8qIGVtcHR5ICovCi0KLSNpbmNsdWRlICJhZndydHN5cy5oIgotCi0KLSAgdm9pZAotICBhdXRvZml0X21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICBpZiAoIHBpY19jb250YWluZXItPmF1dG9maXQgKQotICAgIHsKLSAgICAgIEFGTW9kdWxlUElDKiAgY29udGFpbmVyID0gKEFGTW9kdWxlUElDKilwaWNfY29udGFpbmVyLT5hdXRvZml0OwotCi0KLSAgICAgIGlmICggY29udGFpbmVyLT5hZl9zZXJ2aWNlcyApCi0gICAgICAgIEZUX0Rlc3Ryb3lfQ2xhc3NfYWZfc2VydmljZXMoIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+YWZfc2VydmljZXMgKTsKLSAgICAgIGNvbnRhaW5lci0+YWZfc2VydmljZXMgPSBOVUxMOwotCi0gICAgICBGVF9GUkVFKCBjb250YWluZXIgKTsKLSAgICAgIHBpY19jb250YWluZXItPmF1dG9maXQgPSBOVUxMOwotICAgIH0KLSAgfQotCi0KLSAgRlRfRXJyb3IKLSAgYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9VSW50ICAgICAgICAgICAgc3M7Ci0gICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7Ci0gICAgQUZNb2R1bGVQSUMqICAgICAgIGNvbnRhaW5lciAgICAgPSBOVUxMOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICAvKiBhbGxvY2F0ZSBwb2ludGVyLCBjbGVhciBhbmQgc2V0IGdsb2JhbCBjb250YWluZXIgcG9pbnRlciAqLwotICAgIGlmICggRlRfQUxMT0MgKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOwotICAgIHBpY19jb250YWluZXItPmF1dG9maXQgPSBjb250YWluZXI7Ci0KLSAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KLSAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19hZl9zZXJ2aWNlcyggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lci0+YWZfc2VydmljZXMgKTsKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGdvdG8gRXhpdDsKLQotICAgIEZUX0luaXRfQ2xhc3NfYWZfc2VydmljZV9wcm9wZXJ0aWVzKCAmY29udGFpbmVyLT5hZl9zZXJ2aWNlX3Byb3BlcnRpZXMgKTsKLQotICAgIGZvciAoIHNzID0gMDsgc3MgPCBBRl9XUklUSU5HX1NZU1RFTV9NQVg7IHNzKysgKQotICAgICAgY29udGFpbmVyLT5hZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzW3NzXSA9Ci0gICAgICAgICZjb250YWluZXItPmFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNfcmVjW3NzXTsKLSAgICBjb250YWluZXItPmFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNbQUZfV1JJVElOR19TWVNURU1fTUFYXSA9IE5VTEw7Ci0KLSAgICBmb3IgKCBzcyA9IDA7IHNzIDwgQUZfU0NSSVBUX01BWDsgc3MrKyApCi0gICAgICBjb250YWluZXItPmFmX3NjcmlwdF9jbGFzc2VzW3NzXSA9Ci0gICAgICAgICZjb250YWluZXItPmFmX3NjcmlwdF9jbGFzc2VzX3JlY1tzc107Ci0gICAgY29udGFpbmVyLT5hZl9zY3JpcHRfY2xhc3Nlc1tBRl9TQ1JJUFRfTUFYXSA9IE5VTEw7Ci0KLSAgICBmb3IgKCBzcyA9IDA7IHNzIDwgQUZfU1RZTEVfTUFYOyBzcysrICkKLSAgICAgIGNvbnRhaW5lci0+YWZfc3R5bGVfY2xhc3Nlc1tzc10gPQotICAgICAgICAmY29udGFpbmVyLT5hZl9zdHlsZV9jbGFzc2VzX3JlY1tzc107Ci0gICAgY29udGFpbmVyLT5hZl9zdHlsZV9jbGFzc2VzW0FGX1NUWUxFX01BWF0gPSBOVUxMOwotCi0jdW5kZWYgIFdSSVRJTkdfU1lTVEVNCi0jZGVmaW5lIFdSSVRJTkdfU1lTVEVNKCB3cywgV1MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBGVF9Jbml0X0NsYXNzX2FmXyAjIyB3cyAjIyBfd3JpdGluZ19zeXN0ZW1fY2xhc3MoICAgIFwKLSAgICAgICAgICAmY29udGFpbmVyLT5hZl93cml0aW5nX3N5c3RlbV9jbGFzc2VzX3JlY1tzcysrXSApOwotCi0gICAgc3MgPSAwOwotI2luY2x1ZGUgImFmd3J0c3lzLmgiCi0KLSN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3NzICkgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRlRfSW5pdF9DbGFzc19hZl8gIyMgcyAjIyBfc2NyaXB0X2NsYXNzKCAgICAgXAotICAgICAgICAgICZjb250YWluZXItPmFmX3NjcmlwdF9jbGFzc2VzX3JlY1tzcysrXSApOwotCi0gICAgc3MgPSAwOwotI2luY2x1ZGUgImFmc2NyaXB0LmgiCi0KLSN1bmRlZiAgU1RZTEUKLSNkZWZpbmUgU1RZTEUoIHMsIFMsIGQsIHdzLCBzYywgYnNzLCBjICkgICAgICAgICAgICBcCi0gICAgICAgIEZUX0luaXRfQ2xhc3NfYWZfICMjIHMgIyMgX3N0eWxlX2NsYXNzKCAgICAgXAotICAgICAgICAgICZjb250YWluZXItPmFmX3N0eWxlX2NsYXNzZXNfcmVjW3NzKytdICk7Ci0KLSAgICBzcyA9IDA7Ci0jaW5jbHVkZSAiYWZzdHlsZXMuaCIKLQotICAgIEZUX0luaXRfQ2xhc3NfYWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UoCi0gICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5hZl9hdXRvZml0dGVyX2ludGVyZmFjZSApOwotCi0gIEV4aXQ6Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBhdXRvZml0X21vZHVsZV9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOwotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmcGljLmggYi9zcmMvYXV0b2ZpdC9hZnBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzczNDU2Li4wMDAwMDAwCi0tLSBhL3NyYy9hdXRvZml0L2FmcGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBhdXRvZml0IG1vZHVsZS4gICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIEFGUElDX0hfCi0jZGVmaW5lIEFGUElDX0hfCi0KLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKLQotCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KLSNkZWZpbmUgQUZfU0VSVklDRVNfR0VUICAgICAgICAgICAgICAgIGFmX3NlcnZpY2VzCi0jZGVmaW5lIEFGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgICAgICBhZl9zZXJ2aWNlX3Byb3BlcnRpZXMKLQotI2RlZmluZSBBRl9XUklUSU5HX1NZU1RFTV9DTEFTU0VTX0dFVCAgYWZfd3JpdGluZ19zeXN0ZW1fY2xhc3NlcwotI2RlZmluZSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQgICAgICAgICAgYWZfc2NyaXB0X2NsYXNzZXMKLSNkZWZpbmUgQUZfU1RZTEVfQ0xBU1NFU19HRVQgICAgICAgICAgIGFmX3N0eWxlX2NsYXNzZXMKLSNkZWZpbmUgQUZfSU5URVJGQUNFX0dFVCAgICAgICAgICAgICAgIGFmX2F1dG9maXR0ZXJfaW50ZXJmYWNlCi0KLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAgLyogc29tZSBpbmNsdWRlIGZpbGVzIHJlcXVpcmVkIGZvciBtZW1iZXJzIG9mIEFGTW9kdWxlUElDICovCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAotCi0jaW5jbHVkZSAiYWZ0eXBlcy5oIgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIHR5cGVkZWYgc3RydWN0ICBBRk1vZHVsZVBJQ18KLSAgewotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgICBhZl9zZXJ2aWNlczsKLSAgICBGVF9TZXJ2aWNlX1Byb3BlcnRpZXNSZWMgICAgYWZfc2VydmljZV9wcm9wZXJ0aWVzOwotCi0gICAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzICAgICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfV1JJVElOR19TWVNURU1fTUFYICsgMV07Ci0gICAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjICAgIGFmX3dyaXRpbmdfc3lzdGVtX2NsYXNzZXNfcmVjCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FGX1dSSVRJTkdfU1lTVEVNX01BWF07Ci0KLSAgICBBRl9TY3JpcHRDbGFzcyAgICAgICAgICAgICAgYWZfc2NyaXB0X2NsYXNzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU0NSSVBUX01BWCArIDFdOwotICAgIEFGX1NjcmlwdENsYXNzUmVjICAgICAgICAgICBhZl9zY3JpcHRfY2xhc3Nlc19yZWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU0NSSVBUX01BWF07Ci0KLSAgICBBRl9TdHlsZUNsYXNzICAgICAgICAgICAgICAgYWZfc3R5bGVfY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBRl9TVFlMRV9NQVggKyAxXTsKLSAgICBBRl9TdHlsZUNsYXNzUmVjICAgICAgICAgICAgYWZfc3R5bGVfY2xhc3Nlc19yZWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUZfU1RZTEVfTUFYXTsKLQotICAgIEZUX0F1dG9IaW50ZXJfSW50ZXJmYWNlUmVjICBhZl9hdXRvZml0dGVyX2ludGVyZmFjZTsKLQotICB9IEFGTW9kdWxlUElDOwotCi0KLSNkZWZpbmUgR0VUX1BJQyggbGliICkgIFwKLSAgICAgICAgICAoIChBRk1vZHVsZVBJQyopKCAobGliKS0+cGljX2NvbnRhaW5lci5hdXRvZml0ICkgKQotCi0jZGVmaW5lIEFGX1NFUlZJQ0VTX0dFVCAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5hZl9zZXJ2aWNlcyApCi0jZGVmaW5lIEFGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+YWZfc2VydmljZV9wcm9wZXJ0aWVzICkKLQotI2RlZmluZSBBRl9XUklUSU5HX1NZU1RFTV9DTEFTU0VTX0dFVCAgXAotICAgICAgICAgICggR0VUX1BJQyggRlRfRkFDRV9MSUJSQVJZKCBnbG9iYWxzLT5mYWNlICkgKS0+YWZfd3JpdGluZ19zeXN0ZW1fY2xhc3NlcyApCi0jZGVmaW5lIEFGX1NDUklQVF9DTEFTU0VTX0dFVCAgXAotICAgICAgICAgICggR0VUX1BJQyggRlRfRkFDRV9MSUJSQVJZKCBnbG9iYWxzLT5mYWNlICkgKS0+YWZfc2NyaXB0X2NsYXNzZXMgKQotI2RlZmluZSBBRl9TVFlMRV9DTEFTU0VTX0dFVCAgXAotICAgICAgICAgICggR0VUX1BJQyggRlRfRkFDRV9MSUJSQVJZKCBnbG9iYWxzLT5mYWNlICkgKS0+YWZfc3R5bGVfY2xhc3NlcyApCi0jZGVmaW5lIEFGX0lOVEVSRkFDRV9HRVQgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+YWZfYXV0b2ZpdHRlcl9pbnRlcmZhY2UgKQotCi0KLSAgLyogc2VlIGFmcGljLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiAqLwotICB2b2lkCi0gIGF1dG9maXRfbW9kdWxlX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLSAgRlRfRXJyb3IKLSAgYXV0b2ZpdF9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotIC8qICovCi0KLSNlbmRpZiAvKiBBRlBJQ19IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKaW5kZXggMTM1NWM1ZS4uYjkwNGQ1MSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZnJhbmdlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZnJhbmdlcy5jCisgKgorICogICBBdXRvLWZpdHRlciBVbmljb2RlIHNjcmlwdCByYW5nZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiYWZyYW5nZXMuaCIKQEAgLTkxLDcgKzkxLDcgQEAKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDA2RTcsICAweDA2RTggKSwKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDA2RUEsICAweDA2RUQgKSwKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4RDQsICAweDA4RTEgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4RTMsICAweDA4RkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4RDMsICAweDA4RkYgKSwKICAgICBBRl9VTklSQU5HRV9SRUMoICAweEZCQjIsICAweEZCQzEgKSwKICAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzAsICAweEZFNzAgKSwKICAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzIsICAweEZFNzIgKSwKQEAgLTE2Myw2ICsxNjMsNyBAQAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlDMSwgIDB4MDlDNCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlDRCwgIDB4MDlDRCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlFMiwgIDB4MDlFMyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlGRSwgIDB4MDlGRSApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKQEAgLTE5MCw2ICsxOTEsNyBAQAogICB7CiAgICAgQUZfVU5JUkFOR0VfUkVDKCAweDExMTAwLCAweDExMTAyICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAweDExMTI3LCAweDExMTM0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDExMTQ2LCAweDExMTQ2ICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIApAQCAtMzA0LDYgKzMwNiw3IEBACiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTUzLCAgMHgwOTU3ICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTYyLCAgMHgwOTYzICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOEUwLCAgMHhBOEYxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOEZGLCAgMHhBOEZGICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIApAQCAtMzM4LDExICszNDEsOCBAQAogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ2Vvcl91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwRDAsICAweDEwRkYgKSwgIC8qIEdlb3JnaWFuIChNa2hlZHJ1bGkpICovCi0jaWYgMAotICAgIC8qIHRoZSBmb2xsb3dpbmcgcmFuZ2UgaXMgcHJvcG9zZWQgZm9yIGluY2x1c2lvbiBpbiBVbmljb2RlICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQzkwLCAgMHgxQ0JGICksICAvKiBHZW9yZ2lhbiAoTXRhdnJ1bGkpICAqLwotI2VuZGlmCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMEQwLCAgMHgxMEZGICksICAvKiBHZW9yZ2lhbiAoTWtoZWRydWxpKSAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUM5MCwgIDB4MUNCRiApLCAgLyogR2VvcmdpYW4gRXh0ZW5kZWQgKE10YXZydWxpKSAgKi8KICAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCkBAIC0zNTUsOCArMzU1LDggQEAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nZW9rX3VuaXJhbmdlc1tdID0KICAgewogICAgIC8qIEtodXRzdXJpICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMEEwLCAgMHgxMENEICksICAvKiBHZW9yZ2lhbiAoQXNvbXRhdnJ1bGkpICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRDAwLCAgMHgyRDJEICksICAvKiBHZW9yZ2lhbiAoTnVza2h1cmkpICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMEEwLCAgMHgxMENEICksICAvKiBHZW9yZ2lhbiAoQXNvbXRhdnJ1bGkpICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJEMDAsICAweDJEMkQgKSwgIC8qIEdlb3JnaWFuIFN1cHBsZW1lbnQgKE51c2todXJpKSAqLwogICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKQEAgLTQyNSw2ICs0MjUsNyBAQAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFDMSwgIDB4MEFDOCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFDRCwgIDB4MEFDRCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFFMiwgIDB4MEFFMyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFGQSwgIDB4MEFGRiApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKQEAgLTY1NSw3ICs2NTYsOCBAQAogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbWx5bV9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMSwgIDB4MEQwMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMCwgIDB4MEQwMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQzQiwgIDB4MEQzQyApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ0RCwgIDB4MEQ0RSApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ2MiwgIDB4MEQ2MyApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCkBAIC02OTcsNiArNjk5LDcgQEAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ua29vX25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7CiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwN0VCLCAgMHgwN0Y1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwN0ZELCAgMHgwN0ZEICksCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIApAQCAtODU2LDYgKzg1OSw3IEBACiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGVsdV9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMwMCwgIDB4MEMwMCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMwNCwgIDB4MEMwNCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMzRSwgIDB4MEM0MCApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEM0NiwgIDB4MEM1NiApLAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEM2MiwgIDB4MEM2MyApLApAQCAtMTAwNiwxMCArMTAxMCwxMyBAQAogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkUzMCwgIDB4RkU0RiApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgICAgICAgICAgICAgICAgICovCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRjAwLCAgMHhGRkVGICksICAvKiBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyAgICAgICAgICAgKi8KICAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUIwMDAsIDB4MUIwRkYgKSwgIC8qIEthbmEgU3VwcGxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxQjEwMCwgMHgxQjEyRiApLCAgLyogS2FuYSBFeHRlbmRlZC1BICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAweDFEMzAwLCAweDFEMzVGICksICAvKiBUYWkgWHVhbiBIaW5nIFN5bWJvbHMgICAgICAgICAgICAgICAgICAgKi8KICAgICBBRl9VTklSQU5HRV9SRUMoIDB4MjAwMDAsIDB4MkE2REYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIgICAgICAqLwogICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyQTcwMCwgMHgyQjczRiApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQyAgICAgICovCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAweDJCNzQwLCAweDJCODFGICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBEICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkI4MjAsIDB4MkNFQUYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEUgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyQ0VCMCwgMHgyRUJFRiApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRiAgICAgICovCiAgICAgQUZfVU5JUkFOR0VfUkVDKCAweDJGODAwLCAweDJGQTFGICksICAvKiBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQgKi8KICAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuaCBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKaW5kZXggYmEzYjVlNy4uYzEzN2FlMiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZnJhbmdlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZnJhbmdlcy5oCisgKgorICogICBBdXRvLWZpdHRlciBVbmljb2RlIHNjcmlwdCByYW5nZXMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGUkFOR0VTX0hfCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oIGIvc3JjL2F1dG9maXQvYWZzY3JpcHQuaAppbmRleCA2YWMxOTNmLi43ZGQwOTgzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCisrKyBiL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmc2NyaXB0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXRvLWZpdHRlciBzY3JpcHRzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmc2NyaXB0LmgKKyAqCisgKiAgIEF1dG8tZml0dGVyIHNjcmlwdHMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMTMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICAgLyogVGhlIGZvbGxvd2luZyBwYXJ0IGNhbiBiZSBpbmNsdWRlZCBtdWx0aXBsZSB0aW1lcy4gKi8KQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICAgICJHZW9yZ2lhbiAoTWtoZWRydWxpKSIsCiAgICAgICAgICAgSEJfU0NSSVBUX0dFT1JHSUFOLAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKLSAgICAgICAgICAiXHhFMVx4ODNceDk4IFx4RTFceDgzXHg5NCBceEUxXHg4M1x4OTAiICkgLyog4YOYIOGDlCDhg5AgKi8KKyAgICAgICAgICAiXHhFMVx4ODNceDk4IFx4RTFceDgzXHg5NCBceEUxXHg4M1x4OTAgXHhFMVx4QjJceEJGIiApIC8qIOGDmCDhg5Qg4YOQIOGymCAqLwogCiAgIFNDUklQVCggZ2VvaywgR0VPSywKICAgICAgICAgICAiR2VvcmdpYW4gKEtodXRzdXJpKSIsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuYwppbmRleCBmMzA4MjgxLi5iMmY1ZDE4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jCisrKyBiL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGFmc2hhcGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoYm9keSkuICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFmc2hhcGVyLmMKKyAqCisgKiAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNiwxMiArMjYsMTIgQEAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2Fmc2hhcGVyCiAKQEAgLTU5MSwxNCArNTkxLDkgQEAKICAgdm9pZCoKICAgYWZfc2hhcGVyX2J1Zl9jcmVhdGUoIEZUX0ZhY2UgIGZhY2UgKQogICB7Ci0gICAgRlRfRXJyb3IgICBlcnJvcjsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPm1lbW9yeTsKLSAgICBGVF9VTG9uZyogIGJ1ZjsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKIAotCi0gICAgRlRfTUVNX0FMTE9DKCBidWYsIHNpemVvZiAoIEZUX1VMb25nICkgKTsKLQotICAgIHJldHVybiAodm9pZCopYnVmOworICAgIHJldHVybiBOVUxMOwogICB9CiAKIApAQCAtNjA2LDEwICs2MDEsOCBAQAogICBhZl9zaGFwZXJfYnVmX2Rlc3Ryb3koIEZUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgYnVmICkKICAgewotICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+bWVtb3J5OwotCi0KLSAgICBGVF9GUkVFKCBidWYgKTsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKyAgICBGVF9VTlVTRUQoIGJ1ZiApOwogICB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZzaGFwZXIuaCBiL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmgKaW5kZXggN2VmZDlmNi4uMjY2NWZlMiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZzaGFwZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZnNoYXBlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGFyZkJ1enogaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgT3BlblR5cGUgZmVhdHVyZXMgKHNwZWNpZmljYXRpb24pLiAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZnNoYXBlci5oCisgKgorICogICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMTMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQUZTSEFQRVJfSF8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmggYi9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCmluZGV4IGUyNjg4YjMuLjU1ZDhiMjMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZzdHlsZXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZzdHlsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIHN0eWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZzdHlsZXMuaAorICoKKyAqICAgQXV0by1maXR0ZXIgc3R5bGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAgIC8qIFRoZSBmb2xsb3dpbmcgcGFydCBjYW4gYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnR5cGVzLmggYi9zcmMvYXV0b2ZpdC9hZnR5cGVzLmgKaW5kZXggYTUwMDEzNC4uYWZmYjgxYiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCisrKyBiL3NyYy9hdXRvZml0L2FmdHlwZXMuaApAQCAtMSwzMCArMSwzMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZ0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZ0eXBlcy5oCisgKgorICogICBBdXRvLWZpdHRlciB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgotICAgKiAgVGhlIGF1dG8tZml0dGVyIGlzIGEgY29tcGxldGUgcmV3cml0ZSBvZiB0aGUgb2xkIGF1dG8taGludGVyLgotICAgKiAgSXRzIG1haW4gZmVhdHVyZSBpcyB0aGUgYWJpbGl0eSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZGlmZmVyZW50Ci0gICAqICB3cml0aW5nIHN5c3RlbXMgYW5kIHNjcmlwdHMgaW4gb3JkZXIgdG8gYXBwbHkgc3BlY2lmaWMgcnVsZXMuCisgICAqIFRoZSBhdXRvLWZpdHRlciBpcyBhIGNvbXBsZXRlIHJld3JpdGUgb2YgdGhlIG9sZCBhdXRvLWhpbnRlci4KKyAgICogSXRzIG1haW4gZmVhdHVyZSBpcyB0aGUgYWJpbGl0eSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZGlmZmVyZW50CisgICAqIHdyaXRpbmcgc3lzdGVtcyBhbmQgc2NyaXB0cyBpbiBvcmRlciB0byBhcHBseSBzcGVjaWZpYyBydWxlcy4KICAgICoKLSAgICogIFRoZSBjb2RlIGhhcyBhbHNvIGJlZW4gY29tcGFydG1lbnRhbGl6ZWQgaW50byBzZXZlcmFsIGVudGl0aWVzIHRoYXQKLSAgICogIHNob3VsZCBtYWtlIGFsZ29yaXRobWljIGV4cGVyaW1lbnRhdGlvbiBlYXNpZXIgdGhhbiB3aXRoIHRoZSBvbGQKLSAgICogIGNvZGUuCisgICAqIFRoZSBjb2RlIGhhcyBhbHNvIGJlZW4gY29tcGFydG1lbnRhbGl6ZWQgaW50byBzZXZlcmFsIGVudGl0aWVzIHRoYXQKKyAgICogc2hvdWxkIG1ha2UgYWxnb3JpdGhtaWMgZXhwZXJpbWVudGF0aW9uIGVhc2llciB0aGFuIHdpdGggdGhlIG9sZAorICAgKiBjb2RlLgogICAgKgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNzYsOSArNzYsOSBAQAogCiAgIHR5cGVkZWYgc3RydWN0ICBBRl9XaWR0aFJlY18KICAgewotICAgIEZUX1BvcyAgb3JnOyAgLyogb3JpZ2luYWwgcG9zaXRpb24vd2lkdGggaW4gZm9udCB1bml0cyAgICAgICAgICAgICAgKi8KLSAgICBGVF9Qb3MgIGN1cjsgIC8qIGN1cnJlbnQvc2NhbGVkIHBvc2l0aW9uL3dpZHRoIGluIGRldmljZSBzdWItcGl4ZWxzICovCi0gICAgRlRfUG9zICBmaXQ7ICAvKiBjdXJyZW50L2ZpdHRlZCBwb3NpdGlvbi93aWR0aCBpbiBkZXZpY2Ugc3ViLXBpeGVscyAqLworICAgIEZUX1BvcyAgb3JnOyAgLyogb3JpZ2luYWwgcG9zaXRpb24vd2lkdGggaW4gZm9udCB1bml0cyAgICAgICAgICAgICAqLworICAgIEZUX1BvcyAgY3VyOyAgLyogY3VycmVudC9zY2FsZWQgcG9zaXRpb24vd2lkdGggaW4gZGV2aWNlIHN1YnBpeGVscyAqLworICAgIEZUX1BvcyAgZml0OyAgLyogY3VycmVudC9maXR0ZWQgcG9zaXRpb24vd2lkdGggaW4gZGV2aWNlIHN1YnBpeGVscyAqLwogCiAgIH0gQUZfV2lkdGhSZWMsICpBRl9XaWR0aDsKIApAQCAtMTAyLDkgKzEwMiw5IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIC8qCi0gICAqICBUaGUgYXV0by1maXR0ZXIgZG9lc24ndCBuZWVkIGEgdmVyeSBoaWdoIGFuZ3VsYXIgYWNjdXJhY3k7Ci0gICAqICB0aGlzIGFsbG93cyB1cyB0byBzcGVlZCB1cCBzb21lIGNvbXB1dGF0aW9ucyBjb25zaWRlcmFibHkgd2l0aCBhCi0gICAqICBsaWdodCBDb3JkaWMgYWxnb3JpdGhtIChzZWUgYWZhbmdsZXMuYykuCisgICAqIFRoZSBhdXRvLWZpdHRlciBkb2Vzbid0IG5lZWQgYSB2ZXJ5IGhpZ2ggYW5ndWxhciBhY2N1cmFjeTsKKyAgICogdGhpcyBhbGxvd3MgdXMgdG8gc3BlZWQgdXAgc29tZSBjb21wdXRhdGlvbnMgY29uc2lkZXJhYmx5IHdpdGggYQorICAgKiBsaWdodCBDb3JkaWMgYWxnb3JpdGhtIChzZWUgYWZhbmdsZXMuYykuCiAgICAqLwogCiAgIHR5cGVkZWYgRlRfSW50ICBBRl9BbmdsZTsKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAjaWYgMAogICAvKgotICAgKiAgY29tcHV0ZSB0aGUgYW5nbGUgb2YgYSBnaXZlbiAyLUQgdmVjdG9yCisgICAqIGNvbXB1dGUgdGhlIGFuZ2xlIG9mIGEgZ2l2ZW4gMi1EIHZlY3RvcgogICAgKi8KICAgRlRfTE9DQUwoIEFGX0FuZ2xlICkKICAgYWZfYW5nbGVfYXRhbiggRlRfUG9zICBkeCwKQEAgLTEyNiw4ICsxMjYsOCBAQAogCiAKICAgLyoKLSAgICogIGNvbXB1dGUgYGFuZ2xlMiAtIGFuZ2xlMSc7IHRoZSByZXN1bHQgaXMgYWx3YXlzIHdpdGhpbgotICAgKiAgdGhlIHJhbmdlIFstQUZfQU5HTEVfUEkgLi4gQUZfQU5HTEVfUEkgLSAxXQorICAgKiBjb21wdXRlIGBhbmdsZTIgLSBhbmdsZTEnOyB0aGUgcmVzdWx0IGlzIGFsd2F5cyB3aXRoaW4KKyAgICogdGhlIHJhbmdlIFstQUZfQU5HTEVfUEkgLi4gQUZfQU5HTEVfUEkgLSAxXQogICAgKi8KICAgRlRfTE9DQUwoIEFGX0FuZ2xlICkKICAgYWZfYW5nbGVfZGlmZiggQUZfQW5nbGUgIGFuZ2xlMSwKQEAgLTE1MCw4ICsxNTAsOSBAQAogICBGVF9FTkRfU1RNTlQKIAogCi0gIC8qICBvcGFxdWUgaGFuZGxlIHRvIGdseXBoLXNwZWNpZmljIGhpbnRzIC0tIHNlZSBgYWZoaW50cy5oJyBmb3IgbW9yZQotICAgKiAgZGV0YWlscworICAvKgorICAgKiBvcGFxdWUgaGFuZGxlIHRvIGdseXBoLXNwZWNpZmljIGhpbnRzIC0tIHNlZSBgYWZoaW50cy5oJyBmb3IgbW9yZQorICAgKiBkZXRhaWxzCiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCBBRl9HbHlwaEhpbnRzUmVjXyogIEFGX0dseXBoSGludHM7CiAKQEAgLTE2NSw4ICsxNjYsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgQSBzY2FsZXIgbW9kZWxzIHRoZSB0YXJnZXQgcGl4ZWwgZGV2aWNlIHRoYXQgd2lsbCByZWNlaXZlIHRoZQotICAgKiAgYXV0by1oaW50ZWQgZ2x5cGggaW1hZ2UuCisgICAqIEEgc2NhbGVyIG1vZGVscyB0aGUgdGFyZ2V0IHBpeGVsIGRldmljZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUKKyAgICogYXV0by1oaW50ZWQgZ2x5cGggaW1hZ2UuCiAgICAqLwogCiAjZGVmaW5lIEFGX1NDQUxFUl9GTEFHX05PX0hPUklaT05UQUwgIDFVIC8qIGRpc2FibGUgaG9yaXpvbnRhbCBoaW50aW5nICovCkBAIC0xOTcsOCArMTk4LDkgQEAKIAogICB0eXBlZGVmIHN0cnVjdCBBRl9TdHlsZU1ldHJpY3NSZWNfKiAgQUZfU3R5bGVNZXRyaWNzOwogCi0gIC8qICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhbiBGVF9GYWNlIHRvIGNvbXB1dGUgZ2xvYmFsIG1ldHJpY3MgZm9yCi0gICAqICBhIHNwZWNpZmljIHN0eWxlLgorICAvKgorICAgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhbiBGVF9GYWNlIHRvIGNvbXB1dGUgZ2xvYmFsIG1ldHJpY3MgZm9yCisgICAqIGEgc3BlY2lmaWMgc3R5bGUuCiAgICAqLwogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqQUZfV3JpdGluZ1N5c3RlbV9Jbml0TWV0cmljc0Z1bmMpKCBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCkBAIC0yMzcsMjIgKzIzOSwyMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgRm9yIHRoZSBhdXRvLWhpbnRlciwgYSB3cml0aW5nIHN5c3RlbSBjb25zaXN0cyBvZiBtdWx0aXBsZSBzY3JpcHRzIHRoYXQKLSAgICogIGNhbiBiZSBoYW5kbGVkIHNpbWlsYXJseSAqaW4gYSB0eXBvZ3JhcGhpY2FsIHdheSo7IHRoZSByZWxhdGlvbnNoaXAgaXMKLSAgICogIG5vdCBiYXNlZCBvbiBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsIGJvdGggdGhlIEdyZWVrIGFuZCB0aGUgdW5yZWxhdGVkCi0gICAqICBBcm1lbmlhbiBzY3JpcHRzIHNoYXJlIHRoZSBzYW1lIGZlYXR1cmVzIGxpa2UgYXNjZW5kZXIsIGRlc2NlbmRlciwKLSAgICogIHgtaGVpZ2h0LCBldGMuICBFc3NlbnRpYWxseSwgYSB3cml0aW5nIHN5c3RlbSBpcyBjb3ZlcmVkIGJ5IGEKLSAgICogIHN1Ym1vZHVsZSBvZiB0aGUgYXV0by1maXR0ZXI7IGl0IGNvbnRhaW5zCisgICAqIEZvciB0aGUgYXV0by1oaW50ZXIsIGEgd3JpdGluZyBzeXN0ZW0gY29uc2lzdHMgb2YgbXVsdGlwbGUgc2NyaXB0cyB0aGF0CisgICAqIGNhbiBiZSBoYW5kbGVkIHNpbWlsYXJseSAqaW4gYSB0eXBvZ3JhcGhpY2FsIHdheSo7IHRoZSByZWxhdGlvbnNoaXAgaXMKKyAgICogbm90IGJhc2VkIG9uIGhpc3RvcnkuICBGb3IgZXhhbXBsZSwgYm90aCB0aGUgR3JlZWsgYW5kIHRoZSB1bnJlbGF0ZWQKKyAgICogQXJtZW5pYW4gc2NyaXB0cyBzaGFyZSB0aGUgc2FtZSBmZWF0dXJlcyBsaWtlIGFzY2VuZGVyLCBkZXNjZW5kZXIsCisgICAqIHgtaGVpZ2h0LCBldGMuICBFc3NlbnRpYWxseSwgYSB3cml0aW5nIHN5c3RlbSBpcyBjb3ZlcmVkIGJ5IGEKKyAgICogc3VibW9kdWxlIG9mIHRoZSBhdXRvLWZpdHRlcjsgaXQgY29udGFpbnMKICAgICoKLSAgICogIC0gYSBzcGVjaWZpYyBnbG9iYWwgYW5hbHl6ZXIgdGhhdCBjb21wdXRlcyBnbG9iYWwgbWV0cmljcyBzcGVjaWZpYyB0bwotICAgKiAgICB0aGUgc2NyaXB0IChiYXNlZCBvbiBzY3JpcHQtc3BlY2lmaWMgY2hhcmFjdGVycyB0byBpZGVudGlmeSBhc2NlbmRlcgotICAgKiAgICBoZWlnaHQsIHgtaGVpZ2h0LCBldGMuKSwKKyAgICogLSBhIHNwZWNpZmljIGdsb2JhbCBhbmFseXplciB0aGF0IGNvbXB1dGVzIGdsb2JhbCBtZXRyaWNzIHNwZWNpZmljIHRvCisgICAqICAgdGhlIHNjcmlwdCAoYmFzZWQgb24gc2NyaXB0LXNwZWNpZmljIGNoYXJhY3RlcnMgdG8gaWRlbnRpZnkgYXNjZW5kZXIKKyAgICogICBoZWlnaHQsIHgtaGVpZ2h0LCBldGMuKSwKICAgICoKLSAgICogIC0gYSBzcGVjaWZpYyBnbHlwaCBhbmFseXplciB0aGF0IGNvbXB1dGVzIHNlZ21lbnRzIGFuZCBlZGdlcyBmb3IgZWFjaAotICAgKiAgICBnbHlwaCBjb3ZlcmVkIGJ5IHRoZSBzY3JpcHQsCisgICAqIC0gYSBzcGVjaWZpYyBnbHlwaCBhbmFseXplciB0aGF0IGNvbXB1dGVzIHNlZ21lbnRzIGFuZCBlZGdlcyBmb3IgZWFjaAorICAgKiAgIGdseXBoIGNvdmVyZWQgYnkgdGhlIHNjcmlwdCwKICAgICoKLSAgICogIC0gYSBzcGVjaWZpYyBncmlkLWZpdHRpbmcgYWxnb3JpdGhtIHRoYXQgZGlzdG9ydHMgdGhlIHNjYWxlZCBnbHlwaAotICAgKiAgICBvdXRsaW5lIGFjY29yZGluZyB0byB0aGUgcmVzdWx0cyBvZiB0aGUgZ2x5cGggYW5hbHl6ZXIuCisgICAqIC0gYSBzcGVjaWZpYyBncmlkLWZpdHRpbmcgYWxnb3JpdGhtIHRoYXQgZGlzdG9ydHMgdGhlIHNjYWxlZCBnbHlwaAorICAgKiAgIG91dGxpbmUgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzIG9mIHRoZSBnbHlwaCBhbmFseXplci4KICAgICovCiAKICNkZWZpbmUgQUZXUlRTWVNfSF8gIC8qIGRvbid0IGxvYWQgaGVhZGVyIGZpbGVzICovCkBAIC0zMDAsMTIgKzMwMiwxMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgRWFjaCBzY3JpcHQgaXMgYXNzb2NpYXRlZCB3aXRoIHR3byBzZXRzIG9mIFVuaWNvZGUgcmFuZ2VzIHRvIHRlc3QKLSAgICogIHdoZXRoZXIgdGhlIGZvbnQgZmFjZSBzdXBwb3J0cyB0aGUgc2NyaXB0LCBhbmQgd2hpY2ggbm9uLWJhc2UKLSAgICogIGNoYXJhY3RlcnMgdGhlIHNjcmlwdCBjb250YWlucy4KKyAgICogRWFjaCBzY3JpcHQgaXMgYXNzb2NpYXRlZCB3aXRoIHR3byBzZXRzIG9mIFVuaWNvZGUgcmFuZ2VzIHRvIHRlc3QKKyAgICogd2hldGhlciB0aGUgZm9udCBmYWNlIHN1cHBvcnRzIHRoZSBzY3JpcHQsIGFuZCB3aGljaCBub24tYmFzZQorICAgKiBjaGFyYWN0ZXJzIHRoZSBzY3JpcHQgY29udGFpbnMuCiAgICAqCi0gICAqICBXZSB1c2UgZm91ci1sZXR0ZXIgc2NyaXB0IHRhZ3MgZnJvbSB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiwKLSAgICogIGV4dGVuZGVkIGJ5IGBOT05FJywgd2hpY2ggaW5kaWNhdGVzIGBubyBzY3JpcHQnLgorICAgKiBXZSB1c2UgZm91ci1sZXR0ZXIgc2NyaXB0IHRhZ3MgZnJvbSB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiwKKyAgICogZXh0ZW5kZWQgYnkgYE5PTkUnLCB3aGljaCBpbmRpY2F0ZXMgYG5vIHNjcmlwdCcuCiAgICAqLwogCiAjdW5kZWYgIFNDUklQVApAQCAtMzYxLDQxICszNjMsNDEgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICAgLyoKLSAgICogIFVzdWFsbHksIGEgZm9udCBjb250YWlucyBtb3JlIGdseXBocyB0aGFuIGNhbiBiZSBhZGRyZXNzZWQgYnkgaXRzCi0gICAqICBjaGFyYWN0ZXIgbWFwLgorICAgKiBVc3VhbGx5LCBhIGZvbnQgY29udGFpbnMgbW9yZSBnbHlwaHMgdGhhbiBjYW4gYmUgYWRkcmVzc2VkIGJ5IGl0cworICAgKiBjaGFyYWN0ZXIgbWFwLgogICAgKgotICAgKiAgSW4gdGhlIFBvc3RTY3JpcHQgZm9udCB3b3JsZCwgZW5jb2RpbmcgdmVjdG9ycyBzcGVjaWZpYyB0byBhIGdpdmVuCi0gICAqICB0YXNrIGFyZSB1c2VkIHRvIHNlbGVjdCBzdWNoIGdseXBocywgYW5kIHRoZXNlIGdseXBocyBjYW4gYmUgb2Z0ZW4KLSAgICogIHJlY29nbml6ZWQgYnkgaGF2aW5nIGEgc3VmZml4IGluIGl0cyBnbHlwaCBuYW1lcy4gIEZvciBleGFtcGxlLCBhCi0gICAqICBzdXBlcnNjcmlwdCBnbHlwaCBgQScgbWlnaHQgYmUgY2FsbGVkIGBBLnN1cCcuICBVbmZvcnR1bmF0ZWx5LCB0aGlzCi0gICAqICBuYW1pbmcgc2NoZW1lIGlzIG5vdCBzdGFuZGFyZGl6ZWQgYW5kIHRodXMgdW51c2FibGUgZm9yIHVzLgorICAgKiBJbiB0aGUgUG9zdFNjcmlwdCBmb250IHdvcmxkLCBlbmNvZGluZyB2ZWN0b3JzIHNwZWNpZmljIHRvIGEgZ2l2ZW4KKyAgICogdGFzayBhcmUgdXNlZCB0byBzZWxlY3Qgc3VjaCBnbHlwaHMsIGFuZCB0aGVzZSBnbHlwaHMgY2FuIGJlIG9mdGVuCisgICAqIHJlY29nbml6ZWQgYnkgaGF2aW5nIGEgc3VmZml4IGluIGl0cyBnbHlwaCBuYW1lcy4gIEZvciBleGFtcGxlLCBhCisgICAqIHN1cGVyc2NyaXB0IGdseXBoIGBBJyBtaWdodCBiZSBjYWxsZWQgYEEuc3VwJy4gIFVuZm9ydHVuYXRlbHksIHRoaXMKKyAgICogbmFtaW5nIHNjaGVtZSBpcyBub3Qgc3RhbmRhcmRpemVkIGFuZCB0aHVzIHVudXNhYmxlIGZvciB1cy4KICAgICoKLSAgICogIEluIHRoZSBPcGVuVHlwZSB3b3JsZCwgYSBiZXR0ZXIgc29sdXRpb24gd2FzIGludmVudGVkLCBuYW1lbHkKLSAgICogIGBmZWF0dXJlcycsIHdoaWNoIGNsZWFubHkgc2VwYXJhdGUgYSBjaGFyYWN0ZXIncyBpbnB1dCBlbmNvZGluZyBmcm9tCi0gICAqICB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCdzIGFwcGVhcmFuY2UsIGFuZCB3aGljaCBkb24ndCB1c2UgZ2x5cGggbmFtZXMKLSAgICogIGF0IGFsbC4gIEZvciBvdXIgcHVycG9zZXMsIGFuZCBzbGlnaHRseSBnZW5lcmFsaXplZCwgYW4gT3BlblR5cGUKLSAgICogIGZlYXR1cmUgaXMgYSBuYW1lIG9mIGEgbWFwcGluZyB0aGF0IG1hcHMgY2hhcmFjdGVyIGNvZGVzIHRvCi0gICAqICBub24tc3RhbmRhcmQgZ2x5cGggaW5kaWNlcyAoZmVhdHVyZXMgZ2V0IHVzZWQgZm9yIG90aGVyIHRoaW5ncyBhbHNvKS4KLSAgICogIEZvciBleGFtcGxlLCB0aGUgYHN1cHMnIGZlYXR1cmUgcHJvdmlkZXMgc3VwZXJzY3JpcHQgZ2x5cGhzLCB0aHVzCi0gICAqICBtYXBwaW5nIGNoYXJhY3RlciBjb2RlcyBsaWtlIGBBJyBvciBgQicgdG8gc3VwZXJzY3JpcHQgZ2x5cGgKLSAgICogIHJlcHJlc2VudGF0aW9uIGZvcm1zLiAgSG93IHRoaXMgbWFwcGluZyBoYXBwZW5zIGlzIGNvbXBsZXRlbHkKLSAgICogIHVuaW50ZXJlc3RpbmcgdG8gdXMuCisgICAqIEluIHRoZSBPcGVuVHlwZSB3b3JsZCwgYSBiZXR0ZXIgc29sdXRpb24gd2FzIGludmVudGVkLCBuYW1lbHkKKyAgICogYGZlYXR1cmVzJywgd2hpY2ggY2xlYW5seSBzZXBhcmF0ZSBhIGNoYXJhY3RlcidzIGlucHV0IGVuY29kaW5nIGZyb20KKyAgICogdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGgncyBhcHBlYXJhbmNlLCBhbmQgd2hpY2ggZG9uJ3QgdXNlIGdseXBoIG5hbWVzCisgICAqIGF0IGFsbC4gIEZvciBvdXIgcHVycG9zZXMsIGFuZCBzbGlnaHRseSBnZW5lcmFsaXplZCwgYW4gT3BlblR5cGUKKyAgICogZmVhdHVyZSBpcyBhIG5hbWUgb2YgYSBtYXBwaW5nIHRoYXQgbWFwcyBjaGFyYWN0ZXIgY29kZXMgdG8KKyAgICogbm9uLXN0YW5kYXJkIGdseXBoIGluZGljZXMgKGZlYXR1cmVzIGdldCB1c2VkIGZvciBvdGhlciB0aGluZ3MgYWxzbykuCisgICAqIEZvciBleGFtcGxlLCB0aGUgYHN1cHMnIGZlYXR1cmUgcHJvdmlkZXMgc3VwZXJzY3JpcHQgZ2x5cGhzLCB0aHVzCisgICAqIG1hcHBpbmcgY2hhcmFjdGVyIGNvZGVzIGxpa2UgYEEnIG9yIGBCJyB0byBzdXBlcnNjcmlwdCBnbHlwaAorICAgKiByZXByZXNlbnRhdGlvbiBmb3Jtcy4gIEhvdyB0aGlzIG1hcHBpbmcgaGFwcGVucyBpcyBjb21wbGV0ZWx5CisgICAqIHVuaW50ZXJlc3RpbmcgdG8gdXMuCiAgICAqCi0gICAqICBGb3IgdGhlIGF1dG8taGludGVyLCBhIGBjb3ZlcmFnZScgcmVwcmVzZW50cyBhbGwgZ2x5cGhzIG9mIGFuIE9wZW5UeXBlCi0gICAqICBmZWF0dXJlIGNvbGxlY3RlZCBpbiBhIHNldCAoYXMgbGlzdGVkIGJlbG93KSB0aGF0IGNhbiBiZSBoaW50ZWQKLSAgICogIHRvZ2V0aGVyLiAgVG8gY29udGludWUgdGhlIGFib3ZlIGV4YW1wbGUsIHN1cGVyc2NyaXB0IGdseXBocyBtdXN0IG5vdAotICAgKiAgYmUgaGludGVkIHRvZ2V0aGVyIHdpdGggbm9ybWFsIGdseXBocyBiZWNhdXNlIHRoZSBibHVlIHpvbmVzCi0gICAqICBjb21wbGV0ZWx5IGRpZmZlci4KKyAgICogRm9yIHRoZSBhdXRvLWhpbnRlciwgYSBgY292ZXJhZ2UnIHJlcHJlc2VudHMgYWxsIGdseXBocyBvZiBhbiBPcGVuVHlwZQorICAgKiBmZWF0dXJlIGNvbGxlY3RlZCBpbiBhIHNldCAoYXMgbGlzdGVkIGJlbG93KSB0aGF0IGNhbiBiZSBoaW50ZWQKKyAgICogdG9nZXRoZXIuICBUbyBjb250aW51ZSB0aGUgYWJvdmUgZXhhbXBsZSwgc3VwZXJzY3JpcHQgZ2x5cGhzIG11c3Qgbm90CisgICAqIGJlIGhpbnRlZCB0b2dldGhlciB3aXRoIG5vcm1hbCBnbHlwaHMgYmVjYXVzZSB0aGUgYmx1ZSB6b25lcworICAgKiBjb21wbGV0ZWx5IGRpZmZlci4KICAgICoKLSAgICogIE5vdGUgdGhhdCBGcmVlVHlwZSBpdHNlbGYgZG9lc24ndCBjb21wdXRlIGNvdmVyYWdlczsgaXQgb25seSBwcm92aWRlcwotICAgKiAgdGhlIGdseXBocyBhZGRyZXNzYWJsZSBieSB0aGUgZGVmYXVsdCBVbmljb2RlIGNoYXJhY3RlciBtYXAuICBJbnN0ZWFkLAotICAgKiAgd2UgdXNlIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IChpZiBhdmFpbGFibGUpLCB3aGljaCBoYXMgbWFueSBmdW5jdGlvbnMKLSAgICogIGV4YWN0bHkgZm9yIHRoaXMgcHVycG9zZS4KKyAgICogTm90ZSB0aGF0IEZyZWVUeXBlIGl0c2VsZiBkb2Vzbid0IGNvbXB1dGUgY292ZXJhZ2VzOyBpdCBvbmx5IHByb3ZpZGVzCisgICAqIHRoZSBnbHlwaHMgYWRkcmVzc2FibGUgYnkgdGhlIGRlZmF1bHQgVW5pY29kZSBjaGFyYWN0ZXIgbWFwLiAgSW5zdGVhZCwKKyAgICogd2UgdXNlIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IChpZiBhdmFpbGFibGUpLCB3aGljaCBoYXMgbWFueSBmdW5jdGlvbnMKKyAgICogZXhhY3RseSBmb3IgdGhpcyBwdXJwb3NlLgogICAgKgotICAgKiAgQUZfQ09WRVJBR0VfREVGQVVMVCBpcyBzcGVjaWFsOiBJdCBzaG91bGQgY292ZXIgZXZlcnl0aGluZyB0aGF0IGlzbid0Ci0gICAqICBsaXN0ZWQgc2VwYXJhdGVseSAoaW5jbHVkaW5nIHRoZSBnbHlwaHMgYWRkcmVzc2FibGUgYnkgdGhlIGNoYXJhY3RlcgotICAgKiAgbWFwKS4gIEluIGNhc2UgSGFyZkJ1enogaXNuJ3QgYXZhaWxhYmxlLCBpdCBleGFjdGx5IGNvdmVycyB0aGUgZ2x5cGhzCi0gICAqICBhZGRyZXNzYWJsZSBieSB0aGUgY2hhcmFjdGVyIG1hcC4KKyAgICogQUZfQ09WRVJBR0VfREVGQVVMVCBpcyBzcGVjaWFsOiBJdCBzaG91bGQgY292ZXIgZXZlcnl0aGluZyB0aGF0IGlzbid0CisgICAqIGxpc3RlZCBzZXBhcmF0ZWx5IChpbmNsdWRpbmcgdGhlIGdseXBocyBhZGRyZXNzYWJsZSBieSB0aGUgY2hhcmFjdGVyCisgICAqIG1hcCkuICBJbiBjYXNlIEhhcmZCdXp6IGlzbid0IGF2YWlsYWJsZSwgaXQgZXhhY3RseSBjb3ZlcnMgdGhlIGdseXBocworICAgKiBhZGRyZXNzYWJsZSBieSB0aGUgY2hhcmFjdGVyIG1hcC4KICAgICoKICAgICovCiAKQEAgLTQyMyw4ICs0MjUsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAvKgotICAgKiAgVGhlIHRvcG1vc3Qgc3RydWN0dXJlIGZvciBtb2RlbGxpbmcgdGhlIGF1dG8taGludGVyIGdseXBoIGlucHV0IGRhdGEKLSAgICogIGlzIGEgYHN0eWxlIGNsYXNzJywgZ3JvdXBpbmcgZXZlcnl0aGluZyB0b2dldGhlci4KKyAgICogVGhlIHRvcG1vc3Qgc3RydWN0dXJlIGZvciBtb2RlbGxpbmcgdGhlIGF1dG8taGludGVyIGdseXBoIGlucHV0IGRhdGEKKyAgICogaXMgYSBgc3R5bGUgY2xhc3MnLCBncm91cGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLgogICAgKi8KIAogI3VuZGVmICBTVFlMRQpAQCAtNDg2LDggKzQ4OCw2IEBACiAKIAogICAvKiBEZWNsYXJlIGFuZCBkZWZpbmUgdnRhYmxlcyBmb3IgY2xhc3NlcyAqLwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCiAjZGVmaW5lIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIHdyaXRpbmdfc3lzdGVtX2NsYXNzICkgXAogICBGVF9DQUxMQkFDS19UQUJMRSBjb25zdCBBRl9Xcml0aW5nU3lzdGVtQ2xhc3NSZWMgICAgICAgICAgICAgIFwKICAgd3JpdGluZ19zeXN0ZW1fY2xhc3M7CkBAIC01NjIsODcgKzU2Miw5IEBACiAgICAgY292ZXJhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jZGVmaW5lIEFGX0RFQ0xBUkVfV1JJVElOR19TWVNURU1fQ0xBU1MoIHdyaXRpbmdfc3lzdGVtX2NsYXNzICkgICAgICAgICAgICBcCi0gIEZUX0xPQ0FMKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIHdyaXRpbmdfc3lzdGVtX2NsYXNzKCBBRl9Xcml0aW5nU3lzdGVtQ2xhc3NSZWMqICBhYyApOwotCi0jZGVmaW5lIEFGX0RFRklORV9XUklUSU5HX1NZU1RFTV9DTEFTUyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB3cml0aW5nX3N5c3RlbV9jbGFzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHN5c3RlbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbV9zaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBtX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIG1fc2NhbGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbV9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBtX3N0ZHcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGhfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaF9hcHBseSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfTE9DQUxfREVGKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyB3cml0aW5nX3N5c3RlbV9jbGFzcyggQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjKiAgYWMgKSBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+d3JpdGluZ19zeXN0ZW0gICAgICAgID0gc3lzdGVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnN0eWxlX21ldHJpY3Nfc2l6ZSAgICA9IG1fc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9tZXRyaWNzX2luaXQgICAgPSBtX2luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnN0eWxlX21ldHJpY3Nfc2NhbGUgICA9IG1fc2NhbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c3R5bGVfbWV0cmljc19kb25lICAgID0gbV9kb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9tZXRyaWNzX2dldHN0ZHcgPSBtX3N0ZHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c3R5bGVfaGludHNfaW5pdCAgICAgID0gaF9pbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGFjLT5zdHlsZV9oaW50c19hcHBseSAgICAgPSBoX2FwcGx5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotCi0jZGVmaW5lIEFGX0RFQ0xBUkVfU0NSSVBUX0NMQVNTKCBzY3JpcHRfY2xhc3MgKSAgICAgICAgICAgICBcCi0gIEZUX0xPQ0FMKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIHNjcmlwdF9jbGFzcyggQUZfU2NyaXB0Q2xhc3NSZWMqICBhYyApOwotCi0jZGVmaW5lIEFGX0RFRklORV9TQ1JJUFRfQ0xBU1MoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBzY3JpcHRfY2xhc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHNjcmlwdF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmFuZ2VzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBub25iYXNlX3JhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHRvcF90b19ib3R0b20sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3RkX2NoYXJzdHJpbmcgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfTE9DQUxfREVGKCB2b2lkICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBzY3JpcHRfY2xhc3MoIEFGX1NjcmlwdENsYXNzUmVjKiAgYWMgKSBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhYy0+c2NyaXB0ICAgICAgICAgICAgICAgICAgICA9IHNjcmlwdF87ICAgICAgICAgICAgICAgXAotICAgIGFjLT5zY3JpcHRfdW5pX3JhbmdlcyAgICAgICAgID0gcmFuZ2VzOyAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnNjcmlwdF91bmlfbm9uYmFzZV9yYW5nZXMgPSBub25iYXNlX3JhbmdlczsgICAgICAgIFwKLSAgICBhYy0+dG9wX3RvX2JvdHRvbV9oaW50aW5nICAgICA9IHRvcF90b19ib3R0b207ICAgICAgICAgXAotICAgIGFjLT5zdGFuZGFyZF9jaGFyc3RyaW5nICAgICAgID0gc3RkX2NoYXJzdHJpbmc7ICAgICAgICBcCi0gIH0KLQotCi0jZGVmaW5lIEFGX0RFQ0xBUkVfU1RZTEVfQ0xBU1MoIHN0eWxlX2NsYXNzICkgICAgICAgICAgICAgXAotICBGVF9MT0NBTCggdm9pZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfSW5pdF9DbGFzc18gIyMgc3R5bGVfY2xhc3MoIEFGX1N0eWxlQ2xhc3NSZWMqICBhYyApOwotCi0jZGVmaW5lIEFGX0RFRklORV9TVFlMRV9DTEFTUyggICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3R5bGVfY2xhc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3R5bGVfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgd3JpdGluZ19zeXN0ZW1fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc2NyaXB0XywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgYmx1ZV9zdHJpbmdzZXRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY292ZXJhZ2VfICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0xPQ0FMX0RFRiggdm9pZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZUX0luaXRfQ2xhc3NfICMjIHN0eWxlX2NsYXNzKCBBRl9TdHlsZUNsYXNzUmVjKiAgYWMgKSBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnN0eWxlICAgICAgICAgID0gc3R5bGVfOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPndyaXRpbmdfc3lzdGVtID0gd3JpdGluZ19zeXN0ZW1fOyAgICAgICAgICAgICAgICBcCi0gICAgYWMtPnNjcmlwdCAgICAgICAgID0gc2NyaXB0XzsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYWMtPmJsdWVfc3RyaW5nc2V0ID0gYmx1ZV9zdHJpbmdzZXRfOyAgICAgICAgICAgICAgICBcCi0gICAgYWMtPmNvdmVyYWdlICAgICAgID0gY292ZXJhZ2VfOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQogLyogKi8KIAorCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBBRlRZUEVTX0hfICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndhcnAuYyBiL3NyYy9hdXRvZml0L2Fmd2FycC5jCmluZGV4IDJhNzVlYTcuLjYzNmYwMWYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd2FycC5jCisrKyBiL3NyYy9hdXRvZml0L2Fmd2FycC5jCkBAIC0xLDM4ICsxLDM4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZndhcnAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXV0by1maXR0ZXIgd2FycGluZyBhbGdvcml0aG0gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZndhcnAuYworICoKKyAqICAgQXV0by1maXR0ZXIgd2FycGluZyBhbGdvcml0aG0gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAgIC8qCi0gICAqICBUaGUgaWRlYSBvZiB0aGUgd2FycGluZyBjb2RlIGlzIHRvIHNsaWdodGx5IHNjYWxlIGFuZCBzaGlmdCBhIGdseXBoCi0gICAqICB3aXRoaW4gYSBzaW5nbGUgZGltZW5zaW9uIHNvIHRoYXQgYXMgbXVjaCBvZiBpdHMgc2VnbWVudHMgYXJlIGFsaWduZWQKLSAgICogIChtb3JlIG9yIGxlc3MpIG9uIHRoZSBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQKLSAgICogIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzIHBhcmFtZXRlciBjb21iaW5hdGlvbnMgYXJlIHRyaWVkIGFuZCBzY29yZWQuCisgICAqIFRoZSBpZGVhIG9mIHRoZSB3YXJwaW5nIGNvZGUgaXMgdG8gc2xpZ2h0bHkgc2NhbGUgYW5kIHNoaWZ0IGEgZ2x5cGgKKyAgICogd2l0aGluIGEgc2luZ2xlIGRpbWVuc2lvbiBzbyB0aGF0IGFzIG11Y2ggb2YgaXRzIHNlZ21lbnRzIGFyZSBhbGlnbmVkCisgICAqIChtb3JlIG9yIGxlc3MpIG9uIHRoZSBncmlkLiAgVG8gZmluZCBvdXQgdGhlIG9wdGltYWwgc2NhbGluZyBhbmQKKyAgICogc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMgcGFyYW1ldGVyIGNvbWJpbmF0aW9ucyBhcmUgdHJpZWQgYW5kIHNjb3JlZC4KICAgICovCiAKICNpbmNsdWRlICJhZndhcnAuaCIKIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZndhcnAKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3YXJwLmggYi9zcmMvYXV0b2ZpdC9hZndhcnAuaAppbmRleCA1MjBiMWJlLi5kNDU0ZGZiIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndhcnAuaAorKysgYi9zcmMvYXV0b2ZpdC9hZndhcnAuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZ3YXJwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZ3YXJwLmgKKyAqCisgKiAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBBRldBUlBfSF8KQEAgLTQ3LDEyICs0NywxNCBAQAogICB9IEFGX1dhcnBlclJlYywgKkFGX1dhcnBlcjsKIAogCisjaWZkZWYgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCiAgIEZUX0xPQ0FMKCB2b2lkICkKICAgYWZfd2FycGVyX2NvbXB1dGUoIEFGX1dhcnBlciAgICAgIHdhcnBlciwKICAgICAgICAgICAgICAgICAgICAgIEFGX0dseXBoSGludHMgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgQUZfRGltZW5zaW9uICAgZGltLAogICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICAgICAqYV9zY2FsZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAgICAgKmFfZGVsdGEgKTsKKyNlbmRpZgogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmggYi9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCmluZGV4IDQ2NzVmMzIuLjIwMzExZGEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZ3cnRzeXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIHdyaXRpbmcgc3lzdGVtcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZ3cnRzeXMuaAorICoKKyAqICAgQXV0by1maXR0ZXIgd3JpdGluZyBzeXN0ZW1zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEFGV1JUU1lTX0hfCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hdXRvZml0LmMgYi9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKaW5kZXggYzE2MDUxNi4uMWZiYTQ0YSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCisrKyBiL3NyYy9hdXRvZml0L2F1dG9maXQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYXV0b2ZpdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYXV0b2ZpdC5jCisgKgorICogICBBdXRvLWZpdHRlciBtb2R1bGUgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJhZmxhdGluMi5jIgogI2luY2x1ZGUgImFmbG9hZGVyLmMiCiAjaW5jbHVkZSAiYWZtb2R1bGUuYyIKLSNpbmNsdWRlICJhZnBpYy5jIgogI2luY2x1ZGUgImFmcmFuZ2VzLmMiCiAjaW5jbHVkZSAiYWZzaGFwZXIuYyIKICNpbmNsdWRlICJhZndhcnAuYyIKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L3J1bGVzLm1rIGIvc3JjL2F1dG9maXQvcnVsZXMubWsKaW5kZXggNzUxNzFiNC4uNzI5NWRjMCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvcnVsZXMubWsKKysrIGIvc3JjL2F1dG9maXQvcnVsZXMubWsKQEAgLTM4LDcgKzM4LDYgQEAKICAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmbGF0aW4uYyAgXAogICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZsb2FkZXIuYyBcCiAgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZm1vZHVsZS5jIFwKLSAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2FmcGljLmMgICAgXAogICAgICAgICAgICAgICAgICAkKEFVVE9GX0RJUikvYWZyYW5nZXMuYyBcCiAgICAgICAgICAgICAgICAgICQoQVVUT0ZfRElSKS9hZnNoYXBlci5jIFwKICAgICAgICAgICAgICAgICAgJChBVVRPRl9ESVIpL2Fmd2FycC5jCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9KYW1maWxlIGIvc3JjL2Jhc2UvSmFtZmlsZQppbmRleCAyYjQ3YjhhLi41YmVlNmUyIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9KYW1maWxlCisrKyBiL3NyYy9iYXNlL0phbWZpbGUKQEAgLTIwLDkgKzIwLDEyIEBACiAgICAgX3NvdXJjZXMgPSBiYXNlcGljCiAgICAgICAgICAgICAgICBmdGFkdmFuYwogICAgICAgICAgICAgICAgZnRjYWxjCisgICAgICAgICAgICAgICBmdGNvbG9yCiAgICAgICAgICAgICAgICBmdGRiZ21lbQorICAgICAgICAgICAgICAgZnRmbnRmbXQKICAgICAgICAgICAgICAgIGZ0Z2xvYWRyCiAgICAgICAgICAgICAgICBmdGhhc2gKKyAgICAgICAgICAgICAgIGZ0bGNkZmlsCiAgICAgICAgICAgICAgICBmdG9ianMKICAgICAgICAgICAgICAgIGZ0b3V0bG4KICAgICAgICAgICAgICAgIGZ0cGljCkBAIC01MSwxMyArNTQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZnRiaXRtYXAKICAgICAgICAgICAgICAgICAgICAgZnRjaWQKICAgICAgICAgICAgICAgICAgICAgZnRkZWJ1ZwotICAgICAgICAgICAgICAgICAgICBmdGZudGZtdAogICAgICAgICAgICAgICAgICAgICBmdGZzdHlwZQogICAgICAgICAgICAgICAgICAgICBmdGdhc3AKICAgICAgICAgICAgICAgICAgICAgZnRnbHlwaAogICAgICAgICAgICAgICAgICAgICBmdGd4dmFsCiAgICAgICAgICAgICAgICAgICAgIGZ0aW5pdAotICAgICAgICAgICAgICAgICAgICBmdGxjZGZpbAogICAgICAgICAgICAgICAgICAgICBmdG1tCiAgICAgICAgICAgICAgICAgICAgIGZ0b3R2YWwKICAgICAgICAgICAgICAgICAgICAgZnRwYXRlbnQKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Jhc2VwaWMuYyBiL3NyYy9iYXNlL2Jhc2VwaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM4MDQwNi4uMDAwMDAwMAotLS0gYS9zcmMvYmFzZS9iYXNlcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYmFzZXBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBiYXNlLiAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgImJhc2VwaWMuaCIKLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIGZ0Z2x5cGguYyAqLwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3NfZnRfb3V0bGluZV9nbHlwaF9jbGFzcyggRlRfR2x5cGhfQ2xhc3MqICBjbGF6eiApOwotCi0gIHZvaWQKLSAgRlRfSW5pdF9DbGFzc19mdF9iaXRtYXBfZ2x5cGhfY2xhc3MoIEZUX0dseXBoX0NsYXNzKiAgY2xhenogKTsKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCi0gIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb24gZnJvbSBmdHJmb3JrLmMgKi8KLSAgLyogKG5vdCBtb2R1bGFyaXplZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB2b2lkCi0gIEZUX0luaXRfVGFibGVfZnRfcmFjY2Vzc19ndWVzc190YWJsZSggZnRfcmFjY2Vzc19ndWVzc19yZWMqICByZWNvcmQgKTsKLSNlbmRpZgotCi0gIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gZnRpbml0LmMgKi8KLSAgRlRfRXJyb3IKLSAgZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotICB2b2lkCi0gIGZ0X2Rlc3Ryb3lfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0KLSAgdm9pZAotICBmdF9iYXNlX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIGlmICggcGljX2NvbnRhaW5lci0+YmFzZSApCi0gICAgewotICAgICAgLyogZGVzdHJveSBkZWZhdWx0IG1vZHVsZSBjbGFzc2VzICAgICAgICAgICAgKi8KLSAgICAgIC8qIChpbiBjYXNlIEZUX0FkZF9EZWZhdWx0X01vZHVsZXMgd2FzIHVzZWQpICovCi0gICAgICBmdF9kZXN0cm95X2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIGxpYnJhcnkgKTsKLQotICAgICAgRlRfRlJFRSggcGljX2NvbnRhaW5lci0+YmFzZSApOwotICAgICAgcGljX2NvbnRhaW5lci0+YmFzZSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLQotICBGVF9FcnJvcgotICBmdF9iYXNlX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7Ci0gICAgQmFzZVBJQyogICAgICAgICAgIGNvbnRhaW5lciAgICAgPSBOVUxMOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICAvKiBhbGxvY2F0ZSBwb2ludGVyLCBjbGVhciBhbmQgc2V0IGdsb2JhbCBjb250YWluZXIgcG9pbnRlciAqLwotICAgIGlmICggRlRfQUxMT0MoIGNvbnRhaW5lciwgc2l6ZW9mICggKmNvbnRhaW5lciApICkgKQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIEZUX01FTV9TRVQoIGNvbnRhaW5lciwgMCwgc2l6ZW9mICggKmNvbnRhaW5lciApICk7Ci0gICAgcGljX2NvbnRhaW5lci0+YmFzZSA9IGNvbnRhaW5lcjsKLQotICAgIC8qIGluaXRpYWxpemUgZGVmYXVsdCBtb2R1bGVzIGxpc3QgYW5kIHBvaW50ZXJzICovCi0gICAgZXJyb3IgPSBmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcyggbGlicmFyeSApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIC0gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogdGhpcyBpcyBob3cgdGhlIG1vZHVsZSB1c3VhbGx5IGV4cGVjdHMgdGhpcyBkYXRhICovCi0gICAgRlRfSW5pdF9DbGFzc19mdF9vdXRsaW5lX2dseXBoX2NsYXNzKAotICAgICAgJmNvbnRhaW5lci0+ZnRfb3V0bGluZV9nbHlwaF9jbGFzcyApOwotICAgIEZUX0luaXRfQ2xhc3NfZnRfYml0bWFwX2dseXBoX2NsYXNzKAotICAgICAgJmNvbnRhaW5lci0+ZnRfYml0bWFwX2dseXBoX2NsYXNzICk7Ci0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMKLSAgICBGVF9Jbml0X1RhYmxlX2Z0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUoCi0gICAgICAoZnRfcmFjY2Vzc19ndWVzc19yZWMqKSZjb250YWluZXItPmZ0X3JhY2Nlc3NfZ3Vlc3NfdGFibGUgKTsKLSNlbmRpZgotCi0gIEV4aXQ6Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBmdF9iYXNlX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvYmFzZXBpYy5oIGIvc3JjL2Jhc2UvYmFzZXBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTJkMWVkLi4wMDAwMDAwCi0tLSBhL3NyYy9iYXNlL2Jhc2VwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGJhc2VwaWMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYmFzZS4gICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBCQVNFUElDX0hfCi0jZGVmaW5lIEJBU0VQSUNfSF8KLQotCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAotCi0KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotI2RlZmluZSBGVF9PVVRMSU5FX0dMWVBIX0NMQVNTX0dFVCAgJmZ0X291dGxpbmVfZ2x5cGhfY2xhc3MKLSNkZWZpbmUgRlRfQklUTUFQX0dMWVBIX0NMQVNTX0dFVCAgICZmdF9iaXRtYXBfZ2x5cGhfY2xhc3MKLSNkZWZpbmUgRlRfREVGQVVMVF9NT0RVTEVTX0dFVCAgICAgIGZ0X2RlZmF1bHRfbW9kdWxlcwotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSwotI2RlZmluZSBGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVCAgZnRfcmFjY2Vzc19ndWVzc190YWJsZQotI2VuZGlmCi0KLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNpbmNsdWRlIEZUX0dMWVBIX0gKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1JGT1JLX0gKLSNlbmRpZgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIHR5cGVkZWYgc3RydWN0ICBCYXNlUElDXwotICB7Ci0gICAgRlRfTW9kdWxlX0NsYXNzKiogIGRlZmF1bHRfbW9kdWxlX2NsYXNzZXM7Ci0gICAgRlRfR2x5cGhfQ2xhc3MgICAgIGZ0X291dGxpbmVfZ2x5cGhfY2xhc3M7Ci0gICAgRlRfR2x5cGhfQ2xhc3MgICAgIGZ0X2JpdG1hcF9nbHlwaF9jbGFzczsKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksKLSAgICBmdF9yYWNjZXNzX2d1ZXNzX3JlYyAgZnRfcmFjY2Vzc19ndWVzc190YWJsZVtGVF9SQUNDRVNTX05fUlVMRVNdOwotI2VuZGlmCi0KLSAgfSBCYXNlUElDOwotCi0KLSNkZWZpbmUgR0VUX1BJQyggbGliICkgICggKEJhc2VQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIuYmFzZSApICkKLQotI2RlZmluZSBGVF9PVVRMSU5FX0dMWVBIX0NMQVNTX0dFVCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCAmR0VUX1BJQyggbGlicmFyeSApLT5mdF9vdXRsaW5lX2dseXBoX2NsYXNzICkKLSNkZWZpbmUgRlRfQklUTUFQX0dMWVBIX0NMQVNTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoICZHRVRfUElDKCBsaWJyYXJ5ICktPmZ0X2JpdG1hcF9nbHlwaF9jbGFzcyApCi0jZGVmaW5lIEZUX0RFRkFVTFRfTU9EVUxFU19HRVQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgKQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SSwotI2RlZmluZSBGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5mdF9yYWNjZXNzX2d1ZXNzX3RhYmxlICkKLSNlbmRpZgotCi0KLSAgLyogc2VlIGJhc2VwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCi0gIHZvaWQKLSAgZnRfYmFzZV9waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0gIEZUX0Vycm9yCi0gIGZ0X2Jhc2VfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotICAvKiAqLwotCi0jZW5kaWYgLyogQkFTRVBJQ19IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRhZHZhbmMuYyBiL3NyYy9iYXNlL2Z0YWR2YW5jLmMKaW5kZXggMjMwYzg0ZC4uMjJmNGVjOSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRhZHZhbmMuYworKysgYi9zcmMvYmFzZS9mdGFkdmFuYy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGFkdmFuYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUXVpY2sgY29tcHV0YXRpb24gb2YgYWR2YW5jZSB3aWR0aHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGFkdmFuYy5jCisgKgorICogICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRhcGkuYyBiL3NyYy9iYXNlL2Z0YXBpLmMKaW5kZXggMzJkNmU5NS4uMmU2Zjk0MiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRhcGkuYworKysgYi9zcmMvYmFzZS9mdGFwaS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGFwaS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGFwaS5jCisgKgorICogICBUaGUgRnJlZVR5cGUgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5jIGIvc3JjL2Jhc2UvZnRiYXNlLmMKaW5kZXggYTFiZGJhZi4uNWY3ZDgxOCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmMKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmMKQEAgLTEsMzQgKzEsMzUgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0YmFzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0YmFzZS5jCisgKgorICogICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50IChib2R5IG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNkZWZpbmUgIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKIAotI2luY2x1ZGUgImJhc2VwaWMuYyIKICNpbmNsdWRlICJmdGFkdmFuYy5jIgogI2luY2x1ZGUgImZ0Y2FsYy5jIgorI2luY2x1ZGUgImZ0Y29sb3IuYyIKICNpbmNsdWRlICJmdGRiZ21lbS5jIgorI2luY2x1ZGUgImZ0Zm50Zm10LmMiCiAjaW5jbHVkZSAiZnRnbG9hZHIuYyIKICNpbmNsdWRlICJmdGhhc2guYyIKKyNpbmNsdWRlICJmdGxjZGZpbC5jIgogI2luY2x1ZGUgImZ0bWFjLmMiCiAjaW5jbHVkZSAiZnRvYmpzLmMiCiAjaW5jbHVkZSAiZnRvdXRsbi5jIgotI2luY2x1ZGUgImZ0cGljLmMiCiAjaW5jbHVkZSAiZnRwc3Byb3AuYyIKICNpbmNsdWRlICJmdHJmb3JrLmMiCiAjaW5jbHVkZSAiZnRzbmFtZXMuYyIKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5oIGIvc3JjL2Jhc2UvZnRiYXNlLmgKaW5kZXggN2U4Y2ZhZC4uZmViMGY0ZSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmgKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0YmFzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQcml2YXRlIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBgYmFzZScgbW9kdWxlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBzdXp1a2kgdG9zaGl5YS4gICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0YmFzZS5oCisgKgorICogICBQcml2YXRlIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBgYmFzZScgbW9kdWxlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZywgYW5kIHN1enVraSB0b3NoaXlhLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRCQVNFX0hfCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJib3guYyBiL3NyYy9iYXNlL2Z0YmJveC5jCmluZGV4IDE1MWU4NWMuLjg2Y2VmZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmJveC5jCisrKyBiL3NyYy9iYXNlL2Z0YmJveC5jCkBAIC0xLDI3ICsxLDI3IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGJib3guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgYmJveCBjb21wdXRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwotLyogIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGJib3guYworICoKKyAqICAgRnJlZVR5cGUgYmJveCBjb21wdXRhdGlvbiAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZAorICogbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBjb21wb25lbnQgaGFzIGEgX3NpbmdsZV8gcm9sZTogdG8gY29tcHV0ZSBleGFjdCBvdXRsaW5lIGJvdW5kaW5nICovCi0gIC8qIGJveGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGNvbXBvbmVudCBoYXMgYSBfc2luZ2xlXyByb2xlOiB0byBjb21wdXRlIGV4YWN0IG91dGxpbmUgYm91bmRpbmcKKyAgICogYm94ZXMuCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNjEsMjYgKzYxLDI4IEBACiAgICAgICAgICAgKCBwLT55IDwgYmJveC55TWluIHx8IHAtPnkgPiBiYm94LnlNYXggKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQkJveF9Nb3ZlX1RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgYG1vdmVfdG8nIGVtaXR0ZXIgZHVyaW5nICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlKCkuICBJdCBzaW1wbHkgcmVjb3JkcyB0aGUgZGVzdGluYXRpb24gcG9pbnQgICAqLwotICAvKiAgICBpbiBgdXNlci0+bGFzdCcuIFdlIGFsc28gdXBkYXRlIGJib3ggaW4gY2FzZSBjb250b3VyIHN0YXJ0cyB3aXRoICAgKi8KLSAgLyogICAgYW4gaW1wbGljaXQgYG9uJyBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG8gICA6OiBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgd2FsayBjb250ZXh0LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWx3YXlzIDAuICBOZWVkZWQgZm9yIHRoZSBpbnRlcmZhY2Ugb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEJCb3hfTW92ZV9UbworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgYG1vdmVfdG8nIGVtaXR0ZXIgZHVyaW5nCisgICAqICAgRlRfT3V0bGluZV9EZWNvbXBvc2UoKS4gIEl0IHNpbXBseSByZWNvcmRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludAorICAgKiAgIGluIGB1c2VyLT5sYXN0Jy4gV2UgYWxzbyB1cGRhdGUgYmJveCBpbiBjYXNlIGNvbnRvdXIgc3RhcnRzIHdpdGgKKyAgICogICBhbiBpbXBsaWNpdCBgb24nIHBvaW50LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgdG8gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgdXNlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHdhbGsgY29udGV4dC4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBBbHdheXMgMC4gIE5lZWRlZCBmb3IgdGhlIGludGVyZmFjZSBvbmx5LgorICAgKi8KICAgc3RhdGljIGludAogICBCQm94X01vdmVfVG8oIEZUX1ZlY3RvciogIHRvLAogICAgICAgICAgICAgICAgIFRCQm94X1JlYyogIHVzZXIgKQpAQCAtOTMsMjYgKzk1LDI4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJCb3hfTGluZV9UbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIGBsaW5lX3RvJyBlbWl0dGVyIGR1cmluZyAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0RlY29tcG9zZSgpLiAgSXQgc2ltcGx5IHJlY29yZHMgdGhlIGRlc3RpbmF0aW9uIHBvaW50ICAgKi8KLSAgLyogICAgaW4gYHVzZXItPmxhc3QnOyBubyBmdXJ0aGVyIGNvbXB1dGF0aW9ucyBhcmUgbmVjZXNzYXJ5IGJlY2F1c2UgICAgICovCi0gIC8qICAgIGJib3ggYWxyZWFkeSBjb250YWlucyBib3RoIGV4cGxpY2l0IGVuZHMgb2YgdGhlIGxpbmUgc2VnbWVudC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRvICAgOjogQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVzZXIgOjogQSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHdhbGsgY29udGV4dC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBCQm94X0xpbmVfVG8KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIGBsaW5lX3RvJyBlbWl0dGVyIGR1cmluZworICAgKiAgIEZUX091dGxpbmVfRGVjb21wb3NlKCkuICBJdCBzaW1wbHkgcmVjb3JkcyB0aGUgZGVzdGluYXRpb24gcG9pbnQKKyAgICogICBpbiBgdXNlci0+bGFzdCc7IG5vIGZ1cnRoZXIgY29tcHV0YXRpb25zIGFyZSBuZWNlc3NhcnkgYmVjYXVzZQorICAgKiAgIGJib3ggYWxyZWFkeSBjb250YWlucyBib3RoIGV4cGxpY2l0IGVuZHMgb2YgdGhlIGxpbmUgc2VnbWVudC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHRvIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIHVzZXIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgY3VycmVudCB3YWxrIGNvbnRleHQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgQWx3YXlzIDAuICBOZWVkZWQgZm9yIHRoZSBpbnRlcmZhY2Ugb25seS4KKyAgICovCiAgIHN0YXRpYyBpbnQKICAgQkJveF9MaW5lX1RvKCBGVF9WZWN0b3IqICB0bywKICAgICAgICAgICAgICAgICBUQkJveF9SZWMqICB1c2VyICkKQEAgLTEyMywyOCArMTI3LDMzIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJCb3hfQ29uaWNfQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmQgdGhlIGV4dHJlbWEgb2YgYSAxLWRpbWVuc2lvbmFsIGNvbmljIEJlemllciBjdXJ2ZSBhbmQgdXBkYXRlICAqLwotICAvKiAgICBhIGJvdW5kaW5nIHJhbmdlLiAgVGhpcyB2ZXJzaW9uIHVzZXMgZGlyZWN0IGNvbXB1dGF0aW9uLCBhcyBpdCAgICAgKi8KLSAgLyogICAgZG9lc24ndCBuZWVkIHNxdWFyZSByb290cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeTEgIDo6IFRoZSBzdGFydCBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5MiAgOjogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHkzICA6OiBUaGUgZW5kIGNvb3JkaW5hdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1pbiA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBtaW5pbXVtLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4IDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IG1heGltdW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEJCb3hfQ29uaWNfQ2hlY2sKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEZpbmQgdGhlIGV4dHJlbWEgb2YgYSAxLWRpbWVuc2lvbmFsIGNvbmljIEJlemllciBjdXJ2ZSBhbmQgdXBkYXRlCisgICAqICAgYSBib3VuZGluZyByYW5nZS4gIFRoaXMgdmVyc2lvbiB1c2VzIGRpcmVjdCBjb21wdXRhdGlvbiwgYXMgaXQKKyAgICogICBkb2Vzbid0IG5lZWQgc3F1YXJlIHJvb3RzLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgeTEgOjoKKyAgICogICAgIFRoZSBzdGFydCBjb29yZGluYXRlLgorICAgKgorICAgKiAgIHkyIDo6CisgICAqICAgICBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogICB5MyA6OgorICAgKiAgICAgVGhlIGVuZCBjb29yZGluYXRlLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgbWluIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBtaW5pbXVtLgorICAgKgorICAgKiAgIG1heCA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgbWF4aW11bS4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEJCb3hfQ29uaWNfQ2hlY2soIEZUX1BvcyAgIHkxLAogICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICB5MiwKQEAgLTE2OCwzMiArMTc3LDM1IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJCb3hfQ29uaWNfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIGBjb25pY190bycgZW1pdHRlciBkdXJpbmcgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9PdXRsaW5lX0RlY29tcG9zZSgpLiAgSXQgY2hlY2tzIGEgY29uaWMgQmV6aWVyIGN1cnZlIHdpdGggdGhlICAgKi8KLSAgLyogICAgY3VycmVudCBib3VuZGluZyBib3gsIGFuZCBjb21wdXRlcyBpdHMgZXh0cmVtYSBpZiBuZWNlc3NhcnkgdG8gICAgICovCi0gIC8qICAgIHVwZGF0ZSBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbnRyb2wgOjogQSBwb2ludGVyIHRvIGEgY29udHJvbCBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdG8gICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciAgICA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCB3YWxrIGNvbnRleHQuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWx3YXlzIDAuICBOZWVkZWQgZm9yIHRoZSBpbnRlcmZhY2Ugb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW4gdGhlIGNhc2Ugb2YgYSBub24tbW9ub3Rvbm91cyBhcmMsIHdlIGNvbXB1dGUgZGlyZWN0bHkgdGhlICAgICAgICovCi0gIC8qICAgIGV4dHJlbXVtIGNvb3JkaW5hdGVzLCBhcyBpdCBpcyBzdWZmaWNpZW50bHkgZmFzdC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBCQm94X0NvbmljX1RvCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBgY29uaWNfdG8nIGVtaXR0ZXIgZHVyaW5nCisgICAqICAgRlRfT3V0bGluZV9EZWNvbXBvc2UoKS4gIEl0IGNoZWNrcyBhIGNvbmljIEJlemllciBjdXJ2ZSB3aXRoIHRoZQorICAgKiAgIGN1cnJlbnQgYm91bmRpbmcgYm94LCBhbmQgY29tcHV0ZXMgaXRzIGV4dHJlbWEgaWYgbmVjZXNzYXJ5IHRvCisgICAqICAgdXBkYXRlIGl0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgY29udHJvbCA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIGEgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogICB0byA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3IuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICB1c2VyIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCB3YWxrIGNvbnRleHQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgQWx3YXlzIDAuICBOZWVkZWQgZm9yIHRoZSBpbnRlcmZhY2Ugb25seS4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgSW4gdGhlIGNhc2Ugb2YgYSBub24tbW9ub3Rvbm91cyBhcmMsIHdlIGNvbXB1dGUgZGlyZWN0bHkgdGhlCisgICAqICAgZXh0cmVtdW0gY29vcmRpbmF0ZXMsIGFzIGl0IGlzIHN1ZmZpY2llbnRseSBmYXN0LgorICAgKi8KICAgc3RhdGljIGludAogICBCQm94X0NvbmljX1RvKCBGVF9WZWN0b3IqICBjb250cm9sLAogICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICB0bywKQEAgLTIyMiwzMCArMjM0LDM2IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEJCb3hfQ3ViaWNfQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmQgdGhlIGV4dHJlbWEgb2YgYSAxLWRpbWVuc2lvbmFsIGN1YmljIEJlemllciBjdXJ2ZSBhbmQgICAgICAgICAqLwotICAvKiAgICB1cGRhdGUgYSBib3VuZGluZyByYW5nZS4gIFRoaXMgdmVyc2lvbiB1c2VzIGl0ZXJhdGl2ZSBzcGxpdHRpbmcgICAgKi8KLSAgLyogICAgYmVjYXVzZSBpdCBpcyBmYXN0ZXIgdGhhbiB0aGUgZXhhY3Qgc29sdXRpb24gd2l0aCBzcXVhcmUgcm9vdHMuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcDEgIDo6IFRoZSBzdGFydCBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwMiAgOjogVGhlIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHAzICA6OiBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcDQgIDo6IFRoZSBlbmQgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWluIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IG1pbmltdW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYXggOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgbWF4aW11bS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgQkJveF9DdWJpY19DaGVjaworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluZCB0aGUgZXh0cmVtYSBvZiBhIDEtZGltZW5zaW9uYWwgY3ViaWMgQmV6aWVyIGN1cnZlIGFuZAorICAgKiAgIHVwZGF0ZSBhIGJvdW5kaW5nIHJhbmdlLiAgVGhpcyB2ZXJzaW9uIHVzZXMgaXRlcmF0aXZlIHNwbGl0dGluZworICAgKiAgIGJlY2F1c2UgaXQgaXMgZmFzdGVyIHRoYW4gdGhlIGV4YWN0IHNvbHV0aW9uIHdpdGggc3F1YXJlIHJvb3RzLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgcDEgOjoKKyAgICogICAgIFRoZSBzdGFydCBjb29yZGluYXRlLgorICAgKgorICAgKiAgIHAyIDo6CisgICAqICAgICBUaGUgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogICBwMyA6OgorICAgKiAgICAgVGhlIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBjb250cm9sIHBvaW50LgorICAgKgorICAgKiAgIHA0IDo6CisgICAqICAgICBUaGUgZW5kIGNvb3JkaW5hdGUuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBtaW4gOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IG1pbmltdW0uCisgICAqCisgICAqICAgbWF4IDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBtYXhpbXVtLgorICAgKi8KICAgc3RhdGljIEZUX1BvcwogICBjdWJpY19wZWFrKCBGVF9Qb3MgIHExLAogICAgICAgICAgICAgICBGVF9Qb3MgIHEyLApAQCAtMzYxLDM0ICszNzksMzggQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQkJveF9DdWJpY19UbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgYGN1YmljX3RvJyBlbWl0dGVyIGR1cmluZyAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlKCkuICBJdCBjaGVja3MgYSBjdWJpYyBCZXppZXIgY3VydmUgd2l0aCB0aGUgICAqLwotICAvKiAgICBjdXJyZW50IGJvdW5kaW5nIGJveCwgYW5kIGNvbXB1dGVzIGl0cyBleHRyZW1hIGlmIG5lY2Vzc2FyeSB0byAgICAgKi8KLSAgLyogICAgdXBkYXRlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29udHJvbDEgOjogQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb250cm9sMiA6OiBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRvICAgICAgIDo6IEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHVzZXIgICAgIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHdhbGsgY29udGV4dC4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLW1vbm90b25vdXMgYXJjLCB3ZSBkb24ndCBjb21wdXRlIGRpcmVjdGx5ICAgICAqLwotICAvKiAgICBleHRyZW11bSBjb29yZGluYXRlcywgd2Ugc3ViZGl2aWRlIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgQkJveF9DdWJpY19UbworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgYGN1YmljX3RvJyBlbWl0dGVyIGR1cmluZworICAgKiAgIEZUX091dGxpbmVfRGVjb21wb3NlKCkuICBJdCBjaGVja3MgYSBjdWJpYyBCZXppZXIgY3VydmUgd2l0aCB0aGUKKyAgICogICBjdXJyZW50IGJvdW5kaW5nIGJveCwgYW5kIGNvbXB1dGVzIGl0cyBleHRyZW1hIGlmIG5lY2Vzc2FyeSB0bworICAgKiAgIHVwZGF0ZSBpdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGNvbnRyb2wxIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICAgY29udHJvbDIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICAgdG8gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gdmVjdG9yLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgdXNlciA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgd2FsayBjb250ZXh0LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEFsd2F5cyAwLiAgTmVlZGVkIGZvciB0aGUgaW50ZXJmYWNlIG9ubHkuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLW1vbm90b25vdXMgYXJjLCB3ZSBkb24ndCBjb21wdXRlIGRpcmVjdGx5CisgICAqICAgZXh0cmVtdW0gY29vcmRpbmF0ZXMsIHdlIHN1YmRpdmlkZSBpbnN0ZWFkLgorICAgKi8KICAgc3RhdGljIGludAogICBCQm94X0N1YmljX1RvKCBGVF9WZWN0b3IqICBjb250cm9sMSwKICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yKiAgY29udHJvbDIsCkBAIC00OTAsMTIgKzUxMiw2IEBACiAgICAgICBGVF9FcnJvciAgIGVycm9yOwogICAgICAgVEJCb3hfUmVjICB1c2VyOwogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICAgIEZUX091dGxpbmVfRnVuY3MgIGJib3hfaW50ZXJmYWNlOwotCi0KLSAgICAgIEluaXRfQ2xhc3NfYmJveF9pbnRlcmZhY2UoICZiYm94X2ludGVyZmFjZSApOwotI2VuZGlmCiAKICAgICAgIHVzZXIuYmJveCA9IGJib3g7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmRmLmMgYi9zcmMvYmFzZS9mdGJkZi5jCmluZGV4IGM0ZWE1MDIuLjhhMjdjODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmRmLmMKKysrIGIvc3JjL2Jhc2UvZnRiZGYuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRiZGYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIEJERi1zcGVjaWZpYyBzdHJpbmdzIChib2R5KS4gICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRiZGYuYworICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMgYi9zcmMvYmFzZS9mdGJpdG1hcC5jCmluZGV4IDkzZWZiMDkuLmRjMjhjNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMKKysrIGIvc3JjL2Jhc2UvZnRiaXRtYXAuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRiaXRtYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRiaXRtYXAuYworICoKKyAqICAgRnJlZVR5cGUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGJpdG1hcHMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI0LDggKzI0LDE4IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLworI3VuZGVmICBGVF9DT01QT05FTlQKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9iaXRtYXAKKworCiAgIHN0YXRpYwotICBjb25zdCBGVF9CaXRtYXAgIG51bGxfYml0bWFwID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGNvbnN0IEZUX0JpdG1hcCAgbnVsbF9iaXRtYXAgPSB7IDAsIDAsIDAsIE5VTEwsIDAsIDAsIDAsIE5VTEwgfTsKIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRiaXRtYXAuaCAqLwpAQCAtMjM3LDcgKzI0Nyw3IEBACiAgICAgICB1bnNpZ25lZCBjaGFyKiAgb3V0ID0gYnVmZmVyOwogCiAgICAgICB1bnNpZ25lZCBjaGFyKiAgbGltaXQgPSBiaXRtYXAtPmJ1ZmZlciArIHBpdGNoICogYml0bWFwLT5yb3dzOwotICAgICAgdW5zaWduZWQgaW50ICAgIGRlbHRhID0gbmV3X3BpdGNoIC0gcGl0Y2g7CisgICAgICB1bnNpZ25lZCBpbnQgICAgZGVsdGEgPSBuZXdfcGl0Y2ggLSBsZW47CiAKIAogICAgICAgRlRfTUVNX1pFUk8oIG91dCwgbmV3X3BpdGNoICogeXBpeGVscyApOwpAQCAtMjQ3LDggKzI1NywxMCBAQAogICAgICAgewogICAgICAgICBGVF9NRU1fQ09QWSggb3V0LCBpbiwgbGVuICk7CiAgICAgICAgIGluICArPSBwaXRjaDsKLSAgICAgICAgb3V0ICs9IHBpdGNoOworICAgICAgICBvdXQgKz0gbGVuOwogCisgICAgICAgIC8qIHdlIHVzZSBGVF9RQUxMT0NfTVVMVCwgd2hpY2ggZG9lc24ndCB6ZXJvIG91dCB0aGUgYnVmZmVyOyAgICAgICovCisgICAgICAgIC8qIGNvbnNlcXVlbnRseSwgd2UgaGF2ZSB0byBtYW51YWxseSB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzICovCiAgICAgICAgIEZUX01FTV9aRVJPKCBvdXQsIGRlbHRhICk7CiAgICAgICAgIG91dCArPSBkZWx0YTsKICAgICAgIH0KQEAgLTI2MSwxNCArMjczLDE0IEBACiAgICAgICB1bnNpZ25lZCBjaGFyKiAgb3V0ID0gYnVmZmVyOwogCiAgICAgICB1bnNpZ25lZCBjaGFyKiAgbGltaXQgPSBiaXRtYXAtPmJ1ZmZlciArIHBpdGNoICogYml0bWFwLT5yb3dzOwotICAgICAgdW5zaWduZWQgaW50ICAgIGRlbHRhID0gbmV3X3BpdGNoIC0gcGl0Y2g7CisgICAgICB1bnNpZ25lZCBpbnQgICAgZGVsdGEgPSBuZXdfcGl0Y2ggLSBsZW47CiAKIAogICAgICAgd2hpbGUgKCBpbiA8IGxpbWl0ICkKICAgICAgIHsKICAgICAgICAgRlRfTUVNX0NPUFkoIG91dCwgaW4sIGxlbiApOwogICAgICAgICBpbiAgKz0gcGl0Y2g7Ci0gICAgICAgIG91dCArPSBwaXRjaDsKKyAgICAgICAgb3V0ICs9IGxlbjsKIAogICAgICAgICBGVF9NRU1fWkVSTyggb3V0LCBkZWx0YSApOwogICAgICAgICBvdXQgKz0gZGVsdGE7CkBAIC03ODQsNiArNzk2LDM1MiBAQAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Yml0bWFwLmggKi8KIAogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0JpdG1hcF9CbGVuZCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CaXRtYXAqICBzb3VyY2VfLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciAgIHNvdXJjZV9vZmZzZXRfLAorICAgICAgICAgICAgICAgICAgIEZUX0JpdG1hcCogICAgICAgIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICAgICAgICphdGFyZ2V0X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBGVF9Db2xvciAgICAgICAgICBjb2xvciApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5OworCisgICAgRlRfQml0bWFwICAgICAgICAgc291cmNlX2JpdG1hcDsKKyAgICBjb25zdCBGVF9CaXRtYXAqICBzb3VyY2U7CisKKyAgICBGVF9WZWN0b3IgIHNvdXJjZV9vZmZzZXQ7CisgICAgRlRfVmVjdG9yICB0YXJnZXRfb2Zmc2V0OworICAgIEZUX1ZlY3RvciAgZnJhY19vZmZzZXQ7CisKKyAgICBGVF9Cb29sICBmcmVlX3NvdXJjZV9iaXRtYXAgICAgICAgICAgPSAwOworICAgIEZUX0Jvb2wgIGZyZWVfdGFyZ2V0X2JpdG1hcF9vbl9lcnJvciA9IDA7CisKKyAgICBGVF9Qb3MgIHNvdXJjZV9sbHgsIHNvdXJjZV9sbHksIHNvdXJjZV91cngsIHNvdXJjZV91cnk7CisgICAgRlRfUG9zICB0YXJnZXRfbGx4LCB0YXJnZXRfbGx5LCB0YXJnZXRfdXJ4LCB0YXJnZXRfdXJ5OworICAgIEZUX1BvcyAgZmluYWxfbGx4LCBmaW5hbF9sbHksIGZpbmFsX3VyeCwgZmluYWxfdXJ5OworCisgICAgdW5zaWduZWQgaW50ICBmaW5hbF9yb3dzLCBmaW5hbF93aWR0aDsKKyAgICBsb25nICAgICAgICAgIHgsIHk7CisKKworICAgIGlmICggIWxpYnJhcnkgfHwgIXRhcmdldCB8fCAhc291cmNlXyB8fCAhYXRhcmdldF9vZmZzZXQgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisKKyAgICBpZiAoICEoIHRhcmdldC0+cGl4ZWxfbW9kZSA9PSBGVF9QSVhFTF9NT0RFX05PTkUgICAgIHx8CisgICAgICAgICAgICAoIHRhcmdldC0+cGl4ZWxfbW9kZSA9PSBGVF9QSVhFTF9NT0RFX0JHUkEgJiYKKyAgICAgICAgICAgICAgdGFyZ2V0LT5idWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICApICkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIHNvdXJjZV8tPnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9OT05FICkKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgLyogbm90aGluZyB0byBkbyAqLworCisgICAgLyogcGl0Y2hlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2lnbiAqLworICAgIGlmICggdGFyZ2V0LT5waXhlbF9tb2RlID09IEZUX1BJWEVMX01PREVfQkdSQSAmJgorICAgICAgICAgKCBzb3VyY2VfLT5waXRjaCBeIHRhcmdldC0+cGl0Y2ggKSA8IDAgICApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGlmICggISggc291cmNlXy0+d2lkdGggJiYgc291cmNlXy0+cm93cyApICkKKyAgICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgLyogbm90aGluZyB0byBkbyAqLworCisgICAgLyogd2UgaXNvbGF0ZSBhIGZyYWN0aW9uYWwgc2hpZnQgb2YgYHNvdXJjZScsICAgICAgICAqLworICAgIC8qIHRvIGJlIGxlc3MgdGhhbiBvbmUgcGl4ZWwgYW5kIGFsd2F5cyBwb3NpdGl2ZTsgICAgKi8KKyAgICAvKiBgc291cmNlX29mZnNldCcgbm93IGhvbGRzIGZ1bGwtcGl4ZWwgc2hpZnQgdmFsdWVzICovCisgICAgc291cmNlX29mZnNldC54ID0gRlRfUElYX0ZMT09SKCBzb3VyY2Vfb2Zmc2V0Xy54ICk7CisgICAgZnJhY19vZmZzZXQueCAgID0gc291cmNlX29mZnNldF8ueCAtIHNvdXJjZV9vZmZzZXQueDsKKworICAgIHNvdXJjZV9vZmZzZXQueSA9IEZUX1BJWF9GTE9PUiggc291cmNlX29mZnNldF8ueSApOworICAgIGZyYWNfb2Zmc2V0LnkgICA9IHNvdXJjZV9vZmZzZXRfLnkgLSBzb3VyY2Vfb2Zmc2V0Lnk7CisKKyAgICAvKiBhc3N1cmUgaW50ZWdlciBwaXhlbCBvZmZzZXQgZm9yIHRhcmdldCBiaXRtYXAgKi8KKyAgICB0YXJnZXRfb2Zmc2V0LnggPSBGVF9QSVhfRkxPT1IoIGF0YXJnZXRfb2Zmc2V0LT54ICk7CisgICAgdGFyZ2V0X29mZnNldC55ID0gRlRfUElYX0ZMT09SKCBhdGFyZ2V0X29mZnNldC0+eSApOworCisgICAgLyogZ2V0IHNvdXJjZSBiaXRtYXAgZGltZW5zaW9ucyAqLworICAgIHNvdXJjZV9sbHggPSBzb3VyY2Vfb2Zmc2V0Lng7CisgICAgaWYgKCBGVF9MT05HX01JTiArIChGVF9Qb3MpKCBzb3VyY2VfLT5yb3dzIDw8IDYgKSArIDY0ID4gc291cmNlX29mZnNldC55ICkKKyAgICB7CisgICAgICBGVF9UUkFDRTUoKAorICAgICAgICAiRlRfQml0bWFwX0JsZW5kOiB5IGNvb3JkaW5hdGUgb3ZlcmZsb3cgaW4gc291cmNlIGJpdG1hcFxuIiApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKyAgICBzb3VyY2VfbGx5ID0gc291cmNlX29mZnNldC55IC0gKCBzb3VyY2VfLT5yb3dzIDw8IDYgKTsKKworICAgIGlmICggRlRfTE9OR19NQVggLSAoRlRfUG9zKSggc291cmNlXy0+d2lkdGggPDwgNiApIC0gNjQgPCBzb3VyY2VfbGx4ICkKKyAgICB7CisgICAgICBGVF9UUkFDRTUoKAorICAgICAgICAiRlRfQml0bWFwX0JsZW5kOiB4IGNvb3JkaW5hdGUgb3ZlcmZsb3cgaW4gc291cmNlIGJpdG1hcFxuIiApKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KKyAgICBzb3VyY2VfdXJ4ID0gc291cmNlX2xseCArICggc291cmNlXy0+d2lkdGggPDwgNiApOworICAgIHNvdXJjZV91cnkgPSBzb3VyY2Vfb2Zmc2V0Lnk7CisKKyAgICAvKiBnZXQgdGFyZ2V0IGJpdG1hcCBkaW1lbnNpb25zICovCisgICAgaWYgKCB0YXJnZXQtPndpZHRoICYmIHRhcmdldC0+cm93cyApCisgICAgeworICAgICAgdGFyZ2V0X2xseCA9IHRhcmdldF9vZmZzZXQueDsKKyAgICAgIGlmICggRlRfTE9OR19NSU4gKyAoRlRfUG9zKSggdGFyZ2V0LT5yb3dzIDw8IDYgKSA+IHRhcmdldF9vZmZzZXQueSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoCisgICAgICAgICAgIkZUX0JpdG1hcF9CbGVuZDogeSBjb29yZGluYXRlIG92ZXJmbG93IGluIHRhcmdldCBiaXRtYXBcbiIgKSk7CisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgfQorICAgICAgdGFyZ2V0X2xseSA9IHRhcmdldF9vZmZzZXQueSAtICggdGFyZ2V0LT5yb3dzIDw8IDYgKTsKKworICAgICAgaWYgKCBGVF9MT05HX01BWCAtIChGVF9Qb3MpKCB0YXJnZXQtPndpZHRoIDw8IDYgKSA8IHRhcmdldF9sbHggKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKAorICAgICAgICAgICJGVF9CaXRtYXBfQmxlbmQ6IHggY29vcmRpbmF0ZSBvdmVyZmxvdyBpbiB0YXJnZXQgYml0bWFwXG4iICkpOworICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICAgIHRhcmdldF91cnggPSB0YXJnZXRfbGx4ICsgKCB0YXJnZXQtPndpZHRoIDw8IDYgKTsKKyAgICAgIHRhcmdldF91cnkgPSB0YXJnZXRfb2Zmc2V0Lnk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICB0YXJnZXRfbGx4ID0gRlRfTE9OR19NQVg7CisgICAgICB0YXJnZXRfbGx5ID0gRlRfTE9OR19NQVg7CisgICAgICB0YXJnZXRfdXJ4ID0gRlRfTE9OR19NSU47CisgICAgICB0YXJnZXRfdXJ5ID0gRlRfTE9OR19NSU47CisgICAgfQorCisgICAgLyogbW92ZSB1cHBlciByaWdodCBjb3JuZXIgdXAgYW5kIHRvIHRoZSByaWdodCAqLworICAgIC8qIGlmIHdlIGhhdmUgYSBmcmFjdGlvbmFsIG9mZnNldCAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIHNvdXJjZV91cnggPj0gdGFyZ2V0X3VyeCAmJiBmcmFjX29mZnNldC54ICkKKyAgICAgIHNvdXJjZV91cnggKz0gNjQ7CisgICAgaWYgKCBzb3VyY2VfdXJ5ID49IHRhcmdldF91cnkgJiYgZnJhY19vZmZzZXQueSApCisgICAgICBzb3VyY2VfdXJ5ICs9IDY0OworCisgICAgLyogY29tcHV0ZSBmaW5hbCBiaXRtYXAgZGltZW5zaW9ucyAqLworICAgIGZpbmFsX2xseCA9IEZUX01JTiggc291cmNlX2xseCwgdGFyZ2V0X2xseCApOworICAgIGZpbmFsX2xseSA9IEZUX01JTiggc291cmNlX2xseSwgdGFyZ2V0X2xseSApOworICAgIGZpbmFsX3VyeCA9IEZUX01BWCggc291cmNlX3VyeCwgdGFyZ2V0X3VyeCApOworICAgIGZpbmFsX3VyeSA9IEZUX01BWCggc291cmNlX3VyeSwgdGFyZ2V0X3VyeSApOworCisgICAgZmluYWxfd2lkdGggPSAoIGZpbmFsX3VyeCAtIGZpbmFsX2xseCApID4+IDY7CisgICAgZmluYWxfcm93cyAgPSAoIGZpbmFsX3VyeSAtIGZpbmFsX2xseSApID4+IDY7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIEZUX1RSQUNFNSgoICJGVF9CaXRtYXBfQmxlbmQ6XG4iCisgICAgICAgICAgICAgICAgIiAgc291cmNlIGJpdG1hcDogKCVkLCAlZCkgLS0gKCVkLCAlZCk7ICVkIHggJWRcbiIsCisgICAgICBzb3VyY2VfbGx4IC8gNjQsIHNvdXJjZV9sbHkgLyA2NCwKKyAgICAgIHNvdXJjZV91cnggLyA2NCwgc291cmNlX3VyeSAvIDY0LAorICAgICAgc291cmNlXy0+d2lkdGgsIHNvdXJjZV8tPnJvd3MgKSk7CisKKyAgICBpZiAoIGZyYWNfb2Zmc2V0LnggfHwgZnJhY19vZmZzZXQueSApCisgICAgICBGVF9UUkFDRTUoKCAiICAgIGZyYWN0aW9uYWwgb2Zmc2V0OiAoJWQvNjQsICVkLzY0KVxuIiwKKyAgICAgICAgICAgICAgICAgIGZyYWNfb2Zmc2V0LngsIGZyYWNfb2Zmc2V0LnkgKSk7CisKKyAgICBpZiAoIHRhcmdldC0+d2lkdGggJiYgdGFyZ2V0LT5yb3dzICkKKyAgICAgIEZUX1RSQUNFNSgoICIgIHRhcmdldCBiaXRtYXA6ICglZCwgJWQpIC0tICglZCwgJWQpOyAlZCB4ICVkXG4iLAorICAgICAgICB0YXJnZXRfbGx4IC8gNjQsIHRhcmdldF9sbHkgLyA2NCwKKyAgICAgICAgdGFyZ2V0X3VyeCAvIDY0LCB0YXJnZXRfdXJ5IC8gNjQsCisgICAgICAgIHRhcmdldC0+d2lkdGgsIHRhcmdldC0+cm93cyApKTsKKyAgICBlbHNlCisgICAgICBGVF9UUkFDRTUoKCAiICB0YXJnZXQgYml0bWFwOiBlbXB0eVxuIiApKTsKKworICAgIEZUX1RSQUNFNSgoICIgIGZpbmFsIGJpdG1hcDogKCVkLCAlZCkgLS0gKCVkLCAlZCk7ICVkIHggJWRcbiIsCisgICAgICBmaW5hbF9sbHggLyA2NCwgZmluYWxfbGx5IC8gNjQsCisgICAgICBmaW5hbF91cnggLyA2NCwgZmluYWxfdXJ5IC8gNjQsCisgICAgICBmaW5hbF93aWR0aCwgZmluYWxfcm93cyApKTsKKyNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLworCisgICAgLyogZm9yIGJsZW5kaW5nLCBzZXQgb2Zmc2V0IHZlY3RvciBvZiBmaW5hbCBiaXRtYXAgKi8KKyAgICAvKiB0ZW1wb3JhcmlseSB0byAoMCwwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNvdXJjZV9sbHggLT0gZmluYWxfbGx4OworICAgIHNvdXJjZV9sbHkgLT0gZmluYWxfbGx5OworCisgICAgaWYgKCB0YXJnZXQtPndpZHRoICYmIHRhcmdldC0+cm93cyApCisgICAgeworICAgICAgdGFyZ2V0X2xseCAtPSBmaW5hbF9sbHg7CisgICAgICB0YXJnZXRfbGx5IC09IGZpbmFsX2xseTsKKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGFyZ2V0IGJpdG1hcCAqLworICAgIGlmICggdGFyZ2V0LT5waXhlbF9tb2RlID09IEZUX1BJWEVMX01PREVfTk9ORSApCisgICAgeworICAgICAgLyogY3JlYXRlIG5ldyBlbXB0eSBiaXRtYXAgKi8KKyAgICAgIHRhcmdldC0+d2lkdGggICAgICA9IGZpbmFsX3dpZHRoOworICAgICAgdGFyZ2V0LT5yb3dzICAgICAgID0gZmluYWxfcm93czsKKyAgICAgIHRhcmdldC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfQkdSQTsKKyAgICAgIHRhcmdldC0+cGl0Y2ggICAgICA9IChpbnQpZmluYWxfd2lkdGggKiA0OworICAgICAgdGFyZ2V0LT5udW1fZ3JheXMgID0gMjU2OworCisgICAgICBpZiAoIEZUX0xPTkdfTUFYIC8gdGFyZ2V0LT5waXRjaCA8IChpbnQpdGFyZ2V0LT5yb3dzICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U1KCggIkZUX0JsZW5kX0JpdG1hcDogdGFyZ2V0IGJpdG1hcCB0b28gbGFyZ2UgKCVkIHggJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgZmluYWxfd2lkdGgsIGZpbmFsX3Jvd3MgKSk7CisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgfQorCisgICAgICBpZiAoIEZUX0FMTE9DKCB0YXJnZXQtPmJ1ZmZlciwgdGFyZ2V0LT5waXRjaCAqIChpbnQpdGFyZ2V0LT5yb3dzICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgIGZyZWVfdGFyZ2V0X2JpdG1hcF9vbl9lcnJvciA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKCB0YXJnZXQtPndpZHRoICE9IGZpbmFsX3dpZHRoIHx8CisgICAgICAgICAgICAgIHRhcmdldC0+cm93cyAgIT0gZmluYWxfcm93cyAgKQorICAgIHsKKyAgICAgIC8qIGFkanVzdCBvbGQgYml0bWFwIHRvIGVubGFyZ2VkIHNpemUgKi8KKyAgICAgIGludCAgcGl0Y2gsIG5ld19waXRjaDsKKworICAgICAgdW5zaWduZWQgY2hhciogIGJ1ZmZlciA9IE5VTEw7CisKKworICAgICAgcGl0Y2ggPSB0YXJnZXQtPnBpdGNoOworICAgICAgaWYgKCBwaXRjaCA8IDAgKQorICAgICAgICBwaXRjaCA9IC1waXRjaDsKKworICAgICAgbmV3X3BpdGNoID0gKGludClmaW5hbF93aWR0aCAqIDQ7CisKKyAgICAgIGlmICggRlRfTE9OR19NQVggLyBuZXdfcGl0Y2ggPCAoaW50KWZpbmFsX3Jvd3MgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTUoKCAiRlRfQmxlbmRfQml0bWFwOiB0YXJnZXQgYml0bWFwIHRvbyBsYXJnZSAoJWQgeCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICBmaW5hbF93aWR0aCwgZmluYWxfcm93cyApKTsKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICB9CisKKyAgICAgIC8qIFRPRE86IHByb3ZpZGUgYW4gaW4tYnVmZmVyIHNvbHV0aW9uIGZvciBsYXJnZSBiaXRtYXBzICovCisgICAgICAvKiAgICAgICB0byBhdm9pZCBhbGxvY2F0aW9uIG9mIGEgbmV3IGJ1ZmZlciAgICAgICAgICAgICAqLworICAgICAgaWYgKCBGVF9BTExPQyggYnVmZmVyLCBuZXdfcGl0Y2ggKiAoaW50KWZpbmFsX3Jvd3MgKSApCisgICAgICAgIGdvdG8gRXJyb3I7CisKKyAgICAgIC8qIGNvcHkgZGF0YSB0byBuZXcgYnVmZmVyICovCisgICAgICB4ID0gdGFyZ2V0X2xseCA+PiA2OworICAgICAgeSA9IHRhcmdldF9sbHkgPj4gNjsKKworICAgICAgLyogdGhlIGJpdG1hcCBmbG93IGlzIGZyb20gdG9wIHRvIGJvdHRvbSwgKi8KKyAgICAgIC8qIGJ1dCB5IGlzIG1lYXN1cmVkIGZyb20gYm90dG9tIHRvIHRvcCAgICovCisgICAgICBpZiAoIHRhcmdldC0+cGl0Y2ggPCAwICkKKyAgICAgIHsKKyAgICAgICAgLyogWFhYICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqICBwID0KKyAgICAgICAgICB0YXJnZXQtPmJ1ZmZlcjsKKyAgICAgICAgdW5zaWduZWQgY2hhciogIHEgPQorICAgICAgICAgIGJ1ZmZlciArCisgICAgICAgICAgKCBmaW5hbF9yb3dzIC0geSAtIHRhcmdldC0+cm93cyApICogbmV3X3BpdGNoICsKKyAgICAgICAgICB4ICogNDsKKyAgICAgICAgdW5zaWduZWQgY2hhciogIGxpbWl0X3AgPQorICAgICAgICAgIHAgKyBwaXRjaCAqIChpbnQpdGFyZ2V0LT5yb3dzOworCisKKyAgICAgICAgd2hpbGUgKCBwIDwgbGltaXRfcCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9NRU1fQ09QWSggcSwgcCwgcGl0Y2ggKTsKKworICAgICAgICAgIHAgKz0gcGl0Y2g7CisgICAgICAgICAgcSArPSBuZXdfcGl0Y2g7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgRlRfRlJFRSggdGFyZ2V0LT5idWZmZXIgKTsKKworICAgICAgdGFyZ2V0LT53aWR0aCA9IGZpbmFsX3dpZHRoOworICAgICAgdGFyZ2V0LT5yb3dzICA9IGZpbmFsX3Jvd3M7CisKKyAgICAgIGlmICggdGFyZ2V0LT5waXRjaCA8IDAgKQorICAgICAgICB0YXJnZXQtPnBpdGNoID0gLW5ld19waXRjaDsKKyAgICAgIGVsc2UKKyAgICAgICAgdGFyZ2V0LT5waXRjaCA9IG5ld19waXRjaDsKKworICAgICAgdGFyZ2V0LT5idWZmZXIgPSBidWZmZXI7CisgICAgfQorCisgICAgLyogYWRqdXN0IHNvdXJjZSBiaXRtYXAgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKCBzb3VyY2VfLT5waXhlbF9tb2RlICE9IEZUX1BJWEVMX01PREVfR1JBWSApCisgICAgeworICAgICAgRlRfQml0bWFwX0luaXQoICZzb3VyY2VfYml0bWFwICk7CisgICAgICBlcnJvciA9IEZUX0JpdG1hcF9Db252ZXJ0KCBsaWJyYXJ5LCBzb3VyY2VfLCAmc291cmNlX2JpdG1hcCwgMSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXJyb3I7CisKKyAgICAgIHNvdXJjZSAgICAgICAgICAgICA9ICZzb3VyY2VfYml0bWFwOworICAgICAgZnJlZV9zb3VyY2VfYml0bWFwID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgc291cmNlID0gc291cmNlXzsKKworICAgIC8qIGRvIGJsZW5kaW5nOyB0aGUgY29kZSBiZWxvdyByZXR1cm5zIHByZS1tdWx0aXBsaWVkIGNoYW5uZWxzLCAqLworICAgIC8qIHNpbWlsYXIgdG8gd2hhdCBGcmVlVHlwZSBnZXRzIGZyb20gYENCRFQnIHRhYmxlcyAgICAgICAgICAgICAqLworICAgIHggPSBzb3VyY2VfbGx4ID4+IDY7CisgICAgeSA9IHNvdXJjZV9sbHkgPj4gNjsKKworICAgIC8qIFhYWCBoYW5kbGUgYGZyYWNfb2Zmc2V0JyAqLworCisgICAgLyogdGhlIGJpdG1hcCBmbG93IGlzIGZyb20gdG9wIHRvIGJvdHRvbSwgKi8KKyAgICAvKiBidXQgeSBpcyBtZWFzdXJlZCBmcm9tIGJvdHRvbSB0byB0b3AgICAqLworICAgIGlmICggdGFyZ2V0LT5waXRjaCA8IDAgKQorICAgIHsKKyAgICAgIC8qIFhYWCAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciogIHAgPQorICAgICAgICBzb3VyY2UtPmJ1ZmZlcjsKKyAgICAgIHVuc2lnbmVkIGNoYXIqICBxID0KKyAgICAgICAgdGFyZ2V0LT5idWZmZXIgKworICAgICAgICAoIHRhcmdldC0+cm93cyAtIHkgLSBzb3VyY2UtPnJvd3MgKSAqIHRhcmdldC0+cGl0Y2ggKworICAgICAgICB4ICogNDsKKyAgICAgIHVuc2lnbmVkIGNoYXIqICBsaW1pdF9wID0KKyAgICAgICAgcCArIHNvdXJjZS0+cGl0Y2ggKiAoaW50KXNvdXJjZS0+cm93czsKKworCisgICAgICB3aGlsZSAoIHAgPCBsaW1pdF9wICkKKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciogIHIgICAgICAgPSBwOworICAgICAgICB1bnNpZ25lZCBjaGFyKiAgcyAgICAgICA9IHE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqICBsaW1pdF9yID0gciArIHNvdXJjZS0+d2lkdGg7CisKKworICAgICAgICB3aGlsZSAoIHIgPCBsaW1pdF9yICkKKyAgICAgICAgeworICAgICAgICAgIGludCAgYWEgPSAqcisrOworICAgICAgICAgIGludCAgZmEgPSBjb2xvci5hbHBoYSAqIGFhIC8gMjU1OworCisgICAgICAgICAgaW50ICBmYiA9IGNvbG9yLmJsdWUgKiBmYSAvIDI1NTsKKyAgICAgICAgICBpbnQgIGZnID0gY29sb3IuZ3JlZW4gKiBmYSAvIDI1NTsKKyAgICAgICAgICBpbnQgIGZyID0gY29sb3IucmVkICogZmEgLyAyNTU7CisKKyAgICAgICAgICBpbnQgIGJhMiA9IDI1NSAtIGZhOworCisgICAgICAgICAgaW50ICBiYiA9IHNbMF07CisgICAgICAgICAgaW50ICBiZyA9IHNbMV07CisgICAgICAgICAgaW50ICBiciA9IHNbMl07CisgICAgICAgICAgaW50ICBiYSA9IHNbM107CisKKworICAgICAgICAgICpzKysgPSAodW5zaWduZWQgY2hhcikoIGJiICogYmEyIC8gMjU1ICsgZmIgKTsKKyAgICAgICAgICAqcysrID0gKHVuc2lnbmVkIGNoYXIpKCBiZyAqIGJhMiAvIDI1NSArIGZnICk7CisgICAgICAgICAgKnMrKyA9ICh1bnNpZ25lZCBjaGFyKSggYnIgKiBiYTIgLyAyNTUgKyBmciApOworICAgICAgICAgICpzKysgPSAodW5zaWduZWQgY2hhcikoIGJhICogYmEyIC8gMjU1ICsgZmEgKTsKKyAgICAgICAgfQorCisgICAgICAgIHAgKz0gc291cmNlLT5waXRjaDsKKyAgICAgICAgcSArPSB0YXJnZXQtPnBpdGNoOworICAgICAgfQorICAgIH0KKworICAgIGF0YXJnZXRfb2Zmc2V0LT54ID0gZmluYWxfbGx4OworICAgIGF0YXJnZXRfb2Zmc2V0LT55ID0gZmluYWxfbGx5ICsgKCBmaW5hbF9yb3dzIDw8IDYgKTsKKworICBFcnJvcjoKKyAgICBpZiAoIGVycm9yICYmIGZyZWVfdGFyZ2V0X2JpdG1hcF9vbl9lcnJvciApCisgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgdGFyZ2V0ICk7CisKKyAgICBpZiAoIGZyZWVfc291cmNlX2JpdG1hcCApCisgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgJnNvdXJjZV9iaXRtYXAgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGJpdG1hcC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQogICBGVF9HbHlwaFNsb3RfT3duX0JpdG1hcCggRlRfR2x5cGhTbG90ICBzbG90ICkKICAgewogICAgIGlmICggc2xvdCAmJiBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCAgICYmCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGNhbGMuYyBiL3NyYy9iYXNlL2Z0Y2FsYy5jCmluZGV4IGY0ZmY0NWYuLmM5NmQ1ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Y2FsYy5jCisrKyBiL3NyYy9iYXNlL2Z0Y2FsYy5jCkBAIC0xLDM1ICsxLDM1IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNhbGMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNhbGMuYworICoKKyAqICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN1cHBvcnQgZm9yIDEtY29tcGxlbWVudCBhcml0aG1ldGljIGhhcyBiZWVuIHRvdGFsbHkgZHJvcHBlZCBpbiB0aGlzICAqLwotICAvKiByZWxlYXNlLiAgWW91IGNhbiBzdGlsbCB3cml0ZSB5b3VyIG93biBjb2RlIGlmIHlvdSBuZWVkIGl0LiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU3VwcG9ydCBmb3IgMS1jb21wbGVtZW50IGFyaXRobWV0aWMgaGFzIGJlZW4gdG90YWxseSBkcm9wcGVkIGluIHRoaXMKKyAgICogcmVsZWFzZS4gIFlvdSBjYW4gc3RpbGwgd3JpdGUgeW91ciBvd24gY29kZSBpZiB5b3UgbmVlZCBpdC4KKyAgICoKKyAgICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJbXBsZW1lbnRpbmcgYmFzaWMgY29tcHV0YXRpb24gcm91dGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX011bERpdigpLCBGVF9NdWxGaXgoKSwgRlRfRGl2Rml4KCksIEZUX1JvdW5kRml4KCksIEZUX0NlaWxGaXgoKSwgICAqLwotICAvKiBhbmQgRlRfRmxvb3JGaXgoKSBhcmUgZGVjbGFyZWQgaW4gZnJlZXR5cGUuaC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSW1wbGVtZW50aW5nIGJhc2ljIGNvbXB1dGF0aW9uIHJvdXRpbmVzLgorICAgKgorICAgKiBGVF9NdWxEaXYoKSwgRlRfTXVsRml4KCksIEZUX0RpdkZpeCgpLCBGVF9Sb3VuZEZpeCgpLCBGVF9DZWlsRml4KCksCisgICAqIGFuZCBGVF9GbG9vckZpeCgpIGFyZSBkZWNsYXJlZCBpbiBmcmVldHlwZS5oLgorICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTU4LDEyICs1OCwxMiBAQAogI2VuZGlmIC8qICFGVF9MT05HNjQgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jYWxjCiAKQEAgLTUxNiwxMCArNTE2LDEwIEBACiAjZWxpZiAwCiAKICAgICAvKgotICAgICAqICBUaGlzIGNvZGUgaXMgbm9ucG9ydGFibGUuICBTZWUgY29tbWVudCBiZWxvdy4KKyAgICAgKiBUaGlzIGNvZGUgaXMgbm9ucG9ydGFibGUuICBTZWUgY29tbWVudCBiZWxvdy4KICAgICAgKgotICAgICAqICBIb3dldmVyLCBvbiBhIHBsYXRmb3JtIHdoZXJlIHJpZ2h0LXNoaWZ0IG9mIGEgc2lnbmVkIHF1YW50aXR5IGZpbGxzCi0gICAgICogIHRoZSBsZWZ0bW9zdCBiaXRzIGJ5IGNvcHlpbmcgdGhlIHNpZ24gYml0LCBpdCBtaWdodCBiZSBmYXN0ZXIuCisgICAgICogSG93ZXZlciwgb24gYSBwbGF0Zm9ybSB3aGVyZSByaWdodC1zaGlmdCBvZiBhIHNpZ25lZCBxdWFudGl0eSBmaWxscworICAgICAqIHRoZSBsZWZ0bW9zdCBiaXRzIGJ5IGNvcHlpbmcgdGhlIHNpZ24gYml0LCBpdCBtaWdodCBiZSBmYXN0ZXIuCiAgICAgICovCiAKICAgICBGVF9Mb25nICAgIHNhLCBzYjsKQEAgLTUyNywyMiArNTI3LDIyIEBACiAKIAogICAgIC8qCi0gICAgICogIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IG9mIGNvbnZlcnRpbmcgYSBzaWduZWQgbnVtYmVyIGBhJyBpbnRvIGl0cwotICAgICAqICBhYnNvbHV0ZSB2YWx1ZSAoc3RvcmVkIGJhY2sgaW50byBgYScpIGFuZCBpdHMgc2lnbi4gIFRoZSBzaWduIGlzCi0gICAgICogIHN0b3JlZCBpbiBgc2EnOyAwIG1lYW5zIGBhJyB3YXMgcG9zaXRpdmUgb3IgemVybywgYW5kIC0xIG1lYW5zIGBhJwotICAgICAqICB3YXMgbmVnYXRpdmUuICAoU2ltaWxhcmx5IGZvciBgYicgYW5kIGBzYicpLgorICAgICAqIFRoaXMgaXMgYSBjbGV2ZXIgd2F5IG9mIGNvbnZlcnRpbmcgYSBzaWduZWQgbnVtYmVyIGBhJyBpbnRvIGl0cworICAgICAqIGFic29sdXRlIHZhbHVlIChzdG9yZWQgYmFjayBpbnRvIGBhJykgYW5kIGl0cyBzaWduLiAgVGhlIHNpZ24gaXMKKyAgICAgKiBzdG9yZWQgaW4gYHNhJzsgMCBtZWFucyBgYScgd2FzIHBvc2l0aXZlIG9yIHplcm8sIGFuZCAtMSBtZWFucyBgYScKKyAgICAgKiB3YXMgbmVnYXRpdmUuICAoU2ltaWxhcmx5IGZvciBgYicgYW5kIGBzYicpLgogICAgICAqCi0gICAgICogIFVuZm9ydHVuYXRlbHksIGl0IGRvZXNuJ3Qgd29yayAoYXQgbGVhc3Qgbm90IHBvcnRhYmx5KS4KKyAgICAgKiBVbmZvcnR1bmF0ZWx5LCBpdCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG5vdCBwb3J0YWJseSkuCiAgICAgICoKLSAgICAgKiAgSXQgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCByaWdodC1zaGlmdCBvbiBhIG5lZ2F0aXZlIHNpZ25lZCB2YWx1ZQotICAgICAqICBmaWxscyB0aGUgbGVmdG1vc3QgYml0cyBieSBjb3B5aW5nIHRoZSBzaWduIGJpdC4gIFRoaXMgaXMgd3JvbmcuCi0gICAgICogIEFjY29yZGluZyB0byBLJlIgMm5kIGVkLCBzZWN0aW9uIGBBNy44IFNoaWZ0IE9wZXJhdG9ycycgb24gcGFnZSAyMDYsCi0gICAgICogIHRoZSByZXN1bHQgb2YgcmlnaHQtc2hpZnQgb2YgYSBuZWdhdGl2ZSBzaWduZWQgdmFsdWUgaXMKLSAgICAgKiAgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gIEF0IGxlYXN0IG9uZSBpbXBsZW1lbnRhdGlvbiBmaWxscyB0aGUKLSAgICAgKiAgbGVmdG1vc3QgYml0cyB3aXRoIDBzIChpLmUuLCBpdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGFuIHVuc2lnbmVkCi0gICAgICogIHJpZ2h0IHNoaWZ0KS4gIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBhJyBpcyBuZWdhdGl2ZSwgYHNhJyBlbmRzIHVwCi0gICAgICogIHdpdGggdGhlIHZhbHVlIDEgcmF0aGVyIHRoYW4gLTEuICBBZnRlciB0aGF0LCBldmVyeXRoaW5nIGVsc2UgZ29lcwotICAgICAqICB3cm9uZy4KKyAgICAgKiBJdCBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHJpZ2h0LXNoaWZ0IG9uIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlCisgICAgICogZmlsbHMgdGhlIGxlZnRtb3N0IGJpdHMgYnkgY29weWluZyB0aGUgc2lnbiBiaXQuICBUaGlzIGlzIHdyb25nLgorICAgICAqIEFjY29yZGluZyB0byBLJlIgMm5kIGVkLCBzZWN0aW9uIGBBNy44IFNoaWZ0IE9wZXJhdG9ycycgb24gcGFnZSAyMDYsCisgICAgICogdGhlIHJlc3VsdCBvZiByaWdodC1zaGlmdCBvZiBhIG5lZ2F0aXZlIHNpZ25lZCB2YWx1ZSBpcworICAgICAqIGltcGxlbWVudGF0aW9uLWRlZmluZWQuICBBdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gZmlsbHMgdGhlCisgICAgICogbGVmdG1vc3QgYml0cyB3aXRoIDBzIChpLmUuLCBpdCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGFuIHVuc2lnbmVkCisgICAgICogcmlnaHQgc2hpZnQpLiAgVGhpcyBtZWFucyB0aGF0IHdoZW4gYGEnIGlzIG5lZ2F0aXZlLCBgc2EnIGVuZHMgdXAKKyAgICAgKiB3aXRoIHRoZSB2YWx1ZSAxIHJhdGhlciB0aGFuIC0xLiAgQWZ0ZXIgdGhhdCwgZXZlcnl0aGluZyBlbHNlIGdvZXMKKyAgICAgKiB3cm9uZy4KICAgICAgKi8KICAgICBzYSA9ICggYV8gPj4gKCBzaXplb2YgKCBhXyApICogOCAtIDEgKSApOwogICAgIGEgID0gKCBhXyBeIHNhICkgLSBzYTsKQEAgLTc0Nyw2ICs3NDcsNzIgQEAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FsYy5oICovCiAKKyAgRlRfQkFTRV9ERUYoIEZUX0Jvb2wgKQorICBGVF9NYXRyaXhfQ2hlY2soIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCApCisgIHsKKyAgICBGVF9NYXRyaXggIG07CisgICAgRlRfRml4ZWQgICB2YWxbNF07CisgICAgRlRfRml4ZWQgICBub256ZXJvX21pbnZhbCwgbWF4dmFsOworICAgIEZUX0ZpeGVkICAgdGVtcDEsIHRlbXAyOworICAgIEZUX1VJbnQgICAgaTsKKworCisgICAgaWYgKCAhbWF0cml4ICkKKyAgICAgIHJldHVybiAwOworCisgICAgdmFsWzBdID0gRlRfQUJTKCBtYXRyaXgtPnh4ICk7CisgICAgdmFsWzFdID0gRlRfQUJTKCBtYXRyaXgtPnh5ICk7CisgICAgdmFsWzJdID0gRlRfQUJTKCBtYXRyaXgtPnl4ICk7CisgICAgdmFsWzNdID0gRlRfQUJTKCBtYXRyaXgtPnl5ICk7CisKKyAgICAvKgorICAgICAqIFRvIGF2b2lkIG92ZXJmbG93LCB3ZSBlbnN1cmUgdGhhdCBlYWNoIHZhbHVlIGlzIG5vdCBsYXJnZXIgdGhhbgorICAgICAqCisgICAgICogICBpbnQoc3FydCgyXjMxIC8gNCkpID0gMjMxNzAgIDsKKyAgICAgKgorICAgICAqIHdlIGFsc28gY2hlY2sgdGhhdCBubyB2YWx1ZSBiZWNvbWVzIHplcm8gaWYgd2UgaGF2ZSB0byBzY2FsZS4KKyAgICAgKi8KKworICAgIG1heHZhbCAgICAgICAgID0gMDsKKyAgICBub256ZXJvX21pbnZhbCA9IEZUX0xPTkdfTUFYOworCisgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKQorICAgIHsKKyAgICAgIGlmICggdmFsW2ldID4gbWF4dmFsICkKKyAgICAgICAgbWF4dmFsID0gdmFsW2ldOworICAgICAgaWYgKCB2YWxbaV0gJiYgdmFsW2ldIDwgbm9uemVyb19taW52YWwgKQorICAgICAgICBub256ZXJvX21pbnZhbCA9IHZhbFtpXTsKKyAgICB9CisKKyAgICBpZiAoIG1heHZhbCA+IDIzMTcwICkKKyAgICB7CisgICAgICBGVF9GaXhlZCAgc2NhbGUgPSBGVF9EaXZGaXgoIG1heHZhbCwgMjMxNzAgKTsKKworCisgICAgICBpZiAoICFGVF9EaXZGaXgoIG5vbnplcm9fbWludmFsLCBzY2FsZSApICkKKyAgICAgICAgcmV0dXJuIDA7ICAgIC8qIHZhbHVlIHJhbmdlIHRvbyBsYXJnZSAqLworCisgICAgICBtLnh4ID0gRlRfRGl2Rml4KCBtYXRyaXgtPnh4LCBzY2FsZSApOworICAgICAgbS54eSA9IEZUX0RpdkZpeCggbWF0cml4LT54eSwgc2NhbGUgKTsKKyAgICAgIG0ueXggPSBGVF9EaXZGaXgoIG1hdHJpeC0+eXgsIHNjYWxlICk7CisgICAgICBtLnl5ID0gRlRfRGl2Rml4KCBtYXRyaXgtPnl5LCBzY2FsZSApOworICAgIH0KKyAgICBlbHNlCisgICAgICBtID0gKm1hdHJpeDsKKworICAgIHRlbXAxID0gRlRfQUJTKCBtLnh4ICogbS55eSAtIG0ueHkgKiBtLnl4ICk7CisgICAgdGVtcDIgPSBtLnh4ICogbS54eCArIG0ueHkgKiBtLnh5ICsgbS55eCAqIG0ueXggKyBtLnl5ICogbS55eTsKKworICAgIGlmICggdGVtcDEgPT0gMCAgICAgICAgIHx8CisgICAgICAgICB0ZW1wMiAvIHRlbXAxID4gNTAgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhbGMuaCAqLworCiAgIEZUX0JBU0VfREVGKCB2b2lkICkKICAgRlRfVmVjdG9yX1RyYW5zZm9ybV9TY2FsZWQoIEZUX1ZlY3RvciogICAgICAgIHZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCwKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y2lkLmMgYi9zcmMvYmFzZS9mdGNpZC5jCmluZGV4IGY1MTg0NjQuLjk0NGUzZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Y2lkLmMKKysrIGIvc3JjL2Jhc2UvZnRjaWQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEZXJlayBDbGVnZyBhbmQgTWljaGFlbCBUb2Z0ZGFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjaWQuYworICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQ0lEIGZvbnQgaW5mb3JtYXRpb24uCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxOCBieQorICogRGVyZWsgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y29sb3IuYyBiL3NyYy9iYXNlL2Z0Y29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFlNTNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jhc2UvZnRjb2xvci5jCkBAIC0wLDAgKzEsMTU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y29sb3IuYworICoKKyAqICAgRnJlZVR5cGUncyBnbHlwaCBjb2xvciBtYW5hZ2VtZW50IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSBGVF9DT0xPUl9ICisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTCisKKyAgc3RhdGljCisgIGNvbnN0IEZUX1BhbGV0dGVfRGF0YSAgbnVsbF9wYWxldHRlX2RhdGEgPSB7IDAsIE5VTEwsIE5VTEwsIDAsIE5VTEwgfTsKKworCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjb2xvci5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9QYWxldHRlX0RhdGFfR2V0KCBGVF9GYWNlICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9QYWxldHRlX0RhdGEgICphcGFsZXR0ZV9kYXRhICkKKyAgeworICAgIGlmICggIWZhY2UgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CisgICAgaWYgKCAhYXBhbGV0dGVfZGF0YSkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBGVF9JU19TRk5UKCBmYWNlICkgKQorICAgICAgKmFwYWxldHRlX2RhdGEgPSAoIChUVF9GYWNlKWZhY2UgKS0+cGFsZXR0ZV9kYXRhOworICAgIGVsc2UKKyAgICAgICphcGFsZXR0ZV9kYXRhID0gbnVsbF9wYWxldHRlX2RhdGE7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y29sb3IuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUGFsZXR0ZV9TZWxlY3QoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICBwYWxldHRlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgRlRfQ29sb3IqICAqYXBhbGV0dGUgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisgICAgVFRfRmFjZSAgICAgICB0dGZhY2U7CisgICAgU0ZOVF9TZXJ2aWNlICBzZm50OworCisKKyAgICBpZiAoICFmYWNlICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOworCisgICAgaWYgKCAhRlRfSVNfU0ZOVCggZmFjZSApICkKKyAgICB7CisgICAgICBpZiAoIGFwYWxldHRlICkKKyAgICAgICAgKmFwYWxldHRlID0gTlVMTDsKKworICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisKKyAgICB0dGZhY2UgPSAoVFRfRmFjZSlmYWNlOworICAgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50OworCisgICAgZXJyb3IgPSBzZm50LT5zZXRfcGFsZXR0ZSggdHRmYWNlLCBwYWxldHRlX2luZGV4ICk7CisgICAgaWYgKCBlcnJvciApCisgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICB0dGZhY2UtPnBhbGV0dGVfaW5kZXggPSBwYWxldHRlX2luZGV4OworCisgICAgaWYgKCBhcGFsZXR0ZSApCisgICAgICAqYXBhbGV0dGUgPSB0dGZhY2UtPnBhbGV0dGU7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y29sb3IuaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUGFsZXR0ZV9TZXRfRm9yZWdyb3VuZF9Db2xvciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NvbG9yICBmb3JlZ3JvdW5kX2NvbG9yICkKKyAgeworICAgIFRUX0ZhY2UgIHR0ZmFjZTsKKworCisgICAgaWYgKCAhZmFjZSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKKworICAgIGlmICggIUZUX0lTX1NGTlQoIGZhY2UgKSApCisgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgdHRmYWNlID0gKFRUX0ZhY2UpZmFjZTsKKworICAgIHR0ZmFjZS0+Zm9yZWdyb3VuZF9jb2xvciAgICAgID0gZm9yZWdyb3VuZF9jb2xvcjsKKyAgICB0dGZhY2UtPmhhdmVfZm9yZWdyb3VuZF9jb2xvciA9IDE7CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUyAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUGFsZXR0ZV9EYXRhX0dldCggRlRfRmFjZSAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfUGFsZXR0ZV9EYXRhICAqYXBhbGV0dGVfZGF0YSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKyAgICBGVF9VTlVTRUQoIGFwYWxldHRlX2RhdGEgKTsKKworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9QYWxldHRlX1NlbGVjdCggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgIHBhbGV0dGVfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBGVF9Db2xvciogICphcGFsZXR0ZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKyAgICBGVF9VTlVTRUQoIHBhbGV0dGVfaW5kZXggKTsKKyAgICBGVF9VTlVTRUQoIGFwYWxldHRlICk7CisKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfUGFsZXR0ZV9TZXRfRm9yZWdyb3VuZF9Db2xvciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0NvbG9yICBmb3JlZ3JvdW5kX2NvbG9yICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworICAgIEZUX1VOVVNFRCggZm9yZWdyb3VuZF9jb2xvciApOworCisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9DT0xPUl9MQVlFUlMgKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMgYi9zcmMvYmFzZS9mdGRiZ21lbS5jCmluZGV4IGMzM2Q4YWMuLjZlMGEwNzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKKysrIGIvc3JjL2Jhc2UvZnRkYmdtZW0uYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRkYmdtZW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE1lbW9yeSBkZWJ1Z2dlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRkYmdtZW0uYworICoKKyAqICAgTWVtb3J5IGRlYnVnZ2VyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01MCw5ICs1MCw5IEBACiAjZGVmaW5lIEZUX01FTV9WQUwoIGFkZHIgKSAgKCAoRlRfUHRyRGlzdCkoRlRfUG9pbnRlcikoIGFkZHIgKSApCiAKICAgLyoKLSAgICogIFRoaXMgc3RydWN0dXJlIGhvbGRzIHN0YXRpc3RpY3MgZm9yIGEgc2luZ2xlIGFsbG9jYXRpb24vcmVsZWFzZQotICAgKiAgc2l0ZS4gIFRoaXMgaXMgdXNlZnVsIHRvIGtub3cgd2hlcmUgbWVtb3J5IG9wZXJhdGlvbnMgaGFwcGVuIHRoZQotICAgKiAgbW9zdC4KKyAgICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgc3RhdGlzdGljcyBmb3IgYSBzaW5nbGUgYWxsb2NhdGlvbi9yZWxlYXNlCisgICAqIHNpdGUuICBUaGlzIGlzIHVzZWZ1bCB0byBrbm93IHdoZXJlIG1lbW9yeSBvcGVyYXRpb25zIGhhcHBlbiB0aGUKKyAgICogbW9zdC4KICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9NZW1Tb3VyY2VSZWNfCiAgIHsKQEAgLTc2LDE3ICs3NiwxNyBAQAogCiAKICAgLyoKLSAgICogIFdlIGRvbid0IG5lZWQgYSByZXNpemFibGUgYXJyYXkgZm9yIHRoZSBtZW1vcnkgc291cmNlcyBiZWNhdXNlCi0gICAqICB0aGVpciBudW1iZXIgaXMgcHJldHR5IGxpbWl0ZWQgd2l0aGluIEZyZWVUeXBlLgorICAgKiBXZSBkb24ndCBuZWVkIGEgcmVzaXphYmxlIGFycmF5IGZvciB0aGUgbWVtb3J5IHNvdXJjZXMgYmVjYXVzZQorICAgKiB0aGVpciBudW1iZXIgaXMgcHJldHR5IGxpbWl0ZWQgd2l0aGluIEZyZWVUeXBlLgogICAgKi8KICNkZWZpbmUgRlRfTUVNX1NPVVJDRV9CVUNLRVRTICAxMjgKIAogICAvKgotICAgKiAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIHNpbmdsZSBhbGxvY2F0ZWQKLSAgICogIG1lbW9yeSBibG9jay4gIElmIEtFRVBBTElWRSBpcyBkZWZpbmVkLCBibG9ja3MgdGhhdCBhcmUgZnJlZWQgYnkKLSAgICogIEZyZWVUeXBlIGFyZSBuZXZlciByZWxlYXNlZCB0byB0aGUgc3lzdGVtLiAgSW5zdGVhZCwgdGhlaXIgYHNpemUnCi0gICAqICBmaWVsZCBpcyBzZXQgdG8gYC1zaXplJy4gIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCB0byBkZXRlY3QgZG91YmxlCi0gICAqICBmcmVlcywgYXQgdGhlIHByaWNlIG9mIGEgbGFyZ2UgbWVtb3J5IGZvb3RwcmludCBkdXJpbmcgZXhlY3V0aW9uLgorICAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgc2luZ2xlIGFsbG9jYXRlZAorICAgKiBtZW1vcnkgYmxvY2suICBJZiBLRUVQQUxJVkUgaXMgZGVmaW5lZCwgYmxvY2tzIHRoYXQgYXJlIGZyZWVkIGJ5CisgICAqIEZyZWVUeXBlIGFyZSBuZXZlciByZWxlYXNlZCB0byB0aGUgc3lzdGVtLiAgSW5zdGVhZCwgdGhlaXIgYHNpemUnCisgICAqIGZpZWxkIGlzIHNldCB0byBgLXNpemUnLiAgVGhpcyBpcyBtYWlubHkgdXNlZnVsIHRvIGRldGVjdCBkb3VibGUKKyAgICogZnJlZXMsIGF0IHRoZSBwcmljZSBvZiBhIGxhcmdlIG1lbW9yeSBmb290cHJpbnQgZHVyaW5nIGV4ZWN1dGlvbi4KICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9NZW1Ob2RlUmVjXwogICB7CkBAIC0xMDYsOCArMTA2LDggQEAKIAogCiAgIC8qCi0gICAqICBUaGUgZ2xvYmFsIHN0cnVjdHVyZSwgY29udGFpbmluZyBjb21wb3VuZCBzdGF0aXN0aWNzIGFuZCBhbGwgaGFzaAotICAgKiAgdGFibGVzLgorICAgKiBUaGUgZ2xvYmFsIHN0cnVjdHVyZSwgY29udGFpbmluZyBjb21wb3VuZCBzdGF0aXN0aWNzIGFuZCBhbGwgaGFzaAorICAgKiB0YWJsZXMuCiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfTWVtVGFibGVSZWNfCiAgIHsKQEAgLTE0Niw4ICsxNDYsOCBAQAogCiAKICAgLyoKLSAgICogIFByaW1lIG51bWJlcnMgYXJlIHVnbHkgdG8gaGFuZGxlLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIGltcGxlbWVudAotICAgKiAgTC1IYXNoaW5nLCB3aGljaCBpcyAxMCUgZmFzdGVyIGFuZCBkb2Vzbid0IHJlcXVpcmUgZGl2aXNpb25zLgorICAgKiBQcmltZSBudW1iZXJzIGFyZSB1Z2x5IHRvIGhhbmRsZS4gIEl0IHdvdWxkIGJlIGJldHRlciB0byBpbXBsZW1lbnQKKyAgICogTC1IYXNoaW5nLCB3aGljaCBpcyAxMCUgZmFzdGVyIGFuZCBkb2Vzbid0IHJlcXVpcmUgZGl2aXNpb25zLgogICAgKi8KICAgc3RhdGljIGNvbnN0IEZUX0ludCAgZnRfbWVtX3ByaW1lc1tdID0KICAgewpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRkZWJ1Zy5jIGIvc3JjL2Jhc2UvZnRkZWJ1Zy5jCmluZGV4IGZlMjYzMDkuLjE5YjAwNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGVidWcuYworKysgYi9zcmMvYmFzZS9mdGRlYnVnLmMKQEAgLTEsNDQgKzEsNDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0ZGVidWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0ZGVidWcuYworICoKKyAqICAgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGNvbXBvbmVudCAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGNvbXBvbmVudCBjb250YWlucyB2YXJpb3VzIG1hY3JvcyBhbmQgZnVuY3Rpb25zIHVzZWQgdG8gZWFzZSB0aGUgKi8KLSAgLyogZGVidWdnaW5nIG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUuICBJdHMgbWFpbiBwdXJwb3NlIGlzIGluIGFzc2VydGlvbiAgICovCi0gIC8qIGNoZWNraW5nLCB0cmFjaW5nLCBhbmQgZXJyb3IgZGV0ZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlcmUgYXJlIG5vdyB0aHJlZSBkZWJ1Z2dpbmcgbW9kZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIHRyYWNlIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBsb2cgZmlsZSAod2hpY2ggY2FuIGJlIHRoZSAqLwotICAvKiAgIHN0YW5kYXJkIGVycm9yIG91dHB1dCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gZXJyb3IgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBPbmx5IGVycm9yIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIHJlbGVhc2UgbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTm8gZXJyb3IgbWVzc2FnZSBpcyBzZW50IG9yIGdlbmVyYXRlZC4gIFRoZSBjb2RlIGlzIGZyZWUgZnJvbSBhbnkgICAqLwotICAvKiAgIGRlYnVnZ2luZyBwYXJ0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBjb21wb25lbnQgY29udGFpbnMgdmFyaW91cyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB1c2VkIHRvIGVhc2UgdGhlCisgICAqIGRlYnVnZ2luZyBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLiAgSXRzIG1haW4gcHVycG9zZSBpcyBpbiBhc3NlcnRpb24KKyAgICogY2hlY2tpbmcsIHRyYWNpbmcsIGFuZCBlcnJvciBkZXRlY3Rpb24uCisgICAqCisgICAqIFRoZXJlIGFyZSBub3cgdGhyZWUgZGVidWdnaW5nIG1vZGVzOgorICAgKgorICAgKiAtIHRyYWNlIG1vZGUKKyAgICoKKyAgICogICBFcnJvciBhbmQgdHJhY2UgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIGxvZyBmaWxlICh3aGljaCBjYW4gYmUgdGhlCisgICAqICAgc3RhbmRhcmQgZXJyb3Igb3V0cHV0KS4KKyAgICoKKyAgICogLSBlcnJvciBtb2RlCisgICAqCisgICAqICAgT25seSBlcnJvciBtZXNzYWdlcyBhcmUgZ2VuZXJhdGVkLgorICAgKgorICAgKiAtIHJlbGVhc2UgbW9kZToKKyAgICoKKyAgICogICBObyBlcnJvciBtZXNzYWdlIGlzIHNlbnQgb3IgZ2VuZXJhdGVkLiAgVGhlIGNvZGUgaXMgZnJlZSBmcm9tIGFueQorICAgKiAgIGRlYnVnZ2luZyBwYXJ0cy4KKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xMDAsOSArMTAwLDE2IEBACiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogCi0gIC8qIGFycmF5IG9mIHRyYWNlIGxldmVscywgaW5pdGlhbGl6ZWQgdG8gMCAqLwotICBpbnQgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9jb3VudF07CisgIC8qIGFycmF5IG9mIHRyYWNlIGxldmVscywgaW5pdGlhbGl6ZWQgdG8gMDsgKi8KKyAgLyogdGhpcyBnZXRzIGFkanVzdGVkIGF0IHJ1bi10aW1lICAgICAgICAgICAqLworICBzdGF0aWMgaW50ICBmdF90cmFjZV9sZXZlbHNfZW5hYmxlZFt0cmFjZV9jb3VudF07CiAKKyAgLyogYXJyYXkgb2YgdHJhY2UgbGV2ZWxzLCBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gMCAqLworICBzdGF0aWMgaW50ICBmdF90cmFjZV9sZXZlbHNfZGlzYWJsZWRbdHJhY2VfY291bnRdOworCisgIC8qIGEgcG9pbnRlciB0byBlaXRoZXIgYGZ0X3RyYWNlX2xldmVsc19lbmFibGVkJyAqLworICAvKiBvciBgZnRfdHJhY2VfbGV2ZWxzX2Rpc2FibGVkJyAgICAgICAgICAgICAgICAgKi8KKyAgaW50KiAgZnRfdHJhY2VfbGV2ZWxzOwogCiAgIC8qIGRlZmluZSBhcnJheSBvZiB0cmFjZSB0b2dnbGUgbmFtZXMgKi8KICNkZWZpbmUgRlRfVFJBQ0VfREVGKCB4ICkgICN4ICwKQEAgLTE0MCwyNCArMTQ3LDQyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW5pdGlhbGl6ZSB0aGUgdHJhY2luZyBzdWItc3lzdGVtLiAgVGhpcyBpcyBkb25lIGJ5IHJldHJpZXZpbmcgdGhlICAgICovCi0gIC8qIHZhbHVlIG9mIHRoZSBgRlQyX0RFQlVHJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIEl0IG11c3QgYmUgYSBsaXN0IG9mICAqLwotICAvKiB0b2dnbGVzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBgOycsIG9yIGAsJy4gIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGV4cG9ydCBGVDJfREVCVUc9ImFueTozIG1lbW9yeTo3IHN0cmVhbTo1IiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyByZXF1ZXN0cyB0aGF0IGFsbCBsZXZlbHMgYmUgc2V0IHRvIDMsIGV4Y2VwdCB0aGUgdHJhY2UgbGV2ZWwgZm9yICovCi0gIC8qIHRoZSBtZW1vcnkgYW5kIHN0cmVhbSBjb21wb25lbnRzIHdoaWNoIGFyZSBzZXQgdG8gNyBhbmQgNSwgICAgICAgICAgICAqLwotICAvKiByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNlZSB0aGUgZmlsZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmgnIGZvciBkZXRhaWxzIG9mICAgICAqLwotICAvKiB0aGUgYXZhaWxhYmxlIHRvZ2dsZSBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBsZXZlbCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNzsgMCBtZWFucyBxdWlldCAoZXhjZXB0IGZvciBzZXJpb3VzICAqLwotICAvKiBydW50aW1lIGVycm9ycyksIGFuZCA3IG1lYW5zIF92ZXJ5XyB2ZXJib3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRkZWJ1Zy5oICovCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9UcmFjZV9EaXNhYmxlKCB2b2lkICkKKyAgeworICAgIGZ0X3RyYWNlX2xldmVscyA9IGZ0X3RyYWNlX2xldmVsc19kaXNhYmxlZDsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX1RyYWNlX0VuYWJsZSggdm9pZCApCisgIHsKKyAgICBmdF90cmFjZV9sZXZlbHMgPSBmdF90cmFjZV9sZXZlbHNfZW5hYmxlZDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEluaXRpYWxpemUgdGhlIHRyYWNpbmcgc3ViLXN5c3RlbS4gIFRoaXMgaXMgZG9uZSBieSByZXRyaWV2aW5nIHRoZQorICAgKiB2YWx1ZSBvZiB0aGUgYEZUMl9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUuICBJdCBtdXN0IGJlIGEgbGlzdCBvZgorICAgKiB0b2dnbGVzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBgOycsIG9yIGAsJy4gIEV4YW1wbGU6CisgICAqCisgICAqICAgZXhwb3J0IEZUMl9ERUJVRz0iYW55OjMgbWVtb3J5Ojcgc3RyZWFtOjUiCisgICAqCisgICAqIFRoaXMgcmVxdWVzdHMgdGhhdCBhbGwgbGV2ZWxzIGJlIHNldCB0byAzLCBleGNlcHQgdGhlIHRyYWNlIGxldmVsIGZvcgorICAgKiB0aGUgbWVtb3J5IGFuZCBzdHJlYW0gY29tcG9uZW50cyB3aGljaCBhcmUgc2V0IHRvIDcgYW5kIDUsCisgICAqIHJlc3BlY3RpdmVseS4KKyAgICoKKyAgICogU2VlIHRoZSBmaWxlIGBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCcgZm9yIGRldGFpbHMgb2YKKyAgICogdGhlIGF2YWlsYWJsZSB0b2dnbGUgbmFtZXMuCisgICAqCisgICAqIFRoZSBsZXZlbCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNzsgMCBtZWFucyBxdWlldCAoZXhjZXB0IGZvciBzZXJpb3VzCisgICAqIHJ1bnRpbWUgZXJyb3JzKSwgYW5kIDcgbWVhbnMgX3ZlcnlfIHZlcmJvc2UuCisgICAqLwogICBGVF9CQVNFX0RFRiggdm9pZCApCiAgIGZ0X2RlYnVnX2luaXQoIHZvaWQgKQogICB7CkBAIC0yMjMsMTQgKzI0OCwxNiBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yIGBhbnknICovCiAgICAgICAgICAgICAgIGZvciAoIG4gPSAwOyBuIDwgdHJhY2VfY291bnQ7IG4rKyApCi0gICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW25dID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzX2VuYWJsZWRbbl0gPSBsZXZlbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW2ZvdW5kXSA9IGxldmVsOworICAgICAgICAgICAgICBmdF90cmFjZV9sZXZlbHNfZW5hYmxlZFtmb3VuZF0gPSBsZXZlbDsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisKKyAgICBmdF90cmFjZV9sZXZlbHMgPSBmdF90cmFjZV9sZXZlbHNfZW5hYmxlZDsKICAgfQogCiAKQEAgLTI2MCw2ICsyODcsMjIgQEAKICAgfQogCiAKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBGVF9UcmFjZV9EaXNhYmxlKCB2b2lkICkKKyAgeworICAgIC8qIG5vdGhpbmcgKi8KKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGRlYnVnLmggKi8KKworICBGVF9CQVNFX0RFRiggdm9pZCApCisgIEZUX1RyYWNlX0VuYWJsZSggdm9pZCApCisgIHsKKyAgICAvKiBub3RoaW5nICovCisgIH0KKworCiAjZW5kaWYgLyogIUZUX0RFQlVHX0xFVkVMX1RSQUNFICovCiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRmbnRmbXQuYyBiL3NyYy9iYXNlL2Z0Zm50Zm10LmMKaW5kZXggYTI5MDBjZS4uNjEwYjZjZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRmbnRmbXQuYworKysgYi9zcmMvYmFzZS9mdGZudGZtdC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGZudGZtdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBmb250IGZvcm1hdHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGZudGZtdC5jCisgKgorICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIGZvbnQgZm9ybWF0cyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRmc3R5cGUuYyBiL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKaW5kZXggZTZjZGY2ZS4uNzRlOWU1NiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRmc3R5cGUuYworKysgYi9zcmMvYmFzZS9mdGZzdHlwZS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGZzdHlwZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIHRvIGFjY2VzcyBGU1R5cGUgZGF0YSAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGZzdHlwZS5jCisgKgorICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgdG8gYWNjZXNzIEZTVHlwZSBkYXRhIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2FzcC5jIGIvc3JjL2Jhc2UvZnRnYXNwLmMKaW5kZXggNGY4MGJiYS4uMTVlMGVmMCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRnYXNwLmMKKysrIGIvc3JjL2Jhc2UvZnRnYXNwLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Z2FzcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Z2FzcC5jCisgKgorICogICBBY2Nlc3Mgb2YgVHJ1ZVR5cGUncyBgZ2FzcCcgdGFibGUgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMgYi9zcmMvYmFzZS9mdGdsb2Fkci5jCmluZGV4IDQ3MjAyNDkuLjQ3NWQ1Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKKysrIGIvc3JjL2Jhc2UvZnRnbG9hZHIuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRnbG9hZHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRnbG9hZHIuYworICoKKyAqICAgVGhlIEZyZWVUeXBlIGdseXBoIGxvYWRlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zOCwzMSArMzgsMzEgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGdseXBoIGxvYWRlciBpcyBhIHNpbXBsZSBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBsb2FkIGEgc2V0IG9mICAgICovCi0gIC8qIGdseXBocyBlYXNpbHkuICBJdCBpcyBjcml0aWNhbCBmb3IgdGhlIGNvcnJlY3QgbG9hZGluZyBvZiBjb21wb3NpdGVzLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWRlYWxseSwgb25lIGNhbiBzZWUgaXQgYXMgYSBzdGFjayBvZiBhYnN0cmFjdCBgZ2x5cGgnIG9iamVjdHMuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGxvYWRlci5iYXNlICAgICBJcyByZWFsbHkgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suICBJdCBkZXNjcmliZXMgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgc2luZ2xlIGdseXBoIGltYWdlIG1hZGUgb2YgdGhlIGp1eHRhcG9zaXRpb24gb2YgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHNldmVyYWwgZ2x5cGhzICh0aG9zZSBgaW4gdGhlIHN0YWNrJykuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsb2FkZXIuY3VycmVudCAgRGVzY3JpYmVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvbiB3aGljaCBhIG5ldyAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGNhbiBiZSBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBSZXdpbmQgICAgICAgICAgQ2xlYXJzIHRoZSBzdGFjay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgUHJlcGFyZSAgICAgICAgIFNldCB1cCBgbG9hZGVyLmN1cnJlbnQnIGZvciBhZGRpdGlvbiBvZiBhIG5ldyBnbHlwaCAqLwotICAvKiAgICAgICAgICAgICAgICAgICBpbWFnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBBZGQgICAgICAgICAgICAgQWRkIHRoZSBgY3VycmVudCcgZ2x5cGggaW1hZ2UgdG8gdGhlIGBiYXNlJyBvbmUsICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGFuZCBwcmVwYXJlIGZvciBhbm90aGVyIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGdseXBoIGxvYWRlciBpcyBub3cgYSBiYXNlIG9iamVjdC4gIEVhY2ggZHJpdmVyIHVzZWQgdG8gICAgICAgICAgICovCi0gIC8qIHJlLWltcGxlbWVudCBpdCBpbiBvbmUgd2F5IG9yIHRoZSBvdGhlciwgd2hpY2ggd2FzdGVkIGNvZGUgYW5kICAgICAgICAqLwotICAvKiBlbmVyZ3kuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIGdseXBoIGxvYWRlciBpcyBhIHNpbXBsZSBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBsb2FkIGEgc2V0IG9mCisgICAqIGdseXBocyBlYXNpbHkuICBJdCBpcyBjcml0aWNhbCBmb3IgdGhlIGNvcnJlY3QgbG9hZGluZyBvZiBjb21wb3NpdGVzLgorICAgKgorICAgKiBJZGVhbGx5LCBvbmUgY2FuIHNlZSBpdCBhcyBhIHN0YWNrIG9mIGFic3RyYWN0IGBnbHlwaCcgb2JqZWN0cy4KKyAgICoKKyAgICogICBsb2FkZXIuYmFzZSAgICAgSXMgcmVhbGx5IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiAgSXQgZGVzY3JpYmVzIGEKKyAgICogICAgICAgICAgICAgICAgICAgc2luZ2xlIGdseXBoIGltYWdlIG1hZGUgb2YgdGhlIGp1eHRhcG9zaXRpb24gb2YKKyAgICogICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBnbHlwaHMgKHRob3NlIGBpbiB0aGUgc3RhY2snKS4KKyAgICoKKyAgICogICBsb2FkZXIuY3VycmVudCAgRGVzY3JpYmVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvbiB3aGljaCBhIG5ldworICAgKiAgICAgICAgICAgICAgICAgICBnbHlwaCBjYW4gYmUgbG9hZGVkLgorICAgKgorICAgKiAgIFJld2luZCAgICAgICAgICBDbGVhcnMgdGhlIHN0YWNrLgorICAgKiAgIFByZXBhcmUgICAgICAgICBTZXQgdXAgYGxvYWRlci5jdXJyZW50JyBmb3IgYWRkaXRpb24gb2YgYSBuZXcgZ2x5cGgKKyAgICogICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAqICAgQWRkICAgICAgICAgICAgIEFkZCB0aGUgYGN1cnJlbnQnIGdseXBoIGltYWdlIHRvIHRoZSBgYmFzZScgb25lLAorICAgKiAgICAgICAgICAgICAgICAgICBhbmQgcHJlcGFyZSBmb3IgYW5vdGhlciBvbmUuCisgICAqCisgICAqIFRoZSBnbHlwaCBsb2FkZXIgaXMgbm93IGEgYmFzZSBvYmplY3QuICBFYWNoIGRyaXZlciB1c2VkIHRvCisgICAqIHJlLWltcGxlbWVudCBpdCBpbiBvbmUgd2F5IG9yIHRoZSBvdGhlciwgd2hpY2ggd2FzdGVkIGNvZGUgYW5kCisgICAqIGVuZXJneS4KKyAgICoKKyAgICovCiAKIAogICAvKiBjcmVhdGUgYSBuZXcgZ2x5cGggbG9hZGVyICovCkBAIC05OSwxMiArOTksMTIgQEAKICAgfQogCiAKLSAgLyogcmVzZXQgdGhlIGdseXBoIGxvYWRlciwgZnJlZXMgYWxsIGFsbG9jYXRlZCB0YWJsZXMgKi8KLSAgLyogYW5kIHN0YXJ0cyBmcm9tIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogcmVzZXQgZ2x5cGggbG9hZGVyLCBmcmVlIGFsbCBhbGxvY2F0ZWQgdGFibGVzLCAqLworICAvKiBhbmQgc3RhcnQgZnJvbSB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0JBU0VfREVGKCB2b2lkICkKICAgRlRfR2x5cGhMb2FkZXJfUmVzZXQoIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgKQogICB7Ci0gICAgRlRfTWVtb3J5IG1lbW9yeSA9IGxvYWRlci0+bWVtb3J5OworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbG9hZGVyLT5tZW1vcnk7CiAKIAogICAgIEZUX0ZSRUUoIGxvYWRlci0+YmFzZS5vdXRsaW5lLnBvaW50cyApOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgIHsKICAgICBpZiAoIGxvYWRlciApCiAgICAgewotICAgICAgRlRfTWVtb3J5IG1lbW9yeSA9IGxvYWRlci0+bWVtb3J5OworICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBsb2FkZXItPm1lbW9yeTsKIAogCiAgICAgICBGVF9HbHlwaExvYWRlcl9SZXNldCggbG9hZGVyICk7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGdseXBoLmMgYi9zcmMvYmFzZS9mdGdseXBoLmMKaW5kZXggNjc1OWFhMi4uOGJjODZhNSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRnbHlwaC5jCisrKyBiL3NyYy9iYXNlL2Z0Z2x5cGguYwpAQCAtMSwzMSArMSwzMSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRnbHlwaC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChib2R5KS4gICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRnbHlwaC5jCisgKgorICogICBGcmVlVHlwZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGFuZGxlIGdseXBocyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBzZXZlcmFsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyAgICovCi0gIC8qICB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZWFzaWx5IHJldHJpZXZlIGdseXBoICAgICAqLwotICAvKiAgYml0bWFwcyBhbmQgb3V0bGluZXMgZnJvbSBhIGdpdmVuIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG9wdGlvbmFsIGlmIHlvdSBhcmUgd3JpdGluZyBhIGZvbnQgc2VydmVyICAqLwotICAvKiAgb3IgdGV4dCBsYXlvdXQgZW5naW5lIG9uIHRvcCBvZiBGcmVlVHlwZS4gIEhvd2V2ZXIsIHRoZXkgYXJlIHByZXR0eSAgKi8KLSAgLyogIGhhbmR5IGZvciBtYW55IG90aGVyIHNpbXBsZSB1c2VzIG9mIHRoZSBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbiBvZiBzZXZlcmFsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgKiB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZWFzaWx5IHJldHJpZXZlIGdseXBoCisgICAqIGJpdG1hcHMgYW5kIG91dGxpbmVzIGZyb20gYSBnaXZlbiBmYWNlLgorICAgKgorICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG9wdGlvbmFsIGlmIHlvdSBhcmUgd3JpdGluZyBhIGZvbnQgc2VydmVyCisgICAqIG9yIHRleHQgbGF5b3V0IGVuZ2luZSBvbiB0b3Agb2YgRnJlZVR5cGUuICBIb3dldmVyLCB0aGV5IGFyZSBwcmV0dHkKKyAgICogaGFuZHkgZm9yIG1hbnkgb3RoZXIgc2ltcGxlIHVzZXMgb2YgdGhlIGxpYnJhcnkuCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzYsMTQgKzM2LDEzIEBACiAjaW5jbHVkZSBGVF9CSVRNQVBfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICiAKLSNpbmNsdWRlICJiYXNlcGljLmgiCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2dseXBoCiAKQEAgLTM1OSwzNyArMzU4LDI4IEBACiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KIAotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0dldF9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAotICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAqYWdseXBoICkKKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX05ld19HbHlwaCggRlRfTGlicmFyeSAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgIEZUX0dseXBoX0Zvcm1hdCAgZm9ybWF0LAorICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAgICAqYWdseXBoICkKICAgewotICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAgRlRfRXJyb3IgICAgZXJyb3I7Ci0gICAgRlRfR2x5cGggICAgZ2x5cGg7Ci0KICAgICBjb25zdCBGVF9HbHlwaF9DbGFzcyogIGNsYXp6ID0gTlVMTDsKIAotCi0gICAgaWYgKCAhc2xvdCApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfU2xvdF9IYW5kbGUgKTsKLQotICAgIGxpYnJhcnkgPSBzbG90LT5saWJyYXJ5OwotCi0gICAgaWYgKCAhYWdseXBoICkKKyAgICBpZiAoICFsaWJyYXJ5IHx8ICFhZ2x5cGggKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICAvKiBpZiBpdCBpcyBhIGJpdG1hcCwgdGhhdCdzIGVhc3kgOi0pICovCi0gICAgaWYgKCBzbG90LT5mb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApCi0gICAgICBjbGF6eiA9IEZUX0JJVE1BUF9HTFlQSF9DTEFTU19HRVQ7CisgICAgaWYgKCBmb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUCApCisgICAgICBjbGF6eiA9ICZmdF9iaXRtYXBfZ2x5cGhfY2xhc3M7CiAKICAgICAvKiBpZiBpdCBpcyBhbiBvdXRsaW5lICovCi0gICAgZWxzZSBpZiAoIHNsb3QtPmZvcm1hdCA9PSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSApCi0gICAgICBjbGF6eiA9IEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUOworICAgIGVsc2UgaWYgKCBmb3JtYXQgPT0gRlRfR0xZUEhfRk9STUFUX09VVExJTkUgKQorICAgICAgY2xhenogPSAmZnRfb3V0bGluZV9nbHlwaF9jbGFzczsKIAogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiB0cnkgdG8gZmluZCBhIHJlbmRlcmVyIHRoYXQgc3VwcG9ydHMgdGhlIGdseXBoIGltYWdlIGZvcm1hdCAqLwotICAgICAgRlRfUmVuZGVyZXIgIHJlbmRlciA9IEZUX0xvb2t1cF9SZW5kZXJlciggbGlicmFyeSwgc2xvdC0+Zm9ybWF0LCAwICk7CisgICAgICBGVF9SZW5kZXJlciAgcmVuZGVyID0gRlRfTG9va3VwX1JlbmRlcmVyKCBsaWJyYXJ5LCBmb3JtYXQsIDAgKTsKIAogCiAgICAgICBpZiAoIHJlbmRlciApCkBAIC0zOTcsMTMgKzM4NywzMSBAQAogICAgIH0KIAogICAgIGlmICggIWNsYXp6ICkKLSAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOwotICAgICAgZ290byBFeGl0OwotICAgIH0KKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKIAogICAgIC8qIGNyZWF0ZSBGVF9HbHlwaCBvYmplY3QgKi8KLSAgICBlcnJvciA9IGZ0X25ld19nbHlwaCggbGlicmFyeSwgY2xhenosICZnbHlwaCApOworICAgIHJldHVybiBmdF9uZXdfZ2x5cGgoIGxpYnJhcnksIGNsYXp6LCBhZ2x5cGggKTsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGdseXBoLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0dldF9HbHlwaCggRlRfR2x5cGhTbG90ICBzbG90LAorICAgICAgICAgICAgICAgIEZUX0dseXBoICAgICAqYWdseXBoICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yOworICAgIEZUX0dseXBoICAgIGdseXBoOworCisKKyAgICBpZiAoICFzbG90ICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9TbG90X0hhbmRsZSApOworCisgICAgaWYgKCAhYWdseXBoICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgLyogY3JlYXRlIEZUX0dseXBoIG9iamVjdCAqLworICAgIGVycm9yID0gRlRfTmV3X0dseXBoKCBzbG90LT5saWJyYXJ5LCBzbG90LT5mb3JtYXQsICZnbHlwaCApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogCkBAIC00MjcsNyArNDM1LDcgQEAKICAgICBnbHlwaC0+YWR2YW5jZS55ID0gc2xvdC0+YWR2YW5jZS55ICogMTAyNDsKIAogICAgIC8qIG5vdyBpbXBvcnQgdGhlIGltYWdlIGZyb20gdGhlIGdseXBoIHNsb3QgKi8KLSAgICBlcnJvciA9IGNsYXp6LT5nbHlwaF9pbml0KCBnbHlwaCwgc2xvdCApOworICAgIGVycm9yID0gZ2x5cGgtPmNsYXp6LT5nbHlwaF9pbml0KCBnbHlwaCwgc2xvdCApOwogCiAgIEV4aXQyOgogICAgIC8qIGlmIGFuIGVycm9yIG9jY3VycmVkLCBkZXN0cm95IHRoZSBnbHlwaCAqLwpAQCAtNTM2LDcgKzU0NCw2IEBACiAgICAgRlRfQml0bWFwR2x5cGggICAgICAgICAgICBiaXRtYXAgPSBOVUxMOwogICAgIGNvbnN0IEZUX0dseXBoX0NsYXNzKiAgICAgY2xheno7CiAKLSAgICAvKiBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgIGxpYnJhcnk7CiAKIApAQCAtNTUzLDcgKzU2MCw3IEBACiAgICAgICBnb3RvIEJhZDsKIAogICAgIC8qIHdoZW4gY2FsbGVkIHdpdGggYSBiaXRtYXAgZ2x5cGgsIGRvIG5vdGhpbmcgYW5kIHJldHVybiBzdWNjZXNzZnVsbHkgKi8KLSAgICBpZiAoIGNsYXp6ID09IEZUX0JJVE1BUF9HTFlQSF9DTEFTU19HRVQgKQorICAgIGlmICggY2xhenogPT0gJmZ0X2JpdG1hcF9nbHlwaF9jbGFzcyApCiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBpZiAoICFjbGF6ei0+Z2x5cGhfcHJlcGFyZSApCkBAIC01NjksNyArNTc2LDcgQEAKICAgICBkdW1teS5mb3JtYXQgICA9IGNsYXp6LT5nbHlwaF9mb3JtYXQ7CiAKICAgICAvKiBjcmVhdGUgcmVzdWx0IGJpdG1hcCBnbHlwaCAqLwotICAgIGVycm9yID0gZnRfbmV3X2dseXBoKCBsaWJyYXJ5LCBGVF9CSVRNQVBfR0xZUEhfQ0xBU1NfR0VULCAmYiApOworICAgIGVycm9yID0gZnRfbmV3X2dseXBoKCBsaWJyYXJ5LCAmZnRfYml0bWFwX2dseXBoX2NsYXNzLCAmYiApOwogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogICAgIGJpdG1hcCA9IChGVF9CaXRtYXBHbHlwaCliOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRneHZhbC5jIGIvc3JjL2Jhc2UvZnRneHZhbC5jCmluZGV4IDE5ZTJkNmEuLmYzOTYxZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z3h2YWwuYworKysgYi9zcmMvYmFzZS9mdGd4dmFsLmMKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Z3h2YWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIHZhbGlkYXRpbmcgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChib2R5KS4gICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGd4dmFsLmMKKyAqCisgKiAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSywKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRoYXNoLmMgYi9zcmMvYmFzZS9mdGhhc2guYwppbmRleCAyMWJjOGRkLi4zODdlNmQyIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGhhc2guYworKysgYi9zcmMvYmFzZS9mdGhhc2guYwpAQCAtMSwxMCArMSwxMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRoYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhhc2hpbmcgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRoYXNoLmMKKyAqCisgKiAgIEhhc2hpbmcgZnVuY3Rpb25zIChib2R5KS4KKyAqCisgKi8KIAogLyoKICAqIENvcHlyaWdodCAyMDAwIENvbXB1dGluZyBSZXNlYXJjaCBMYWJzLCBOZXcgTWV4aWNvIFN0YXRlIFVuaXZlcnNpdHkKQEAgLTMwLDEzICszMCwxMyBAQAogICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gY29kZSBmcm9tIGJkZi5jLHYgMS4yMiAyMDAwLzAzLzE2IDIwOjA4OjUwICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIHRha2VuIGZyb20gTWFyayBMZWlzaGVyJ3MgeG1iZGZlZCBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBjb2RlIGZyb20gYmRmLmMsdiAxLjIyIDIwMDAvMDMvMTYgMjA6MDg6NTAKKyAgICoKKyAgICogdGFrZW4gZnJvbSBNYXJrIExlaXNoZXIncyB4bWJkZmVkIHBhY2thZ2UKKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGluaXQuYyBiL3NyYy9iYXNlL2Z0aW5pdC5jCmluZGV4IDFmYTQ3MjEuLmUwZjJjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0aW5pdC5jCisrKyBiL3NyYy9iYXNlL2Z0aW5pdC5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGluaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgaW5pdGlhbGl6YXRpb24gbGF5ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGluaXQuYworICoKKyAqICAgRnJlZVR5cGUgaW5pdGlhbGl6YXRpb24gbGF5ZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgdHdvICAgICAgICAgICAqLwotICAvKiAgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCB0aGUgc2V0IG9mIGRlZmF1bHQgbW9kdWxlcyB0byBhICAgICAgKi8KLSAgLyogICAgIGZyZXNoIG5ldyBsaWJyYXJ5IG9iamVjdC4gIFRoZSBzZXQgaXMgdGFrZW4gZnJvbSB0aGUgaGVhZGVyIGZpbGUgICovCi0gIC8qICAgICBgZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgnLiAgU2VlIHRoZSBkb2N1bWVudCBgRnJlZVR5cGUgMi4wICAgICAqLwotICAvKiAgICAgQnVpbGQgU3lzdGVtJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBGVF9Jbml0X0ZyZWVUeXBlKCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3lzdGVtIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sICAgKi8KLSAgLyogICAgIGJ1aWxkcyBhIGxpYnJhcnkgb3V0IG9mIGl0LCB0aGVuIGNhbGxzIEZUX0RlZmF1bHRfRHJpdmVycygpLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgTm90ZSB0aGF0IGV2ZW4gaWYgRlRfSW5pdF9GcmVlVHlwZSgpIHVzZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAgKi8KLSAgLyogIHN5c3RlbSBvYmplY3QgZGVmaW5lZCBhdCBidWlsZCB0aW1lLCBjbGllbnQgYXBwbGljYXRpb25zIGFyZSBzdGlsbCAgICovCi0gIC8qICBhYmxlIHRvIHByb3ZpZGUgdGhlaXIgb3duIGBmdHN5c3RlbS5jJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgdHdvCisgICAqIGZ1bmN0aW9uczoKKyAgICoKKyAgICogRlRfQWRkX0RlZmF1bHRfTW9kdWxlcygpOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgdGhlIHNldCBvZiBkZWZhdWx0IG1vZHVsZXMgdG8gYQorICAgKiAgIGZyZXNoIG5ldyBsaWJyYXJ5IG9iamVjdC4gIFRoZSBzZXQgaXMgdGFrZW4gZnJvbSB0aGUgaGVhZGVyIGZpbGUKKyAgICogICBgZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgnLiAgU2VlIHRoZSBkb2N1bWVudCBgRnJlZVR5cGUgMi4wCisgICAqICAgQnVpbGQgU3lzdGVtJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICoKKyAgICogRlRfSW5pdF9GcmVlVHlwZSgpOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHN5c3RlbSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLAorICAgKiAgIGJ1aWxkcyBhIGxpYnJhcnkgb3V0IG9mIGl0LCB0aGVuIGNhbGxzIEZUX0RlZmF1bHRfRHJpdmVycygpLgorICAgKgorICAgKiBOb3RlIHRoYXQgZXZlbiBpZiBGVF9Jbml0X0ZyZWVUeXBlKCkgdXNlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgICAqIHN5c3RlbSBvYmplY3QgZGVmaW5lZCBhdCBidWlsZCB0aW1lLCBjbGllbnQgYXBwbGljYXRpb25zIGFyZSBzdGlsbAorICAgKiBhYmxlIHRvIHByb3ZpZGUgdGhlaXIgb3duIGBmdHN5c3RlbS5jJy4KKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MiwyMiArNDIsMTggQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfTU9EVUxFX0gKLSNpbmNsdWRlICJiYXNlcGljLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfaW5pdAogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotCiAjdW5kZWYgIEZUX1VTRV9NT0RVTEUKICNpZmRlZiBfX2NwbHVzcGx1cwogI2RlZmluZSBGVF9VU0VfTU9EVUxFKCB0eXBlLCB4ICkgIGV4dGVybiAiQyIgY29uc3QgdHlwZSAgeDsKQEAgLTc4LDEyMCArNzQsNiBAQAogICB9OwogCiAKLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIEZUX0VYVEVSTkMgIGV4dGVybiAiQyIKLSNlbHNlCi0jZGVmaW5lIEZUX0VYVEVSTkMgIGV4dGVybgotI2VuZGlmCi0KLSAgLyogZGVjbGFyZSB0aGUgbW9kdWxlJ3MgY2xhc3MgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gZnVuY3Rpb25zICovCi0jdW5kZWYgIEZUX1VTRV9NT0RVTEUKLSNkZWZpbmUgRlRfVVNFX01PRFVMRSggdHlwZSwgeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRVhURVJOQyBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfQ3JlYXRlX0NsYXNzXyAjIyB4KCBGVF9MaWJyYXJ5ICAgICAgICAgbGlicmFyeSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Nb2R1bGVfQ2xhc3MqICAqb3V0cHV0X2NsYXNzICk7IFwKLSAgRlRfRVhURVJOQyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRGVzdHJveV9DbGFzc18gIyMgeCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTW9kdWxlX0NsYXNzKiAgY2xhenogKTsKLQotI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAotCi0gIC8qIGNvdW50IGFsbCBtb2R1bGUgY2xhc3NlcyAqLwotI3VuZGVmICBGVF9VU0VfTU9EVUxFCi0jZGVmaW5lIEZUX1VTRV9NT0RVTEUoIHR5cGUsIHggKSAgTU9EVUxFX0NMQVNTXyAjIyB4LAotCi0gIGVudW0KLSAgewotI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAotICAgIEZUX05VTV9NT0RVTEVfQ0xBU1NFUwotICB9OwotCi0gIC8qIGRlc3Ryb3kgYWxsIG1vZHVsZSBjbGFzc2VzICovCi0jdW5kZWYgIEZUX1VTRV9NT0RVTEUKLSNkZWZpbmUgRlRfVVNFX01PRFVMRSggdHlwZSwgeCApICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKCBjbGFzc2VzW2ldICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVF9EZXN0cm95X0NsYXNzXyAjIyB4KCBsaWJyYXJ5LCBjbGFzc2VzW2ldICk7IFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaSsrOwotCi0KLSAgRlRfQkFTRV9ERUYoIHZvaWQgKQotICBmdF9kZXN0cm95X2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfTW9kdWxlX0NsYXNzKiAgKmNsYXNzZXM7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeTsKLSAgICBGVF9VSW50ICAgICAgICAgICAgaTsKLSAgICBCYXNlUElDKiAgICAgICAgICAgcGljX2NvbnRhaW5lciA9IChCYXNlUElDKilsaWJyYXJ5LT5waWNfY29udGFpbmVyLmJhc2U7Ci0KLQotICAgIGlmICggIXBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgKQotICAgICAgcmV0dXJuOwotCi0gICAgbWVtb3J5ICA9IGxpYnJhcnktPm1lbW9yeTsKLSAgICBjbGFzc2VzID0gcGljX2NvbnRhaW5lci0+ZGVmYXVsdF9tb2R1bGVfY2xhc3NlczsKLSAgICBpICAgICAgID0gMDsKLQotI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAotCi0gICAgRlRfRlJFRSggY2xhc3NlcyApOwotICAgIHBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgPSBOVUxMOwotICB9Ci0KLQotICAvKiBpbml0aWFsaXplIGFsbCBtb2R1bGUgY2xhc3NlcyBhbmQgdGhlIHBvaW50ZXIgdGFibGUgKi8KLSN1bmRlZiAgRlRfVVNFX01PRFVMRQotI2RlZmluZSBGVF9VU0VfTU9EVUxFKCB0eXBlLCB4ICkgICAgICAgICAgICAgICAgICAgICBcCi0gIGVycm9yID0gRlRfQ3JlYXRlX0NsYXNzXyAjIyB4KCBsaWJyYXJ5LCAmY2xhenogKTsgIFwKLSAgaWYgKCBlcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdvdG8gRXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNsYXNzZXNbaSsrXSA9IGNsYXp6OwotCi0KLSAgRlRfQkFTRV9ERUYoIEZUX0Vycm9yICkKLSAgZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnk7Ci0gICAgRlRfTW9kdWxlX0NsYXNzKiAgKmNsYXNzZXMgPSBOVUxMOwotICAgIEZUX01vZHVsZV9DbGFzcyogICBjbGF6ejsKLSAgICBGVF9VSW50ICAgICAgICAgICAgaTsKLSAgICBCYXNlUElDKiAgICAgICAgICAgcGljX2NvbnRhaW5lciA9IChCYXNlUElDKilsaWJyYXJ5LT5waWNfY29udGFpbmVyLmJhc2U7Ci0KLQotICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKLQotICAgIHBpY19jb250YWluZXItPmRlZmF1bHRfbW9kdWxlX2NsYXNzZXMgPSBOVUxMOwotCi0gICAgaWYgKCBGVF9BTExPQyggY2xhc3Nlcywgc2l6ZW9mICggRlRfTW9kdWxlX0NsYXNzKiApICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggRlRfTlVNX01PRFVMRV9DTEFTU0VTICsgMSApICkgKQotICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgLyogaW5pdGlhbGl6ZSBhbGwgcG9pbnRlcnMgdG8gMCwgZXNwZWNpYWxseSB0aGUgbGFzdCBvbmUgKi8KLSAgICBmb3IgKCBpID0gMDsgaSA8IEZUX05VTV9NT0RVTEVfQ0xBU1NFUzsgaSsrICkKLSAgICAgIGNsYXNzZXNbaV0gPSBOVUxMOwotICAgIGNsYXNzZXNbRlRfTlVNX01PRFVMRV9DTEFTU0VTXSA9IE5VTEw7Ci0KLSAgICBpID0gMDsKLQotI2luY2x1ZGUgRlRfQ09ORklHX01PRFVMRVNfSAotCi0gIEV4aXQ6Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBmdF9kZXN0cm95X2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMoIGxpYnJhcnkgKTsKLSAgICBlbHNlCi0gICAgICBwaWNfY29udGFpbmVyLT5kZWZhdWx0X21vZHVsZV9jbGFzc2VzID0gY2xhc3NlczsKLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1vZGFwaS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggdm9pZCApCkBAIC0yMDEsMTYgKzgzLDEwIEBACiAgICAgY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCogIGN1cjsKIAogCi0gICAgLyogRlRfREVGQVVMVF9NT0RVTEVTX0dFVCBkZXJlZmVyZW5jZXMgYGxpYnJhcnknIGluIFBJQyBtb2RlICovCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICBpZiAoICFsaWJyYXJ5ICkKLSAgICAgIHJldHVybjsKLSNlbmRpZgotCiAgICAgLyogR0NDIDQuNiB3YXJucyB0aGUgdHlwZSBkaWZmZXJlbmNlOgogICAgICAqICAgRlRfTW9kdWxlX0NsYXNzKiogIT0gY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCoKICAgICAgKi8KLSAgICBjdXIgPSAoY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCopRlRfREVGQVVMVF9NT0RVTEVTX0dFVDsKKyAgICBjdXIgPSAoY29uc3QgRlRfTW9kdWxlX0NsYXNzKiBjb25zdCopZnRfZGVmYXVsdF9tb2R1bGVzOwogCiAgICAgLyogdGVzdCBmb3IgdmFsaWQgYGxpYnJhcnknIGRlbGF5ZWQgdG8gRlRfQWRkX01vZHVsZSgpICovCiAgICAgd2hpbGUgKCAqY3VyICkKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bGNkZmlsLmMgYi9zcmMvYmFzZS9mdGxjZGZpbC5jCmluZGV4IDVjMzg5MTEuLjY1ZWZmOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bGNkZmlsLmMKKysrIGIvc3JjL2Jhc2UvZnRsY2RmaWwuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRsY2RmaWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29sb3IgZmlsdGVyaW5nIG9mIHN1YnBpeGVsIGJpdG1hcCBnbHlwaHMgKGJvZHkpLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRsY2RmaWwuYworICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzQsOSArMzQsOSBAQAogCiAgIC8qIGFkZCBwYWRkaW5nIGFjY29yZGluZyB0byBmaWx0ZXIgd2VpZ2h0cyAqLwogICBGVF9CQVNFX0RFRiAodm9pZCkKLSAgZnRfbGNkX3BhZGRpbmcoIEZUX1BvcyogICAgICAgTWluLAotICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICBNYXgsCi0gICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICBmdF9sY2RfcGFkZGluZyggRlRfQkJveCogICAgICAgIGNib3gsCisgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBtb2RlICkKICAgewogICAgIEZUX0J5dGUqICAgICAgICAgICAgICAgICBsY2Rfd2VpZ2h0czsKICAgICBGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyAgbGNkX2ZpbHRlcl9mdW5jOwpAQCAtNTYsMTAgKzU2LDIwIEBACiAKICAgICBpZiAoIGxjZF9maWx0ZXJfZnVuYyA9PSBmdF9sY2RfZmlsdGVyX2ZpciApCiAgICAgewotICAgICAgKk1pbiAtPSBsY2Rfd2VpZ2h0c1swXSA/IDQzIDoKLSAgICAgICAgICAgICAgbGNkX3dlaWdodHNbMV0gPyAyMiA6IDA7Ci0gICAgICAqTWF4ICs9IGxjZF93ZWlnaHRzWzRdID8gNDMgOgotICAgICAgICAgICAgICBsY2Rfd2VpZ2h0c1szXSA/IDIyIDogMDsKKyAgICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgKQorICAgICAgeworICAgICAgICBjYm94LT54TWluIC09IGxjZF93ZWlnaHRzWzBdID8gNDMgOgorICAgICAgICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzFdID8gMjIgOiAwOworICAgICAgICBjYm94LT54TWF4ICs9IGxjZF93ZWlnaHRzWzRdID8gNDMgOgorICAgICAgICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzNdID8gMjIgOiAwOworICAgICAgfQorICAgICAgZWxzZSBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1YgKQorICAgICAgeworICAgICAgICBjYm94LT55TWluIC09IGxjZF93ZWlnaHRzWzBdID8gNDMgOgorICAgICAgICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzFdID8gMjIgOiAwOworICAgICAgICBjYm94LT55TWF4ICs9IGxjZF93ZWlnaHRzWzRdID8gNDMgOgorICAgICAgICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzNdID8gMjIgOiAwOworICAgICAgfQogICAgIH0KICAgfQogCkBAIC03Nyw3ICs4Nyw3IEBACiAKIAogICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLwotICAgIGlmICggcGl0Y2ggPiAwICkKKyAgICBpZiAoIHBpdGNoID4gMCAmJiBoZWlnaHQgPiAwICkKICAgICAgIG9yaWdpbiArPSBwaXRjaCAqIChGVF9JbnQpKCBoZWlnaHQgLSAxICk7CiAKICAgICAvKiBob3Jpem9udGFsIGluLXBsYWNlIEZJUiBmaWx0ZXIgKi8KQEAgLTE5Miw3ICsyMDIsNyBAQAogCiAKICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KLSAgICBpZiAoIHBpdGNoID4gMCApCisgICAgaWYgKCBwaXRjaCA+IDAgJiYgaGVpZ2h0ID4gMCApCiAgICAgICBvcmlnaW4gKz0gcGl0Y2ggKiAoRlRfSW50KSggaGVpZ2h0IC0gMSApOwogCiAgICAgLyogaG9yaXpvbnRhbCBpbi1wbGFjZSBpbnRyYS1waXhlbCBmaWx0ZXIgKi8KQEAgLTI3NSw2ICsyODUsOCBAQAogI2VuZGlmIC8qIFVTRV9MRUdBQ1kgKi8KIAogCisgIC8qIGRvY3VtZW50YXRpb24gaW4gZnRsY2RmaWwuaCAqLworCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICAqd2VpZ2h0cyApCkBAIC0yOTIsNiArMzA0LDggQEAKICAgfQogCiAKKyAgLyogZG9jdW1lbnRhdGlvbiBpbiBmdGxjZGZpbC5oICovCisKICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQogICBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTGNkRmlsdGVyICBmaWx0ZXIgKQpAQCAtMzQxLDE4ICszNTUsNDEgQEAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CiAKKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCisgIEZUX0xpYnJhcnlfU2V0TGNkR2VvbWV0cnkoIEZUX0xpYnJhcnkgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZlY3RvciogIHN1YiApCisgIHsKKyAgICBGVF9VTlVTRUQoIGxpYnJhcnkgKTsKKyAgICBGVF9VTlVTRUQoIHN1YiApOworCisgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKyAgfQorCiAjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIAotICAvKiBhZGQgcGFkZGluZyBhY2NvcmRpbmcgdG8gYWNjb21tb2RhdGUgb3V0bGluZSBzaGlmdHMgKi8KKyAgLyogYWRkIHBhZGRpbmcgdG8gYWNjb21tb2RhdGUgb3V0bGluZSBzaGlmdHMgKi8KICAgRlRfQkFTRV9ERUYgKHZvaWQpCi0gIGZ0X2xjZF9wYWRkaW5nKCBGVF9Qb3MqICAgICAgIE1pbiwKLSAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAgTWF4LAotICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzbG90ICkKKyAgZnRfbGNkX3BhZGRpbmcoIEZUX0JCb3gqICAgICAgICBjYm94LAorICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgbW9kZSApCiAgIHsKLSAgICBGVF9VTlVTRUQoIHNsb3QgKTsKKyAgICBGVF9WZWN0b3IqICBzdWIgPSBzbG90LT5saWJyYXJ5LT5sY2RfZ2VvbWV0cnk7CiAKLSAgICAqTWluIC09IDIxOwotICAgICpNYXggKz0gMjE7CisgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCApCisgICAgeworICAgICAgY2JveC0+eE1pbiAtPSBGVF9NQVgoIEZUX01BWCggc3ViWzBdLngsIHN1YlsxXS54ICksIHN1YlsyXS54ICk7CisgICAgICBjYm94LT54TWF4IC09IEZUX01JTiggRlRfTUlOKCBzdWJbMF0ueCwgc3ViWzFdLnggKSwgc3ViWzJdLnggKTsKKyAgICAgIGNib3gtPnlNaW4gLT0gRlRfTUFYKCBGVF9NQVgoIHN1YlswXS55LCBzdWJbMV0ueSApLCBzdWJbMl0ueSApOworICAgICAgY2JveC0+eU1heCAtPSBGVF9NSU4oIEZUX01JTiggc3ViWzBdLnksIHN1YlsxXS55ICksIHN1YlsyXS55ICk7CisgICAgfQorICAgIGVsc2UgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRF9WICkKKyAgICB7CisgICAgICBjYm94LT54TWluIC09IEZUX01BWCggRlRfTUFYKCBzdWJbMF0ueSwgc3ViWzFdLnkgKSwgc3ViWzJdLnkgKTsKKyAgICAgIGNib3gtPnhNYXggLT0gRlRfTUlOKCBGVF9NSU4oIHN1YlswXS55LCBzdWJbMV0ueSApLCBzdWJbMl0ueSApOworICAgICAgY2JveC0+eU1pbiArPSBGVF9NSU4oIEZUX01JTiggc3ViWzBdLngsIHN1YlsxXS54ICksIHN1YlsyXS54ICk7CisgICAgICBjYm94LT55TWF4ICs9IEZUX01BWCggRlRfTUFYKCBzdWJbMF0ueCwgc3ViWzFdLnggKSwgc3ViWzJdLnggKTsKKyAgICB9CiAgIH0KIAogCkBAIC0zNzcsNiArNDE0LDI0IEBACiAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKICAgfQogCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpbiBmdGxjZGZpbC5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9MaWJyYXJ5X1NldExjZEdlb21ldHJ5KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICBzdWJbM10gKQorICB7CisgICAgaWYgKCAhbGlicmFyeSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTGlicmFyeV9IYW5kbGUgKTsKKworICAgIGlmICggIXN1YiApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIGZ0X21lbWNweSggbGlicmFyeS0+bGNkX2dlb21ldHJ5LCBzdWIsIDMgKiBzaXplb2YoIEZUX1ZlY3RvciApICk7CisKKyAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICB9CisKICNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG1hYy5jIGIvc3JjL2Jhc2UvZnRtYWMuYwppbmRleCBmZDRjMGNjLi43OWUzZmU0IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG1hYy5jCisrKyBiL3NyYy9iYXNlL2Z0bWFjLmMKQEAgLTEsMjMgKzEsMjMgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bWFjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBNYWMgRk9ORCBzdXBwb3J0LiAgV3JpdHRlbiBieSBqdXN0QGxldHRlcnJvci5jb20uICAgICAgICAgICAgICAgICAgICAqLwotLyogIEhlYXZpbHkgbW9kaWZpZWQgYnkgbXBzdXp1a2ksIEdlb3JnZSBXaWxsaWFtcywgYW5kIFNlYW4gTWNCcmlkZS4gICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIGZvciBNYWMgT1MgWCBvbmx5OyBzZWUgYnVpbGRzL21hYy9mdG9sZG1hYy5jIGZvciAgICAgICAgICAqLwotLyogIGNsYXNzaWMgcGxhdGZvcm1zIGJ1aWx0IGJ5IE1QVy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG1hYy5jCisgKgorICogICBNYWMgRk9ORCBzdXBwb3J0LiAgV3JpdHRlbiBieSBqdXN0QGxldHRlcnJvci5jb20uCisgKiBIZWF2aWx5IG1vZGlmaWVkIGJ5IG1wc3V6dWtpLCBHZW9yZ2UgV2lsbGlhbXMsIGFuZCBTZWFuIE1jQnJpZGUuCisgKgorICogVGhpcyBmaWxlIGlzIGZvciBNYWMgT1MgWCBvbmx5OyBzZWUgYnVpbGRzL21hYy9mdG9sZG1hYy5jIGZvcgorICogY2xhc3NpYyBwbGF0Zm9ybXMgYnVpbHQgYnkgTVBXLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICAgLyoKQEAgLTk1NCwxNyArOTU0LDE3IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX05ld19GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgaXMgdGhlIE1hYy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBGVF9OZXdfRmFjZS4gIEluICAgICAgICAqLwotICAvKiAgICBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgRlRfTmV3X0ZhY2UoKSBmdW5jdGlvbmFsaXR5LCBpdCBhbHNvICAgICAgKi8KLSAgLyogICAgYWNjZXB0cyBwYXRobmFtZXMgdG8gTWFjIHN1aXRjYXNlIGZpbGVzLiAgRm9yIGZ1cnRoZXIgICAgICAgICAgICAgICovCi0gIC8qICAgIGRvY3VtZW50YXRpb24gc2VlIHRoZSBvcmlnaW5hbCBGVF9OZXdfRmFjZSgpIGluIGZyZWV0eXBlLmguICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBGVF9OZXdfRmFjZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhpcyBpcyB0aGUgTWFjLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEZUX05ld19GYWNlLiAgSW4KKyAgICogICBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgRlRfTmV3X0ZhY2UoKSBmdW5jdGlvbmFsaXR5LCBpdCBhbHNvCisgICAqICAgYWNjZXB0cyBwYXRobmFtZXMgdG8gTWFjIHN1aXRjYXNlIGZpbGVzLiAgRm9yIGZ1cnRoZXIKKyAgICogICBkb2N1bWVudGF0aW9uIHNlZSB0aGUgb3JpZ2luYWwgRlRfTmV3X0ZhY2UoKSBpbiBmcmVldHlwZS5oLgorICAgKi8KICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQogICBGVF9OZXdfRmFjZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgcGF0aG5hbWUsCkBAIC05OTUsMTcgKzk5NSwxOCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmIGlzIGlkZW50aWNhbCB0byBGVF9OZXdfRmFjZSBleGNlcHQgaXQgICAgICAgKi8KLSAgLyogICAgYWNjZXB0cyBhbiBGU1JlZiBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBDYXJib24gZGF0YSB0eXBlcyAoRlNSZWYpICAgICAgICAgKi8KLSAgLyogYXJlIG5vdCBjcm9zcy1wbGF0Zm9ybSwgYW5kIHRodXMgbm90IHN1aXRhYmxlIGZvciB0aGUgRnJlZVR5cGUgQVBJLiAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiBpcyBpZGVudGljYWwgdG8gRlRfTmV3X0ZhY2UgZXhjZXB0IGl0CisgICAqICAgYWNjZXB0cyBhbiBGU1JlZiBpbnN0ZWFkIG9mIGEgcGF0aC4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgQ2FyYm9uIGRhdGEgdHlwZXMgKEZTUmVmKQorICAgKiBhcmUgbm90IGNyb3NzLXBsYXRmb3JtLCBhbmQgdGh1cyBub3Qgc3VpdGFibGUgZm9yIHRoZSBGcmVlVHlwZSBBUEkuCisgICAqLwogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNSZWYqICByZWYsCkBAIC0xMDQwLDE2ICsxMDQxLDE3IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjIGlzIGlkZW50aWNhbCB0byBGVF9OZXdfRmFjZSBleGNlcHQgaXQgICAgICAqLwotICAvKiAgICBhY2NlcHRzIGFuIEZTU3BlYyBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIEZTU3BlYyBpcyBkZXByZWNhdGVkIGluIE1hYyBPUyBYICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGVF9OZXdfRmFjZV9Gcm9tX0ZTU3BlYyBpcyBpZGVudGljYWwgdG8gRlRfTmV3X0ZhY2UgZXhjZXB0IGl0CisgICAqICAgYWNjZXB0cyBhbiBGU1NwZWMgaW5zdGVhZCBvZiBhIHBhdGguCisgICAqCisgICAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIEZTU3BlYyBpcyBkZXByZWNhdGVkIGluIE1hYyBPUyBYCisgICAqLwogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX05ld19GYWNlX0Zyb21fRlNTcGVjKCBGVF9MaWJyYXJ5ICAgICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNTcGVjKiAgc3BlYywKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bW0uYyBiL3NyYy9iYXNlL2Z0bW0uYwppbmRleCA4MDA0NDFiLi5iMGQ5ZDRiIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG1tLmMKKysrIGIvc3JjL2Jhc2UvZnRtbS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdG1tLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgTXVsdGlwbGUgTWFzdGVyIGZvbnQgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG1tLmMKKyAqCisgKiAgIE11bHRpcGxlIE1hc3RlciBmb250IHN1cHBvcnQgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX21tCiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b2Jqcy5jIGIvc3JjL2Jhc2UvZnRvYmpzLmMKaW5kZXggOGQwN2UzNS4uMmI0NDQwNSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRvYmpzLmMKKysrIGIvc3JjL2Jhc2UvZnRvYmpzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0b2Jqcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBiYXNlIGNsYXNzZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0b2Jqcy5jCisgKgorICogICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBiYXNlIGNsYXNzZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTc5LDYgKzc5LDE4IEBACiAjcHJhZ21hIHdhcm5pbmcoIHBvcCApCiAjZW5kaWYKIAorICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIHBpeGVsX21vZGVzW10gPQorICB7CisgICAgIm5vbmUiLAorICAgICJtb25vY2hyb21lIGJpdG1hcCIsCisgICAgImdyYXkgOC1iaXQgYml0bWFwIiwKKyAgICAiZ3JheSAyLWJpdCBiaXRtYXAiLAorICAgICJncmF5IDQtYml0IGJpdG1hcCIsCisgICAgIkxDRCA4LWJpdCBiaXRtYXAiLAorICAgICJ2ZXJ0aWNhbCBMQ0QgOC1iaXQgYml0bWFwIiwKKyAgICAiQkdSQSAzMi1iaXQgY29sb3IgaW1hZ2UgYml0bWFwIgorICB9OworCiAjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KIAogCkBAIC0yNTksMTIgKzI3MSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb2JqcwogCkBAIC0zNzQsNDEgKzM4NiwzNSBAQAogICAgICAgLyogdW5sZXNzIHRoZSByb3VuZGVkIGJveCBjYW4gY29sbGFwc2UgZm9yIGEgbmFycm93IGdseXBoICovCiAgICAgICBpZiAoIGNib3gueE1heCAtIGNib3gueE1pbiA8IDY0ICkKICAgICAgIHsKLSAgICAgICAgY2JveC54TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnhNaW4gKTsKLSAgICAgICAgY2JveC54TWF4ID0gRlRfUElYX0NFSUxfTE9ORyggY2JveC54TWF4ICk7CisgICAgICAgIGNib3gueE1pbiA9ICggY2JveC54TWluICsgY2JveC54TWF4ICkgLyAyIC0gMzI7CisgICAgICAgIGNib3gueE1heCA9IGNib3gueE1pbiArIDY0OwogICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjYm94LnhNaW4gPSBGVF9QSVhfUk9VTkRfTE9ORyggY2JveC54TWluICk7Ci0gICAgICAgIGNib3gueE1heCA9IEZUX1BJWF9ST1VORF9MT05HKCBjYm94LnhNYXggKTsKLSAgICAgIH0KKworICAgICAgY2JveC54TWluID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueE1pbiApOworICAgICAgY2JveC54TWF4ID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueE1heCApOwogCiAgICAgICBpZiAoIGNib3gueU1heCAtIGNib3gueU1pbiA8IDY0ICkKICAgICAgIHsKLSAgICAgICAgY2JveC55TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnlNaW4gKTsKLSAgICAgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUxfTE9ORyggY2JveC55TWF4ICk7CisgICAgICAgIGNib3gueU1pbiA9ICggY2JveC55TWluICsgY2JveC55TWF4ICkgLyAyIC0gMzI7CisgICAgICAgIGNib3gueU1heCA9IGNib3gueU1pbiArIDY0OwogICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBjYm94LnlNaW4gPSBGVF9QSVhfUk9VTkRfTE9ORyggY2JveC55TWluICk7Ci0gICAgICAgIGNib3gueU1heCA9IEZUX1BJWF9ST1VORF9MT05HKCBjYm94LnlNYXggKTsKLSAgICAgIH0KLSNlbHNlCi0gICAgICBjYm94LnhNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueE1pbiApOwotICAgICAgY2JveC55TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnlNaW4gKTsKLSAgICAgIGNib3gueE1heCA9IEZUX1BJWF9DRUlMX0xPTkcoIGNib3gueE1heCApOwotICAgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUxfTE9ORyggY2JveC55TWF4ICk7Ci0jZW5kaWYKKworICAgICAgY2JveC55TWluID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueU1pbiApOworICAgICAgY2JveC55TWF4ID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueU1heCApOworCiAgICAgICBicmVhazsKKyNlbHNlCisgICAgICBnb3RvIFJvdW5kOworI2VuZGlmCiAKICAgICBjYXNlIEZUX1JFTkRFUl9NT0RFX0xDRDoKICAgICAgIHBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0xDRDsKLSAgICAgIGZ0X2xjZF9wYWRkaW5nKCAmY2JveC54TWluLCAmY2JveC54TWF4LCBzbG90ICk7CisgICAgICBmdF9sY2RfcGFkZGluZyggJmNib3gsIHNsb3QsIG1vZGUgKTsKICAgICAgIGdvdG8gUm91bmQ7CiAKICAgICBjYXNlIEZUX1JFTkRFUl9NT0RFX0xDRF9WOgogICAgICAgcGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTENEX1Y7Ci0gICAgICBmdF9sY2RfcGFkZGluZyggJmNib3gueU1pbiwgJmNib3gueU1heCwgc2xvdCApOworICAgICAgZnRfbGNkX3BhZGRpbmcoICZjYm94LCBzbG90LCBtb2RlICk7CiAgICAgICBnb3RvIFJvdW5kOwogCiAgICAgY2FzZSBGVF9SRU5ERVJfTU9ERV9OT1JNQUw6CkBAIC05OTUsNiArMTAwMSw5IEBACiAgICAgICB9CiAgICAgfQogCisgICAgc2xvdC0+Z2x5cGhfaW5kZXggICAgICAgICAgPSBnbHlwaF9pbmRleDsKKyAgICBzbG90LT5pbnRlcm5hbC0+bG9hZF9mbGFncyA9IGxvYWRfZmxhZ3M7CisKICAgICAvKiBkbyB3ZSBuZWVkIHRvIHJlbmRlciB0aGUgaW1hZ2Ugb3IgcHJlc2V0IHRoZSBiaXRtYXAgbm93PyAqLwogICAgIGlmICggIWVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICAgICYmCkBAIC0xMDE0LDE3ICsxMDIzLDIxIEBACiAgICAgICAgIGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKCBzbG90LCBtb2RlLCBOVUxMICk7CiAgICAgfQogCi0gICAgRlRfVFJBQ0U1KCggIkZUX0xvYWRfR2x5cGg6IGluZGV4ICVkLCBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyAgICAgICAgICAgICAgICkpOworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgRlRfVFJBQ0U1KCggIkZUX0xvYWRfR2x5cGg6IGluZGV4ICVkLCBmbGFncyAweCV4XG4iLAorICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBsb2FkX2ZsYWdzICkpOwogICAgIEZUX1RSQUNFNSgoICIgIHggYWR2YW5jZTogJWZcbiIsIHNsb3QtPmFkdmFuY2UueCAvIDY0LjAgKSk7CiAgICAgRlRfVFJBQ0U1KCggIiAgeSBhZHZhbmNlOiAlZlxuIiwgc2xvdC0+YWR2YW5jZS55IC8gNjQuMCApKTsKICAgICBGVF9UUkFDRTUoKCAiICBsaW5lYXIgeCBhZHZhbmNlOiAlZlxuIiwKICAgICAgICAgICAgICAgICBzbG90LT5saW5lYXJIb3JpQWR2YW5jZSAvIDY1NTM2LjAgKSk7CiAgICAgRlRfVFJBQ0U1KCggIiAgbGluZWFyIHkgYWR2YW5jZTogJWZcbiIsCiAgICAgICAgICAgICAgICAgc2xvdC0+bGluZWFyVmVydEFkdmFuY2UgLyA2NTUzNi4wICkpOwotICAgIEZUX1RSQUNFNSgoICIgIGJpdG1hcCAlZHglZCwgbW9kZSAlZFxuIiwKLSAgICAgICAgICAgICAgICBzbG90LT5iaXRtYXAud2lkdGgsIHNsb3QtPmJpdG1hcC5yb3dzLAotICAgICAgICAgICAgICAgIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlICAgICAgICAgICAgICAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgYml0bWFwICVkeCVkLCAlcyAobW9kZSAlZClcbiIsCisgICAgICAgICAgICAgICAgc2xvdC0+Yml0bWFwLndpZHRoLAorICAgICAgICAgICAgICAgIHNsb3QtPmJpdG1hcC5yb3dzLAorICAgICAgICAgICAgICAgIHBpeGVsX21vZGVzW3Nsb3QtPmJpdG1hcC5waXhlbF9tb2RlXSwKKyAgICAgICAgICAgICAgICBzbG90LT5iaXRtYXAucGl4ZWxfbW9kZSApKTsKKyNlbmRpZgogCiAgIEV4aXQ6CiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMTE2MiwyMCArMTE3NSwyMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmaW5kX3VuaWNvZGVfY2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgVW5pY29kZSBjaGFybWFwLCBpZiB0aGVyZSBpcyBvbmUuICAgICAgICAgICAgKi8KLSAgLyogICAgQW5kIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUsIGl0IHRyaWVzIHRvIGZhdm91ciB0aGUgbW9yZSAgICAgICAgICovCi0gIC8qICAgIGV4dGVuc2l2ZSBvbmUsIGkuZS4sIG9uZSB0aGF0IHN1cHBvcnRzIFVDUy00IGFnYWluc3QgdGhvc2Ugd2hpY2ggICAqLwotICAvKiAgICBhcmUgbGltaXRlZCB0byB0aGUgQk1QIChzYWlkIFVDUy0yIGVuY29kaW5nLikgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gb3Blbl9mYWNlKCkgKGp1c3QgYmVsb3cpLCBhbmQgYWxzbyAgICAqLwotICAvKiAgICBmcm9tIEZUX1NlbGVjdF9DaGFybWFwKCAuLi4sIEZUX0VOQ09ESU5HX1VOSUNPREUgKS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgZmluZF91bmljb2RlX2NoYXJtYXAKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBVbmljb2RlIGNoYXJtYXAsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICogICBBbmQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSwgaXQgdHJpZXMgdG8gZmF2b3VyIHRoZSBtb3JlCisgICAqICAgZXh0ZW5zaXZlIG9uZSwgaS5lLiwgb25lIHRoYXQgc3VwcG9ydHMgVUNTLTQgYWdhaW5zdCB0aG9zZSB3aGljaAorICAgKiAgIGFyZSBsaW1pdGVkIHRvIHRoZSBCTVAgKHNhaWQgVUNTLTIgZW5jb2RpbmcuKQorICAgKgorICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gb3Blbl9mYWNlKCkgKGp1c3QgYmVsb3cpLCBhbmQgYWxzbworICAgKiAgIGZyb20gRlRfU2VsZWN0X0NoYXJtYXAoIC4uLiwgRlRfRU5DT0RJTkdfVU5JQ09ERSApLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIGZpbmRfdW5pY29kZV9jaGFybWFwKCBGVF9GYWNlICBmYWNlICkKICAgewpAQCAtMTE5MiwyNiArMTIwNSwyNiBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0NoYXJNYXBfSGFuZGxlICk7CiAKICAgICAvKgotICAgICAqICBUaGUgb3JpZ2luYWwgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbihzKSBvbmx5IHNwZWNpZmllZCBjaGFybWFwCi0gICAgICogIGZvcm1hdHMgdGhhdCBhcmUgY2FwYWJsZSBvZiBtYXBwaW5nIDggb3IgMTYgYml0IGNoYXJhY3RlciBjb2RlcyB0bwotICAgICAqICBnbHlwaCBpbmRpY2VzLgorICAgICAqIFRoZSBvcmlnaW5hbCBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uKHMpIG9ubHkgc3BlY2lmaWVkIGNoYXJtYXAKKyAgICAgKiBmb3JtYXRzIHRoYXQgYXJlIGNhcGFibGUgb2YgbWFwcGluZyA4IG9yIDE2IGJpdCBjaGFyYWN0ZXIgY29kZXMgdG8KKyAgICAgKiBnbHlwaCBpbmRpY2VzLgogICAgICAqCi0gICAgICogIEhvd2V2ZXIsIHJlY2VudCB1cGRhdGVzIHRvIHRoZSBBcHBsZSBhbmQgT3BlblR5cGUgc3BlY2lmaWNhdGlvbnMKLSAgICAgKiAgaW50cm9kdWNlZCBuZXcgZm9ybWF0cyB0aGF0IGFyZSBjYXBhYmxlIG9mIG1hcHBpbmcgMzItYml0IGNoYXJhY3RlcgotICAgICAqICBjb2RlcyBhcyB3ZWxsLiAgQW5kIHRoZXNlIGFyZSBhbHJlYWR5IHVzZWQgb24gc29tZSBmb250cywgbWFpbmx5IHRvCi0gICAgICogIG1hcCBub24tQk1QIEFzaWFuIGlkZW9ncmFwaHMgYXMgZGVmaW5lZCBpbiBVbmljb2RlLgorICAgICAqIEhvd2V2ZXIsIHJlY2VudCB1cGRhdGVzIHRvIHRoZSBBcHBsZSBhbmQgT3BlblR5cGUgc3BlY2lmaWNhdGlvbnMKKyAgICAgKiBpbnRyb2R1Y2VkIG5ldyBmb3JtYXRzIHRoYXQgYXJlIGNhcGFibGUgb2YgbWFwcGluZyAzMi1iaXQgY2hhcmFjdGVyCisgICAgICogY29kZXMgYXMgd2VsbC4gIEFuZCB0aGVzZSBhcmUgYWxyZWFkeSB1c2VkIG9uIHNvbWUgZm9udHMsIG1haW5seSB0bworICAgICAqIG1hcCBub24tQk1QIEFzaWFuIGlkZW9ncmFwaHMgYXMgZGVmaW5lZCBpbiBVbmljb2RlLgogICAgICAqCi0gICAgICogIEZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLCB0aGVzZSBmb250cyBnZW5lcmFsbHkgY29tZSB3aXRoCi0gICAgICogICpzZXZlcmFsKiBVbmljb2RlIGNoYXJtYXBzOgorICAgICAqIEZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLCB0aGVzZSBmb250cyBnZW5lcmFsbHkgY29tZSB3aXRoCisgICAgICogKnNldmVyYWwqIFVuaWNvZGUgY2hhcm1hcHM6CiAgICAgICoKLSAgICAgKiAgIC0gT25lIG9mIHRoZW0gaW4gdGhlICJvbGQiIDE2LWJpdCBmb3JtYXQsIHRoYXQgY2Fubm90IGFjY2VzcwotICAgICAqICAgICBhbGwgZ2x5cGhzIGluIHRoZSBmb250LgorICAgICAqIC0gT25lIG9mIHRoZW0gaW4gdGhlICJvbGQiIDE2LWJpdCBmb3JtYXQsIHRoYXQgY2Fubm90IGFjY2VzcworICAgICAqICAgYWxsIGdseXBocyBpbiB0aGUgZm9udC4KICAgICAgKgotICAgICAqICAgLSBBbm90aGVyIG9uZSBpbiB0aGUgIm5ldyIgMzItYml0IGZvcm1hdCwgdGhhdCBjYW4gYWNjZXNzIGFsbAotICAgICAqICAgICB0aGUgZ2x5cGhzLgorICAgICAqIC0gQW5vdGhlciBvbmUgaW4gdGhlICJuZXciIDMyLWJpdCBmb3JtYXQsIHRoYXQgY2FuIGFjY2VzcyBhbGwKKyAgICAgKiAgIHRoZSBnbHlwaHMuCiAgICAgICoKLSAgICAgKiAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiB3cml0dGVuIHRvIGFsd2F5cyBmYXZvciBhIDMyLWJpdCBjaGFybWFwCi0gICAgICogIHdoZW4gZm91bmQuICBPdGhlcndpc2UsIGEgMTYtYml0IG9uZSBpcyByZXR1cm5lZCB3aGVuIGZvdW5kLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gd3JpdHRlbiB0byBhbHdheXMgZmF2b3IgYSAzMi1iaXQgY2hhcm1hcAorICAgICAqIHdoZW4gZm91bmQuICBPdGhlcndpc2UsIGEgMTYtYml0IG9uZSBpcyByZXR1cm5lZCB3aGVuIGZvdW5kLgogICAgICAqLwogCiAgICAgLyogU2luY2UgdGhlIGBpbnRlcmVzdGluZycgdGFibGUsIHdpdGggSURzICgzLDEwKSwgaXMgbm9ybWFsbHkgdGhlICovCkBAIC0xMjU1LDE1ICsxMjY4LDE1IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIHZhcmlhbnQgc2VsZWN0b3IgY2hhcm1hcCwgaWYgdGhlcmUgaXMgb25lLiAqLwotICAvKiAgICBUaGVyZSBjYW4gb25seSBiZSBvbmUgKHBsYXRmb3JtPTAsIHNwZWNpZmljPTUsIGZvcm1hdD0xNCkuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgZmluZF92YXJpYW50X3NlbGVjdG9yX2NoYXJtYXAKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIHZhcmlhbnQgc2VsZWN0b3IgY2hhcm1hcCwgaWYgdGhlcmUgaXMgb25lLgorICAgKiAgIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSAocGxhdGZvcm09MCwgc3BlY2lmaWM9NSwgZm9ybWF0PTE0KS4KKyAgICovCiAgIHN0YXRpYyBGVF9DaGFyTWFwCiAgIGZpbmRfdmFyaWFudF9zZWxlY3Rvcl9jaGFybWFwKCBGVF9GYWNlICBmYWNlICkKICAgewpAQCAtMTI5NCwxNCArMTMwNywxNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvcGVuX2ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSB3b3JrIGZvciBGVF9PcGVuX0ZhY2UoKS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgb3Blbl9mYWNlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXMgc29tZSB3b3JrIGZvciBGVF9PcGVuX0ZhY2UoKS4KKyAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgogICBvcGVuX2ZhY2UoIEZUX0RyaXZlciAgICAgIGRyaXZlciwKICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAqYXN0cmVhbSwKQEAgLTIxODIsNyArMjE5NSw3IEBACiAgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FUlIoIFVua25vd25fRmlsZV9Gb3JtYXQgKTsKICAgICBGVF9VSW50ICAgIGk7CiAKLSAgICBjaGFyICogICAgIGZpbGVfbmFtZXNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKKyAgICBjaGFyKiAgICAgIGZpbGVfbmFtZXNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKICAgICBGVF9Mb25nICAgIG9mZnNldHNbRlRfUkFDQ0VTU19OX1JVTEVTXTsKICAgICBGVF9FcnJvciAgIGVycm9yc1tGVF9SQUNDRVNTX05fUlVMRVNdOwogICAgIEZUX0Jvb2wgICAgaXNfZGFyd2luX3ZmcywgdmZzX3Jmb3JrX2hhc19ub19mb250ID0gRkFMU0U7IC8qIG5vdCB0ZXN0ZWQgKi8KQEAgLTM0NjQsNyArMzQ3Nyw4IEBACiAgICAgaWYgKCAhZmFjZSApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKIAotICAgIGlmICggZW5jb2RpbmcgPT0gRlRfRU5DT0RJTkdfTk9ORSApCisgICAgLyogRlRfRU5DT0RJTkdfTk9ORSBpcyBhIHZhbGlkIGVuY29kaW5nIGZvciBCREYsIFBDRiwgYW5kIFdpbmRvd3MgRk5UICovCisgICAgaWYgKCBlbmNvZGluZyA9PSBGVF9FTkNPRElOR19OT05FICYmICFmYWNlLT5udW1fY2hhcm1hcHMgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICAvKiBGVF9FTkNPRElOR19VTklDT0RFIGlzIHNwZWNpYWwuICBXZSB0cnkgdG8gZmluZCB0aGUgYGJlc3QnIFVuaWNvZGUgKi8KQEAgLTM0ODUsNyArMzQ5OSw3IEBACiAgICAgICBpZiAoIGN1clswXS0+ZW5jb2RpbmcgPT0gZW5jb2RpbmcgKQogICAgICAgewogICAgICAgICBmYWNlLT5jaGFybWFwID0gY3VyWzBdOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgICAgIH0KICAgICB9CiAKQEAgLTM1MTAsMTQgKzM1MjQsMTIgQEAKICAgICBpZiAoICFjdXIgfHwgIWNoYXJtYXAgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0NoYXJNYXBfSGFuZGxlICk7CiAKLSAgICBpZiAoIEZUX0dldF9DTWFwX0Zvcm1hdCggY2hhcm1hcCApID09IDE0ICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCiAgICAgbGltaXQgPSBjdXIgKyBmYWNlLT5udW1fY2hhcm1hcHM7CiAKICAgICBmb3IgKCA7IGN1ciA8IGxpbWl0OyBjdXIrKyApCiAgICAgewotICAgICAgaWYgKCBjdXJbMF0gPT0gY2hhcm1hcCApCisgICAgICBpZiAoIGN1clswXSA9PSBjaGFybWFwICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBGVF9HZXRfQ01hcF9Gb3JtYXQgKCBjaGFybWFwICkgIT0gMTQgKQogICAgICAgewogICAgICAgICBmYWNlLT5jaGFybWFwID0gY3VyWzBdOwogICAgICAgICByZXR1cm4gRlRfRXJyX09rOwpAQCAtNDQ4NywxNiArNDQ5OSw4OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICByZW5kZXJfbW9kZSApCiAgIHsKICAgICBGVF9FcnJvciAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgRlRfRmFjZSAgICAgIGZhY2UgID0gc2xvdC0+ZmFjZTsKICAgICBGVF9SZW5kZXJlciAgcmVuZGVyZXI7CiAKIAotICAgIC8qIGlmIGl0IGlzIGFscmVhZHkgYSBiaXRtYXAsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KICAgICBzd2l0Y2ggKCBzbG90LT5mb3JtYXQgKQogICAgIHsKICAgICBjYXNlIEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA6ICAgLyogYWxyZWFkeSBhIGJpdG1hcCwgZG9uJ3QgZG8gYW55dGhpbmcgKi8KICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKKyAgICAgIGlmICggc2xvdC0+aW50ZXJuYWwtPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX0NPTE9SICkKKyAgICAgIHsKKyAgICAgICAgRlRfTGF5ZXJJdGVyYXRvciAgaXRlcmF0b3I7CisKKyAgICAgICAgRlRfVUludCAgYmFzZV9nbHlwaCA9IHNsb3QtPmdseXBoX2luZGV4OworCisgICAgICAgIEZUX0Jvb2wgIGhhdmVfbGF5ZXJzOworICAgICAgICBGVF9VSW50ICBnbHlwaF9pbmRleDsKKyAgICAgICAgRlRfVUludCAgY29sb3JfaW5kZXg7CisKKworICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgY29sb3JlZCBnbHlwaCBsYXllcnMgKi8KKyAgICAgICAgaXRlcmF0b3IucCAgPSBOVUxMOworICAgICAgICBoYXZlX2xheWVycyA9IEZUX0dldF9Db2xvcl9HbHlwaF9MYXllciggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlcmF0b3IgKTsKKyAgICAgICAgaWYgKCBoYXZlX2xheWVycyApCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvciA9IEZUX05ld19HbHlwaFNsb3QoIGZhY2UsIE5VTEwgKTsKKyAgICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICAgeworICAgICAgICAgICAgVFRfRmFjZSAgICAgICB0dGZhY2UgPSAoVFRfRmFjZSlmYWNlOworICAgICAgICAgICAgU0ZOVF9TZXJ2aWNlICBzZm50ICAgPSAoU0ZOVF9TZXJ2aWNlKXR0ZmFjZS0+c2ZudDsKKworCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9JbnQzMiAgbG9hZF9mbGFncyA9IHNsb3QtPmludGVybmFsLT5sb2FkX2ZsYWdzOworCisKKyAgICAgICAgICAgICAgLyogZGlzYWJsZSB0aGUgYEZUX0xPQURfQ09MT1InIGZsYWcgdG8gYXZvaWQgcmVjdXJzaW9uICovCisgICAgICAgICAgICAgIC8qIHJpZ2h0IGhlcmUgaW4gdGhpcyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICBsb2FkX2ZsYWdzICY9IH5GVF9MT0FEX0NPTE9SOworCisgICAgICAgICAgICAgIC8qIHJlbmRlciBpbnRvIHRoZSBuZXcgYGZhY2UtPmdseXBoJyBnbHlwaCBzbG90ICovCisgICAgICAgICAgICAgIGxvYWRfZmxhZ3MgfD0gRlRfTE9BRF9SRU5ERVI7CisKKyAgICAgICAgICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAvKiBibGVuZCBuZXcgYGZhY2UtPmdseXBoJyBpbnRvIG9sZCBgc2xvdCc7ICovCisgICAgICAgICAgICAgIC8qIGF0IHRoZSBmaXJzdCBjYWxsLCBgc2xvdCcgaXMgc3RpbGwgZW1wdHkgKi8KKyAgICAgICAgICAgICAgZXJyb3IgPSBzZm50LT5jb2xyX2JsZW5kKCB0dGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5nbHlwaCApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgfSB3aGlsZSAoIEZUX0dldF9Db2xvcl9HbHlwaF9MYXllciggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlcmF0b3IgKSApOworCisgICAgICAgICAgICBpZiAoICFlcnJvciApCisgICAgICAgICAgICAgIHNsb3QtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA7CisKKyAgICAgICAgICAgIC8qIHRoaXMgY2FsbCBhbHNvIHJlc3RvcmVzIGBzbG90JyBhcyB0aGUgZ2x5cGggc2xvdCAqLworICAgICAgICAgICAgRlRfRG9uZV9HbHlwaFNsb3QoIGZhY2UtPmdseXBoICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAgICAgLyogRmFpbGVkIHRvIGRvIHRoZSBjb2xvcmVkIGxheWVyLiAgRHJhdyBvdXRsaW5lIGluc3RlYWQuICovCisgICAgICAgICAgc2xvdC0+Zm9ybWF0ID0gRlRfR0xZUEhfRk9STUFUX09VVExJTkU7CisgICAgICAgIH0KKyAgICAgIH0KKwogICAgICAgewogICAgICAgICBGVF9MaXN0Tm9kZSAgbm9kZSA9IE5VTEw7CiAKQEAgLTQ1MzIsNyArNDYxNyw3IEBACiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKIAogI3VuZGVmICBGVF9DT01QT05FTlQKLSNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9iaXRtYXAKKyNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jaGVja3N1bQogCiAgICAgLyoKICAgICAgKiBDb21wdXRpbmcgdGhlIE1ENSBjaGVja3N1bSBpcyBleHBlbnNpdmUsIHVubmVjZXNzYXJpbHkgZGlzdG9ydGluZyBhCkBAIC00NTQyLDkgKzQ2MjcsOSBAQAogICAgICAqLwogCiAgICAgLyogd2UgdXNlIEZUX1RSQUNFMyBpbiB0aGlzIGJsb2NrICovCi0gICAgaWYgKCAhZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBmdF90cmFjZV9sZXZlbHNbdHJhY2VfYml0bWFwXSA+PSAzICYmCi0gICAgICAgICBzbG90LT5iaXRtYXAuYnVmZmVyICAgICAgICAgICAgICAgICkKKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW3RyYWNlX2NoZWNrc3VtXSA+PSAzICYmCisgICAgICAgICBzbG90LT5iaXRtYXAuYnVmZmVyICAgICAgICAgICAgICAgICAgKQogICAgIHsKICAgICAgIEZUX0JpdG1hcCAgYml0bWFwOwogICAgICAgRlRfRXJyb3IgICBlcnI7CkBAIC00NTY1LDggKzQ2NTAsMTEgQEAKICAgICAgICAgaW50ICAgICAgICAgICAgcGl0Y2ggPSBiaXRtYXAucGl0Y2g7CiAKIAotICAgICAgICBGVF9UUkFDRTMoKCAiRlRfUmVuZGVyX0dseXBoOiBiaXRtYXAgJWR4JWQsIG1vZGUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJvd3MsIHBpdGNoLCBzbG90LT5iaXRtYXAucGl4ZWxfbW9kZSApKTsKKyAgICAgICAgRlRfVFJBQ0UzKCggIkZUX1JlbmRlcl9HbHlwaDogYml0bWFwICVkeCVkLCAlcyAobW9kZSAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHBpdGNoLAorICAgICAgICAgICAgICAgICAgICByb3dzLAorICAgICAgICAgICAgICAgICAgICBwaXhlbF9tb2Rlc1tzbG90LT5iaXRtYXAucGl4ZWxfbW9kZV0sCisgICAgICAgICAgICAgICAgICAgIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlICkpOwogCiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkKICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBpdGNoOyBqKysgKQpAQCAtNDU5NCw0NSArNDY4Miw1MiBAQAogICAgICAqLwogCiAgICAgLyogd2UgdXNlIEZUX1RSQUNFNyBpbiB0aGlzIGJsb2NrICovCi0gICAgaWYgKCAhZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBmdF90cmFjZV9sZXZlbHNbdHJhY2VfYml0bWFwXSA+PSA3ICYmCi0gICAgICAgICBzbG90LT5iaXRtYXAucm93cyAgPCAxMjhVICAgICAgICAgICYmCi0gICAgICAgICBzbG90LT5iaXRtYXAud2lkdGggPCAxMjhVICAgICAgICAgICYmCi0gICAgICAgICBzbG90LT5iaXRtYXAuYnVmZmVyICAgICAgICAgICAgICAgICkKKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZnRfdHJhY2VfbGV2ZWxzW3RyYWNlX2NoZWNrc3VtXSA+PSA3ICkKICAgICB7Ci0gICAgICBpbnQgIHJvd3MgID0gKGludClzbG90LT5iaXRtYXAucm93czsKLSAgICAgIGludCAgd2lkdGggPSAoaW50KXNsb3QtPmJpdG1hcC53aWR0aDsKLSAgICAgIGludCAgcGl0Y2ggPSAgICAgIHNsb3QtPmJpdG1hcC5waXRjaDsKLSAgICAgIGludCAgaSwgaiwgbTsKLSAgICAgIHVuc2lnbmVkIGNoYXIqICB0b3BsZWZ0ID0gc2xvdC0+Yml0bWFwLmJ1ZmZlcjsKLQotICAgICAgaWYgKCBwaXRjaCA8IDAgKQotICAgICAgICB0b3BsZWZ0IC09IHBpdGNoICogKCByb3dzIC0gMSApOwotCi0gICAgICBGVF9UUkFDRTcoKCAiTmV0cGJtIGltYWdlOiBzdGFydFxuIiApKTsKLSAgICAgIHN3aXRjaCAoIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlICkKKyAgICAgIGlmICggc2xvdC0+Yml0bWFwLnJvd3MgIDwgMTI4VSAmJgorICAgICAgICAgICBzbG90LT5iaXRtYXAud2lkdGggPCAxMjhVICYmCisgICAgICAgICAgIHNsb3QtPmJpdG1hcC5idWZmZXIgICAgICAgKQogICAgICAgewotICAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86Ci0gICAgICAgIEZUX1RSQUNFNygoICJQMSAlZCAlZFxuIiwgd2lkdGgsIHJvd3MgKSk7Ci0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgd2lkdGg7ICkKLSAgICAgICAgICAgIGZvciAoIG0gPSAxMjg7IG0gPiAwICYmIGogPCB3aWR0aDsgbSA+Pj0gMSwgaisrICkKLSAgICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlZCIsICggdG9wbGVmdFtpICogcGl0Y2ggKyBqIC8gOF0gJiBtICkgIT0gMCApKTsKLSAgICAgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICBpbnQgIHJvd3MgID0gKGludClzbG90LT5iaXRtYXAucm93czsKKyAgICAgICAgaW50ICB3aWR0aCA9IChpbnQpc2xvdC0+Yml0bWFwLndpZHRoOworICAgICAgICBpbnQgIHBpdGNoID0gICAgICBzbG90LT5iaXRtYXAucGl0Y2g7CisgICAgICAgIGludCAgaSwgaiwgbTsKIAotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRlRfVFJBQ0U3KCggIlAyICVkICVkIDI1NVxuIiwgd2lkdGgsIHJvd3MgKSk7Ci0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkKKyAgICAgICAgdW5zaWduZWQgY2hhciogIHRvcGxlZnQgPSBzbG90LT5iaXRtYXAuYnVmZmVyOworCisKKyAgICAgICAgaWYgKCBwaXRjaCA8IDAgKQorICAgICAgICAgIHRvcGxlZnQgLT0gcGl0Y2ggKiAoIHJvd3MgLSAxICk7CisKKyAgICAgICAgRlRfVFJBQ0U3KCggIk5ldHBibSBpbWFnZTogc3RhcnRcbiIgKSk7CisgICAgICAgIHN3aXRjaCAoIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlICkKICAgICAgICAgewotICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgd2lkdGg7IGogKz0gMSApCi0gICAgICAgICAgICBGVF9UUkFDRTcoKCAiICUzdSIsIHRvcGxlZnRbaSAqIHBpdGNoICsgal0gKSk7Ci0gICAgICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKyAgICAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86CisgICAgICAgICAgRlRfVFJBQ0U3KCggIlAxICVkICVkXG4iLCB3aWR0aCwgcm93cyApKTsKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHJvd3M7IGkrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB3aWR0aDsgKQorICAgICAgICAgICAgICBmb3IgKCBtID0gMTI4OyBtID4gMCAmJiBqIDwgd2lkdGg7IG0gPj49IDEsIGorKyApCisgICAgICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0b3BsZWZ0W2kgKiBwaXRjaCArIGogLyA4XSAmIG0gKSAhPSAwICkpOworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiUDIgJWQgJWQgMjU1XG4iLCB3aWR0aCwgcm93cyApKTsKKyAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHJvd3M7IGkrKyApCisgICAgICAgICAgeworICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB3aWR0aDsgaiArPSAxICkKKyAgICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlM3UiLCB0b3BsZWZ0W2kgKiBwaXRjaCArIGpdICkpOworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIlxuIiApKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgRlRfVFJBQ0U3KCggIk5ldHBibSBpbWFnZTogZW5kXG4iICkpOwogICAgICAgfQotICAgICAgRlRfVFJBQ0U3KCggIk5ldHBibSBpbWFnZTogZW5kXG4iICkpOworICAgICAgZWxzZQorICAgICAgICBGVF9UUkFDRTcoKCAiTmV0cGJtIGltYWdlOiB0b28gbGFyZ2UsIG9taXR0ZWRcbiIgKSk7CiAgICAgfQogCiAjdW5kZWYgIEZUX0NPTVBPTkVOVApAQCAtNDY3NSwyMSArNDc3MCwyMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlc3Ryb3lfTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlc3Ryb3lzIGEgZ2l2ZW4gbW9kdWxlIG9iamVjdC4gIEZvciBkcml2ZXJzLCB0aGlzIGFsc28gZGVzdHJveXMgICAqLwotICAvKiAgICBhbGwgY2hpbGQgZmFjZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtb2R1bGUgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZHJpdmVyIF9tdXN0XyBiZSBMT0NLRUQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgRGVzdHJveV9Nb2R1bGUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3lzIGEgZ2l2ZW4gbW9kdWxlIG9iamVjdC4gIEZvciBkcml2ZXJzLCB0aGlzIGFsc28gZGVzdHJveXMKKyAgICogICBhbGwgY2hpbGQgZmFjZXMuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBtb2R1bGUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgVGhlIGRyaXZlciBfbXVzdF8gYmUgTE9DS0VEIQorICAgKi8KICAgc3RhdGljIHZvaWQKICAgRGVzdHJveV9Nb2R1bGUoIEZUX01vZHVsZSAgbW9kdWxlICkKICAgewpAQCAtNTE1NiwxMyArNTI1Miw2IEBACiAKICAgICBsaWJyYXJ5LT5tZW1vcnkgPSBtZW1vcnk7CiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIC8qIGluaXRpYWxpemUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBjb250YWluZXJzICovCi0gICAgZXJyb3IgPSBmdF9waWNfY29udGFpbmVyX2luaXQoIGxpYnJhcnkgKTsKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGdvdG8gRmFpbDsKLSNlbmRpZgotCiAgICAgbGlicmFyeS0+dmVyc2lvbl9tYWpvciA9IEZSRUVUWVBFX01BSk9SOwogICAgIGxpYnJhcnktPnZlcnNpb25fbWlub3IgPSBGUkVFVFlQRV9NSU5PUjsKICAgICBsaWJyYXJ5LT52ZXJzaW9uX3BhdGNoID0gRlJFRVRZUEVfUEFUQ0g7CkBAIC01MTczLDEzICs1MjYyLDYgQEAKICAgICAqYWxpYnJhcnkgPSBsaWJyYXJ5OwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0gIEZhaWw6Ci0gICAgZnRfcGljX2NvbnRhaW5lcl9kZXN0cm95KCBsaWJyYXJ5ICk7Ci0gICAgRlRfRlJFRSggbGlicmFyeSApOwotICAgIHJldHVybiBlcnJvcjsKLSNlbmRpZgogICB9CiAKIApAQCAtNTIzNywxMCArNTMxOSwxMCBAQAogICAgICAqCiAgICAgICogRXhhbXBsZToKICAgICAgKgotICAgICAqICAtIHRoZSBjZmYgZm9udCBkcml2ZXIgdXNlcyB0aGUgcHNoaW50ZXIgbW9kdWxlIGluIGNmZl9zaXplX2RvbmUKLSAgICAgKiAgLSBpZiB0aGUgcHNoaW50ZXIgbW9kdWxlIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNmZiBmb250IGRyaXZlciwKLSAgICAgKiAgICBvcGVuZWQgRlRfRmFjZSBvYmplY3RzIG1hbmFnZWQgYnkgdGhlIGRyaXZlciBhcmUgbm90IHByb3Blcmx5Ci0gICAgICogICAgZGVzdHJveWVkLCByZXN1bHRpbmcgaW4gYSBtZW1vcnkgbGVhaworICAgICAqIC0gdGhlIGNmZiBmb250IGRyaXZlciB1c2VzIHRoZSBwc2hpbnRlciBtb2R1bGUgaW4gY2ZmX3NpemVfZG9uZQorICAgICAqIC0gaWYgdGhlIHBzaGludGVyIG1vZHVsZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBjZmYgZm9udCBkcml2ZXIsCisgICAgICogICBvcGVuZWQgRlRfRmFjZSBvYmplY3RzIG1hbmFnZWQgYnkgdGhlIGRyaXZlciBhcmUgbm90IHByb3Blcmx5CisgICAgICogICBkZXN0cm95ZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrCiAgICAgICoKICAgICAgKiBTb21lIGZhY2VzIGFyZSBkZXBlbmRlbnQgb24gb3RoZXIgZmFjZXMsIGxpa2UgVHlwZTQyIGZhY2VzIHRoYXQKICAgICAgKiBkZXBlbmQgb24gVHJ1ZVR5cGUgZmFjZXMgc3ludGhlc2l6ZWQgaW50ZXJuYWxseS4KQEAgLTUzMTAsMTEgKzUzOTIsNiBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICAvKiBEZXN0cm95IHBpYyBjb250YWluZXIgY29udGVudHMgKi8KLSAgICBmdF9waWNfY29udGFpbmVyX2Rlc3Ryb3koIGxpYnJhcnkgKTsKLSNlbmRpZgotCiAgICAgRlRfRlJFRSggbGlicmFyeSApOwogCiAgIEV4aXQ6CkBAIC01NDAyLDQgKzU0NzksNDEgQEAKICAgfQogCiAKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfQm9vbCApCisgIEZUX0dldF9Db2xvcl9HbHlwaF9MYXllciggRlRfRmFjZSAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgIGJhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgKmFnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWNvbG9yX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xheWVySXRlcmF0b3IqICBpdGVyYXRvciApCisgIHsKKyAgICBUVF9GYWNlICAgICAgIHR0ZmFjZTsKKyAgICBTRk5UX1NlcnZpY2UgIHNmbnQ7CisKKworICAgIGlmICggIWZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAhYWdseXBoX2luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICFhY29sb3JfaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgIWl0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICBiYXNlX2dseXBoID49IChGVF9VSW50KWZhY2UtPm51bV9nbHlwaHMgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICFGVF9JU19TRk5UKCBmYWNlICkgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICB0dGZhY2UgPSAoVFRfRmFjZSlmYWNlOworICAgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50OworCisgICAgaWYgKCBzZm50LT5nZXRfY29scl9sYXllciApCisgICAgICByZXR1cm4gc2ZudC0+Z2V0X2NvbHJfbGF5ZXIoIHR0ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9nbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY29sb3JfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yICk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIH0KKworCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3R2YWwuYyBiL3NyYy9iYXNlL2Z0b3R2YWwuYwppbmRleCBhMjk0NGE3Li41MDgyNWJkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG90dmFsLmMKKysrIGIvc3JjL2Jhc2UvZnRvdHZhbC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdG90dmFsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG90dmFsLmMKKyAqCisgKiAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG91dGxuLmMgYi9zcmMvYmFzZS9mdG91dGxuLmMKaW5kZXggOWMyOWFkZS4uNjExYjRmNiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRvdXRsbi5jCisrKyBiL3NyYy9iYXNlL2Z0b3V0bG4uYwpAQCAtMSwyNiArMSwyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRvdXRsbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIG91dGxpbmUgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRvdXRsbi5jCisgKgorICogICBGcmVlVHlwZSBvdXRsaW5lIG1hbmFnZW1lbnQgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQWxsIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgaW4gZnJlZXR5cGUuaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEFsbCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGluIGZyZWV0eXBlLmguCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX291dGxpbmUKIApAQCAtMjg2LDEyICsyODYsMTMgQEAKICAgICBGVF9UUkFDRTUoKCAiRlRfT3V0bGluZV9EZWNvbXBvc2U6IERvbmVcbiIsIG4gKSk7CiAgICAgcmV0dXJuIEZUX0Vycl9PazsKIAorICBJbnZhbGlkX091dGxpbmU6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisgICAgLyogZmFsbCB0aHJvdWdoICovCisKICAgRXhpdDoKICAgICBGVF9UUkFDRTUoKCAiRlRfT3V0bGluZV9EZWNvbXBvc2U6IEVycm9yIDB4JXhcbiIsIGVycm9yICkpOwogICAgIHJldHVybiBlcnJvcjsKLQotICBJbnZhbGlkX091dGxpbmU6Ci0gICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKICAgfQogCiAKQEAgLTYxOCw2ICs2MTksNyBAQAogICAgIEZUX0Vycm9yICAgICBlcnJvcjsKICAgICBGVF9SZW5kZXJlciAgcmVuZGVyZXI7CiAgICAgRlRfTGlzdE5vZGUgIG5vZGU7CisgICAgRlRfQkJveCAgICAgIGNib3g7CiAKIAogICAgIGlmICggIWxpYnJhcnkgKQpAQCAtNjI5LDYgKzYzMSwxMSBAQAogICAgIGlmICggIXBhcmFtcyApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAorICAgIEZUX091dGxpbmVfR2V0X0NCb3goIG91dGxpbmUsICZjYm94ICk7CisgICAgaWYgKCBjYm94LnhNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnlNaW4gPCAtMHgxMDAwMDAwTCB8fAorICAgICAgICAgY2JveC54TWF4ID4gIDB4MTAwMDAwMEwgfHwgY2JveC55TWF4ID4gIDB4MTAwMDAwMEwgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKKwogICAgIHJlbmRlcmVyID0gbGlicmFyeS0+Y3VyX3JlbmRlcmVyOwogICAgIG5vZGUgICAgID0gbGlicmFyeS0+cmVuZGVyZXJzLmhlYWQ7CiAKQEAgLTkxMCw5ICs5MTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB4c3RyZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHlzdHJlbmd0aCApCiAgIHsKLSAgICBGVF9WZWN0b3IqICBwb2ludHM7Ci0gICAgRlRfSW50ICAgICAgYywgZmlyc3QsIGxhc3Q7Ci0gICAgRlRfSW50ICAgICAgb3JpZW50YXRpb247CisgICAgRlRfVmVjdG9yKiAgICAgIHBvaW50czsKKyAgICBGVF9JbnQgICAgICAgICAgYywgZmlyc3QsIGxhc3Q7CisgICAgRlRfT3JpZW50YXRpb24gIG9yaWVudGF0aW9uOwogCiAKICAgICBpZiAoICFvdXRsaW5lICkKQEAgLTEwNDMsNyArMTA1MCw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX09yaWVudGF0aW9uICkKICAgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24oIEZUX091dGxpbmUqICBvdXRsaW5lICkKICAgewotICAgIEZUX0JCb3ggICAgIGNib3g7CisgICAgRlRfQkJveCAgICAgY2JveCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIEZUX0ludCAgICAgIHhzaGlmdCwgeXNoaWZ0OwogICAgIEZUX1ZlY3RvciogIHBvaW50czsKICAgICBGVF9WZWN0b3IgICB2X3ByZXYsIHZfY3VyOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRwYXRlbnQuYyBiL3NyYy9iYXNlL2Z0cGF0ZW50LmMKaW5kZXggZTIzZWUyZS4uMjQzMzFjMSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRwYXRlbnQuYworKysgYi9zcmMvYmFzZS9mdHBhdGVudC5jCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHBhdGVudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBjaGVja2luZyBwYXRlbnRlZCBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgICAgKi8KLS8qICAgIChib2R5KS4gIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwYXRlbnQuYworICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBjaGVja2luZyBwYXRlbnRlZCBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMKKyAqICAgKGJvZHkpLiAgT2Jzb2xldGUsIHJldGFpbmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lci4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBmci5jIGIvc3JjL2Jhc2UvZnRwZnIuYwppbmRleCBiZmUxMzUyLi4yNzYxYWQwIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBmci5jCisrKyBiL3NyYy9iYXNlL2Z0cGZyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cGZyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBQRlItc3BlY2lmaWMgZGF0YSAoYm9keSkuICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cGZyLmMKKyAqCisgKiAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRwaWMuYyBiL3NyYy9iYXNlL2Z0cGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OTJlMTguLjAwMDAwMDAKLS0tIGEvc3JjL2Jhc2UvZnRwaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyAoYm9keSkuICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlICJiYXNlcGljLmgiCi0KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0gIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRwaWMuaCAqLwotCi0gIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCi0gIGZ0X3BpY19jb250YWluZXJfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKLQotCi0gICAgRlRfTUVNX1NFVCggcGljX2NvbnRhaW5lciwgMCwgc2l6ZW9mICggKnBpY19jb250YWluZXIgKSApOwotCi0gICAgZXJyb3IgPSBmdF9iYXNlX3BpY19pbml0KCBsaWJyYXJ5ICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICByZXR1cm4gRlRfRXJyX09rOwotICB9Ci0KLQotICAvKiBEZXN0cm95IHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyLiAqLwotICBGVF9CQVNFX0RFRiggdm9pZCApCi0gIGZ0X3BpY19jb250YWluZXJfZGVzdHJveSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBmdF9iYXNlX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBzcHJvcC5jIGIvc3JjL2Jhc2UvZnRwc3Byb3AuYwppbmRleCA0NTliNWU2Li45YzUzNDRhIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBzcHJvcC5jCisrKyBiL3NyYy9iYXNlL2Z0cHNwcm9wLmMKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cHNwcm9wLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBHZXQgYW5kIHNldCBwcm9wZXJ0aWVzIG9mIFBvc3RTY3JpcHQgZHJpdmVycyAoYm9keSkuICAgICAgICAgICAgICAgICAqLwotLyogICAgU2VlIGBmdGRyaXZlci5oJyBmb3IgYXZhaWxhYmxlIHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHBzcHJvcC5jCisgKgorICogICBHZXQgYW5kIHNldCBwcm9wZXJ0aWVzIG9mIFBvc3RTY3JpcHQgZHJpdmVycyAoYm9keSkuCisgKiAgIFNlZSBgZnRkcml2ZXIuaCcgZm9yIGF2YWlsYWJsZSBwcm9wZXJ0aWVzLgorICoKKyAqIENvcHlyaWdodCAyMDE3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcHNwcm9wcwogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHJmb3JrLmMgYi9zcmMvYmFzZS9mdHJmb3JrLmMKaW5kZXggYzNhMmI5MS4uYzYxNzY1YiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRyZm9yay5jCisrKyBiL3NyYy9iYXNlL2Z0cmZvcmsuYwpAQCAtMSwzNCArMSwzNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRyZm9yay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEVtYmVkZGVkIHJlc291cmNlIGZvcmtzIGFjY2Vzc29yIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8oKSBhbmQgcmFjY2Vzc19ndWVzc19kYXJ3aW5faGZzcGx1cygpIGFyZSAgICAgKi8KLS8qICBkZXJpdmVkIGZyb20gZnRvYmpzLmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRyZm9yay5jCisgKgorICogICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLgorICoKKyAqIEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8oKSBhbmQgcmFjY2Vzc19ndWVzc19kYXJ3aW5faGZzcGx1cygpIGFyZQorICogZGVyaXZlZCBmcm9tIGZ0b2Jqcy5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGV2ZWxvcG1lbnQgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIHN1cHBvcnQgb2YgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERldmVsb3BtZW50IG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBzdXBwb3J0IG9mCisgKiBJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuLgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAotI2luY2x1ZGUgImJhc2VwaWMuaCIKKwogI2luY2x1ZGUgImZ0YmFzZS5oIgogCiAjdW5kZWYgIEZUX0NPTVBPTkVOVApAQCAtNDM4LDcgKzQzOCw3IEBACiAKICAgc3RhdGljIEZUX0Vycm9yCiAgIHJhY2Nlc3NfZ3Vlc3NfbGludXhfZG91YmxlX2Zyb21fZmlsZV9uYW1lKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqICAgICAgZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAqcmVzdWx0X29mZnNldCApOwogCiAgIHN0YXRpYyBjaGFyICoKQEAgLTQ2OCwxMCArNDY4LDEwIEBACiAgICAgICBpZiAoIGVycm9yc1tpXSApCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBlcnJvcnNbaV0gPSAoRlRfUkFDQ0VTU19HVUVTU19UQUJMRV9HRVRbaV0uZnVuYykoIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBiYXNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihuZXdfbmFtZXNbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYob2Zmc2V0c1tpXSkgKTsKKyAgICAgIGVycm9yc1tpXSA9IGZ0X3JhY2Nlc3NfZ3Vlc3NfdGFibGVbaV0uZnVuYyggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBiYXNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYobmV3X25hbWVzW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihvZmZzZXRzW2ldKSApOwogICAgIH0KIAogICAgIHJldHVybjsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogICAgIGlmICggcnVsZV9pbmRleCA+PSBGVF9SQUNDRVNTX05fUlVMRVMgKQogICAgICAgcmV0dXJuIEZUX1JGb3JrX1J1bGVfaW52YWxpZDsKIAotICAgIHJldHVybiBGVF9SQUNDRVNTX0dVRVNTX1RBQkxFX0dFVFtydWxlX2luZGV4XS50eXBlOworICAgIHJldHVybiBmdF9yYWNjZXNzX2d1ZXNzX3RhYmxlW3J1bGVfaW5kZXhdLnR5cGU7CiAgIH0KIAogCkBAIC04NDcsNyArODQ3LDcgQEAKICAgewogICAgIEZUX09wZW5fQXJncyAgYXJnczI7CiAgICAgRlRfU3RyZWFtICAgICBzdHJlYW0yOwotICAgIGNoYXIgKiAgICAgICAgbm91c2UgPSBOVUxMOworICAgIGNoYXIqICAgICAgICAgbm91c2UgPSBOVUxMOwogICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CiAKIApAQCAtOTA5LDkgKzkwOSw5IEBACiAjZWxzZSAgIC8qICFGVF9DT05GSUdfT1BUSU9OX0dVRVNTSU5HX0VNQkVEREVEX1JGT1JLICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICBEdW1teSBmdW5jdGlvbjsganVzdCBzZXRzIGVycm9ycyAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogICAgICAgICAgICAgICAgIER1bW15IGZ1bmN0aW9uOyBqdXN0IHNldHMgZXJyb3JzCisgICAqLwogCiAgIEZUX0JBU0VfREVGKCB2b2lkICkKICAgRlRfUmFjY2Vzc19HdWVzcyggRlRfTGlicmFyeSAgbGlicmFyeSwKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c25hbWVzLmMgYi9zcmMvYmFzZS9mdHNuYW1lcy5jCmluZGV4IDkwZWExZTIuLjkxMzVlNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c25hbWVzLmMKKysrIGIvc3JjL2Jhc2UvZnRzbmFtZXMuYwpAQCAtMSwyMiArMSwyMiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzbmFtZXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFNpbXBsZSBpbnRlcmZhY2UgdG8gYWNjZXNzIFNGTlQgbmFtZSB0YWJsZXMgKHdoaWNoIGFyZSB1c2VkICAgICAgICAgICovCi0vKiAgICB0byBob2xkIGZvbnQgbmFtZXMsIGNvcHlyaWdodCBpbmZvLCBub3RpY2VzLCBldGMuKSAoYm9keSkuICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRzbmFtZXMuYworICoKKyAqICAgU2ltcGxlIGludGVyZmFjZSB0byBhY2Nlc3MgU0ZOVCBuYW1lIHRhYmxlcyAod2hpY2ggYXJlIHVzZWQKKyAqICAgdG8gaG9sZCBmb250IG5hbWVzLCBjb3B5cmlnaHQgaW5mbywgbm90aWNlcywgZXRjLikgKGJvZHkpLgorICoKKyAqICAgVGhpcyBpcyBfbm90XyB1c2VkIHRvIHJldHJpZXZlIGdseXBoIG5hbWVzIQorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE0Miw3ICsxNDIsNDUgQEAKICAgfQogCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMgKi8KKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVMgKi8KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX1VJbnQgKQorICBGVF9HZXRfU2ZudF9OYW1lX0NvdW50KCBGVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1VOVVNFRCggZmFjZSApOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1NmbnRfTmFtZSggRlRfRmFjZSAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgRlRfU2ZudE5hbWUgICphbmFtZSApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKyAgICBGVF9VTlVTRUQoIGlkeCApOworICAgIEZUX1VOVVNFRCggYW5hbWUgKTsKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgIH0KKworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfR2V0X1NmbnRfTGFuZ1RhZyggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgIGxhbmdJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfU2ZudExhbmdUYWcgICphbGFuZ1RhZyApCisgIHsKKyAgICBGVF9VTlVTRUQoIGZhY2UgKTsKKyAgICBGVF9VTlVTRUQoIGxhbmdJRCApOworICAgIEZUX1VOVVNFRCggYWxhbmdUYWcgKTsKKworICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgIH0KKworCisjZW5kaWYgLyogIVRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1FUyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzdHJlYW0uYyBiL3NyYy9iYXNlL2Z0c3RyZWFtLmMKaW5kZXggMThkZjdkYy4uOWM4Y2FiMyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRzdHJlYW0uYworKysgYi9zcmMvYmFzZS9mdHN0cmVhbS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSS9PIHN0cmVhbSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHN0cmVhbS5jCisgKgorICogICBJL08gc3RyZWFtIHN1cHBvcnQgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTIxLDEyICsyMSwxMiBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3N0cmVhbQogCkBAIC0yMTksNiArMjE5LDcgQEAKICAgICB7CiAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwogCisKICNpZmRlZiBGVF9ERUJVR19NRU1PUlkKICAgICAgIGZ0X21lbV9mcmVlKCBtZW1vcnksICpwYnl0ZXMgKTsKICAgICAgICpwYnl0ZXMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzdHJva2UuYyBiL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKaW5kZXggNmFlMTgxOS4uNDQ1NWU3YyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRzdHJva2UuYworKysgYi9zcmMvYmFzZS9mdHN0cm9rZS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHN0cm9rZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgcGF0aCBzdHJva2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHN0cm9rZS5jCisgKgorICogICBGcmVlVHlwZSBwYXRoIHN0cm9rZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI0LDE1ICsyNCwxMCBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICiAKLSNpbmNsdWRlICJiYXNlcGljLmgiCiAKLQotICAvKiBkZWNsYXJlIGFuIGV4dGVybiB0byBhY2Nlc3MgYGZ0X291dGxpbmVfZ2x5cGhfY2xhc3MnIGdsb2JhbGx5ICAgICAqLwotICAvKiBhbGxvY2F0ZWQgIGluIGBmdGdseXBoLmMnLCBhbmQgdXNlIHRoZSBGVF9PVVRMSU5FX0dMWVBIX0NMQVNTX0dFVCAqLwotICAvKiBtYWNybyB0byBhY2Nlc3MgaXQgd2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkICAgICAgICAgICAqLwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworICAvKiBkZWNsYXJlIGFuIGV4dGVybiB0byBhY2Nlc3MgYGZ0X291dGxpbmVfZ2x5cGhfY2xhc3MnIGdsb2JhbGx5ICovCisgIC8qIGFsbG9jYXRlZCAgaW4gYGZ0Z2x5cGguYycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgRlRfR2x5cGhfQ2xhc3MgIGZ0X291dGxpbmVfZ2x5cGhfY2xhc3M7Ci0jZW5kaWYKIAogCiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRzdHJva2UuaCAqLwpAQCAtMjA4Nyw4ICsyMDgyLDggQEAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHN0cm9rZS5oICovCiAKICAgLyoKLSAgICogIFRoZSBmb2xsb3dpbmcgaXMgdmVyeSBzaW1pbGFyIHRvIEZUX091dGxpbmVfRGVjb21wb3NlLCBleGNlcHQKLSAgICogIHRoYXQgd2UgZG8gc3VwcG9ydCBvcGVuZWQgcGF0aHMsIGFuZCBkbyBub3Qgc2NhbGUgdGhlIG91dGxpbmUuCisgICAqIFRoZSBmb2xsb3dpbmcgaXMgdmVyeSBzaW1pbGFyIHRvIEZUX091dGxpbmVfRGVjb21wb3NlLCBleGNlcHQKKyAgICogdGhhdCB3ZSBkbyBzdXBwb3J0IG9wZW5lZCBwYXRocywgYW5kIGRvIG5vdCBzY2FsZSB0aGUgb3V0bGluZS4KICAgICovCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKICAgRlRfU3Ryb2tlcl9QYXJzZU91dGxpbmUoIEZUX1N0cm9rZXIgICBzdHJva2VyLApAQCAtMjMwNiwxNyArMjMwMSwxMiBAQAogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOwogICAgIEZUX0dseXBoICBnbHlwaCA9IE5VTEw7CiAKLSAgICAvKiBmb3IgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKGluIFBJQyBtb2RlKSAqLwotICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBzdHJva2VyLT5saWJyYXJ5OwotCi0gICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7Ci0KIAogICAgIGlmICggIXBnbHlwaCApCiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBnbHlwaCA9ICpwZ2x5cGg7Ci0gICAgaWYgKCAhZ2x5cGggfHwgZ2x5cGgtPmNsYXp6ICE9IEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICkKKyAgICBpZiAoICFnbHlwaCB8fCBnbHlwaC0+Y2xhenogIT0gJmZ0X291dGxpbmVfZ2x5cGhfY2xhc3MgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgewpAQCAtMjM4NiwxNyArMjM3NiwxMiBAQAogICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOwogICAgIEZUX0dseXBoICBnbHlwaCA9IE5VTEw7CiAKLSAgICAvKiBmb3IgRlRfT1VUTElORV9HTFlQSF9DTEFTU19HRVQgKGluIFBJQyBtb2RlKSAqLwotICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkgPSBzdHJva2VyLT5saWJyYXJ5OwotCi0gICAgRlRfVU5VU0VEKCBsaWJyYXJ5ICk7Ci0KIAogICAgIGlmICggIXBnbHlwaCApCiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBnbHlwaCA9ICpwZ2x5cGg7Ci0gICAgaWYgKCAhZ2x5cGggfHwgZ2x5cGgtPmNsYXp6ICE9IEZUX09VVExJTkVfR0xZUEhfQ0xBU1NfR0VUICkKKyAgICBpZiAoICFnbHlwaCB8fCBnbHlwaC0+Y2xhenogIT0gJmZ0X291dGxpbmVfZ2x5cGhfY2xhc3MgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzeW50aC5jIGIvc3JjL2Jhc2UvZnRzeW50aC5jCmluZGV4IGMyODM0NjcuLjU1MzkxMDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3ludGguYworKysgYi9zcmMvYmFzZS9mdHN5bnRoLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c3ludGguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzeW50aGVzaXppbmcgY29kZSBmb3IgZW1ib2xkZW5pbmcgYW5kIHNsYW50aW5nIChib2R5KS4gICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c3ludGguYworICoKKyAqICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjQsMTIgKzI0LDEyIEBACiAjaW5jbHVkZSBGVF9CSVRNQVBfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3N5bnRoCiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMgYi9zcmMvYmFzZS9mdHN5c3RlbS5jCmluZGV4IDZhZGViZGIuLmQ3NjFhZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3lzdGVtLmMKKysrIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwpAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzeXN0ZW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFOU0ktc3BlY2lmaWMgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRzeXN0ZW0uYworICoKKyAqICAgQU5TSS1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IGludGVyZmFjZSB1c2VkIGJ5IEZyZWVUeXBlIHRvIGFjY2VzcyAgICovCi0gIC8qIGxvdy1sZXZlbCwgaS5lLiBtZW1vcnkgbWFuYWdlbWVudCwgaS9vIGFjY2VzcyBhcyB3ZWxsIGFzIHRocmVhZCAgICAgICAqLwotICAvKiBzeW5jaHJvbmlzYXRpb24uICBJdCBjYW4gYmUgcmVwbGFjZWQgYnkgdXNlci1zcGVjaWZpYyByb3V0aW5lcyBpZiAgICAgKi8KLSAgLyogbmVjZXNzYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdXNlZCBieSBGcmVlVHlwZSB0byBhY2Nlc3MKKyAgICogbG93LWxldmVsLCBpLmUuIG1lbW9yeSBtYW5hZ2VtZW50LCBpL28gYWNjZXNzIGFzIHdlbGwgYXMgdGhyZWFkCisgICAqIHN5bmNocm9uaXNhdGlvbi4gIEl0IGNhbiBiZSByZXBsYWNlZCBieSB1c2VyLXNwZWNpZmljIHJvdXRpbmVzIGlmCisgICAqIG5lY2Vzc2FyeS4KKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zNCwzNyArMzQsMzkgQEAKICNpbmNsdWRlIEZUX1RZUEVTX0gKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWSBNQU5BR0VNRU5UIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWSBNQU5BR0VNRU5UIElOVEVSRkFDRQorICAgKgorICAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZG8gYW55IGVycm9yIGNoZWNraW5nIGZvciB0aGUgICAgICAgICAgICAgICAgICAqLwotICAvKiBhbGxvY2F0aW9uLXJlbGF0ZWQgZnVuY3Rpb25zLiAgVGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGhpZ2hlciBsZXZlbCAgKi8KLSAgLyogcm91dGluZXMgbGlrZSBmdF9tZW1fYWxsb2MoKSBvciBmdF9tZW1fcmVhbGxvYygpLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZG8gYW55IGVycm9yIGNoZWNraW5nIGZvciB0aGUKKyAgICogYWxsb2NhdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucy4gIFRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZSBoaWdoZXIgbGV2ZWwKKyAgICogcm91dGluZXMgbGlrZSBmdF9tZW1fYWxsb2MoKSBvciBmdF9tZW1fcmVhbGxvYygpLgorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ0X2FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSA6OiBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSAgIDo6IFRoZSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGFkZHJlc3Mgb2YgbmV3bHkgYWxsb2NhdGVkIGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGZ0X2FsbG9jCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBUaGUgcmVxdWVzdGVkIHNpemUgaW4gYnl0ZXMuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgVGhlIGFkZHJlc3Mgb2YgbmV3bHkgYWxsb2NhdGVkIGJsb2NrLgorICAgKi8KICAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkKiApCiAgIGZ0X2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgIGxvbmcgICAgICAgc2l6ZSApCkBAIC03NSwyNiArNzcsMzAgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnRfcmVhbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG1lbW9yeSByZWFsbG9jYXRpb24gZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5ICAgOjogQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjdXJfc2l6ZSA6OiBUaGUgY3VycmVudCBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5ld19zaXplIDo6IFRoZSBuZXdseSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYmxvY2sgICAgOjogVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgYmxvY2sgaW4gbWVtb3J5LiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlYWxsb2NhdGVkIG1lbW9yeSBibG9jay4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGZ0X3JlYWxsb2MKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBtZW1vcnkgcmVhbGxvY2F0aW9uIGZ1bmN0aW9uLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqICAgY3VyX3NpemUgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2suCisgICAqCisgICAqICAgbmV3X3NpemUgOjoKKyAgICogICAgIFRoZSBuZXdseSByZXF1ZXN0ZWQgc2l6ZSBpbiBieXRlcy4KKyAgICoKKyAgICogICBibG9jayA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgYmxvY2sgaW4gbWVtb3J5LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFRoZSBhZGRyZXNzIG9mIHRoZSByZWFsbG9jYXRlZCBtZW1vcnkgYmxvY2suCisgICAqLwogICBGVF9DQUxMQkFDS19ERUYoIHZvaWQqICkKICAgZnRfcmVhbGxvYyggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgIGxvbmcgICAgICAgY3VyX3NpemUsCkBAIC0xMDgsMTkgKzExNCwyMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdF9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbWVtb3J5IHJlbGVhc2UgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgIDo6IEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJsb2NrICAgOjogVGhlIGFkZHJlc3Mgb2YgYmxvY2sgaW4gbWVtb3J5IHRvIGJlIGZyZWVkLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBmdF9mcmVlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGUgbWVtb3J5IHJlbGVhc2UgZnVuY3Rpb24uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9iamVjdC4KKyAgICoKKyAgICogICBibG9jayA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgYmxvY2sgaW4gbWVtb3J5IHRvIGJlIGZyZWVkLgorICAgKi8KICAgRlRfQ0FMTEJBQ0tfREVGKCB2b2lkICkKICAgZnRfZnJlZSggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgIHZvaWQqICAgICAgYmxvY2sgKQpAQCAtMTMxLDIwICsxMzksMjAgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFIE1BTkFHRU1FTlQgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgIFJFU09VUkNFIE1BTkFHRU1FTlQgSU5URVJGQUNFCisgICAqCisgICAqLwogCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRElTQUJMRV9TVFJFQU1fU1VQUE9SVAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9pbwogCkBAIC0xNTMsMTcgKzE2MSwxOCBAQAogI2RlZmluZSBTVFJFQU1fRklMRSggc3RyZWFtICkgICggKEZUX0ZJTEUqKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ0X2Fuc2lfc3RyZWFtX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBmdW5jdGlvbiB0byBjbG9zZSBhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiBBIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBmdF9hbnNpX3N0cmVhbV9jbG9zZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhlIGZ1bmN0aW9uIHRvIGNsb3NlIGEgc3RyZWFtLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHN0cmVhbSBvYmplY3QuCisgICAqLwogICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQogICBmdF9hbnNpX3N0cmVhbV9jbG9zZSggRlRfU3RyZWFtICBzdHJlYW0gKQogICB7CkBAIC0xNzUsMjggKzE4NCwzMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdF9hbnNpX3N0cmVhbV9pbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZnVuY3Rpb24gdG8gb3BlbiBhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gOjogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG9mZnNldCA6OiBUaGUgcG9zaXRpb24gaW4gdGhlIGRhdGEgc3RyZWFtIHRvIHN0YXJ0IHJlYWRpbmcuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVmZmVyIDo6IFRoZSBhZGRyZXNzIG9mIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb3VudCAgOjogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlIHN0cmVhbS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQuICBJZiBgY291bnQnIGlzIHplcm8gKHRoaXMgaXMsICAgKi8KLSAgLyogICAgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHNlZWtpbmcpLCBhIG5vbi16ZXJvIHJldHVybiB2YWx1ZSAgICAgICAgICovCi0gIC8qICAgIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBmdF9hbnNpX3N0cmVhbV9pbworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhlIGZ1bmN0aW9uIHRvIG9wZW4gYSBzdHJlYW0uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICoKKyAgICogICBvZmZzZXQgOjoKKyAgICogICAgIFRoZSBwb3NpdGlvbiBpbiB0aGUgZGF0YSBzdHJlYW0gdG8gc3RhcnQgcmVhZGluZy4KKyAgICoKKyAgICogICBidWZmZXIgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhLgorICAgKgorICAgKiAgIGNvdW50IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZC4gIElmIGBjb3VudCcgaXMgemVybyAodGhpcyBpcywKKyAgICogICB0aGUgZnVuY3Rpb24gaXMgdXNlZCBmb3Igc2Vla2luZyksIGEgbm9uLXplcm8gcmV0dXJuIHZhbHVlCisgICAqICAgaW5kaWNhdGVzIGFuIGVycm9yLgorICAgKi8KICAgRlRfQ0FMTEJBQ0tfREVGKCB1bnNpZ25lZCBsb25nICkKICAgZnRfYW5zaV9zdHJlYW1faW8oIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR0cmlnb24uYyBiL3NyYy9iYXNlL2Z0dHJpZ29uLmMKaW5kZXggZDZkZDA5OC4uZDM3NWJkNyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR0cmlnb24uYworKysgYi9zcmMvYmFzZS9mdHRyaWdvbi5jCkBAIC0xLDMzICsxLDMzIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHRyaWdvbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHRyaWdvbi5jCisgKgorICogICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBpcyBhIGZpeGVkLXBvaW50IENPUkRJQyBpbXBsZW1lbnRhdGlvbiBvZiB0cmlnb25vbWV0cmljICAgICAgICAgICovCi0gIC8qIGZ1bmN0aW9ucyBhcyB3ZWxsIGFzIHRyYW5zZm9ybWF0aW9ucyBiZXR3ZWVuIENhcnRlc2lhbiBhbmQgcG9sYXIgICAgICAqLwotICAvKiBjb29yZGluYXRlcy4gIFRoZSBhbmdsZXMgYXJlIHJlcHJlc2VudGVkIGFzIDE2LjE2IGZpeGVkLXBvaW50IHZhbHVlcyAgKi8KLSAgLyogaW4gZGVncmVlcywgaS5lLiwgdGhlIGFuZ3VsYXIgcmVzb2x1dGlvbiBpcyAyXi0xNiBkZWdyZWVzLiAgTm90ZSB0aGF0ICovCi0gIC8qIG9ubHkgdmVjdG9ycyBsb25nZXIgdGhhbiAyXjE2KjE4MC9waSAob3IgYXQgbGVhc3QgMjIgYml0cykgb24gYSAgICAgICAqLwotICAvKiBkaXNjcmV0ZSBDYXJ0ZXNpYW4gZ3JpZCBjYW4gaGF2ZSB0aGUgc2FtZSBvciBiZXR0ZXIgYW5ndWxhciAgICAgICAgICAgKi8KLSAgLyogcmVzb2x1dGlvbi4gIFRoZXJlZm9yZSwgdG8gbWFpbnRhaW4gdGhpcyBwcmVjaXNpb24sIHNvbWUgZnVuY3Rpb25zICAgICovCi0gIC8qIHJlcXVpcmUgYW4gaW50ZXJpbSB1cHNjYWxpbmcgb2YgdGhlIHZlY3RvcnMsIHdoZXJlYXMgb3RoZXJzIG9wZXJhdGUgICAqLwotICAvKiB3aXRoIDI0LWJpdCBsb25nIHZlY3RvcnMgZGlyZWN0bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBpcyBhIGZpeGVkLXBvaW50IENPUkRJQyBpbXBsZW1lbnRhdGlvbiBvZiB0cmlnb25vbWV0cmljCisgICAqIGZ1bmN0aW9ucyBhcyB3ZWxsIGFzIHRyYW5zZm9ybWF0aW9ucyBiZXR3ZWVuIENhcnRlc2lhbiBhbmQgcG9sYXIKKyAgICogY29vcmRpbmF0ZXMuICBUaGUgYW5nbGVzIGFyZSByZXByZXNlbnRlZCBhcyAxNi4xNiBmaXhlZC1wb2ludCB2YWx1ZXMKKyAgICogaW4gZGVncmVlcywgaS5lLiwgdGhlIGFuZ3VsYXIgcmVzb2x1dGlvbiBpcyAyXi0xNiBkZWdyZWVzLiAgTm90ZSB0aGF0CisgICAqIG9ubHkgdmVjdG9ycyBsb25nZXIgdGhhbiAyXjE2KjE4MC9waSAob3IgYXQgbGVhc3QgMjIgYml0cykgb24gYQorICAgKiBkaXNjcmV0ZSBDYXJ0ZXNpYW4gZ3JpZCBjYW4gaGF2ZSB0aGUgc2FtZSBvciBiZXR0ZXIgYW5ndWxhcgorICAgKiByZXNvbHV0aW9uLiAgVGhlcmVmb3JlLCB0byBtYWludGFpbiB0aGlzIHByZWNpc2lvbiwgc29tZSBmdW5jdGlvbnMKKyAgICogcmVxdWlyZSBhbiBpbnRlcmltIHVwc2NhbGluZyBvZiB0aGUgdmVjdG9ycywgd2hlcmVhcyBvdGhlcnMgb3BlcmF0ZQorICAgKiB3aXRoIDI0LWJpdCBsb25nIHZlY3RvcnMgZGlyZWN0bHkuCisgICAqCisgICAqLwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSApAQCAtMzI1LDEwICszMjUsMTAgQEAKICAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQogICBGVF9UYW4oIEZUX0FuZ2xlICBhbmdsZSApCiAgIHsKLSAgICBGVF9WZWN0b3IgIHY7CisgICAgRlRfVmVjdG9yICB2ID0geyAxIDw8IDI0LCAwIH07CiAKIAotICAgIEZUX1ZlY3Rvcl9Vbml0KCAmdiwgYW5nbGUgKTsKKyAgICBmdF90cmlnX3BzZXVkb19yb3RhdGUoICZ2LCBhbmdsZSApOwogCiAgICAgcmV0dXJuIEZUX0RpdkZpeCggdi55LCB2LnggKTsKICAgfQpAQCAtMzcyLDE0ICszNzIsNiBAQAogICB9CiAKIAotICAvKiB0aGVzZSBtYWNyb3MgcmV0dXJuIDAgZm9yIHBvc2l0aXZlIG51bWJlcnMsCi0gICAgIGFuZCAtMSBmb3IgbmVnYXRpdmUgb25lcyAqLwotI2RlZmluZSBGVF9TSUdOX0xPTkcoIHggKSAgICggKHgpID4+ICggRlRfU0laRU9GX0xPTkcgKiA4IC0gMSApICkKLSNkZWZpbmUgRlRfU0lHTl9JTlQoIHggKSAgICAoICh4KSA+PiAoIEZUX1NJWkVPRl9JTlQgKiA4IC0gMSApICkKLSNkZWZpbmUgRlRfU0lHTl9JTlQzMiggeCApICAoICh4KSA+PiAzMSApCi0jZGVmaW5lIEZUX1NJR05fSU5UMTYoIHggKSAgKCAoeCkgPj4gMTUgKQotCi0KICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHRyaWdvbi5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggdm9pZCApCkBAIC00MDgsOCArNDAwLDggQEAKICAgICAgIEZUX0ludDMyICBoYWxmID0gKEZUX0ludDMyKTFMIDw8ICggc2hpZnQgLSAxICk7CiAKIAotICAgICAgdmVjLT54ID0gKCB2LnggKyBoYWxmICsgRlRfU0lHTl9MT05HKCB2LnggKSApID4+IHNoaWZ0OwotICAgICAgdmVjLT55ID0gKCB2LnkgKyBoYWxmICsgRlRfU0lHTl9MT05HKCB2LnkgKSApID4+IHNoaWZ0OworICAgICAgdmVjLT54ID0gKCB2LnggKyBoYWxmIC0gKCB2LnggPCAwICkgKSA+PiBzaGlmdDsKKyAgICAgIHZlYy0+eSA9ICggdi55ICsgaGFsZiAtICggdi55IDwgMCApICkgPj4gc2hpZnQ7CiAgICAgfQogICAgIGVsc2UKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHR5cGUxLmMgYi9zcmMvYmFzZS9mdHR5cGUxLmMKaW5kZXggYWE4ZjhjYy4uMjI5YjBhYyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR0eXBlMS5jCisrKyBiL3NyYy9iYXNlL2Z0dHlwZTEuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnR0eXBlMS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgUFMgbmFtZXMgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnR0eXBlMS5jCisgKgorICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIFBTIG5hbWVzIHN1cHBvcnQgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dXRpbC5jIGIvc3JjL2Jhc2UvZnR1dGlsLmMKaW5kZXggNGRlNWYyYy4uZWNlZDdiYiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR1dGlsLmMKKysrIGIvc3JjL2Jhc2UvZnR1dGlsLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0dXRpbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIG1lbW9yeSBhbmQgbGlzdCBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0dXRpbC5jCisgKgorICogICBGcmVlVHlwZSB1dGlsaXR5IGZpbGUgZm9yIG1lbW9yeSBhbmQgbGlzdCBtYW5hZ2VtZW50IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMywxMiArMjMsMTIgQEAKICNpbmNsdWRlIEZUX0xJU1RfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX21lbW9yeQogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgRlRfRXJyb3IgICAgZXJyb3I7CiAgICAgRlRfUG9pbnRlciAgYmxvY2sgPSBmdF9tZW1fcWFsbG9jKCBtZW1vcnksIHNpemUsICZlcnJvciApOwogCi0gICAgaWYgKCAhZXJyb3IgJiYgc2l6ZSA+IDAgKQorICAgIGlmICggIWVycm9yICYmIGJsb2NrICYmIHNpemUgPiAwICkKICAgICAgIEZUX01FTV9aRVJPKCBibG9jaywgc2l6ZSApOwogCiAgICAgKnBfZXJyb3IgPSBlcnJvcjsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAgICAgYmxvY2sgPSBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgaXRlbV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfY291bnQsIG5ld19jb3VudCwgYmxvY2ssICZlcnJvciApOwotICAgIGlmICggIWVycm9yICYmIG5ld19jb3VudCA+IGN1cl9jb3VudCApCisgICAgaWYgKCAhZXJyb3IgJiYgYmxvY2sgJiYgbmV3X2NvdW50ID4gY3VyX2NvdW50ICkKICAgICAgIEZUX01FTV9aRVJPKCAoY2hhciopYmxvY2sgKyBjdXJfY291bnQgKiBpdGVtX3NpemUsCiAgICAgICAgICAgICAgICAgICAgKCBuZXdfY291bnQgLSBjdXJfY291bnQgKSAqIGl0ZW1fc2l6ZSApOwogCkBAIC0xODUsNyArMTg1LDcgQEAKICAgICBGVF9Qb2ludGVyICBwID0gZnRfbWVtX3FhbGxvYyggbWVtb3J5LCAoRlRfTG9uZylzaXplLCAmZXJyb3IgKTsKIAogCi0gICAgaWYgKCAhZXJyb3IgJiYgYWRkcmVzcyApCisgICAgaWYgKCAhZXJyb3IgJiYgYWRkcmVzcyAmJiBzaXplID4gMCApCiAgICAgICBmdF9tZW1jcHkoIHAsIGFkZHJlc3MsIHNpemUgKTsKIAogICAgICpwX2Vycm9yID0gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHZlci5yYyBiL3NyYy9iYXNlL2Z0dmVyLnJjCmluZGV4IGNkZmY5OWYuLmIwYjZlMDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dmVyLnJjCisrKyBiL3NyYy9iYXNlL2Z0dmVyLnJjCkBAIC0xOCw4ICsxOCw4IEBACiAKICNpbmNsdWRlPHdpbmRvd3MuaD4KIAotI2RlZmluZSBGVF9WRVJTSU9OICAgICAgMiw5LDAsMAotI2RlZmluZSBGVF9WRVJTSU9OX1NUUiAgIjIuOS4wIgorI2RlZmluZSBGVF9WRVJTSU9OICAgICAgMiw5LDEsMAorI2RlZmluZSBGVF9WRVJTSU9OX1NUUiAgIjIuOS4xIgogCiBWU19WRVJTSU9OX0lORk8gICAgICBWRVJTSU9OSU5GTwogRklMRVZFUlNJT04gICAgICAgICAgRlRfVkVSU0lPTgpAQCAtMjgsNyArMjgsNyBAQAogI2lmZGVmIF9ERUJVRwogRklMRUZMQUdTICAgICAgICAgICAgVlNfRkZfREVCVUcKICNlbmRpZgotI2lmZGVmIF9ETEwKKyNpZmRlZiBETExfRVhQT1JUCiBGSUxFVFlQRSAgICAgICAgICAgICBWRlRfRExMCiAjZGVmaW5lIEZUX0ZJTEVOQU1FICAiZnJlZXR5cGUuZGxsIgogI2Vsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0d2luZm50LmMgYi9zcmMvYmFzZS9mdHdpbmZudC5jCmluZGV4IDExYmQyOGEuLmJkNjU0OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0d2luZm50LmMKKysrIGIvc3JjL2Jhc2UvZnR3aW5mbnQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnR3aW5mbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgRk5UIHNwZWNpZmljIGluZm8gKGJvZHkpLiAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnR3aW5mbnQuYworICoKKyAqICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBGTlQgc3BlY2lmaWMgaW5mbyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvcnVsZXMubWsgYi9zcmMvYmFzZS9ydWxlcy5tawppbmRleCA2NDkxZjVkLi4yMTRmZDc3IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9ydWxlcy5taworKysgYi9zcmMvYmFzZS9ydWxlcy5tawpAQCAtMzYsMTUgKzM2LDE2IEBACiAjIEFsbCBmaWxlcyBsaXN0ZWQgaGVyZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYGZ0YmFzZS5jJyAoZm9yIGEgYHNpbmdsZScKICMgYnVpbGQpLgogIwotQkFTRV9TUkMgOj0gJChCQVNFX0RJUikvYmFzZXBpYy5jICBcCi0gICAgICAgICAgICAkKEJBU0VfRElSKS9mdGFkdmFuYy5jIFwKK0JBU0VfU1JDIDo9ICQoQkFTRV9ESVIpL2Z0YWR2YW5jLmMgXAogICAgICAgICAgICAgJChCQVNFX0RJUikvZnRjYWxjLmMgICBcCisgICAgICAgICAgICAkKEJBU0VfRElSKS9mdGNvbG9yLmMgIFwKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0ZGJnbWVtLmMgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnRmbnRmbXQuYyBcCiAgICAgICAgICAgICAkKEJBU0VfRElSKS9mdGdsb2Fkci5jIFwKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0aGFzaC5jICAgXAorICAgICAgICAgICAgJChCQVNFX0RJUikvZnRsY2RmaWwuYyBcCiAgICAgICAgICAgICAkKEJBU0VfRElSKS9mdG9ianMuYyAgIFwKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0b3V0bG4uYyAgXAotICAgICAgICAgICAgJChCQVNFX0RJUikvZnRwaWMuYyAgICBcCiAgICAgICAgICAgICAkKEJBU0VfRElSKS9mdHBzcHJvcC5jIFwKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0cmZvcmsuYyAgXAogICAgICAgICAgICAgJChCQVNFX0RJUikvZnRzbmFtZXMuYyBcCkBAIC01OCw4ICs1OSw3IEBACiBlbmRpZgogCiAjIGZvciBzaW1wbGljaXR5LCB3ZSBhbHNvIGhhbmRsZSBgbWQ1LmMnICh3aGljaCBnZXRzIGluY2x1ZGVkIGJ5IGBmdG9ianMuaCcpCi1CQVNFX0ggOj0gJChCQVNFX0RJUikvYmFzZXBpYy5oIFwKLSAgICAgICAgICAkKEJBU0VfRElSKS9mdGJhc2UuaCAgXAorQkFTRV9IIDo9ICQoQkFTRV9ESVIpL2Z0YmFzZS5oICBcCiAgICAgICAgICAgJChCQVNFX0RJUikvbWQ1LmMgICAgIFwKICAgICAgICAgICAkKEJBU0VfRElSKS9tZDUuaAogCmRpZmYgLS1naXQgYS9zcmMvYmRmL2JkZi5oIGIvc3JjL2JkZi9iZGYuaAppbmRleCA5MDEyNzI3Li5hNmJhODJlIDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZi5oCisrKyBiL3NyYy9iZGYvYmRmLmgKQEAgLTUxLDExICs1MSwxMSBAQAogLyogZW5kIG9mIGJkZlAuaCAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCREYgZm9udCBvcHRpb25zIG1hY3JvcyBhbmQgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQkRGIGZvbnQgb3B0aW9ucyBtYWNyb3MgYW5kIHR5cGVzLgorICAgKgorICAgKi8KIAogCiAjZGVmaW5lIEJERl9DT1JSRUNUX01FVFJJQ1MgIDB4MDEgLyogQ29ycmVjdCBpbnZhbGlkIG1ldHJpY3Mgd2hlbiBsb2FkaW5nLiAqLwpAQCAtOTMsMTEgKzkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICBjbGllbnRfZGF0YSApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCREYgZm9udCBwcm9wZXJ0eSBtYWNyb3MgYW5kIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQkRGIGZvbnQgcHJvcGVydHkgbWFjcm9zIGFuZCB0eXBlcy4KKyAgICoKKyAgICovCiAKIAogI2RlZmluZSBCREZfQVRPTSAgICAgIDEKQEAgLTEyMywxMSArMTIzLDExIEBACiAgIH0gYmRmX3Byb3BlcnR5X3Q7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEJERiBmb250IG1ldHJpYyBhbmQgZ2x5cGggdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBCREYgZm9udCBtZXRyaWMgYW5kIGdseXBoIHR5cGVzLgorICAgKgorICAgKi8KIAogCiAgIHR5cGVkZWYgc3RydWN0ICBiZGZfYmJ4X3RfCkBAIC0yMjYsMTEgKzIyNiwxMSBAQAogICB9IGJkZl9mb250X3Q7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFR5cGVzIGZvciBsb2FkL3NhdmUgY2FsbGJhY2tzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUeXBlcyBmb3IgbG9hZC9zYXZlIGNhbGxiYWNrcy4KKyAgICoKKyAgICovCiAKIAogICAvKiBFcnJvciBjb2Rlcy4gKi8KQEAgLTI0NywxMSArMjQ3LDExIEBACiAjZGVmaW5lIEJERl9JTlZBTElEX0xJTkUgICAgICAtMTAwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEJERiBmb250IEFQSS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBCREYgZm9udCBBUEkuCisgICAqCisgICAqLwogCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIGJkZl9sb2FkX2ZvbnQoIEZUX1N0cmVhbSAgICAgICBzdHJlYW0sCmRpZmYgLS1naXQgYS9zcmMvYmRmL2JkZmRyaXZyLmMgYi9zcmMvYmRmL2JkZmRyaXZyLmMKaW5kZXggY2E5MzdmOC4uMWUyNzJiMCAxMDA2NDQKLS0tIGEvc3JjL2JkZi9iZGZkcml2ci5jCisrKyBiL3NyYy9iZGYvYmRmZHJpdnIuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjaW5jbHVkZSAiYmRmZXJyb3IuaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9iZGZkcml2ZXIKIApAQCAtNDAxLDggKzQwMSw3IEBACiAgICAgICBiZGZmYWNlLT5mYWNlX2luZGV4ID0gMDsKIAogICAgICAgYmRmZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMOwogCiAgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiU1BBQ0lORyIgKTsKICAgICAgIGlmICggcHJvcCAmJiBwcm9wLT5mb3JtYXQgPT0gQkRGX0FUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCkBAIC04NjMsNyArODYyLDcgQEAKIAogIC8qCiAgICoKLSAgKiAgQkRGIFNFUlZJQ0UKKyAgKiBCREYgU0VSVklDRQogICAqCiAgICovCiAKQEAgLTkzOSw3ICs5MzgsNyBAQAogCiAgLyoKICAgKgotICAqICBTRVJWSUNFUyBMSVNUCisgICogU0VSVklDRVMgTElTVAogICAqCiAgICovCiAKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmZHJpdnIuaCBiL3NyYy9iZGYvYmRmZHJpdnIuaAppbmRleCA5NDU1MDgxLi40ODU3MzE2IDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZmRyaXZyLmgKKysrIGIvc3JjL2JkZi9iZGZkcml2ci5oCkBAIC0zNiwxMCArMzYsNiBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0jZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCiAKICAgdHlwZWRlZiBzdHJ1Y3QgIEJERl9lbmNvZGluZ19lbF8KICAgewpkaWZmIC0tZ2l0IGEvc3JjL2JkZi9iZGZlcnJvci5oIGIvc3JjL2JkZi9iZGZlcnJvci5oCmluZGV4IGI0NjJjN2QuLmRiZTQxYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iZGYvYmRmZXJyb3IuaAorKysgYi9zcmMvYmRmL2JkZmVycm9yLmgKQEAgLTIwLDExICsyMCwxMSBAQAogICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQkRGIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIEJERiBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIEJERkVSUk9SX0hfCiAjZGVmaW5lIEJERkVSUk9SX0hfCmRpZmYgLS1naXQgYS9zcmMvYmRmL2JkZmxpYi5jIGIvc3JjL2JkZi9iZGZsaWIuYwppbmRleCAyZjVjOTlkLi41YzA5NTkxIDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZmxpYi5jCisrKyBiL3NyYy9iZGYvYmRmbGliLmMKQEAgLTIyLDEzICsyMiwxMyBAQAogICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gYmRmLmMsdiAxLjIyIDIwMDAvMDMvMTYgMjA6MDg6NTAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIHRha2VuIGZyb20gTWFyayBMZWlzaGVyJ3MgeG1iZGZlZCBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBiZGYuYyx2IDEuMjIgMjAwMC8wMy8xNiAyMDowODo1MAorICAgKgorICAgKiB0YWtlbiBmcm9tIE1hcmsgTGVpc2hlcidzIHhtYmRmZWQgcGFja2FnZQorICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQyLDIxICs0MiwyMSBAQAogI2luY2x1ZGUgImJkZmVycm9yLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfYmRmbGliCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmF1bHQgQkRGIGZvbnQgb3B0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBEZWZhdWx0IEJERiBmb250IG9wdGlvbnMuCisgICAqCisgICAqLwogCiAKICAgc3RhdGljIGNvbnN0IGJkZl9vcHRpb25zX3QgIF9iZGZfb3B0cyA9CkBAIC02OCwxMSArNjgsMTEgQEAKICAgfTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQnVpbHRpbiBCREYgZm9udCBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEJ1aWx0aW4gQkRGIGZvbnQgcHJvcGVydGllcy4KKyAgICoKKyAgICovCiAKICAgLyogTGlzdCBvZiBtb3N0IHByb3BlcnRpZXMgdGhhdCBtaWdodCBhcHBlYXIgaW4gYSBmb250LiAgRG9lc24ndCBpbmNsdWRlICovCiAgIC8qIHRoZSBSQVdfKiBhbmQgQVhJU18qIHByb3BlcnRpZXMgaW4gWDExUjYgcG9seW1vcnBoaWMgZm9udHMuICAgICAgICAgICAqLwpAQCAtMjE5LDExICsyMTksMTEgQEAKICNkZWZpbmUgREJHTVNHMiAgIiAoMHglbFgpXG4iCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBVdGlsaXR5IHR5cGVzIGFuZCBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCiAKICAgLyogRnVuY3Rpb24gdHlwZSBmb3IgcGFyc2luZyBsaW5lcyBvZiBhIEJERiBmb250LiAqLwpAQCAtOTAwLDExICs5MDAsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCREYgZm9udCBmaWxlIHBhcnNpbmcgZmxhZ3MgYW5kIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQkRGIGZvbnQgZmlsZSBwYXJzaW5nIGZsYWdzIGFuZCBmdW5jdGlvbnMuCisgICAqCisgICAqLwogCiAKICAgLyogUGFyc2UgZmxhZ3MuICovCkBAIC0xNTU2LDYgKzE1NTYsOSBAQAogICAgICAgZ290byBFeGl0OwogICAgIH0KIAorICAgIGlmICggISggcC0+ZmxhZ3MgJiBCREZfRU5DT0RJTkdfICkgKQorICAgICAgZ290byBNaXNzaW5nX0VuY29kaW5nOworCiAgICAgLyogUG9pbnQgYXQgdGhlIGdseXBoIGJlaW5nIGNvbnN0cnVjdGVkLiAqLwogICAgIGlmICggcC0+Z2x5cGhfZW5jID09IC0xICkKICAgICAgIGdseXBoID0gZm9udC0+dW5lbmNvZGVkICsgKCBmb250LT51bmVuY29kZWRfdXNlZCAtIDEgKTsKQEAgLTE2MjYsOSArMTYyOSw2IEBACiAgICAgLyogRXhwZWN0IHRoZSBTV0lEVEggKHNjYWxhYmxlIHdpZHRoKSBmaWVsZCBuZXh0LiAqLwogICAgIGlmICggX2JkZl9zdHJuY21wKCBsaW5lLCAiU1dJRFRIIiwgNiApID09IDAgKQogICAgIHsKLSAgICAgIGlmICggISggcC0+ZmxhZ3MgJiBCREZfRU5DT0RJTkdfICkgKQotICAgICAgICBnb3RvIE1pc3NpbmdfRW5jb2Rpbmc7Ci0KICAgICAgIGVycm9yID0gX2JkZl9saXN0X3NwbGl0KCAmcC0+bGlzdCwgKGNoYXIgKikiICsiLCBsaW5lLCBsaW5lbGVuICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwpAQCAtMTY0Miw5ICsxNjQyLDYgQEAKICAgICAvKiBFeHBlY3QgdGhlIERXSURUSCAoc2NhbGFibGUgd2lkdGgpIGZpZWxkIG5leHQuICovCiAgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJEV0lEVEgiLCA2ICkgPT0gMCApCiAgICAgewotICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIEJERl9FTkNPRElOR18gKSApCi0gICAgICAgIGdvdG8gTWlzc2luZ19FbmNvZGluZzsKLQogICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNjcwLDkgKzE2NjcsNiBAQAogICAgIC8qIEV4cGVjdCB0aGUgQkJYIGZpZWxkIG5leHQuICovCiAgICAgaWYgKCBfYmRmX3N0cm5jbXAoIGxpbmUsICJCQlgiLCAzICkgPT0gMCApCiAgICAgewotICAgICAgaWYgKCAhKCBwLT5mbGFncyAmIEJERl9FTkNPRElOR18gKSApCi0gICAgICAgIGdvdG8gTWlzc2luZ19FbmNvZGluZzsKLQogICAgICAgZXJyb3IgPSBfYmRmX2xpc3Rfc3BsaXQoICZwLT5saXN0LCAoY2hhciAqKSIgKyIsIGxpbmUsIGxpbmVsZW4gKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CkBAIC0yMTk2LDExICsyMTkwLDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEFQSS4KKyAgICoKKyAgICovCiAKIAogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKZGlmZiAtLWdpdCBhL3NyYy9iemlwMi9mdGJ6aXAyLmMgYi9zcmMvYnppcDIvZnRiemlwMi5jCmluZGV4IDE2MDE5NDguLjBmNmFiMTUgMTAwNjQ0Ci0tLSBhL3NyYy9iemlwMi9mdGJ6aXAyLmMKKysrIGIvc3JjL2J6aXAyL2Z0YnppcDIuYwpAQCAtMSwyNSArMSwyNSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRiemlwMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5iejIgY29tcHJlc3NlZCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgb3B0aW9uYWwgY29tcG9uZW50IHJlbGllcyBvbiBsaWJiejIuICBJdCBzaG91bGQgbWFpbmx5IGJlIHVzZWQgdG8gKi8KLS8qICBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAgICAgICAgICAgICovCi0vKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgSm9lbCBLbGluZ2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBiYXNlZCBvbiBgc3JjL2d6aXAvZnRnemlwLmMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRiemlwMi5jCisgKgorICogICBGcmVlVHlwZSBzdXBwb3J0IGZvciAuYnoyIGNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIGxpYmJ6Mi4gIEl0IHNob3VsZCBtYWlubHkgYmUgdXNlZCB0bworICogcGFyc2UgY29tcHJlc3NlZCBQQ0YgZm9udHMsIGFzIGZvdW5kIHdpdGggbWFueSBYMTEgc2VydmVyCisgKiBkaXN0cmlidXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDEwLTIwMTggYnkKKyAqIEpvZWwgS2xpbmdoZWQuCisgKgorICogYmFzZWQgb24gYHNyYy9nemlwL2Z0Z3ppcC5jJworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDMsMTAgKzQzLDYgQEAKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyCiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotI2Vycm9yICJiemlwMiBjb2RlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCiAjZGVmaW5lIEJaX05PX1NURElPIC8qIERvIG5vdCBuZWVkIEZJTEUgKi8KICNpbmNsdWRlIDxiemxpYi5oPgogCkBAIC00NzUsOCArNDcxLDggQEAKICAgICBtZW1vcnkgPSBzb3VyY2UtPm1lbW9yeTsKIAogICAgIC8qCi0gICAgICogIGNoZWNrIHRoZSBoZWFkZXIgcmlnaHQgbm93OyB0aGlzIHByZXZlbnRzIGFsbG9jYXRpbmcgdW5uZWNlc3NhcnkKLSAgICAgKiAgb2JqZWN0cyB3aGVuIHdlIGRvbid0IG5lZWQgdGhlbQorICAgICAqIGNoZWNrIHRoZSBoZWFkZXIgcmlnaHQgbm93OyB0aGlzIHByZXZlbnRzIGFsbG9jYXRpbmcgdW5uZWNlc3NhcnkKKyAgICAgKiBvYmplY3RzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtCiAgICAgICovCiAgICAgZXJyb3IgPSBmdF9iemlwMl9jaGVja19oZWFkZXIoIHNvdXJjZSApOwogICAgIGlmICggZXJyb3IgKQpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2FjaGUuYyBiL3NyYy9jYWNoZS9mdGNhY2hlLmMKaW5kZXggMWI0MjVhZi4uZmI3OGI4MSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2FjaGUuYworKysgYi9zcmMvY2FjaGUvZnRjYWNoZS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNhY2hlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIENhY2hpbmcgc3ViLXN5c3RlbSAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNhY2hlLmMKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBDYWNoaW5nIHN1Yi1zeXN0ZW0gKGJvZHkgb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgYi9zcmMvY2FjaGUvZnRjYmFzaWMuYwppbmRleCA5OTRhYTEyLi5mMmI3NWVlIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjYmFzaWMuYworKysgYi9zcmMvY2FjaGUvZnRjYmFzaWMuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjYmFzaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBiYXNpYyBjYWNoZSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjYmFzaWMuYworICoKKyAqICAgVGhlIEZyZWVUeXBlIGJhc2ljIGNhY2hlIGludGVyZmFjZSAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzEsNyArMzEsNyBAQAogCiAKICAgLyoKLSAgICogIEJhc2ljIEZhbWlsaWVzCisgICAqIEJhc2ljIEZhbWlsaWVzCiAgICAqCiAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRDX0Jhc2ljQXR0clJlY18KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKaW5kZXggMTJlYzU4NS4uYTlhYTVkNCAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2NhY2hlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgaW50ZXJuYWwgY2FjaGUgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2NhY2hlLmMKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBpbnRlcm5hbCBjYWNoZSBpbnRlcmZhY2UgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5oIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKaW5kZXggODU5YzU0Ny4uYzFmOGMyOSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2NhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBpbnRlcm5hbCBjYWNoZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2NhY2hlLmgKKyAqCisgKiAgIEZyZWVUeXBlIGludGVybmFsIGNhY2hlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRDQ0FDSEVfSF8KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFYWNoIGNhY2hlIGNvbnRyb2xzIG9uZSBvciBtb3JlIGNhY2hlIG5vZGVzLiAgRWFjaCBub2RlIGlzIHBhcnQgb2YgICAgKi8KLSAgLyogdGhlIGdsb2JhbF9scnUgbGlzdCBvZiB0aGUgbWFuYWdlci4gIEl0cyBgZGF0YScgZmllbGQgaG93ZXZlciBpcyB1c2VkICovCi0gIC8qIGFzIGEgcmVmZXJlbmNlIGNvdW50IGZvciBub3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSBub2RlIGNhbiBiZSBhbnl0aGluZywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGhlbGQgYnkgICovCi0gIC8qIHRoZSBjYWNoZS4gIEl0IGNhbiBiZSBhbiBpbmRpdmlkdWFsIGdseXBoIGltYWdlLCBhIHNldCBvZiBiaXRtYXBzICAgICAqLwotICAvKiBnbHlwaHMgZm9yIGEgZ2l2ZW4gc2l6ZSwgc29tZSBtZXRyaWNzLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRWFjaCBjYWNoZSBjb250cm9scyBvbmUgb3IgbW9yZSBjYWNoZSBub2Rlcy4gIEVhY2ggbm9kZSBpcyBwYXJ0IG9mCisgICAqIHRoZSBnbG9iYWxfbHJ1IGxpc3Qgb2YgdGhlIG1hbmFnZXIuICBJdHMgYGRhdGEnIGZpZWxkIGhvd2V2ZXIgaXMgdXNlZAorICAgKiBhcyBhIHJlZmVyZW5jZSBjb3VudCBmb3Igbm93LgorICAgKgorICAgKiBBIG5vZGUgY2FuIGJlIGFueXRoaW5nLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24gaGVsZCBieQorICAgKiB0aGUgY2FjaGUuICBJdCBjYW4gYmUgYW4gaW5kaXZpZHVhbCBnbHlwaCBpbWFnZSwgYSBzZXQgb2YgYml0bWFwcworICAgKiBnbHlwaHMgZm9yIGEgZ2l2ZW4gc2l6ZSwgc29tZSBtZXRyaWNzLCBldGMuCisgICAqCisgICAqLwogCiAgIC8qIHN0cnVjdHVyZSBzaXplIHNob3VsZCBiZSAyMCBieXRlcyBvbiAzMi1iaXRzIG1hY2hpbmVzICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVENfTm9kZVJlY18KQEAgLTMwMiwxMSArMzAyLDExIEBACiAgICAqCiAgICAqIEV4YW1wbGU6CiAgICAqCi0gICAqICAgewotICAgKiAgICAgRlRDX0NBQ0hFX1RSWUxPT1AoIGNhY2hlICkKLSAgICogICAgICAgZXJyb3IgPSBsb2FkX2RhdGEoIC4uLiApOwotICAgKiAgICAgRlRDX0NBQ0hFX1RSWUxPT1BfRU5EKCkKLSAgICogICB9CisgICAqIHsKKyAgICogICBGVENfQ0FDSEVfVFJZTE9PUCggY2FjaGUgKQorICAgKiAgICAgZXJyb3IgPSBsb2FkX2RhdGEoIC4uLiApOworICAgKiAgIEZUQ19DQUNIRV9UUllMT09QX0VORCgpCisgICAqIH0KICAgICoKICAgICovCiAjZGVmaW5lIEZUQ19DQUNIRV9UUllMT09QKCBjYWNoZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2NiYWNrLmggYi9zcmMvY2FjaGUvZnRjY2JhY2suaAppbmRleCBlNTFkOGQ2Li4xZTQxNGFhIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjY2JhY2suaAorKysgYi9zcmMvY2FjaGUvZnRjY2JhY2suaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjY2JhY2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENhbGxiYWNrIGZ1bmN0aW9ucyBvZiB0aGUgY2FjaGluZyBzdWItc3lzdGVtIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjY2JhY2suaAorICoKKyAqICAgQ2FsbGJhY2sgZnVuY3Rpb25zIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAjaWZuZGVmIEZUQ0NCQUNLX0hfCiAjZGVmaW5lIEZUQ0NCQUNLX0hfCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjY21hcC5jIGIvc3JjL2NhY2hlL2Z0Y2NtYXAuYwppbmRleCBkMjBiMGY0Li40N2I4Yjc2IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjY21hcC5jCisrKyBiL3NyYy9jYWNoZS9mdGNjbWFwLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2NtYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBDaGFyTWFwIGNhY2hlIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2NtYXAuYworICoKKyAqICAgRnJlZVR5cGUgQ2hhck1hcCBjYWNoZSAoYm9keSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMSwxOCArMzEsMTggQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jYWNoZQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFYWNoIEZUQ19DTWFwTm9kZSBjb250YWlucyBhIHNpbXBsZSBhcnJheSB0byBtYXAgYSByYW5nZSBvZiBjaGFyYWN0ZXIgKi8KLSAgLyogY29kZXMgdG8gZXF1aXZhbGVudCBnbHlwaCBpbmRpY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGb3Igbm93LCB0aGUgaW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYzogRWFjaCBub2RlIG1hcHMgYSByYW5nZSBvZiAgKi8KLSAgLyogMTI4IGNvbnNlY3V0aXZlIGNoYXJhY3RlciBjb2RlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGdseXBoIGluZGljZXMuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBXZSBjb3VsZCBkbyBtb3JlIGNvbXBsZXggdGhpbmdzLCBidXQgSSBkb24ndCB0aGluayBpdCBpcyByZWFsbHkgdmVyeSAgKi8KLSAgLyogdXNlZnVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEVhY2ggRlRDX0NNYXBOb2RlIGNvbnRhaW5zIGEgc2ltcGxlIGFycmF5IHRvIG1hcCBhIHJhbmdlIG9mIGNoYXJhY3RlcgorICAgKiBjb2RlcyB0byBlcXVpdmFsZW50IGdseXBoIGluZGljZXMuCisgICAqCisgICAqIEZvciBub3csIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljOiBFYWNoIG5vZGUgbWFwcyBhIHJhbmdlIG9mCisgICAqIDEyOCBjb25zZWN1dGl2ZSBjaGFyYWN0ZXIgY29kZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRpY2VzLgorICAgKgorICAgKiBXZSBjb3VsZCBkbyBtb3JlIGNvbXBsZXggdGhpbmdzLCBidXQgSSBkb24ndCB0aGluayBpdCBpcyByZWFsbHkgdmVyeQorICAgKiB1c2VmdWwuCisgICAqCisgICAqLwogCiAKICAgLyogbnVtYmVyIG9mIGdseXBoIGluZGljZXMgLyBjaGFyYWN0ZXIgY29kZSBwZXIgbm9kZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2Vycm9yLmggYi9zcmMvY2FjaGUvZnRjZXJyb3IuaAppbmRleCBhMjZjZDU5Li42ZWQ5ZTllIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZXJyb3IuaAorKysgYi9zcmMvY2FjaGUvZnRjZXJyb3IuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENhY2hpbmcgc3ViLXN5c3RlbSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjZXJyb3IuaAorICoKKyAqICAgQ2FjaGluZyBzdWItc3lzdGVtIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gZXJyb3IgZW51bWVyYXRpb24gICovCi0gIC8qIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBlcnJvciBlbnVtZXJhdGlvbgorICAgKiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIEZUQ0VSUk9SX0hfCiAjZGVmaW5lIEZUQ0VSUk9SX0hfCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjZ2x5cGguYyBiL3NyYy9jYWNoZS9mdGNnbHlwaC5jCmluZGV4IDc4MmNjMGUuLjFiODY0MjkgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNnbHlwaC5jCisrKyBiL3NyYy9jYWNoZS9mdGNnbHlwaC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNnbHlwaC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgR2x5cGggSW1hZ2UgKEZUX0dseXBoKSBjYWNoZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNnbHlwaC5jCisgKgorICogICBGcmVlVHlwZSBHbHlwaCBJbWFnZSAoRlRfR2x5cGgpIGNhY2hlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjZ2x5cGguaCBiL3NyYy9jYWNoZS9mdGNnbHlwaC5oCmluZGV4IDIzYzI0ZDIuLjIzNGVjODkgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNnbHlwaC5oCisrKyBiL3NyYy9jYWNoZS9mdGNnbHlwaC5oCkBAIC0xLDEwMSArMSwxMDEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2dseXBoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBhYnN0cmFjdCBnbHlwaCBjYWNoZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2dseXBoLmgKKyAqCisgKiAgIEZyZWVUeXBlIGFic3RyYWN0IGdseXBoIGNhY2hlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogICAvKgogICAgKgotICAgKiAgRlRDX0dDYWNoZSBpcyBhbiBfYWJzdHJhY3RfIGNhY2hlIG9iamVjdCBvcHRpbWl6ZWQgdG8gc3RvcmUgZ2x5cGgKLSAgICogIGRhdGEuICBJdCB3b3JrcyBhcyBmb2xsb3dzOgorICAgKiBGVENfR0NhY2hlIGlzIGFuIF9hYnN0cmFjdF8gY2FjaGUgb2JqZWN0IG9wdGltaXplZCB0byBzdG9yZSBnbHlwaAorICAgKiBkYXRhLiAgSXQgd29ya3MgYXMgZm9sbG93czoKICAgICoKLSAgICogICAtIEl0IG1hbmFnZXMgRlRDX0dOb2RlIG9iamVjdHMuIEVhY2ggb25lIG9mIHRoZW0gY2FuIGhvbGQgb25lIG9yIG1vcmUKLSAgICogICAgIGdseXBoIGBpdGVtcycuICBJdGVtIHR5cGVzIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBGVENfR0NhY2hlIGJ1dAotICAgKiAgICAgaW4gY2xhc3NlcyB0aGF0IGV4dGVuZCBpdC4KKyAgICogLSBJdCBtYW5hZ2VzIEZUQ19HTm9kZSBvYmplY3RzLiBFYWNoIG9uZSBvZiB0aGVtIGNhbiBob2xkIG9uZSBvciBtb3JlCisgICAqICAgZ2x5cGggYGl0ZW1zJy4gIEl0ZW0gdHlwZXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIEZUQ19HQ2FjaGUgYnV0CisgICAqICAgaW4gY2xhc3NlcyB0aGF0IGV4dGVuZCBpdC4KICAgICoKLSAgICogICAtIEdseXBoIGF0dHJpYnV0ZXMsIGxpa2UgZmFjZSBJRCwgY2hhcmFjdGVyIHNpemUsIHJlbmRlciBtb2RlLCBldGMuLAotICAgKiAgICAgY2FuIGJlIGdyb3VwZWQgaW50byBhYnN0cmFjdCBgZ2x5cGggZmFtaWxpZXMnLiAgVGhpcyBhdm9pZHMgc3RvcmluZwotICAgKiAgICAgdGhlIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBGVENfR0NhY2hlLCBzaW5jZSBpdCBpcyBsaWtlbHkgdGhhdCBtYW55Ci0gICAqICAgICBGVENfR05vZGVzIHdpbGwgYmVsb25nIHRvIHRoZSBzYW1lIGZhbWlseSBpbiB0eXBpY2FsIHVzZXMuCisgICAqIC0gR2x5cGggYXR0cmlidXRlcywgbGlrZSBmYWNlIElELCBjaGFyYWN0ZXIgc2l6ZSwgcmVuZGVyIG1vZGUsIGV0Yy4sCisgICAqICAgY2FuIGJlIGdyb3VwZWQgaW50byBhYnN0cmFjdCBgZ2x5cGggZmFtaWxpZXMnLiAgVGhpcyBhdm9pZHMgc3RvcmluZworICAgKiAgIHRoZSBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgRlRDX0dDYWNoZSwgc2luY2UgaXQgaXMgbGlrZWx5IHRoYXQgbWFueQorICAgKiAgIEZUQ19HTm9kZXMgd2lsbCBiZWxvbmcgdG8gdGhlIHNhbWUgZmFtaWx5IGluIHR5cGljYWwgdXNlcy4KICAgICoKLSAgICogICAtIEVhY2ggRlRDX0dOb2RlIGlzIHRodXMgYW4gRlRDX05vZGUgd2l0aCB0d28gYWRkaXRpb25hbCBmaWVsZHM6CisgICAqIC0gRWFjaCBGVENfR05vZGUgaXMgdGh1cyBhbiBGVENfTm9kZSB3aXRoIHR3byBhZGRpdGlvbmFsIGZpZWxkczoKICAgICoKLSAgICogICAgICAgKiBnaW5kZXg6IEEgZ2x5cGggaW5kZXgsIG9yIHRoZSBmaXJzdCBpbmRleCBpbiBhIGdseXBoIHJhbmdlLgotICAgKiAgICAgICAqIGZhbWlseTogQSBwb2ludGVyIHRvIGEgZ2x5cGggYGZhbWlseScuCisgICAqICAgKiBnaW5kZXg6IEEgZ2x5cGggaW5kZXgsIG9yIHRoZSBmaXJzdCBpbmRleCBpbiBhIGdseXBoIHJhbmdlLgorICAgKiAgICogZmFtaWx5OiBBIHBvaW50ZXIgdG8gYSBnbHlwaCBgZmFtaWx5Jy4KICAgICoKLSAgICogICAtIEZhbWlseSB0eXBlcyBhcmUgbm90IGZ1bGx5IHNwZWNpZmljIGluIHRoZSBGVENfRmFtaWx5IHR5cGUsIGJ1dAotICAgKiAgICAgYnkgY2xhc3NlcyB0aGF0IGV4dGVuZCBpdC4KKyAgICogLSBGYW1pbHkgdHlwZXMgYXJlIG5vdCBmdWxseSBzcGVjaWZpYyBpbiB0aGUgRlRDX0ZhbWlseSB0eXBlLCBidXQKKyAgICogICBieSBjbGFzc2VzIHRoYXQgZXh0ZW5kIGl0LgogICAgKgotICAgKiAgTm90ZSB0aGF0IGJvdGggRlRDX0ltYWdlQ2FjaGUgYW5kIEZUQ19TQml0Q2FjaGUgZXh0ZW5kIEZUQ19HQ2FjaGUuCi0gICAqICBUaGV5IHNoYXJlIGFuIEZUQ19GYW1pbHkgc3ViLWNsYXNzIGNhbGxlZCBGVENfQmFzaWNGYW1pbHkgd2hpY2ggaXMKLSAgICogIHVzZWQgdG8gc3RvcmUgdGhlIGZvbGxvd2luZyBkYXRhOiBmYWNlIElELCBwaXhlbC9wb2ludCBzaXplcywgbG9hZAotICAgKiAgZmxhZ3MuICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBgc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMnLgorICAgKiBOb3RlIHRoYXQgYm90aCBGVENfSW1hZ2VDYWNoZSBhbmQgRlRDX1NCaXRDYWNoZSBleHRlbmQgRlRDX0dDYWNoZS4KKyAgICogVGhleSBzaGFyZSBhbiBGVENfRmFtaWx5IHN1Yi1jbGFzcyBjYWxsZWQgRlRDX0Jhc2ljRmFtaWx5IHdoaWNoIGlzCisgICAqIHVzZWQgdG8gc3RvcmUgdGhlIGZvbGxvd2luZyBkYXRhOiBmYWNlIElELCBwaXhlbC9wb2ludCBzaXplcywgbG9hZAorICAgKiBmbGFncy4gIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIGBzcmMvY2FjaGUvZnRjYmFzaWMuYycuCiAgICAqCi0gICAqICBDbGllbnQgYXBwbGljYXRpb25zIGNhbiBleHRlbmQgRlRDX0dOb2RlIHdpdGggdGhlaXIgb3duIEZUQ19HTm9kZQotICAgKiAgYW5kIEZUQ19GYW1pbHkgc3ViLWNsYXNzZXMgdG8gaW1wbGVtZW50IG1vcmUgY29tcGxleCBjYWNoZXMgKGUuZy4sCi0gICAqICBoYW5kbGluZyBhdXRvbWF0aWMgc3ludGhlc2lzLCBsaWtlIG9ibGlxdWluZyAmIGVtYm9sZGVuaW5nLCBjb2xvcmVkCi0gICAqICBnbHlwaHMsIGV0Yy4pLgorICAgKiBDbGllbnQgYXBwbGljYXRpb25zIGNhbiBleHRlbmQgRlRDX0dOb2RlIHdpdGggdGhlaXIgb3duIEZUQ19HTm9kZQorICAgKiBhbmQgRlRDX0ZhbWlseSBzdWItY2xhc3NlcyB0byBpbXBsZW1lbnQgbW9yZSBjb21wbGV4IGNhY2hlcyAoZS5nLiwKKyAgICogaGFuZGxpbmcgYXV0b21hdGljIHN5bnRoZXNpcywgbGlrZSBvYmxpcXVpbmcgJiBlbWJvbGRlbmluZywgY29sb3JlZAorICAgKiBnbHlwaHMsIGV0Yy4pLgogICAgKgotICAgKiAgU2VlIGFsc28gdGhlIEZUQ19JQ2FjaGUgJiBGVENfU0NhY2hlIGNsYXNzZXMgaW4gYGZ0Y2ltYWdlLmgnIGFuZAotICAgKiAgYGZ0Y3NiaXRzLmgnLCB3aGljaCBib3RoIGV4dGVuZCBGVENfR0NhY2hlIHdpdGggYWRkaXRpb25hbAotICAgKiAgb3B0aW1pemF0aW9ucy4KKyAgICogU2VlIGFsc28gdGhlIEZUQ19JQ2FjaGUgJiBGVENfU0NhY2hlIGNsYXNzZXMgaW4gYGZ0Y2ltYWdlLmgnIGFuZAorICAgKiBgZnRjc2JpdHMuaCcsIHdoaWNoIGJvdGggZXh0ZW5kIEZUQ19HQ2FjaGUgd2l0aCBhZGRpdGlvbmFsCisgICAqIG9wdGltaXphdGlvbnMuCiAgICAqCi0gICAqICBBIHR5cGljYWwgRlRDX0dDYWNoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUgYXQgbGVhc3QgdGhlCi0gICAqICBmb2xsb3dpbmc6CisgICAqIEEgdHlwaWNhbCBGVENfR0NhY2hlIGltcGxlbWVudGF0aW9uIG11c3QgcHJvdmlkZSBhdCBsZWFzdCB0aGUKKyAgICogZm9sbG93aW5nOgogICAgKgotICAgKiAgLSBGVENfR05vZGUgc3ViLWNsYXNzLCBlLmcuIE15Tm9kZSwgd2l0aCByZWxldmFudCBtZXRob2RzOgotICAgKiAgICAgICAgbXlfbm9kZV9uZXcgICAgICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Jbml0KQotICAgKiAgICAgICAgbXlfbm9kZV9mcmVlICAgICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Eb25lKQotICAgKiAgICAgICAgbXlfbm9kZV9jb21wYXJlICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Db21wYXJlKQotICAgKiAgICAgICAgbXlfbm9kZV9yZW1vdmVfZmFjZWlkICAobXVzdCBjYWxsIGZ0Y19nbm9kZV91bnNlbGVjdCBpbiBjYXNlCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtYXRjaCkKKyAgICogLSBGVENfR05vZGUgc3ViLWNsYXNzLCBlLmcuIE15Tm9kZSwgd2l0aCByZWxldmFudCBtZXRob2RzOgorICAgKiAgICAgbXlfbm9kZV9uZXcgICAgICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Jbml0KQorICAgKiAgICAgbXlfbm9kZV9mcmVlICAgICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Eb25lKQorICAgKiAgICAgbXlfbm9kZV9jb21wYXJlICAgICAgICAobXVzdCBjYWxsIEZUQ19HTm9kZV9Db21wYXJlKQorICAgKiAgICAgbXlfbm9kZV9yZW1vdmVfZmFjZWlkICAobXVzdCBjYWxsIGZ0Y19nbm9kZV91bnNlbGVjdCBpbiBjYXNlCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBtYXRjaCkKICAgICoKLSAgICogIC0gRlRDX0ZhbWlseSBzdWItY2xhc3MsIGUuZy4gTXlGYW1pbHksIHdpdGggcmVsZXZhbnQgbWV0aG9kczoKLSAgICogICAgICAgIG15X2ZhbWlseV9jb21wYXJlCi0gICAqICAgICAgICBteV9mYW1pbHlfaW5pdAotICAgKiAgICAgICAgbXlfZmFtaWx5X3Jlc2V0IChvcHRpb25hbCkKLSAgICogICAgICAgIG15X2ZhbWlseV9kb25lCisgICAqIC0gRlRDX0ZhbWlseSBzdWItY2xhc3MsIGUuZy4gTXlGYW1pbHksIHdpdGggcmVsZXZhbnQgbWV0aG9kczoKKyAgICogICAgIG15X2ZhbWlseV9jb21wYXJlCisgICAqICAgICBteV9mYW1pbHlfaW5pdAorICAgKiAgICAgbXlfZmFtaWx5X3Jlc2V0IChvcHRpb25hbCkKKyAgICogICAgIG15X2ZhbWlseV9kb25lCiAgICAqCi0gICAqICAtIEZUQ19HUXVlcnkgc3ViLWNsYXNzLCBlLmcuIE15UXVlcnksIHRvIGhvbGQgY2FjaGUtc3BlY2lmaWMgcXVlcnkKLSAgICogICAgZGF0YS4KKyAgICogLSBGVENfR1F1ZXJ5IHN1Yi1jbGFzcywgZS5nLiBNeVF1ZXJ5LCB0byBob2xkIGNhY2hlLXNwZWNpZmljIHF1ZXJ5CisgICAqICAgZGF0YS4KICAgICoKLSAgICogIC0gQ29uc3RhbnQgc3RydWN0dXJlcyBmb3IgYSBGVENfR05vZGVDbGFzcy4KKyAgICogLSBDb25zdGFudCBzdHJ1Y3R1cmVzIGZvciBhIEZUQ19HTm9kZUNsYXNzLgogICAgKgotICAgKiAgLSBNeUNhY2hlTmV3KCkgY2FuIGJlIGltcGxlbWVudGVkIGVhc2lseSBhcyBhIGNhbGwgdG8gdGhlIGNvbnZlbmllbmNlCi0gICAqICAgIGZ1bmN0aW9uIEZUQ19HQ2FjaGVfTmV3LgorICAgKiAtIE15Q2FjaGVOZXcoKSBjYW4gYmUgaW1wbGVtZW50ZWQgZWFzaWx5IGFzIGEgY2FsbCB0byB0aGUgY29udmVuaWVuY2UKKyAgICogICBmdW5jdGlvbiBGVENfR0NhY2hlX05ldy4KICAgICoKLSAgICogIC0gTXlDYWNoZUxvb2t1cCB3aXRoIGEgY2FsbCB0byBGVENfR0NhY2hlX0xvb2t1cC4gIFRoaXMgZnVuY3Rpb24gd2lsbAotICAgKiAgICBhdXRvbWF0aWNhbGx5OgorICAgKiAtIE15Q2FjaGVMb29rdXAgd2l0aCBhIGNhbGwgdG8gRlRDX0dDYWNoZV9Mb29rdXAuICBUaGlzIGZ1bmN0aW9uIHdpbGwKKyAgICogICBhdXRvbWF0aWNhbGx5OgogICAgKgotICAgKiAgICAtIFNlYXJjaCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmFtaWx5IGluIHRoZSBjYWNoZSwgb3IgY3JlYXRlCi0gICAqICAgICAgYSBuZXcgb25lIGlmIG5lY2Vzc2FyeS4gIFB1dCBpdCBpbiBGVENfR1FVRVJZKG15cXVlcnkpLmZhbWlseQorICAgKiAgIC0gU2VhcmNoIGZvciB0aGUgY29ycmVzcG9uZGluZyBmYW1pbHkgaW4gdGhlIGNhY2hlLCBvciBjcmVhdGUKKyAgICogICAgIGEgbmV3IG9uZSBpZiBuZWNlc3NhcnkuICBQdXQgaXQgaW4gRlRDX0dRVUVSWShteXF1ZXJ5KS5mYW1pbHkKICAgICoKLSAgICogICAgLSBDYWxsIEZUQ19DYWNoZV9Mb29rdXAuCisgICAqICAgLSBDYWxsIEZUQ19DYWNoZV9Mb29rdXAuCiAgICAqCi0gICAqICAgIElmIGl0IHJldHVybnMgTlVMTCwgeW91IHNob3VsZCBjcmVhdGUgYSBuZXcgbm9kZSwgdGhlbiBjYWxsCi0gICAqICAgIGZ0Y19jYWNoZV9hZGQgYXMgdXN1YWwuCisgICAqICAgSWYgaXQgcmV0dXJucyBOVUxMLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyBub2RlLCB0aGVuIGNhbGwKKyAgICogICBmdGNfY2FjaGVfYWRkIGFzIHVzdWFsLgogICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW1wb3J0YW50OiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBvbmx5IHVzZWQgdG8gICAgICAgICovCi0gIC8qICAgICAgICAgICAgaW1wbGVtZW50IGFuIGFic3RyYWN0IGdseXBoIGNhY2hlIGNsYXNzLiAgWW91IG5lZWQgdG8gICAgICAqLwotICAvKiAgICAgICAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCBsb2dpYyB0byBpbXBsZW1lbnQgYSBjb21wbGV0ZSBjYWNoZS4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSW1wb3J0YW50OiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFyZSBvbmx5IHVzZWQgdG8KKyAgICogICAgICAgICAgICBpbXBsZW1lbnQgYW4gYWJzdHJhY3QgZ2x5cGggY2FjaGUgY2xhc3MuICBZb3UgbmVlZCB0bworICAgKiAgICAgICAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCBsb2dpYyB0byBpbXBsZW1lbnQgYSBjb21wbGV0ZSBjYWNoZS4KKyAgICoKKyAgICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyNSwxMSArMTI1LDExIEBACiAKIAogIC8qCi0gICogIFdlIGNhbiBncm91cCBnbHlwaHMgaW50byBgZmFtaWxpZXMnLiAgRWFjaCBmYW1pbHkgY29ycmVzcG9uZCB0byBhCi0gICogIGdpdmVuIGZhY2UgSUQsIGNoYXJhY3RlciBzaXplLCB0cmFuc2Zvcm0sIGV0Yy4KKyAgKiBXZSBjYW4gZ3JvdXAgZ2x5cGhzIGludG8gYGZhbWlsaWVzJy4gIEVhY2ggZmFtaWx5IGNvcnJlc3BvbmQgdG8gYQorICAqIGdpdmVuIGZhY2UgSUQsIGNoYXJhY3RlciBzaXplLCB0cmFuc2Zvcm0sIGV0Yy4KICAgKgotICAqICBGYW1pbGllcyBhcmUgaW1wbGVtZW50ZWQgYXMgTVJVIGxpc3Qgbm9kZXMuICBUaGV5IGFyZQotICAqICByZWZlcmVuY2UtY291bnRlZC4KKyAgKiBGYW1pbGllcyBhcmUgaW1wbGVtZW50ZWQgYXMgTVJVIGxpc3Qgbm9kZXMuICBUaGV5IGFyZQorICAqIHJlZmVyZW5jZS1jb3VudGVkLgogICAqLwogCiAgIHR5cGVkZWYgc3RydWN0ICBGVENfRmFtaWx5UmVjXwpAQCAtMTY3LDEyICsxNjcsMTIgQEAKICNkZWZpbmUgRlRDX0dRVUVSWSggeCApICAoIChGVENfR1F1ZXJ5KSh4KSApCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSAgICAgICAgICAqLwotICAvKiB1c2VyLXByb3ZpZGVkIGNhY2hlIGNsYXNzZXM7IG90aGVyd2lzZSwgdGhleSBhcmUgcmVhbGx5IHBhcnQgb2YgdGhlICAgKi8KLSAgLyogY2FjaGUgc3ViLXN5c3RlbSBpbnRlcm5hbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tCisgICAqIHVzZXItcHJvdmlkZWQgY2FjaGUgY2xhc3Nlczsgb3RoZXJ3aXNlLCB0aGV5IGFyZSByZWFsbHkgcGFydCBvZiB0aGUKKyAgICogY2FjaGUgc3ViLXN5c3RlbSBpbnRlcm5hbHMuCisgICAqLwogCiAgIC8qIG11c3QgYmUgY2FsbGVkIGJ5IGRlcml2ZWQgRlRDX05vZGVfSW5pdEZ1bmMgcm91dGluZXMgKi8KICAgRlRfTE9DQUwoIHZvaWQgKQpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmMgYi9zcmMvY2FjaGUvZnRjaW1hZ2UuYwppbmRleCA3N2ExMDAxLi41OTdlMzQxIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjaW1hZ2UuYworKysgYi9zcmMvY2FjaGUvZnRjaW1hZ2UuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjaW1hZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEltYWdlIGNhY2hlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjaW1hZ2UuYworICoKKyAqICAgRnJlZVR5cGUgSW1hZ2UgY2FjaGUgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNpbWFnZS5oIGIvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKaW5kZXggMjRhMjIxMC4uYWQ0N2Y4ZCAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2ltYWdlLmgKQEAgLTEsMzUgKzEsMzUgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2ltYWdlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBHZW5lcmljIEltYWdlIGNhY2hlIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0Y2ltYWdlLmgKKyAqCisgKiAgIEZyZWVUeXBlIEdlbmVyaWMgSW1hZ2UgY2FjaGUgKHNwZWNpZmljYXRpb24pCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICAvKgotICAqICBGVENfSUNhY2hlIGlzIGFuIF9hYnN0cmFjdF8gY2FjaGUgdXNlZCB0byBzdG9yZSBhIHNpbmdsZSBGVF9HbHlwaAotICAqICBpbWFnZSBwZXIgY2FjaGUgbm9kZS4KKyAgKiBGVENfSUNhY2hlIGlzIGFuIF9hYnN0cmFjdF8gY2FjaGUgdXNlZCB0byBzdG9yZSBhIHNpbmdsZSBGVF9HbHlwaAorICAqIGltYWdlIHBlciBjYWNoZSBub2RlLgogICAqCi0gICogIEZUQ19JQ2FjaGUgZXh0ZW5kcyBGVENfR0NhY2hlLiAgRm9yIGFuIGltcGxlbWVudGF0aW9uIGV4YW1wbGUsCi0gICogIHNlZSBGVENfSW1hZ2VDYWNoZSBpbiBgc3JjL2NhY2hlL2Z0YmFzaWMuYycuCisgICogRlRDX0lDYWNoZSBleHRlbmRzIEZUQ19HQ2FjaGUuICBGb3IgYW4gaW1wbGVtZW50YXRpb24gZXhhbXBsZSwKKyAgKiBzZWUgRlRDX0ltYWdlQ2FjaGUgaW4gYHNyYy9jYWNoZS9mdGJhc2ljLmMnLgogICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFYWNoIGltYWdlIGNhY2hlIHJlYWxseSBtYW5hZ2VzIEZUX0dseXBoIG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRWFjaCBpbWFnZSBjYWNoZSByZWFsbHkgbWFuYWdlcyBGVF9HbHlwaCBvYmplY3RzLgorICAgKgorICAgKi8KIAogCiAjaWZuZGVmIEZUQ0lNQUdFX0hfCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuYyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCmluZGV4IDJiY2Q5ZGYuLjliZTE3NzMgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5jCisrKyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNtYW5hZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQ2FjaGUgTWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNtYW5hZy5jCisgKgorICogICBGcmVlVHlwZSBDYWNoZSBNYW5hZ2VyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNiwxMCArMjYsNiBAQAogI2luY2x1ZGUgImZ0Y2NiYWNrLmgiCiAjaW5jbHVkZSAiZnRjZXJyb3IuaCIKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0jZXJyb3IgImNhY2hlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCi0jZW5kaWYKLQogCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NhY2hlCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuaCBiL3NyYy9jYWNoZS9mdGNtYW5hZy5oCmluZGV4IGI0YjQ3NTUuLjhkMGExZTEgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5oCisrKyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5oCkBAIC0xLDQ3ICsxLDQ3IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNtYW5hZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQ2FjaGUgTWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNtYW5hZy5oCisgKgorICogICBGcmVlVHlwZSBDYWNoZSBNYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEEgY2FjaGUgbWFuYWdlciBpcyBpbiBjaGFyZ2Ugb2YgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gTWFpbnRhaW4gYSBtYXBwaW5nIGJldHdlZW4gZ2VuZXJpYyBGVENfRmFjZUlEcyBhbmQgbGl2ZSBGVF9GYWNlICAgICovCi0gIC8qICAgIG9iamVjdHMuICBUaGUgbWFwcGluZyBpdHNlbGYgaXMgcGVyZm9ybWVkIHRocm91Z2ggYSB1c2VyLXByb3ZpZGVkICAqLwotICAvKiAgICBjYWxsYmFjay4gIEhvd2V2ZXIsIHRoZSBtYW5hZ2VyIG1haW50YWlucyBhIHNtYWxsIGNhY2hlIG9mIEZUX0ZhY2UgKi8KLSAgLyogICAgYW5kIEZUX1NpemUgb2JqZWN0cyBpbiBvcmRlciB0byBzcGVlZCB1cCB0aGluZ3MgY29uc2lkZXJhYmx5LiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgLSBNYW5hZ2Ugb25lIG9yIG1vcmUgY2FjaGUgb2JqZWN0cy4gIEVhY2ggY2FjaGUgaXMgaW4gY2hhcmdlIG9mICAgICAgKi8KLSAgLyogICAgaG9sZGluZyBhIHZhcnlpbmcgbnVtYmVyIG9mIGBjYWNoZSBub2RlcycuICBFYWNoIGNhY2hlIG5vZGUgICAgICAgICovCi0gIC8qICAgIHJlcHJlc2VudHMgYSBtaW5pbWFsIGFtb3VudCBvZiBpbmRpdmlkdWFsbHkgYWNjZXNzaWJsZSBjYWNoZWQgICAgICAqLwotICAvKiAgICBkYXRhLiAgRm9yIGV4YW1wbGUsIGEgY2FjaGUgbm9kZSBjYW4gYmUgYW4gRlRfR2x5cGggaW1hZ2UgICAgICAgICAgKi8KLSAgLyogICAgY29udGFpbmluZyBhIHZlY3RvciBvdXRsaW5lLCBvciBzb21lIGdseXBoIG1ldHJpY3MsIG9yIGFueXRoaW5nICAgICovCi0gIC8qICAgIGVsc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRWFjaCBjYWNoZSBub2RlIGhhcyBhIGNlcnRhaW4gc2l6ZSBpbiBieXRlcyB0aGF0IGlzIGFkZGVkIHRvIHRoZSAgICovCi0gIC8qICAgIHRvdGFsIGFtb3VudCBvZiBgY2FjaGUgbWVtb3J5JyB3aXRoaW4gdGhlIG1hbmFnZXIuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWxsIGNhY2hlIG5vZGVzIGFyZSBsb2NhdGVkIGluIGEgZ2xvYmFsIExSVSBsaXN0LCB3aGVyZSB0aGUgb2xkZXN0ICovCi0gIC8qICAgIG5vZGUgaXMgYXQgdGhlIHRhaWwgb2YgdGhlIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRWFjaCBub2RlIGJlbG9uZ3MgdG8gYSBzaW5nbGUgY2FjaGUsIGFuZCBpbmNsdWRlcyBhIHJlZmVyZW5jZSAgICAgICovCi0gIC8qICAgIGNvdW50IHRvIGF2b2lkIGRlc3Ryb3lpbmcgaXQgKGR1ZSB0byBjYWNoaW5nKS4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBIGNhY2hlIG1hbmFnZXIgaXMgaW4gY2hhcmdlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAqCisgICAqIC0gTWFpbnRhaW4gYSBtYXBwaW5nIGJldHdlZW4gZ2VuZXJpYyBGVENfRmFjZUlEcyBhbmQgbGl2ZSBGVF9GYWNlCisgICAqICAgb2JqZWN0cy4gIFRoZSBtYXBwaW5nIGl0c2VsZiBpcyBwZXJmb3JtZWQgdGhyb3VnaCBhIHVzZXItcHJvdmlkZWQKKyAgICogICBjYWxsYmFjay4gIEhvd2V2ZXIsIHRoZSBtYW5hZ2VyIG1haW50YWlucyBhIHNtYWxsIGNhY2hlIG9mIEZUX0ZhY2UKKyAgICogICBhbmQgRlRfU2l6ZSBvYmplY3RzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoaW5ncyBjb25zaWRlcmFibHkuCisgICAqCisgICAqIC0gTWFuYWdlIG9uZSBvciBtb3JlIGNhY2hlIG9iamVjdHMuICBFYWNoIGNhY2hlIGlzIGluIGNoYXJnZSBvZgorICAgKiAgIGhvbGRpbmcgYSB2YXJ5aW5nIG51bWJlciBvZiBgY2FjaGUgbm9kZXMnLiAgRWFjaCBjYWNoZSBub2RlCisgICAqICAgcmVwcmVzZW50cyBhIG1pbmltYWwgYW1vdW50IG9mIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGNhY2hlZAorICAgKiAgIGRhdGEuICBGb3IgZXhhbXBsZSwgYSBjYWNoZSBub2RlIGNhbiBiZSBhbiBGVF9HbHlwaCBpbWFnZQorICAgKiAgIGNvbnRhaW5pbmcgYSB2ZWN0b3Igb3V0bGluZSwgb3Igc29tZSBnbHlwaCBtZXRyaWNzLCBvciBhbnl0aGluZworICAgKiAgIGVsc2UuCisgICAqCisgICAqICAgRWFjaCBjYWNoZSBub2RlIGhhcyBhIGNlcnRhaW4gc2l6ZSBpbiBieXRlcyB0aGF0IGlzIGFkZGVkIHRvIHRoZQorICAgKiAgIHRvdGFsIGFtb3VudCBvZiBgY2FjaGUgbWVtb3J5JyB3aXRoaW4gdGhlIG1hbmFnZXIuCisgICAqCisgICAqICAgQWxsIGNhY2hlIG5vZGVzIGFyZSBsb2NhdGVkIGluIGEgZ2xvYmFsIExSVSBsaXN0LCB3aGVyZSB0aGUgb2xkZXN0CisgICAqICAgbm9kZSBpcyBhdCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICoKKyAgICogICBFYWNoIG5vZGUgYmVsb25ncyB0byBhIHNpbmdsZSBjYWNoZSwgYW5kIGluY2x1ZGVzIGEgcmVmZXJlbmNlCisgICAqICAgY291bnQgdG8gYXZvaWQgZGVzdHJveWluZyBpdCAoZHVlIHRvIGNhY2hpbmcpLgorICAgKgorICAgKi8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzIsMTIgKzcyLDEyIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAU2VjdGlvbjoKKyAgICogICBjYWNoZV9zdWJzeXN0ZW0KKyAgICoKKyAgICovCiAKIAogI2RlZmluZSBGVENfTUFYX0ZBQ0VTX0RFRkFVTFQgIDIKQEAgLTExMCwyNyArMTEwLDI4IEBACiAgIH0gRlRDX01hbmFnZXJSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVENfTWFuYWdlcl9Db21wcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSBtYW5hZ2VyIGlmICAgKi8KLSAgLyogICAgaXRzIGBudW1fYnl0ZXMnIGZpZWxkIGlzIGdyZWF0ZXIgdGhhbiBpdHMgYG1heF9ieXRlcycgZmllbGQuICBJdCAgICovCi0gIC8qICAgIHdpbGwgZmx1c2ggYXMgbWFueSBvbGQgY2FjaGUgbm9kZXMgYXMgcG9zc2libGUgKGlnbm9yaW5nIGNhY2hlICAgICAqLwotICAvKiAgICBub2RlcyB3aXRoIGEgbm9uLXplcm8gcmVmZXJlbmNlIGNvdW50KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtYW5hZ2VyIDo6IEEgaGFuZGxlIHRvIHRoZSBjYWNoZSBtYW5hZ2VyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDbGllbnQgYXBwbGljYXRpb25zIHNob3VsZCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LiAgSXQgaXMgKi8KLSAgLyogICAgbm9ybWFsbHkgaW52b2tlZCBieSBzcGVjaWZpYyBjYWNoZSBpbXBsZW1lbnRhdGlvbnMuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQgaXMgdG8gYWxsb3cgY2xpZW50LXNwZWNpZmljICAgKi8KLSAgLyogICAgY2FjaGUgY2xhc3Nlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEZUQ19NYW5hZ2VyX0NvbXByZXNzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjYWNoZSBtYW5hZ2VyIGlmCisgICAqICAgaXRzIGBudW1fYnl0ZXMnIGZpZWxkIGlzIGdyZWF0ZXIgdGhhbiBpdHMgYG1heF9ieXRlcycgZmllbGQuICBJdAorICAgKiAgIHdpbGwgZmx1c2ggYXMgbWFueSBvbGQgY2FjaGUgbm9kZXMgYXMgcG9zc2libGUgKGlnbm9yaW5nIGNhY2hlCisgICAqICAgbm9kZXMgd2l0aCBhIG5vbi16ZXJvIHJlZmVyZW5jZSBjb3VudCkuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBtYW5hZ2VyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgY2FjaGUgbWFuYWdlci4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgQ2xpZW50IGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4gIEl0IGlzCisgICAqICAgbm9ybWFsbHkgaW52b2tlZCBieSBzcGVjaWZpYyBjYWNoZSBpbXBsZW1lbnRhdGlvbnMuCisgICAqCisgICAqICAgVGhlIHJlYXNvbiB0aGlzIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIGlzIHRvIGFsbG93IGNsaWVudC1zcGVjaWZpYworICAgKiAgIGNhY2hlIGNsYXNzZXMuCisgICAqLwogICBGVF9MT0NBTCggdm9pZCApCiAgIEZUQ19NYW5hZ2VyX0NvbXByZXNzKCBGVENfTWFuYWdlciAgbWFuYWdlciApOwogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbXJ1LmMgYi9zcmMvY2FjaGUvZnRjbXJ1LmMKaW5kZXggMTA4N2JlNC4uYzcwNGY0ZSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y21ydS5jCisrKyBiL3NyYy9jYWNoZS9mdGNtcnUuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjbXJ1LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIE1SVSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjbXJ1LmMKKyAqCisgKiAgIEZyZWVUeXBlIE1SVSBzdXBwb3J0IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbXJ1LmggYi9zcmMvY2FjaGUvZnRjbXJ1LmgKaW5kZXggODIzOTZiOS4uOTM2YzY2ZSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y21ydS5oCisrKyBiL3NyYy9jYWNoZS9mdGNtcnUuaApAQCAtMSw0MyArMSw0MyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjbXJ1LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFNpbXBsZSBNUlUgbGlzdC1jYWNoZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRjbXJ1LmgKKyAqCisgKiAgIFNpbXBsZSBNUlUgbGlzdC1jYWNoZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBbiBNUlUgaXMgYSBsaXN0IHRoYXQgY2Fubm90IGhvbGQgbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YgICAgICAgKi8KLSAgLyogZWxlbWVudHMgKGBtYXhfZWxlbWVudHMnKS4gIEFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluICAgICovCi0gIC8qIGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGkuZS4sIHRoZSBgb2xkZXN0JyBlbGVtZW50IGlzIGF0IHRoZSB0YWlsICAqLwotICAvKiBvZiB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFdoZW4gZG9pbmcgYSBsb29rdXAgKGVpdGhlciB0aHJvdWdoIGBMb29rdXAoKScgb3IgYExvb2t1cF9Ob2RlKCknKSwgICAqLwotICAvKiB0aGUgbGlzdCBpcyBzZWFyY2hlZCBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gIElmICAgKi8KLSAgLyogaXQgaXMgZm91bmQsIHRoZSBlbGVtZW50IGlzIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCBpcyAgICAgICovCi0gIC8qIHJldHVybmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgbm8gY29ycmVzcG9uZGluZyBlbGVtZW50IGlzIGZvdW5kLCB0aGUgbG9va3VwIHJvdXRpbmUgd2lsbCB0cnkgdG8gICovCi0gIC8qIG9idGFpbiBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHJlbGV2YW50IGtleS4gIElmIHRoZSBsaXN0IGlzIGFscmVhZHkgICAqLwotICAvKiBmdWxsLCB0aGUgb2xkZXN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBpcyBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIGJ5IGEgKi8KLSAgLyogbmV3IG9uZTsgYSBuZXcgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgbGlzdCBvdGhlcndpc2UuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gcHJlLWFsbG9jYXRlIHRoZSBlbGVtZW50IGxpc3Qgbm9kZXMuICAgICAgKi8KLSAgLyogVGhpcyBpcyBoYW5keSBpZiBgbWF4X2VsZW1lbnRzJyBpcyBzdWZmaWNpZW50bHkgc21hbGwsIGFzIGl0IHNhdmVzICAgICovCi0gIC8qIGFsbG9jYXRpb25zL3JlbGVhc2VzIGR1cmluZyB0aGUgbG9va3VwIHByb2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBbiBNUlUgaXMgYSBsaXN0IHRoYXQgY2Fubm90IGhvbGQgbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YKKyAgICogZWxlbWVudHMgKGBtYXhfZWxlbWVudHMnKS4gIEFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluCisgICAqIGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGkuZS4sIHRoZSBgb2xkZXN0JyBlbGVtZW50IGlzIGF0IHRoZSB0YWlsCisgICAqIG9mIHRoZSBsaXN0LgorICAgKgorICAgKiBXaGVuIGRvaW5nIGEgbG9va3VwIChlaXRoZXIgdGhyb3VnaCBgTG9va3VwKCknIG9yIGBMb29rdXBfTm9kZSgpJyksCisgICAqIHRoZSBsaXN0IGlzIHNlYXJjaGVkIGZvciBhbiBlbGVtZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcga2V5LiAgSWYKKyAgICogaXQgaXMgZm91bmQsIHRoZSBlbGVtZW50IGlzIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCBpcworICAgKiByZXR1cm5lZC4KKyAgICoKKyAgICogSWYgbm8gY29ycmVzcG9uZGluZyBlbGVtZW50IGlzIGZvdW5kLCB0aGUgbG9va3VwIHJvdXRpbmUgd2lsbCB0cnkgdG8KKyAgICogb2J0YWluIGEgbmV3IGVsZW1lbnQgd2l0aCB0aGUgcmVsZXZhbnQga2V5LiAgSWYgdGhlIGxpc3QgaXMgYWxyZWFkeQorICAgKiBmdWxsLCB0aGUgb2xkZXN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBpcyBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIGJ5IGEKKyAgICogbmV3IG9uZTsgYSBuZXcgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgbGlzdCBvdGhlcndpc2UuCisgICAqCisgICAqIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBwcmUtYWxsb2NhdGUgdGhlIGVsZW1lbnQgbGlzdCBub2Rlcy4KKyAgICogVGhpcyBpcyBoYW5keSBpZiBgbWF4X2VsZW1lbnRzJyBpcyBzdWZmaWNpZW50bHkgc21hbGwsIGFzIGl0IHNhdmVzCisgICAqIGFsbG9jYXRpb25zL3JlbGVhc2VzIGR1cmluZyB0aGUgbG9va3VwIHByb2Nlc3MuCisgICAqCisgICAqLwogCiAKICNpZm5kZWYgRlRDTVJVX0hfCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuYyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCmluZGV4IDAxOGYxZWMuLmM4MDJiZjAgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5jCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNzYml0cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgc2JpdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNzYml0cy5jCisgKgorICogICBGcmVlVHlwZSBzYml0cyBtYW5hZ2VyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC05MSwxNCArOTEsMTQgQEAKIAogCiAgIC8qCi0gICAqICBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGxvYWQgYSBzbWFsbCBiaXRtYXAgd2l0aGluIGEgZ2l2ZW4gRlRDX1NOb2RlLgotICAgKiAgTm90ZSB0aGF0IGl0IHJldHVybnMgYSBub24temVybyBlcnJvciBjb2RlIF9vbmx5XyBpbiB0aGUgY2FzZSBvZgotICAgKiAgb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uICBGb3IgYWxsIG90aGVyIGVycm9ycyAoZS5nLiwgY29ycmVzcG9uZGluZwotICAgKiAgdG8gYSBiYWQgZm9udCBmaWxlKSwgdGhpcyBmdW5jdGlvbiB3aWxsIG1hcmsgdGhlIHNiaXQgYXMgYHVuYXZhaWxhYmxlJwotICAgKiAgYW5kIHJldHVybiBhIHZhbHVlIG9mIDAuCisgICAqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbG9hZCBhIHNtYWxsIGJpdG1hcCB3aXRoaW4gYSBnaXZlbiBGVENfU05vZGUuCisgICAqIE5vdGUgdGhhdCBpdCByZXR1cm5zIGEgbm9uLXplcm8gZXJyb3IgY29kZSBfb25seV8gaW4gdGhlIGNhc2Ugb2YKKyAgICogb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uICBGb3IgYWxsIG90aGVyIGVycm9ycyAoZS5nLiwgY29ycmVzcG9uZGluZworICAgKiB0byBhIGJhZCBmb250IGZpbGUpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbWFyayB0aGUgc2JpdCBhcyBgdW5hdmFpbGFibGUnCisgICAqIGFuZCByZXR1cm4gYSB2YWx1ZSBvZiAwLgogICAgKgotICAgKiAgWW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIGNvbW1lbnQgd2l0aGluIHRoZSBAZnRjX3Nub2RlX2NvbXBhcmUKLSAgICogIGZ1bmN0aW9uIGJlbG93IHRvIHNlZSBob3cgb3V0LW9mLW1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyBhIGxvb2t1cC4KKyAgICogWW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIGNvbW1lbnQgd2l0aGluIHRoZSBAZnRjX3Nub2RlX2NvbXBhcmUKKyAgICogZnVuY3Rpb24gYmVsb3cgdG8gc2VlIGhvdyBvdXQtb2YtbWVtb3J5IGlzIGhhbmRsZWQgZHVyaW5nIGEgbG9va3VwLgogICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIGZ0Y19zbm9kZV9sb2FkKCBGVENfU05vZGUgICAgc25vZGUsCkBAIC0zNDcsMzQgKzM0NywzNCBAQAogCiAKICAgICAgIC8qCi0gICAgICAgKiAgVGhlIGZvbGxvd2luZyBjb2RlIGlsbHVzdHJhdGVzIHdoYXQgdG8gZG8gd2hlbiB5b3Ugd2FudCB0bwotICAgICAgICogIHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IG1heSBmYWlsIHdpdGhpbiBhIGxvb2t1cCBmdW5jdGlvbi4KKyAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbGx1c3RyYXRlcyB3aGF0IHRvIGRvIHdoZW4geW91IHdhbnQgdG8KKyAgICAgICAqIHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IG1heSBmYWlsIHdpdGhpbiBhIGxvb2t1cCBmdW5jdGlvbi4KICAgICAgICAqCi0gICAgICAgKiAgSGVyZSwgd2Ugd2FudCB0byBsb2FkIGEgc21hbGwgYml0bWFwIG9uLWRlbWFuZDsgd2UgdGh1cwotICAgICAgICogIG5lZWQgdG8gY2FsbCB0aGUgYGZ0Y19zbm9kZV9sb2FkJyBmdW5jdGlvbiB3aGljaCBtYXkgcmV0dXJuCi0gICAgICAgKiAgYSBub24temVybyBlcnJvciBjb2RlIG9ubHkgd2hlbiB3ZSBhcmUgb3V0IG9mIG1lbW9yeSAoT09NKS4KKyAgICAgICAqIEhlcmUsIHdlIHdhbnQgdG8gbG9hZCBhIHNtYWxsIGJpdG1hcCBvbi1kZW1hbmQ7IHdlIHRodXMKKyAgICAgICAqIG5lZWQgdG8gY2FsbCB0aGUgYGZ0Y19zbm9kZV9sb2FkJyBmdW5jdGlvbiB3aGljaCBtYXkgcmV0dXJuCisgICAgICAgKiBhIG5vbi16ZXJvIGVycm9yIGNvZGUgb25seSB3aGVuIHdlIGFyZSBvdXQgb2YgbWVtb3J5IChPT00pLgogICAgICAgICoKLSAgICAgICAqICBUaGUgY29ycmVjdCB0aGluZyB0byBkbyBpcyB0byB1c2UgQEZUQ19DQUNIRV9UUllMT09QIGFuZAotICAgICAgICogIEBGVENfQ0FDSEVfVFJZTE9PUF9FTkQgaW4gb3JkZXIgdG8gaW1wbGVtZW50IGEgcmV0cnkgbG9vcAotICAgICAgICogIHRoYXQgaXMgY2FwYWJsZSBvZiBmbHVzaGluZyB0aGUgY2FjaGUgaW5jcmVtZW50YWxseSB3aGVuCi0gICAgICAgKiAgYW4gT09NIGVycm9ycyBvY2N1ci4KKyAgICAgICAqIFRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvIGlzIHRvIHVzZSBARlRDX0NBQ0hFX1RSWUxPT1AgYW5kCisgICAgICAgKiBARlRDX0NBQ0hFX1RSWUxPT1BfRU5EIGluIG9yZGVyIHRvIGltcGxlbWVudCBhIHJldHJ5IGxvb3AKKyAgICAgICAqIHRoYXQgaXMgY2FwYWJsZSBvZiBmbHVzaGluZyB0aGUgY2FjaGUgaW5jcmVtZW50YWxseSB3aGVuCisgICAgICAgKiBhbiBPT00gZXJyb3JzIG9jY3VyLgogICAgICAgICoKLSAgICAgICAqICBIb3dldmVyLCB3ZSBuZWVkIHRvIGBsb2NrJyB0aGUgbm9kZSBiZWZvcmUgdGhpcyBvcGVyYXRpb24gdG8KLSAgICAgICAqICBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZmx1c2hlZCB3aXRoaW4gdGhlIGxvb3AuCisgICAgICAgKiBIb3dldmVyLCB3ZSBuZWVkIHRvIGBsb2NrJyB0aGUgbm9kZSBiZWZvcmUgdGhpcyBvcGVyYXRpb24gdG8KKyAgICAgICAqIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmbHVzaGVkIHdpdGhpbiB0aGUgbG9vcC4KICAgICAgICAqCi0gICAgICAgKiAgV2hlbiB3ZSBleGl0IHRoZSBsb29wLCB3ZSB1bmxvY2sgdGhlIG5vZGUsIHRoZW4gY2hlY2sgdGhlIGBlcnJvcicKLSAgICAgICAqICB2YXJpYWJsZS4gIElmIGl0IGlzIG5vbi16ZXJvLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGNhY2hlIHdhcwotICAgICAgICogIGNvbXBsZXRlbHkgZmx1c2hlZCBhbmQgdGhhdCBubyB1c2FibGUgbWVtb3J5IHdhcyBmb3VuZCB0byBsb2FkCi0gICAgICAgKiAgdGhlIGJpdG1hcC4KKyAgICAgICAqIFdoZW4gd2UgZXhpdCB0aGUgbG9vcCwgd2UgdW5sb2NrIHRoZSBub2RlLCB0aGVuIGNoZWNrIHRoZSBgZXJyb3InCisgICAgICAgKiB2YXJpYWJsZS4gIElmIGl0IGlzIG5vbi16ZXJvLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGNhY2hlIHdhcworICAgICAgICogY29tcGxldGVseSBmbHVzaGVkIGFuZCB0aGF0IG5vIHVzYWJsZSBtZW1vcnkgd2FzIGZvdW5kIHRvIGxvYWQKKyAgICAgICAqIHRoZSBiaXRtYXAuCiAgICAgICAgKgotICAgICAgICogIFdlIHRoZW4gcHJlZmVyIHRvIHJldHVybiBhIHZhbHVlIG9mIDAgKGkuZS4sIE5PIE1BVENIKS4gIFRoaXMKLSAgICAgICAqICBlbnN1cmVzIHRoYXQgdGhlIGNhbGxlciB3aWxsIHRyeSB0byBhbGxvY2F0ZSBhIG5ldyBub2RlLgotICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGNvbnNlcXVlbnRseSBfZmFpbF8gYW5kIHRoZSBsb29rdXAgZnVuY3Rpb24KLSAgICAgICAqICByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBPT00gZXJyb3IgY29kZS4KKyAgICAgICAqIFdlIHRoZW4gcHJlZmVyIHRvIHJldHVybiBhIHZhbHVlIG9mIDAgKGkuZS4sIE5PIE1BVENIKS4gIFRoaXMKKyAgICAgICAqIGVuc3VyZXMgdGhhdCB0aGUgY2FsbGVyIHdpbGwgdHJ5IHRvIGFsbG9jYXRlIGEgbmV3IG5vZGUuCisgICAgICAgKiBUaGlzIG9wZXJhdGlvbiBjb25zZXF1ZW50bHkgX2ZhaWxfIGFuZCB0aGUgbG9va3VwIGZ1bmN0aW9uCisgICAgICAgKiByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBPT00gZXJyb3IgY29kZS4KICAgICAgICAqCi0gICAgICAgKiAgTm90ZSB0aGF0IGBidWZmZXIgPT0gTlVMTCAmJiB3aWR0aCA9PSAyNTUnIGlzIGEgaGFjayB1c2VkIHRvCi0gICAgICAgKiAgdGFnIGB1bmF2YWlsYWJsZScgYml0bWFwcyBpbiB0aGUgYXJyYXkuICBXZSBzaG91bGQgbmV2ZXIgdHJ5Ci0gICAgICAgKiAgdG8gbG9hZCB0aGVzZS4KKyAgICAgICAqIE5vdGUgdGhhdCBgYnVmZmVyID09IE5VTEwgJiYgd2lkdGggPT0gMjU1JyBpcyBhIGhhY2sgdXNlZCB0bworICAgICAgICogdGFnIGB1bmF2YWlsYWJsZScgYml0bWFwcyBpbiB0aGUgYXJyYXkuICBXZSBzaG91bGQgbmV2ZXIgdHJ5CisgICAgICAgKiB0byBsb2FkIHRoZXNlLgogICAgICAgICoKICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuaCBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCmluZGV4IDIwNmExYmIuLmU2OThlMzUgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5oCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNzYml0cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQSBzbWFsbC1iaXRtYXAgY2FjaGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGNzYml0cy5oCisgKgorICogICBBIHNtYWxsLWJpdG1hcCBjYWNoZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRDU0JJVFNfSF8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmLmMgYi9zcmMvY2ZmL2NmZi5jCmluZGV4IDFhNzU1ZDUuLjZjN2UyYzkgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmLmMKKysrIGIvc3JjL2NmZi9jZmYuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmLmMKKyAqCisgKiAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNmZmRyaXZyLmMiCiAjaW5jbHVkZSAiY2ZmZ2xvYWQuYyIKICNpbmNsdWRlICJjZmZwYXJzZS5jIgotI2luY2x1ZGUgImNmZnBpYy5jIgogI2luY2x1ZGUgImNmZmxvYWQuYyIKICNpbmNsdWRlICJjZmZvYmpzLmMiCiAKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmY21hcC5jIGIvc3JjL2NmZi9jZmZjbWFwLmMKaW5kZXggZTQ1YWUxMS4uZjczMTZlMSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZjbWFwLmMKKysrIGIvc3JjL2NmZi9jZmZjbWFwLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmZmNtYXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNmZmNtYXAuYworICoKKyAqICAgQ0ZGIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmNtYXAuaCBiL3NyYy9jZmYvY2ZmY21hcC5oCmluZGV4IDg1NmE0M2QuLjVjZjg2YWMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmY21hcC5oCisrKyBiL3NyYy9jZmYvY2ZmY21hcC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZjbWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ0ZGIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZjbWFwLmgKKyAqCisgKiAgIENGRiBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGQ01BUF9IXwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZkcml2ci5jIGIvc3JjL2NmZi9jZmZkcml2ci5jCmluZGV4IGRmODk2ODQuLjk5N2E3MzQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZHJpdnIuYworKysgYi9zcmMvY2ZmL2NmZmRyaXZyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmZmRyaXZyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBmb250IGRyaXZlciBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNmZmRyaXZyLmMKKyAqCisgKiAgIE9wZW5UeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00Miw3ICs0Miw2IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImNmZmVycnMuaCIKLSNpbmNsdWRlICJjZmZwaWMuaCIKIAogI2luY2x1ZGUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSApAQCAtNTAsMTIgKzQ5LDEyIEBACiAjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZmRyaXZlcgogCkBAIC03MywzOCArNzIsNDIgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjZmZfZ2V0X2tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byByZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvICAgICAgKi8KLSAgLyogICAgZ2x5cGhzIG9mIHRoZSBzYW1lIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZWZ0X2dseXBoICA6OiBUaGUgaW5kZXggb2YgdGhlIGxlZnQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJpZ2h0X2dseXBoIDo6IFRoZSBpbmRleCBvZiB0aGUgcmlnaHQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGtlcm5pbmcgICAgIDo6IFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgaW4gZm9udCB1bml0cyBmb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUgICAgICAgICovCi0gIC8qICAgIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uLiAgT3RoZXIgbGF5b3V0cywgb3IgbW9yZSBzb3BoaXN0aWNhdGVkICAqLwotICAvKiAgICBrZXJuaW5ncywgYXJlIG91dCBvZiBzY29wZSBvZiB0aGlzIG1ldGhvZCAodGhlIGJhc2ljIGRyaXZlciAgICAgICAgKi8KLSAgLyogICAgaW50ZXJmYWNlIGlzIG1lYW50IHRvIGJlIHNpbXBsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGV5IGNhbiBiZSBpbXBsZW1lbnRlZCBieSBmb3JtYXQtc3BlY2lmaWMgaW50ZXJmYWNlcy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2ZmX2dldF9rZXJuaW5nCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byByZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvCisgICAqICAgZ2x5cGhzIG9mIHRoZSBzYW1lIGZhY2UuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIGxlZnRfZ2x5cGggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLgorICAgKgorICAgKiAgIHJpZ2h0X2dseXBoIDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIHJpZ2h0IGdseXBoIGluIHRoZSBrZXJuIHBhaXIuCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAga2VybmluZyA6OgorICAgKiAgICAgVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBpbiBmb250IHVuaXRzIGZvcgorICAgKiAgICAgc2NhbGFibGUgZm9ybWF0cywgYW5kIGluIHBpeGVscyBmb3IgZml4ZWQtc2l6ZXMKKyAgICogICAgIGZvcm1hdHMuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUKKyAgICogICBzdXBwb3J0ZWQgYnkgdGhpcyBmdW5jdGlvbi4gIE90aGVyIGxheW91dHMsIG9yIG1vcmUgc29waGlzdGljYXRlZAorICAgKiAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHNjb3BlIG9mIHRoaXMgbWV0aG9kICh0aGUgYmFzaWMgZHJpdmVyCisgICAqICAgaW50ZXJmYWNlIGlzIG1lYW50IHRvIGJlIHNpbXBsZSkuCisgICAqCisgICAqICAgVGhleSBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgZm9ybWF0LXNwZWNpZmljIGludGVyZmFjZXMuCisgICAqLwogICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgY2ZmX2dldF9rZXJuaW5nKCBGVF9GYWNlICAgICB0dGZhY2UsICAgICAgICAgIC8qIFRUX0ZhY2UgKi8KICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLApAQCAtMTI1LDMyICsxMjgsMzYgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2dseXBoX2xvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBkcml2ZXIgbWV0aG9kIHVzZWQgdG8gbG9hZCBhIGdseXBoIHdpdGhpbiBhIGdpdmVuIGdseXBoIHNsb3QuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2xvdCAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBzbG90IG9iamVjdCB3aGVyZSB0aGUgZ2x5cGggICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIHNpemUgYXQgd2hpY2ggdGhlIGdseXBoICovCi0gIC8qICAgICAgICAgICAgICAgICAgIG11c3QgYmUgc2NhbGVkLCBsb2FkZWQsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGhfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX2ZsYWdzICA6OiBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgRlRfTE9BRF8/Pz8gY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGNmZl9nbHlwaF9sb2FkCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byBsb2FkIGEgZ2x5cGggd2l0aGluIGEgZ2l2ZW4gZ2x5cGggc2xvdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHNsb3QgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc2xvdCBvYmplY3Qgd2hlcmUgdGhlIGdseXBoCisgICAqICAgICB3aWxsIGJlIGxvYWRlZC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugc2l6ZSBhdCB3aGljaCB0aGUgZ2x5cGgKKyAgICogICAgIG11c3QgYmUgc2NhbGVkLCBsb2FkZWQsIGV0Yy4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZQorICAgKiAgICAgRlRfTE9BRF8/Pz8gY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlCisgICAqICAgICBnbHlwaCBsb2FkaW5nIHByb2Nlc3MgKGUuZy4sIHdoZXRoZXIgdGhlIG91dGxpbmUKKyAgICogICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwKKyAgICogICAgIHdoZXRoZXIgdG8gaGludCB0aGUgb3V0bGluZSwgZXRjKS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCiAgIGNmZl9nbHlwaF9sb2FkKCBGVF9HbHlwaFNsb3QgIGNmZnNsb3QsICAgICAgLyogQ0ZGX0dseXBoU2xvdCAqLwogICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICBjZmZzaXplLCAgICAgIC8qIENGRl9TaXplICAgICAgKi8KQEAgLTMwMiw3ICszMDksNyBAQAogCiAKICAgLyoKLSAgICogIEdMWVBIIERJQ1QgU0VSVklDRQorICAgKiBHTFlQSCBESUNUIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTQ0Niw3ICs0NTMsNyBAQAogCiAKICAgLyoKLSAgICogIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCisgICAqIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC01OTMsNyArNjAwLDcgQEAKIAogCiAgIC8qCi0gICAqICBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQorICAgKiBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtNjU0LDggKzY2MSw4IEBACiAgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX0ZBQ0VfTElCUkFSWSggZmFjZSApOwogCiAKLSAgICBpZiAoIGNtYXAtPmNsYXp6ICE9ICZDRkZfQ01BUF9FTkNPRElOR19DTEFTU19SRUNfR0VUICYmCi0gICAgICAgICBjbWFwLT5jbGF6eiAhPSAmQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VUICApCisgICAgaWYgKCBjbWFwLT5jbGF6eiAhPSAmY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjICYmCisgICAgICAgICBjbWFwLT5jbGF6eiAhPSAmY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMgICkKICAgICB7CiAgICAgICBGVF9Nb2R1bGUgICAgICAgICAgIHNmbnQgICAgPSBGVF9HZXRfTW9kdWxlKCBsaWJyYXJ5LCAic2ZudCIgKTsKICAgICAgIEZUX1NlcnZpY2VfVFRDTWFwcyAgc2VydmljZSA9CkBAIC02ODIsNyArNjg5LDcgQEAKIAogCiAgIC8qCi0gICAqICBDSUQgSU5GTyBTRVJWSUNFCisgICAqIENJRCBJTkZPIFNFUlZJQ0UKICAgICoKICAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgpAQCAtNzg4LDcgKzc5NSw3IEBACiAgICAgICAgIGdvdG8gRmFpbDsKICAgICAgIH0KIAotICAgICAgaWYgKCBnbHlwaF9pbmRleCA+IGNmZi0+bnVtX2dseXBocyApCisgICAgICBpZiAoIGdseXBoX2luZGV4ID49IGNmZi0+bnVtX2dseXBocyApCiAgICAgICB7CiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKICAgICAgICAgZ290byBGYWlsOwpAQCAtODE4LDcgKzgyNSw3IEBACiAKIAogICAvKgotICAgKiAgUFJPUEVSVFkgU0VSVklDRQorICAgKiBQUk9QRVJUWSBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC04MzIsNyArODM5LDcgQEAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAKICAgLyoKLSAgICogIE1VTFRJUExFIE1BU1RFUiBTRVJWSUNFCisgICAqIE1VTFRJUExFIE1BU1RFUiBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC05MjQsNyArOTMxLDcgQEAKIAogCiAgIC8qCi0gICAqICBNRVRSSUNTIFZBUklBVElPTlMgU0VSVklDRQorICAgKiBNRVRSSUNTIFZBUklBVElPTlMgU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtOTY4LDcgKzk3NSw3IEBACiAKIAogICAvKgotICAgKiAgQ0ZGTE9BRCBTRVJWSUNFCisgICAqIENGRkxPQUQgU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtMTAwMSw1NCArMTAwOCw1NCBAQAogICAgIGNmZl9zZXJ2aWNlcywKIAogICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NGRiwKLSAgICBGVF9TRVJWSUNFX0lEX01VTFRJX01BU1RFUlMsICAgICAgICAmQ0ZGX1NFUlZJQ0VfTVVMVElfTUFTVEVSU19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9NRVRSSUNTX1ZBUklBVElPTlMsICAgJkNGRl9TRVJWSUNFX01FVFJJQ1NfVkFSX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9DRkZfTE9BRCwgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NGRl9MT0FEX0dFVAorICAgIEZUX1NFUlZJQ0VfSURfTVVMVElfTUFTVEVSUywgICAgICAgICZjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzLAorICAgIEZUX1NFUlZJQ0VfSURfTUVUUklDU19WQVJJQVRJT05TLCAgICZjZmZfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJmNmZl9zZXJ2aWNlX3BzX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJmNmZl9zZXJ2aWNlX3BzX25hbWUsCisgICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2dseXBoX2RpY3QsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2NpZF9pbmZvLAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAgICAgICZjZmZfc2VydmljZV9wcm9wZXJ0aWVzLAorICAgIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQsICAgICAgICAgICAgICZjZmZfc2VydmljZV9jZmZfbG9hZAogICApCiAjZWxpZiAhZGVmaW5lZCBGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTCiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzgoCiAgICAgY2ZmX3NlcnZpY2VzLAogCiAgICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9HRVRfQ01BUF9JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfQ0lEX0lORk9fR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAgICAgICZDRkZfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX0NGRl9MT0FELCAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfQ0ZGX0xPQURfR0VUCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJmNmZl9zZXJ2aWNlX3BzX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJmNmZl9zZXJ2aWNlX3BzX25hbWUsCisgICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2dseXBoX2RpY3QsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2NpZF9pbmZvLAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAgICAgICZjZmZfc2VydmljZV9wcm9wZXJ0aWVzLAorICAgIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQsICAgICAgICAgICAgICZjZmZfc2VydmljZV9jZmZfbG9hZAogICApCiAjZWxpZiBkZWZpbmVkIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDOSgKICAgICBjZmZfc2VydmljZXMsCiAKICAgICBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFULCAgICAgICAgICBGVF9GT05UX0ZPUk1BVF9DRkYsCi0gICAgRlRfU0VSVklDRV9JRF9NVUxUSV9NQVNURVJTLCAgICAgICAgJkNGRl9TRVJWSUNFX01VTFRJX01BU1RFUlNfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfTUVUUklDU19WQVJJQVRJT05TLCAgICZDRkZfU0VSVklDRV9NRVRSSUNTX1ZBUl9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJkNGRl9TRVJWSUNFX1BTX0lORk9fR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZDRkZfU0VSVklDRV9QU19OQU1FX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9DRkZfTE9BRCwgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NGRl9MT0FEX0dFVAorICAgIEZUX1NFUlZJQ0VfSURfTVVMVElfTUFTVEVSUywgICAgICAgICZjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzLAorICAgIEZUX1NFUlZJQ0VfSURfTUVUUklDU19WQVJJQVRJT05TLCAgICZjZmZfc2VydmljZV9tZXRyaWNzX3ZhciwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmY2ZmX3NlcnZpY2VfcHNfaW5mbywKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmY2ZmX3NlcnZpY2VfcHNfbmFtZSwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmY2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbywKKyAgICBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmY2ZmX3NlcnZpY2VfY2lkX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJmNmZl9zZXJ2aWNlX3Byb3BlcnRpZXMsCisgICAgRlRfU0VSVklDRV9JRF9DRkZfTE9BRCwgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2NmZl9sb2FkCiAgICkKICNlbHNlCiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzcoCiAgICAgY2ZmX3NlcnZpY2VzLAogCiAgICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VULAotICAgIEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DSURfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQsICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DRkZfTE9BRF9HRVQKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmY2ZmX3NlcnZpY2VfcHNfaW5mbywKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmY2ZmX3NlcnZpY2VfcHNfbmFtZSwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmY2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbywKKyAgICBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmY2ZmX3NlcnZpY2VfY2lkX2luZm8sCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJmNmZl9zZXJ2aWNlX3Byb3BlcnRpZXMsCisgICAgRlRfU0VSVklDRV9JRF9DRkZfTE9BRCwgICAgICAgICAgICAgJmNmZl9zZXJ2aWNlX2NmZl9sb2FkCiAgICkKICNlbmRpZgogCkBAIC0xMDYyLDI3ICsxMDY5LDE2IEBACiAgICAgRlRfTW9kdWxlX0ludGVyZmFjZSAgcmVzdWx0OwogCiAKLSAgICAvKiBDRkZfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIGlmICggIWRyaXZlciApCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICBsaWJyYXJ5ID0gZHJpdmVyLT5saWJyYXJ5OwotICAgIGlmICggIWxpYnJhcnkgKQotICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKLQotICAgIHJlc3VsdCA9IGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIENGRl9TRVJWSUNFU19HRVQsIG1vZHVsZV9pbnRlcmZhY2UgKTsKKyAgICByZXN1bHQgPSBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBjZmZfc2VydmljZXMsIG1vZHVsZV9pbnRlcmZhY2UgKTsKICAgICBpZiAoIHJlc3VsdCApCiAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLyogYGRyaXZlcicgaXMgbm90IHlldCBldmFsdWF0ZWQgaW4gbm9uLVBJQyBtb2RlICovCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCisgICAgLyogYGRyaXZlcicgaXMgbm90IHlldCBldmFsdWF0ZWQgKi8KICAgICBpZiAoICFkcml2ZXIgKQogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGlicmFyeSA9IGRyaXZlci0+bGlicmFyeTsKICAgICBpZiAoICFsaWJyYXJ5ICkKICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKICAgICAvKiB3ZSBwYXNzIG91ciByZXF1ZXN0IHRvIHRoZSBgc2ZudCcgbW9kdWxlICovCiAgICAgc2ZudCA9IEZUX0dldF9Nb2R1bGUoIGxpYnJhcnksICJzZm50IiApOwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZkcml2ci5oIGIvc3JjL2NmZi9jZmZkcml2ci5oCmluZGV4IGFkN2MzYWQuLjMwZDNlMTMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZHJpdnIuaAorKysgYi9zcmMvY2ZmL2NmZmRyaXZyLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmZmRyaXZyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBIaWdoLWxldmVsIE9wZW5UeXBlIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNmZmRyaXZyLmgKKyAqCisgKiAgIEhpZ2gtbGV2ZWwgT3BlblR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGRFJJVkVSX0hfCkBAIC0yNiwxMCArMjYsOCBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotCiAgIEZUX0RFQ0xBUkVfRFJJVkVSKCBjZmZfZHJpdmVyX2NsYXNzICkKIAotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBDRkZEUklWRVJfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZXJycy5oIGIvc3JjL2NmZi9jZmZlcnJzLmgKaW5kZXggYjJlMWJmYS4uYjVjY2M2NyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZlcnJzLmgKKysrIGIvc3JjL2NmZi9jZmZlcnJzLmgKQEAgLTEsMjYgKzEsMjYgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmZmVycnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDRkYgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNmZmVycnMuaAorICoKKyAqICAgQ0ZGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBDRkYgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQ0ZGIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgQ0ZGRVJSU19IXwogI2RlZmluZSBDRkZFUlJTX0hfCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmdsb2FkLmMgYi9zcmMvY2ZmL2NmZmdsb2FkLmMKaW5kZXggYzU4NDcxYy4uODhmNTY4OSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZnbG9hZC5jCisrKyBiL3NyYy9jZmYvY2ZmZ2xvYWQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmZ2xvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIEdseXBoIExvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmZ2xvYWQuYworICoKKyAqICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJjZmZlcnJzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2ZmZ2xvYWQKIApAQCAtMjgwLDE2ICsyODAsMTYgQEAKICAgICAgICAgICBnbHlwaC0+cm9vdC5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOwogICAgICAgICAgIGdseXBoLT5yb290Lm91dGxpbmUubl9jb250b3VycyA9IDA7CiAKLSAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgPDwgNjsKLSAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgPDwgNjsKKyAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgKiA2NDsKKyAgICAgICAgICBnbHlwaC0+cm9vdC5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgKiA2NDsKIAotICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCA8PCA2OwotICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSA8PCA2OwotICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICA8PCA2OworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWCAqIDY0OworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLmhvcmlCZWFyaW5nWSAqIDY0OworICAgICAgICAgIGdseXBoLT5yb290Lm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLmhvcmlBZHZhbmNlICAqIDY0OwogCi0gICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYIDw8IDY7Ci0gICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZIDw8IDY7Ci0gICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgIDw8IDY7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdYICogNjQ7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKW1ldHJpY3MudmVydEJlYXJpbmdZICogNjQ7CisgICAgICAgICAgZ2x5cGgtPnJvb3QubWV0cmljcy52ZXJ0QWR2YW5jZSAgPSAoRlRfUG9zKW1ldHJpY3MudmVydEFkdmFuY2UgICogNjQ7CiAKICAgICAgICAgICBnbHlwaC0+cm9vdC5mb3JtYXQgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOwogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmdsb2FkLmggYi9zcmMvY2ZmL2NmZmdsb2FkLmgKaW5kZXggODAzZjM5Ny4uNWE0ODZjZCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZnbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmZ2xvYWQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmZ2xvYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmZ2xvYWQuaAorICoKKyAqICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBDRkZHTE9BRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZsb2FkLmMgYi9zcmMvY2ZmL2NmZmxvYWQuYwppbmRleCBiYTQ5NzkzLi4wMTViMmM4IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmxvYWQuYworKysgYi9zcmMvY2ZmL2NmZmxvYWQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIGFuZCBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmbG9hZC5jCisgKgorICogICBPcGVuVHlwZSBhbmQgQ0ZGIGRhdGEvcHJvZ3JhbSB0YWJsZXMgbG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xOTYsMTIgKzE5NiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2ZmbG9hZAogCkBAIC0xMzk4LDcgKzEzOTgsMTQgQEAKICAgICBGVF9VSW50ICAgICAgIG1hc3RlcjsKIAogCi0gICAgRlRfQVNTRVJUKCBsZW5ORFYgPT0gMCB8fCBORFYgKTsKKyAgICAvKiBwcm90ZWN0IGFnYWluc3QgbWFsZm9ybWVkIGZvbnRzICovCisgICAgaWYgKCAhKCBsZW5ORFYgPT0gMCB8fCBORFYgKSApCisgICAgeworICAgICAgRlRfVFJBQ0U0KCggIiBjZmZfYmxlbmRfYnVpbGRfdmVjdG9yOiIKKyAgICAgICAgICAgICAgICAgICIgTWFsZm9ybWVkIE5vcm1hbGl6ZSBEZXNpZ24gVmVjdG9yIGRhdGFcbiIgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQogCiAgICAgYmxlbmQtPmJ1aWx0QlYgPSBGQUxTRTsKIApAQCAtMTkzMyw2ICsxOTQwLDI0IEBACiAgICAgZWxzZSBpZiAoIHByaXYtPmluaXRpYWxfcmFuZG9tX3NlZWQgPT0gMCApCiAgICAgICBwcml2LT5pbml0aWFsX3JhbmRvbV9zZWVkID0gOTg3NjU0MzIxOwogCisgICAgLyogc29tZSBzYW5pdGl6aW5nIHRvIGF2b2lkIG92ZXJmbG93cyBsYXRlciBvbjsgKi8KKyAgICAvKiB0aGUgdXBwZXIgbGltaXRzIGFyZSBhZC1ob2MgdmFsdWVzICAgICAgICAgICAqLworICAgIGlmICggcHJpdi0+Ymx1ZV9zaGlmdCA+IDEwMDAgfHwgcHJpdi0+Ymx1ZV9zaGlmdCA8IDAgKQorICAgIHsKKyAgICAgIEZUX1RSQUNFMigoICJjZmZfbG9hZF9wcml2YXRlX2RpY3Q6IgorICAgICAgICAgICAgICAgICAgIiBzZXR0aW5nIHVubGlrZWx5IEJsdWVTaGlmdCB2YWx1ZSAlZCB0byBkZWZhdWx0ICg3KVxuIiwKKyAgICAgICAgICAgICAgICAgIHByaXYtPmJsdWVfc2hpZnQgKSk7CisgICAgICBwcml2LT5ibHVlX3NoaWZ0ID0gNzsKKyAgICB9CisKKyAgICBpZiAoIHByaXYtPmJsdWVfZnV6eiA+IDEwMDAgfHwgcHJpdi0+Ymx1ZV9mdXp6IDwgMCApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggImNmZl9sb2FkX3ByaXZhdGVfZGljdDoiCisgICAgICAgICAgICAgICAgICAiIHNldHRpbmcgdW5saWtlbHkgQmx1ZUZ1enogdmFsdWUgJWQgdG8gZGVmYXVsdCAoMSlcbiIsCisgICAgICAgICAgICAgICAgICBwcml2LT5ibHVlX2Z1enogKSk7CisgICAgICBwcml2LT5ibHVlX2Z1enogPSAxOworICAgIH0KKwogICBFeGl0OgogICAgIC8qIGNsZWFuIHVwICovCiAgICAgY2ZmX2JsZW5kX2NsZWFyKCBzdWJmb250ICk7IC8qIGNsZWFyIGJsZW5kIHN0YWNrICovCkBAIC0yMDYyLDEzICsyMDg3LDEzIEBACiAgICAgICAvKgogICAgICAgICogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgICAgICAgKgotICAgICAgICogLiBJZiB3ZSBoYXZlIGEgZmFjZS1zcGVjaWZpYyBzZWVkLCB1c2UgaXQuCisgICAgICAgKiAtIElmIHdlIGhhdmUgYSBmYWNlLXNwZWNpZmljIHNlZWQsIHVzZSBpdC4KICAgICAgICAqICAgSWYgbm9uLXplcm8sIHVwZGF0ZSBpdCB0byBhIHBvc2l0aXZlIHZhbHVlLgogICAgICAgICoKLSAgICAgICAqIC4gT3RoZXJ3aXNlLCB1c2UgdGhlIHNlZWQgZnJvbSB0aGUgQ0ZGIGRyaXZlci4KKyAgICAgICAqIC0gT3RoZXJ3aXNlLCB1c2UgdGhlIHNlZWQgZnJvbSB0aGUgQ0ZGIGRyaXZlci4KICAgICAgICAqICAgSWYgbm9uLXplcm8sIHVwZGF0ZSBpdCB0byBhIHBvc2l0aXZlIHZhbHVlLgogICAgICAgICoKLSAgICAgICAqIC4gSWYgdGhlIHJhbmRvbSB2YWx1ZSBpcyB6ZXJvLCB1c2UgdGhlIHNlZWQgZ2l2ZW4gYnkgdGhlIHN1YmZvbnQncworICAgICAgICogLSBJZiB0aGUgcmFuZG9tIHZhbHVlIGlzIHplcm8sIHVzZSB0aGUgc2VlZCBnaXZlbiBieSB0aGUgc3ViZm9udCdzCiAgICAgICAgKiAgIGBpbml0aWFsUmFuZG9tU2VlZCcgdmFsdWUuCiAgICAgICAgKgogICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmxvYWQuaCBiL3NyYy9jZmYvY2ZmbG9hZC5oCmluZGV4IDE0ZDE0ZTIuLjdiYTllNDUgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmbG9hZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgT3BlblR5cGUgJiBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZsb2FkLmgKKyAqCisgKiAgIE9wZW5UeXBlICYgQ0ZGIGRhdGEvcHJvZ3JhbSB0YWJsZXMgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBDRkZMT0FEX0hfCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZm9ianMuYyBiL3NyYy9jZmYvY2Zmb2Jqcy5jCmluZGV4IGEyZDdhZWMuLmIzZjBmOTkgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5jCisrKyBiL3NyYy9jZmYvY2Zmb2Jqcy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZvYmpzLmMKKyAqCisgKiAgIE9wZW5UeXBlIG9iamVjdHMgbWFuYWdlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgImNmZm9ianMuaCIKICNpbmNsdWRlICJjZmZsb2FkLmgiCiAjaW5jbHVkZSAiY2ZmY21hcC5oIgotI2luY2x1ZGUgImNmZnBpYy5oIgogCiAjaW5jbHVkZSAiY2ZmZXJycy5oIgogCkBAIC00NSwyMSArNDQsMjEgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZm9ianMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSBGVU5DVElPTlMKKyAgICoKKyAgICovCiAKIAogICBzdGF0aWMgUFNIX0dsb2JhbHNfRnVuY3MKQEAgLTM0MSwxMSArMzQwLDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TCisgICAqCisgICAqLwogCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNmZl9zbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCkBAIC0zODMsMTEgKzM4MiwxMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDRSAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRkFDRSAgRlVOQ1RJT05TCisgICAqCisgICAqLwogCiAgIHN0YXRpYyBGVF9TdHJpbmcqCiAgIGNmZl9zdHJjcHkoIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSwKQEAgLTk2NSwxMCArOTY0LDEwIEBACiAgICAgICAgICAgLyogYXNzdW1lICJSZWd1bGFyIiBzdHlsZSBpZiB3ZSBkb24ndCBrbm93IGJldHRlciAqLwogICAgICAgICAgIGNmZmZhY2UtPnN0eWxlX25hbWUgPSBjZmZfc3RyY3B5KCBtZW1vcnksIChjaGFyICopIlJlZ3VsYXIiICk7CiAKLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiBDb21wdXRlIGZhY2UgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKgorICAgICAgICAgKiBDb21wdXRlIGZhY2UgZmxhZ3MuCisgICAgICAgICAqLwogICAgICAgICBmbGFncyA9IEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSAgIHwgLyogc2NhbGFibGUgb3V0bGluZXMgKi8KICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCB8IC8qIGhvcml6b250YWwgZGF0YSAgICovCiAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hJTlRFUjsgICAgICAvKiBoYXMgbmF0aXZlIGhpbnRlciAqLwpAQCAtOTg5LDEwICs5ODgsMTAgQEAKIAogICAgICAgICBjZmZmYWNlLT5mYWNlX2ZsYWdzIHw9IGZsYWdzOwogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogQ29tcHV0ZSBzdHlsZSBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICoKKyAgICAgICAgICogQ29tcHV0ZSBzdHlsZSBmbGFncy4KKyAgICAgICAgICovCiAgICAgICAgIGZsYWdzID0gMDsKIAogICAgICAgICBpZiAoIGRpY3QtPml0YWxpY19hbmdsZSApCkBAIC0xMDI4LDEwICsxMDI3LDEwIEBACiAgICAgICBpZiAoIGRpY3QtPmNpZF9yZWdpc3RyeSAhPSAweEZGRkZVICYmIHB1cmVfY2ZmICkKICAgICAgICAgY2ZmZmFjZS0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEOwogCi0gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogQ29tcHV0ZSBjaGFyIG1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICoKKyAgICAgICAqIENvbXB1dGUgY2hhciBtYXBzLgorICAgICAgICovCiAKICAgICAgIC8qIFRyeSB0byBzeW50aGVzaXplIGEgVW5pY29kZSBjaGFybWFwIGlmIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlICovCiAgICAgICAvKiBhbHJlYWR5LiAgSWYgYW4gT3BlblR5cGUgZm9udCBjb250YWlucyBhIFVuaWNvZGUgImNtYXAiLCB3ZSAgICAqLwpAQCAtMTA3MCw3ICsxMDY5LDcgQEAKIAogICAgICAgICBubiA9IChGVF9VSW50KWNmZmZhY2UtPm51bV9jaGFybWFwczsKIAotICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAmQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VULCBOVUxMLAorICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAmY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbWFwcmVjLCBOVUxMICk7CiAgICAgICAgIGlmICggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgRlRfRVJSX05FUSggZXJyb3IsIE5vX1VuaWNvZGVfR2x5cGhfTmFtZSApICkKQEAgLTEwOTQsMTkgKzEwOTMsMTkgQEAKICAgICAgICAgICB7CiAgICAgICAgICAgICBjbWFwcmVjLmVuY29kaW5nX2lkID0gVFRfQURPQkVfSURfU1RBTkRBUkQ7CiAgICAgICAgICAgICBjbWFwcmVjLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQ7Ci0gICAgICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gJkNGRl9DTUFQX0VOQ09ESU5HX0NMQVNTX1JFQ19HRVQ7CisgICAgICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gJmNmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYzsKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZSBpZiAoIGVuY29kaW5nLT5vZmZzZXQgPT0gMSApCiAgICAgICAgICAgewogICAgICAgICAgICAgY21hcHJlYy5lbmNvZGluZ19pZCA9IFRUX0FET0JFX0lEX0VYUEVSVDsKICAgICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQ7Ci0gICAgICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gJkNGRl9DTUFQX0VOQ09ESU5HX0NMQVNTX1JFQ19HRVQ7CisgICAgICAgICAgICBjbGF6eiAgICAgICAgICAgICAgID0gJmNmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYzsKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgIHsKICAgICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmdfaWQgPSBUVF9BRE9CRV9JRF9DVVNUT007CiAgICAgICAgICAgICBjbWFwcmVjLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NOwotICAgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9ICZDRkZfQ01BUF9FTkNPRElOR19DTEFTU19SRUNfR0VUOworICAgICAgICAgICAgY2xhenogICAgICAgICAgICAgICA9ICZjZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWM7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggY2xhenosIE5VTEwsICZjbWFwcmVjLCBOVUxMICk7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZm9ianMuaCBiL3NyYy9jZmYvY2Zmb2Jqcy5oCmluZGV4IDYxNmEyNWIuLjJiZWIxMWIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5oCisrKyBiL3NyYy9jZmYvY2Zmb2Jqcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZvYmpzLmgKKyAqCisgKiAgIE9wZW5UeXBlIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGT0JKU19IXwpAQCAtNTEsMTAgKzUxLDEwIEBACiAgIGNmZl9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGYWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBGYWNlIGZ1bmN0aW9ucworICAgKi8KICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2ZhY2VfaW5pdCggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICBmYWNlLCAgICAgICAgICAgLyogQ0ZGX0ZhY2UgKi8KQEAgLTY2LDEwICs2NiwxMCBAQAogICBjZmZfZmFjZV9kb25lKCBGVF9GYWNlICBmYWNlICk7ICAgICAgICAgICAgICAgLyogQ0ZGX0ZhY2UgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRHJpdmVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRHJpdmVyIGZ1bmN0aW9ucworICAgKi8KICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApOyAgICAgICAgIC8qIFBTX0RyaXZlciAqLwogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBhcnNlLmMgYi9zcmMvY2ZmL2NmZnBhcnNlLmMKaW5kZXggYjk2MTFjZi4uYjZmNWRhZSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwYXJzZS5jCisrKyBiL3NyYy9jZmYvY2ZmcGFyc2UuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmcGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmcGFyc2UuYworICoKKyAqICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKGJvZHkpCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjQsMTYgKzI0LDE1IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICiAKICNpbmNsdWRlICJjZmZlcnJzLmgiCi0jaW5jbHVkZSAiY2ZmcGljLmgiCiAjaW5jbHVkZSAiY2ZmbG9hZC5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZnBhcnNlCiAKQEAgLTYwNSw3ICs2MDQsNiBAQAogICAgIEZUX1ZlY3RvciogICAgICAgb2Zmc2V0ID0gJmRpY3QtPmZvbnRfb2Zmc2V0OwogICAgIEZUX1VMb25nKiAgICAgICAgdXBtICAgID0gJmRpY3QtPnVuaXRzX3Blcl9lbTsKICAgICBGVF9CeXRlKiogICAgICAgIGRhdGEgICA9IHBhcnNlci0+c3RhY2s7Ci0gICAgRlRfRXJyb3IgICAgICAgICBlcnJvciAgPSBGVF9FUlIoIFN0YWNrX1VuZGVyZmxvdyApOwogCiAKICAgICBpZiAoIHBhcnNlci0+dG9wID49IHBhcnNlci0+c3RhY2sgKyA2ICkKQEAgLTYxNyw4ICs2MTUsNiBAQAogICAgICAgaW50ICAgICAgaTsKIAogCi0gICAgICBlcnJvciA9IEZUX0Vycl9PazsKLQogICAgICAgZGljdC0+aGFzX2ZvbnRfbWF0cml4ID0gVFJVRTsKIAogICAgICAgLyogV2UgZXhwZWN0IGEgd2VsbC1mb3JtZWQgZm9udCBtYXRyaXgsIHRoaXMgaXMsIHRoZSBtYXRyaXggZWxlbWVudHMgKi8KQEAgLTY0NywyMiArNjQzLDExIEBACiAgICAgICAgICAgICggbWF4X3NjYWxpbmcgLSBtaW5fc2NhbGluZyApIDwgMCB8fAogICAgICAgICAgICAoIG1heF9zY2FsaW5nIC0gbWluX3NjYWxpbmcgKSA+IDkgKQogICAgICAgewotICAgICAgICAvKiBSZXR1cm4gZGVmYXVsdCBtYXRyaXggaW4gY2FzZSBvZiB1bmxpa2VseSB2YWx1ZXMuICovCi0KICAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9mb250X21hdHJpeDoiCiAgICAgICAgICAgICAgICAgICAgICIgc3RyYW5nZSBzY2FsaW5nIHZhbHVlcyAobWluaW11bSAlZCwgbWF4aW11bSAlZCksXG4iCiAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIGRlZmF1bHQgbWF0cml4XG4iLCBtaW5fc2NhbGluZywgbWF4X3NjYWxpbmcgKSk7Ci0KLSAgICAgICAgbWF0cml4LT54eCA9IDB4MTAwMDBMOwotICAgICAgICBtYXRyaXgtPnl4ID0gMDsKLSAgICAgICAgbWF0cml4LT54eSA9IDA7Ci0gICAgICAgIG1hdHJpeC0+eXkgPSAweDEwMDAwTDsKLSAgICAgICAgb2Zmc2V0LT54ICA9IDA7Ci0gICAgICAgIG9mZnNldC0+eSAgPSAwOwotICAgICAgICAqdXBtICAgICAgID0gMTsKLQotICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIGdvdG8gVW5saWtlbHk7CiAgICAgICB9CiAKICAgICAgIGZvciAoIGkgPSAwOyBpIDwgNjsgaSsrICkKQEAgLTcwOSwxMCArNjk0LDMxIEBACiAgICAgICAgICAgICAgICAgICAoZG91YmxlKW1hdHJpeC0+eXkgLyAqdXBtIC8gNjU1MzYsCiAgICAgICAgICAgICAgICAgICAoZG91YmxlKW9mZnNldC0+eCAgLyAqdXBtIC8gNjU1MzYsCiAgICAgICAgICAgICAgICAgICAoZG91YmxlKW9mZnNldC0+eSAgLyAqdXBtIC8gNjU1MzYgKSk7Ci0gICAgfQogCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIGVycm9yOworICAgICAgaWYgKCAhRlRfTWF0cml4X0NoZWNrKCBtYXRyaXggKSApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMSgoICJjZmZfcGFyc2VfZm9udF9tYXRyaXg6IgorICAgICAgICAgICAgICAgICAgICAiIGRlZ2VuZXJhdGUgdmFsdWVzLCB1c2luZyBkZWZhdWx0IG1hdHJpeFxuIiApKTsKKyAgICAgICAgZ290byBVbmxpa2VseTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19VbmRlcmZsb3cgKTsKKworICBVbmxpa2VseToKKyAgICAvKiBSZXR1cm4gZGVmYXVsdCBtYXRyaXggaW4gY2FzZSBvZiB1bmxpa2VseSB2YWx1ZXMuICovCisKKyAgICBtYXRyaXgtPnh4ID0gMHgxMDAwMEw7CisgICAgbWF0cml4LT55eCA9IDA7CisgICAgbWF0cml4LT54eSA9IDA7CisgICAgbWF0cml4LT55eSA9IDB4MTAwMDBMOworICAgIG9mZnNldC0+eCAgPSAwOworICAgIG9mZnNldC0+eSAgPSAwOworICAgICp1cG0gICAgICAgPSAxOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQogCiAKQEAgLTEwMDMsOSArMTAwOSw2IEBACiAgICAgICAgICAgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwgY2ZmX2tpbmRfYm9vbCApCiAKIAotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0KICN1bmRlZiAgQ0ZGX0ZJRUxECiAjdW5kZWYgIENGRl9GSUVMRF9ERUxUQQogCkBAIC0xMTE4LDE4NCArMTEyMSw2IEBACiAjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KIAogCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLSAgdm9pZAotICBGVF9EZXN0cm95X0NsYXNzX2NmZl9maWVsZF9oYW5kbGVycyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqICBjbGF6eiApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgaWYgKCBjbGF6eiApCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOwotICB9Ci0KLQotICBGVF9FcnJvcgotICBGVF9DcmVhdGVfQ2xhc3NfY2ZmX2ZpZWxkX2hhbmRsZXJzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkZfRmllbGRfSGFuZGxlcioqICBvdXRwdXRfY2xhc3MgKQotICB7Ci0gICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqICBjbGF6eiAgPSBOVUxMOwotICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLSAgICBpbnQgIGkgPSAwOwotCi0KLSN1bmRlZiBDRkZfRklFTEQKLSNkZWZpbmUgQ0ZGX0ZJRUxEKCBjb2RlLCBuYW1lLCBpZCwga2luZCApIGkrKzsKLSN1bmRlZiBDRkZfRklFTERfREVMVEEKLSNkZWZpbmUgQ0ZGX0ZJRUxEX0RFTFRBKCBjb2RlLCBuYW1lLCBtYXgsIGlkICkgaSsrOwotI3VuZGVmIENGRl9GSUVMRF9DQUxMQkFDSwotI2RlZmluZSBDRkZfRklFTERfQ0FMTEJBQ0soIGNvZGUsIG5hbWUsIGlkICkgaSsrOwotI3VuZGVmIENGRl9GSUVMRF9CTEVORAotI2RlZmluZSBDRkZfRklFTERfQkxFTkQoIGNvZGUsIGlkICkgaSsrOwotCi0jaW5jbHVkZSAiY2ZmdG9rZW4uaCIKLQotICAgIGkrKzsgLyogeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0gKi8KLQotICAgIGlmICggRlRfQUxMT0MoIGNsYXp6LCBzaXplb2YgKCBDRkZfRmllbGRfSGFuZGxlciApICogaSApICkKLSAgICAgIHJldHVybiBlcnJvcjsKLQotICAgIGkgPSAwOwotCi0KLSNpZm5kZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLQotCi0jdW5kZWYgQ0ZGX0ZJRUxEX0NBTExCQUNLCi0jZGVmaW5lIENGRl9GSUVMRF9DQUxMQkFDSyggY29kZV8sIG5hbWVfLCBpZF8gKSAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmtpbmQgICAgICAgICA9IGNmZl9raW5kX2NhbGxiYWNrOyAgIFwKLSAgICAgICAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSBjb2RlXyB8IENGRkNPREU7ICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnNpemUgICAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSBjZmZfcGFyc2VfICMjIG5hbWVfOyBcCi0gICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvdW50X29mZnNldCA9IDA7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpKys7Ci0KLSN1bmRlZiAgQ0ZGX0ZJRUxECi0jZGVmaW5lIENGRl9GSUVMRCggY29kZV8sIG5hbWVfLCBpZF8sIGtpbmRfICkgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ua2luZCAgICAgICAgID0ga2luZF87ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uY29kZSAgICAgICAgID0gY29kZV8gfCBDRkZDT0RFOyAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyBcCi0gICAgICAgICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gRlRfRklFTERfU0laRSggbmFtZV8gKTsgICBcCi0gICAgICAgICAgY2xhenpbaV0ucmVhZGVyICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLSN1bmRlZiAgQ0ZGX0ZJRUxEX0RFTFRBCi0jZGVmaW5lIENGRl9GSUVMRF9ERUxUQSggY29kZV8sIG5hbWVfLCBtYXhfLCBpZF8gKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBjZmZfa2luZF9kZWx0YTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IGNvZGVfIHwgQ0ZGQ09ERTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSBGVF9GSUVMRF9TSVpFX0RFTFRBKCBuYW1lXyApOyAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gbWF4XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSBGVF9GSUVMRF9PRkZTRVQoIG51bV8gIyMgbmFtZV8gKTsgXAotICAgICAgICAgIGkrKzsKLQotI3VuZGVmICBDRkZfRklFTERfQkxFTkQKLSNkZWZpbmUgQ0ZGX0ZJRUxEX0JMRU5EKCBjb2RlXywgaWRfICkgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBjZmZfa2luZF9ibGVuZDsgIFwKLSAgICAgICAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSBjb2RlXyB8IENGRkNPREU7IFwKLSAgICAgICAgICBjbGF6eltpXS5vZmZzZXQgICAgICAgPSAwOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSAwOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSBjZmZfcGFyc2VfYmxlbmQ7IFwKLSAgICAgICAgICBjbGF6eltpXS5hcnJheV9tYXggICAgPSAwOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSAwOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpKys7Ci0KLSNpbmNsdWRlICJjZmZ0b2tlbi5oIgotCi0gICAgY2xhenpbaV0ua2luZCAgICAgICAgID0gMDsKLSAgICBjbGF6eltpXS5jb2RlICAgICAgICAgPSAwOwotICAgIGNsYXp6W2ldLm9mZnNldCAgICAgICA9IDA7Ci0gICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gMDsKLSAgICBjbGF6eltpXS5yZWFkZXIgICAgICAgPSAwOwotICAgIGNsYXp6W2ldLmFycmF5X21heCAgICA9IDA7Ci0gICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsKLQotCi0jZWxzZSAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLwotCi0KLSN1bmRlZiBDRkZfRklFTERfQ0FMTEJBQ0sKLSNkZWZpbmUgQ0ZGX0ZJRUxEX0NBTExCQUNLKCBjb2RlXywgbmFtZV8sIGlkXyApICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ua2luZCAgICAgICAgID0gY2ZmX2tpbmRfY2FsbGJhY2s7ICAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IGNvZGVfIHwgQ0ZGQ09ERTsgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5vZmZzZXQgICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IGNmZl9wYXJzZV8gIyMgbmFtZV87IFwKLSAgICAgICAgICBjbGF6eltpXS5hcnJheV9tYXggICAgPSAwOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmlkICAgICAgICAgICA9IGlkXzsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpKys7Ci0KLSN1bmRlZiAgQ0ZGX0ZJRUxECi0jZGVmaW5lIENGRl9GSUVMRCggY29kZV8sIG5hbWVfLCBpZF8sIGtpbmRfICkgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ua2luZCAgICAgICAgID0ga2luZF87ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uY29kZSAgICAgICAgID0gY29kZV8gfCBDRkZDT0RFOyAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyBcCi0gICAgICAgICAgY2xhenpbaV0uc2l6ZSAgICAgICAgID0gRlRfRklFTERfU0laRSggbmFtZV8gKTsgICBcCi0gICAgICAgICAgY2xhenpbaV0ucmVhZGVyICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uY291bnRfb2Zmc2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uaWQgICAgICAgICAgID0gaWRfOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLSN1bmRlZiAgQ0ZGX0ZJRUxEX0RFTFRBCi0jZGVmaW5lIENGRl9GSUVMRF9ERUxUQSggY29kZV8sIG5hbWVfLCBtYXhfLCBpZF8gKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSBjZmZfa2luZF9kZWx0YTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IGNvZGVfIHwgQ0ZGQ09ERTsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gRlRfRklFTERfT0ZGU0VUKCBuYW1lXyApOyAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSBGVF9GSUVMRF9TSVpFX0RFTFRBKCBuYW1lXyApOyAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gbWF4XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSBGVF9GSUVMRF9PRkZTRVQoIG51bV8gIyMgbmFtZV8gKTsgXAotICAgICAgICAgIGNsYXp6W2ldLmlkICAgICAgICAgICA9IGlkXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaSsrOwotCi0jdW5kZWYgIENGRl9GSUVMRF9CTEVORAotI2RlZmluZSBDRkZfRklFTERfQkxFTkQoIGNvZGVfLCBpZF8gKSAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmtpbmQgICAgICAgICA9IGNmZl9raW5kX2JsZW5kOyAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IGNvZGVfIHwgQ0ZGQ09ERTsgXAotICAgICAgICAgIGNsYXp6W2ldLm9mZnNldCAgICAgICA9IDA7ICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnNpemUgICAgICAgICA9IDA7ICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IGNmZl9wYXJzZV9ibGVuZDsgXAotICAgICAgICAgIGNsYXp6W2ldLmFycmF5X21heCAgICA9IDA7ICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmNvdW50X29mZnNldCA9IDA7ICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNsYXp6W2ldLmlkICAgICAgICAgICA9IGlkXzsgICAgICAgICAgICAgXAotICAgICAgICAgIGkrKzsKLQotI2luY2x1ZGUgImNmZnRva2VuLmgiCi0KLSAgICBjbGF6eltpXS5raW5kICAgICAgICAgPSAwOwotICAgIGNsYXp6W2ldLmNvZGUgICAgICAgICA9IDA7Ci0gICAgY2xhenpbaV0ub2Zmc2V0ICAgICAgID0gMDsKLSAgICBjbGF6eltpXS5zaXplICAgICAgICAgPSAwOwotICAgIGNsYXp6W2ldLnJlYWRlciAgICAgICA9IDA7Ci0gICAgY2xhenpbaV0uYXJyYXlfbWF4ICAgID0gMDsKLSAgICBjbGF6eltpXS5jb3VudF9vZmZzZXQgPSAwOwotICAgIGNsYXp6W2ldLmlkICAgICAgICAgICA9IDA7Ci0KLQotI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCi0KLQotICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsKLQotICAgIHJldHVybiBGVF9FcnJfT2s7Ci0gIH0KLQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBjZmZfcGFyc2VyX3J1biggQ0ZGX1BhcnNlciAgcGFyc2VyLAogICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgc3RhcnQsCkBAIC0xMzIxLDYgKzExNDYsNyBAQAogICAgIHsKICAgICAgIEZUX1VJbnQgIHYgPSAqcDsKIAorCiAgICAgICAvKiBPcGNvZGUgMzEgaXMgbGVnYWN5IE1NIFQyIG9wZXJhdG9yLCBub3QgYSBudW1iZXIuICAgICAgKi8KICAgICAgIC8qIE9wY29kZSAyNTUgaXMgcmVzZXJ2ZWQgYW5kIHNob3VsZCBub3QgYXBwZWFyIGluIGZvbnRzOyAqLwogICAgICAgLyogaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBDRkYyIGJsZW5kcy4gICAgICAgICAgICAgICAgICovCkBAIC0xNTIzLDcgKzEzNDksNyBAQAogICAgICAgICB9CiAgICAgICAgIGNvZGUgPSBjb2RlIHwgcGFyc2VyLT5vYmplY3RfY29kZTsKIAotICAgICAgICBmb3IgKCBmaWVsZCA9IENGRl9GSUVMRF9IQU5ETEVSU19HRVQ7IGZpZWxkLT5raW5kOyBmaWVsZCsrICkKKyAgICAgICAgZm9yICggZmllbGQgPSBjZmZfZmllbGRfaGFuZGxlcnM7IGZpZWxkLT5raW5kOyBmaWVsZCsrICkKICAgICAgICAgewogICAgICAgICAgIGlmICggZmllbGQtPmNvZGUgPT0gKEZUX0ludCljb2RlICkKICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBhcnNlLmggYi9zcmMvY2ZmL2NmZnBhcnNlLmgKaW5kZXggOGE4Y2FlYy4uOWNlZmFiNyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwYXJzZS5oCisrKyBiL3NyYy9jZmYvY2ZmcGFyc2UuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmcGFyc2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2ZmcGFyc2UuaAorICoKKyAqICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKHNwZWNpZmljYXRpb24pCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0ZGUEFSU0VfSF8KQEAgLTMzLDExICszMywxMSBAQAogI2RlZmluZSBDRkZfTUFYX1NUQUNLX0RFUFRIICA5NgogCiAgIC8qCi0gICAqICBUaGVyZSBhcmUgcGxhbnMgdG8gcmVtb3ZlIHRoZSBgbWF4c3RhY2snIG9wZXJhdG9yIGluIGEgZm9ydGhjb21pbmcKLSAgICogIHJldmlzaW9uIG9mIHRoZSBDRkYyIHNwZWNpZmljYXRpb24sIGluY3JlYXNpbmcgdGhlICh0aGVuIHN0YXRpYykgc3RhY2sKLSAgICogIHNpemUgdG8gNTEzLiAgQnkgbWFraW5nIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZXF1YWwgdG8gdGhlIG1heGltdW0KLSAgICogIHN0YWNrIHNpemUsIHRoZSBvcGVyYXRvciBpcyBlc3NlbnRpYWxseSBkaXNhYmxlZCwgd2hpY2ggaGFzIHRoZQotICAgKiAgZGVzaXJlZCBlZmZlY3QgaW4gRnJlZVR5cGUuCisgICAqIFRoZXJlIGFyZSBwbGFucyB0byByZW1vdmUgdGhlIGBtYXhzdGFjaycgb3BlcmF0b3IgaW4gYSBmb3J0aGNvbWluZworICAgKiByZXZpc2lvbiBvZiB0aGUgQ0ZGMiBzcGVjaWZpY2F0aW9uLCBpbmNyZWFzaW5nIHRoZSAodGhlbiBzdGF0aWMpIHN0YWNrCisgICAqIHNpemUgdG8gNTEzLiAgQnkgbWFraW5nIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZXF1YWwgdG8gdGhlIG1heGltdW0KKyAgICogc3RhY2sgc2l6ZSwgdGhlIG9wZXJhdG9yIGlzIGVzc2VudGlhbGx5IGRpc2FibGVkLCB3aGljaCBoYXMgdGhlCisgICAqIGRlc2lyZWQgZWZmZWN0IGluIEZyZWVUeXBlLgogICAgKi8KICNkZWZpbmUgQ0ZGMl9NQVhfU1RBQ0sgICAgICA1MTMKICNkZWZpbmUgQ0ZGMl9ERUZBVUxUX1NUQUNLICA1MTMKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGljLmMgYi9zcmMvY2ZmL2NmZnBpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGI3NGM3Li4wMDAwMDAwCi0tLSBhL3NyYy9jZmYvY2ZmcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2ZmcGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBjZmYgbW9kdWxlLiAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgImNmZmNtYXAuaCIKLSNpbmNsdWRlICJjZmZwaWMuaCIKLSNpbmNsdWRlICJjZmZlcnJzLmgiCi0KLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBjZmZkcml2ci5jICovCi0gIEZUX0Vycm9yCi0gIEZUX0NyZWF0ZV9DbGFzc19jZmZfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOwotICB2b2lkCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfY2ZmX3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICk7Ci0gIHZvaWQKLSAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9wc19pbmZvKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0luZm9SZWMqICBjbGF6eiApOwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCggRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfR2x5cGhEaWN0UmVjKiAgY2xhenogKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX3BzX25hbWUoIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjKiAgY2xhenogKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8oIEZUX0xpYnJhcnkgICAgICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9UVENNYXBzUmVjKiAgY2xhenogKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX2NpZF9pbmZvKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VfQ0lEUmVjKiAgY2xhenogKTsKLQotICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIGNmZnBhcnNlLmMgKi8KLSAgRlRfRXJyb3IKLSAgRlRfQ3JlYXRlX0NsYXNzX2NmZl9maWVsZF9oYW5kbGVycyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGX0ZpZWxkX0hhbmRsZXIqKiAgb3V0cHV0X2NsYXNzICk7Ci0gIHZvaWQKLSAgRlRfRGVzdHJveV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGRl9GaWVsZF9IYW5kbGVyKiAgY2xhenogKTsKLQotCi0gIHZvaWQKLSAgY2ZmX2RyaXZlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICBpZiAoIHBpY19jb250YWluZXItPmNmZiApCi0gICAgewotICAgICAgQ2ZmTW9kdWxlUElDKiAgY29udGFpbmVyID0gKENmZk1vZHVsZVBJQyopcGljX2NvbnRhaW5lci0+Y2ZmOwotCi0KLSAgICAgIGlmICggY29udGFpbmVyLT5jZmZfc2VydmljZXMgKQotICAgICAgICBGVF9EZXN0cm95X0NsYXNzX2NmZl9zZXJ2aWNlcyggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VzICk7Ci0gICAgICBjb250YWluZXItPmNmZl9zZXJ2aWNlcyA9IE5VTEw7Ci0gICAgICBpZiAoIGNvbnRhaW5lci0+Y2ZmX2ZpZWxkX2hhbmRsZXJzICkKLSAgICAgICAgRlRfRGVzdHJveV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoCi0gICAgICAgICAgbGlicmFyeSwgY29udGFpbmVyLT5jZmZfZmllbGRfaGFuZGxlcnMgKTsKLSAgICAgIGNvbnRhaW5lci0+Y2ZmX2ZpZWxkX2hhbmRsZXJzID0gTlVMTDsKLSAgICAgIEZUX0ZSRUUoIGNvbnRhaW5lciApOwotICAgICAgcGljX2NvbnRhaW5lci0+Y2ZmID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotCi0gIEZUX0Vycm9yCi0gIGNmZl9kcml2ZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKLSAgICBDZmZNb2R1bGVQSUMqICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCi0gICAgaWYgKCBGVF9BTExPQyAoIGNvbnRhaW5lciwgc2l6ZW9mICggKmNvbnRhaW5lciApICkgKQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIEZUX01FTV9TRVQoIGNvbnRhaW5lciwgMCwgc2l6ZW9mICggKmNvbnRhaW5lciApICk7Ci0gICAgcGljX2NvbnRhaW5lci0+Y2ZmID0gY29udGFpbmVyOwotCi0gICAgLyogaW5pdGlhbGl6ZSBwb2ludGVyIHRhYmxlIC0gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogdGhpcyBpcyBob3cgdGhlIG1vZHVsZSB1c3VhbGx5IGV4cGVjdHMgdGhpcyBkYXRhICovCi0gICAgZXJyb3IgPSBGVF9DcmVhdGVfQ2xhc3NfY2ZmX3NlcnZpY2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VzICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19jZmZfZmllbGRfaGFuZGxlcnMoCi0gICAgICAgICAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9maWVsZF9oYW5kbGVycyApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9wc19pbmZvKAotICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VfcHNfaW5mbyApOwotICAgIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdCgKLSAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9zZXJ2aWNlX2dseXBoX2RpY3QgKTsKLSAgICBGVF9Jbml0X0NsYXNzX2NmZl9zZXJ2aWNlX3BzX25hbWUoCi0gICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5jZmZfc2VydmljZV9wc19uYW1lICk7Ci0gICAgRlRfSW5pdF9DbGFzc19jZmZfc2VydmljZV9nZXRfY21hcF9pbmZvKAotICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApOwotICAgIEZUX0luaXRfQ2xhc3NfY2ZmX3NlcnZpY2VfY2lkX2luZm8oCi0gICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5jZmZfc2VydmljZV9jaWRfaW5mbyApOwotICAgIEZUX0luaXRfQ2xhc3NfY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjKAotICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+Y2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjICk7Ci0gICAgRlRfSW5pdF9DbGFzc19jZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYygKLSAgICAgIGxpYnJhcnksICZjb250YWluZXItPmNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjICk7Ci0KLSAgRXhpdDoKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGNmZl9kcml2ZXJfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBpYy5oIGIvc3JjL2NmZi9jZmZwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhNDIwMy4uMDAwMDAwMAotLS0gYS9zcmMvY2ZmL2NmZnBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmZnBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgY2ZmIG1vZHVsZS4gICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBDRkZQSUNfSF8KLSNkZWZpbmUgQ0ZGUElDX0hfCi0KLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jZGVmaW5lIENGRl9TRVJWSUNFX1BTX0lORk9fR0VUICAgICAgICAgIGNmZl9zZXJ2aWNlX3BzX2luZm8KLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQgICAgICAgY2ZmX3NlcnZpY2VfZ2x5cGhfZGljdAotI2RlZmluZSBDRkZfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgICAgICBjZmZfc2VydmljZV9wc19uYW1lCi0jZGVmaW5lIENGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VUICAgIGNmZl9zZXJ2aWNlX2dldF9jbWFwX2luZm8KLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfQ0lEX0lORk9fR0VUICAgICAgICAgY2ZmX3NlcnZpY2VfY2lkX2luZm8KLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgICAgICAgY2ZmX3NlcnZpY2VfcHJvcGVydGllcwotI2RlZmluZSBDRkZfU0VSVklDRVNfR0VUICAgICAgICAgICAgICAgICBjZmZfc2VydmljZXMKLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfTVVMVElfTUFTVEVSU19HRVQgICAgY2ZmX3NlcnZpY2VfbXVsdGlfbWFzdGVycwotI2RlZmluZSBDRkZfU0VSVklDRV9NRVRSSUNTX1ZBUl9HRVQgICAgICBjZmZfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMKLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfQ0ZGX0xPQURfR0VUICAgICAgICAgY2ZmX3NlcnZpY2VfY2ZmX2xvYWQKLSNkZWZpbmUgQ0ZGX0NNQVBfRU5DT0RJTkdfQ0xBU1NfUkVDX0dFVCAgY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjCi0jZGVmaW5lIENGRl9DTUFQX1VOSUNPREVfQ0xBU1NfUkVDX0dFVCAgIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjCi0jZGVmaW5lIENGRl9GSUVMRF9IQU5ETEVSU19HRVQgICAgICAgICAgIGNmZl9maWVsZF9oYW5kbGVycwotCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSAotI2luY2x1ZGUgImNmZnBhcnNlLmgiCi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9DSURfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ICi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLSAgdHlwZWRlZiBzdHJ1Y3QgIENmZk1vZHVsZVBJQ18KLSAgewotICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgICAgICAgICAgICAgIGNmZl9zZXJ2aWNlczsKLSAgICBDRkZfRmllbGRfSGFuZGxlciogICAgICAgICAgICAgICBjZmZfZmllbGRfaGFuZGxlcnM7Ci0gICAgRlRfU2VydmljZV9Qc0luZm9SZWMgICAgICAgICAgICAgY2ZmX3NlcnZpY2VfcHNfaW5mbzsKLSAgICBGVF9TZXJ2aWNlX0dseXBoRGljdFJlYyAgICAgICAgICBjZmZfc2VydmljZV9nbHlwaF9kaWN0OwotICAgIEZUX1NlcnZpY2VfUHNGb250TmFtZVJlYyAgICAgICAgIGNmZl9zZXJ2aWNlX3BzX25hbWU7Ci0gICAgRlRfU2VydmljZV9UVENNYXBzUmVjICAgICAgICAgICAgY2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbzsKLSAgICBGVF9TZXJ2aWNlX0NJRFJlYyAgICAgICAgICAgICAgICBjZmZfc2VydmljZV9jaWRfaW5mbzsKLSAgICBGVF9TZXJ2aWNlX1Byb3BlcnRpZXNSZWMgICAgICAgICBjZmZfc2VydmljZV9wcm9wZXJ0aWVzOwotICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjICAgICAgIGNmZl9zZXJ2aWNlX211bHRpX21hc3RlcnM7Ci0gICAgRlRfU2VydmljZV9NZXRyaWNzVmFyaWF0aW9uc1JlYyAgY2ZmX3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zOwotICAgIEZUX1NlcnZpY2VfQ0ZGTG9hZFJlYyAgICAgICAgICAgIGNmZl9zZXJ2aWNlX2NmZl9sb2FkOwotICAgIEZUX0NNYXBfQ2xhc3NSZWMgICAgICAgICAgICAgICAgIGNmZl9jbWFwX2VuY29kaW5nX2NsYXNzX3JlYzsKLSAgICBGVF9DTWFwX0NsYXNzUmVjICAgICAgICAgICAgICAgICBjZmZfY21hcF91bmljb2RlX2NsYXNzX3JlYzsKLQotICB9IENmZk1vZHVsZVBJQzsKLQotCi0jZGVmaW5lIEdFVF9QSUMoIGxpYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggKENmZk1vZHVsZVBJQyopKCAobGliKS0+cGljX2NvbnRhaW5lci5jZmYgKSApCi0KLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfcHNfaW5mbyApCi0jZGVmaW5lIENGRl9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX2dseXBoX2RpY3QgKQotI2RlZmluZSBDRkZfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfc2VydmljZV9wc19uYW1lICkKLSNkZWZpbmUgQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApCi0jZGVmaW5lIENGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfc2VydmljZV9jaWRfaW5mbyApCi0jZGVmaW5lIENGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX3Byb3BlcnRpZXMgKQotI2RlZmluZSBDRkZfU0VSVklDRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlcyApCi0jZGVmaW5lIENGRl9TRVJWSUNFX01VTFRJX01BU1RFUlNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX211bHRpX21hc3RlcnMgKQotI2RlZmluZSBDRkZfU0VSVklDRV9NRVRSSUNTX1ZBUl9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucyApCi0jZGVmaW5lIENGRl9TRVJWSUNFX0NGRl9MT0FEX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfc2VydmljZV9jZmZfbG9hZCApCi0jZGVmaW5lIENGRl9DTUFQX0VOQ09ESU5HX0NMQVNTX1JFQ19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjICkKLSNkZWZpbmUgQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjICkKLSNkZWZpbmUgQ0ZGX0ZJRUxEX0hBTkRMRVJTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfZmllbGRfaGFuZGxlcnMgKQotCi0gIC8qIHNlZSBjZmZwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCi0gIHZvaWQKLSAgY2ZmX2RyaXZlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0gIEZUX0Vycm9yCi0gIGNmZl9kcml2ZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotIC8qICovCi0KLSNlbmRpZiAvKiBDRkZQSUNfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmdG9rZW4uaCBiL3NyYy9jZmYvY2ZmdG9rZW4uaAppbmRleCBmZWMxY2EyLi5hN2NjZWE4IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnRva2VuLmgKKysrIGIvc3JjL2NmZi9jZmZ0b2tlbi5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZ0b2tlbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ0ZGIHRva2VuIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZ0b2tlbi5oCisgKgorICogICBDRkYgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICN1bmRlZiAgRlRfU1RSVUNUVVJFCmRpZmYgLS1naXQgYS9zcmMvY2ZmL3J1bGVzLm1rIGIvc3JjL2NmZi9ydWxlcy5tawppbmRleCBiY2U2NzI5Li4wMTU3YTk5IDEwMDY0NAotLS0gYS9zcmMvY2ZmL3J1bGVzLm1rCisrKyBiL3NyYy9jZmYvcnVsZXMubWsKQEAgLTMxLDggKzMxLDcgQEAKICAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmZ2xvYWQuYyBcCiAgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZmxvYWQuYyAgXAogICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZvYmpzLmMgIFwKLSAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmcGFyc2UuYyBcCi0gICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZnBpYy5jCisgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZnBhcnNlLmMKIAogCiAjIENGRiBkcml2ZXIgaGVhZGVycwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRlcnJzLmggYi9zcmMvY2lkL2NpZGVycnMuaAppbmRleCBhNWE4NmUzLi42NzNiMDk5IDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGVycnMuaAorKysgYi9zcmMvY2lkL2NpZGVycnMuaApAQCAtMSwyNiArMSwyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2lkZXJycy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENJRCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2lkZXJycy5oCisgKgorICogICBDSUQgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIENJRCBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBDSUQgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBDSURFUlJTX0hfCiAjZGVmaW5lIENJREVSUlNfSF8KZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkZ2xvYWQuYyBiL3NyYy9jaWQvY2lkZ2xvYWQuYwppbmRleCBkMTRmOWEyLi5lNDdjZDk5IDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGdsb2FkLmMKKysrIGIvc3JjL2NpZC9jaWRnbG9hZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjaWRnbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ0lELWtleWVkIFR5cGUxIEdseXBoIExvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjaWRnbG9hZC5jCisgKgorICogICBDSUQta2V5ZWQgVHlwZTEgR2x5cGggTG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJjaWRlcnJzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2lkZ2xvYWQKIApkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRnbG9hZC5oIGIvc3JjL2NpZC9jaWRnbG9hZC5oCmluZGV4IDQ4MTE4NTIuLjIxYzVlMTYgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkZ2xvYWQuaAorKysgYi9zcmMvY2lkL2NpZGdsb2FkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNpZGdsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNpZGdsb2FkLmgKKyAqCisgKiAgIE9wZW5UeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0lER0xPQURfSF8KZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkbG9hZC5jIGIvc3JjL2NpZC9jaWRsb2FkLmMKaW5kZXggMjdjZDA5Yi4uMTU0NjkyNiAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRsb2FkLmMKKysrIGIvc3JjL2NpZC9jaWRsb2FkLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNpZGxvYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNpZGxvYWQuYworICoKKyAqICAgQ0lELWtleWVkIFR5cGUxIGZvbnQgbG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMSwxOCArMjEsMTkgQEAKICNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAogI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICiAKICNpbmNsdWRlICJjaWRsb2FkLmgiCiAKICNpbmNsdWRlICJjaWRlcnJzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2lkbG9hZAogCkBAIC04MSw2ICs4Miw4IEBACiAgICAgLyogaWYgdGhlIGtleXdvcmQgaGFzIGEgZGVkaWNhdGVkIGNhbGxiYWNrLCBjYWxsIGl0ICovCiAgICAgaWYgKCBrZXl3b3JkLT50eXBlID09IFQxX0ZJRUxEX1RZUEVfQ0FMTEJBQ0sgKQogICAgIHsKKyAgICAgIEZUX1RSQUNFNCgoICIgICVzIiwga2V5d29yZC0+aWRlbnQgKSk7CisKICAgICAgIGtleXdvcmQtPnJlYWRlciggKEZUX0ZhY2UpZmFjZSwgcGFyc2VyICk7CiAgICAgICBlcnJvciA9IHBhcnNlci0+cm9vdC5lcnJvcjsKICAgICAgIGdvdG8gRXhpdDsKQEAgLTEzMSw2ICsxMzQsOCBAQAogICAgICAgfQogICAgIH0KIAorICAgIEZUX1RSQUNFNCgoICIgICVzIiwga2V5d29yZC0+aWRlbnQgKSk7CisKICAgICBkdW1teV9vYmplY3QgPSBvYmplY3Q7CiAKICAgICAvKiBub3csIGxvYWQgdGhlIGtleXdvcmQgZGF0YSBpbiB0aGUgb2JqZWN0J3MgZmllbGQocykgKi8KQEAgLTE0MSw2ICsxNDYsOSBAQAogICAgIGVsc2UKICAgICAgIGVycm9yID0gY2lkX3BhcnNlcl9sb2FkX2ZpZWxkKCAmbG9hZGVyLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZCwgJmR1bW15X29iamVjdCApOworCisgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKwogICBFeGl0OgogICAgIHJldHVybiBlcnJvcjsKICAgfQpAQCAtMTczLDYgKzE4MSwxNCBAQAogICAgICAgaWYgKCByZXN1bHQgPCA2ICkKICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAKKyAgICAgIEZUX1RSQUNFNCgoICIgWyVmICVmICVmICVmICVmICVmXVxuIiwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFswXSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFsxXSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFsyXSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFszXSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFs0XSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFs1XSAvIDY1NTM2IC8gMTAwMCApKTsKKwogICAgICAgdGVtcF9zY2FsZSA9IEZUX0FCUyggdGVtcFszXSApOwogCiAgICAgICBpZiAoIHRlbXBfc2NhbGUgPT0gMCApCkBAIC0yMDAsNiArMjE2LDEzIEBACiAgICAgICBtYXRyaXgtPnh5ID0gdGVtcFsyXTsKICAgICAgIG1hdHJpeC0+eXkgPSB0ZW1wWzNdOwogCisgICAgICBpZiAoICFGVF9NYXRyaXhfQ2hlY2soIG1hdHJpeCApICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAidDFfcGFyc2VfZm9udF9tYXRyaXg6IGludmFsaWQgZm9udCBtYXRyaXhcbiIgKSk7CisgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgfQorCiAgICAgICAvKiBub3RlIHRoYXQgdGhlIGZvbnQgb2Zmc2V0cyBhcmUgZXhwcmVzc2VkIGluIGludGVnZXIgZm9udCB1bml0cyAqLwogICAgICAgb2Zmc2V0LT54ICA9IHRlbXBbNF0gPj4gMTY7CiAgICAgICBvZmZzZXQtPnkgID0gdGVtcFs1XSA+PiAxNjsKQEAgLTIyOCw2ICsyNTEsOCBAQAogICAgICAgZ290byBFeGl0OwogICAgIH0KIAorICAgIEZUX1RSQUNFNCgoICIgJWRcbiIsIG51bV9kaWN0cyApKTsKKwogICAgIC8qCiAgICAgICogQSBzaW5nbGUgZW50cnkgaW4gdGhlIEZEQXJyYXkgbXVzdCAoYXQgbGVhc3QpIGNvbnRhaW4gdGhlIGZvbGxvd2luZwogICAgICAqIHN0cnVjdHVyZSBlbGVtZW50cy4KQEAgLTI2MywxNCArMjg4LDE4IEBACiAKICAgICAgIGNpZC0+bnVtX2RpY3RzID0gbnVtX2RpY3RzOwogCi0gICAgICAvKiBkb24ndCBmb3JnZXQgdG8gc2V0IGEgZmV3IGRlZmF1bHRzICovCisgICAgICAvKiBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAodGhlIHNhbWUgYXMgZm9yIFR5cGUgMSBmb250cykgKi8KICAgICAgIGZvciAoIG4gPSAwOyBuIDwgY2lkLT5udW1fZGljdHM7IG4rKyApCiAgICAgICB7CiAgICAgICAgIENJRF9GYWNlRGljdCAgZGljdCA9IGNpZC0+Zm9udF9kaWN0cyArIG47CiAKIAotICAgICAgICAvKiBkZWZhdWx0IHZhbHVlIGZvciBsZW5JViAqLwotICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QubGVuSVYgPSA0OworICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9zaGlmdCAgICAgICA9IDc7CisgICAgICAgIGRpY3QtPnByaXZhdGVfZGljdC5ibHVlX2Z1enogICAgICAgID0gMTsKKyAgICAgICAgZGljdC0+cHJpdmF0ZV9kaWN0LmxlbklWICAgICAgICAgICAgPSA0OworICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuZXhwYW5zaW9uX2ZhY3RvciA9IChGVF9GaXhlZCkoIDAuMDYgKiAweDEwMDAwTCApOworICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9zY2FsZSAgICAgICA9IChGVF9GaXhlZCkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAzOTYyNSAqIDB4MTAwMDBMICogMTAwMCApOwogICAgICAgfQogICAgIH0KIApAQCAtMjc5LDkgKzMwOCw5IEBACiAgIH0KIAogCi0gIC8qIGJ5IG1pc3Rha2UsIGBleHBhbnNpb25fZmFjdG9yJyBhcHBlYXJzIGJvdGggaW4gUFNfUHJpdmF0ZVJlYyAqLworICAvKiBCeSBtaXN0YWtlLCBgZXhwYW5zaW9uX2ZhY3RvcicgYXBwZWFycyBib3RoIGluIFBTX1ByaXZhdGVSZWMgKi8KICAgLyogYW5kIENJRF9GYWNlRGljdFJlYyAoYm90aCBhcmUgcHVibGljIGhlYWRlciBmaWxlcyBhbmQgY2FuJ3QgICovCi0gIC8qIGNoYW5nZWQpOyB3ZSBzaW1wbHkgY29weSB0aGUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBjaGFuZ2VkKS4gIFdlIHNpbXBseSBjb3B5IHRoZSB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgcGFyc2VfZXhwYW5zaW9uX2ZhY3RvciggQ0lEX0ZhY2UgICAgIGZhY2UsCkBAIC0yOTYsMTIgKzMyNSw0NiBAQAogCiAgICAgICBkaWN0LT5leHBhbnNpb25fZmFjdG9yICAgICAgICAgICAgICA9IGNpZF9wYXJzZXJfdG9fZml4ZWQoIHBhcnNlciwgMCApOwogICAgICAgZGljdC0+cHJpdmF0ZV9kaWN0LmV4cGFuc2lvbl9mYWN0b3IgPSBkaWN0LT5leHBhbnNpb25fZmFjdG9yOworCisgICAgICBGVF9UUkFDRTQoKCAiJWRcbiIsIGRpY3QtPmV4cGFuc2lvbl9mYWN0b3IgKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQogCiAKKyAgLyogQnkgbWlzdGFrZSwgYENJRF9GYWNlRGljdFJlYycgZG9lc24ndCBjb250YWluIGEgZmllbGQgZm9yIHRoZSAqLworICAvKiBgRm9udE5hbWUnIGtleXdvcmQuICBGcmVlVHlwZSBkb2Vzbid0IG5lZWQgaXQsIGJ1dCBpdCBpcyBuaWNlICovCisgIC8qIHRvIGNhdGNoIGl0IGZvciBwcm9kdWNpbmcgYmV0dGVyIHRyYWNlIG91dHB1dC4gICAgICAgICAgICAgICAgKi8KKworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGFyc2VfZm9udF9uYW1lKCBDSURfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICBDSURfUGFyc2VyKiAgcGFyc2VyICkKKyAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgaWYgKCBwYXJzZXItPm51bV9kaWN0ID49IDAgJiYgcGFyc2VyLT5udW1fZGljdCA8IGZhY2UtPmNpZC5udW1fZGljdHMgKQorICAgIHsKKyAgICAgIFQxX1Rva2VuUmVjICB0b2tlbjsKKyAgICAgIEZUX1VJbnQgICAgICBsZW47CisKKworICAgICAgY2lkX3BhcnNlcl90b190b2tlbiggcGFyc2VyLCAmdG9rZW4gKTsKKworICAgICAgbGVuID0gKEZUX1VJbnQpKCB0b2tlbi5saW1pdCAtIHRva2VuLnN0YXJ0ICk7CisgICAgICBpZiAoIGxlbiApCisgICAgICAgIEZUX1RSQUNFNCgoICIgJS4qc1xuIiwgbGVuLCB0b2tlbi5zdGFydCApKTsKKyAgICAgIGVsc2UKKyAgICAgICAgRlRfVFJBQ0U0KCggIiA8bm8gdmFsdWU+XG4iICkpOworICAgIH0KKyNlbHNlCisgICAgRlRfVU5VU0VEKCBmYWNlICk7CisgICAgRlRfVU5VU0VEKCBwYXJzZXIgKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKICAgc3RhdGljCiAgIGNvbnN0IFQxX0ZpZWxkUmVjICBjaWRfZmllbGRfcmVjb3Jkc1tdID0KICAgewpAQCAtMzExLDYgKzM3NCw3IEBACiAgICAgVDFfRklFTERfQ0FMTEJBQ0soICJGREFycmF5IiwgICAgICAgICBwYXJzZV9mZF9hcnJheSwgMCApCiAgICAgVDFfRklFTERfQ0FMTEJBQ0soICJGb250TWF0cml4IiwgICAgICBjaWRfcGFyc2VfZm9udF9tYXRyaXgsIDAgKQogICAgIFQxX0ZJRUxEX0NBTExCQUNLKCAiRXhwYW5zaW9uRmFjdG9yIiwgcGFyc2VfZXhwYW5zaW9uX2ZhY3RvciwgMCApCisgICAgVDFfRklFTERfQ0FMTEJBQ0soICJGb250TmFtZSIsICAgICAgICBwYXJzZV9mb250X25hbWUsIDAgKQogCiAgICAgeyAwLCBUMV9GSUVMRF9MT0NBVElPTl9DSURfSU5GTywgVDFfRklFTERfVFlQRV9OT05FLCAwLCAwLCAwLCAwLCAwLCAwIH0KICAgfTsKQEAgLTM1Niw3ICs0MjAsMTYgQEAKICAgICAgICAgICAgIC8qIGlmIC9GREFycmF5IHdhcyBmb3VuZCwgdGhlbiBjaWQtPm51bV9kaWN0cyBpcyA+IDAsIGFuZCAqLwogICAgICAgICAgICAgLyogd2UgY2FuIHN0YXJ0IGluY3JlYXNpbmcgcGFyc2VyLT5udW1fZGljdCAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoIGZhY2UtPmNpZC5udW1fZGljdHMgPiAwICkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcGFyc2VyLT5udW1fZGljdCsrOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBGb250RGljdCAlZCIsIHBhcnNlci0+bnVtX2RpY3QgKSk7CisgICAgICAgICAgICAgIGlmICggcGFyc2VyLT5udW1fZGljdCA+IGZhY2UtPmNpZC5udW1fZGljdHMgKQorICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKGlnbm9yZWQpIiApKTsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03NTcsNyArODMwLDcgQEAKIAogICAgIGlmICggY2lkLT5mZF9ieXRlcyA8IDAgfHwgY2lkLT5nZF9ieXRlcyA8IDEgKQogICAgIHsKLSAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiIKKyAgICAgIEZUX0VSUk9SKCggImNpZF9mYWNlX29wZW46IgogICAgICAgICAgICAgICAgICAiIEludmFsaWQgYEZEQnl0ZXMnIG9yIGBHREJ5dGVzJyB2YWx1ZVxuIiApKTsKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgIGdvdG8gRXhpdDsKQEAgLTc2Niw3ICs4MzksNyBAQAogICAgIC8qIGFsbG93IGF0IG1vc3QgMzJiaXQgb2Zmc2V0cyAqLwogICAgIGlmICggY2lkLT5mZF9ieXRlcyA+IDQgfHwgY2lkLT5nZF9ieXRlcyA+IDQgKQogICAgIHsKLSAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiIKKyAgICAgIEZUX0VSUk9SKCggImNpZF9mYWNlX29wZW46IgogICAgICAgICAgICAgICAgICAiIFZhbHVlcyBvZiBgRkRCeXRlcycgb3IgYEdEQnl0ZXMnIGxhcmdlciB0aGFuIDRcbiIKICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgIiBhcmUgbm90IHN1cHBvcnRlZFxuIiApKTsKQEAgLTc4MiwxNyArODU1LDM2IEBACiAgICAgICBDSURfRmFjZURpY3QgIGRpY3QgPSBjaWQtPmZvbnRfZGljdHMgKyBuOwogCiAKKyAgICAgIC8qIHRoZSB1cHBlciBsaW1pdHMgYXJlIGFkLWhvYyB2YWx1ZXMgKi8KKyAgICAgIGlmICggZGljdC0+cHJpdmF0ZV9kaWN0LmJsdWVfc2hpZnQgPiAxMDAwIHx8CisgICAgICAgICAgIGRpY3QtPnByaXZhdGVfZGljdC5ibHVlX3NoaWZ0IDwgMCAgICApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJjaWRfZmFjZV9vcGVuOiIKKyAgICAgICAgICAgICAgICAgICAgIiBzZXR0aW5nIHVubGlrZWx5IEJsdWVTaGlmdCB2YWx1ZSAlZCB0byBkZWZhdWx0ICg3KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZGljdC0+cHJpdmF0ZV9kaWN0LmJsdWVfc2hpZnQgKSk7CisgICAgICAgIGRpY3QtPnByaXZhdGVfZGljdC5ibHVlX3NoaWZ0ID0gNzsKKyAgICAgIH0KKworICAgICAgaWYgKCBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6ID4gMTAwMCB8fAorICAgICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6IDwgMCAgICApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFMigoICJjaWRfZmFjZV9vcGVuOiIKKyAgICAgICAgICAgICAgICAgICAgIiBzZXR0aW5nIHVubGlrZWx5IEJsdWVGdXp6IHZhbHVlICVkIHRvIGRlZmF1bHQgKDEpXG4iLAorICAgICAgICAgICAgICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6ICkpOworICAgICAgICBkaWN0LT5wcml2YXRlX2RpY3QuYmx1ZV9mdXp6ID0gMTsKKyAgICAgIH0KKwogICAgICAgaWYgKCBkaWN0LT5zZF9ieXRlcyA8IDAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAoIGRpY3QtPm51bV9zdWJycyAmJiBkaWN0LT5zZF9ieXRlcyA8IDEgKSApCiAgICAgICB7Ci0gICAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiBJbnZhbGlkIGBTREJ5dGVzJyB2YWx1ZVxuIiApKTsKKyAgICAgICAgRlRfRVJST1IoKCAiY2lkX2ZhY2Vfb3BlbjogSW52YWxpZCBgU0RCeXRlcycgdmFsdWVcbiIgKSk7CiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCiAgICAgICBpZiAoIGRpY3QtPnNkX2J5dGVzID4gNCApCiAgICAgICB7Ci0gICAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiIKKyAgICAgICAgRlRfRVJST1IoKCAiY2lkX2ZhY2Vfb3BlbjoiCiAgICAgICAgICAgICAgICAgICAgIiBWYWx1ZXMgb2YgYFNEQnl0ZXMnIGxhcmdlciB0aGFuIDQiCiAgICAgICAgICAgICAgICAgICAgIiBhcmUgbm90IHN1cHBvcnRlZFxuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwpAQCAtODAxLDcgKzg5Myw3IEBACiAKICAgICAgIGlmICggZGljdC0+c3Vicm1hcF9vZmZzZXQgPiBiaW5hcnlfbGVuZ3RoICkKICAgICAgIHsKLSAgICAgICAgRlRfRVJST1IoKCAiY2lkX3BhcnNlX2RpY3Q6IEludmFsaWQgYFN1YnJNYXBPZmZzZXQnIHZhbHVlXG4iICkpOworICAgICAgICBGVF9FUlJPUigoICJjaWRfZmFjZV9vcGVuOiBJbnZhbGlkIGBTdWJyTWFwT2Zmc2V0JyB2YWx1ZVxuIiApKTsKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CkBAIC04MTIsNyArOTA0LDcgQEAKICAgICAgICAgICAgICBkaWN0LT5udW1fc3VicnMgPiAoIGJpbmFyeV9sZW5ndGggLSBkaWN0LT5zdWJybWFwX29mZnNldCApIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWRpY3QtPnNkX2J5dGVzICAgICAgICAgICAgICAgICApICkKICAgICAgIHsKLSAgICAgICAgRlRfRVJST1IoKCAiY2lkX3BhcnNlX2RpY3Q6IEludmFsaWQgYFN1YnJDb3VudCcgdmFsdWVcbiIgKSk7CisgICAgICAgIEZUX0VSUk9SKCggImNpZF9mYWNlX29wZW46IEludmFsaWQgYFN1YnJDb3VudCcgdmFsdWVcbiIgKSk7CiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQpAQCAtODIwLDcgKzkxMiw3IEBACiAKICAgICBpZiAoIGNpZC0+Y2lkbWFwX29mZnNldCA+IGJpbmFyeV9sZW5ndGggKQogICAgIHsKLSAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiBJbnZhbGlkIGBDSURNYXBPZmZzZXQnIHZhbHVlXG4iICkpOworICAgICAgRlRfRVJST1IoKCAiY2lkX2ZhY2Vfb3BlbjogSW52YWxpZCBgQ0lETWFwT2Zmc2V0JyB2YWx1ZVxuIiApKTsKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CkBAIC04MjksNyArOTIxLDcgQEAKICAgICAgICAgIGNpZC0+Y2lkX2NvdW50ID4KICAgICAgICAgICAgKCBiaW5hcnlfbGVuZ3RoIC0gY2lkLT5jaWRtYXBfb2Zmc2V0ICkgLyBlbnRyeV9sZW4gKQogICAgIHsKLSAgICAgIEZUX0VSUk9SKCggImNpZF9wYXJzZV9kaWN0OiBJbnZhbGlkIGBDSURDb3VudCcgdmFsdWVcbiIgKSk7CisgICAgICBGVF9FUlJPUigoICJjaWRfZmFjZV9vcGVuOiBJbnZhbGlkIGBDSURDb3VudCcgdmFsdWVcbiIgKSk7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRsb2FkLmggYi9zcmMvY2lkL2NpZGxvYWQuaAppbmRleCAzZjhiZDA4Li5hM2U2ZTI4IDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGxvYWQuaAorKysgYi9zcmMvY2lkL2NpZGxvYWQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2lkbG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENJRC1rZXllZCBUeXBlMSBmb250IGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2lkbG9hZC5oCisgKgorICogICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIENJRExPQURfSF8KZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkb2Jqcy5jIGIvc3JjL2NpZC9jaWRvYmpzLmMKaW5kZXggNzdhZmUxYy4uOTFjNGVkOSAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRvYmpzLmMKKysrIGIvc3JjL2NpZC9jaWRvYmpzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNpZG9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDSUQgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNpZG9ianMuYworICoKKyAqICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzEsMjEgKzMxLDIxIEBACiAjaW5jbHVkZSAiY2lkZXJycy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NpZG9ianMKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xPVCAgRlVOQ1RJT05TCisgICAqCisgICAqLwogCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNpZF9zbG90X2RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCkBAIC04NSwxMSArODUsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUgIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogCiAgIHN0YXRpYyBQU0hfR2xvYmFsc19GdW5jcwpAQCAtMTc0LDIzICsxNzQsMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBQ0UgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEZBQ0UgIEZVTkNUSU9OUworICAgKgorICAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaWRfZmFjZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaW5hbGl6ZXMgYSBnaXZlbiBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgcG9pbnRlciB0byB0aGUgZmFjZSBvYmplY3QgdG8gZGVzdHJveS4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2lkX2ZhY2VfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemVzIGEgZ2l2ZW4gZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGZhY2Ugb2JqZWN0IHRvIGRlc3Ryb3kuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBjaWRfZmFjZV9kb25lKCBGVF9GYWNlICBjaWRmYWNlICkgICAgICAgICAvKiBDSURfRmFjZSAqLwogICB7CkBAIC0yNTIsMjkgKzI1MywzNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaWRfZmFjZV9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIENJRCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gICAgIDo6IFRoZSBzb3VyY2UgZm9udCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmb250IGZhY2UgaW4gdGhlIHJlc291cmNlLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3BhcmFtcyA6OiBOdW1iZXIgb2YgYWRkaXRpb25hbCBnZW5lcmljIHBhcmFtZXRlcnMuICBJZ25vcmVkLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwYXJhbXMgICAgIDo6IEFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgIDo6IFRoZSBuZXdseSBidWlsdCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2lkX2ZhY2VfaW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBDSUQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBzb3VyY2UgZm9udCBzdHJlYW0uCisgICAqCisgICAqICAgZmFjZV9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBmb250IGZhY2UgaW4gdGhlIHJlc291cmNlLgorICAgKgorICAgKiAgIG51bV9wYXJhbXMgOjoKKyAgICogICAgIE51bWJlciBvZiBhZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqICAgcGFyYW1zIDo6CisgICAqICAgICBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgbmV3bHkgYnVpbHQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBjaWRfZmFjZV9pbml0KCBGVF9TdHJlYW0gICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIGNpZGZhY2UsICAgICAgICAvKiBDSURfRmFjZSAqLwpAQCAtNDQ5LDIwICs0NTUsMjEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2lkX2RyaXZlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBDSUQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZHJpdmVyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGNpZF9kcml2ZXJfaW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBDSUQgZHJpdmVyIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRyaXZlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgY2lkX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApCiAgIHsKQEAgLTUwNSwxNyArNTEyLDE4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNpZF9kcml2ZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIENJRCBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRyaXZlciA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IENJRCBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBjaWRfZHJpdmVyX2RvbmUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEZpbmFsaXplcyBhIGdpdmVuIENJRCBkcml2ZXIuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkcml2ZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgQ0lEIGRyaXZlci4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNpZF9kcml2ZXJfZG9uZSggRlRfTW9kdWxlICBkcml2ZXIgKQogICB7CmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZG9ianMuaCBiL3NyYy9jaWQvY2lkb2Jqcy5oCmluZGV4IDAyMjFmMDEuLjMzYTJlN2EgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkb2Jqcy5oCisrKyBiL3NyYy9jaWQvY2lkb2Jqcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjaWRvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjaWRvYmpzLmgKKyAqCisgKiAgIENJRCBvYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIENJRE9CSlNfSF8KQEAgLTM0LDYwICszNCw2MCBAQAogICB0eXBlZGVmIHN0cnVjdCBDSURfR2x5cGhfSGludHNfICBDSURfR2x5cGhfSGludHM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDSURfRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAVHlwZToKKyAgICogICBDSURfRHJpdmVyCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIFR5cGUgMSBkcml2ZXIgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX0RyaXZlclJlY18qICBDSURfRHJpdmVyOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0lEX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBUeXBlIDEgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgQ0lEX1NpemUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIHNpemUgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgQ0lEX1NpemVSZWNfKiAgQ0lEX1NpemU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDSURfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBnbHlwaCBzbG90IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAVHlwZToKKyAgICogICBDSURfR2x5cGhTbG90CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIFR5cGUgMSBnbHlwaCBzbG90IG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IENJRF9HbHlwaFNsb3RSZWNfKiAgQ0lEX0dseXBoU2xvdDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9DaGFyTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGNoYXJhY3RlciBtYXBwaW5nIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBUeXBlIDEgZm9ybWF0IGRvZXNuJ3QgdXNlIGEgY2hhcm1hcCBidXQgYW4gZW5jb2RpbmcgdGFibGUuICAgICAqLwotICAvKiAgICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdXAgY2hhcm1hcCBvYmplY3RzICAgICAgICAgICAgKi8KLSAgLyogICAgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgQ0lEX0NoYXJNYXAKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGNoYXJhY3RlciBtYXBwaW5nIG9iamVjdC4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgVGhlIFR5cGUgMSBmb3JtYXQgZG9lc24ndCB1c2UgYSBjaGFybWFwIGJ1dCBhbiBlbmNvZGluZyB0YWJsZS4KKyAgICogICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdXAgY2hhcm1hcCBvYmplY3RzCisgICAqICAgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0YWJsZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBDSURfQ2hhck1hcFJlY18qICBDSURfQ2hhck1hcDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSEVSRSBCRUdJTlMgVEhFIFRZUEUgMSBTUEVDSUZJQyBTVFVGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEhFUkUgQkVHSU5TIFRIRSBUWVBFIDEgU1BFQ0lGSUMgU1RVRkYKKyAgICoKKyAgICovCiAKIAogICB0eXBlZGVmIHN0cnVjdCAgQ0lEX1NpemVSZWNfCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHBhcnNlLmMgYi9zcmMvY2lkL2NpZHBhcnNlLmMKaW5kZXggYjFjN2YzYy4uODYxYzE1NyAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRwYXJzZS5jCisrKyBiL3NyYy9jaWQvY2lkcGFyc2UuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2lkcGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIENJRC1rZXllZCBUeXBlMSBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2lkcGFyc2UuYworICoKKyAqICAgQ0lELWtleWVkIFR5cGUxIHBhcnNlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiY2lkZXJycy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NpZHBhcnNlCiAKZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkcGFyc2UuaCBiL3NyYy9jaWQvY2lkcGFyc2UuaAppbmRleCA2MTYwMmY3Li4wMjljNmFlIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZHBhcnNlLmgKKysrIGIvc3JjL2NpZC9jaWRwYXJzZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjaWRwYXJzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ0lELWtleWVkIFR5cGUxIHBhcnNlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjaWRwYXJzZS5oCisgKgorICogICBDSUQta2V5ZWQgVHlwZTEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBDSURQQVJTRV9IXwpAQCAtMjksMzUgKzI5LDQzIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENJRF9QYXJzZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgQ0lEX1BhcnNlciBpcyBhbiBvYmplY3QgdXNlZCB0byBwYXJzZSBhIFR5cGUgMSBmb250cyB2ZXJ5ICAgICAgICAqLwotICAvKiAgICBxdWlja2x5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByb290ICAgICAgICAgICA6OiBUaGUgcm9vdCBQU19QYXJzZXJSZWMgZmllbGRzLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICAgICAgIDo6IFRoZSBjdXJyZW50IGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9zdHNjcmlwdCAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb3N0c2NyaXB0X2xlbiA6OiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRhdGFfb2Zmc2V0ICAgIDo6IFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgYmluYXJ5IGRhdGEgKGkuZS4sIHRoZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBlbmQgb2YgdGhlIGRhdGEgdG8gYmUgcGFyc2VkLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJpbmFyeV9sZW5ndGggIDo6IFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYWZ0ZXIgdGhlIGBTdGFydERhdGEnICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGlmIHRoZSBkYXRhIGZvcm1hdCBpcyBoZXhhZGVjaW1hbC4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNpZCAgICAgICAgICAgIDo6IEEgc3RydWN0dXJlIHdoaWNoIGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9kaWN0ICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZm9udCBkaWN0aW9uYXJpZXMuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBTdHJ1Y3Q6CisgICAqICAgQ0lEX1BhcnNlcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQSBDSURfUGFyc2VyIGlzIGFuIG9iamVjdCB1c2VkIHRvIHBhcnNlIGEgVHlwZSAxIGZvbnRzIHZlcnkKKyAgICogICBxdWlja2x5LgorICAgKgorICAgKiBARmllbGRzOgorICAgKiAgIHJvb3QgOjoKKyAgICogICAgIFRoZSByb290IFBTX1BhcnNlclJlYyBmaWVsZHMuCisgICAqCisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgY3VycmVudCBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICAgcG9zdHNjcmlwdCA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4KKyAgICoKKyAgICogICBwb3N0c2NyaXB0X2xlbiA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBwYXJzZWQuCisgICAqCisgICAqICAgZGF0YV9vZmZzZXQgOjoKKyAgICogICAgIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgYmluYXJ5IGRhdGEgKGkuZS4sIHRoZQorICAgKiAgICAgZW5kIG9mIHRoZSBkYXRhIHRvIGJlIHBhcnNlZC4KKyAgICoKKyAgICogICBiaW5hcnlfbGVuZ3RoIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFmdGVyIHRoZSBgU3RhcnREYXRhJworICAgKiAgICAgY29tbWFuZCBpZiB0aGUgZGF0YSBmb3JtYXQgaXMgaGV4YWRlY2ltYWwuCisgICAqCisgICAqICAgY2lkIDo6CisgICAqICAgICBBIHN0cnVjdHVyZSB3aGljaCBob2xkcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQKKyAgICogICAgIHRoZSBjdXJyZW50IGZvbnQuCisgICAqCisgICAqICAgbnVtX2RpY3QgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgZm9udCBkaWN0aW9uYXJpZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgQ0lEX1BhcnNlcl8KICAgewogICAgIFBTX1BhcnNlclJlYyAgcm9vdDsKQEAgLTg2LDExICs5NCwxMSBAQAogICBjaWRfcGFyc2VyX2RvbmUoIENJRF9QYXJzZXIqICBwYXJzZXIgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0lORyBST1VUSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFSU0lORyBST1VUSU5FUworICAgKgorICAgKi8KIAogI2RlZmluZSBjaWRfcGFyc2VyX3NraXBfc3BhY2VzKCBwICkgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAocCktPnJvb3QuZnVuY3Muc2tpcF9zcGFjZXMoICYocCktPnJvb3QgKQpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRyaXZlci5jIGIvc3JjL2NpZC9jaWRyaXZlci5jCmluZGV4IGQ5ZmFmMzUuLjkzNWMxMTIgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkcml2ZXIuYworKysgYi9zcmMvY2lkL2NpZHJpdmVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNpZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDSUQgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNpZHJpdmVyLmMKKyAqCisgKiAgIENJRCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zNCwxOCArMzQsMTggQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jaWRkcml2ZXIKIAogCiAgIC8qCi0gICAqICBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQorICAgKiBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtNjksNyArNjksNyBAQAogCiAKICAgLyoKLSAgICogIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCisgICAqIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogCiAgIC8qCi0gICAqICBDSUQgSU5GTyBTRVJWSUNFCisgICAqIENJRCBJTkZPIFNFUlZJQ0UKICAgICoKICAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgpAQCAtMTczLDcgKzE3Myw3IEBACiAKIAogICAvKgotICAgKiAgUFJPUEVSVFkgU0VSVklDRQorICAgKiBQUk9QRVJUWSBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC0xODUsNyArMTg1LDcgQEAKIAogCiAgIC8qCi0gICAqICBTRVJWSUNFIExJU1QKKyAgICogU0VSVklDRSBMSVNUCiAgICAqCiAgICAqLwogCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHJpdmVyLmggYi9zcmMvY2lkL2NpZHJpdmVyLmgKaW5kZXggNTlkOWRlZC4uMjkzMzgwOCAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRyaXZlci5oCisrKyBiL3NyYy9jaWQvY2lkcml2ZXIuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2lkcml2ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhpZ2gtbGV2ZWwgQ0lEIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY2lkcml2ZXIuaAorICoKKyAqICAgSGlnaC1sZXZlbCBDSUQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQ0lEUklWRVJfSF8KQEAgLTI2LDE1ICsyNiw5IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAidGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgotI2VuZGlmCi0KLQogICBGVF9DQUxMQkFDS19UQUJMRQogICBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgIHQxY2lkX2RyaXZlcl9jbGFzczsKIAotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBDSURSSVZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWR0b2tlbi5oIGIvc3JjL2NpZC9jaWR0b2tlbi5oCmluZGV4IGIwZTJkYWMuLmQ5NTdlNWEgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkdG9rZW4uaAorKysgYi9zcmMvY2lkL2NpZHRva2VuLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNpZHRva2VuLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBDSUQgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNpZHRva2VuLmgKKyAqCisgKiAgIENJRCB0b2tlbiBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI3VuZGVmICBGVF9TVFJVQ1RVUkUKQEAgLTIxLDE3ICsyMSwyMCBAQAogI3VuZGVmICBUMUNPREUKICNkZWZpbmUgVDFDT0RFICAgICAgICBUMV9GSUVMRF9MT0NBVElPTl9DSURfSU5GTwogCi0gIFQxX0ZJRUxEX0tFWSAgICggIkNJREZvbnROYW1lIiwgICAgY2lkX2ZvbnRfbmFtZSwgMCApCi0gIFQxX0ZJRUxEX0ZJWEVEICggIkNJREZvbnRWZXJzaW9uIiwgY2lkX3ZlcnNpb24sICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIkNJREZvbnRUeXBlIiwgICAgY2lkX2ZvbnRfdHlwZSwgMCApCi0gIFQxX0ZJRUxEX1NUUklORyggIlJlZ2lzdHJ5IiwgICAgICAgcmVnaXN0cnksICAgICAgMCApCi0gIFQxX0ZJRUxEX1NUUklORyggIk9yZGVyaW5nIiwgICAgICAgb3JkZXJpbmcsICAgICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIlN1cHBsZW1lbnQiLCAgICAgc3VwcGxlbWVudCwgICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIlVJREJhc2UiLCAgICAgICAgdWlkX2Jhc2UsICAgICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIkNJRE1hcE9mZnNldCIsICAgY2lkbWFwX29mZnNldCwgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIkZEQnl0ZXMiLCAgICAgICAgZmRfYnl0ZXMsICAgICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIkdEQnl0ZXMiLCAgICAgICAgZ2RfYnl0ZXMsICAgICAgMCApCi0gIFQxX0ZJRUxEX05VTSAgICggIkNJRENvdW50IiwgICAgICAgY2lkX2NvdW50LCAgICAgMCApCisgIFQxX0ZJRUxEX0tFWSAgICAgICggIkNJREZvbnROYW1lIiwgICAgY2lkX2ZvbnRfbmFtZSwgMCApCisgIFQxX0ZJRUxEX0ZJWEVEICAgICggIkNJREZvbnRWZXJzaW9uIiwgY2lkX3ZlcnNpb24sICAgMCApCisgIFQxX0ZJRUxEX05VTSAgICAgICggIkNJREZvbnRUeXBlIiwgICAgY2lkX2ZvbnRfdHlwZSwgMCApCisgIFQxX0ZJRUxEX1NUUklORyAgICggIlJlZ2lzdHJ5IiwgICAgICAgcmVnaXN0cnksICAgICAgMCApCisgIFQxX0ZJRUxEX1NUUklORyAgICggIk9yZGVyaW5nIiwgICAgICAgb3JkZXJpbmcsICAgICAgMCApCisgIFQxX0ZJRUxEX05VTSAgICAgICggIlN1cHBsZW1lbnQiLCAgICAgc3VwcGxlbWVudCwgICAgMCApCisgIFQxX0ZJRUxEX05VTSAgICAgICggIlVJREJhc2UiLCAgICAgICAgdWlkX2Jhc2UsICAgICAgMCApCisKKyAgVDFfRklFTERfTlVNX1RBQkxFKCAiWFVJRCIsICAgICAgICAgICB4dWlkLCAgICAgICAgICAxNiwgMCApCisKKyAgVDFfRklFTERfTlVNICAgICAgKCAiQ0lETWFwT2Zmc2V0IiwgICBjaWRtYXBfb2Zmc2V0LCAwICkKKyAgVDFfRklFTERfTlVNICAgICAgKCAiRkRCeXRlcyIsICAgICAgICBmZF9ieXRlcywgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgICAgKCAiR0RCeXRlcyIsICAgICAgICBnZF9ieXRlcywgICAgICAwICkKKyAgVDFfRklFTERfTlVNICAgICAgKCAiQ0lEQ291bnQiLCAgICAgICBjaWRfY291bnQsICAgICAwICkKIAogCiAjdW5kZWYgIEZUX1NUUlVDVFVSRQpkaWZmIC0tZ2l0IGEvc3JjL2NpZC90eXBlMWNpZC5jIGIvc3JjL2NpZC90eXBlMWNpZC5jCmluZGV4IDYxNzcwZTMuLjAyZDk0MDAgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvdHlwZTFjaWQuYworKysgYi9zcmMvY2lkL3R5cGUxY2lkLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR5cGUxY2lkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBPcGVuVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR5cGUxY2lkLmMKKyAqCisgKiAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCmluZGV4IGQwNTc3YTIuLmY0OWU4YjcgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmFsaWQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZhbGlkLmMKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dmFsaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB2YWxpZGF0b3IgZm9yIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoYm9keSBvbmx5KS4gICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkLmMKKyAqCisgKiAgIEZyZWVUeXBlIHZhbGlkYXRvciBmb3IgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChib2R5IG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmFsaWQuaCBiL3NyYy9neHZhbGlkL2d4dmFsaWQuaAppbmRleCAxOWYwMzc5Li5jZjAyZmNiIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZhbGlkLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5oCkBAIC0xLDI4ICsxLDI4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZhbGlkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZC5oCisgKgorICogICBUcnVlVHlwZUdYL0FBVCB0YWJsZSB2YWxpZGF0aW9uIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpZm5kZWYgR1hWQUxJRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2YnNsbi5jIGIvc3JjL2d4dmFsaWQvZ3h2YnNsbi5jCmluZGV4IGMzNjdkMzguLjhiNTU0ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmJzbG4uYworKysgYi9zcmMvZ3h2YWxpZC9neHZic2xuLmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dmJzbG4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBic2xuIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZic2xuLmMKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIGJzbG4gdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dmFsaWQuaCIKICNpbmNsdWRlICJneHZjb21tbi5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmJzbG4KIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyBiL3NyYy9neHZhbGlkL2d4dmNvbW1uLmMKaW5kZXggYjk2NjAxMS4uNGQ4YTRhMiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYworKysgYi9zcmMvZ3h2YWxpZC9neHZjb21tbi5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZjb21tbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgY29tbW9uIHRhYmxlcyB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2Y29tbW4uYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgY29tbW9uIHRhYmxlcyB2YWxpZGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZjb21tb24KIApAQCAtMzg0LDggKzM4NCw4IEBACiAgICAgICAgICAgKCBQICs9IDIsIGd4dl9sb29rdXBfdmFsdWVfbG9hZCggUCAtIDIsIFNJR05TUEVDICkgKQogCiAgIHN0YXRpYyBHWFZfTG9va3VwVmFsdWVEZXNjCi0gIGd4dl9sb29rdXBfdmFsdWVfbG9hZCggRlRfQnl0ZXMgIHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIHNpZ25zcGVjICkKKyAgZ3h2X2xvb2t1cF92YWx1ZV9sb2FkKCBGVF9CeXRlcyAgICAgICAgICAgICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgR1hWX0xvb2t1cFZhbHVlX1NpZ25TcGVjICBzaWduc3BlYyApCiAgIHsKICAgICBHWFZfTG9va3VwVmFsdWVEZXNjICB2OwogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5oIGIvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaAppbmRleCA4ZTRmZjljLi45ODM0YzU3IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5oCisrKyBiL3NyYy9neHZhbGlkL2d4dmNvbW1uLmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dmNvbW1uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZjb21tbi5oCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICAgLyoKICAgICoga2V5d29yZHMgaW4gdmFyaWFibGUgbmFtaW5nCiAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgKiAgdGFibGU6IE9mIHR5cGUgRlRfQnl0ZXMsIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGlzIHRhYmxlL3N1YnRhYmxlLgotICAgKiAgbGltaXQ6IE9mIHR5cGUgRlRfQnl0ZXMsIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZS9zdWJ0YWJsZSwKKyAgICogdGFibGU6ICBPZiB0eXBlIEZUX0J5dGVzLCBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhpcyB0YWJsZS9zdWJ0YWJsZS4KKyAgICogbGltaXQ6ICBPZiB0eXBlIEZUX0J5dGVzLCBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoaXMgdGFibGUvc3VidGFibGUsCiAgICAqICAgICAgICAgaW5jbHVkaW5nIHBhZGRpbmcgZm9yIGFsaWdubWVudC4KLSAgICogIG9mZnNldDogT2YgdHlwZSBGVF9VSW50LCB0aGUgbnVtYmVyIG9mIG9jdGV0cyBmcm9tIHRoZSBzdGFydCB0byB0YXJnZXQuCi0gICAqICBsZW5ndGg6IE9mIHR5cGUgRlRfVUludCwgdGhlIG51bWJlciBvZiBvY3RldHMgZnJvbSB0aGUgc3RhcnQgdG8gdGhlCi0gICAqICAgICAgICAgIGVuZCBpbiB0aGlzIHRhYmxlL3N1YnRhYmxlLCBpbmNsdWRpbmcgcGFkZGluZyBmb3IgYWxpZ25tZW50LgorICAgKiBvZmZzZXQ6IE9mIHR5cGUgRlRfVUludCwgdGhlIG51bWJlciBvZiBvY3RldHMgZnJvbSB0aGUgc3RhcnQgdG8gdGFyZ2V0LgorICAgKiBsZW5ndGg6IE9mIHR5cGUgRlRfVUludCwgdGhlIG51bWJlciBvZiBvY3RldHMgZnJvbSB0aGUgc3RhcnQgdG8gdGhlCisgICAqICAgICAgICAgZW5kIGluIHRoaXMgdGFibGUvc3VidGFibGUsIGluY2x1ZGluZyBwYWRkaW5nIGZvciBhbGlnbm1lbnQuCiAgICAqCiAgICAqICBfTUlOLCBfTUFYOiBTaG91bGQgYmUgYWRkZWQgdG8gdGhlIHRhaWwgb2YgbWFjcm9zLCBhcyBJTlRfTUlOLCBldGMuCiAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2ZXJyb3IuaCBiL3NyYy9neHZhbGlkL2d4dmVycm9yLmgKaW5kZXggZDExNTEyNS4uZTM2YjA3NiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2ZXJyb3IuaAorKysgYi9zcmMvZ3h2YWxpZC9neHZlcnJvci5oCkBAIC0xLDM2ICsxLDM2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2ZXJyb3IuaAorICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgZXJyb3IgICAgICAqLwotICAvKiBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvcgorICAgKiBlbnVtZXJhdGlvbiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIEdYVkVSUk9SX0hfCiAjZGVmaW5lIEdYVkVSUk9SX0hfCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZmZWF0LmMgYi9zcmMvZ3h2YWxpZC9neHZmZWF0LmMKaW5kZXggMmM4MDVkMS4uOTE1MDBiZCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmZlYXQuYwpAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2ZmVhdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmZlYXQuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgZmVhdCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiZ3h2YWxpZC5oIgpAQCAtMzAsMTIgKzMwLDEyIEBACiAjaW5jbHVkZSAiZ3h2ZmVhdC5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmZlYXQKIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oIGIvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oCmluZGV4IDJkOTQzODAuLjcxNTc5MWQgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmZlYXQuaAorKysgYi9zcmMvZ3h2YWxpZC9neHZmZWF0LmgKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dmZlYXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBmZWF0IHRhYmxlIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZmZWF0LmgKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2lmbmRlZiBHWFZGRUFUX0hfCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZmZ2VuLmMgYi9zcmMvZ3h2YWxpZC9neHZmZ2VuLmMKaW5kZXggODQwYzBmMy4uYzk1YWViZCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2Zmdlbi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmZnZW4uYwpAQCAtMSw2MiArMSw2MiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3hmZ2VuLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEdlbmVyYXRlIGZlYXR1cmUgcmVnaXN0cnkgZGF0YSBmb3IgZ3h2IGBmZWF0JyB2YWxpZGF0b3IuICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHByb2dyYW0gaXMgZGVyaXZlZCBmcm9tIGd4ZmVhdHJlZy5jIGluIGd4bGF5b3V0LiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWRoYXQgSy5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4Zmdlbi5jCisgKgorICogICBHZW5lcmF0ZSBmZWF0dXJlIHJlZ2lzdHJ5IGRhdGEgZm9yIGd4diBgZmVhdCcgdmFsaWRhdG9yLgorICogICBUaGlzIHByb2dyYW0gaXMgZGVyaXZlZCBmcm9tIGd4ZmVhdHJlZy5jIGluIGd4bGF5b3V0LgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneGZlYXRyZWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRGF0YWJhc2Ugb2YgZm9udCBmZWF0dXJlcyBwcmUtZGVmaW5lZCBieSBBcHBsZSBDb21wdXRlciwgSW5jLiAgICAgICAgKi8KLS8qICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDkvQXBwZW5kaXhGLmh0bWwgKi8KLS8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBtYXkgb25seSBiZSB1c2VkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3hmZWF0cmVnLmMKKyAqCisgKiAgIERhdGFiYXNlIG9mIGZvbnQgZmVhdHVyZXMgcHJlLWRlZmluZWQgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wOS9BcHBlbmRpeEYuaHRtbAorICogICAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDMgYnkKKyAqIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4ZmVhdHJlZy5jIGlzIHN1cHBvcnRlZCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERldmVsb3BtZW50IG9mIGd4ZmVhdHJlZy5jIGlzIHN1cHBvcnRlZCBieQorICogSW5mb3JtYXRpb24tdGVjaG5vbG9neSBQcm9tb3Rpb24gQWdlbmN5LCBKYXBhbi4KKyAqCisgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgZmlsZSBpcyBjb21waWxlZCBhcyBhIHN0YW5kLWFsb25lIGV4ZWN1dGFibGUuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIGZpbGUgaXMgbmV2ZXIgY29tcGlsZWQgaW50byBgbGliZnJlZXR5cGUyJy4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhlIG91dHB1dCBvZiB0aGlzIGZpbGUgaXMgdXNlZCBpbiBgZ3h2ZmVhdC5jJy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBDb21waWxlOiBnY2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgZnJlZXR5cGUyYCBneHZmZ2VuLmMgLW8gZ3h2ZmdlbiAgICAgICAqLwotLyogUnVuOiAuL2d4dmZnZW4gPiB0bXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgY29tcGlsZWQgYXMgYSBzdGFuZC1hbG9uZSBleGVjdXRhYmxlLgorICogVGhpcyBmaWxlIGlzIG5ldmVyIGNvbXBpbGVkIGludG8gYGxpYmZyZWV0eXBlMicuCisgKiBUaGUgb3V0cHV0IG9mIHRoaXMgZmlsZSBpcyB1c2VkIGluIGBneHZmZWF0LmMnLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXBpbGU6IGdjYyBgcGtnLWNvbmZpZyAtLWNmbGFncyBmcmVldHlwZTJgIGd4dmZnZW4uYyAtbyBneHZmZ2VuCisgKiBSdW46IC4vZ3h2ZmdlbiA+IHRtcC5jCisgKgorICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORworICAgKi8KIAogICAvKgogICAgKiBJZiB5b3UgYWRkIGEgbmV3IHNldHRpbmcgdG8gYSBmZWF0dXJlLCBjaGVjayB0aGUgbnVtYmVyIG9mIHNldHRpbmdzCkBAIC02NSw5ICs2NSw5IEBACiAgICAqLwogI2RlZmluZSBGRUFUUkVHX01BWF9TRVRUSU5HICAxMgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcKKyAgICovCiAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZqdXN0LmMgYi9zcmMvZ3h2YWxpZC9neHZqdXN0LmMKaW5kZXggMDBjNDI5My4uYzhhOWFiNiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2anVzdC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmp1c3QuYwpAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2anVzdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIGp1c3QgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmp1c3QuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQganVzdCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiZ3h2YWxpZC5oIgpAQCAtMzEsMTIgKzMxLDEyIEBACiAjaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZqdXN0CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmtlcm4uYyBiL3NyYy9neHZhbGlkL2d4dmtlcm4uYwppbmRleCA5YzBlZmQ3Li5kZjlmMTBlIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZrZXJuLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2a2Vybi5jCkBAIC0xLDI4ICsxLDI4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZrZXJuLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQga2VybiB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2a2Vybi5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBrZXJuIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZhbGlkLmgiCkBAIC0zMiwxMiArMzIsMTIgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmtlcm4KIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bGNhci5jIGIvc3JjL2d4dmFsaWQvZ3h2bGNhci5jCmluZGV4IDBmMjYxYTkuLmZkMTY3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmxjYXIuYworKysgYi9zcmMvZ3h2YWxpZC9neHZsY2FyLmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dmxjYXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBsY2FyIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZsY2FyLmMKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIGxjYXIgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dmFsaWQuaCIKICNpbmNsdWRlICJneHZjb21tbi5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dmxjYXIKIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmMgYi9zcmMvZ3h2YWxpZC9neHZtb2QuYwppbmRleCAxYTNjODYyLi44NDdlMGYxIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb2QuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb2QuYwpAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2bW9kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlJ3MgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dm1vZC5jCisgKgorICogICBGcmVlVHlwZSdzIFRydWVUeXBlR1gvQUFUIHZhbGlkYXRpb24gbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM3LDEyICszNywxMiBAQAogI2luY2x1ZGUgImd4dmNvbW1uLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9kdWxlCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vZC5oIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKaW5kZXggNzQ1YzYyZS4uZjZhMjUwMiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKQEAgLTEsMjkgKzEsMjkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSdzIFRydWVUeXBlR1gvQUFUIHZhbGlkYXRpb24gbW9kdWxlIGltcGxlbWVudGF0aW9uICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9kLmgKKyAqCisgKiAgIEZyZWVUeXBlJ3MgVHJ1ZVR5cGVHWC9BQVQgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24KKyAqICAgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpZm5kZWYgR1hWTU9EX0hfCkBAIC0zNSwxMCArMzUsNiBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0jZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCiAKICAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfTW9kdWxlX0NsYXNzICkgIGd4dl9tb2R1bGVfY2xhc3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQuYwppbmRleCBiMzYxY2IyLi4xZGZhNWEzIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydC5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZtb3J0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9ydC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J0LmgiCiAjaW5jbHVkZSAiZ3h2ZmVhdC5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vcnQKIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oCmluZGV4IGQ4MDMwNjQuLmMyZGM2NTcgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcnQuaAorKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J0LmgKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gZGVmaW5pdGlvbiBmb3IgbW9ydCB0YWJsZSAoc3BlY2lmaWNhdGlvbikuICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZtb3J0LmgKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiBkZWZpbml0aW9uIGZvciBtb3J0IHRhYmxlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEdYVk1PUlRfSF8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQwLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J0MC5jCmluZGV4IDk1Y2Y1M2QuLmM3OTAxY2IgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcnQwLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYwpAQCAtMSw0MCArMSw0MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2bW9ydDAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBib2R5IGZvciB0eXBlMCAoSW5kaWMgU2NyaXB0IFJlYXJyYW5nZW1lbnQpIHN1YnRhYmxlLiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZtb3J0MC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24KKyAqICAgYm9keSBmb3IgdHlwZTAgKEluZGljIFNjcmlwdCBSZWFycmFuZ2VtZW50KSBzdWJ0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sCisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4KKyAqIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neQorICogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAiZ3h2bW9ydC5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2d4dm1vcnQKIApkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQxLmMKaW5kZXggYTc2ODNhMS4uZjJmNGY1NyAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J0MS5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZtb3J0MS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGJvZHkgZm9yIHR5cGUxIChDb250ZXh0dWFsIFN1YnN0aXR1dGlvbikgc3VidGFibGUuICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dm1vcnQxLmMKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbgorICogICBib2R5IGZvciB0eXBlMSAoQ29udGV4dHVhbCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J0LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0Mi5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYwppbmRleCBjMjNjMjc3Li4zM2ZlYTBmIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0Mi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQyLmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcnQyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYm9keSBmb3IgdHlwZTIgKExpZ2F0dXJlIFN1YnN0aXR1dGlvbikgc3VidGFibGUuICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9ydDIuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uCisgKiAgIGJvZHkgZm9yIHR5cGUyIChMaWdhdHVyZSBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J0LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYwppbmRleCA5ZDIxYTVmLi42Y2YxZTgwIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ0LmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcnQ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYm9keSBmb3IgdHlwZTQgKE5vbi1Db250ZXh0dWFsIEdseXBoIFN1YnN0aXR1dGlvbikgc3VidGFibGUuICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9ydDQuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uCisgKiAgIGJvZHkgZm9yIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J0LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9ydAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYwppbmRleCA0MmNiNDI4Li5hZTk0ZTIyIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ1LmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcnQ1LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYm9keSBmb3IgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9ydDUuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uCisgKiAgIGJvZHkgZm9yIHR5cGU1IChDb250ZXh0dWFsIEdseXBoIEluc2VydGlvbikgc3VidGFibGUuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dm1vcnQuaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J0CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnguYyBiL3NyYy9neHZhbGlkL2d4dm1vcnguYwppbmRleCA5ZmQ2ZTZiLi5mMDJmZjU0IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeC5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZtb3J4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9yeC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J4LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9yeAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmggYi9zcmMvZ3h2YWxpZC9neHZtb3J4LmgKaW5kZXggNmQ5OTI1ZS4uMWRlZDYyMyAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnguaApAQCAtMSwyOCArMSwyOCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2bW9yeC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiBkZWZpbml0aW9uIGZvciBtb3J4IHRhYmxlIChzcGVjaWZpY2F0aW9uKS4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dm1vcnguaAorICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgY29tbW9uIGRlZmluaXRpb24gZm9yIG1vcnggdGFibGUgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpZm5kZWYgR1hWTU9SWF9IXwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYyBiL3NyYy9neHZhbGlkL2d4dm1vcngwLmMKaW5kZXggMzAyMjYxYi4uZDY1Y2VkNSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J4MC5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZtb3J4MC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGJvZHkgZm9yIHR5cGUwIChJbmRpYyBTY3JpcHQgUmVhcnJhbmdlbWVudCkgc3VidGFibGUuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGd4dm1vcngwLmMKKyAqCisgKiAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbgorICogICBib2R5IGZvciB0eXBlMCAoSW5kaWMgU2NyaXB0IFJlYXJyYW5nZW1lbnQpIHN1YnRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J4LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9yeAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYwppbmRleCA4OTBjYTc0Li4xYzhkYTFiIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcngxLmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcngxLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYm9keSBmb3IgdHlwZTEgKENvbnRleHR1YWwgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9yeDEuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uCisgKiAgIGJvZHkgZm9yIHR5cGUxIChDb250ZXh0dWFsIFN1YnN0aXR1dGlvbikgc3VidGFibGUuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dm1vcnguaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcngyLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J4Mi5jCmluZGV4IDMxMzUwMzEuLmQyMGZjNTcgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcngyLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYwpAQCAtMSw0MCArMSw0MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2bW9yeDIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBib2R5IGZvciB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZtb3J4Mi5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24KKyAqICAgYm9keSBmb3IgdHlwZTIgKExpZ2F0dXJlIFN1YnN0aXR1dGlvbikgc3VidGFibGUuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dm1vcnguaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcng0LmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J4NC5jCmluZGV4IDFlMjM5N2IuLmZjZTIxOWMgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcng0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDQuYwpAQCAtMSw0MCArMSw0MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZ3h2bW9yeDQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBib2R5IGZvciAibW9yeCIgdHlwZTQgKE5vbi1Db250ZXh0dWFsIEdseXBoIFN1YnN0aXR1dGlvbikgc3VidGFibGUuICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZtb3J4NC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24KKyAqICAgYm9keSBmb3IgIm1vcngiIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZtb3J4LmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfZ3h2bW9yeAogCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYwppbmRleCBkYjRmOTI5Li44ODI2OTU0IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcng1LmMKQEAgLTEsNDAgKzEsNDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGd4dm1vcng1LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgYm9keSBmb3IgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2bW9yeDUuYworICoKKyAqICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uCisgKiAgIGJvZHkgZm9yIHR5cGU1IChDb250ZXh0dWFsIEdseXBoIEluc2VydGlvbikgc3VidGFibGUuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIGd4dmFsaWQgaXMgZGVyaXZlZCBmcm9tIGJvdGggZ3hsYXlvdXQgbW9kdWxlIGFuZCBvdHZhbGlkIG1vZHVsZS4gICAgICAgICovCi0vKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgICAgICAqLwotLyogUHJvbW90aW9uIEFnZW5jeShJUEEpLCBKYXBhbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuCisgKiBEZXZlbG9wbWVudCBvZiBneGxheW91dCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kKKyAqIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uCisgKgorICovCiAKIAogI2luY2x1ZGUgImd4dm1vcnguaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZtb3J4CiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm9wYmQuYyBiL3NyYy9neHZhbGlkL2d4dm9wYmQuYwppbmRleCBlMmMxNjdlLi43NmI2OTYxIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZvcGJkLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2b3BiZC5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZvcGJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgb3BiZCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2b3BiZC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBvcGJkIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZhbGlkLmgiCiAjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZvcGJkCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dnByb3AuYyBiL3NyYy9neHZhbGlkL2d4dnByb3AuYwppbmRleCBhNjdiNmJkLi44NTZkZDEwIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZwcm9wLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2cHJvcC5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZwcm9wLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgcHJvcCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2cHJvcC5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCBwcm9wIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZhbGlkLmgiCiAjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZwcm9wCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dnRyYWsuYyBiL3NyYy9neHZhbGlkL2d4dnRyYWsuYwppbmRleCBkNTAxYjUwLi5kMmNlYjY2IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZ0cmFrLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2dHJhay5jCkBAIC0xLDQwICsxLDQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBneHZ0cmFrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGVHWC9BQVQgdHJhayB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2dHJhay5jCisgKgorICogICBUcnVlVHlwZUdYL0FBVCB0cmFrIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBneHZhbGlkIGlzIGRlcml2ZWQgZnJvbSBib3RoIGd4bGF5b3V0IG1vZHVsZSBhbmQgb3R2YWxpZCBtb2R1bGUuICAgICAgICAqLwotLyogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5ICAgICAgKi8KLS8qIFByb21vdGlvbiBBZ2VuY3koSVBBKSwgSmFwYW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLgorICogRGV2ZWxvcG1lbnQgb2YgZ3hsYXlvdXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJbmZvcm1hdGlvbi10ZWNobm9sb2d5CisgKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLgorICoKKyAqLwogCiAKICNpbmNsdWRlICJneHZhbGlkLmgiCiAjaW5jbHVkZSAiZ3h2Y29tbW4uaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9neHZ0cmFrCiAKZGlmZiAtLWdpdCBhL3NyYy9nemlwL2Z0Z3ppcC5jIGIvc3JjL2d6aXAvZnRnemlwLmMKaW5kZXggZjgwMTFjMi4uOTFiMzQzYiAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvZnRnemlwLmMKKysrIGIvc3JjL2d6aXAvZnRnemlwLmMKQEAgLTEsMjMgKzEsMjMgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Z3ppcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzdXBwb3J0IGZvciAuZ3ogY29tcHJlc3NlZCBmaWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIG9wdGlvbmFsIGNvbXBvbmVudCByZWxpZXMgb24gemxpYi4gIEl0IHNob3VsZCBtYWlubHkgYmUgdXNlZCB0byAgICovCi0vKiAgcGFyc2UgY29tcHJlc3NlZCBQQ0YgZm9udHMsIGFzIGZvdW5kIHdpdGggbWFueSBYMTEgc2VydmVyICAgICAgICAgICAgICAqLwotLyogIGRpc3RyaWJ1dGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGd6aXAuYworICoKKyAqICAgRnJlZVR5cGUgc3VwcG9ydCBmb3IgLmd6IGNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIHpsaWIuICBJdCBzaG91bGQgbWFpbmx5IGJlIHVzZWQgdG8KKyAqIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlcgorICogZGlzdHJpYnV0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MSwxMCArNDEsNiBAQAogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfWkxJQgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAiZ3ppcCBjb2RlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQgogCiAjaW5jbHVkZSA8emxpYi5oPgpAQCAtNjM3LDggKzYzMyw4IEBACiAgICAgbWVtb3J5ID0gc291cmNlLT5tZW1vcnk7CiAKICAgICAvKgotICAgICAqICBjaGVjayB0aGUgaGVhZGVyIHJpZ2h0IG5vdzsgdGhpcyBwcmV2ZW50cyBhbGxvY2F0aW5nIHVuLW5lY2Vzc2FyeQotICAgICAqICBvYmplY3RzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtCisgICAgICogY2hlY2sgdGhlIGhlYWRlciByaWdodCBub3c7IHRoaXMgcHJldmVudHMgYWxsb2NhdGluZyB1bi1uZWNlc3NhcnkKKyAgICAgKiBvYmplY3RzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtCiAgICAgICovCiAgICAgZXJyb3IgPSBmdF9nemlwX2NoZWNrX2hlYWRlciggc291cmNlICk7CiAgICAgaWYgKCBlcnJvciApCkBAIC02NjAsMTIgKzY1NiwxMiBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrIHRvIHRyeSB0byBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUKLSAgICAgKiAgcGVyZm9ybWFuY2Ugd2hpbGUgZGVhbGluZyB3aXRoIHNtYWxsIGZpbGVzLiAgSWYgdGhlIG9yaWdpbmFsIHN0cmVhbQotICAgICAqICBzaXplIGlzIGxlc3MgdGhhbiBhIGNlcnRhaW4gdGhyZXNob2xkLCB3ZSB0cnkgdG8gbG9hZCB0aGUgd2hvbGUgZm9udAotICAgICAqICBmaWxlIGludG8gbWVtb3J5LiAgVGhpcyBzYXZlcyB1cyBmcm9tIHVzaW5nIHRoZSAzMktCIGJ1ZmZlciBuZWVkZWQKLSAgICAgKiAgdG8gaW5mbGF0ZSB0aGUgZmlsZSwgcGx1cyB0aGUgdHdvIDRLQiBpbnRlcm1lZGlhdGUgaW5wdXQvb3V0cHV0Ci0gICAgICogIGJ1ZmZlcnMgdXNlZCBpbiB0aGUgYEZUX0daaXBGaWxlJyBzdHJ1Y3R1cmUuCisgICAgICogV2UgdXNlIHRoZSBmb2xsb3dpbmcgdHJpY2sgdG8gdHJ5IHRvIGRyYW1hdGljYWxseSBpbXByb3ZlIHRoZQorICAgICAqIHBlcmZvcm1hbmNlIHdoaWxlIGRlYWxpbmcgd2l0aCBzbWFsbCBmaWxlcy4gIElmIHRoZSBvcmlnaW5hbCBzdHJlYW0KKyAgICAgKiBzaXplIGlzIGxlc3MgdGhhbiBhIGNlcnRhaW4gdGhyZXNob2xkLCB3ZSB0cnkgdG8gbG9hZCB0aGUgd2hvbGUgZm9udAorICAgICAqIGZpbGUgaW50byBtZW1vcnkuICBUaGlzIHNhdmVzIHVzIGZyb20gdXNpbmcgdGhlIDMyS0IgYnVmZmVyIG5lZWRlZAorICAgICAqIHRvIGluZmxhdGUgdGhlIGZpbGUsIHBsdXMgdGhlIHR3byA0S0IgaW50ZXJtZWRpYXRlIGlucHV0L291dHB1dAorICAgICAqIGJ1ZmZlcnMgdXNlZCBpbiB0aGUgYEZUX0daaXBGaWxlJyBzdHJ1Y3R1cmUuCiAgICAgICovCiAgICAgewogICAgICAgRlRfVUxvbmcgIHppcF9zaXplID0gZnRfZ3ppcF9nZXRfdW5jb21wcmVzc2VkX3NpemUoIHNvdXJjZSApOwpkaWZmIC0tZ2l0IGEvc3JjL2x6dy9mdGx6dy5jIGIvc3JjL2x6dy9mdGx6dy5jCmluZGV4IGNiNDZmOTMuLjRhM2Q3MGIgMTAwNjQ0Ci0tLSBhL3NyYy9sencvZnRsencuYworKysgYi9zcmMvbHp3L2Z0bHp3LmMKQEAgLTEsMjUgKzEsMjUgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bHp3LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzdXBwb3J0IGZvciAuWiBjb21wcmVzc2VkIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIG9wdGlvbmFsIGNvbXBvbmVudCByZWxpZXMgb24gTmV0QlNEJ3Mgem9wZW4oKS4gIEl0IHNob3VsZCBtYWlubHkgICovCi0vKiAgYmUgdXNlZCB0byBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAqLwotLyogIGRpc3RyaWJ1dGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEFsYmVydCBDaGluLUEtWW91bmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYmFzZWQgb24gY29kZSBpbiBgc3JjL2d6aXAvZnRnemlwLmMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0bHp3LmMKKyAqCisgKiAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5aIGNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIE5ldEJTRCdzIHpvcGVuKCkuICBJdCBzaG91bGQgbWFpbmx5CisgKiBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlcgorICogZGlzdHJpYnV0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBBbGJlcnQgQ2hpbi1BLVlvdW5nLgorICoKKyAqIGJhc2VkIG9uIGNvZGUgaW4gYHNyYy9nemlwL2Z0Z3ppcC5jJworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX01FTU9SWV9ICkBAIC00MiwxMCArNDIsNiBAQAogCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfTFpXCiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotI2Vycm9yICJsencgY29kZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCi0jZW5kaWYKLQogI2luY2x1ZGUgImZ0em9wZW4uaCIKIAogCkBAIC0zNjEsMTEgKzM1NywxMSBAQAogICAgIG1lbW9yeSA9IHNvdXJjZS0+bWVtb3J5OwogCiAgICAgLyoKLSAgICAgKiAgQ2hlY2sgdGhlIGhlYWRlciByaWdodCBub3c7IHRoaXMgcHJldmVudHMgYWxsb2NhdGlvbiBvZiBhIGh1Z2UKLSAgICAgKiAgTFpXRmlsZSBvYmplY3QgKDQwMCBLQnl0ZSBvZiBoZWFwIG1lbW9yeSkgaWYgbm90IG5lY2Vzc2FyeS4KKyAgICAgKiBDaGVjayB0aGUgaGVhZGVyIHJpZ2h0IG5vdzsgdGhpcyBwcmV2ZW50cyBhbGxvY2F0aW9uIG9mIGEgaHVnZQorICAgICAqIExaV0ZpbGUgb2JqZWN0ICg0MDAgS0J5dGUgb2YgaGVhcCBtZW1vcnkpIGlmIG5vdCBuZWNlc3NhcnkuCiAgICAgICoKLSAgICAgKiAgRGlkIEkgbWVudGlvbiB0aGF0IHlvdSBzaG91bGQgbmV2ZXIgdXNlIC5aIGNvbXByZXNzZWQgZm9udAotICAgICAqICBmaWxlcz8KKyAgICAgKiBEaWQgSSBtZW50aW9uIHRoYXQgeW91IHNob3VsZCBuZXZlciB1c2UgLlogY29tcHJlc3NlZCBmb250CisgICAgICogZmlsZXM/CiAgICAgICovCiAgICAgZXJyb3IgPSBmdF9sendfY2hlY2tfaGVhZGVyKCBzb3VyY2UgKTsKICAgICBpZiAoIGVycm9yICkKZGlmZiAtLWdpdCBhL3NyYy9sencvZnR6b3Blbi5jIGIvc3JjL2x6dy9mdHpvcGVuLmMKaW5kZXggMmI4NjhiYS4uYjY5OWIyZSAxMDA2NDQKLS0tIGEvc3JjL2x6dy9mdHpvcGVuLmMKKysrIGIvc3JjL2x6dy9mdHpvcGVuLmMKQEAgLTEsMjMgKzEsMjMgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0em9wZW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzdXBwb3J0IGZvciAuWiBjb21wcmVzc2VkIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIG9wdGlvbmFsIGNvbXBvbmVudCByZWxpZXMgb24gTmV0QlNEJ3Mgem9wZW4oKS4gIEl0IHNob3VsZCBtYWlubHkgICovCi0vKiAgYmUgdXNlZCB0byBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAqLwotLyogIGRpc3RyaWJ1dGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHpvcGVuLmMKKyAqCisgKiAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5aIGNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIE5ldEJTRCdzIHpvcGVuKCkuICBJdCBzaG91bGQgbWFpbmx5CisgKiBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlcgorICogZGlzdHJpYnV0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICNpbmNsdWRlICJmdHpvcGVuLmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9NRU1PUllfSApAQCAtMTY3LDExICsxNjcsMTEgQEAKICAgICAgIG5ld19zaXplICs9IG5ld19zaXplID4+IDI7ICAvKiBkb24ndCBncm93IHRvbyBmYXN0ICovCiAKICAgICAvKgotICAgICAqICBOb3RlIHRoYXQgdGhlIGBzdWZmaXgnIGFycmF5IGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgbWVtb3J5IGJsb2NrCi0gICAgICogIHBvaW50ZWQgdG8gYnkgYHByZWZpeCcuCisgICAgICogTm90ZSB0aGF0IHRoZSBgc3VmZml4JyBhcnJheSBpcyBsb2NhdGVkIGluIHRoZSBzYW1lIG1lbW9yeSBibG9jaworICAgICAqIHBvaW50ZWQgdG8gYnkgYHByZWZpeCcuCiAgICAgICoKLSAgICAgKiAgSSBrbm93IHRoYXQgc2l6ZW9mKEZUX0J5dGUpID09IDEgYnkgZGVmaW5pdGlvbiwgYnV0IGl0IGlzIGNsZWFyZXIKLSAgICAgKiAgdG8gd3JpdGUgaXQgbGl0ZXJhbGx5LgorICAgICAqIEkga25vdyB0aGF0IHNpemVvZihGVF9CeXRlKSA9PSAxIGJ5IGRlZmluaXRpb24sIGJ1dCBpdCBpcyBjbGVhcmVyCisgICAgICogdG8gd3JpdGUgaXQgbGl0ZXJhbGx5LgogICAgICAqCiAgICAgICovCiAgICAgaWYgKCBGVF9SRUFMTE9DX01VTFQoIHN0YXRlLT5wcmVmaXgsIG9sZF9zaXplLCBuZXdfc2l6ZSwKZGlmZiAtLWdpdCBhL3NyYy9sencvZnR6b3Blbi5oIGIvc3JjL2x6dy9mdHpvcGVuLmgKaW5kZXggNGZkMjY3ZS4uNGZiZTI1NyAxMDA2NDQKLS0tIGEvc3JjL2x6dy9mdHpvcGVuLmgKKysrIGIvc3JjL2x6dy9mdHpvcGVuLmgKQEAgLTEsMjMgKzEsMjMgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0em9wZW4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBzdXBwb3J0IGZvciAuWiBjb21wcmVzc2VkIGZpbGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIG9wdGlvbmFsIGNvbXBvbmVudCByZWxpZXMgb24gTmV0QlNEJ3Mgem9wZW4oKS4gIEl0IHNob3VsZCBtYWlubHkgICovCi0vKiAgYmUgdXNlZCB0byBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAqLwotLyogIGRpc3RyaWJ1dGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHpvcGVuLmgKKyAqCisgKiAgIEZyZWVUeXBlIHN1cHBvcnQgZm9yIC5aIGNvbXByZXNzZWQgZmlsZXMuCisgKgorICogVGhpcyBvcHRpb25hbCBjb21wb25lbnQgcmVsaWVzIG9uIE5ldEJTRCdzIHpvcGVuKCkuICBJdCBzaG91bGQgbWFpbmx5CisgKiBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlcgorICogZGlzdHJpYnV0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICNpZm5kZWYgRlRaT1BFTl9IXwogI2RlZmluZSBGVFpPUEVOX0hfCkBAIC0yNyw5ICsyNyw5IEBACiAKIAogICAvKgotICAgKiAgVGhpcyBpcyBhIGNvbXBsZXRlIHJlLWltcGxlbWVudGF0aW9uIG9mIHRoZSBMWlcgZmlsZSByZWFkZXIsCi0gICAqICBzaW5jZSB0aGUgb2xkIG9uZSB3YXMgaW5jcmVkaWJseSBiYWRseSB3cml0dGVuLCB1c2luZwotICAgKiAgNDAwIEtCeXRlIG9mIGhlYXAgbWVtb3J5IGJlZm9yZSBkZWNvbXByZXNzaW5nIGFueXRoaW5nLgorICAgKiBUaGlzIGlzIGEgY29tcGxldGUgcmUtaW1wbGVtZW50YXRpb24gb2YgdGhlIExaVyBmaWxlIHJlYWRlciwKKyAgICogc2luY2UgdGhlIG9sZCBvbmUgd2FzIGluY3JlZGlibHkgYmFkbHkgd3JpdHRlbiwgdXNpbmcKKyAgICogNDAwIEtCeXRlIG9mIGhlYXAgbWVtb3J5IGJlZm9yZSBkZWNvbXByZXNzaW5nIGFueXRoaW5nLgogICAgKgogICAgKi8KIApAQCAtNTgsNTYgKzU4LDU2IEBACiAKIAogICAvKgotICAgKiAgc3RhdGUgb2YgTFpXIGRlY29tcHJlc3NvcgorICAgKiBzdGF0ZSBvZiBMWlcgZGVjb21wcmVzc29yCiAgICAqCi0gICAqICBzbWFsbCB0ZWNobmljYWwgbm90ZQotICAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogc21hbGwgdGVjaG5pY2FsIG5vdGUKKyAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICoKLSAgICogIFdlIHVzZSBhIGZldyB0cmlja3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGF0IGFyZSBleHBsYWluZWQgaGVyZSB0bwotICAgKiAgZWFzZSBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLgorICAgKiBXZSB1c2UgYSBmZXcgdHJpY2tzIGluIHRoaXMgaW1wbGVtZW50YXRpb24gdGhhdCBhcmUgZXhwbGFpbmVkIGhlcmUgdG8KKyAgICogZWFzZSBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLgogICAgKgotICAgKiAgLSBGaXJzdCBvZiBhbGwsIHRoZSBgcHJlZml4JyBhbmQgYHN1ZmZpeCcgYXJyYXlzIGNvbnRhaW4gdGhlIHN1ZmZpeAotICAgKiAgICBhbmQgcHJlZml4IGZvciBjb2RlcyBvdmVyIDI1NjsgdGhpcyBtZWFucyB0aGF0CisgICAqIC0gRmlyc3Qgb2YgYWxsLCB0aGUgYHByZWZpeCcgYW5kIGBzdWZmaXgnIGFycmF5cyBjb250YWluIHRoZSBzdWZmaXgKKyAgICogICBhbmQgcHJlZml4IGZvciBjb2RlcyBvdmVyIDI1NjsgdGhpcyBtZWFucyB0aGF0CiAgICAqCi0gICAqICAgICAgcHJlZml4X29mKGNvZGUpID09IHN0YXRlLT5wcmVmaXhbY29kZS0yNTZdCi0gICAqICAgICAgc3VmZml4X29mKGNvZGUpID09IHN0YXRlLT5zdWZmaXhbY29kZS0yNTZdCisgICAqICAgICBwcmVmaXhfb2YoY29kZSkgPT0gc3RhdGUtPnByZWZpeFtjb2RlLTI1Nl0KKyAgICogICAgIHN1ZmZpeF9vZihjb2RlKSA9PSBzdGF0ZS0+c3VmZml4W2NvZGUtMjU2XQogICAgKgotICAgKiAgICBFYWNoIHByZWZpeCBpcyBhIDE2LWJpdCBjb2RlLCBhbmQgZWFjaCBzdWZmaXggYW4gOC1iaXQgYnl0ZS4KKyAgICogICBFYWNoIHByZWZpeCBpcyBhIDE2LWJpdCBjb2RlLCBhbmQgZWFjaCBzdWZmaXggYW4gOC1iaXQgYnl0ZS4KICAgICoKLSAgICogICAgQm90aCBhcnJheXMgYXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBtZW1vcnkgYmxvY2ssIHBvaW50ZWQgdG8gYnkKLSAgICogICAgYHN0YXRlLT5wcmVmaXgnLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgZXF1YWxpdHkgaXMgYWx3YXlzCi0gICAqICAgIHRydWU6CisgICAqICAgQm90aCBhcnJheXMgYXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBtZW1vcnkgYmxvY2ssIHBvaW50ZWQgdG8gYnkKKyAgICogICBgc3RhdGUtPnByZWZpeCcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBlcXVhbGl0eSBpcyBhbHdheXMKKyAgICogICB0cnVlOgogICAgKgotICAgKiAgICAgIHN0YXRlLT5zdWZmaXggPT0gKEZUX0J5dGUqKShzdGF0ZS0+cHJlZml4ICsgc3RhdGUtPnByZWZpeF9zaXplKQorICAgKiAgICAgc3RhdGUtPnN1ZmZpeCA9PSAoRlRfQnl0ZSopKHN0YXRlLT5wcmVmaXggKyBzdGF0ZS0+cHJlZml4X3NpemUpCiAgICAqCi0gICAqICAgIE9mIGNvdXJzZSwgc3RhdGUtPnByZWZpeF9zaXplIGlzIHRoZSBudW1iZXIgb2YgcHJlZml4L3N1ZmZpeCBzbG90cwotICAgKiAgICBpbiB0aGUgYXJyYXlzLCBjb3JyZXNwb25kaW5nIHRvIGNvZGVzIDI1Ni4uMjU1K3ByZWZpeF9zaXplLgorICAgKiAgIE9mIGNvdXJzZSwgc3RhdGUtPnByZWZpeF9zaXplIGlzIHRoZSBudW1iZXIgb2YgcHJlZml4L3N1ZmZpeCBzbG90cworICAgKiAgIGluIHRoZSBhcnJheXMsIGNvcnJlc3BvbmRpbmcgdG8gY29kZXMgMjU2Li4yNTUrcHJlZml4X3NpemUuCiAgICAqCi0gICAqICAtIGBmcmVlX2VudCcgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIGBwcmVmaXgnCi0gICAqICAgIGFuZCBgc3VmZml4JyBhcnJheXMuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgYG5leHQgZnJlZQotICAgKiAgICBjb2RlJyBpcyByZWFsbHkgYDI1NitmcmVlX2VudCcuCisgICAqIC0gYGZyZWVfZW50JyBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgYHByZWZpeCcKKyAgICogICBhbmQgYHN1ZmZpeCcgYXJyYXlzLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGBuZXh0IGZyZWUKKyAgICogICBjb2RlJyBpcyByZWFsbHkgYDI1NitmcmVlX2VudCcuCiAgICAqCi0gICAqICAgIE1vcmVvdmVyLCBgbWF4X2ZyZWUnIGlzIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgYGZyZWVfZW50JyBjYW4gcmVhY2guCisgICAqICAgTW9yZW92ZXIsIGBtYXhfZnJlZScgaXMgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBgZnJlZV9lbnQnIGNhbiByZWFjaC4KICAgICoKLSAgICogICAgYG1heF9mcmVlJyBjb3JyZXNwb25kcyB0byBgKDEgPDwgbWF4X2JpdHMpIC0gMjU2Jy4gIE5vdGUgdGhhdCB0aGlzCi0gICAqICAgIHZhbHVlIGlzIGFsd2F5cyA8PSAweEZGMDAsIHdoaWNoIG1lYW5zIHRoYXQgYm90aCBgZnJlZV9lbnQnIGFuZAotICAgKiAgICBgbWF4X2ZyZWUnIGNhbiBiZSBzdG9yZWQgaW4gYW4gRlRfVUludCB2YXJpYWJsZSwgZXZlbiBvbiAxNi1iaXQKLSAgICogICAgbWFjaGluZXMuCisgICAqICAgYG1heF9mcmVlJyBjb3JyZXNwb25kcyB0byBgKDEgPDwgbWF4X2JpdHMpIC0gMjU2Jy4gIE5vdGUgdGhhdCB0aGlzCisgICAqICAgdmFsdWUgaXMgYWx3YXlzIDw9IDB4RkYwMCwgd2hpY2ggbWVhbnMgdGhhdCBib3RoIGBmcmVlX2VudCcgYW5kCisgICAqICAgYG1heF9mcmVlJyBjYW4gYmUgc3RvcmVkIGluIGFuIEZUX1VJbnQgdmFyaWFibGUsIGV2ZW4gb24gMTYtYml0CisgICAqICAgbWFjaGluZXMuCiAgICAqCi0gICAqICAgIElmIGBmcmVlX2VudCA9PSBtYXhfZnJlZScsIHlvdSBjYW5ub3QgYWRkIG5ldyBjb2RlcyB0byB0aGUKLSAgICogICAgcHJlZml4L3N1ZmZpeCB0YWJsZS4KKyAgICogICBJZiBgZnJlZV9lbnQgPT0gbWF4X2ZyZWUnLCB5b3UgY2Fubm90IGFkZCBuZXcgY29kZXMgdG8gdGhlCisgICAqICAgcHJlZml4L3N1ZmZpeCB0YWJsZS4KICAgICoKLSAgICogIC0gYG51bV9iaXRzJyBpcyB0aGUgY3VycmVudCBudW1iZXIgb2YgY29kZSBiaXRzLCBzdGFydGluZyBhdCA5IGFuZAotICAgKiAgICBncm93aW5nIGVhY2ggdGltZSBgZnJlZV9lbnQnIHJlYWNoZXMgdGhlIHZhbHVlIG9mIGBmcmVlX2JpdHMnLiAgVGhlCi0gICAqICAgIGxhdHRlciBpcyBjb21wdXRlZCBhcyBmb2xsb3dzCisgICAqIC0gYG51bV9iaXRzJyBpcyB0aGUgY3VycmVudCBudW1iZXIgb2YgY29kZSBiaXRzLCBzdGFydGluZyBhdCA5IGFuZAorICAgKiAgIGdyb3dpbmcgZWFjaCB0aW1lIGBmcmVlX2VudCcgcmVhY2hlcyB0aGUgdmFsdWUgb2YgYGZyZWVfYml0cycuICBUaGUKKyAgICogICBsYXR0ZXIgaXMgY29tcHV0ZWQgYXMgZm9sbG93cwogICAgKgotICAgKiAgICAgIGlmIG51bV9iaXRzIDwgbWF4X2JpdHM6Ci0gICAqICAgICAgICAgZnJlZV9iaXRzID0gKDEgPDwgbnVtX2JpdHMpLTI1NgotICAgKiAgICAgIGVsc2U6Ci0gICAqICAgICAgICAgZnJlZV9iaXRzID0gbWF4X2ZyZWUgKyAxCisgICAqICAgICBpZiBudW1fYml0cyA8IG1heF9iaXRzOgorICAgKiAgICAgICAgZnJlZV9iaXRzID0gKDEgPDwgbnVtX2JpdHMpLTI1NgorICAgKiAgICAgZWxzZToKKyAgICogICAgICAgIGZyZWVfYml0cyA9IG1heF9mcmVlICsgMQogICAgKgotICAgKiAgICBTaW5jZSB0aGUgdmFsdWUgb2YgYG1heF9mcmVlICsgMScgY2FuIG5ldmVyIGJlIHJlYWNoZWQgYnkKLSAgICogICAgYGZyZWVfZW50JywgYG51bV9iaXRzJyBjYW5ub3QgZ3JvdyBsYXJnZXIgdGhhbiBgbWF4X2JpdHMnLgorICAgKiAgIFNpbmNlIHRoZSB2YWx1ZSBvZiBgbWF4X2ZyZWUgKyAxJyBjYW4gbmV2ZXIgYmUgcmVhY2hlZCBieQorICAgKiAgIGBmcmVlX2VudCcsIGBudW1fYml0cycgY2Fubm90IGdyb3cgbGFyZ2VyIHRoYW4gYG1heF9iaXRzJy4KICAgICovCiAKICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0x6d1N0YXRlUmVjXwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2YWxpZC5jIGIvc3JjL290dmFsaWQvb3R2YWxpZC5jCmluZGV4IDQ0MjNjYTEuLjE0NGJlNTggMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmFsaWQuYworKysgYi9zcmMvb3R2YWxpZC9vdHZhbGlkLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmFsaWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSB2YWxpZGF0b3IgZm9yIE9wZW5UeXBlIHRhYmxlcyAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmFsaWQuYworICoKKyAqICAgRnJlZVR5cGUgdmFsaWRhdG9yIGZvciBPcGVuVHlwZSB0YWJsZXMgKGJvZHkgb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2YWxpZC5oIGIvc3JjL290dmFsaWQvb3R2YWxpZC5oCmluZGV4IGQ3ODAxYWIuLjFjY2RiYmYgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmFsaWQuaAorKysgYi9zcmMvb3R2YWxpZC9vdHZhbGlkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmFsaWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSB0YWJsZSB2YWxpZGF0aW9uIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmFsaWQuaAorICoKKyAqICAgT3BlblR5cGUgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBPVFZBTElEX0hfCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZiYXNlLmMgYi9zcmMvb3R2YWxpZC9vdHZiYXNlLmMKaW5kZXggYTAxZDQ1Yy4uOTE4ZTM4MyAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2YmFzZS5jCisrKyBiL3NyYy9vdHZhbGlkL290dmJhc2UuYwpAQCAtMSwzMSArMSwzMSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgb3R2YmFzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIEJBU0UgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2YmFzZS5jCisgKgorICogICBPcGVuVHlwZSBCQVNFIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAib3R2YWxpZC5oIgogI2luY2x1ZGUgIm90dmNvbW1uLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2YmFzZQogCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5jIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uYwppbmRleCAwY2NmYjAzLi40YTJjOTVlIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmNvbW1uLmMKQEAgLTEsMzAgKzEsMzAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmNvbW1uLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmNvbW1uLmMKKyAqCisgKiAgIE9wZW5UeXBlIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJvdHZjb21tbi5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX290dmNvbW1vbgogCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5oIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uaAppbmRleCBhMzkyNzg0Li4zY2Q2ZDg2IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5oCisrKyBiL3NyYy9vdHZhbGlkL290dmNvbW1uLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmNvbW1uLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmNvbW1uLmgKKyAqCisgKiAgIE9wZW5UeXBlIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgT1RWQ09NTU5fSF8KZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmVycm9yLmggYi9zcmMvb3R2YWxpZC9vdHZlcnJvci5oCmluZGV4IDJmY2Y0MmUuLjI0ZThkMWQgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmVycm9yLmgKKysrIGIvc3JjL290dmFsaWQvb3R2ZXJyb3IuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgb3R2ZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2ZXJyb3IuaAorICoKKyAqICAgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGVycm9yICAgICAgKi8KLSAgLyogZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgZXJyb3IKKyAgICogZW51bWVyYXRpb24gY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBPVFZFUlJPUl9IXwogI2RlZmluZSBPVFZFUlJPUl9IXwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2Z2RlZi5jIGIvc3JjL290dmFsaWQvb3R2Z2RlZi5jCmluZGV4IDA4ZjMxNzEuLjY4YzAwYTUgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmdkZWYuYworKysgYi9zcmMvb3R2YWxpZC9vdHZnZGVmLmMKQEAgLTEsMzEgKzEsMzEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmdkZWYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBHREVGIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmdkZWYuYworICoKKyAqICAgT3BlblR5cGUgR0RFRiB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgIm90dmFsaWQuaCIKICNpbmNsdWRlICJvdHZjb21tbi5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX290dmdkZWYKIApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2Z3Bvcy5jIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5jCmluZGV4IDY5NmIzNWMuLjE3ZjI0MzcgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmdwb3MuYworKysgYi9zcmMvb3R2YWxpZC9vdHZncG9zLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dmdwb3MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBHUE9TIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG90dmdwb3MuYworICoKKyAqICAgT3BlblR5cGUgR1BPUyB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgIm90dmFsaWQuaCIKQEAgLTIxLDEyICsyMSwxMiBAQAogI2luY2x1ZGUgIm90dmdwb3MuaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9vdHZncG9zCiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmdwb3MuaCBiL3NyYy9vdHZhbGlkL290dmdwb3MuaAppbmRleCA5NWY5YWMzLi5jMjE2NjA5IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZncG9zLmgKKysrIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBvdHZncG9zLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgT3BlblR5cGUgR1BPUyB0YWJsZSB2YWxpZGF0b3IgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBvdHZncG9zLmgKKyAqCisgKiAgIE9wZW5UeXBlIEdQT1MgdGFibGUgdmFsaWRhdG9yIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBPVFZHUE9TX0hfCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZnc3ViLmMgYi9zcmMvb3R2YWxpZC9vdHZnc3ViLmMKaW5kZXggZDM1ZWE2Ny4uMDE4MGIxYSAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2Z3N1Yi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmdzdWIuYwpAQCAtMSwzMSArMSwzMSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgb3R2Z3N1Yi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIEdTVUIgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2Z3N1Yi5jCisgKgorICogICBPcGVuVHlwZSBHU1VCIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAib3R2YWxpZC5oIgogI2luY2x1ZGUgIm90dmNvbW1uLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2Z3N1YgogCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZqc3RmLmMgYi9zcmMvb3R2YWxpZC9vdHZqc3RmLmMKaW5kZXggOTRkNGFmOS4uN2E1NzY5YSAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2anN0Zi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmpzdGYuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgb3R2anN0Zi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9wZW5UeXBlIEpTVEYgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2anN0Zi5jCisgKgorICogICBPcGVuVHlwZSBKU1RGIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAib3R2YWxpZC5oIgpAQCAtMjEsMTIgKzIxLDEyIEBACiAjaW5jbHVkZSAib3R2Z3Bvcy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX290dmpzdGYKIApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bWF0aC5jIGIvc3JjL290dmFsaWQvb3R2bWF0aC5jCmluZGV4IGI5ODAwZjYuLjRhOWYzYjAgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dm1hdGguYworKysgYi9zcmMvb3R2YWxpZC9vdHZtYXRoLmMKQEAgLTEsMjEgKzEsMjEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dm1hdGguYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBPcGVuVHlwZSBNQVRIIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBXcml0dGVuIGJ5IEdlb3JnZSBXaWxsaWFtcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2bWF0aC5jCisgKgorICogICBPcGVuVHlwZSBNQVRIIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBXcml0dGVuIGJ5IEdlb3JnZSBXaWxsaWFtcy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAib3R2YWxpZC5oIgpAQCAtMjMsMTIgKzIzLDEyIEBACiAjaW5jbHVkZSAib3R2Z3Bvcy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX290dm1hdGgKIApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bW9kLmMgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwppbmRleCA4OWVlNDQ5Li41ZGQ1NDNiIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZtb2QuYworKysgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgb3R2bW9kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlJ3MgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogb3R2bW9kLmMKKyAqCisgKiAgIEZyZWVUeXBlJ3MgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI4LDEyICsyOCwxMiBAQAogI2luY2x1ZGUgIm90dmNvbW1uLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2Vfb3R2bW9kdWxlCiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dm1vZC5oIGIvc3JjL290dmFsaWQvb3R2bW9kLmgKaW5kZXggNjkxN2JjYy4uYTA4NTEyZiAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2bW9kLmgKKysrIGIvc3JjL290dmFsaWQvb3R2bW9kLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIG90dm1vZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSdzIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBvdHZtb2QuaAorICoKKyAqICAgRnJlZVR5cGUncyBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBpbXBsZW1lbnRhdGlvbgorICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDQtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgT1RWTU9EX0hfCkBAIC0yNywxMCArMjcsNiBAQAogCiBGVF9CRUdJTl9IRUFERVIKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0jZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCiAKICAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfTW9kdWxlX0NsYXNzICkgIG90dl9tb2R1bGVfY2xhc3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmLmggYi9zcmMvcGNmL3BjZi5oCmluZGV4IGYwMzkwY2IuLjNjNGViNmEgMTAwNjQ0Ci0tLSBhL3NyYy9wY2YvcGNmLmgKKysrIGIvc3JjL3BjZi9wY2YuaApAQCAtMTI0LDEwICsxMjQsMTQgQEAKICAgfSBQQ0ZfQWNjZWxSZWMsICpQQ0ZfQWNjZWw7CiAKIAorICAvKgorICAgKiBUaGlzIGZpbGUgdXNlcyBYMTEgdGVybWlub2xvZ3kgZm9yIFBDRiBkYXRhOyBhbiBgZW5jb2RpbmcnIGluIFgxMSBzcGVhaworICAgKiBpcyB0aGUgc2FtZSBhcyBhIGBjaGFyYWN0ZXIgY29kZScgaW4gRnJlZVR5cGUgc3BlYWsuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgUENGX0VuY29kaW5nUmVjXwogICB7Ci0gICAgRlRfTG9uZyAgICBlbmM7Ci0gICAgRlRfVVNob3J0ICBnbHlwaDsKKyAgICBGVF9VTG9uZyAgIGVuYzsKKyAgICBGVF9VU2hvcnQgIGdseXBoOyAgLyogYW4gaW5kZXggaW50byBQQ0ZfRmFjZSdzIGBtZXRyaWNzJyBhcnJheSAqLwogCiAgIH0gUENGX0VuY29kaW5nUmVjLCAqUENGX0VuY29kaW5nOwogCkBAIC0xNTMsNyArMTU3LDcgQEAKICAgICBGVF9VTG9uZyAgICAgICBuZW5jb2RpbmdzOwogICAgIFBDRl9FbmNvZGluZyAgIGVuY29kaW5nczsKIAotICAgIEZUX1Nob3J0ICAgICAgIGRlZmF1bHRDaGFyOworICAgIEZUX1VTaG9ydCAgICAgIGRlZmF1bHRDaGFyOwogCiAgICAgRlRfVUxvbmcgICAgICAgYml0bWFwc0Zvcm1hdDsKIApkaWZmIC0tZ2l0IGEvc3JjL3BjZi9wY2Zkcml2ci5jIGIvc3JjL3BjZi9wY2Zkcml2ci5jCmluZGV4IDAxMTlkOTQuLmUyZjdlN2MgMTAwNjQ0Ci0tLSBhL3NyYy9wY2YvcGNmZHJpdnIuYworKysgYi9zcmMvcGNmL3BjZmRyaXZyLmMKQEAgLTUzLDE2ICs1MywyMCBAQAogI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9wY2Zkcml2ZXIKIAogCisgIC8qCisgICAqIFRoaXMgZmlsZSB1c2VzIFgxMSB0ZXJtaW5vbG9neSBmb3IgUENGIGRhdGE7IGFuIGBlbmNvZGluZycgaW4gWDExIHNwZWFrCisgICAqIGlzIHRoZSBzYW1lIGFzIGEgYGNoYXJhY3RlciBjb2RlJyBpbiBGcmVlVHlwZSBzcGVhay4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBQQ0ZfQ01hcFJlY18KICAgewogICAgIEZUX0NNYXBSZWMgICAgcm9vdDsKQEAgLTExOSwxMSArMTIzLDExIEBACiAKIAogICAgICAgbWlkICA9ICggbWluICsgbWF4ICkgPj4gMTsKLSAgICAgIGNvZGUgPSAoRlRfVUxvbmcpZW5jb2RpbmdzW21pZF0uZW5jOworICAgICAgY29kZSA9IGVuY29kaW5nc1ttaWRdLmVuYzsKIAogICAgICAgaWYgKCBjaGFyY29kZSA9PSBjb2RlICkKICAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZW5jb2RpbmdzW21pZF0uZ2x5cGggKyAxOworICAgICAgICByZXN1bHQgPSBlbmNvZGluZ3NbbWlkXS5nbHlwaDsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKQEAgLTE1NywxMSArMTYxLDExIEBACiAKIAogICAgICAgbWlkICA9ICggbWluICsgbWF4ICkgPj4gMTsKLSAgICAgIGNvZGUgPSAoRlRfVUxvbmcpZW5jb2RpbmdzW21pZF0uZW5jOworICAgICAgY29kZSA9IGVuY29kaW5nc1ttaWRdLmVuYzsKIAogICAgICAgaWYgKCBjaGFyY29kZSA9PSBjb2RlICkKICAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gZW5jb2RpbmdzW21pZF0uZ2x5cGggKyAxOworICAgICAgICByZXN1bHQgPSBlbmNvZGluZ3NbbWlkXS5nbHlwaDsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCkBAIC0xNzQsOCArMTc4LDggQEAKICAgICBjaGFyY29kZSA9IDA7CiAgICAgaWYgKCBtaW4gPCBjbWFwLT5udW1fZW5jb2RpbmdzICkKICAgICB7Ci0gICAgICBjaGFyY29kZSA9IChGVF9VTG9uZyllbmNvZGluZ3NbbWluXS5lbmM7Ci0gICAgICByZXN1bHQgICA9IGVuY29kaW5nc1ttaW5dLmdseXBoICsgMTsKKyAgICAgIGNoYXJjb2RlID0gZW5jb2RpbmdzW21pbl0uZW5jOworICAgICAgcmVzdWx0ICAgPSBlbmNvZGluZ3NbbWluXS5nbHlwaDsKICAgICB9CiAKICAgRXhpdDoKQEAgLTE4Nyw2ICsxOTEsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAqYWNoYXJjb2RlID0gKEZUX1VJbnQzMiljaGFyY29kZTsKKwogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KIApAQCAtNTEyLDkgKzUxNyw2IEBACiAKICAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKIAotICAgIGlmICggZ2x5cGhfaW5kZXggPiAwICkKLSAgICAgIGdseXBoX2luZGV4LS07Ci0KICAgICBtZXRyaWMgPSBmYWNlLT5tZXRyaWNzICsgZ2x5cGhfaW5kZXg7CiAKICAgICBiaXRtYXAtPnJvd3MgICAgICAgPSAodW5zaWduZWQgaW50KSggbWV0cmljLT5hc2NlbnQgKwpAQCAtNjAxLDExICs2MDMsMTEgQEAKICAgfQogCiAKLSAvKgotICAqCi0gICogIEJERiBTRVJWSUNFCi0gICoKLSAgKi8KKyAgLyoKKyAgICoKKyAgICogQkRGIFNFUlZJQ0UKKyAgICoKKyAgICovCiAKICAgc3RhdGljIEZUX0Vycm9yCiAgIHBjZl9nZXRfYmRmX3Byb3BlcnR5KCBQQ0ZfRmFjZSAgICAgICAgICBmYWNlLApAQCAtNjMzLDkgKzYzNSw5IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKgotICAgICAgICAgKiAgVGhlIFBDRiBkcml2ZXIgbG9hZHMgYWxsIHByb3BlcnRpZXMgYXMgc2lnbmVkIGludGVnZXJzLgotICAgICAgICAgKiAgVGhpcyByZWFsbHkgZG9lc24ndCBzZWVtIHRvIGJlIGEgcHJvYmxlbSwgYmVjYXVzZSB0aGlzIGlzCi0gICAgICAgICAqICBzdWZmaWNpZW50IGZvciBhbnkgbWVhbmluZ2Z1bCB2YWx1ZXMuCisgICAgICAgICAqIFRoZSBQQ0YgZHJpdmVyIGxvYWRzIGFsbCBwcm9wZXJ0aWVzIGFzIHNpZ25lZCBpbnRlZ2Vycy4KKyAgICAgICAgICogVGhpcyByZWFsbHkgZG9lc24ndCBzZWVtIHRvIGJlIGEgcHJvYmxlbSwgYmVjYXVzZSB0aGlzIGlzCisgICAgICAgICAqIHN1ZmZpY2llbnQgZm9yIGFueSBtZWFuaW5nZnVsIHZhbHVlcy4KICAgICAgICAgICovCiAgICAgICAgIGFwcm9wZXJ0eS0+dHlwZSAgICAgID0gQkRGX1BST1BFUlRZX1RZUEVfSU5URUdFUjsKICAgICAgICAgYXByb3BlcnR5LT51LmludGVnZXIgPSAoRlRfSW50MzIpcHJvcC0+dmFsdWUubDsKQEAgLTY2OCw3ICs2NzAsNyBAQAogCiAKICAgLyoKLSAgICogIFBST1BFUlRZIFNFUlZJQ0UKKyAgICogUFJPUEVSVFkgU0VSVklDRQogICAgKgogICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCkBAIC03NzcsMTEgKzc3OSwxMSBAQAogICAgIChGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMpcGNmX3Byb3BlcnR5X2dldCApICAgICAvKiBnZXRfcHJvcGVydHkgKi8KIAogCi0gLyoKLSAgKgotICAqICBTRVJWSUNFIExJU1QKLSAgKgotICAqLworICAvKgorICAgKgorICAgKiBTRVJWSUNFIExJU1QKKyAgICoKKyAgICovCiAKICAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VEZXNjUmVjICBwY2Zfc2VydmljZXNbXSA9CiAgIHsKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmZHJpdnIuaCBiL3NyYy9wY2YvcGNmZHJpdnIuaAppbmRleCAyOWQzMDQ5Li43M2RiMDgyIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZmRyaXZyLmgKKysrIGIvc3JjL3BjZi9wY2Zkcml2ci5oCkBAIC0zMSwxMSArMzEsOCBAQAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9EUklWRVJfSAogCi1GVF9CRUdJTl9IRUFERVIKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0jZXJyb3IgInRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgorRlRfQkVHSU5fSEVBREVSCiAKICAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfRHJpdmVyX0NsYXNzUmVjICkgIHBjZl9kcml2ZXJfY2xhc3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmZXJyb3IuaCBiL3NyYy9wY2YvcGNmZXJyb3IuaAppbmRleCBhZGQ4ZWYyLi4yZTY5ZDFkIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZmVycm9yLmgKKysrIGIvc3JjL3BjZi9wY2ZlcnJvci5oCkBAIC0xLDI2ICsxLDI2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwY2ZlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUENGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEsIDIwMTIgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwY2ZlcnJvci5oCisgKgorICogICBQQ0YgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEsIDIwMTIgYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBQQ0YgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUENGIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgUENGRVJST1JfSF8KICNkZWZpbmUgUENGRVJST1JfSF8KZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmcmVhZC5jIGIvc3JjL3BjZi9wY2ZyZWFkLmMKaW5kZXggNTM3ZGEwZC4uMTRjY2U2NyAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2ZyZWFkLmMKKysrIGIvc3JjL3BjZi9wY2ZyZWFkLmMKQEAgLTM3LDEyICszNywxMiBAQAogI2luY2x1ZGUgInBjZmVycm9yLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcGNmcmVhZAogCkBAIC0xNzgsMjMgKzE3OCwyMyBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogIFdlIG5vdyBjaGVjayB3aGV0aGVyIHRoZSBgc2l6ZScgYW5kIGBvZmZzZXQnIHZhbHVlcyBhcmUgcmVhc29uYWJsZToKLSAgICAgKiAgYG9mZnNldCcgKyBgc2l6ZScgbXVzdCBub3QgZXhjZWVkIHRoZSBzdHJlYW0gc2l6ZS4KKyAgICAgKiBXZSBub3cgY2hlY2sgd2hldGhlciB0aGUgYHNpemUnIGFuZCBgb2Zmc2V0JyB2YWx1ZXMgYXJlIHJlYXNvbmFibGU6CisgICAgICogYG9mZnNldCcgKyBgc2l6ZScgbXVzdCBub3QgZXhjZWVkIHRoZSBzdHJlYW0gc2l6ZS4KICAgICAgKgotICAgICAqICBOb3RlLCBob3dldmVyLCB0aGF0IFgxMSdzIGBwY2ZXcml0ZUZvbnQnIHJvdXRpbmUgKHVzZWQgYnkgdGhlCi0gICAgICogIGBiZGZ0b3BjZicgcHJvZ3JhbSB0byBjcmVhdGUgUERGIGZvbnQgZmlsZXMpIGhhcyB0d28gc3BlY2lhbAotICAgICAqICBmZWF0dXJlcy4KKyAgICAgKiBOb3RlLCBob3dldmVyLCB0aGF0IFgxMSdzIGBwY2ZXcml0ZUZvbnQnIHJvdXRpbmUgKHVzZWQgYnkgdGhlCisgICAgICogYGJkZnRvcGNmJyBwcm9ncmFtIHRvIGNyZWF0ZSBQQ0YgZm9udCBmaWxlcykgaGFzIHR3byBzcGVjaWFsCisgICAgICogZmVhdHVyZXMuCiAgICAgICoKLSAgICAgKiAgLSBJdCBhbHdheXMgYXNzaWducyB0aGUgYWNjZWxlcmF0b3IgdGFibGUgYSBzaXplIG9mIDEwMCBieXRlcyBpbiB0aGUKLSAgICAgKiAgICBUT0MsIHJlZ2FyZGxlc3Mgb2YgaXRzIHJlYWwgc2l6ZSwgd2hpY2ggY2FuIHZhcnkgYmV0d2VlbiAzNCBhbmQgNzIKLSAgICAgKiAgICBieXRlcy4KKyAgICAgKiAtIEl0IGFsd2F5cyBhc3NpZ25zIHRoZSBhY2NlbGVyYXRvciB0YWJsZSBhIHNpemUgb2YgMTAwIGJ5dGVzIGluIHRoZQorICAgICAqICAgVE9DLCByZWdhcmRsZXNzIG9mIGl0cyByZWFsIHNpemUsIHdoaWNoIGNhbiB2YXJ5IGJldHdlZW4gMzQgYW5kIDcyCisgICAgICogICBieXRlcy4KICAgICAgKgotICAgICAqICAtIER1ZSB0byB0aGUgd2F5IHRoZSByb3V0aW5lIGlzIGRlc2lnbmVkLCBpdCBzaGlwcyBvdXQgdGhlIGxhc3QgZm9udAotICAgICAqICAgIHRhYmxlIHdpdGggaXRzIHJlYWwgc2l6ZSwgaWdub3JpbmcgdGhlIFRPQydzIHNpemUgdmFsdWUuICBTaW5jZQotICAgICAqICAgIHRoZSBUT0Mgc2l6ZSB2YWx1ZXMgYXJlIGFsd2F5cyByb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUgb2YgNCwgdGhlCi0gICAgICogICAgZGlmZmVyZW5jZSBjYW4gYmUgdXAgdG8gdGhyZWUgYnl0ZXMgZm9yIGFsbCB0YWJsZXMgZXhjZXB0IHRoZQotICAgICAqICAgIGFjY2VsZXJhdG9yIHRhYmxlLCBmb3Igd2hpY2ggdGhlIGRpZmZlcmVuY2UgY2FuIGJlIGFzIGxhcmdlIGFzIDY2Ci0gICAgICogICAgYnl0ZXMuCisgICAgICogLSBEdWUgdG8gdGhlIHdheSB0aGUgcm91dGluZSBpcyBkZXNpZ25lZCwgaXQgc2hpcHMgb3V0IHRoZSBsYXN0IGZvbnQKKyAgICAgKiAgIHRhYmxlIHdpdGggaXRzIHJlYWwgc2l6ZSwgaWdub3JpbmcgdGhlIFRPQydzIHNpemUgdmFsdWUuICBTaW5jZQorICAgICAqICAgdGhlIFRPQyBzaXplIHZhbHVlcyBhcmUgYWx3YXlzIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiA0LCB0aGUKKyAgICAgKiAgIGRpZmZlcmVuY2UgY2FuIGJlIHVwIHRvIHRocmVlIGJ5dGVzIGZvciBhbGwgdGFibGVzIGV4Y2VwdCB0aGUKKyAgICAgKiAgIGFjY2VsZXJhdG9yIHRhYmxlLCBmb3Igd2hpY2ggdGhlIGRpZmZlcmVuY2UgY2FuIGJlIGFzIGxhcmdlIGFzIDY2CisgICAgICogICBieXRlcy4KICAgICAgKgogICAgICAqLwogCkBAIC04MTAsOCArODEwLDggQEAKICAgewogICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICBtZW1vcnkgID0gRlRfRkFDRSggZmFjZSApLT5tZW1vcnk7Ci0gICAgRlRfTG9uZyogICBvZmZzZXRzID0gTlVMTDsKLSAgICBGVF9Mb25nICAgIGJpdG1hcFNpemVzW0dMWVBIUEFET1BUSU9OU107CisgICAgRlRfVUxvbmcqICBvZmZzZXRzID0gTlVMTDsKKyAgICBGVF9VTG9uZyAgIGJpdG1hcFNpemVzW0dMWVBIUEFET1BUSU9OU107CiAgICAgRlRfVUxvbmcgICBmb3JtYXQsIHNpemU7CiAgICAgRlRfVUxvbmcgICBuYml0bWFwcywgb3JpZ19uYml0bWFwcywgaSwgc2l6ZWJpdG1hcHMgPSAwOwogCkBAIC04NzgsMTEgKzg3OCwxMSBAQAogICAgIGZvciAoIGkgPSAwOyBpIDwgbmJpdG1hcHM7IGkrKyApCiAgICAgewogICAgICAgaWYgKCBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QgKQotICAgICAgICAodm9pZClGVF9SRUFEX0xPTkcoIG9mZnNldHNbaV0gKTsKKyAgICAgICAgKHZvaWQpRlRfUkVBRF9VTE9ORyggb2Zmc2V0c1tpXSApOwogICAgICAgZWxzZQotICAgICAgICAodm9pZClGVF9SRUFEX0xPTkdfTEUoIG9mZnNldHNbaV0gKTsKKyAgICAgICAgKHZvaWQpRlRfUkVBRF9VTE9OR19MRSggb2Zmc2V0c1tpXSApOwogCi0gICAgICBGVF9UUkFDRTUoKCAiICBiaXRtYXAgJWxkOiBvZmZzZXQgJWxkICgweCVsWClcbiIsCisgICAgICBGVF9UUkFDRTUoKCAiICBiaXRtYXAgJWx1OiBvZmZzZXQgJWx1ICgweCVsWClcbiIsCiAgICAgICAgICAgICAgICAgICBpLCBvZmZzZXRzW2ldLCBvZmZzZXRzW2ldICkpOwogICAgIH0KICAgICBpZiAoIGVycm9yICkKQEAgLTg5MSwyMiArODkxLDIyIEBACiAgICAgZm9yICggaSA9IDA7IGkgPCBHTFlQSFBBRE9QVElPTlM7IGkrKyApCiAgICAgewogICAgICAgaWYgKCBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QgKQotICAgICAgICAodm9pZClGVF9SRUFEX0xPTkcoIGJpdG1hcFNpemVzW2ldICk7CisgICAgICAgICh2b2lkKUZUX1JFQURfVUxPTkcoIGJpdG1hcFNpemVzW2ldICk7CiAgICAgICBlbHNlCi0gICAgICAgICh2b2lkKUZUX1JFQURfTE9OR19MRSggYml0bWFwU2l6ZXNbaV0gKTsKKyAgICAgICAgKHZvaWQpRlRfUkVBRF9VTE9OR19MRSggYml0bWFwU2l6ZXNbaV0gKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEJhaWw7CiAKLSAgICAgIHNpemViaXRtYXBzID0gKEZUX1VMb25nKWJpdG1hcFNpemVzW1BDRl9HTFlQSF9QQURfSU5ERVgoIGZvcm1hdCApXTsKKyAgICAgIHNpemViaXRtYXBzID0gYml0bWFwU2l6ZXNbUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICldOwogCi0gICAgICBGVF9UUkFDRTQoKCAiICAlbGQtYml0IHBhZGRpbmcgaW1wbGllcyBhIHNpemUgb2YgJWxkXG4iLAorICAgICAgRlRfVFJBQ0U0KCggIiAgJWxkLWJpdCBwYWRkaW5nIGltcGxpZXMgYSBzaXplIG9mICVsdVxuIiwKICAgICAgICAgICAgICAgICAgIDggPDwgaSwgYml0bWFwU2l6ZXNbaV0gKSk7CiAgICAgfQogCi0gICAgRlRfVFJBQ0U0KCggIiAgJWxkIGJpdG1hcHMsIHVzaW5nICVsZC1iaXQgcGFkZGluZ1xuIiwKKyAgICBGVF9UUkFDRTQoKCAiICAlbHUgYml0bWFwcywgdXNpbmcgJWxkLWJpdCBwYWRkaW5nXG4iLAogICAgICAgICAgICAgICAgIG5iaXRtYXBzLAogICAgICAgICAgICAgICAgIDggPDwgUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICkgKSk7Ci0gICAgRlRfVFJBQ0U0KCggIiAgYml0bWFwIHNpemU6ICVsZFxuIiwgc2l6ZWJpdG1hcHMgKSk7CisgICAgRlRfVFJBQ0U0KCggIiAgYml0bWFwIHNpemU6ICVsdVxuIiwgc2l6ZWJpdG1hcHMgKSk7CiAKICAgICBGVF9VTlVTRUQoIHNpemViaXRtYXBzICk7ICAgICAgIC8qIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nICovCiAKQEAgLTkxNSwxNCArOTE1LDEzIEBACiAgICAgZm9yICggaSA9IDA7IGkgPCBuYml0bWFwczsgaSsrICkKICAgICB7CiAgICAgICAvKiByb3VnaCBlc3RpbWF0ZSAqLwotICAgICAgaWYgKCAoIG9mZnNldHNbaV0gPCAwICkgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgICggKEZUX1VMb25nKW9mZnNldHNbaV0gPiBzaXplICkgKQorICAgICAgaWYgKCBvZmZzZXRzW2ldID4gc2l6ZSApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfZ2V0X2JpdG1hcHM6IgotICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgb2Zmc2V0IHRvIGJpdG1hcCBkYXRhIG9mIGdseXBoICVsZFxuIiwgaSApKTsKKyAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIG9mZnNldCB0byBiaXRtYXAgZGF0YSBvZiBnbHlwaCAlbHVcbiIsIGkgKSk7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICAgIGZhY2UtPm1ldHJpY3NbaV0uYml0cyA9IHN0cmVhbS0+cG9zICsgKEZUX1VMb25nKW9mZnNldHNbaV07CisgICAgICAgIGZhY2UtPm1ldHJpY3NbaV0uYml0cyA9IHN0cmVhbS0+cG9zICsgb2Zmc2V0c1tpXTsKICAgICB9CiAKICAgICBmYWNlLT5iaXRtYXBzRm9ybWF0ID0gZm9ybWF0OwpAQCAtOTMzLDYgKzkzMiwxMCBAQAogICB9CiAKIAorICAvKgorICAgKiBUaGlzIGZpbGUgdXNlcyBYMTEgdGVybWlub2xvZ3kgZm9yIFBDRiBkYXRhOyBhbiBgZW5jb2RpbmcnIGluIFgxMSBzcGVhaworICAgKiBpcyB0aGUgc2FtZSBhcyBhIGNoYXJhY3RlciBjb2RlIGluIEZyZWVUeXBlIHNwZWFrLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIHBjZl9nZXRfZW5jb2RpbmdzKCBGVF9TdHJlYW0gIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgIFBDRl9GYWNlICAgZmFjZSApCkBAIC05NDAsMTEgKzk0MywxMyBAQAogICAgIEZUX0Vycm9yICAgICAgZXJyb3I7CiAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBGVF9GQUNFKCBmYWNlICktPm1lbW9yeTsKICAgICBGVF9VTG9uZyAgICAgIGZvcm1hdCwgc2l6ZTsKLSAgICBpbnQgICAgICAgICAgIGZpcnN0Q29sLCBsYXN0Q29sOwotICAgIGludCAgICAgICAgICAgZmlyc3RSb3csIGxhc3RSb3c7CisgICAgRlRfVVNob3J0ICAgICBmaXJzdENvbCwgbGFzdENvbDsKKyAgICBGVF9VU2hvcnQgICAgIGZpcnN0Um93LCBsYXN0Um93OwogICAgIEZUX1VMb25nICAgICAgbmVuY29kaW5nOwotICAgIEZUX1VTaG9ydCAgICAgZW5jb2RpbmdPZmZzZXQ7Ci0gICAgaW50ICAgICAgICAgICBpLCBqOworICAgIEZUX1VTaG9ydCAgICAgZGVmYXVsdENoYXJSb3csIGRlZmF1bHRDaGFyQ29sOworICAgIEZUX1VTaG9ydCAgICAgZW5jb2RpbmdPZmZzZXQsIGRlZmF1bHRDaGFyRW5jb2RpbmdPZmZzZXQ7CisgICAgRlRfVVNob3J0ICAgICBpLCBqOworICAgIEZUX0J5dGUqICAgICAgcG9zOwogICAgIEZUX1VMb25nICAgICAgazsKICAgICBQQ0ZfRW5jb2RpbmcgIGVuY29kaW5nID0gTlVMTDsKIApAQCAtOTY0LDIxICs5NjksMjQgQEAKIAogICAgIGZvcm1hdCA9IEZUX0dFVF9VTE9OR19MRSgpOwogCisgICAgLyogWDExJ3MgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGVxdWl2YWxlbnQgdG8gICovCisgICAgLyogYEZUX0dFVF9TSE9SVCcgZm9yIGBkZWZhdWx0Q2hhcicsIGhvd2V2ZXIgdGhpcyBkb2Vzbid0ICovCisgICAgLyogbWFrZSBzZW5zZSBmb3IgbW9zdCBlbmNvZGluZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QgKQogICAgIHsKLSAgICAgIGZpcnN0Q29sICAgICAgICAgID0gRlRfR0VUX1NIT1JUKCk7Ci0gICAgICBsYXN0Q29sICAgICAgICAgICA9IEZUX0dFVF9TSE9SVCgpOwotICAgICAgZmlyc3RSb3cgICAgICAgICAgPSBGVF9HRVRfU0hPUlQoKTsKLSAgICAgIGxhc3RSb3cgICAgICAgICAgID0gRlRfR0VUX1NIT1JUKCk7Ci0gICAgICBmYWNlLT5kZWZhdWx0Q2hhciA9IEZUX0dFVF9TSE9SVCgpOworICAgICAgZmlyc3RDb2wgICAgICAgICAgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICBsYXN0Q29sICAgICAgICAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgIGZpcnN0Um93ICAgICAgICAgID0gRlRfR0VUX1VTSE9SVCgpOworICAgICAgbGFzdFJvdyAgICAgICAgICAgPSBGVF9HRVRfVVNIT1JUKCk7CisgICAgICBmYWNlLT5kZWZhdWx0Q2hhciA9IEZUX0dFVF9VU0hPUlQoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGZpcnN0Q29sICAgICAgICAgID0gRlRfR0VUX1NIT1JUX0xFKCk7Ci0gICAgICBsYXN0Q29sICAgICAgICAgICA9IEZUX0dFVF9TSE9SVF9MRSgpOwotICAgICAgZmlyc3RSb3cgICAgICAgICAgPSBGVF9HRVRfU0hPUlRfTEUoKTsKLSAgICAgIGxhc3RSb3cgICAgICAgICAgID0gRlRfR0VUX1NIT1JUX0xFKCk7Ci0gICAgICBmYWNlLT5kZWZhdWx0Q2hhciA9IEZUX0dFVF9TSE9SVF9MRSgpOworICAgICAgZmlyc3RDb2wgICAgICAgICAgPSBGVF9HRVRfVVNIT1JUX0xFKCk7CisgICAgICBsYXN0Q29sICAgICAgICAgICA9IEZUX0dFVF9VU0hPUlRfTEUoKTsKKyAgICAgIGZpcnN0Um93ICAgICAgICAgID0gRlRfR0VUX1VTSE9SVF9MRSgpOworICAgICAgbGFzdFJvdyAgICAgICAgICAgPSBGVF9HRVRfVVNIT1JUX0xFKCk7CisgICAgICBmYWNlLT5kZWZhdWx0Q2hhciA9IEZUX0dFVF9VU0hPUlRfTEUoKTsKICAgICB9CiAKICAgICBGVF9TdHJlYW1fRXhpdEZyYW1lKCBzdHJlYW0gKTsKQEAgLTk5MiwxNSArMTAwMCwxNSBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CiAKICAgICBGVF9UUkFDRTQoKCAiICBmaXJzdENvbCAweCVYLCBsYXN0Q29sIDB4JVhcbiIKLSAgICAgICAgICAgICAgICAiICBmaXJzdFJvdyAweCVYLCBsYXN0Um93IDB4JVhcbiIsCisgICAgICAgICAgICAgICAgIiAgZmlyc3RSb3cgMHglWCwgbGFzdFJvdyAweCVYXG4iCisgICAgICAgICAgICAgICAgIiAgZGVmYXVsdENoYXIgMHglWFxuIiwKICAgICAgICAgICAgICAgICBmaXJzdENvbCwgbGFzdENvbCwKLSAgICAgICAgICAgICAgICBmaXJzdFJvdywgbGFzdFJvdyApKTsKKyAgICAgICAgICAgICAgICBmaXJzdFJvdywgbGFzdFJvdywKKyAgICAgICAgICAgICAgICBmYWNlLT5kZWZhdWx0Q2hhciApKTsKIAogICAgIC8qIHNhbml0eSBjaGVja3M7IHdlIGxpbWl0IG51bWJlcnMgb2Ygcm93cyBhbmQgY29sdW1ucyB0byAyNTYgKi8KLSAgICBpZiAoIGZpcnN0Q29sIDwgMCAgICAgICB8fAotICAgICAgICAgZmlyc3RDb2wgPiBsYXN0Q29sIHx8CisgICAgaWYgKCBmaXJzdENvbCA+IGxhc3RDb2wgfHwKICAgICAgICAgIGxhc3RDb2wgID4gMHhGRiAgICB8fAotICAgICAgICAgZmlyc3RSb3cgPCAwICAgICAgIHx8CiAgICAgICAgICBmaXJzdFJvdyA+IGxhc3RSb3cgfHwKICAgICAgICAgIGxhc3RSb3cgID4gMHhGRiAgICApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKQEAgLTEwMTcsNiArMTAyNSw1OCBAQAogCiAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKIAorICAgIGRlZmF1bHRDaGFyUm93ID0gZmFjZS0+ZGVmYXVsdENoYXIgPj4gODsKKyAgICBkZWZhdWx0Q2hhckNvbCA9IGZhY2UtPmRlZmF1bHRDaGFyICYgMHhGRjsKKworICAgIC8qIHZhbGlkYXRlIGRlZmF1bHQgY2hhcmFjdGVyICovCisgICAgaWYgKCBkZWZhdWx0Q2hhclJvdyA8IGZpcnN0Um93IHx8CisgICAgICAgICBkZWZhdWx0Q2hhclJvdyA+IGxhc3RSb3cgIHx8CisgICAgICAgICBkZWZhdWx0Q2hhckNvbCA8IGZpcnN0Q29sIHx8CisgICAgICAgICBkZWZhdWx0Q2hhckNvbCA+IGxhc3RDb2wgICkKKyAgICB7CisgICAgICBmYWNlLT5kZWZhdWx0Q2hhciA9IGZpcnN0Um93ICogMjU2VSArIGZpcnN0Q29sOworICAgICAgRlRfVFJBQ0UwKCggInBjZl9nZXRfZW5jb2RpbmdzOiIKKyAgICAgICAgICAgICAgICAgICIgSW52YWxpZCBkZWZhdWx0IGNoYXJhY3RlciBzZXQgdG8gJXVcbiIsCisgICAgICAgICAgICAgICAgICBmYWNlLT5kZWZhdWx0Q2hhciApKTsKKworICAgICAgZGVmYXVsdENoYXJSb3cgPSBmYWNlLT5kZWZhdWx0Q2hhciA+PiA4OworICAgICAgZGVmYXVsdENoYXJDb2wgPSBmYWNlLT5kZWZhdWx0Q2hhciAmIDB4RkY7CisgICAgfQorCisgICAgLyogRnJlZVR5cGUgbWFuZGF0ZXMgdGhhdCBnbHlwaCBpbmRleCAwIGlzIHRoZSBgdW5kZWZpbmVkIGdseXBoJywgICovCisgICAgLyogd2hpY2ggUENGIGNhbGxzIHRoZSBgZGVmYXVsdCBjaGFyYWN0ZXInLiAgRm9yIHRoaXMgcmVhc29uLCB3ZSAgICovCisgICAgLyogc3dhcCB0aGUgcG9zaXRpb25zIG9mIGdseXBoIGluZGV4IDAgYW5kIHRoZSBpbmRleCBjb3JyZXNwb25kaW5nICovCisgICAgLyogdG8gYGRlZmF1bHRDaGFyJyBpbiBjYXNlIHRoZXkgYXJlIGRpZmZlcmVudC4gICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBgc3RyZWFtLT5jdXJzb3InIHN0aWxsIHBvaW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmcmFtZTsgKi8KKyAgICAvKiB3ZSBjYW4gdGh1cyBlYXNpbHkgZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIGRlZmF1bHQgY2hhcmFjdGVyICAgKi8KKyAgICBwb3MgPSBzdHJlYW0tPmN1cnNvciArCisgICAgICAgICAgICAyICogKCAoIGRlZmF1bHRDaGFyUm93IC0gZmlyc3RSb3cgKSAqICggbGFzdENvbCAtIGZpcnN0Q29sICsgMSApICsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGFyQ29sIC0gZmlyc3RDb2wgKTsKKworICAgIGlmICggUENGX0JZVEVfT1JERVIoIGZvcm1hdCApID09IE1TQkZpcnN0ICkKKyAgICAgIGRlZmF1bHRDaGFyRW5jb2RpbmdPZmZzZXQgPSBGVF9QRUVLX1VTSE9SVCggcG9zICk7CisgICAgZWxzZQorICAgICAgZGVmYXVsdENoYXJFbmNvZGluZ09mZnNldCA9IEZUX1BFRUtfVVNIT1JUX0xFKCBwb3MgKTsKKworICAgIGlmICggZGVmYXVsdENoYXJFbmNvZGluZ09mZnNldCA+PSBmYWNlLT5ubWV0cmljcyApCisgICAgeworICAgICAgRlRfVFJBQ0UwKCggInBjZl9nZXRfZW5jb2RpbmdzOiIKKyAgICAgICAgICAgICAgICAgICIgSW52YWxpZCBnbHlwaCBpbmRleCBmb3IgZGVmYXVsdCBjaGFyYWN0ZXIsIgorICAgICAgICAgICAgICAgICAgIiBzZXR0aW5nIHRvIHplcm9cbiIgKSk7CisgICAgICBkZWZhdWx0Q2hhckVuY29kaW5nT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIGRlZmF1bHRDaGFyRW5jb2RpbmdPZmZzZXQgKQorICAgIHsKKyAgICAgIC8qIGRvIHRoZSBzd2FwcGluZyAqLworICAgICAgUENGX01ldHJpY1JlYyAgdG1wID0gZmFjZS0+bWV0cmljc1tkZWZhdWx0Q2hhckVuY29kaW5nT2Zmc2V0XTsKKworCisgICAgICBmYWNlLT5tZXRyaWNzW2RlZmF1bHRDaGFyRW5jb2RpbmdPZmZzZXRdID0gZmFjZS0+bWV0cmljc1swXTsKKyAgICAgIGZhY2UtPm1ldHJpY3NbMF0gICAgICAgICAgICAgICAgICAgICAgICAgPSB0bXA7CisgICAgfQorCiAgICAgayA9IDA7CiAgICAgZm9yICggaSA9IGZpcnN0Um93OyBpIDw9IGxhc3RSb3c7IGkrKyApCiAgICAgewpAQCAtMTAyNCw3ICsxMDg0LDcgQEAKICAgICAgIHsKICAgICAgICAgLyogWDExJ3MgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGVxdWl2YWxlbnQgdG8gICovCiAgICAgICAgIC8qIGBGVF9HRVRfU0hPUlQnLCBob3dldmVyIFBDRiBmb250cyB3aXRoIG1vcmUgdGhhbiAzMjc2OCAqLwotICAgICAgICAvKiBjaGFyYWN0ZXJzIChlLmcuIGB1bmlmb250LnBjZicpIGNsZWFybHkgc2hvdyB0aGF0IGFuICAgKi8KKyAgICAgICAgLyogY2hhcmFjdGVycyAoZS5nLiwgYHVuaWZvbnQucGNmJykgY2xlYXJseSBzaG93IHRoYXQgYW4gICovCiAgICAgICAgIC8qIHVuc2lnbmVkIHZhbHVlIGlzIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICBpZiAoIFBDRl9CWVRFX09SREVSKCBmb3JtYXQgKSA9PSBNU0JGaXJzdCApCiAgICAgICAgICAgZW5jb2RpbmdPZmZzZXQgPSBGVF9HRVRfVVNIT1JUKCk7CkBAIC0xMDMzLDEwICsxMDkzLDE1IEBACiAKICAgICAgICAgaWYgKCBlbmNvZGluZ09mZnNldCAhPSAweEZGRkZVICkKICAgICAgICAgewotICAgICAgICAgIGVuY29kaW5nW2tdLmVuYyAgID0gaSAqIDI1NiArIGo7CisgICAgICAgICAgaWYgKCBlbmNvZGluZ09mZnNldCA9PSBkZWZhdWx0Q2hhckVuY29kaW5nT2Zmc2V0ICkKKyAgICAgICAgICAgIGVuY29kaW5nT2Zmc2V0ID0gMDsKKyAgICAgICAgICBlbHNlIGlmICggZW5jb2RpbmdPZmZzZXQgPT0gMCApCisgICAgICAgICAgICBlbmNvZGluZ09mZnNldCA9IGRlZmF1bHRDaGFyRW5jb2RpbmdPZmZzZXQ7CisKKyAgICAgICAgICBlbmNvZGluZ1trXS5lbmMgICA9IGkgKiAyNTZVICsgajsKICAgICAgICAgICBlbmNvZGluZ1trXS5nbHlwaCA9IGVuY29kaW5nT2Zmc2V0OwogCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgY29kZSAlZCAoMHglMDRYKTogaWR4ICVkXG4iLAorICAgICAgICAgIEZUX1RSQUNFNSgoICIgIGNvZGUgJXUgKDB4JTA0WCk6IGlkeCAldVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1trXS5lbmMsIGVuY29kaW5nW2tdLmVuYywgZW5jb2Rpbmdba10uZ2x5cGggKSk7CiAKICAgICAgICAgICBrKys7CkBAIC0xMzk3LDggKzE0NjIsNyBAQAogCiAKICAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTOworICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTDsKIAogICAgICAgaWYgKCBmYWNlLT5hY2NlbC5jb25zdGFudFdpZHRoICkKICAgICAgICAgcm9vdC0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEg7CkBAIC0xNDgyLDE0ICsxNTQ2LDcgQEAKICAgICAgIGVsc2UKICAgICAgICAgcm9vdC0+ZmFtaWx5X25hbWUgPSBOVUxMOwogCi0gICAgICAvKgotICAgICAgICogTm90ZTogV2Ugc2hpZnQgYWxsIGdseXBoIGluZGljZXMgYnkgKzEgc2luY2Ugd2UgbXVzdAotICAgICAgICogcmVzcGVjdCB0aGUgY29udmVudGlvbiB0aGF0IGdseXBoIDAgYWx3YXlzIGNvcnJlc3BvbmRzCi0gICAgICAgKiB0byB0aGUgYG1pc3NpbmcgZ2x5cGgnLgotICAgICAgICoKLSAgICAgICAqIFRoaXMgaW1wbGllcyBidW1waW5nIHRoZSBudW1iZXIgb2YgYGF2YWlsYWJsZScgZ2x5cGhzIGJ5IDEuCi0gICAgICAgKi8KLSAgICAgIHJvb3QtPm51bV9nbHlwaHMgPSAoRlRfTG9uZykoIGZhY2UtPm5tZXRyaWNzICsgMSApOworICAgICAgcm9vdC0+bnVtX2dseXBocyA9IChGVF9Mb25nKWZhY2UtPm5tZXRyaWNzOwogCiAgICAgICByb290LT5udW1fZml4ZWRfc2l6ZXMgPSAxOwogICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHJvb3QtPmF2YWlsYWJsZV9zaXplcywgMSApICkKZGlmZiAtLWdpdCBhL3NyYy9wY2YvcGNmdXRpbC5jIGIvc3JjL3BjZi9wY2Z1dGlsLmMKaW5kZXggMDQ1MWVlOC4uMDQ1YzQyZCAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2Z1dGlsLmMKKysrIGIvc3JjL3BjZi9wY2Z1dGlsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogCiAgIC8qCi0gICAqICBJbnZlcnQgYml0IG9yZGVyIHdpdGhpbiBlYWNoIEJZVEUgb2YgYW4gYXJyYXkuCisgICAqIEludmVydCBiaXQgb3JkZXIgd2l0aGluIGVhY2ggQllURSBvZiBhbiBhcnJheS4KICAgICovCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKQEAgLTU5LDcgKzU5LDcgQEAKIAogCiAgIC8qCi0gICAqICBJbnZlcnQgYnl0ZSBvcmRlciB3aXRoaW4gZWFjaCAxNi1iaXRzIG9mIGFuIGFycmF5LgorICAgKiBJbnZlcnQgYnl0ZSBvcmRlciB3aXRoaW4gZWFjaCAxNi1iaXRzIG9mIGFuIGFycmF5LgogICAgKi8KIAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQpAQCAtNzgsNyArNzgsNyBAQAogICB9CiAKICAgLyoKLSAgICogIEludmVydCBieXRlIG9yZGVyIHdpdGhpbiBlYWNoIDMyLWJpdHMgb2YgYW4gYXJyYXkuCisgICAqIEludmVydCBieXRlIG9yZGVyIHdpdGhpbiBlYWNoIDMyLWJpdHMgb2YgYW4gYXJyYXkuCiAgICAqLwogCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCmRpZmYgLS1naXQgYS9zcmMvcGZyL3Bmci5jIGIvc3JjL3Bmci9wZnIuYwppbmRleCAxNzYwODgyLi4yZDM0NjE1IDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmci5jCisrKyBiL3NyYy9wZnIvcGZyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBmci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQRlIgZHJpdmVyIGNvbXBvbmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBmci5jCisgKgorICogICBGcmVlVHlwZSBQRlIgZHJpdmVyIGNvbXBvbmVudC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmNtYXAuYyBiL3NyYy9wZnIvcGZyY21hcC5jCmluZGV4IDYwNjQzNzguLmQ4M2RjNTggMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyY21hcC5jCisrKyBiL3NyYy9wZnIvcGZyY21hcC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJjbWFwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGNtYXAgaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJjbWFwLmMKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBjbWFwIGhhbmRsaW5nIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmNtYXAuaCBiL3NyYy9wZnIvcGZyY21hcC5oCmluZGV4IGM3MGEwYzguLjZhNDNiZGIgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyY21hcC5oCisrKyBiL3NyYy9wZnIvcGZyY21hcC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJjbWFwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGNtYXAgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJjbWFwLmgKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBjbWFwIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQRlJDTUFQX0hfCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmRyaXZyLmMgYi9zcmMvcGZyL3BmcmRyaXZyLmMKaW5kZXggNmM3ZTUwMS4uNGI4NzA3ZiAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJkcml2ci5jCisrKyBiL3NyYy9wZnIvcGZyZHJpdnIuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcGZyZHJpdnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIFBGUiBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcGZyZHJpdnIuYworICoKKyAqICAgRnJlZVR5cGUgUEZSIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTU3LDEwICs1NywxMCBAQAogICB9CiAKIAotIC8qCi0gICogIFBGUiBNRVRSSUNTIFNFUlZJQ0UKLSAgKgotICAqLworICAvKgorICAgKiBQRlIgTUVUUklDUyBTRVJWSUNFCisgICAqCisgICAqLwogCiAgIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQogICBwZnJfZ2V0X2FkdmFuY2UoIEZUX0ZhY2UgICBwZnJmYWNlLCAgICAgICAvKiBQRlJfRmFjZSAqLwpAQCAtMTQ1LDEwICsxNDUsMTAgQEAKICAgfTsKIAogCi0gLyoKLSAgKiAgU0VSVklDRSBMSVNUCi0gICoKLSAgKi8KKyAgLyoKKyAgICogU0VSVklDRSBMSVNUCisgICAqCisgICAqLwogCiAgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgcGZyX3NlcnZpY2VzW10gPQogICB7CmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmRyaXZyLmggYi9zcmMvcGZyL3BmcmRyaXZyLmgKaW5kZXggY2FiODUyNy4uNmFkYjJmZCAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJkcml2ci5oCisrKyBiL3NyYy9wZnIvcGZyZHJpdnIuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcGZyZHJpdnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhpZ2gtbGV2ZWwgVHlwZSBQRlIgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcGZyZHJpdnIuaAorICoKKyAqICAgSGlnaC1sZXZlbCBUeXBlIFBGUiBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQRlJEUklWUl9IXwpAQCAtMjYsMTQgKzI2LDggQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotI2Vycm9yICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCi0jZW5kaWYKLQotCiAgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX0RyaXZlcl9DbGFzc1JlYyApICBwZnJfZHJpdmVyX2NsYXNzOwogCi0KIEZUX0VORF9IRUFERVIKIAogCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmVycm9yLmggYi9zcmMvcGZyL3BmcmVycm9yLmgKaW5kZXggNzAyN2M4MS4uZjlmZGUzYSAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJlcnJvci5oCisrKyBiL3NyYy9wZnIvcGZyZXJyb3IuaApAQCAtMSwyNiArMSwyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcGZyZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBGUiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcGZyZXJyb3IuaAorICoKKyAqICAgUEZSIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBQRlIgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUEZSIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgUEZSRVJST1JfSF8KICNkZWZpbmUgUEZSRVJST1JfSF8KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyZ2xvYWQuYyBiL3NyYy9wZnIvcGZyZ2xvYWQuYwppbmRleCBiNzk5MDE5Li4wNjcyM2ZmIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcmdsb2FkLmMKKysrIGIvc3JjL3Bmci9wZnJnbG9hZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJnbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGdseXBoIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJnbG9hZC5jCisgKgorICogICBGcmVlVHlwZSBQRlIgZ2x5cGggbG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgInBmcmdsb2FkLmgiCkBAIC0zNTksOSArMzU5LDkgQEAKICAgICAgICAgRlRfVUludCAgZm9ybWF0LCBmb3JtYXRfbG93LCBhcmdzX2Zvcm1hdCA9IDAsIGFyZ3NfY291bnQsIG47CiAKIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAvKiAgcmVhZCBpbnN0cnVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKiByZWFkIGluc3RydWN0aW9uCisgICAgICAgICAqLwogICAgICAgICBQRlJfQ0hFQ0soIDEgKTsKICAgICAgICAgZm9ybWF0ICAgICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKICAgICAgICAgZm9ybWF0X2xvdyA9IGZvcm1hdCAmIDE1OwpAQCAtNDI2LDkgKzQyNiw5IEBACiAgICAgICAgICAgYXJnc19mb3JtYXQgPSBmb3JtYXRfbG93OwogICAgICAgICB9CiAKLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAvKiAgbm93IHJlYWQgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKiBub3cgcmVhZCBhcmd1bWVudHMKKyAgICAgICAgICovCiAgICAgICAgIGN1ciA9IHBvczsKICAgICAgICAgZm9yICggbiA9IDA7IG4gPCBhcmdzX2NvdW50OyBuKysgKQogICAgICAgICB7CkBAIC01MTMsOSArNTEzLDkgQEAKIAogICAgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOwogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgLyogIGZpbmFsbHksIGV4ZWN1dGUgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICogZmluYWxseSwgZXhlY3V0ZSBpbnN0cnVjdGlvbgorICAgICAgICAgKi8KICAgICAgICAgc3dpdGNoICggZm9ybWF0ID4+IDQgKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZ2x5cGggPT4gRVhJVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJnbG9hZC5oIGIvc3JjL3Bmci9wZnJnbG9hZC5oCmluZGV4IDAxZjQ4ZDcuLjZhNWRlMjkgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyZ2xvYWQuaAorKysgYi9zcmMvcGZyL3Bmcmdsb2FkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBmcmdsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQRlIgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBmcmdsb2FkLmgKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBnbHlwaCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBGUkdMT0FEX0hfCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmxvYWQuYyBiL3NyYy9wZnIvcGZybG9hZC5jCmluZGV4IDI3NzZkYTQuLmU5YzAwOTkgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZybG9hZC5jCisrKyBiL3NyYy9wZnIvcGZybG9hZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJsb2FkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJsb2FkLmMKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBsb2FkZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAicGZybG9hZC5oIgpAQCAtMjcsODggKzI3LDg4IEBACiAKIAogICAvKgotICAgKiAgVGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGEgUEZSIGZpbGUgaXMgYXMgZm9sbG93cy4KKyAgICogVGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGEgUEZSIGZpbGUgaXMgYXMgZm9sbG93cy4KICAgICoKLSAgICogICAgUEZSIGhlYWRlcgotICAgKiAgICAgIDU4IGJ5dGVzIChjb250YWlucyBuUGh5c0ZvbnRzKQorICAgKiAgIFBGUiBoZWFkZXIKKyAgICogICAgIDU4IGJ5dGVzIChjb250YWlucyBuUGh5c0ZvbnRzKQogICAgKgotICAgKiAgICBMb2dpY2FsIGZvbnQgZGlyZWN0b3J5IChzaXplIGF0IG1vc3QgMl4xNiBieXRlcykKLSAgICogICAgICAyIGJ5dGVzIChuTG9nRm9udHMpCi0gICAqICAgICAgKyBuTG9nRm9udHMgKiA1IGJ5dGVzCisgICAqICAgTG9naWNhbCBmb250IGRpcmVjdG9yeSAoc2l6ZSBhdCBtb3N0IDJeMTYgYnl0ZXMpCisgICAqICAgICAyIGJ5dGVzIChuTG9nRm9udHMpCisgICAqICAgICArIG5Mb2dGb250cyAqIDUgYnl0ZXMKICAgICoKLSAgICogICAgICAgICA9PT4gICBuTG9nRm9udHMgPD0gMTMxMDYKKyAgICogICAgICAgID09PiAgbkxvZ0ZvbnRzIDw9IDEzMTA2CiAgICAqCi0gICAqICAgIExvZ2ljYWwgZm9udCBzZWN0aW9uIChzaXplIGF0IG1vc3QgMl4yNCBieXRlcykKLSAgICogICAgICBuTG9nRm9udHMgKiBsb2dGb250UmVjb3JkCisgICAqICAgTG9naWNhbCBmb250IHNlY3Rpb24gKHNpemUgYXQgbW9zdCAyXjI0IGJ5dGVzKQorICAgKiAgICAgbkxvZ0ZvbnRzICogbG9nRm9udFJlY29yZAogICAgKgotICAgKiAgICAgIGxvZ0ZvbnRSZWNvcmQgKHNpemUgYXQgbW9zdCAyXjE2IGJ5dGVzKQotICAgKiAgICAgICAgMTIgYnl0ZXMgKGZvbnRNYXRyaXgpCi0gICAqICAgICAgICArIDEgYnl0ZSAoZmxhZ3MpCi0gICAqICAgICAgICArIDAtNSBieXRlcyAoZGVwZW5kaW5nIG9uIGBmbGFncycpCi0gICAqICAgICAgICArIDAtKDErMjU1KigyKzI1NSkpID0gMC02NTUzNiAoZGVwZW5kaW5nIG9uIGBmbGFncycpCi0gICAqICAgICAgICArIDUgYnl0ZXMgKHBoeXNpY2FsIGZvbnQgaW5mbykKLSAgICogICAgICAgICsgMC0xIGJ5dGVzIChkZXBlbmRpbmcgb24gUEZSIGhlYWRlcikKKyAgICogICAgIGxvZ0ZvbnRSZWNvcmQgKHNpemUgYXQgbW9zdCAyXjE2IGJ5dGVzKQorICAgKiAgICAgICAxMiBieXRlcyAoZm9udE1hdHJpeCkKKyAgICogICAgICAgKyAxIGJ5dGUgKGZsYWdzKQorICAgKiAgICAgICArIDAtNSBieXRlcyAoZGVwZW5kaW5nIG9uIGBmbGFncycpCisgICAqICAgICAgICsgMC0oMSsyNTUqKDIrMjU1KSkgPSAwLTY1NTM2IChkZXBlbmRpbmcgb24gYGZsYWdzJykKKyAgICogICAgICAgKyA1IGJ5dGVzIChwaHlzaWNhbCBmb250IGluZm8pCisgICAqICAgICAgICsgMC0xIGJ5dGVzIChkZXBlbmRpbmcgb24gUEZSIGhlYWRlcikKICAgICoKLSAgICogICAgICAgICA9PT4gICBtaW5pbXVtIHNpemUgMTggYnl0ZXMKKyAgICogICAgICAgID09PiAgbWluaW11bSBzaXplIDE4IGJ5dGVzCiAgICAqCi0gICAqICAgIFBoeXNpY2FsIGZvbnQgc2VjdGlvbiAoc2l6ZSBhdCBtb3N0IDJeMjQgYnl0ZXMpCi0gICAqICAgICAgblBoeXNGb250cyAqIChwaHlzRm9udFJlY29yZAotICAgKiAgICAgICAgICAgICAgICAgICAgKyBuQml0bWFwU2l6ZXMgKiBuQm1hcENoYXJzICogYm1hcENoYXJSZWNvcmQpCisgICAqICAgUGh5c2ljYWwgZm9udCBzZWN0aW9uIChzaXplIGF0IG1vc3QgMl4yNCBieXRlcykKKyAgICogICAgIG5QaHlzRm9udHMgKiAocGh5c0ZvbnRSZWNvcmQKKyAgICogICAgICAgICAgICAgICAgICAgKyBuQml0bWFwU2l6ZXMgKiBuQm1hcENoYXJzICogYm1hcENoYXJSZWNvcmQpCiAgICAqCi0gICAqICAgICAgcGh5c0ZvbnRSZWNvcmQgKHNpemUgYXQgbW9zdCAyXjI0IGJ5dGVzKQotICAgKiAgICAgICAgMTQgYnl0ZXMgKGZvbnQgaW5mbykKLSAgICogICAgICAgICsgMSBieXRlIChmbGFncykKLSAgICogICAgICAgICsgMC0yIChkZXBlbmRpbmcgb24gYGZsYWdzJykKLSAgICogICAgICAgICsgMC0/IChzdHJ1Y3R1cmUgdG9vIGNvbXBsaWNhdGVkIHRvIGJlIHNob3duIGhlcmU7IGRlcGVuZGluZyBvbgotICAgKiAgICAgICAgICAgICAgIGBmbGFncyc7IGNvbnRhaW5zIGBuQml0bWFwU2l6ZXMnIGFuZCBgbkJtYXBDaGFycycpCi0gICAqICAgICAgICArIDMgYnl0ZXMgKG5BdXhCeXRlcykKLSAgICogICAgICAgICsgbkF1eEJ5dGVzCi0gICAqICAgICAgICArIDEgYnl0ZSAobkJsdWVWYWx1ZXMpCi0gICAqICAgICAgICArIDIgKiBuQmx1ZVZhbHVlcwotICAgKiAgICAgICAgKyA2IGJ5dGVzIChoaW50aW5nIGRhdGEpCi0gICAqICAgICAgICArIDIgYnl0ZXMgKG5DaGFyYWN0ZXJzKQotICAgKiAgICAgICAgKyBuQ2hhcmFjdGVycyAqICg0LTEwIGJ5dGVzKSAoZGVwZW5kaW5nIG9uIGBmbGFncycpCisgICAqICAgICBwaHlzRm9udFJlY29yZCAoc2l6ZSBhdCBtb3N0IDJeMjQgYnl0ZXMpCisgICAqICAgICAgIDE0IGJ5dGVzIChmb250IGluZm8pCisgICAqICAgICAgICsgMSBieXRlIChmbGFncykKKyAgICogICAgICAgKyAwLTIgKGRlcGVuZGluZyBvbiBgZmxhZ3MnKQorICAgKiAgICAgICArIDAtPyAoc3RydWN0dXJlIHRvbyBjb21wbGljYXRlZCB0byBiZSBzaG93biBoZXJlOyBkZXBlbmRpbmcgb24KKyAgICogICAgICAgICAgICAgIGBmbGFncyc7IGNvbnRhaW5zIGBuQml0bWFwU2l6ZXMnIGFuZCBgbkJtYXBDaGFycycpCisgICAqICAgICAgICsgMyBieXRlcyAobkF1eEJ5dGVzKQorICAgKiAgICAgICArIG5BdXhCeXRlcworICAgKiAgICAgICArIDEgYnl0ZSAobkJsdWVWYWx1ZXMpCisgICAqICAgICAgICsgMiAqIG5CbHVlVmFsdWVzCisgICAqICAgICAgICsgNiBieXRlcyAoaGludGluZyBkYXRhKQorICAgKiAgICAgICArIDIgYnl0ZXMgKG5DaGFyYWN0ZXJzKQorICAgKiAgICAgICArIG5DaGFyYWN0ZXJzICogKDQtMTAgYnl0ZXMpIChkZXBlbmRpbmcgb24gYGZsYWdzJykKICAgICoKLSAgICogICAgICAgICA9PT4gICBtaW5pbXVtIHNpemUgMjcgYnl0ZXMKKyAgICogICAgICAgID09PiAgbWluaW11bSBzaXplIDI3IGJ5dGVzCiAgICAqCi0gICAqICAgICAgYm1hcENoYXJSZWNvcmQKLSAgICogICAgICAgIDQtNyBieXRlcworICAgKiAgICAgYm1hcENoYXJSZWNvcmQKKyAgICogICAgICAgNC03IGJ5dGVzCiAgICAqCi0gICAqICAgIEdseXBoIHByb2dyYW0gc3RyaW5ncyAodGhyZWUgcG9zc2libGUgdHlwZXM6IHNpbXBsZUdwcywgY29tcG91bmRHcHMsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJpdG1hcEdwczsgc2l6ZSBhdCBtb3N0IDJeMjQgYnl0ZXMpCi0gICAqICAgICAgc2ltcGxlR3BzIChzaXplIGF0IG1vc3QgMl4xNiBieXRlcykKLSAgICogICAgICAgIDEgYnl0ZSAoZmxhZ3MpCi0gICAqICAgICAgICAxLTIgYnl0ZXMgKG5bWFldb3J1cywgZGVwZW5kaW5nIG9uIGBmbGFncycpCi0gICAqICAgICAgICAwLSg2NCs1MTIqMikgPSAwLTEwODggYnl0ZXMgKGRlcGVuZGluZyBvbiBgbltYWV1vcnVzJykKLSAgICogICAgICAgIDAtPyAoc3RydWN0dXJlIHRvbyBjb21wbGljYXRlZCB0byBiZSBzaG93biBoZXJlOyBkZXBlbmRpbmcgb24KLSAgICogICAgICAgICAgICAgYGZsYWdzJykKLSAgICogICAgICAgIDEtPyBnbHlwaCBkYXRhIChmYWludGx5IHJlc2VtYmxpbmcgUFMgVHlwZSAxIGNoYXJzdHJpbmdzKQorICAgKiAgIEdseXBoIHByb2dyYW0gc3RyaW5ncyAodGhyZWUgcG9zc2libGUgdHlwZXM6IHNpbXBsZUdwcywgY29tcG91bmRHcHMsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYml0bWFwR3BzOyBzaXplIGF0IG1vc3QgMl4yNCBieXRlcykKKyAgICogICAgIHNpbXBsZUdwcyAoc2l6ZSBhdCBtb3N0IDJeMTYgYnl0ZXMpCisgICAqICAgICAgIDEgYnl0ZSAoZmxhZ3MpCisgICAqICAgICAgIDEtMiBieXRlcyAobltYWV1vcnVzLCBkZXBlbmRpbmcgb24gYGZsYWdzJykKKyAgICogICAgICAgMC0oNjQrNTEyKjIpID0gMC0xMDg4IGJ5dGVzIChkZXBlbmRpbmcgb24gYG5bWFldb3J1cycpCisgICAqICAgICAgIDAtPyAoc3RydWN0dXJlIHRvbyBjb21wbGljYXRlZCB0byBiZSBzaG93biBoZXJlOyBkZXBlbmRpbmcgb24KKyAgICogICAgICAgICAgICBgZmxhZ3MnKQorICAgKiAgICAgICAxLT8gZ2x5cGggZGF0YSAoZmFpbnRseSByZXNlbWJsaW5nIFBTIFR5cGUgMSBjaGFyc3RyaW5ncykKICAgICoKLSAgICogICAgICAgICA9PT4gICBtaW5pbXVtIHNpemUgMyBieXRlcworICAgKiAgICAgICAgPT0+ICBtaW5pbXVtIHNpemUgMyBieXRlcwogICAgKgotICAgKiAgICAgIGNvbXBvdW5kR3BzIChzaXplIGF0IG1vc3QgMl4xNiBieXRlcykKLSAgICogICAgICAgIDEgYnl0ZSAobkVsZW1lbnRzIDw9IDYzLCBmbGFncykKLSAgICogICAgICAgICsgMC0oMSsyNTUqKDIrMjU1KSkgPSAwLTY1NTM2IChkZXBlbmRpbmcgb24gYGZsYWdzJykKLSAgICogICAgICAgICsgbkVsZW1lbnRzICogKDYtMTQgYnl0ZXMpCisgICAqICAgICBjb21wb3VuZEdwcyAoc2l6ZSBhdCBtb3N0IDJeMTYgYnl0ZXMpCisgICAqICAgICAgIDEgYnl0ZSAobkVsZW1lbnRzIDw9IDYzLCBmbGFncykKKyAgICogICAgICAgKyAwLSgxKzI1NSooMisyNTUpKSA9IDAtNjU1MzYgKGRlcGVuZGluZyBvbiBgZmxhZ3MnKQorICAgKiAgICAgICArIG5FbGVtZW50cyAqICg2LTE0IGJ5dGVzKQogICAgKgotICAgKiAgICAgIGJpdG1hcEdwcyAoc2l6ZSBhdCBtb3N0IDJeMTYgYnl0ZXMpCi0gICAqICAgICAgICAxIGJ5dGUgKGZsYWdzKQotICAgKiAgICAgICAgMy0xMyBieXRlcyAocG9zaXRpb24gaW5mbywgZGVwZW5kaW5nIG9uIGBmbGFncycpCi0gICAqICAgICAgICAwLT8gYml0bWFwIGRhdGEKKyAgICogICAgIGJpdG1hcEdwcyAoc2l6ZSBhdCBtb3N0IDJeMTYgYnl0ZXMpCisgICAqICAgICAgIDEgYnl0ZSAoZmxhZ3MpCisgICAqICAgICAgIDMtMTMgYnl0ZXMgKHBvc2l0aW9uIGluZm8sIGRlcGVuZGluZyBvbiBgZmxhZ3MnKQorICAgKiAgICAgICAwLT8gYml0bWFwIGRhdGEKICAgICoKLSAgICogICAgICAgICA9PT4gICBtaW5pbXVtIHNpemUgNCBieXRlcworICAgKiAgICAgICAgPT0+ICBtaW5pbXVtIHNpemUgNCBieXRlcwogICAgKgotICAgKiAgICBQRlIgdHJhaWxlcgotICAgKiAgICAgICAgOCBieXRlcworICAgKiAgIFBGUiB0cmFpbGVyCisgICAqICAgICAgIDggYnl0ZXMKICAgICoKICAgICoKLSAgICogPT0+ICAgbWluaW11bSBzaXplIG9mIGEgdmFsaWQgUEZSOgotICAgKiAgICAgICAgIDU4IChoZWFkZXIpCi0gICAqICAgICAgICAgKyAyIChuTG9nRm9udHMpCi0gICAqICAgICAgICAgKyAyNyAoMSBwaHlzRm9udFJlY29yZCkKLSAgICogICAgICAgICArIDggKHRyYWlsZXIpCi0gICAqICAgICAgICAtLS0tLQotICAgKiAgICAgICAgIDk1IGJ5dGVzCisgICAqID09PiAgbWluaW11bSBzaXplIG9mIGEgdmFsaWQgUEZSOgorICAgKiAgICAgICAgNTggKGhlYWRlcikKKyAgICogICAgICAgICsgMiAobkxvZ0ZvbnRzKQorICAgKiAgICAgICAgKyAyNyAoMSBwaHlzRm9udFJlY29yZCkKKyAgICogICAgICAgICsgOCAodHJhaWxlcikKKyAgICogICAgICAgLS0tLS0KKyAgICogICAgICAgIDk1IGJ5dGVzCiAgICAqCiAgICAqLwogCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmxvYWQuaCBiL3NyYy9wZnIvcGZybG9hZC5oCmluZGV4IDM2ZTgwOWEuLmVmMjk5NzMgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZybG9hZC5oCisrKyBiL3NyYy9wZnIvcGZybG9hZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJsb2FkLmgKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBGUkxPQURfSF8KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyb2Jqcy5jIGIvc3JjL3Bmci9wZnJvYmpzLmMKaW5kZXggNzM3Yjk3Yi4uZTUxYTg0MiAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJvYmpzLmMKKysrIGIvc3JjL3Bmci9wZnJvYmpzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBmcm9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQRlIgb2JqZWN0IG1ldGhvZHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBmcm9ianMuYworICoKKyAqICAgRnJlZVR5cGUgUEZSIG9iamVjdCBtZXRob2RzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgInBmcm9ianMuaCIKZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyb2Jqcy5oIGIvc3JjL3Bmci9wZnJvYmpzLmgKaW5kZXggNTljNzA5Zi4uZTAzNTczZiAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJvYmpzLmgKKysrIGIvc3JjL3Bmci9wZnJvYmpzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBmcm9ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQRlIgb2JqZWN0IG1ldGhvZHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBmcm9ianMuaAorICoKKyAqICAgRnJlZVR5cGUgUEZSIG9iamVjdCBtZXRob2RzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQRlJPQkpTX0hfCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcnNiaXQuYyBiL3NyYy9wZnIvcGZyc2JpdC5jCmluZGV4IGJhOTA5ZGQuLmY1ZDMwNzcgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyc2JpdC5jCisrKyBiL3NyYy9wZnIvcGZyc2JpdC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJzYml0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGJpdG1hcCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJzYml0LmMKKyAqCisgKiAgIEZyZWVUeXBlIFBGUiBiaXRtYXAgbG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgInBmcnNiaXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyc2JpdC5oIGIvc3JjL3Bmci9wZnJzYml0LmgKaW5kZXggMDdiMjdiYy4uNzAwMmRmNCAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJzYml0LmgKKysrIGIvc3JjL3Bmci9wZnJzYml0LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBmcnNiaXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQRlIgYml0bWFwIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBmcnNiaXQuaAorICoKKyAqICAgRnJlZVR5cGUgUEZSIGJpdG1hcCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBGUlNCSVRfSF8KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZydHlwZXMuaCBiL3NyYy9wZnIvcGZydHlwZXMuaAppbmRleCAwNThkNmFhLi43OTQ3MDZiIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcnR5cGVzLmgKKysrIGIvc3JjL3Bmci9wZnJ0eXBlcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwZnJ0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUEZSIGRhdGEgc3RydWN0dXJlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwZnJ0eXBlcy5oCisgKgorICogICBGcmVlVHlwZSBQRlIgZGF0YSBzdHJ1Y3R1cmVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBGUlRZUEVTX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvYWZtcGFyc2UuYyBiL3NyYy9wc2F1eC9hZm1wYXJzZS5jCmluZGV4IDBjMzNkNTkuLjA0YzE5MWYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9hZm1wYXJzZS5jCisrKyBiL3NyYy9wc2F1eC9hZm1wYXJzZS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBhZm1wYXJzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQUZNIHBhcnNlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBhZm1wYXJzZS5jCisgKgorICogICBBRk0gcGFyc2VyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMjgsMTMgKzI4LDEzIEBACiAjaW5jbHVkZSAicHNhdXhlcnIuaCIKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFGTV9TdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhlIHVzZSBvZiBBRk1fU3RyZWFtIGlzIGxhcmdlbHkgaW5zcGlyZWQgYnkgcGFyc2VBRk0uW2NoXSBmcm9tIHQxbGliLiAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQUZNX1N0cmVhbQorICAgKgorICAgKiBUaGUgdXNlIG9mIEFGTV9TdHJlYW0gaXMgbGFyZ2VseSBpbnNwaXJlZCBieSBwYXJzZUFGTS5bY2hdIGZyb20gdDFsaWIuCisgICAqCisgICAqLwogCiAgIGVudW0KICAgewpAQCAtMTkzLDExICsxOTMsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBRk1fUGFyc2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQUZNX1BhcnNlcgorICAgKgorICAgKi8KIAogICAvKiBhbGwga2V5cyBkZWZpbmVkIGluIENoLiA3LTEwIG9mIDUwMDQuQUZNX1NwZWMucGRmICovCiAgIHR5cGVkZWYgZW51bSAgQUZNX1Rva2VuXwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L2FmbXBhcnNlLmggYi9zcmMvcHNhdXgvYWZtcGFyc2UuaAppbmRleCA4NmY4NTJhLi4yZmNjODBlIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvYWZtcGFyc2UuaAorKysgYi9zcmMvcHNhdXgvYWZtcGFyc2UuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgYWZtcGFyc2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFGTSBwYXJzZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWZtcGFyc2UuaAorICoKKyAqICAgQUZNIHBhcnNlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgQUZNUEFSU0VfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9jZmZkZWNvZGUuYyBiL3NyYy9wc2F1eC9jZmZkZWNvZGUuYwppbmRleCA4MGQ2MjJjLi4wMjRlYjljIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvY2ZmZGVjb2RlLmMKKysrIGIvc3JjL3BzYXV4L2NmZmRlY29kZS5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZkZWNvZGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZkZWNvZGUuYworICoKKyAqICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDE3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI4LDEyICsyOCwxMiBAQAogI2luY2x1ZGUgInBzYXV4ZXJyLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2ZmZGVjb2RlCiAKQEAgLTM3OCwyMyArMzc4LDI2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjZmZfY29tcHV0ZV9iaWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRlcyB0aGUgYmlhcyB2YWx1ZSBpbiBkZXBlbmRlbmNlIG9mIHRoZSBudW1iZXIgb2YgZ2x5cGggICAgICAgKi8KLSAgLyogICAgc3Vicm91dGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaW5fY2hhcnN0cmluZ190eXBlIDo6IFRoZSBgQ2hhcnN0cmluZ1R5cGUnIHZhbHVlIG9mIHRoZSB0b3AgRElDVCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX3N1YnJzICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGggc3Vicm91dGluZXMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGJpYXMgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2ZmX2NvbXB1dGVfYmlhcworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZXMgdGhlIGJpYXMgdmFsdWUgaW4gZGVwZW5kZW5jZSBvZiB0aGUgbnVtYmVyIG9mIGdseXBoCisgICAqICAgc3Vicm91dGluZXMuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBpbl9jaGFyc3RyaW5nX3R5cGUgOjoKKyAgICogICAgIFRoZSBgQ2hhcnN0cmluZ1R5cGUnIHZhbHVlIG9mIHRoZSB0b3AgRElDVAorICAgKiAgICAgZGljdGlvbmFyeS4KKyAgICoKKyAgICogICBudW1fc3VicnMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgZ2x5cGggc3Vicm91dGluZXMuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgVGhlIGJpYXMgdmFsdWUuCisgICAqLwogICBzdGF0aWMgRlRfSW50CiAgIGNmZl9jb21wdXRlX2JpYXMoIEZUX0ludCAgIGluX2NoYXJzdHJpbmdfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgbnVtX3N1YnJzICkKQEAgLTQ2NCwyOCArNDY3LDMyIEBACiAKICNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGFyc2VzIGEgZ2l2ZW4gVHlwZSAyIGNoYXJzdHJpbmdzIHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVjb2RlciAgICAgICAgIDo6IFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcnN0cmluZ19iYXNlIDo6IFRoZSBiYXNlIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyc3RyaW5nX2xlbiAgOjogVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluX2RpY3QgICAgICAgICA6OiBTZXQgdG8gMSBpZiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0b3Agb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBESUNUIChuZWVkZWQgZm9yIE11bHRpcGxlIE1hc3RlciBDRkZzKS4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFBhcnNlcyBhIGdpdmVuIFR5cGUgMiBjaGFyc3RyaW5ncyBwcm9ncmFtLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZGVjb2RlciA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgVHlwZSAxIGRlY29kZXIuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBjaGFyc3RyaW5nX2Jhc2UgOjoKKyAgICogICAgIFRoZSBiYXNlIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4KKyAgICoKKyAgICogICBjaGFyc3RyaW5nX2xlbiA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uCisgICAqCisgICAqICAgaW5fZGljdCA6OgorICAgKiAgICAgU2V0IHRvIDEgaWYgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG9wIG9yCisgICAqICAgICBwcml2YXRlIERJQ1QgKG5lZWRlZCBmb3IgTXVsdGlwbGUgTWFzdGVyIENGRnMpLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLApAQCAtNTQzLDEwICs1NTAsMTAgQEAKICAgICAgIEZUX0J5dGUgICAgICAgdjsKIAogCi0gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiBEZWNvZGUgb3BlcmF0b3Igb3Igb3BlcmFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgKgorICAgICAgICogRGVjb2RlIG9wZXJhdG9yIG9yIG9wZXJhbmQKKyAgICAgICAqLwogICAgICAgdiA9ICppcCsrOwogICAgICAgaWYgKCB2ID49IDMyIHx8IHYgPT0gMjggKQogICAgICAgewpAQCAtMjI1MSwyOCArMjI1OCwzNCBAQAogI2VuZGlmIC8qIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNmZl9kZWNvZGVyX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluaXRpYWxpemVzIGEgZ2l2ZW4gZ2x5cGggZGVjb2Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlY29kZXIgOjogQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGluaXRpYWxpemUuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSAgICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzbG90ICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhpbnRpbmcgICA6OiBXaGV0aGVyIGhpbnRpbmcgaXMgYWN0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludF9tb2RlIDo6IFRoZSBoaW50aW5nIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGNmZl9kZWNvZGVyX2luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemVzIGEgZ2l2ZW4gZ2x5cGggZGVjb2Rlci4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGRlY29kZXIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBpbml0aWFsaXplLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QuCisgICAqCisgICAqICAgc2xvdCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LgorICAgKgorICAgKiAgIGhpbnRpbmcgOjoKKyAgICogICAgIFdoZXRoZXIgaGludGluZyBpcyBhY3RpdmUuCisgICAqCisgICAqICAgaGludF9tb2RlIDo6CisgICAqICAgICBUaGUgaGludGluZyBtb2RlLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgY2ZmX2RlY29kZXJfaW5pdCggQ0ZGX0RlY29kZXIqICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9jZmZkZWNvZGUuaCBiL3NyYy9wc2F1eC9jZmZkZWNvZGUuaAppbmRleCAwZDRmNWZlLi5iNDAwM2JjIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvY2ZmZGVjb2RlLmgKKysrIGIvc3JjL3BzYXV4L2NmZmRlY29kZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZmZkZWNvZGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZmZkZWNvZGUuaAorICoKKyAqICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDE3LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIENGRkRFQ09ERV9IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzYXJyc3QuYyBiL3NyYy9wc2F1eC9wc2FycnN0LmMKaW5kZXggYTg3ODA5NC4uMDExODAzYiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXJyc3QuYworKysgYi9zcmMvcHNhdXgvcHNhcnJzdC5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2FycnN0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBjb2RlIGZvciBBcnJheSBTdGFja3MgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzYXJyc3QuYworICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBBcnJheSBTdGFja3MgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJwc2Z0LmgiCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNhcnJzdC5oIGIvc3JjL3BzYXV4L3BzYXJyc3QuaAppbmRleCBiMzU2OGViLi4wOTg2MTdiIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNhcnJzdC5oCisrKyBiL3NyYy9wc2F1eC9wc2FycnN0LmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzYXJyc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBZG9iZSdzIGNvZGUgZm9yIEFycmF5IFN0YWNrcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNhcnJzdC5oCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIEFycmF5IFN0YWNrcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0FSUlNUX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNhdXguYyBiL3NyYy9wc2F1eC9wc2F1eC5jCmluZGV4IGZiNDQ3ZmMuLjM3MTg4NzYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2F1eC5jCisrKyBiL3NyYy9wc2F1eC9wc2F1eC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2F1eC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2F1eC5jCisgKgorICogICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eGVyci5oIGIvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKaW5kZXggY2MzM2ZkMi4uMzA2MmFlNSAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKKysrIGIvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKQEAgLTEsMjcgKzEsMjcgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzYXV4ZXJyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQUyBhdXhpbGlhcnkgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzYXV4ZXJyLmgKKyAqCisgKiAgIFBTIGF1eGlsaWFyeSBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFBTIGF1eGlsaWFyeSBtb2R1bGUgZXJyb3IgZW51bWVyYXRpb24gKi8KLSAgLyogY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUFMgYXV4aWxpYXJ5IG1vZHVsZSBlcnJvciBlbnVtZXJhdGlvbgorICAgKiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIFBTQVVYRVJSX0hfCiAjZGVmaW5lIFBTQVVYRVJSX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNhdXhtb2QuYyBiL3NyYy9wc2F1eC9wc2F1eG1vZC5jCmluZGV4IGVlNDk3MDguLjQxY2UyOTQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2F1eG1vZC5jCisrKyBiL3NyYy9wc2F1eC9wc2F1eG1vZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2F1eG1vZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2F1eG1vZC5jCisgKgorICogICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAwLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eG1vZC5oIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKaW5kZXggZjMwOTc4Zi4uOWQ4OTRmNyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4bW9kLmgKKysrIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzYXV4bW9kLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYXRpb24pLiAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzYXV4bW9kLmgKKyAqCisgKiAgIEZyZWVUeXBlIGF1eGlsaWFyeSBQb3N0U2NyaXB0IG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNBVVhNT0RfSF8KQEAgLTI4LDEwICsyOCw2IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAidGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgotI2VuZGlmCi0KIAogICBGVF9DQUxMQkFDS19UQUJMRQogICBjb25zdCBDRkZfQnVpbGRlcl9GdW5jc1JlYyAgY2ZmX2J1aWxkZXJfZnVuY3M7CmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNibHVlcy5jIGIvc3JjL3BzYXV4L3BzYmx1ZXMuYwppbmRleCBhZTM5ZDAzLi5lNDRmM2M3IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNibHVlcy5jCisrKyBiL3NyYy9wc2F1eC9wc2JsdWVzLmMKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzYmx1ZXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIEJsdWUgWm9uZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNibHVlcy5jCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIEJsdWUgWm9uZXMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJwc2Z0LmgiCkBAIC00NCwxMiArNDQsMTIgQEAKICNpbmNsdWRlICJwc2ZvbnQuaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jZjJibHVlcwogCkBAIC00NTIsMTMgKzQ1MiwxMyBAQAogICAgKiB6b25lcyBpbiB0aGUgc2FtZSBwYXNzIChzZWUgYEJsdWVMb2NrJykuICBJZiBhIGhpbnQgaXMgY2FwdHVyZWQsCiAgICAqIHJldHVybiB0cnVlIGFuZCBwb3NpdGlvbiB0aGUgZWRnZShzKSBpbiBvbmUgb2YgMyB3YXlzOgogICAgKgotICAgKiAgMSkgSWYgYEJsdWVTY2FsZScgc3VwcHJlc3NlcyBvdmVyc2hvb3QsIHBvc2l0aW9uIHRoZSBjYXB0dXJlZCBlZGdlCi0gICAqICAgICBhdCB0aGUgZmxhdCBlZGdlIG9mIHRoZSB6b25lLgotICAgKiAgMikgSWYgb3ZlcnNob290IGlzIG5vdCBzdXBwcmVzc2VkIGFuZCBgQmx1ZVNoaWZ0JyByZXF1aXJlcwotICAgKiAgICAgb3ZlcnNob290LCBwb3NpdGlvbiB0aGUgY2FwdHVyZWQgZWRnZSBhIG1pbmltdW0gb2YgMSBkZXZpY2UgcGl4ZWwKLSAgICogICAgIGZyb20gdGhlIGZsYXQgZWRnZS4KLSAgICogIDMpIElmIG92ZXJzaG9vdCBpcyBub3Qgc3VwcHJlc3NlZCBvciByZXF1aXJlZCwgcG9zaXRpb24gdGhlIGNhcHR1cmVkCi0gICAqICAgICBlZGdlIGF0IHRoZSBuZWFyZXN0IGRldmljZSBwaXhlbC4KKyAgICogMSkgSWYgYEJsdWVTY2FsZScgc3VwcHJlc3NlcyBvdmVyc2hvb3QsIHBvc2l0aW9uIHRoZSBjYXB0dXJlZCBlZGdlCisgICAqICAgIGF0IHRoZSBmbGF0IGVkZ2Ugb2YgdGhlIHpvbmUuCisgICAqIDIpIElmIG92ZXJzaG9vdCBpcyBub3Qgc3VwcHJlc3NlZCBhbmQgYEJsdWVTaGlmdCcgcmVxdWlyZXMKKyAgICogICAgb3ZlcnNob290LCBwb3NpdGlvbiB0aGUgY2FwdHVyZWQgZWRnZSBhIG1pbmltdW0gb2YgMSBkZXZpY2UgcGl4ZWwKKyAgICogICAgZnJvbSB0aGUgZmxhdCBlZGdlLgorICAgKiAzKSBJZiBvdmVyc2hvb3QgaXMgbm90IHN1cHByZXNzZWQgb3IgcmVxdWlyZWQsIHBvc2l0aW9uIHRoZSBjYXB0dXJlZAorICAgKiAgICBlZGdlIGF0IHRoZSBuZWFyZXN0IGRldmljZSBwaXhlbC4KICAgICoKICAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNibHVlcy5oIGIvc3JjL3BzYXV4L3BzYmx1ZXMuaAppbmRleCAyNWVmNjg0Li41NWZiODhlIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNibHVlcy5oCisrKyBiL3NyYy9wc2F1eC9wc2JsdWVzLmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzYmx1ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIEJsdWUgWm9uZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNibHVlcy5oCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIEJsdWUgWm9uZXMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICAgLyoKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2NvbnYuYyBiL3NyYy9wc2F1eC9wc2NvbnYuYwppbmRleCBhMDMzODUwLi43NDI3M2Y3IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNjb252LmMKKysrIGIvc3JjL3BzYXV4L3BzY29udi5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2NvbnYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU29tZSBjb252ZW5pZW5jZSBjb252ZXJzaW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2NvbnYuYworICoKKyAqICAgU29tZSBjb252ZW5pZW5jZSBjb252ZXJzaW9ucyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjQsMTIgKzI0LDEyIEBACiAjaW5jbHVkZSAicHNhdXhlcnIuaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9wc2NvbnYKIApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzY29udi5oIGIvc3JjL3BzYXV4L3BzY29udi5oCmluZGV4IGQ2NDNmZmMuLjI0NzI5NDIgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2NvbnYuaAorKysgYi9zcmMvcHNhdXgvcHNjb252LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzY29udi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBTb21lIGNvbnZlbmllbmNlIGNvbnZlcnNpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzY29udi5oCisgKgorICogICBTb21lIGNvbnZlbmllbmNlIGNvbnZlcnNpb25zIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0NPTlZfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2Vycm9yLmMgYi9zcmMvcHNhdXgvcHNlcnJvci5jCmluZGV4IDkxNjllNTIuLjk4Y2ViY2YgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2Vycm9yLmMKKysrIGIvc3JjL3BzYXV4L3BzZXJyb3IuYwpAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNlcnJvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2Vycm9yLmMKKyAqCisgKiAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJwc2Z0LmgiCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNlcnJvci5oIGIvc3JjL3BzYXV4L3BzZXJyb3IuaAppbmRleCAxM2Q1MjA2Li5iMjE1NmIzIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNlcnJvci5oCisrKyBiL3NyYy9wc2F1eC9wc2Vycm9yLmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzZXJyb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBZG9iZSdzIGNvZGUgZm9yIGVycm9yIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNlcnJvci5oCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIGVycm9yIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IKKyAqIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkCisgKiBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZQorICogdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLAorICogTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMKKyAqIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkKKyAqIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvcgorICogIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgKiByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50CisgKiBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZAorICogb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlCisgKiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseQorICogaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpcgorICogY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzCisgKiBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorICogKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKKyAqIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMKKyAqIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgKiBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YKKyAqIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKyAqCisgKiBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91CisgKiBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLAorICogYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBTRVJST1JfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2ZpeGVkLmggYi9zcmMvcHNhdXgvcHNmaXhlZC5oCmluZGV4IDIxOTU4OWUuLmZkMzQ2MGYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2ZpeGVkLmgKKysrIGIvc3JjL3BzYXV4L3BzZml4ZWQuaApAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNmaXhlZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgRml4ZWQgUG9pbnQgTWF0aGVtYXRpY3MgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2ZpeGVkLmgKKyAqCisgKiAgIEFkb2JlJ3MgY29kZSBmb3IgRml4ZWQgUG9pbnQgTWF0aGVtYXRpY3MgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0ZJWEVEX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNmb250LmMgYi9zcmMvcHNhdXgvcHNmb250LmMKaW5kZXggZGRlNjdhNy4uYTdlNzQzZCAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzZm9udC5jCisrKyBiL3NyYy9wc2F1eC9wc2ZvbnQuYwpAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNmb250LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZm9udCBpbnN0YW5jZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2ZvbnQuYworICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBmb250IGluc3RhbmNlcyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNmb250LmggYi9zcmMvcHNhdXgvcHNmb250LmgKaW5kZXggZTYxMWFjNC4uOGZiYWNiYiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzZm9udC5oCisrKyBiL3NyYy9wc2F1eC9wc2ZvbnQuaApAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNmb250LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZm9udCBpbnN0YW5jZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2ZvbnQuaAorICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBmb250IGluc3RhbmNlcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0ZPTlRfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2Z0LmMgYi9zcmMvcHNhdXgvcHNmdC5jCmluZGV4IDFmNzUwMTcuLjU0YmU0NjggMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2Z0LmMKKysrIGIvc3JjL3BzYXV4L3BzZnQuYwpAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNmdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEdsdWUgQ29tcG9uZW50IHRvIEFkb2JlJ3MgSW50ZXJwcmV0ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2Z0LmMKKyAqCisgKiAgIEZyZWVUeXBlIEdsdWUgQ29tcG9uZW50IHRvIEFkb2JlJ3MgSW50ZXJwcmV0ZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJwc2Z0LmgiCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjbGllbnQgb3V0bGluZTsgICAqLwotICAvKiBGcmVlVHlwZSB1c2VzIGNvb3JkaW5hdGVzIGluIDI2LjYgZm9ybWF0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY2xpZW50IG91dGxpbmU7CisgICAqIEZyZWVUeXBlIHVzZXMgY29vcmRpbmF0ZXMgaW4gMjYuNiBmb3JtYXQKKyAgICoKKyAgICovCiAKICAgc3RhdGljIHZvaWQKICAgY2YyX2J1aWxkZXJfbW92ZVRvKCBDRjJfT3V0bGluZUNhbGxiYWNrcyAgICAgIGNhbGxiYWNrcywKQEAgLTc2NywxMyArNzY3LDE0IEBACiAgIGNmMl9mcmVlVDFTZWFjQ29tcG9uZW50KCBQU19EZWNvZGVyKiAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICBidWYgKQogICB7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorCiAgICAgVDFfRmFjZSAgZmFjZTsKICAgICBGVF9EYXRhICBkYXRhOwogCiAKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKIAotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKICAgICBmYWNlID0gKFQxX0ZhY2UpZGVjb2Rlci0+YnVpbGRlci5mYWNlOwogCiAgICAgZGF0YS5wb2ludGVyID0gYnVmLT5zdGFydDsKQEAgLTc4Myw3ICs3ODQsMTMgQEAKICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmZyZWVfZ2x5cGhfZGF0YSgKICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5vYmplY3QsCiAgICAgICAgICZkYXRhICk7Ci0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworCisjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLworCisgICAgRlRfVU5VU0VEKCBkZWNvZGVyICk7CisgICAgRlRfVU5VU0VEKCBidWYgKTsKKworI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCiAgIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNmdC5oIGIvc3JjL3BzYXV4L3BzZnQuaAppbmRleCBhYjE3MjExLi40YzkzMGYwIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNmdC5oCisrKyBiL3NyYy9wc2F1eC9wc2Z0LmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzZnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBHbHVlIENvbXBvbmVudCB0byBBZG9iZSdzIEludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNmdC5oCisgKgorICogICBGcmVlVHlwZSBHbHVlIENvbXBvbmVudCB0byBBZG9iZSdzIEludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0ZUX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNnbHVlLmggYi9zcmMvcHNhdXgvcHNnbHVlLmgKaW5kZXggNTU0NWUxMi4uMDIyYWFmYiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzZ2x1ZS5oCisrKyBiL3NyYy9wc2F1eC9wc2dsdWUuaApAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNnbHVlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3Igc2hhcmVkIHN0dWZmIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2dsdWUuaAorICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBzaGFyZWQgc3R1ZmYgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0dMVUVfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2hpbnRzLmMgYi9zcmMvcHNhdXgvcHNoaW50cy5jCmluZGV4IDM2MTUxOTYuLjQ1NjBmYjggMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2hpbnRzLmMKKysrIGIvc3JjL3BzYXV4L3BzaGludHMuYwpAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNoaW50cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgaGFuZGxpbmcgQ0ZGIGhpbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hpbnRzLmMKKyAqCisgKiAgIEFkb2JlJ3MgY29kZSBmb3IgaGFuZGxpbmcgQ0ZGIGhpbnRzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IKKyAqIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkCisgKiBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZQorICogdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLAorICogTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMKKyAqIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkKKyAqIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvcgorICogIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgKiByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50CisgKiBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZAorICogb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlCisgKiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseQorICogaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpcgorICogY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzCisgKiBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorICogKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKKyAqIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMKKyAqIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgKiBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YKKyAqIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKyAqCisgKiBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91CisgKiBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLAorICogYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAicHNmdC5oIgpAQCAtNDUsMTIgKzQ1LDEyIEBACiAjaW5jbHVkZSAicHNpbnRycC5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmMmhpbnRzCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2hpbnRzLmggYi9zcmMvcHNhdXgvcHNoaW50cy5oCmluZGV4IDkyZTM3ZTkuLjMxYTgyMzAgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc2hpbnRzLmgKKysrIGIvc3JjL3BzYXV4L3BzaGludHMuaApAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNoaW50cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgaGFuZGxpbmcgQ0ZGIGhpbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hpbnRzLmgKKyAqCisgKiAgIEFkb2JlJ3MgY29kZSBmb3IgaGFuZGxpbmcgQ0ZGIGhpbnRzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IKKyAqIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkCisgKiBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZQorICogdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLAorICogTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMKKyAqIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkKKyAqIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvcgorICogIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgKiByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50CisgKiBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZAorICogb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlCisgKiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseQorICogaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpcgorICogY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzCisgKiBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorICogKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKKyAqIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMKKyAqIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgKiBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YKKyAqIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKyAqCisgKiBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91CisgKiBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLAorICogYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBTSElOVF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzaW50cnAuYyBiL3NyYy9wc2F1eC9wc2ludHJwLmMKaW5kZXggZGE1YThkYS4uMTQ1YjY3MiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzaW50cnAuYworKysgYi9zcmMvcHNhdXgvcHNpbnRycC5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2ludHJwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBDRkYgSW50ZXJwcmV0ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzaW50cnAuYworICoKKyAqICAgQWRvYmUncyBDRkYgSW50ZXJwcmV0ZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJwc2Z0LmgiCkBAIC01MiwxMiArNTIsMTIgQEAKICNpbmNsdWRlICJ0MWRlY29kZS5oIiAvKiBmb3IgdDEgc2VhYyAgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmMmludGVycAogCkBAIC02NjMsNiArNjYzLDcgQEAKICAgICAgICAgICAvKiBTa2lwIG91dGxpbmUgY29tbWFuZHMgZmlyc3QgdGltZSByb3VuZC4gICAgICAgKi8KICAgICAgICAgICAvKiBgZW5kY2hhcicgd2lsbCB0cmlnZ2VyIGluaXRpYWwgaGludG1hcCBidWlsZCAgKi8KICAgICAgICAgICAvKiBhbmQgcmV3aW5kIHRoZSBjaGFyc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIDxvdXRsaW5lIGNvbW1hbmQgc2tpcHBlZD5cbiIgKSk7CiAgICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTE2NDQsMTYgKzE2NDUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgc3Vicl9ubyA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKICAgICAgICAgICAgICAgICAgICAgYXJnX2NudCA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKIAotICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBhbGwgb3BlcmFuZHMgdG8gY2FsbG90aGVyc3ViciBmcm9tIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogZm9yIGhhbmRsZWQgb3RoZXJzdWJycywgd2hlcmUgd2Uga25vdyB0aGUgbnVtYmVyIG9mICovCi0gICAgICAgICAgICAgICAgICAgIC8qIGFyZ3VtZW50cywgd2UgaW5jcmVhc2UgdGhlIHN0YWNrIGJ5IHRoZSB2YWx1ZSBvZiAgICAqLwotICAgICAgICAgICAgICAgICAgICAvKiBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIC8qIGZvciB1bmhhbmRsZWQgb3RoZXJzdWJycyB0aGUgZm9sbG93aW5nIHBvcHMgYWRqdXN0ICAqLwotICAgICAgICAgICAgICAgICAgICAvKiB0aGUgc3RhY2sgcG9pbnRlciBhcyBuZWNlc3NhcnkgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAqIHJlbW92ZSBhbGwgb3BlcmFuZHMgdG8gY2FsbG90aGVyc3ViciBmcm9tIHRoZSBzdGFjaworICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgKiBmb3IgaGFuZGxlZCBvdGhlcnN1YnJzLCB3aGVyZSB3ZSBrbm93IHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICogYXJndW1lbnRzLCB3ZSBpbmNyZWFzZSB0aGUgc3RhY2sgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAqIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250CisgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAqIGZvciB1bmhhbmRsZWQgb3RoZXJzdWJycyB0aGUgZm9sbG93aW5nIHBvcHMgYWRqdXN0CisgICAgICAgICAgICAgICAgICAgICAqIHRoZSBzdGFjayBwb2ludGVyIGFzIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwogICAgICAgICAgICAgICAgICAgICBGVF9BU1NFUlQoIChDRjJfVUludClhcmdfY250IDw9IGNvdW50ICk7CmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNpbnRycC5oIGIvc3JjL3BzYXV4L3BzaW50cnAuaAppbmRleCA0NzkwYWFhLi42NjljMDljIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNpbnRycC5oCisrKyBiL3NyYy9wc2F1eC9wc2ludHJwLmgKQEAgLTEsMzkgKzEsMzkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzaW50cnAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBZG9iZSdzIENGRiBJbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KLS8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCi0vKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLwotLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KLS8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLwotLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KLS8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCi0vKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLwotLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KLS8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCi0vKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLwotLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KLS8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCi0vKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLwotLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KLS8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCi0vKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLwotLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KLS8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCi0vKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCi0vKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KLS8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNpbnRycC5oCisgKgorICogICBBZG9iZSdzIENGRiBJbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU0lOVFJQX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNvYmpzLmMgYi9zcmMvcHNhdXgvcHNvYmpzLmMKaW5kZXggZjU0YmM3ZS4uMzZlZTY2MyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3Bzb2Jqcy5jCisrKyBiL3NyYy9wc2F1eC9wc29ianMuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIFBvc3RTY3JpcHQgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNvYmpzLmMKKyAqCisgKiAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIFBvc3RTY3JpcHQgZm9udHMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgInBzYXV4bW9kLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcHNvYmpzCiAKQEAgLTQ3LDI2ICs0NywyOSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHNfdGFibGVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBQU19UYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFibGUgIDo6IFRoZSBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY291bnQgIDo6IFRoZSB0YWJsZSBzaXplID0gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgOjogVGhlIG1lbW9yeSBvYmplY3QgdG8gdXNlIGZvciBhbGwgc3Vic2VxdWVudCAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIHJlYWxsb2NhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHBzX3RhYmxlX25ldworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBQU19UYWJsZS4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIHRhYmxlIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IHRhYmxlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgY291bnQgOjoKKyAgICogICAgIFRoZSB0YWJsZSBzaXplID0gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgKgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgVGhlIG1lbW9yeSBvYmplY3QgdG8gdXNlIGZvciBhbGwgc3Vic2VxdWVudAorICAgKiAgICAgcmVhbGxvY2F0aW9ucy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHBzX3RhYmxlX25ldyggUFNfVGFibGUgICB0YWJsZSwKICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGNvdW50LApAQCAtMTQ0LDI4ICsxNDcsMzIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHNfdGFibGVfYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQWRkcyBhbiBvYmplY3QgdG8gYSBQU19UYWJsZSwgcG9zc2libHkgZ3Jvd2luZyBpdHMgbWVtb3J5IGJsb2NrLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdGFibGUgIDo6IFRoZSB0YXJnZXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaWR4ICAgIDo6IFRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IGluIHRoZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvYmplY3QgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCB0byBjb3B5IGluIG1lbW9yeS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlbmd0aCA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBhICAqLwotICAvKiAgICByZWFsbG9jYXRpb24gZmFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgcHNfdGFibGVfYWRkCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBZGRzIGFuIG9iamVjdCB0byBhIFBTX1RhYmxlLCBwb3NzaWJseSBncm93aW5nIGl0cyBtZW1vcnkgYmxvY2suCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICB0YWJsZSA6OgorICAgKiAgICAgVGhlIHRhcmdldCB0YWJsZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGlkeCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBvYmplY3QgaW4gdGhlIHRhYmxlLgorICAgKgorICAgKiAgIG9iamVjdCA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCB0byBjb3B5IGluIG1lbW9yeS4KKyAgICoKKyAgICogICBsZW5ndGggOjoKKyAgICogICAgIFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIGEKKyAgICogICByZWFsbG9jYXRpb24gZmFpbHMuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgcHNfdGFibGVfYWRkKCBQU19UYWJsZSAgdGFibGUsCiAgICAgICAgICAgICAgICAgRlRfSW50ICAgIGlkeCwKQEAgLTIxNiwyMiArMjIzLDIzIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBzX3RhYmxlX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmFsaXplcyBhIFBTX1RhYmxlUmVjIChpLmUuLCByZWFsbG9jYXRlIGl0IHRvIGl0cyBjdXJyZW50ICAgICAgICAqLwotICAvKiAgICBjdXJzb3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWJsZSA6OiBUaGUgdGFyZ2V0IHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHJlbGVhc2UgdGhlIGhlYXAncyBtZW1vcnkgYmxvY2suICBJdCBpcyB1cCAgKi8KLSAgLyogICAgdG8gdGhlIGNhbGxlciB0byBjbGVhbiBpdCwgb3IgcmVmZXJlbmNlIGl0IGluIGl0cyBvd24gc3RydWN0dXJlcy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHBzX3RhYmxlX2RvbmUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEZpbmFsaXplcyBhIFBTX1RhYmxlUmVjIChpLmUuLCByZWFsbG9jYXRlIGl0IHRvIGl0cyBjdXJyZW50CisgICAqICAgY3Vyc29yKS4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIHRhYmxlIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IHRhYmxlLgorICAgKgorICAgKiBATm90ZToKKyAgICogICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHJlbGVhc2UgdGhlIGhlYXAncyBtZW1vcnkgYmxvY2suICBJdCBpcyB1cAorICAgKiAgIHRvIHRoZSBjYWxsZXIgdG8gY2xlYW4gaXQsIG9yIHJlZmVyZW5jZSBpdCBpbiBpdHMgb3duIHN0cnVjdHVyZXMuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBwc190YWJsZV9kb25lKCBQU19UYWJsZSAgdGFibGUgKQogICB7CkBAIC00OTgsMTIgKzUwNiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQWxsIGV4cG9ydGVkIHBhcnNpbmcgcm91dGluZXMgaGFuZGxlIGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgc3RvcCBhdCAqLwotICAvKiB0aGUgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIGlzbid0IHBhcnQgb2YgdGhlIGp1c3QgaGFuZGxlZCB0b2tlbi4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEFsbCBleHBvcnRlZCBwYXJzaW5nIHJvdXRpbmVzIGhhbmRsZSBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHN0b3AgYXQKKyAgICogdGhlIGZpcnN0IGNoYXJhY3RlciB3aGljaCBpc24ndCBwYXJ0IG9mIHRoZSBqdXN0IGhhbmRsZWQgdG9rZW4uCisgICAqCisgICAqLwogCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKQEAgLTExMDAsMTggKzExMDgsMjIgQEAKICAgICAgIHsKICAgICAgIGNhc2UgVDFfRklFTERfVFlQRV9CT09MOgogICAgICAgICB2YWwgPSBwc190b2Jvb2woICZjdXIsIGxpbWl0ICk7CisgICAgICAgIEZUX1RSQUNFNCgoICIgJXMiLCB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiICkpOwogICAgICAgICBnb3RvIFN0b3JlX0ludGVnZXI7CiAKICAgICAgIGNhc2UgVDFfRklFTERfVFlQRV9GSVhFRDoKICAgICAgICAgdmFsID0gUFNfQ29udl9Ub0ZpeGVkKCAmY3VyLCBsaW1pdCwgMCApOworICAgICAgICBGVF9UUkFDRTQoKCAiICVmIiwgKGRvdWJsZSl2YWwgLyA2NTUzNiApKTsKICAgICAgICAgZ290byBTdG9yZV9JbnRlZ2VyOwogCiAgICAgICBjYXNlIFQxX0ZJRUxEX1RZUEVfRklYRURfMTAwMDoKICAgICAgICAgdmFsID0gUFNfQ29udl9Ub0ZpeGVkKCAmY3VyLCBsaW1pdCwgMyApOworICAgICAgICBGVF9UUkFDRTQoKCAiICVmIiwgKGRvdWJsZSl2YWwgLyA2NTUzNiAvIDEwMDAgKSk7CiAgICAgICAgIGdvdG8gU3RvcmVfSW50ZWdlcjsKIAogICAgICAgY2FzZSBUMV9GSUVMRF9UWVBFX0lOVEVHRVI6CiAgICAgICAgIHZhbCA9IFBTX0NvbnZfVG9JbnQoICZjdXIsIGxpbWl0ICk7CisgICAgICAgIEZUX1RSQUNFNCgoICIgJWxkIiwgdmFsICkpOwogICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KIAogICAgICAgU3RvcmVfSW50ZWdlcjoKQEAgLTExODgsNiArMTIwMCwxMyBAQAogICAgICAgICAgIEZUX01FTV9DT1BZKCBzdHJpbmcsIGN1ciwgbGVuICk7CiAgICAgICAgICAgc3RyaW5nW2xlbl0gPSAwOwogCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBpZiAoIHRva2VuLnR5cGUgPT0gVDFfVE9LRU5fVFlQRV9TVFJJTkcgKQorICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoJXMpIiwgc3RyaW5nICkpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgLyVzIiwgc3RyaW5nICkpOworI2VuZGlmCisKICAgICAgICAgICAqKEZUX1N0cmluZyoqKXEgPSBzdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMjEzLDYgKzEyMzIsMTIgQEAKICAgICAgICAgICBiYm94LT55TWluID0gRlRfUm91bmRGaXgoIHRlbXBbMV0gKTsKICAgICAgICAgICBiYm94LT54TWF4ID0gRlRfUm91bmRGaXgoIHRlbXBbMl0gKTsKICAgICAgICAgICBiYm94LT55TWF4ID0gRlRfUm91bmRGaXgoIHRlbXBbM10gKTsKKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgWyVkICVkICVkICVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgYmJveC0+eE1pbiAvIDY1NTM2LAorICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnlNaW4gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgICAgICBiYm94LT54TWF4IC8gNjU1MzYsCisgICAgICAgICAgICAgICAgICAgICAgYmJveC0+eU1heCAvIDY1NTM2ICkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMjUxLDYgKzEyNzYsNyBAQAogICAgICAgICAgICAgc2tpcF9zcGFjZXMoICZjdXIsIGxpbWl0ICk7CiAgICAgICAgICAgfQogCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBbIiApKTsKICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG1heF9vYmplY3RzOyBpKysgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIEZUX0JCb3gqICBiYm94ID0gKEZUX0JCb3gqKW9iamVjdHNbaV07CkBAIC0xMjYwLDcgKzEyODYsMTQgQEAKICAgICAgICAgICAgIGJib3gtPnlNaW4gPSBGVF9Sb3VuZEZpeCggdGVtcFtpICsgICAgIG1heF9vYmplY3RzXSApOwogICAgICAgICAgICAgYmJveC0+eE1heCA9IEZUX1JvdW5kRml4KCB0ZW1wW2kgKyAyICogbWF4X29iamVjdHNdICk7CiAgICAgICAgICAgICBiYm94LT55TWF4ID0gRlRfUm91bmRGaXgoIHRlbXBbaSArIDMgKiBtYXhfb2JqZWN0c10gKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBbJWQgJWQgJWQgJWRdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnhNaW4gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnlNaW4gLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnhNYXggLyA2NTUzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJib3gtPnlNYXggLyA2NTUzNiApKTsKICAgICAgICAgICB9CisgICAgICAgICAgRlRfVFJBQ0U0KCggIl0iICkpOwogCiAgICAgICAgICAgRlRfRlJFRSggdGVtcCApOwogICAgICAgICB9CkBAIC0xMzMzLDYgKzEzNjYsOCBAQAogICAgICAgKihGVF9CeXRlKikoIChGVF9CeXRlKilvYmplY3RzWzBdICsgZmllbGQtPmNvdW50X29mZnNldCApID0KICAgICAgICAgKEZUX0J5dGUpbnVtX2VsZW1lbnRzOwogCisgICAgRlRfVFJBQ0U0KCggIiBbIiApKTsKKwogICAgIC8qIHdlIG5vdyBsb2FkIGVhY2ggZWxlbWVudCwgYWRqdXN0aW5nIHRoZSBmaWVsZC5vZmZzZXQgb24gZWFjaCBvbmUgKi8KICAgICB0b2tlbiA9IGVsZW1lbnRzOwogICAgIGZvciAoIDsgbnVtX2VsZW1lbnRzID4gMDsgbnVtX2VsZW1lbnRzLS0sIHRva2VuKysgKQpAQCAtMTM1MSw2ICsxMzg2LDggQEAKICAgICAgIGZpZWxkcmVjLm9mZnNldCArPSBmaWVsZHJlYy5zaXplOwogICAgIH0KIAorICAgIEZUX1RSQUNFNCgoICJdIiApKTsKKwogI2lmIDAgIC8qIG9ic29sZXRlIC0tIGtlZXAgZm9yIHJlZmVyZW5jZSAqLwogICAgIGlmICggcGZsYWdzICkKICAgICAgICpwZmxhZ3MgfD0gMUwgPDwgZmllbGQtPmZsYWdfYml0OwpAQCAtMTUwOSwyNiArMTU0NiwzMSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdDFfYnVpbGRlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgc2hvdWxkIGJlIGFwcGxpZWQuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHQxX2J1aWxkZXJfaW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgYnVpbGRlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGluaXRpYWxpemUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBUaGUgY3VycmVudCBzaXplIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LgorICAgKgorICAgKiAgIGhpbnRpbmcgOjoKKyAgICogICAgIFdoZXRoZXIgaGludGluZyBzaG91bGQgYmUgYXBwbGllZC4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHQxX2J1aWxkZXJfaW5pdCggVDFfQnVpbGRlciAgICBidWlsZGVyLAogICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgZmFjZSwKQEAgLTE1NzIsMTkgKzE2MTQsMjAgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdDFfYnVpbGRlcl9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZCAgICovCi0gIC8qICAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbiAgICAgICAqLwotICAvKiAgICB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWlsZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBmaW5hbGl6ZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdDFfYnVpbGRlcl9kb25lCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGaW5hbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgSXRzIGNvbnRlbnRzIGNhbiBzdGlsbCBiZSB1c2VkCisgICAqICAgYWZ0ZXIgdGhlIGNhbGwsIGJ1dCB0aGUgZnVuY3Rpb24gc2F2ZXMgaW1wb3J0YW50IGluZm9ybWF0aW9uCisgICAqICAgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIHNsb3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBidWlsZGVyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gZmluYWxpemUuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICB0MV9idWlsZGVyX2RvbmUoIFQxX0J1aWxkZXIgIGJ1aWxkZXIgKQogICB7CkBAIC0xNzY5LDI2ICsxODEyLDMxIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2J1aWxkZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgaXMgYWN0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGNmZl9idWlsZGVyX2luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGJ1aWxkZXIgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBpbml0aWFsaXplLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QuCisgICAqCisgICAqICAgZ2x5cGggOjoKKyAgICogICAgIFRoZSBjdXJyZW50IGdseXBoIG9iamVjdC4KKyAgICoKKyAgICogICBoaW50aW5nIDo6CisgICAqICAgICBXaGV0aGVyIGhpbnRpbmcgaXMgYWN0aXZlLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgY2ZmX2J1aWxkZXJfaW5pdCggQ0ZGX0J1aWxkZXIqICAgYnVpbGRlciwKICAgICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgZmFjZSwKQEAgLTE4NDEsMTkgKzE4ODksMjAgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2J1aWxkZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZCAgICovCi0gIC8qICAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbiAgICAgICAqLwotICAvKiAgICB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWlsZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBmaW5hbGl6ZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgY2ZmX2J1aWxkZXJfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZAorICAgKiAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgKiAgIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBzbG90LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgYnVpbGRlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGZpbmFsaXplLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgY2ZmX2J1aWxkZXJfZG9uZSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICkKICAgewpAQCAtMjAzMywyNiArMjA4MiwzMSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHNfYnVpbGRlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgc2hvdWxkIGJlIGFwcGxpZWQuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHBzX2J1aWxkZXJfaW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgYnVpbGRlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGluaXRpYWxpemUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBUaGUgY3VycmVudCBzaXplIG9iamVjdC4KKyAgICoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LgorICAgKgorICAgKiAgIGhpbnRpbmcgOjoKKyAgICogICAgIFdoZXRoZXIgaGludGluZyBzaG91bGQgYmUgYXBwbGllZC4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHBzX2J1aWxkZXJfaW5pdCggUFNfQnVpbGRlciogIHBzX2J1aWxkZXIsCiAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIGJ1aWxkZXIsCkBAIC0yMTE2LDE5ICsyMTcwLDIwIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBzX2J1aWxkZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIGdseXBoIGJ1aWxkZXIuICBJdHMgY29udGVudHMgY2FuIHN0aWxsIGJlIHVzZWQgICAqLwotICAvKiAgICBhZnRlciB0aGUgY2FsbCwgYnV0IHRoZSBmdW5jdGlvbiBzYXZlcyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gICAgICAgKi8KLSAgLyogICAgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gZmluYWxpemUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHBzX2J1aWxkZXJfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZAorICAgKiAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgKiAgIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBzbG90LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgYnVpbGRlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBnbHlwaCBidWlsZGVyIHRvIGZpbmFsaXplLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgcHNfYnVpbGRlcl9kb25lKCBQU19CdWlsZGVyKiAgYnVpbGRlciApCiAgIHsKQEAgLTIzMzYsMjMgKzIzOTEsMjYgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwc19kZWNvZGVyX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDcmVhdGVzIGEgd3JhcHBlciBkZWNvZGVyIGZvciB1c2UgaW4gdGhlIGNvbWJpbmVkICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHlwZSAxIC8gQ0ZGIGludGVycHJldGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHNfZGVjb2RlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGRlY29kZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVjb2RlciAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpc190MSAgICAgIDo6IEZsYWcgaW5kaWNhdGluZyBUeXBlIDEgb3IgQ0ZGICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgcHNfZGVjb2Rlcl9pbml0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDcmVhdGVzIGEgd3JhcHBlciBkZWNvZGVyIGZvciB1c2UgaW4gdGhlIGNvbWJpbmVkCisgICAqICAgVHlwZSAxIC8gQ0ZGIGludGVycHJldGVyLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgcHNfZGVjb2RlciA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkZWNvZGVyIHRvIGluaXRpYWxpemUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkZWNvZGVyIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGRlY29kZXIuCisgICAqCisgICAqICAgaXNfdDEgOjoKKyAgICogICAgIEZsYWcgaW5kaWNhdGluZyBUeXBlIDEgb3IgQ0ZGCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBwc19kZWNvZGVyX2luaXQoIFBTX0RlY29kZXIqICBwc19kZWNvZGVyLAogICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICBkZWNvZGVyLApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3Bzb2Jqcy5oIGIvc3JjL3BzYXV4L3Bzb2Jqcy5oCmluZGV4IDhlMGZlNWYuLjYxODQxOTMgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc29ianMuaAorKysgYi9zcmMvcHNhdXgvcHNvYmpzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzb2Jqcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzb2Jqcy5oCisgKgorICogICBBdXhpbGlhcnkgZnVuY3Rpb25zIGZvciBQb3N0U2NyaXB0IGZvbnRzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU09CSlNfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc3JlYWQuYyBiL3NyYy9wc2F1eC9wc3JlYWQuYwppbmRleCA3MTk4NjNjLi42ZjNhMzYxIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNyZWFkLmMKKysrIGIvc3JjL3BzYXV4L3BzcmVhZC5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc3JlYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBjb2RlIGZvciBzdHJlYW0gaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzcmVhZC5jCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIHN0cmVhbSBoYW5kbGluZyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgInBzZnQuaCIKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc3JlYWQuaCBiL3NyYy9wc2F1eC9wc3JlYWQuaAppbmRleCA0NjRiMjliLi45ZTU1ZmUwIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNyZWFkLmgKKysrIGIvc3JjL3BzYXV4L3BzcmVhZC5oCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc3JlYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBjb2RlIGZvciBzdHJlYW0gaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzcmVhZC5oCisgKgorICogICBBZG9iZSdzIGNvZGUgZm9yIHN0cmVhbSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yCisgKiBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZAorICogaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUKKyAqIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwKKyAqIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzCisgKiB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5CisgKiB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IKKyAqICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLAorICogcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudAorICogbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQKKyAqIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZQorICogcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkKKyAqIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIKKyAqIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcworICogc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyAqIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CisgKiB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzCisgKiBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICogZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mCisgKiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisgKgorICogQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdQorICogaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKKyAqIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwKKyAqIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBQU1JFQURfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc3N0YWNrLmMgYi9zcmMvcHNhdXgvcHNzdGFjay5jCmluZGV4IDY5ZDA2MzMuLmQ0OWNmMjUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc3N0YWNrLmMKKysrIGIvc3JjL3BzYXV4L3Bzc3RhY2suYwpAQCAtMSwzOSArMSwzOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNzdGFjay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZW11bGF0aW5nIGEgQ0ZGIHN0YWNrIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc3N0YWNrLmMKKyAqCisgKiAgIEFkb2JlJ3MgY29kZSBmb3IgZW11bGF0aW5nIGEgQ0ZGIHN0YWNrIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IKKyAqIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkCisgKiBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZQorICogdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLAorICogTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMKKyAqIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkKKyAqIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvcgorICogIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsCisgKiByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50CisgKiBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZAorICogb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlCisgKiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseQorICogaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpcgorICogY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzCisgKiBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorICogKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKKyAqIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMKKyAqIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgKiBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YKKyAqIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKyAqCisgKiBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91CisgKiBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorICogRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLAorICogYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAicHNmdC5oIgpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3Bzc3RhY2suaCBiL3NyYy9wc2F1eC9wc3N0YWNrLmgKaW5kZXggMzhmN2I0MS4uMThjZDM5YiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3Bzc3RhY2suaAorKysgYi9zcmMvcHNhdXgvcHNzdGFjay5oCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc3N0YWNrLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBjb2RlIGZvciBlbXVsYXRpbmcgYSBDRkYgc3RhY2sgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzc3RhY2suaAorICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBlbXVsYXRpbmcgYSBDRkYgc3RhY2sgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNTVEFDS19IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzdHlwZXMuaCBiL3NyYy9wc2F1eC9wc3R5cGVzLmgKaW5kZXggZGZiYWEzZC4uMDQxMjg3ZSAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzdHlwZXMuaAorKysgYi9zcmMvcHNhdXgvcHN0eXBlcy5oCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc3R5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQWRvYmUncyBjb2RlIGZvciBkZWZpbmluZyBkYXRhIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTEtMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIHNvZnR3YXJlLCBhbmQgYWxsIHdvcmtzIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gc291cmNlIG9yICAgICAgICovCi0vKiAgb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQgICAgICAqLwotLyogIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlICAgKi8KLS8qICB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsICAgICovCi0vKiAgTElDRU5TRS5UWFQuICBBZGRpdGlvbmFsbHksIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAqLwotLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgZWFjaCBjb250cmlidXRvciB0byB0aGUgV29yayBoZXJlYnkgZ3JhbnRzICAgKi8KLS8qICB0byBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5ICAgICovCi0vKiAgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yICAgICAqLwotLyogICJZb3VyIikgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCAgICAgICAgICAgICAgKi8KLS8qICByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50ICAgICovCi0vKiAgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgICAgICAqLwotLyogIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSAgKi8KLS8qICBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBjb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSAgICAgICovCi0vKiAgaW5mcmluZ2VkIGJ5IHRoZWlyIGNvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciAgICAqLwotLyogIGNvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggY29udHJpYnV0aW9uKHMpIHdhcyAgICAgICAgKi8KLS8qICBzdWJtaXR0ZWQuICBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAgICAgICovCi0vKiAgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgICAqLwotLyogIHRoZSBXb3JrIG9yIGEgY29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgICAgKi8KLS8qICBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyAgICovCi0vKiAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mICAqLwotLyogIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQnkgdXNpbmcsIG1vZGlmeWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSAgICAqLwotLyogIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICAgICAgICAgICAgICAgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sICAgICovCi0vKiAgYW5kIHlvdSBhY2NlcHQgdGhlbSBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzdHlwZXMuaAorICoKKyAqICAgQWRvYmUncyBjb2RlIGZvciBkZWZpbmluZyBkYXRhIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDExLTIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvcgorICogb2JqZWN0IGNvZGUgZm9ybSBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcHlyaWdodCBub3RpY2UocykgaW5jbHVkZWQKKyAqIGhlcmVpbiAoY29sbGVjdGl2ZWx5LCB0aGUgIldvcmsiKSBpcyBtYWRlIGF2YWlsYWJsZSwgYW5kIG1heSBvbmx5IGJlCisgKiB1c2VkLCBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsCisgKiBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cworICogdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieQorICogdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhbmQgdGhpcyBzZWN0aW9uIChoZXJlYWZ0ZXIsICJZb3UiIG9yCisgKiAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKKyAqIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQKKyAqIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kCisgKiBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UKKyAqIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CisgKiBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyCisgKiBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMKKyAqIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisgKiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorICogdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcworICogZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAqIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgorICogdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorICoKKyAqIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UKKyAqIGhhdmUgcmVhZCBhbmQgdW5kZXJzdG9vZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCisgKiBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYXMgd2VsbCBhcyB0aG9zZSBwcm92aWRlZCBpbiB0aGlzIHNlY3Rpb24sCisgKiBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNUWVBFU19IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxY21hcC5jIGIvc3JjL3BzYXV4L3QxY21hcC5jCmluZGV4IDExMmE3ODkuLjBjOWY5MTYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWNtYXAuYworKysgYi9zcmMvcHNhdXgvdDFjbWFwLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxY21hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxY21hcC5jCisgKgorICogICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgInQxY21hcC5oIgpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxY21hcC5oIGIvc3JjL3BzYXV4L3QxY21hcC5oCmluZGV4IDQzMDhlMzEuLjI3NzQxOWYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWNtYXAuaAorKysgYi9zcmMvcHNhdXgvdDFjbWFwLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxY21hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxY21hcC5oCisgKgorICogICBUeXBlIDEgY2hhcmFjdGVyIG1hcCBzdXBwb3J0IChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUMUNNQVBfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC90MWRlY29kZS5jIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmMKaW5kZXggNmFkMTQ1Ni4uNjc0NTYwMyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3QxZGVjb2RlLmMKKysrIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxZGVjb2RlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0U2NyaXB0IFR5cGUgMSBkZWNvZGluZyByb3V0aW5lcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxZGVjb2RlLmMKKyAqCisgKiAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMSwxMiArMzEsMTIgQEAKIC8qIGVuc3VyZSBwcm9wZXIgc2lnbiBleHRlbnNpb24gKi8KICNkZWZpbmUgRml4MkludCggZiApICAoIChGVF9JbnQpKEZUX1Nob3J0KSggKGYpID4+IDE2ICkgKQogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWRlY29kZQogCkBAIC0xMDksMjQgKzEwOSwyNiBAQAogICB9OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlX3BzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9va3MgdXAgYSBnaXZlbiBnbHlwaCBieSBpdHMgU3RhbmRhcmRFbmNvZGluZyBjaGFyY29kZS4gIFVzZWQgdG8gICovCi0gIC8qICAgIGltcGxlbWVudCB0aGUgU0VBQyBUeXBlIDEgb3BlcmF0b3IgaW4gdGhlIEFkb2JlIGVuZ2luZSAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcmNvZGUgOjogVGhlIGNoYXJhY3RlciBjb2RlIHRvIGxvb2sgZm9yLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBnbHlwaCBpbmRleCBpbiB0aGUgZm9udCBmYWNlLiAgUmV0dXJucyAtMSBpZiB0aGUgY29ycmVzcG9uZGluZyAgICovCi0gIC8qICAgIGdseXBoIHdhc24ndCBmb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0MV9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGVfcHMKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIExvb2tzIHVwIGEgZ2l2ZW4gZ2x5cGggYnkgaXRzIFN0YW5kYXJkRW5jb2RpbmcgY2hhcmNvZGUuICBVc2VkIHRvCisgICAqICAgaW1wbGVtZW50IHRoZSBTRUFDIFR5cGUgMSBvcGVyYXRvciBpbiB0aGUgQWRvYmUgZW5naW5lCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBjaGFyY29kZSA6OgorICAgKiAgICAgVGhlIGNoYXJhY3RlciBjb2RlIHRvIGxvb2sgZm9yLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEEgZ2x5cGggaW5kZXggaW4gdGhlIGZvbnQgZmFjZS4gIFJldHVybnMgLTEgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICBnbHlwaCB3YXNuJ3QgZm91bmQuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0ludCApCiAgIHQxX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZV9wcyggUFNfRGVjb2RlciogIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIGNoYXJjb2RlICkKQEAgLTE1OSwyNCArMTYxLDI3IEBACiAKIAogI2lmZGVmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0MV9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb29rcyB1cCBhIGdpdmVuIGdseXBoIGJ5IGl0cyBTdGFuZGFyZEVuY29kaW5nIGNoYXJjb2RlLiAgVXNlZCB0byAgKi8KLSAgLyogICAgaW1wbGVtZW50IHRoZSBTRUFDIFR5cGUgMSBvcGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyY29kZSA6OiBUaGUgY2hhcmFjdGVyIGNvZGUgdG8gbG9vayBmb3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGdseXBoIGluZGV4IGluIHRoZSBmb250IGZhY2UuICBSZXR1cm5zIC0xIGlmIHRoZSBjb3JyZXNwb25kaW5nICAgKi8KLSAgLyogICAgZ2x5cGggd2Fzbid0IGZvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb29rcyB1cCBhIGdpdmVuIGdseXBoIGJ5IGl0cyBTdGFuZGFyZEVuY29kaW5nIGNoYXJjb2RlLiAgVXNlZCB0bworICAgKiAgIGltcGxlbWVudCB0aGUgU0VBQyBUeXBlIDEgb3BlcmF0b3IuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBjaGFyY29kZSA6OgorICAgKiAgICAgVGhlIGNoYXJhY3RlciBjb2RlIHRvIGxvb2sgZm9yLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEEgZ2x5cGggaW5kZXggaW4gdGhlIGZvbnQgZmFjZS4gIFJldHVybnMgLTEgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICBnbHlwaCB3YXNuJ3QgZm91bmQuCisgICAqLwogICBzdGF0aWMgRlRfSW50CiAgIHQxX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSggVDFfRGVjb2RlciAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICBjaGFyY29kZSApCkBAIC0yMTcsMzAgKzIyMiwzNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0MW9wZXJhdG9yX3NlYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbXBsZW1lbnRzIHRoZSBgc2VhYycgVHlwZSAxIG9wZXJhdG9yIGZvciBhIFR5cGUgMSBkZWNvZGVyLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWNvZGVyIDo6IFRoZSBjdXJyZW50IENJRCBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFzYiAgICAgOjogVGhlIGFjY2VudCdzIHNpZGUgYmVhcmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWR4ICAgICA6OiBUaGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIGFjY2VudC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZHkgICAgIDo6IFRoZSB2ZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGFjY2VudC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJjaGFyICAgOjogVGhlIGJhc2UgY2hhcmFjdGVyJ3MgU3RhbmRhcmRFbmNvZGluZyBjaGFyY29kZS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWNoYXIgICA6OiBUaGUgYWNjZW50IGNoYXJhY3RlcidzIFN0YW5kYXJkRW5jb2RpbmcgY2hhcmNvZGUuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHQxb3BlcmF0b3Jfc2VhYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW1wbGVtZW50cyB0aGUgYHNlYWMnIFR5cGUgMSBvcGVyYXRvciBmb3IgYSBUeXBlIDEgZGVjb2Rlci4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRlY29kZXIgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IENJRCBkZWNvZGVyLgorICAgKgorICAgKiAgIGFzYiA6OgorICAgKiAgICAgVGhlIGFjY2VudCdzIHNpZGUgYmVhcmluZy4KKyAgICoKKyAgICogICBhZHggOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIG9mZnNldCBvZiB0aGUgYWNjZW50LgorICAgKgorICAgKiAgIGFkeSA6OgorICAgKiAgICAgVGhlIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgYWNjZW50LgorICAgKgorICAgKiAgIGJjaGFyIDo6CisgICAqICAgICBUaGUgYmFzZSBjaGFyYWN0ZXIncyBTdGFuZGFyZEVuY29kaW5nIGNoYXJjb2RlLgorICAgKgorICAgKiAgIGFjaGFyIDo6CisgICAqICAgICBUaGUgYWNjZW50IGNoYXJhY3RlcidzIFN0YW5kYXJkRW5jb2RpbmcgY2hhcmNvZGUuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgogICB0MW9wZXJhdG9yX3NlYWMoIFQxX0RlY29kZXIgIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgYXNiLApAQCAtMzk5LDI0ICs0MTAsMjcgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGFyc2VzIGEgZ2l2ZW4gVHlwZSAxIGNoYXJzdHJpbmdzIHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVjb2RlciAgICAgICAgIDo6IFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyc3RyaW5nX2Jhc2UgOjogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBQYXJzZXMgYSBnaXZlbiBUeXBlIDEgY2hhcnN0cmluZ3MgcHJvZ3JhbS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRlY29kZXIgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLgorICAgKgorICAgKiAgIGNoYXJzdHJpbmdfYmFzZSA6OgorICAgKiAgICAgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uCisgICAqCisgICAqICAgY2hhcnN0cmluZ19sZW4gOjoKKyAgICogICAgIFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNoYXJzdHJpbmcgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggVDFfRGVjb2RlciAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgY2hhcnN0cmluZ19iYXNlLApAQCAtNDY2LDkgKzQ4MCw2IEBACiAgICAgaWYgKCBkZWNvZGVyLT5idWlsZGNoYXIgJiYgZGVjb2Rlci0+bGVuX2J1aWxkY2hhciA+IDAgKQogICAgICAgRlRfQVJSQVlfWkVSTyggZGVjb2Rlci0+YnVpbGRjaGFyLCBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICk7CiAKLSAgICBGVF9UUkFDRTQoKCAiXG4iCi0gICAgICAgICAgICAgICAgIlN0YXJ0IGNoYXJzdHJpbmdcbiIgKSk7Ci0KICAgICB6b25lLT5iYXNlICAgICAgICAgICA9IGNoYXJzdHJpbmdfYmFzZTsKICAgICBsaW1pdCA9IHpvbmUtPmxpbWl0ICA9IGNoYXJzdHJpbmdfYmFzZSArIGNoYXJzdHJpbmdfbGVuOwogICAgIGlwICAgID0gem9uZS0+Y3Vyc29yID0gem9uZS0+YmFzZTsKQEAgLTUwMywxMSArNTE0LDExIEBACiAgICAgICB9CiAjZW5kaWYKIAotICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiBEZWNvZGUgb3BlcmF0b3Igb3Igb3BlcmFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICoKKyAgICAgICAqIERlY29kZSBvcGVyYXRvciBvciBvcGVyYW5kCisgICAgICAgKgorICAgICAgICovCiAKICAgICAgIC8qIGZpcnN0IG9mIGFsbCwgZGVjb21wcmVzcyBvcGVyYXRvciBvciB2YWx1ZSAqLwogICAgICAgc3dpdGNoICggKmlwKysgKQpAQCAtNzEwLDExICs3MjEsMTEgQEAKICAgICAgICAgbGFyZ2VfaW50ID0gRkFMU0U7CiAgICAgICB9CiAKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogIFB1c2ggdmFsdWUgb24gc3RhY2ssIG9yIHByb2Nlc3Mgb3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqCisgICAgICAgKiBQdXNoIHZhbHVlIG9uIHN0YWNrLCBvciBwcm9jZXNzIG9wZXJhdG9yCisgICAgICAgKgorICAgICAgICovCiAgICAgICBpZiAoIG9wID09IG9wX25vbmUgKQogICAgICAgewogICAgICAgICBpZiAoIHRvcCAtIGRlY29kZXItPnN0YWNrID49IFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyApCkBAIC03NTIsMTYgKzc2MywxNyBAQAogICAgICAgICBzdWJyX25vID0gRml4MkludCggdG9wWzFdICk7CiAgICAgICAgIGFyZ19jbnQgPSBGaXgySW50KCB0b3BbMF0gKTsKIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogcmVtb3ZlIGFsbCBvcGVyYW5kcyB0byBjYWxsb3RoZXJzdWJyIGZyb20gdGhlIHN0YWNrICAgICAqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIGZvciBoYW5kbGVkIG90aGVyc3VicnMsIHdoZXJlIHdlIGtub3cgdGhlIG51bWJlciBvZiAgICAgKi8KLSAgICAgICAgLyogYXJndW1lbnRzLCB3ZSBpbmNyZWFzZSB0aGUgc3RhY2sgYnkgdGhlIHZhbHVlIG9mICAgICAgICAqLwotICAgICAgICAvKiBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogZm9yIHVuaGFuZGxlZCBvdGhlcnN1YnJzIHRoZSBmb2xsb3dpbmcgcG9wcyBhZGp1c3QgdGhlICAqLwotICAgICAgICAvKiBzdGFjayBwb2ludGVyIGFzIG5lY2Vzc2FyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICoKKyAgICAgICAgICogcmVtb3ZlIGFsbCBvcGVyYW5kcyB0byBjYWxsb3RoZXJzdWJyIGZyb20gdGhlIHN0YWNrCisgICAgICAgICAqCisgICAgICAgICAqIGZvciBoYW5kbGVkIG90aGVyc3VicnMsIHdoZXJlIHdlIGtub3cgdGhlIG51bWJlciBvZgorICAgICAgICAgKiBhcmd1bWVudHMsIHdlIGluY3JlYXNlIHRoZSBzdGFjayBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICoga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQKKyAgICAgICAgICoKKyAgICAgICAgICogZm9yIHVuaGFuZGxlZCBvdGhlcnN1YnJzIHRoZSBmb2xsb3dpbmcgcG9wcyBhZGp1c3QgdGhlCisgICAgICAgICAqIHN0YWNrIHBvaW50ZXIgYXMgbmVjZXNzYXJ5CisgICAgICAgICAqLwogCiAgICAgICAgIGlmICggYXJnX2NudCA+IHRvcCAtIGRlY29kZXItPnN0YWNrICkKICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKQEAgLTEyMjMsNyArMTIzNSwxMCBAQAogICAgICAgICAgIC8qIHRoZSBnbHlwaCdzIG1ldHJpY3MgKGxzYiArIGFkdmFuY2Ugd2lkdGgpLCBub3QgbG9hZCB0aGUgICAqLwogICAgICAgICAgIC8qIHJlc3Qgb2YgaXQ7IHNvIGV4aXQgaW1tZWRpYXRlbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgIGlmICggYnVpbGRlci0+bWV0cmljc19vbmx5ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICAgICAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICAgICAgICB9CiAKICAgICAgICAgICBicmVhazsKIApAQCAtMTI1NSw3ICsxMjcwLDEwIEBACiAgICAgICAgICAgLyogdGhlIGdseXBoJ3MgbWV0cmljcyAobHNiICsgYWR2YW5jZSB3aWR0aCksIG5vdCBsb2FkIHRoZSAgICovCiAgICAgICAgICAgLyogcmVzdCBvZiBpdDsgc28gZXhpdCBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgaWYgKCBidWlsZGVyLT5tZXRyaWNzX29ubHkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CiAgICAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgICAgIH0KIAogICAgICAgICAgIGJyZWFrOwogCkBAIC0xNjM4LDI2ICsxNjU2LDMxIEBACiAgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19VbmRlcmZsb3cgKTsKICAgfQogCi0jZWxzZSAvKiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQYXJzZXMgYSBnaXZlbiBUeXBlIDEgY2hhcnN0cmluZ3MgcHJvZ3JhbSB0byBleHRyYWN0IHdpZHRoICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWNvZGVyICAgICAgICAgOjogVGhlIGN1cnJlbnQgVHlwZSAxIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNoYXJzdHJpbmdfYmFzZSA6OiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcnN0cmluZ19sZW4gIDo6IFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNoYXJzdHJpbmcgc3RyZWFtLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2Vsc2UgLyogIVQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFBhcnNlcyBhIGdpdmVuIFR5cGUgMSBjaGFyc3RyaW5ncyBwcm9ncmFtIHRvIGV4dHJhY3Qgd2lkdGgKKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRlY29kZXIgOjoKKyAgICogICAgIFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLgorICAgKgorICAgKiAgIGNoYXJzdHJpbmdfYmFzZSA6OgorICAgKiAgICAgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uCisgICAqCisgICAqICAgY2hhcnN0cmluZ19sZW4gOjoKKyAgICogICAgIFRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNoYXJzdHJpbmcgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzKCBUMV9EZWNvZGVyICBkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGNoYXJzdHJpbmdfYmFzZSwKQEAgLTE2ODAsOSArMTcwMyw2IEBACiAKICAgICBidWlsZGVyLT5wYXJzZV9zdGF0ZSA9IFQxX1BhcnNlX1N0YXJ0OwogCi0gICAgRlRfVFJBQ0U0KCggIlxuIgotICAgICAgICAgICAgICAgICJTdGFydCBjaGFyc3RyaW5nOiBnZXQgd2lkdGhcbiIgKSk7Ci0KICAgICB6b25lLT5iYXNlICAgICAgICAgICA9IGNoYXJzdHJpbmdfYmFzZTsKICAgICBsaW1pdCA9IHpvbmUtPmxpbWl0ICA9IGNoYXJzdHJpbmdfYmFzZSArIGNoYXJzdHJpbmdfbGVuOwogICAgIGlwICAgID0gem9uZS0+Y3Vyc29yID0gem9uZS0+YmFzZTsKQEAgLTE3MDMsMTEgKzE3MjMsMTEgQEAKICAgICAgIH0KICNlbmRpZgogCi0gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qIERlY29kZSBvcGVyYXRvciBvciBvcGVyYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgKgorICAgICAgICogRGVjb2RlIG9wZXJhdG9yIG9yIG9wZXJhbmQKKyAgICAgICAqCisgICAgICAgKi8KIAogICAgICAgLyogZmlyc3Qgb2YgYWxsLCBkZWNvbXByZXNzIG9wZXJhdG9yIG9yIHZhbHVlICovCiAgICAgICBzd2l0Y2ggKCAqaXArKyApCkBAIC0xODE3LDExICsxODM3LDExIEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgUHVzaCB2YWx1ZSBvbiBzdGFjaywgb3IgcHJvY2VzcyBvcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICoKKyAgICAgICAqIFB1c2ggdmFsdWUgb24gc3RhY2ssIG9yIHByb2Nlc3Mgb3BlcmF0b3IKKyAgICAgICAqCisgICAgICAgKi8KICAgICAgIGlmICggb3AgPT0gb3Bfbm9uZSApCiAgICAgICB7CiAgICAgICAgIGlmICggdG9wIC0gZGVjb2Rlci0+c3RhY2sgPj0gVDFfTUFYX0NIQVJTVFJJTkdTX09QRVJBTkRTICkKQEAgLTE4NzUsNiArMTg5NSw3IEBACiAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgdGhlIGdseXBoJ3MgbWV0cmljcyAqLwogICAgICAgICAgIC8qIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlIHJlc3Qgb2YgKi8KICAgICAgICAgICAvKiBpdDsgc28gZXhpdCBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKICAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgICAgICAgIGNhc2Ugb3Bfc2J3OgpAQCAtMTg5Myw2ICsxOTE0LDcgQEAKICAgICAgICAgICAvKiB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSB0aGUgZ2x5cGgncyBtZXRyaWNzICovCiAgICAgICAgICAgLyogKGxzYiArIGFkdmFuY2Ugd2lkdGgpLCBub3QgbG9hZCB0aGUgcmVzdCBvZiAqLwogICAgICAgICAgIC8qIGl0OyBzbyBleGl0IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTE5MTcsNyArMTkzOSw4IEBACiAgIFN0YWNrX1VuZGVyZmxvdzoKICAgICByZXR1cm4gRlRfVEhST1coIFN0YWNrX1VuZGVyZmxvdyApOwogICB9Ci0jZW5kaWYgLyogVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCisKKyNlbmRpZiAvKiAhVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCiAKIAogICAvKiBpbml0aWFsaXplIFQxIGRlY29kZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC90MWRlY29kZS5oIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmgKaW5kZXggMWQ5NzE4ZC4uNjI5NTZhYyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3QxZGVjb2RlLmgKKysrIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxZGVjb2RlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0U2NyaXB0IFR5cGUgMSBkZWNvZGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxZGVjb2RlLmgKKyAqCisgKiAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUMURFQ09ERV9IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGFsZ28uYyBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKaW5kZXggYjk4MDc3Yy4uOTI1YjNkNiAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGFsZ28uYworKysgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2hhbGdvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwotLyogIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hhbGdvLmMKKyAqCisgKiAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQKKyAqIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC02NTgsOCArNjU4LDggQEAKICNpZiAwICAvKiBub3QgdXNlZCBmb3Igbm93LCBleHBlcmltZW50YWwgKi8KIAogIC8qCi0gICogIEEgdmFyaWFudCB0byBwZXJmb3JtICJsaWdodCIgaGludGluZyAoaS5lLiBGVF9SRU5ERVJfTU9ERV9MSUdIVCkKLSAgKiAgb2Ygc3RlbXMKKyAgKiBBIHZhcmlhbnQgdG8gcGVyZm9ybSAibGlnaHQiIGhpbnRpbmcgKGkuZS4gRlRfUkVOREVSX01PREVfTElHSFQpCisgICogb2Ygc3RlbXMKICAgKi8KICAgc3RhdGljIHZvaWQKICAgcHNoX2hpbnRfYWxpZ25fbGlnaHQoIFBTSF9IaW50ICAgICBoaW50LApkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGFsZ28uaCBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKaW5kZXggYzUwNjgzZi4uZjI3ZTY2OCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGFsZ28uaAorKysgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2hhbGdvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hhbGdvLmgKKyAqCisgKiAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBTSEFMR09fSF8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCmluZGV4IDI5ZjMyOGQuLmY2ODU5Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuYwpAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNoZ2xvYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCi0vKiAgICBJbnNwaXJlZCBieSB0aGUgbmV3IGF1dG8taGludGVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCi0vKiAgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzaGdsb2IuYworICoKKyAqICAgUG9zdFNjcmlwdCBoaW50ZXIgZ2xvYmFsIGhpbnRpbmcgbWFuYWdlbWVudCAoYm9keSkuCisgKiAgIEluc3BpcmVkIGJ5IHRoZSBuZXcgYXV0by1oaW50ZXIgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQKKyAqIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMjcsOCArMjI3LDggQEAKICAgfQogCiAKLSAgLyogUmUtcmVhZCBibHVlIHpvbmVzIGZyb20gdGhlIG9yaWdpbmFsIGZvbnRzIGFuZCBzdG9yZSB0aGVtIGludG8gb3V0ICovCi0gIC8qIHByaXZhdGUgc3RydWN0dXJlLiAgVGhpcyBmdW5jdGlvbiByZS1vcmRlcnMsIHNhbml0aXplcyBhbmQgICAgICAgICAqLworICAvKiBSZS1yZWFkIGJsdWUgem9uZXMgZnJvbSB0aGUgb3JpZ2luYWwgZm9udHMgYW5kIHN0b3JlIHRoZW0gaW50byBvdXIgKi8KKyAgLyogcHJpdmF0ZSBzdHJ1Y3R1cmUuICBUaGlzIGZ1bmN0aW9uIHJlLW9yZGVycywgc2FuaXRpemVzLCBhbmQgICAgICAgICovCiAgIC8qIGZ1enotZXhwYW5kcyB0aGUgem9uZXMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZAogICBwc2hfYmx1ZXNfc2V0X3pvbmVzKCBQU0hfQmx1ZXMgIHRhcmdldCwKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmggYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCmluZGV4IGNmODBiZjQuLmMzYWEwYWUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNoZ2xvYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNoZ2xvYi5oCisgKgorICogICBQb3N0U2NyaXB0IGhpbnRlciBnbG9iYWwgaGludGluZyBtYW5hZ2VtZW50LgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBTSEdMT0JfSF8KQEAgLTM2LDI3ICszNiwyNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQGNvbnN0YW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0dMT0JBTFNfTUFYX0JMVUVfWk9ORVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQGRlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibHVlIHpvbmVzIGluIGEgZm9udCBnbG9iYWwgaGludHMgc3RydWN0dXJlLiAqLwotICAvKiAgICBTZWUgQFBTX0dsb2JhbHNfQmx1ZXNSZWMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgUFNfR0xPQkFMU19NQVhfQkxVRV9aT05FUworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsdWUgem9uZXMgaW4gYSBmb250IGdsb2JhbCBoaW50cyBzdHJ1Y3R1cmUuCisgICAqICAgU2VlIEBQU19HbG9iYWxzX0JsdWVzUmVjLgorICAgKi8KICNkZWZpbmUgUFNfR0xPQkFMU19NQVhfQkxVRV9aT05FUyAgMTYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQGNvbnN0YW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTX0dMT0JBTFNfTUFYX1NURF9XSURUSFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQGRlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFuZGFyZCBhbmQgc25hcCB3aWR0aHMgaW4gZWl0aGVyIHRoZSAgICAgICAqLwotICAvKiAgICBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRpcmVjdGlvbi4gIFNlZSBAUFNfR2xvYmFsc19XaWR0aHNSZWMuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgUFNfR0xPQkFMU19NQVhfU1REX1dJRFRIUworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YW5kYXJkIGFuZCBzbmFwIHdpZHRocyBpbiBlaXRoZXIgdGhlCisgICAqICAgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBkaXJlY3Rpb24uICBTZWUgQFBTX0dsb2JhbHNfV2lkdGhzUmVjLgorICAgKi8KICNkZWZpbmUgUFNfR0xPQkFMU19NQVhfU1REX1dJRFRIUyAgMTYKIAogCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYyBiL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCmluZGV4IDBlZWRhYzQuLmZkNzAzZDYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2hpbnRlci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBIaW50aW5nIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hpbnRlci5jCisgKgorICogICBGcmVlVHlwZSBQb3N0U2NyaXB0IEhpbnRpbmcgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgInBzaGFsZ28uYyIKICNpbmNsdWRlICJwc2hnbG9iLmMiCiAjaW5jbHVkZSAicHNobW9kLmMiCi0jaW5jbHVkZSAicHNocGljLmMiCiAjaW5jbHVkZSAicHNocmVjLmMiCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG1vZC5jIGIvc3JjL3BzaGludGVyL3BzaG1vZC5jCmluZGV4IDBiOGY2ZjkuLmUwNDBkNjAgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2htb2QuYworKysgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKQEAgLTEsMjYgKzEsMjUgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzaG1vZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzaG1vZC5jCisgKgorICogICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgInBzaHJlYy5oIgogI2luY2x1ZGUgInBzaGFsZ28uaCIKLSNpbmNsdWRlICJwc2hwaWMuaCIKIAogCiAgIC8qIHRoZSBQb3N0c2NyaXB0IEhpbnRlciBtb2R1bGUgc3RydWN0dXJlICovCkBAIC0xMTEsNyArMTEwLDcgQEAKICAgICAweDEwMDAwTCwKICAgICAweDIwMDAwTCwKIAotICAgICZQU0hJTlRFUl9JTlRFUkZBQ0VfR0VULCAgICAgICAgICAgICAgLyogbW9kdWxlLXNwZWNpZmljIGludGVyZmFjZSAqLworICAgICZwc2hpbnRlcl9pbnRlcmZhY2UsICAgICAgICAvKiBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlICovCiAKICAgICAoRlRfTW9kdWxlX0NvbnN0cnVjdG9yKXBzX2hpbnRlcl9pbml0LCAgLyogbW9kdWxlX2luaXQgICAqLwogICAgIChGVF9Nb2R1bGVfRGVzdHJ1Y3RvcikgcHNfaGludGVyX2RvbmUsICAvKiBtb2R1bGVfZG9uZSAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNobW9kLmggYi9zcmMvcHNoaW50ZXIvcHNobW9kLmgKaW5kZXggNTU2ZGUyZi4uMzY4NzQwYyAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaG1vZC5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2htb2QuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNobW9kLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNobW9kLmgKKyAqCisgKiAgIFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBTSE1PRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG50ZXJyLmggYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAppbmRleCBiOWQwMmQyLi42MDgxNGUxIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNobnRlcnIuaApAQCAtMSwyNiArMSwyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNobnRlcnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBTIEhpbnRlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNobnRlcnIuaAorICoKKyAqICAgUFMgSGludGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBQU0hpbnRlciBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgUFNIaW50ZXIgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBQU0hOVEVSUl9IXwogI2RlZmluZSBQU0hOVEVSUl9IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHBpYy5jIGIvc3JjL3BzaGludGVyL3BzaHBpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjVhZDMxLi4wMDAwMDAwCi0tLSBhL3NyYy9wc2hpbnRlci9wc2hwaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzaHBpYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNoaW50ZXIgbW9kdWxlLiAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlICJwc2hwaWMuaCIKLSNpbmNsdWRlICJwc2hudGVyci5oIgotCi0KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0gIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgUElDIGluaXQgZnVuY3Rpb25zIGZyb20gcHNobW9kLmMgKi8KLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX3BzaGludGVyX2ludGVyZmFjZSggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTSGludGVyX0ludGVyZmFjZSogIGNsYXp6ICk7Ci0KLSAgdm9pZAotICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgaWYgKCBwaWNfY29udGFpbmVyLT5wc2hpbnRlciApCi0gICAgewotICAgICAgRlRfRlJFRSggcGljX2NvbnRhaW5lci0+cHNoaW50ZXIgKTsKLSAgICAgIHBpY19jb250YWluZXItPnBzaGludGVyID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotCi0gIEZUX0Vycm9yCi0gIHBzaGludGVyX21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOwotICAgIFBTSGludGVyUElDKiAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KLSAgICBpZiAoIEZUX0FMTE9DKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOwotICAgIHBpY19jb250YWluZXItPnBzaGludGVyID0gY29udGFpbmVyOwotCi0gICAgLyogYWRkIGNhbGwgdG8gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd2hlbiB5b3UgYWRkIG5ldyBzY3JpcHRzICovCi0gICAgRlRfSW5pdF9DbGFzc19wc2hpbnRlcl9pbnRlcmZhY2UoCi0gICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5wc2hpbnRlcl9pbnRlcmZhY2UgKTsKLQotICAgIGlmICggZXJyb3IgKQotICAgICAgcHNoaW50ZXJfbW9kdWxlX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocGljLmggYi9zcmMvcHNoaW50ZXIvcHNocGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjliYTguLjAwMDAwMDAKLS0tIGEvc3JjL3BzaGludGVyL3BzaHBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNocGljLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc2hpbnRlciBtb2R1bGUuICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIFBTSFBJQ19IXwotI2RlZmluZSBQU0hQSUNfSF8KLQotCi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAotCi0KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotI2RlZmluZSBQU0hJTlRFUl9JTlRFUkZBQ0VfR0VUICBwc2hpbnRlcl9pbnRlcmZhY2UKLQotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIHR5cGVkZWYgc3RydWN0ICBQU0hpbnRlclBJQ18KLSAgewotICAgIFBTSGludGVyX0ludGVyZmFjZSAgcHNoaW50ZXJfaW50ZXJmYWNlOwotCi0gIH0gUFNIaW50ZXJQSUM7Ci0KLQotI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgKCAoUFNIaW50ZXJQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIucHNoaW50ZXIgKSApCi0KLSNkZWZpbmUgUFNISU5URVJfSU5URVJGQUNFX0dFVCAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnBzaGludGVyX2ludGVyZmFjZSApCi0KLSAgLyogc2VlIHBzaHBpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KLSAgdm9pZAotICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotICBGVF9FcnJvcgotICBwc2hpbnRlcl9tb2R1bGVfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotIC8qICovCi0KLSNlbmRpZiAvKiBQU0hQSUNfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hyZWMuYyBiL3NyYy9wc2hpbnRlci9wc2hyZWMuYwppbmRleCA2NjQ4ZDEzLi41MGQ2NmNhIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNocmVjLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaHJlYy5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc2hyZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBoaW50cyByZWNvcmRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc2hyZWMuYworICoKKyAqICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBoaW50cyByZWNvcmRlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHJlYy5oIGIvc3JjL3BzaGludGVyL3BzaHJlYy5oCmluZGV4IDdlM2RmZTAuLjU2YzBmOTkgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hyZWMuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKQEAgLTEsMzEgKzEsMzEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzaHJlYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0c2NyaXB0IChUeXBlMS9UeXBlMikgaGludHMgcmVjb3JkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBzaHJlYy5oCisgKgorICogICBQb3N0c2NyaXB0IChUeXBlMS9UeXBlMikgaGludHMgcmVjb3JkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgYXJlIGNhbGxlZCBmcm9tIHRoZSBUeXBlIDEsIENJRCBhbmQgQ0ZGICAgICovCi0gIC8qICBmb250IGRyaXZlcnMgdG8gcmVjb3JkIHRoZSBoaW50cyBvZiBhIGdpdmVuIGNoYXJhY3Rlci9nbHlwaC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgVGhlIGhpbnRzIGFyZSByZWNvcmRlZCBpbiBhIHVuaWZpZWQgZm9ybWF0LCBhbmQgYXJlIGxhdGVyIHByb2Nlc3NlZCAgICovCi0gIC8qICBieSB0aGUgYG9wdGltaXplcicgYW5kIGBmaXR0ZXInIHRvIGFkanVzdCB0aGUgb3V0bGluZXMgdG8gdGhlIHBpeGVsICAgKi8KLSAgLyogIGdyaWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgaGVyZSBhcmUgY2FsbGVkIGZyb20gdGhlIFR5cGUgMSwgQ0lEIGFuZCBDRkYKKyAgICogZm9udCBkcml2ZXJzIHRvIHJlY29yZCB0aGUgaGludHMgb2YgYSBnaXZlbiBjaGFyYWN0ZXIvZ2x5cGguCisgICAqCisgICAqIFRoZSBoaW50cyBhcmUgcmVjb3JkZWQgaW4gYSB1bmlmaWVkIGZvcm1hdCwgYW5kIGFyZSBsYXRlciBwcm9jZXNzZWQKKyAgICogYnkgdGhlIGBvcHRpbWl6ZXInIGFuZCBgZml0dGVyJyB0byBhZGp1c3QgdGhlIG91dGxpbmVzIHRvIHRoZSBwaXhlbAorICAgKiBncmlkLgorICAgKgorICAgKi8KIAogCiAjaWZuZGVmIFBTSFJFQ19IXwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3J1bGVzLm1rIGIvc3JjL3BzaGludGVyL3J1bGVzLm1rCmluZGV4IDk2NjY5MGUuLjBlMmZiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9ydWxlcy5taworKysgYi9zcmMvcHNoaW50ZXIvcnVsZXMubWsKQEAgLTMxLDcgKzMxLDYgQEAKIFBTSElOVEVSX0RSVl9TUkMgOj0gJChQU0hJTlRFUl9ESVIpL3BzaGFsZ28uYyBcCiAgICAgICAgICAgICAgICAgICAgICQoUFNISU5URVJfRElSKS9wc2hnbG9iLmMgXAogICAgICAgICAgICAgICAgICAgICAkKFBTSElOVEVSX0RJUikvcHNobW9kLmMgIFwKLSAgICAgICAgICAgICAgICAgICAgJChQU0hJTlRFUl9ESVIpL3BzaHBpYy5jICBcCiAgICAgICAgICAgICAgICAgICAgICQoUFNISU5URVJfRElSKS9wc2hyZWMuYwogCiAKZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCmluZGV4IDg5MjllYmUuLjcxOWU5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKKysrIGIvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNtb2R1bGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBTTmFtZXMgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNtb2R1bGUuYworICoKKyAqICAgUFNOYW1lcyBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI0LDE2ICsyNCwxNiBAQAogI2luY2x1ZGUgInBzbW9kdWxlLmgiCiAKICAgLyoKLSAgICogIFRoZSBmaWxlIGBwc3RhYmxlcy5oJyB3aXRoIGl0cyBhcnJheXMgYW5kIGl0cyBmdW5jdGlvbgotICAgKiAgYGZ0X2dldF9hZG9iZV9nbHlwaF9pbmRleCcgaXMgdXNlZnVsIGZvciBvdGhlciBwcm9qZWN0cyBhbHNvIChmb3IKLSAgICogIGV4YW1wbGUsIGBwZGZpdW0nIGlzIHVzaW5nIGl0KS4gIEhvd2V2ZXIsIGlmIHVzZWQgYXMgYSBDKysgaGVhZGVyLAotICAgKiAgaW5jbHVkaW5nIGl0IGluIHR3byBkaWZmZXJlbnQgc291cmNlIGZpbGVzIG1ha2VzIGl0IG5lY2Vzc2FyeSB0byB1c2UKLSAgICogIGBleHRlcm4gY29uc3QnIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgaXRzIGFycmF5cywgb3RoZXJ3aXNlIHRoZSBkYXRhCi0gICAqICB3b3VsZCBiZSBkdXBsaWNhdGVkIGFzIG1hbmRhdGVkIGJ5IHRoZSBDKysgc3RhbmRhcmQuCisgICAqIFRoZSBmaWxlIGBwc3RhYmxlcy5oJyB3aXRoIGl0cyBhcnJheXMgYW5kIGl0cyBmdW5jdGlvbgorICAgKiBgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4JyBpcyB1c2VmdWwgZm9yIG90aGVyIHByb2plY3RzIGFsc28gKGZvcgorICAgKiBleGFtcGxlLCBgcGRmaXVtJyBpcyB1c2luZyBpdCkuICBIb3dldmVyLCBpZiB1c2VkIGFzIGEgQysrIGhlYWRlciwKKyAgICogaW5jbHVkaW5nIGl0IGluIHR3byBkaWZmZXJlbnQgc291cmNlIGZpbGVzIG1ha2VzIGl0IG5lY2Vzc2FyeSB0byB1c2UKKyAgICogYGV4dGVybiBjb25zdCcgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBpdHMgYXJyYXlzLCBvdGhlcndpc2UgdGhlIGRhdGEKKyAgICogd291bGQgYmUgZHVwbGljYXRlZCBhcyBtYW5kYXRlZCBieSB0aGUgQysrIHN0YW5kYXJkLgogICAgKgotICAgKiAgRm9yIHRoaXMgcmVhc29uLCB3ZSB1c2UgYERFRklORV9QU19UQUJMRVMnIHRvIGd1YXJkIHRoZSBmdW5jdGlvbgotICAgKiAgZGVmaW5pdGlvbnMsIGFuZCBgREVGSU5FX1BTX1RBQkxFU19EQVRBJyB0byBwcm92aWRlIGJvdGggcHJvcGVyIGFycmF5Ci0gICAqICBkZWNsYXJhdGlvbnMgYW5kIGRlZmluaXRpb25zLgorICAgKiBGb3IgdGhpcyByZWFzb24sIHdlIHVzZSBgREVGSU5FX1BTX1RBQkxFUycgdG8gZ3VhcmQgdGhlIGZ1bmN0aW9uCisgICAqIGRlZmluaXRpb25zLCBhbmQgYERFRklORV9QU19UQUJMRVNfREFUQScgdG8gcHJvdmlkZSBib3RoIHByb3BlciBhcnJheQorICAgKiBkZWNsYXJhdGlvbnMgYW5kIGRlZmluaXRpb25zLgogICAgKi8KICNpbmNsdWRlICJwc3RhYmxlcy5oIgogI2RlZmluZSAgREVGSU5FX1BTX1RBQkxFUwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgInBzdGFibGVzLmgiCiAKICNpbmNsdWRlICJwc25hbWVyci5oIgotI2luY2x1ZGUgInBzcGljLmgiCiAKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwpAQCAtMzkzLDcgKzM5Miw5IEBACiAgICAgICAgIC8qIFJlYWxsb2NhdGUgaWYgdGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaXMgbXVjaCBzbWFsbGVyLiAqLwogICAgICAgICBpZiAoIGNvdW50IDwgbnVtX2dseXBocyAvIDIgKQogICAgICAgICB7Ci0gICAgICAgICAgKHZvaWQpRlRfUkVORVdfQVJSQVkoIHRhYmxlLT5tYXBzLCBudW1fZ2x5cGhzLCBjb3VudCApOworICAgICAgICAgICh2b2lkKUZUX1JFTkVXX0FSUkFZKCB0YWJsZS0+bWFwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2dseXBocyArIEVYVFJBX0dMWVBIX0xJU1RfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKTsKICAgICAgICAgICBlcnJvciA9IEZUX0Vycl9PazsKICAgICAgICAgfQogCkBAIC01NzcsMjggKzU3OCwxNiBAQAogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxKAogICAgIHBzY21hcHNfc2VydmljZXMsCiAKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfQ01BUFMsICZQU0NNQVBTX0lOVEVSRkFDRV9HRVQgKQorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9DTUFQUywgJnBzY21hcHNfaW50ZXJmYWNlICkKIAogCiAgIHN0YXRpYyBGVF9Qb2ludGVyCiAgIHBzbmFtZXNfZ2V0X3NlcnZpY2UoIEZUX01vZHVsZSAgICBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBzZXJ2aWNlX2lkICkKICAgewotICAgIC8qIFBTQ01BUFNfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0KLQotICAgIGlmICggIW1vZHVsZSApCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICBsaWJyYXJ5ID0gbW9kdWxlLT5saWJyYXJ5OwotICAgIGlmICggIWxpYnJhcnkgKQotICAgICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQogICAgIEZUX1VOVVNFRCggbW9kdWxlICk7Ci0jZW5kaWYKIAotICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBQU0NNQVBTX1NFUlZJQ0VTX0dFVCwgc2VydmljZV9pZCApOworICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBwc2NtYXBzX3NlcnZpY2VzLCBzZXJ2aWNlX2lkICk7CiAgIH0KIAogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLwpAQCAtNjIxLDcgKzYxMCw3IEBACiAgICAgMHgyMDAwMEwsICAgLyogZHJpdmVyIHJlcXVpcmVzIEZyZWVUeXBlIDIgb3IgYWJvdmUgKi8KIAogICAgIFBVVF9QU19OQU1FU19TRVJWSUNFKAotICAgICAgKHZvaWQqKSZQU0NNQVBTX0lOVEVSRkFDRV9HRVQgKSwgICAvKiBtb2R1bGUgc3BlY2lmaWMgaW50ZXJmYWNlICovCisgICAgICAodm9pZCopJnBzY21hcHNfaW50ZXJmYWNlICksICAgLyogbW9kdWxlIHNwZWNpZmljIGludGVyZmFjZSAqLwogCiAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZV9pbml0ICAgKi8KICAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlX2RvbmUgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKaW5kZXggM2U5NGY4Yi4uOGIwMjZlZSAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaAorKysgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBwc21vZHVsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGlnaC1sZXZlbCBQU05hbWVzIG1vZHVsZSBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwc21vZHVsZS5oCisgKgorICogICBIaWdoLWxldmVsIFBTTmFtZXMgbW9kdWxlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgUFNNT0RVTEVfSF8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmggYi9zcmMvcHNuYW1lcy9wc25hbWVyci5oCmluZGV4IDE0ZWI3NmMuLmFmODkxNTcgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKKysrIGIvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNuYW1lcnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBTIG5hbWVzIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNuYW1lcnIuaAorICoKKyAqICAgUFMgbmFtZXMgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBQUyBuYW1lcyBtb2R1bGUgZXJyb3IgZW51bWVyYXRpb24gICAgICovCi0gIC8qIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFBTIG5hbWVzIG1vZHVsZSBlcnJvciBlbnVtZXJhdGlvbgorICAgKiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIFBTTkFNRVJSX0hfCiAjZGVmaW5lIFBTTkFNRVJSX0hfCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc25hbWVzLmMgYi9zcmMvcHNuYW1lcy9wc25hbWVzLmMKaW5kZXggZmViYjgwZC4uYmZhNWI4NSAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCisrKyBiL3NyYy9wc25hbWVzL3BzbmFtZXMuYwpAQCAtMSwyNiArMSwyNSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNuYW1lcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIFBTTmFtZXMgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHNuYW1lcy5jCisgKgorICogICBGcmVlVHlwZSBQU05hbWVzIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJwc21vZHVsZS5jIgotI2luY2x1ZGUgInBzcGljLmMiCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc3BpYy5jIGIvc3JjL3BzbmFtZXMvcHNwaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhMDZmMy4uMDAwMDAwMAotLS0gYS9zcmMvcHNuYW1lcy9wc3BpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHNwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc25hbWVzIG1vZHVsZS4gICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgInBzcGljLmgiCi0jaW5jbHVkZSAicHNuYW1lcnIuaCIKLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHBzbW9kdWxlLmMgKi8KLSAgRlRfRXJyb3IKLSAgRlRfQ3JlYXRlX0NsYXNzX3BzY21hcHNfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKTsKLSAgdm9pZAotICBGVF9EZXN0cm95X0NsYXNzX3BzY21hcHNfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICk7Ci0KLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX3BzY21hcHNfaW50ZXJmYWNlKCBGVF9MaWJyYXJ5ICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlX1BzQ01hcHNSZWMqICBjbGF6eiApOwotCi0KLSAgdm9pZAotICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICBpZiAoIHBpY19jb250YWluZXItPnBzbmFtZXMgKQotICAgIHsKLSAgICAgIFBTTW9kdWxlUElDKiAgY29udGFpbmVyID0gKFBTTW9kdWxlUElDKilwaWNfY29udGFpbmVyLT5wc25hbWVzOwotCi0KLSAgICAgIGlmICggY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzICkKLSAgICAgICAgRlRfRGVzdHJveV9DbGFzc19wc2NtYXBzX3NlcnZpY2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+cHNjbWFwc19zZXJ2aWNlcyApOwotICAgICAgY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzID0gTlVMTDsKLSAgICAgIEZUX0ZSRUUoIGNvbnRhaW5lciApOwotICAgICAgcGljX2NvbnRhaW5lci0+cHNuYW1lcyA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLQotICBGVF9FcnJvcgotICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBGVF9QSUNfQ29udGFpbmVyKiAgcGljX2NvbnRhaW5lciA9ICZsaWJyYXJ5LT5waWNfY29udGFpbmVyOwotICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvciAgICAgICAgID0gRlRfRXJyX09rOwotICAgIFBTTW9kdWxlUElDKiAgICAgICBjb250YWluZXIgICAgID0gTlVMTDsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgLyogYWxsb2NhdGUgcG9pbnRlciwgY2xlYXIgYW5kIHNldCBnbG9iYWwgY29udGFpbmVyIHBvaW50ZXIgKi8KLSAgICBpZiAoIEZUX0FMTE9DKCBjb250YWluZXIsIHNpemVvZiAoICpjb250YWluZXIgKSApICkKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICBGVF9NRU1fU0VUKCBjb250YWluZXIsIDAsIHNpemVvZiAoICpjb250YWluZXIgKSApOwotICAgIHBpY19jb250YWluZXItPnBzbmFtZXMgPSBjb250YWluZXI7Ci0KLSAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KLSAgICBlcnJvciA9IEZUX0NyZWF0ZV9DbGFzc19wc2NtYXBzX3NlcnZpY2VzKAotICAgICAgICAgICAgICBsaWJyYXJ5LCAmY29udGFpbmVyLT5wc2NtYXBzX3NlcnZpY2VzICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7Ci0gICAgRlRfSW5pdF9DbGFzc19wc2NtYXBzX2ludGVyZmFjZSggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyLT5wc2NtYXBzX2ludGVyZmFjZSApOwotCi0gIEV4aXQ6Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOwotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNwaWMuaCBiL3NyYy9wc25hbWVzL3BzcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4OTc4MGMuLjAwMDAwMDAKLS0tIGEvc3JjL3BzbmFtZXMvcHNwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBzcGljLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNuYW1lcyBtb2R1bGUuICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBQU1BJQ19IXwotI2RlZmluZSBQU1BJQ19IXwotCi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICi0KLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jZGVmaW5lIFBTQ01BUFNfU0VSVklDRVNfR0VUICAgcHNjbWFwc19zZXJ2aWNlcwotI2RlZmluZSBQU0NNQVBTX0lOVEVSRkFDRV9HRVQgIHBzY21hcHNfaW50ZXJmYWNlCi0KLSNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLSAgdHlwZWRlZiBzdHJ1Y3QgIFBTTW9kdWxlUElDXwotICB7Ci0gICAgRlRfU2VydmljZURlc2NSZWMqICAgICBwc2NtYXBzX3NlcnZpY2VzOwotICAgIEZUX1NlcnZpY2VfUHNDTWFwc1JlYyAgcHNjbWFwc19pbnRlcmZhY2U7Ci0KLSAgfSBQU01vZHVsZVBJQzsKLQotCi0jZGVmaW5lIEdFVF9QSUMoIGxpYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIChQU01vZHVsZVBJQyopKChsaWIpLT5waWNfY29udGFpbmVyLnBzbmFtZXMpICkKLSNkZWZpbmUgUFNDTUFQU19TRVJWSUNFU19HRVQgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+cHNjbWFwc19zZXJ2aWNlcyApCi0jZGVmaW5lIFBTQ01BUFNfSU5URVJGQUNFX0dFVCAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnBzY21hcHNfaW50ZXJmYWNlICkKLQotCi0gIC8qIHNlZSBwc3BpYy5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gKi8KLSAgdm9pZAotICBwc25hbWVzX21vZHVsZV9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0gIEZUX0Vycm9yCi0gIHBzbmFtZXNfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAvKiAqLwotCi0jZW5kaWYgLyogUFNQSUNfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzdGFibGVzLmggYi9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCmluZGV4IDc5NTQ1ZWUuLmU1NzQxMjIgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKKysrIGIvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcHN0YWJsZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcHN0YWJsZXMuaAorICoKKyAqICAgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogICAvKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgLS0gZG8gbm90IGVkaXQhICovCkBAIC02MDksMTIgKzYwOSwxMiBAQAogCiAKICAgLyoKLSAgICogIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCi0gICAqICBvcHRpbWl6ZWQgZm9yIGVmZmljaWVudCBzZWFyY2hpbmcuICBJdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlCi0gICAqICBgZ2xuYW1lcy5weScgcHl0aG9uIHNjcmlwdCBsb2NhdGVkIGluIHRoZSBgc3JjL3Rvb2xzJyBkaXJlY3RvcnkuCisgICAqIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCisgICAqIG9wdGltaXplZCBmb3IgZWZmaWNpZW50IHNlYXJjaGluZy4gIEl0IGhhcyBiZWVuIGdlbmVyYXRlZCBieSB0aGUKKyAgICogYGdsbmFtZXMucHknIHB5dGhvbiBzY3JpcHQgbG9jYXRlZCBpbiB0aGUgYHNyYy90b29scycgZGlyZWN0b3J5LgogICAgKgotICAgKiAgVGhlIGxvb2t1cCBmdW5jdGlvbiB0byBnZXQgdGhlIFVuaWNvZGUgdmFsdWUgZm9yIGEgZ2l2ZW4gc3RyaW5nCi0gICAqICBpcyBkZWZpbmVkIGJlbG93IHRoZSB0YWJsZS4KKyAgICogVGhlIGxvb2t1cCBmdW5jdGlvbiB0byBnZXQgdGhlIFVuaWNvZGUgdmFsdWUgZm9yIGEgZ2l2ZW4gc3RyaW5nCisgICAqIGlzIGRlZmluZWQgYmVsb3cgdGhlIHRhYmxlLgogICAgKi8KIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVApAQCAtNDEzNyw3ICs0MTM3LDcgQEAKIAogI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTCiAgIC8qCi0gICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBjb21wcmVzc2VkIHRhYmxlIGVmZmljaWVudGx5LgorICAgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBjb21wcmVzc2VkIHRhYmxlIGVmZmljaWVudGx5LgogICAgKi8KICAgc3RhdGljIHVuc2lnbmVkIGxvbmcKICAgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4KCBjb25zdCBjaGFyKiAgbmFtZSwKZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3J1bGVzLm1rIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKaW5kZXggNGQ2MjlkOC4uNDZlYzVkZiAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcnVsZXMubWsKKysrIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKQEAgLTI4LDggKzI4LDcgQEAKIAogIyBQU05hbWVzIGRyaXZlciBzb3VyY2VzIChpLmUuLCBDIGZpbGVzKQogIwotUFNOQU1FU19EUlZfU1JDIDo9ICQoUFNOQU1FU19ESVIpL3BzbW9kdWxlLmMgXAotICAgICAgICAgICAgICAgICAgICQoUFNOQU1FU19ESVIpL3BzcGljLmMKK1BTTkFNRVNfRFJWX1NSQyA6PSAkKFBTTkFNRVNfRElSKS9wc21vZHVsZS5jCiAKIAogIyBQU05hbWVzIGRyaXZlciBoZWFkZXJzCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0bWlzYy5oIGIvc3JjL3Jhc3Rlci9mdG1pc2MuaAppbmRleCA3ZTQwMTE5Li45N2RiMzcxIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0bWlzYy5oCisrKyBiL3NyYy9yYXN0ZXIvZnRtaXNjLmgKQEAgLTEsMjggKzEsMjggQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bWlzYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBNaXNjZWxsYW5lb3VzIG1hY3JvcyBmb3Igc3RhbmQtYWxvbmUgcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbiAgICAgICAqLwotLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwotLyogIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdG1pc2MuaAorICoKKyAqICAgTWlzY2VsbGFuZW91cyBtYWNyb3MgZm9yIHN0YW5kLWFsb25lIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24KKyAqICAgb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZAorICogbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyAqbm90KiBwb3J0YWJsZSEgIFlvdSBoYXZlIHRvIGFkYXB0ICovCi0gIC8qIGl0cyBkZWZpbml0aW9ucyB0byB5b3VyIHBsYXRmb3JtLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyAqbm90KiBwb3J0YWJsZSEgIFlvdSBoYXZlIHRvIGFkYXB0CisgICAqIGl0cyBkZWZpbml0aW9ucyB0byB5b3VyIHBsYXRmb3JtLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBGVE1JU0NfSF8KICNkZWZpbmUgRlRNSVNDX0hfCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKaW5kZXggNDM1NDczMC4uOGE1ODNlYSAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCisrKyBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwpAQCAtMSw1MSArMSw1MSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRyYXN0ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRyYXN0ZXIuYworICoKKyAqICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCB0aGUgcmVzdCBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLCBieSAqLwotICAvKiBkZWZpbmluZyB0aGUgU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvICAgKi8KLSAgLyogcHV0IHRoZSBmaWxlcyBgZnRpbWFnZS5oJyBhbmQgYGZ0bWlzYy5oJyBpbnRvIHRoZSAkKGluY2RpcikgICAgICAgICAgICovCi0gIC8qIGRpcmVjdG9yeS4gIFR5cGljYWxseSwgeW91IHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBjb3B5IGBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMnICh0aGlzIGZpbGUpIHRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvcHkgYGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9yYXN0ZXIvZnRtaXNjLmgnIHRvIHlvdXIgKi8KLSAgLyogICBjdXJyZW50IGRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvbXBpbGUgYGZ0cmFzdGVyJyB3aXRoIHRoZSBTVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjYyAtYyAtRFNUQU5EQUxPTkVfIGZ0cmFzdGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIHJlbmRlcmVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgY2FsbCB0byAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIGBmdF9zdGFuZGFyZF9yYXN0ZXIucmFzdGVyX25ldyc7IGEgYml0bWFwIGNhbiBiZSBnZW5lcmF0ZWQgICAgICAgICAgICAqLwotICAvKiB3aXRoIGEgY2FsbCB0byBgZnRfc3RhbmRhcmRfcmFzdGVyLnJhc3Rlcl9yZW5kZXInLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNlZSB0aGUgY29tbWVudHMgYW5kIGRvY3VtZW50YXRpb24gaW4gdGhlIGZpbGUgYGZ0aW1hZ2UuaCcgZm9yIG1vcmUgICAqLwotICAvKiBkZXRhaWxzIG9uIGhvdyB0aGUgcmFzdGVyIHdvcmtzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IHRoZSByZXN0IG9mIHRoZSBGcmVlVHlwZSBlbmdpbmUsIGJ5CisgICAqIGRlZmluaW5nIHRoZSBTVEFOREFMT05FXyBtYWNybyB3aGVuIGNvbXBpbGluZyBpdC4gIFlvdSBhbHNvIG5lZWQgdG8KKyAgICogcHV0IHRoZSBmaWxlcyBgZnRpbWFnZS5oJyBhbmQgYGZ0bWlzYy5oJyBpbnRvIHRoZSAkKGluY2RpcikKKyAgICogZGlyZWN0b3J5LiAgVHlwaWNhbGx5LCB5b3Ugc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlCisgICAqCisgICAqIC0gY29weSBgc3JjL3Jhc3Rlci9mdHJhc3Rlci5jJyAodGhpcyBmaWxlKSB0byB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5CisgICAqCisgICAqIC0gY29weSBgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgnIGFuZCBgc3JjL3Jhc3Rlci9mdG1pc2MuaCcgdG8geW91cgorICAgKiAgIGN1cnJlbnQgZGlyZWN0b3J5CisgICAqCisgICAqIC0gY29tcGlsZSBgZnRyYXN0ZXInIHdpdGggdGhlIFNUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluCisgICAqCisgICAqICAgICBjYyAtYyAtRFNUQU5EQUxPTkVfIGZ0cmFzdGVyLmMKKyAgICoKKyAgICogVGhlIHJlbmRlcmVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgY2FsbCB0bworICAgKiBgZnRfc3RhbmRhcmRfcmFzdGVyLnJhc3Rlcl9uZXcnOyBhIGJpdG1hcCBjYW4gYmUgZ2VuZXJhdGVkCisgICAqIHdpdGggYSBjYWxsIHRvIGBmdF9zdGFuZGFyZF9yYXN0ZXIucmFzdGVyX3JlbmRlcicuCisgICAqCisgICAqIFNlZSB0aGUgY29tbWVudHMgYW5kIGRvY3VtZW50YXRpb24gaW4gdGhlIGZpbGUgYGZ0aW1hZ2UuaCcgZm9yIG1vcmUKKyAgICogZGV0YWlscyBvbiBob3cgdGhlIHJhc3RlciB3b3Jrcy4KKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgaXMgYSByZXdyaXRlIG9mIHRoZSBGcmVlVHlwZSAxLnggc2Nhbi1saW5lIGNvbnZlcnRlciAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGlzIGEgcmV3cml0ZSBvZiB0aGUgRnJlZVR5cGUgMS54IHNjYW4tbGluZSBjb252ZXJ0ZXIKKyAgICoKKyAgICovCiAKICNpZmRlZiBTVEFOREFMT05FXwogCkBAIC02NSw4MiArNjUsODEgQEAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgImZ0cmFzdGVyLmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0ggICAvKiBmb3IgRlRfTXVsRGl2IGFuZCBGVF9NdWxEaXZfTm9fUm91bmQgKi8KLQotI2luY2x1ZGUgInJhc3RwaWMuaCIKKyNpbmNsdWRlIEZUX09VVExJTkVfSCAgICAgICAgIC8qIGZvciBGVF9PdXRsaW5lX0dldF9DQm94ICAgICAgICAgICAgICAqLwogCiAjZW5kaWYgLyogIVNUQU5EQUxPTkVfICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEEgc2ltcGxlIHRlY2huaWNhbCBub3RlIG9uIGhvdyB0aGUgcmFzdGVyIHdvcmtzICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQ29udmVydGluZyBhbiBvdXRsaW5lIGludG8gYSBiaXRtYXAgaXMgYWNoaWV2ZWQgaW4gc2V2ZXJhbCBzdGVwczogICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAxIC0gRGVjb21wb3NpbmcgdGhlIG91dGxpbmUgaW50byBzdWNjZXNzaXZlIGBwcm9maWxlcycuICBFYWNoICAgICAgICovCi0gIC8qICAgICAgIHByb2ZpbGUgaXMgc2ltcGx5IGFuIGFycmF5IG9mIHNjYW5saW5lIGludGVyc2VjdGlvbnMgb24gYSBnaXZlbiAqLwotICAvKiAgICAgICBkaW1lbnNpb24uICBBIHByb2ZpbGUncyBtYWluIGF0dHJpYnV0ZXMgYXJlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIG8gaXRzIHNjYW5saW5lIHBvc2l0aW9uIGJvdW5kYXJpZXMsIGkuZS4gYFltaW4nIGFuZCBgWW1heCcgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgbyBhbiBhcnJheSBvZiBpbnRlcnNlY3Rpb24gY29vcmRpbmF0ZXMgZm9yIGVhY2ggc2NhbmxpbmUgICAgICAgICovCi0gIC8qICAgICAgICAgYmV0d2VlbiBgWW1pbicgYW5kIGBZbWF4JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgbyBhIGRpcmVjdGlvbiwgaW5kaWNhdGluZyB3aGV0aGVyIGl0IHdhcyBidWlsdCBnb2luZyBgdXAnIG9yICAgICovCi0gIC8qICAgICAgICAgYGRvd24nLCBhcyB0aGlzIGlzIHZlcnkgaW1wb3J0YW50IGZvciBmaWxsaW5nIHJ1bGVzICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgbyBpdHMgZHJvcC1vdXQgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIDIgLSBTd2VlcGluZyB0aGUgdGFyZ2V0IG1hcCdzIHNjYW5saW5lcyBpbiBvcmRlciB0byBjb21wdXRlIHNlZ21lbnQgKi8KLSAgLyogICAgICAgYHNwYW5zJyB3aGljaCBhcmUgdGhlbiBmaWxsZWQuICBBZGRpdGlvbmFsbHksIHRoaXMgcGFzcyAgICAgICAgICovCi0gIC8qICAgICAgIHBlcmZvcm1zIGRyb3Atb3V0IGNvbnRyb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgb3V0bGluZSBkYXRhIGlzIHBhcnNlZCBkdXJpbmcgc3RlcCAxIG9ubHkuICBUaGUgcHJvZmlsZXMgYXJlICAgICovCi0gIC8qICAgYnVpbHQgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSByZW5kZXIgcG9vbCwgdXNlZCBhcyBhIHN0YWNrLiAgVGhlICAgICAqLwotICAvKiAgIGZvbGxvd2luZyBncmFwaGljcyBzaG93cyB0aGUgcHJvZmlsZSBsaXN0IHVuZGVyIGNvbnN0cnVjdGlvbjogICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIF8gXyAgICAqLwotICAvKiAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgKi8KLSAgLyogICAgfCBwcm9maWxlIHwgY29vcmRpbmF0ZXMgZm9yIHwgcHJvZmlsZSB8IGNvb3JkaW5hdGVzIGZvciB8LS0+ICAgICAgICovCi0gIC8qICAgIHwgICAgMSAgICB8ICBwcm9maWxlIDEgICAgICB8ICAgIDIgICAgfCAgcHJvZmlsZSAyICAgICAgfC0tPiAgICAgICAqLwotICAvKiAgICB8X19fX19fX19ffF9fX19fX19fX19fX19fX19ffF9fX19fX19fX3xfX19fX19fX19fX19fX19fX3xfXyBfIF8gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAqLwotICAvKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgKi8KLSAgLyogc3RhcnQgb2YgcmVuZGVyIHBvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoZSB0b3Agb2YgdGhlIHByb2ZpbGUgc3RhY2sgaXMga2VwdCBpbiB0aGUgYHRvcCcgdmFyaWFibGUuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQXMgeW91IGNhbiBzZWUsIGEgcHJvZmlsZSByZWNvcmQgaXMgcHVzaGVkIG9uIHRvcCBvZiB0aGUgcmVuZGVyICAgICAqLwotICAvKiAgIHBvb2wsIHdoaWNoIGlzIHRoZW4gZm9sbG93ZWQgYnkgaXRzIGNvb3JkaW5hdGVzL2ludGVyc2VjdGlvbnMuICBJZiAgKi8KLSAgLyogICBhIGNoYW5nZSBvZiBkaXJlY3Rpb24gaXMgZGV0ZWN0ZWQgaW4gdGhlIG91dGxpbmUsIGEgbmV3IHByb2ZpbGUgaXMgICovCi0gIC8qICAgZ2VuZXJhdGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBOb3RlIHRoYXQgd2hlbiBhbGwgcHJvZmlsZXMgaGF2ZSBiZWVuIGdlbmVyYXRlZCwgdGhlIGZ1bmN0aW9uICAgICAgICovCi0gIC8qICAgRmluYWxpemVfUHJvZmlsZV9UYWJsZSgpIGlzIHVzZWQgdG8gcmVjb3JkLCBmb3IgZWFjaCBwcm9maWxlLCBpdHMgICAqLwotICAvKiAgIGJvdHRvbS1tb3N0IHNjYW5saW5lIGFzIHdlbGwgYXMgdGhlIHNjYW5saW5lIGFib3ZlIGl0cyB1cG1vc3QgICAgICAgKi8KLSAgLyogICBib3VuZGFyeS4gIFRoZXNlIHBvc2l0aW9ucyBhcmUgY2FsbGVkIGB5LXR1cm5zJyBiZWNhdXNlIHRoZXkgKHNvcnQgICovCi0gIC8qICAgb2YpIGNvcnJlc3BvbmQgdG8gbG9jYWwgZXh0cmVtYS4gIFRoZXkgYXJlIHN0b3JlZCBpbiBhIHNvcnRlZCBsaXN0ICAqLwotICAvKiAgIGJ1aWx0IGZyb20gdGhlIHRvcCBvZiB0aGUgcmVuZGVyIHBvb2wgYXMgYSBkb3dud2FyZHMgc3RhY2s6ICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgXyBfIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgPC0tfCBzb3J0ZWQgbGlzdCBvZiAgICAgfCAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIDwtLXwgIGV4dHJlbWEgc2NhbmxpbmVzIHwgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIF8gXyBfX19fX19fX19fX19fX19fX198X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbWF4QnVmZiAgICAgICAgICAgc2l6ZUJ1ZmYgPSBlbmQgb2YgcG9vbCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFRoaXMgbGlzdCBpcyBsYXRlciB1c2VkIGR1cmluZyB0aGUgc3dlZXAgcGhhc2UgaW4gb3JkZXIgdG8gICAgICAgICAgKi8KLSAgLyogICBvcHRpbWl6ZSBwZXJmb3JtYW5jZSAoc2VlIHRlY2huaWNhbCBub3RlIG9uIHRoZSBzd2VlcCBiZWxvdykuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE9mIGNvdXJzZSwgdGhlIHJhc3RlciBkZXRlY3RzIHdoZXRoZXIgdGhlIHR3byBzdGFja3MgY29sbGlkZSBhbmQgICAgKi8KLSAgLyogICBoYW5kbGVzIHRoZSBzaXR1YXRpb24gcHJvcGVybHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEEgc2ltcGxlIHRlY2huaWNhbCBub3RlIG9uIGhvdyB0aGUgcmFzdGVyIHdvcmtzCisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqCisgICAqICAgQ29udmVydGluZyBhbiBvdXRsaW5lIGludG8gYSBiaXRtYXAgaXMgYWNoaWV2ZWQgaW4gc2V2ZXJhbCBzdGVwczoKKyAgICoKKyAgICogICAxIC0gRGVjb21wb3NpbmcgdGhlIG91dGxpbmUgaW50byBzdWNjZXNzaXZlIGBwcm9maWxlcycuICBFYWNoCisgICAqICAgICAgIHByb2ZpbGUgaXMgc2ltcGx5IGFuIGFycmF5IG9mIHNjYW5saW5lIGludGVyc2VjdGlvbnMgb24gYSBnaXZlbgorICAgKiAgICAgICBkaW1lbnNpb24uICBBIHByb2ZpbGUncyBtYWluIGF0dHJpYnV0ZXMgYXJlCisgICAqCisgICAqICAgICAgIG8gaXRzIHNjYW5saW5lIHBvc2l0aW9uIGJvdW5kYXJpZXMsIGkuZS4gYFltaW4nIGFuZCBgWW1heCcKKyAgICoKKyAgICogICAgICAgbyBhbiBhcnJheSBvZiBpbnRlcnNlY3Rpb24gY29vcmRpbmF0ZXMgZm9yIGVhY2ggc2NhbmxpbmUKKyAgICogICAgICAgICBiZXR3ZWVuIGBZbWluJyBhbmQgYFltYXgnCisgICAqCisgICAqICAgICAgIG8gYSBkaXJlY3Rpb24sIGluZGljYXRpbmcgd2hldGhlciBpdCB3YXMgYnVpbHQgZ29pbmcgYHVwJyBvcgorICAgKiAgICAgICAgIGBkb3duJywgYXMgdGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgZmlsbGluZyBydWxlcworICAgKgorICAgKiAgICAgICBvIGl0cyBkcm9wLW91dCBtb2RlCisgICAqCisgICAqICAgMiAtIFN3ZWVwaW5nIHRoZSB0YXJnZXQgbWFwJ3Mgc2NhbmxpbmVzIGluIG9yZGVyIHRvIGNvbXB1dGUgc2VnbWVudAorICAgKiAgICAgICBgc3BhbnMnIHdoaWNoIGFyZSB0aGVuIGZpbGxlZC4gIEFkZGl0aW9uYWxseSwgdGhpcyBwYXNzCisgICAqICAgICAgIHBlcmZvcm1zIGRyb3Atb3V0IGNvbnRyb2wuCisgICAqCisgICAqICAgVGhlIG91dGxpbmUgZGF0YSBpcyBwYXJzZWQgZHVyaW5nIHN0ZXAgMSBvbmx5LiAgVGhlIHByb2ZpbGVzIGFyZQorICAgKiAgIGJ1aWx0IGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgcmVuZGVyIHBvb2wsIHVzZWQgYXMgYSBzdGFjay4gIFRoZQorICAgKiAgIGZvbGxvd2luZyBncmFwaGljcyBzaG93cyB0aGUgcHJvZmlsZSBsaXN0IHVuZGVyIGNvbnN0cnVjdGlvbjoKKyAgICoKKyAgICogICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gXyBfCisgICAqICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAqICAgfCBwcm9maWxlIHwgY29vcmRpbmF0ZXMgZm9yIHwgcHJvZmlsZSB8IGNvb3JkaW5hdGVzIGZvciB8LS0+CisgICAqICAgfCAgICAxICAgIHwgIHByb2ZpbGUgMSAgICAgIHwgICAgMiAgICB8ICBwcm9maWxlIDIgICAgICB8LS0+CisgICAqICAgfF9fX19fX19fX3xfX19fX19fX19fX19fX19fX3xfX19fX19fX198X19fX19fX19fX19fX19fX198X18gXyBfCisgICAqCisgICAqICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAqICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAqIHN0YXJ0IG9mIHJlbmRlciBwb29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AKKyAgICoKKyAgICogICBUaGUgdG9wIG9mIHRoZSBwcm9maWxlIHN0YWNrIGlzIGtlcHQgaW4gdGhlIGB0b3AnIHZhcmlhYmxlLgorICAgKgorICAgKiAgIEFzIHlvdSBjYW4gc2VlLCBhIHByb2ZpbGUgcmVjb3JkIGlzIHB1c2hlZCBvbiB0b3Agb2YgdGhlIHJlbmRlcgorICAgKiAgIHBvb2wsIHdoaWNoIGlzIHRoZW4gZm9sbG93ZWQgYnkgaXRzIGNvb3JkaW5hdGVzL2ludGVyc2VjdGlvbnMuICBJZgorICAgKiAgIGEgY2hhbmdlIG9mIGRpcmVjdGlvbiBpcyBkZXRlY3RlZCBpbiB0aGUgb3V0bGluZSwgYSBuZXcgcHJvZmlsZSBpcworICAgKiAgIGdlbmVyYXRlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBvdXRsaW5lLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCB3aGVuIGFsbCBwcm9maWxlcyBoYXZlIGJlZW4gZ2VuZXJhdGVkLCB0aGUgZnVuY3Rpb24KKyAgICogICBGaW5hbGl6ZV9Qcm9maWxlX1RhYmxlKCkgaXMgdXNlZCB0byByZWNvcmQsIGZvciBlYWNoIHByb2ZpbGUsIGl0cworICAgKiAgIGJvdHRvbS1tb3N0IHNjYW5saW5lIGFzIHdlbGwgYXMgdGhlIHNjYW5saW5lIGFib3ZlIGl0cyB1cG1vc3QKKyAgICogICBib3VuZGFyeS4gIFRoZXNlIHBvc2l0aW9ucyBhcmUgY2FsbGVkIGB5LXR1cm5zJyBiZWNhdXNlIHRoZXkgKHNvcnQKKyAgICogICBvZikgY29ycmVzcG9uZCB0byBsb2NhbCBleHRyZW1hLiAgVGhleSBhcmUgc3RvcmVkIGluIGEgc29ydGVkIGxpc3QKKyAgICogICBidWlsdCBmcm9tIHRoZSB0b3Agb2YgdGhlIHJlbmRlciBwb29sIGFzIGEgZG93bndhcmRzIHN0YWNrOgorICAgKgorICAgKiAgICAgXyBfIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgPC0tfCBzb3J0ZWQgbGlzdCBvZiAgICAgfAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICA8LS18ICBleHRyZW1hIHNjYW5saW5lcyB8CisgICAqICAgICBfIF8gX19fX19fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19ffAorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgIF4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJ1ZmYgICAgICAgICAgIHNpemVCdWZmID0gZW5kIG9mIHBvb2wKKyAgICoKKyAgICogICBUaGlzIGxpc3QgaXMgbGF0ZXIgdXNlZCBkdXJpbmcgdGhlIHN3ZWVwIHBoYXNlIGluIG9yZGVyIHRvCisgICAqICAgb3B0aW1pemUgcGVyZm9ybWFuY2UgKHNlZSB0ZWNobmljYWwgbm90ZSBvbiB0aGUgc3dlZXAgYmVsb3cpLgorICAgKgorICAgKiAgIE9mIGNvdXJzZSwgdGhlIHJhc3RlciBkZXRlY3RzIHdoZXRoZXIgdGhlIHR3byBzdGFja3MgY29sbGlkZSBhbmQKKyAgICogICBoYW5kbGVzIHRoZSBzaXR1YXRpb24gcHJvcGVybHkuCisgICAqCisgICAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjMsMTIgKzE2MiwxMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Jhc3RlcgogCkBAIC00NTIsOSArNDUxLDkgQEAKICNkZWZpbmUgQ0VJTElORyggeCApICAoICggKHgpICsgcmFzLnByZWNpc2lvbiAtIDEgKSAmIC1yYXMucHJlY2lzaW9uICkKICNkZWZpbmUgVFJVTkMoIHggKSAgICAoIChMb25nKSh4KSA+PiByYXMucHJlY2lzaW9uX2JpdHMgKQogI2RlZmluZSBGUkFDKCB4ICkgICAgICggKHgpICYgKCByYXMucHJlY2lzaW9uIC0gMSApICkKLSNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICggKHgpIDwgMCA/IC0oIC0oeCkgPDwgcmFzLnNjYWxlX3NoaWZ0ICkgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgKCAgKHgpIDw8IHJhcy5zY2FsZV9zaGlmdCApICkgXAotICAgICAgICAgICAgICAgICAgICAgICAgLSByYXMucHJlY2lzaW9uX2hhbGYgKQorCisgIC8qIHNjYWxlIGFuZCBzaGlmdCBncmlkIHRvIHBpeGVsIGNlbnRlcnMgKi8KKyNkZWZpbmUgU0NBTEVEKCB4ICkgICAoICh4KSAqIHJhcy5wcmVjaXNpb25fc2NhbGUgLSByYXMucHJlY2lzaW9uX2hhbGYgKQogCiAjZGVmaW5lIElTX0JPVFRPTV9PVkVSU0hPT1QoIHggKSBcCiAgICAgICAgICAgKEJvb2wpKCBDRUlMSU5HKCB4ICkgLSB4ID49IHJhcy5wcmVjaXNpb25faGFsZiApCkBAIC00NzYsMTMgKzQ3NSwxMCBAQAogICAgIEludCAgICAgICAgIHByZWNpc2lvbl9iaXRzOyAgICAgLyogcHJlY2lzaW9uIHJlbGF0ZWQgdmFyaWFibGVzICAgICAgICAgKi8KICAgICBJbnQgICAgICAgICBwcmVjaXNpb247CiAgICAgSW50ICAgICAgICAgcHJlY2lzaW9uX2hhbGY7Ci0gICAgSW50ICAgICAgICAgcHJlY2lzaW9uX3NoaWZ0OworICAgIEludCAgICAgICAgIHByZWNpc2lvbl9zY2FsZTsKICAgICBJbnQgICAgICAgICBwcmVjaXNpb25fc3RlcDsKICAgICBJbnQgICAgICAgICBwcmVjaXNpb25faml0dGVyOwogCi0gICAgSW50ICAgICAgICAgc2NhbGVfc2hpZnQ7ICAgICAgICAvKiA9PSBwcmVjaXNpb25fc2hpZnQgICBmb3IgYml0bWFwcyAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPT0gcHJlY2lzaW9uX3NoaWZ0KzEgZm9yIHBpeG1hcHMgICAgKi8KLQogICAgIFBMb25nICAgICAgIGJ1ZmY7ICAgICAgICAgICAgICAgLyogVGhlIHByb2ZpbGVzIGJ1ZmZlciAgICAgICAgICAgICAgICAgKi8KICAgICBQTG9uZyAgICAgICBzaXplQnVmZjsgICAgICAgICAgIC8qIFJlbmRlciBwb29sIHNpemUgICAgICAgICAgICAgICAgICAgICovCiAgICAgUExvbmcgICAgICAgbWF4QnVmZjsgICAgICAgICAgICAvKiBQcm9maWxlcyBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAqLwpAQCAtNDk1LDggKzQ5MSw3IEBACiAgICAgVFBvaW50KiAgICAgYXJjOyAgICAgICAgICAgICAgICAvKiBjdXJyZW50IEJlemllciBhcmMgcG9pbnRlciAgICAgICAgICAqLwogCiAgICAgVVNob3J0ICAgICAgYldpZHRoOyAgICAgICAgICAgICAvKiB0YXJnZXQgYml0bWFwIHdpZHRoICAgICAgICAgICAgICAgICAqLwotICAgIFBCeXRlICAgICAgIGJUYXJnZXQ7ICAgICAgICAgICAgLyogdGFyZ2V0IGJpdG1hcCBidWZmZXIgICAgICAgICAgICAgICAgKi8KLSAgICBQQnl0ZSAgICAgICBnVGFyZ2V0OyAgICAgICAgICAgIC8qIHRhcmdldCBwaXhtYXAgYnVmZmVyICAgICAgICAgICAgICAgICovCisgICAgUEJ5dGUgICAgICAgYk9yaWdpbjsgICAgICAgICAgICAvKiB0YXJnZXQgYml0bWFwIGJvdHRvbS1sZWZ0IG9yaWdpbiAgICAqLwogCiAgICAgTG9uZyAgICAgICAgbGFzdFgsIGxhc3RZOwogICAgIExvbmcgICAgICAgIG1pblksIG1heFk7CkBAIC01MTksOCArNTE0LDYgQEAKICAgICBGVF9PdXRsaW5lICBvdXRsaW5lOwogCiAgICAgTG9uZyAgICAgICAgdHJhY2VPZnM7ICAgICAgICAgICAvKiBjdXJyZW50IG9mZnNldCBpbiB0YXJnZXQgYml0bWFwICAgICAqLwotICAgIExvbmcgICAgICAgIHRyYWNlRzsgICAgICAgICAgICAgLyogY3VycmVudCBvZmZzZXQgaW4gdGFyZ2V0IHBpeG1hcCAgICAgKi8KLQogICAgIFNob3J0ICAgICAgIHRyYWNlSW5jcjsgICAgICAgICAgLyogc3dlZXAncyBpbmNyZW1lbnQgaW4gdGFyZ2V0IGJpdG1hcCAgKi8KIAogICAgIC8qIGRpc3BhdGNoIHZhcmlhYmxlcyAqLwpAQCAtNTcyLDE4ICs1NjUsMTkgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZXRfSGlnaF9QcmVjaXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZXQgcHJlY2lzaW9uIHZhcmlhYmxlcyBhY2NvcmRpbmcgdG8gcGFyYW0gZmxhZy4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIaWdoIDo6IFNldCB0byBUcnVlIGZvciBoaWdoIHByZWNpc2lvbiAodHlwaWNhbGx5IGZvciBwcGVtIDwgMjQpLCAgKi8KLSAgLyogICAgICAgICAgICBmYWxzZSBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFNldF9IaWdoX1ByZWNpc2lvbgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU2V0IHByZWNpc2lvbiB2YXJpYWJsZXMgYWNjb3JkaW5nIHRvIHBhcmFtIGZsYWcuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBIaWdoIDo6CisgICAqICAgICBTZXQgdG8gVHJ1ZSBmb3IgaGlnaCBwcmVjaXNpb24gKHR5cGljYWxseSBmb3IgcHBlbSA8IDI0KSwKKyAgICogICAgIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIFNldF9IaWdoX1ByZWNpc2lvbiggUkFTX0FSR1MgSW50ICBIaWdoICkKICAgewpAQCAtNjI1LDI5ICs2MTksMzEgQEAKICAgICBGVF9UUkFDRTYoKCAiU2V0X0hpZ2hfUHJlY2lzaW9uKCVzKVxuIiwgSGlnaCA/ICJ0cnVlIiA6ICJmYWxzZSIgKSk7CiAKICAgICByYXMucHJlY2lzaW9uICAgICAgID0gMSA8PCByYXMucHJlY2lzaW9uX2JpdHM7Ci0gICAgcmFzLnByZWNpc2lvbl9oYWxmICA9IHJhcy5wcmVjaXNpb24gLyAyOwotICAgIHJhcy5wcmVjaXNpb25fc2hpZnQgPSByYXMucHJlY2lzaW9uX2JpdHMgLSBQaXhlbF9CaXRzOworICAgIHJhcy5wcmVjaXNpb25faGFsZiAgPSByYXMucHJlY2lzaW9uID4+IDE7CisgICAgcmFzLnByZWNpc2lvbl9zY2FsZSA9IHJhcy5wcmVjaXNpb24gPj4gUGl4ZWxfQml0czsKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTmV3X1Byb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ3JlYXRlIGEgbmV3IHByb2ZpbGUgaW4gdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYVN0YXRlICAgIDo6IFRoZSBzdGF0ZS9vcmllbnRhdGlvbiBvZiB0aGUgbmV3IHByb2ZpbGUuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdmVyc2hvb3QgOjogV2hldGhlciB0aGUgcHJvZmlsZSdzIHVucm91bmRlZCBzdGFydCBwb3NpdGlvbiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgIGRpZmZlcnMgYnkgYXQgbGVhc3QgYSBoYWxmIHBpeGVsLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBTVUNDRVNTIG9uIHN1Y2Nlc3MuICBGQUlMVVJFIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgb3Igb2YgaW5jb2hlcmVudCAgICovCi0gIC8qICAgcHJvZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBOZXdfUHJvZmlsZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ3JlYXRlIGEgbmV3IHByb2ZpbGUgaW4gdGhlIHJlbmRlciBwb29sLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgYVN0YXRlIDo6CisgICAqICAgICBUaGUgc3RhdGUvb3JpZW50YXRpb24gb2YgdGhlIG5ldyBwcm9maWxlLgorICAgKgorICAgKiAgIG92ZXJzaG9vdCA6OgorICAgKiAgICAgV2hldGhlciB0aGUgcHJvZmlsZSdzIHVucm91bmRlZCBzdGFydCBwb3NpdGlvbgorICAgKiAgICAgZGlmZmVycyBieSBhdCBsZWFzdCBhIGhhbGYgcGl4ZWwuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3MuICBGQUlMVVJFIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgb3Igb2YgaW5jb2hlcmVudAorICAgKiAgcHJvZmlsZS4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIE5ld19Qcm9maWxlKCBSQVNfQVJHUyBUU3RhdGVzICBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBCb29sICAgICBvdmVyc2hvb3QgKQpAQCAtNzA2LDIxICs3MDIsMjIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRW5kX1Byb2ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmluYWxpemUgdGhlIGN1cnJlbnQgcHJvZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3ZlcnNob290IDo6IFdoZXRoZXIgdGhlIHByb2ZpbGUncyB1bnJvdW5kZWQgZW5kIHBvc2l0aW9uIGRpZmZlcnMgICovCi0gIC8qICAgICAgICAgICAgICAgICBieSBhdCBsZWFzdCBhIGhhbGYgcGl4ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2Vzcy4gIEZBSUxVUkUgaW4gY2FzZSBvZiBvdmVyZmxvdyBvciBpbmNvaGVyZW5jeS4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBFbmRfUHJvZmlsZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemUgdGhlIGN1cnJlbnQgcHJvZmlsZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIG92ZXJzaG9vdCA6OgorICAgKiAgICAgV2hldGhlciB0aGUgcHJvZmlsZSdzIHVucm91bmRlZCBlbmQgcG9zaXRpb24gZGlmZmVycworICAgKiAgICAgYnkgYXQgbGVhc3QgYSBoYWxmIHBpeGVsLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2Vzcy4gIEZBSUxVUkUgaW4gY2FzZSBvZiBvdmVyZmxvdyBvciBpbmNvaGVyZW5jeS4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIEVuZF9Qcm9maWxlKCBSQVNfQVJHUyBCb29sICBvdmVyc2hvb3QgKQogICB7CkBAIC03NzgsMjEgKzc3NSwyMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbnNlcnRfWV9UdXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbnNlcnQgYSBzYWxpZW50IGludG8gdGhlIHNvcnRlZCBsaXN0IHBsYWNlZCBvbiB0b3Agb2YgdGhlIHJlbmRlciAgKi8KLSAgLyogICAgcG9vbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTmV3IHkgc2NhbmxpbmUgcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLiAgRkFJTFVSRSBpbiBjYXNlIG9mIG92ZXJmbG93LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEluc2VydF9ZX1R1cm4KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluc2VydCBhIHNhbGllbnQgaW50byB0aGUgc29ydGVkIGxpc3QgcGxhY2VkIG9uIHRvcCBvZiB0aGUgcmVuZGVyCisgICAqICAgcG9vbC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIE5ldyB5IHNjYW5saW5lIHBvc2l0aW9uLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2Vzcy4gIEZBSUxVUkUgaW4gY2FzZSBvZiBvdmVyZmxvdy4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIEluc2VydF9ZX1R1cm4oIFJBU19BUkdTIEludCAgeSApCiAgIHsKQEAgLTgzNCwxNyArODMxLDE3IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmFsaXplX1Byb2ZpbGVfVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFkanVzdCBhbGwgbGlua3MgaW4gdGhlIHByb2ZpbGVzIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2Vzcy4gIEZBSUxVUkUgaW4gY2FzZSBvZiBvdmVyZmxvdy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBGaW5hbGl6ZV9Qcm9maWxlX1RhYmxlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBZGp1c3QgYWxsIGxpbmtzIGluIHRoZSBwcm9maWxlcyBsaXN0LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2Vzcy4gIEZBSUxVUkUgaW4gY2FzZSBvZiBvdmVyZmxvdy4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIEZpbmFsaXplX1Byb2ZpbGVfVGFibGUoIFJBU19BUkcgKQogICB7CkBAIC04OTQsMjIgKzg5MSwyMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTcGxpdF9Db25pYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTdWJkaXZpZGUgb25lIGNvbmljIEJlemllciBpbnRvIHR3byBqb2ludCBzdWItYXJjcyBpbiB0aGUgQmV6aWVyICAgKi8KLSAgLyogICAgc3RhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTm9uZSAoc3ViZGl2aWRlZCBCZXppZXIgaXMgdGFrZW4gZnJvbSB0aGUgdG9wIG9mIHRoZSBzdGFjaykuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyByb3V0aW5lIGlzIHRoZSBgYmVlZicgb2YgdGhpcyBjb21wb25lbnQuICBJdCBpcyAgX3RoZV8gaW5uZXIgICovCi0gIC8qICAgIGxvb3AgdGhhdCBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGhlbGwgdG8gZ2V0IHRoZSBiZXN0IHBlcmZvcm1hbmNlLiAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBTcGxpdF9Db25pYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU3ViZGl2aWRlIG9uZSBjb25pYyBCZXppZXIgaW50byB0d28gam9pbnQgc3ViLWFyY3MgaW4gdGhlIEJlemllcgorICAgKiAgIHN0YWNrLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgTm9uZSAoc3ViZGl2aWRlZCBCZXppZXIgaXMgdGFrZW4gZnJvbSB0aGUgdG9wIG9mIHRoZSBzdGFjaykuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIFRoaXMgcm91dGluZSBpcyB0aGUgYGJlZWYnIG9mIHRoaXMgY29tcG9uZW50LiAgSXQgaXMgIF90aGVfIGlubmVyCisgICAqICAgbG9vcCB0aGF0IHNob3VsZCBiZSBvcHRpbWl6ZWQgdG8gaGVsbCB0byBnZXQgdGhlIGJlc3QgcGVyZm9ybWFuY2UuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBTcGxpdF9Db25pYyggVFBvaW50KiAgYmFzZSApCiAgIHsKQEAgLTkzMywyMCArOTMwLDIwIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNwbGl0X0N1YmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFN1YmRpdmlkZSBhIHRoaXJkLW9yZGVyIEJlemllciBhcmMgaW50byB0d28gam9pbnQgc3ViLWFyY3MgaW4gdGhlICAqLwotICAvKiAgICBCZXppZXIgc3RhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIHJvdXRpbmUgaXMgdGhlIGBiZWVmJyBvZiB0aGUgY29tcG9uZW50LiAgSXQgaXMgb25lIG9mIF90aGVfICAgKi8KLSAgLyogICAgaW5uZXIgbG9vcHMgdGhhdCBzaG91bGQgYmUgb3B0aW1pemVkIGxpa2UgaGVsbCB0byBnZXQgdGhlIGJlc3QgICAgICovCi0gIC8qICAgIHBlcmZvcm1hbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBTcGxpdF9DdWJpYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU3ViZGl2aWRlIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYyBpbnRvIHR3byBqb2ludCBzdWItYXJjcyBpbiB0aGUKKyAgICogICBCZXppZXIgc3RhY2suCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIFRoaXMgcm91dGluZSBpcyB0aGUgYGJlZWYnIG9mIHRoZSBjb21wb25lbnQuICBJdCBpcyBvbmUgb2YgX3RoZV8KKyAgICogICBpbm5lciBsb29wcyB0aGF0IHNob3VsZCBiZSBvcHRpbWl6ZWQgbGlrZSBoZWxsIHRvIGdldCB0aGUgYmVzdAorICAgKiAgIHBlcmZvcm1hbmNlLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgU3BsaXRfQ3ViaWMoIFRQb2ludCogIGJhc2UgKQogICB7CkBAIC05NzUsMzEgKzk3MiwzNyBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMaW5lX1VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGFzY2VuZGluZyBsaW5lIHNlZ21lbnQgYW5kIHN0b3JlICAgKi8KLSAgLyogICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeDEgICA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3Mgc3RhcnQgcG9pbnQuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5MSAgIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBzdGFydCBwb2ludC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHgyICAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludC4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeTIgICA6OiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3MgZW5kIHBvaW50LiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW55IDo6IEEgbG93ZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heHkgOjogQW4gdXBwZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBMaW5lX1VwCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGFzY2VuZGluZyBsaW5lIHNlZ21lbnQgYW5kIHN0b3JlCisgICAqICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICB4MSA6OgorICAgKiAgICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIHN0YXJ0IHBvaW50LgorICAgKgorICAgKiAgIHkxIDo6CisgICAqICAgICBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3Mgc3RhcnQgcG9pbnQuCisgICAqCisgICAqICAgeDIgOjoKKyAgICogICAgIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBlbmQgcG9pbnQuCisgICAqCisgICAqICAgeTIgOjoKKyAgICogICAgIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBlbmQgcG9pbnQuCisgICAqCisgICAqICAgbWlueSA6OgorICAgKiAgICAgQSBsb3dlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4KKyAgICoKKyAgICogICBtYXh5IDo6CisgICAqICAgICBBbiB1cHBlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cuCisgICAqLwogICBzdGF0aWMgQm9vbAogICBMaW5lX1VwKCBSQVNfQVJHUyBMb25nICB4MSwKICAgICAgICAgICAgICAgICAgICAgTG9uZyAgeTEsCkBAIC0xMTE0LDMxICsxMTE3LDM3IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExpbmVfRG93biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGUgdGhlIHgtY29vcmRpbmF0ZXMgb2YgYW4gZGVzY2VuZGluZyBsaW5lIHNlZ21lbnQgYW5kIHN0b3JlICAqLwotICAvKiAgICB0aGVtIGluIHRoZSByZW5kZXIgcG9vbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB4MSAgIDo6IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBzdGFydCBwb2ludC4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHkxICAgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIHN0YXJ0IHBvaW50LiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgeDIgICA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3MgZW5kIHBvaW50LiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB5MiAgIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBlbmQgcG9pbnQuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1pbnkgOjogQSBsb3dlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4eSA6OiBBbiB1cHBlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIG9uIHJlbmRlciBwb29sIG92ZXJmbG93LiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIExpbmVfRG93bgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZSB0aGUgeC1jb29yZGluYXRlcyBvZiBhbiBkZXNjZW5kaW5nIGxpbmUgc2VnbWVudCBhbmQgc3RvcmUKKyAgICogICB0aGVtIGluIHRoZSByZW5kZXIgcG9vbC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHgxIDo6CisgICAqICAgICBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBzZWdtZW50J3Mgc3RhcnQgcG9pbnQuCisgICAqCisgICAqICAgeTEgOjoKKyAgICogICAgIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHNlZ21lbnQncyBzdGFydCBwb2ludC4KKyAgICoKKyAgICogICB4MiA6OgorICAgKiAgICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludC4KKyAgICoKKyAgICogICB5MiA6OgorICAgKiAgICAgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludC4KKyAgICoKKyAgICogICBtaW55IDo6CisgICAqICAgICBBIGxvd2VyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLgorICAgKgorICAgKiAgIG1heHkgOjoKKyAgICogICAgIEFuIHVwcGVyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdy4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIExpbmVfRG93biggUkFTX0FSR1MgTG9uZyAgeDEsCiAgICAgICAgICAgICAgICAgICAgICAgTG9uZyAgeTEsCkBAIC0xMTY1LDI3ICsxMTc0LDMxIEBACiAgIHR5cGVkZWYgdm9pZCAgKCpUU3BsaXR0ZXIpKCBUUG9pbnQqICBiYXNlICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBCZXppZXJfVXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGVzIG9mIGFuIGFzY2VuZGluZyBCZXppZXIgYXJjIGFuZCBzdG9yZSAgICAgKi8KLSAgLyogICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVncmVlICAgOjogVGhlIGRlZ3JlZSBvZiB0aGUgQmV6aWVyIGFyYyAoZWl0aGVyIDIgb3IgMykuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzcGxpdHRlciA6OiBUaGUgZnVuY3Rpb24gdG8gc3BsaXQgQmV6aWVyIGFyY3MuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1pbnkgICAgIDo6IEEgbG93ZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4eSAgICAgOjogQW4gdXBwZXIgdmVydGljYWwgY2xpcHBpbmcgYm91bmQgdmFsdWUuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIG9uIHJlbmRlciBwb29sIG92ZXJmbG93LiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEJlemllcl9VcAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZSB0aGUgeC1jb29yZGluYXRlcyBvZiBhbiBhc2NlbmRpbmcgQmV6aWVyIGFyYyBhbmQgc3RvcmUKKyAgICogICB0aGVtIGluIHRoZSByZW5kZXIgcG9vbC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRlZ3JlZSA6OgorICAgKiAgICAgVGhlIGRlZ3JlZSBvZiB0aGUgQmV6aWVyIGFyYyAoZWl0aGVyIDIgb3IgMykuCisgICAqCisgICAqICAgc3BsaXR0ZXIgOjoKKyAgICogICAgIFRoZSBmdW5jdGlvbiB0byBzcGxpdCBCZXppZXIgYXJjcy4KKyAgICoKKyAgICogICBtaW55IDo6CisgICAqICAgICBBIGxvd2VyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLgorICAgKgorICAgKiAgIG1heHkgOjoKKyAgICogICAgIEFuIHVwcGVyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdy4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIEJlemllcl9VcCggUkFTX0FSR1MgSW50ICAgICAgICBkZWdyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgVFNwbGl0dGVyICBzcGxpdHRlciwKQEAgLTEyOTgsMjcgKzEzMTEsMzEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQmV6aWVyX0Rvd24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZSB0aGUgeC1jb29yZGluYXRlcyBvZiBhbiBkZXNjZW5kaW5nIEJlemllciBhcmMgYW5kIHN0b3JlICAgICovCi0gIC8qICAgIHRoZW0gaW4gdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlZ3JlZSAgIDo6IFRoZSBkZWdyZWUgb2YgdGhlIEJlemllciBhcmMgKGVpdGhlciAyIG9yIDMpLiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3BsaXR0ZXIgOjogVGhlIGZ1bmN0aW9uIHRvIHNwbGl0IEJlemllciBhcmNzLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtaW55ICAgICA6OiBBIGxvd2VyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heHkgICAgIDo6IEFuIHVwcGVyIHZlcnRpY2FsIGNsaXBwaW5nIGJvdW5kIHZhbHVlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBCZXppZXJfRG93bgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZSB0aGUgeC1jb29yZGluYXRlcyBvZiBhbiBkZXNjZW5kaW5nIEJlemllciBhcmMgYW5kIHN0b3JlCisgICAqICAgdGhlbSBpbiB0aGUgcmVuZGVyIHBvb2wuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkZWdyZWUgOjoKKyAgICogICAgIFRoZSBkZWdyZWUgb2YgdGhlIEJlemllciBhcmMgKGVpdGhlciAyIG9yIDMpLgorICAgKgorICAgKiAgIHNwbGl0dGVyIDo6CisgICAqICAgICBUaGUgZnVuY3Rpb24gdG8gc3BsaXQgQmV6aWVyIGFyY3MuCisgICAqCisgICAqICAgbWlueSA6OgorICAgKiAgICAgQSBsb3dlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4KKyAgICoKKyAgICogICBtYXh5IDo6CisgICAqICAgICBBbiB1cHBlciB2ZXJ0aWNhbCBjbGlwcGluZyBib3VuZCB2YWx1ZS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cuCisgICAqLwogICBzdGF0aWMgQm9vbAogICBCZXppZXJfRG93biggUkFTX0FSR1MgSW50ICAgICAgICBkZWdyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBUU3BsaXR0ZXIgIHNwbGl0dGVyLApAQCAtMTM0NywyNSArMTM2NCwyNyBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMaW5lX1RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbmplY3QgYSBuZXcgbGluZSBzZWdtZW50IGFuZCBhZGp1c3QgdGhlIFByb2ZpbGVzIGxpc3QuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHggOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50ICAgKi8KLSAgLyogICAgICAgIGlzIHN0b3JlZCBpbiBgbGFzdFgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHkgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50ICAgKi8KLSAgLyogICAgICAgIGlzIHN0b3JlZCBpbiBgbGFzdFknKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cgb3IgaW5jb3JyZWN0ICAgICovCi0gIC8qICAgcHJvZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBMaW5lX1RvCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBJbmplY3QgYSBuZXcgbGluZSBzZWdtZW50IGFuZCBhZGp1c3QgdGhlIFByb2ZpbGVzIGxpc3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogIHggOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50CisgICAqICAgIGlzIHN0b3JlZCBpbiBgbGFzdFgnKS4KKyAgICoKKyAgICogIHkgOjoKKyAgICogICAgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgc2VnbWVudCdzIGVuZCBwb2ludCAoaXRzIHN0YXJ0IHBvaW50CisgICAqICAgIGlzIHN0b3JlZCBpbiBgbGFzdFknKS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdyBvciBpbmNvcnJlY3QKKyAgICogIHByb2ZpbGUuCisgICAqLwogICBzdGF0aWMgQm9vbAogICBMaW5lX1RvKCBSQVNfQVJHUyBMb25nICB4LAogICAgICAgICAgICAgICAgICAgICBMb25nICB5ICkKQEAgLTE0NDEsMjkgKzE0NjAsMzMgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29uaWNfVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5qZWN0IGEgbmV3IGNvbmljIGFyYyBhbmQgYWRqdXN0IHRoZSBwcm9maWxlIGxpc3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBjeCA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBuZXcgY29udHJvbCBwb2ludC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGN5IDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIG5ldyBjb250cm9sIHBvaW50LiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgeCAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICAqLwotICAvKiAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgeSAgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICAqLwotICAvKiAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFknKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiByZW5kZXIgcG9vbCBvdmVyZmxvdyBvciBpbmNvcnJlY3QgICAgKi8KLSAgLyogICBwcm9maWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIENvbmljX1RvCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBJbmplY3QgYSBuZXcgY29uaWMgYXJjIGFuZCBhZGp1c3QgdGhlIHByb2ZpbGUgbGlzdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgY3ggOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgbmV3IGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICBjeSA6OgorICAgKiAgICBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBuZXcgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogIHggOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMKKyAgICogICAgc3RvcmVkIGluIGBsYXN0WCcpLgorICAgKgorICAgKiAgeSA6OgorICAgKiAgICBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBlbmQgcG9pbnQgKGl0cyBzdGFydCBwb2ludCBpcworICAgKiAgICBzdG9yZWQgaW4gYGxhc3RZJykuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cgb3IgaW5jb3JyZWN0CisgICAqICBwcm9maWxlLgorICAgKi8KICAgc3RhdGljIEJvb2wKICAgQ29uaWNfVG8oIFJBU19BUkdTIExvbmcgIGN4LAogICAgICAgICAgICAgICAgICAgICAgTG9uZyAgY3ksCkBAIC0xNTU4LDMzICsxNTgxLDM5IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEN1YmljX1RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluamVjdCBhIG5ldyBjdWJpYyBhcmMgYW5kIGFkanVzdCB0aGUgcHJvZmlsZSBsaXN0LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgY3gxIDo6IFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIGZpcnN0IG5ldyBjb250cm9sIHBvaW50LiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBjeTEgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZmlyc3QgbmV3IGNvbnRyb2wgcG9pbnQuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGN4MiA6OiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBzZWNvbmQgbmV3IGNvbnRyb2wgcG9pbnQuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgY3kyIDo6IFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIHNlY29uZCBuZXcgY29udHJvbCBwb2ludC4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB4ICAgOjogVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICovCi0gIC8qICAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFgnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB5ICAgOjogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMgICovCi0gIC8qICAgICAgICAgIHN0b3JlZCBpbiBgbGFzdFknKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgU1VDQ0VTUyBvbiBzdWNjZXNzLCBGQUlMVVJFIG9uIHJlbmRlciBwb29sIG92ZXJmbG93IG9yIGluY29ycmVjdCAgICAqLwotICAvKiAgIHByb2ZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgQ3ViaWNfVG8KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluamVjdCBhIG5ldyBjdWJpYyBhcmMgYW5kIGFkanVzdCB0aGUgcHJvZmlsZSBsaXN0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICBjeDEgOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZmlyc3QgbmV3IGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICBjeTEgOjoKKyAgICogICAgVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZmlyc3QgbmV3IGNvbnRyb2wgcG9pbnQuCisgICAqCisgICAqICBjeDIgOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3Mgc2Vjb25kIG5ldyBjb250cm9sIHBvaW50LgorICAgKgorICAgKiAgY3kyIDo6CisgICAqICAgIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGFyYydzIHNlY29uZCBuZXcgY29udHJvbCBwb2ludC4KKyAgICoKKyAgICogIHggOjoKKyAgICogICAgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgYXJjJ3MgZW5kIHBvaW50IChpdHMgc3RhcnQgcG9pbnQgaXMKKyAgICogICAgc3RvcmVkIGluIGBsYXN0WCcpLgorICAgKgorICAgKiAgeSA6OgorICAgKiAgICBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBhcmMncyBlbmQgcG9pbnQgKGl0cyBzdGFydCBwb2ludCBpcworICAgKiAgICBzdG9yZWQgaW4gYGxhc3RZJykuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgb24gcmVuZGVyIHBvb2wgb3ZlcmZsb3cgb3IgaW5jb3JyZWN0CisgICAqICBwcm9maWxlLgorICAgKi8KICAgc3RhdGljIEJvb2wKICAgQ3ViaWNfVG8oIFJBU19BUkdTIExvbmcgIGN4MSwKICAgICAgICAgICAgICAgICAgICAgIExvbmcgIGN5MSwKQEAgLTE3MDUsMjcgKzE3MzQsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIDAgKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGVjb21wb3NlX0N1cnZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2NhbiB0aGUgb3V0bGluZSBhcnJheXMgaW4gb3JkZXIgdG8gZW1pdCBpbmRpdmlkdWFsIHNlZ21lbnRzIGFuZCAgICovCi0gIC8qICAgIEJlemllcnMgYnkgY2FsbGluZyBMaW5lX1RvKCkgYW5kIEJlemllcl9UbygpLiAgSXQgaGFuZGxlcyBhbGwgICAgICAqLwotICAvKiAgICB3ZWlyZCBjYXNlcywgbGlrZSB3aGVuIHRoZSBmaXJzdCBwb2ludCBpcyBvZmYgdGhlIGN1cnZlLCBvciB3aGVuICAgKi8KLSAgLyogICAgdGhlcmUgYXJlIHNpbXBseSBubyBgb24nIHBvaW50cyBpbiB0aGUgY29udG91ciEgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmlyc3QgICA6OiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHBvaW50IGluIHRoZSBjb250b3VyLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsYXN0ICAgIDo6IFRoZSBpbmRleCBvZiB0aGUgbGFzdCBwb2ludCBpbiB0aGUgY29udG91ci4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZsaXBwZWQgOjogSWYgc2V0LCBmbGlwIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGN1cnZlLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBEZWNvbXBvc2VfQ3VydmUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFNjYW4gdGhlIG91dGxpbmUgYXJyYXlzIGluIG9yZGVyIHRvIGVtaXQgaW5kaXZpZHVhbCBzZWdtZW50cyBhbmQKKyAgICogICBCZXppZXJzIGJ5IGNhbGxpbmcgTGluZV9UbygpIGFuZCBCZXppZXJfVG8oKS4gIEl0IGhhbmRsZXMgYWxsCisgICAqICAgd2VpcmQgY2FzZXMsIGxpa2Ugd2hlbiB0aGUgZmlyc3QgcG9pbnQgaXMgb2ZmIHRoZSBjdXJ2ZSwgb3Igd2hlbgorICAgKiAgIHRoZXJlIGFyZSBzaW1wbHkgbm8gYG9uJyBwb2ludHMgaW4gdGhlIGNvbnRvdXIhCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmaXJzdCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgY29udG91ci4KKyAgICoKKyAgICogICBsYXN0IDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGxhc3QgcG9pbnQgaW4gdGhlIGNvbnRvdXIuCisgICAqCisgICAqICAgZmxpcHBlZCA6OgorICAgKiAgICAgSWYgc2V0LCBmbGlwIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGN1cnZlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBvbiBlcnJvci4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIERlY29tcG9zZV9DdXJ2ZSggUkFTX0FSR1MgVVNob3J0ICBmaXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2hvcnQgIGxhc3QsCkBAIC0xOTM0LDIyICsxOTY2LDIzIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbnZlcnRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbnZlcnQgYSBnbHlwaCBpbnRvIGEgc2VyaWVzIG9mIHNlZ21lbnRzIGFuZCBhcmNzIGFuZCBtYWtlIGEgICAgICAqLwotICAvKiAgICBwcm9maWxlcyBsaXN0IHdpdGggdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmbGlwcGVkIDo6IElmIHNldCwgZmxpcCB0aGUgZGlyZWN0aW9uIG9mIGN1cnZlLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTVUNDRVNTIG9uIHN1Y2Nlc3MsIEZBSUxVUkUgaWYgYW55IGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgICAgKi8KLSAgLyogICAgcmVuZGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIENvbnZlcnRfR2x5cGgKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIENvbnZlcnQgYSBnbHlwaCBpbnRvIGEgc2VyaWVzIG9mIHNlZ21lbnRzIGFuZCBhcmNzIGFuZCBtYWtlIGEKKyAgICogICBwcm9maWxlcyBsaXN0IHdpdGggdGhlbS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZsaXBwZWQgOjoKKyAgICogICAgIElmIHNldCwgZmxpcCB0aGUgZGlyZWN0aW9uIG9mIGN1cnZlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb24gc3VjY2VzcywgRkFJTFVSRSBpZiBhbnkgZXJyb3Igd2FzIGVuY291bnRlcmVkIGR1cmluZworICAgKiAgIHJlbmRlcmluZy4KKyAgICovCiAgIHN0YXRpYyBCb29sCiAgIENvbnZlcnRfR2x5cGgoIFJBU19BUkdTIEludCAgZmxpcHBlZCApCiAgIHsKQEAgLTIwMjgsMTIgKzIwNjEsMTIgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBJbml0X0xpbmtlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYW4gZW1wdHkgbGlua2VkIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSW5pdF9MaW5rZWQKKyAgICoKKyAgICogICBJbml0aWFsaXplcyBhbiBlbXB0eSBsaW5rZWQgbGlzdC4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluaXRfTGlua2VkKCBUUHJvZmlsZUxpc3QqICBsICkKICAgewpAQCAtMjA0MSwxMiArMjA3NCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBJbnNOZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5zZXJ0cyBhIG5ldyBwcm9maWxlIGluIGEgbGlua2VkIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSW5zTmV3CisgICAqCisgICAqICAgSW5zZXJ0cyBhIG5ldyBwcm9maWxlIGluIGEgbGlua2VkIGxpc3QuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNOZXcoIFBQcm9maWxlTGlzdCAgbGlzdCwKICAgICAgICAgICBQUHJvZmlsZSAgICAgIHByb2ZpbGUgKQpAQCAtMjA3MiwxMiArMjEwNSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBEZWxPbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVtb3ZlcyBhbiBvbGQgcHJvZmlsZSBmcm9tIGEgbGlua2VkIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVsT2xkCisgICAqCisgICAqICAgUmVtb3ZlcyBhbiBvbGQgcHJvZmlsZSBmcm9tIGEgbGlua2VkIGxpc3QuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBEZWxPbGQoIFBQcm9maWxlTGlzdCAgbGlzdCwKICAgICAgICAgICBQUHJvZmlsZSAgICAgIHByb2ZpbGUgKQpAQCAtMjEwNSwxNCArMjEzOCwxNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBTb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU29ydHMgYSB0cmFjZSBsaXN0LiAgSW4gOTUlLCB0aGUgbGlzdCBpcyBhbHJlYWR5IHNvcnRlZC4gIFdlIG5lZWQgICovCi0gIC8qICAgIGFuIGFsZ29yaXRobSB3aGljaCBpcyBmYXN0IGluIHRoaXMgY2FzZS4gIEJ1YmJsZSBzb3J0IGlzIGVub3VnaCAgICAqLwotICAvKiAgICBhbmQgc2ltcGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTb3J0CisgICAqCisgICAqICAgU29ydHMgYSB0cmFjZSBsaXN0LiAgSW4gOTUlLCB0aGUgbGlzdCBpcyBhbHJlYWR5IHNvcnRlZC4gIFdlIG5lZWQKKyAgICogICBhbiBhbGdvcml0aG0gd2hpY2ggaXMgZmFzdCBpbiB0aGlzIGNhc2UuICBCdWJibGUgc29ydCBpcyBlbm91Z2gKKyAgICogICBhbmQgc2ltcGxlLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgU29ydCggUFByb2ZpbGVMaXN0ICBsaXN0ICkKICAgewpAQCAtMjE2MywxNCArMjE5NiwxNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBWZXJ0aWNhbCBTd2VlcCBQcm9jZWR1cmUgU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoZXNlIGZvdXIgcm91dGluZXMgYXJlIHVzZWQgZHVyaW5nIHRoZSB2ZXJ0aWNhbCBibGFjay93aGl0ZSBzd2VlcCAgICovCi0gIC8qICBwaGFzZSBieSB0aGUgZ2VuZXJpYyBEcmF3X1N3ZWVwKCkgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBWZXJ0aWNhbCBTd2VlcCBQcm9jZWR1cmUgU2V0CisgICAqCisgICAqIFRoZXNlIGZvdXIgcm91dGluZXMgYXJlIHVzZWQgZHVyaW5nIHRoZSB2ZXJ0aWNhbCBibGFjay93aGl0ZSBzd2VlcAorICAgKiBwaGFzZSBieSB0aGUgZ2VuZXJpYyBEcmF3X1N3ZWVwKCkgZnVuY3Rpb24uCisgICAqCisgICAqLwogCiAgIHN0YXRpYyB2b2lkCiAgIFZlcnRpY2FsX1N3ZWVwX0luaXQoIFJBU19BUkdTIFNob3J0KiAgbWluLApAQCAtMjE4Myw4ICsyMjE2LDYgQEAKIAogICAgIHJhcy50cmFjZUluY3IgPSAoU2hvcnQpLXBpdGNoOwogICAgIHJhcy50cmFjZU9mcyAgPSAtKm1pbiAqIHBpdGNoOwotICAgIGlmICggcGl0Y2ggPiAwICkKLSAgICAgIHJhcy50cmFjZU9mcyArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHBpdGNoOwogICB9CiAKIApAQCAtMjI0Miw3ICsyMjczLDcgQEAKICAgICAgIGYxID0gKEJ5dGUpICAoIDB4RkYgPj4gKCBlMSAmIDcgKSApOwogICAgICAgZjIgPSAoQnl0ZSkgfiggMHg3RiA+PiAoIGUyICYgNyApICk7CiAKLSAgICAgIHRhcmdldCA9IHJhcy5iVGFyZ2V0ICsgcmFzLnRyYWNlT2ZzICsgYzE7CisgICAgICB0YXJnZXQgPSByYXMuYk9yaWdpbiArIHJhcy50cmFjZU9mcyArIGMxOwogICAgICAgYzIgLT0gYzE7CiAKICAgICAgIGlmICggYzIgPiAwICkKQEAgLTIyNTIsMTIgKzIyODMsOSBAQAogICAgICAgICAvKiBtZW1zZXQoKSBpcyBzbG93ZXIgdGhhbiB0aGUgZm9sbG93aW5nIGNvZGUgb24gbWFueSBwbGF0Zm9ybXMuICovCiAgICAgICAgIC8qIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQsIGluIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLCAgKi8KICAgICAgICAgLyogdGhlIHNwYW4gbGVuZ3RoIGluIGJ5dGVzIGlzIHJlbGF0aXZlbHkgc21hbGwuICAgICAgICAgICAgICAgICAqLwotICAgICAgICBjMi0tOwotICAgICAgICB3aGlsZSAoIGMyID4gMCApCi0gICAgICAgIHsKKyAgICAgICAgd2hpbGUgKCAtLWMyID4gMCApCiAgICAgICAgICAgKigrK3RhcmdldCkgPSAweEZGOwotICAgICAgICAgIGMyLS07Ci0gICAgICAgIH0KKwogICAgICAgICB0YXJnZXRbMV0gfD0gZjI7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC0yNDAwLDcgKzI0MjgsNyBAQAogICAgICAgICBmMSA9IChTaG9ydCkoIGUxICYgIDcgKTsKIAogICAgICAgICBpZiAoIGUxID49IDAgJiYgZTEgPCByYXMuYldpZHRoICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgcmFzLmJUYXJnZXRbcmFzLnRyYWNlT2ZzICsgYzFdICYgKCAweDgwID4+IGYxICkgKQorICAgICAgICAgICAgIHJhcy5iT3JpZ2luW3Jhcy50cmFjZU9mcyArIGMxXSAmICggMHg4MCA+PiBmMSApICkKICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC0yNDE2LDcgKzI0NDQsNyBAQAogICAgICAgYzEgPSAoU2hvcnQpKCBlMSA+PiAzICk7CiAgICAgICBmMSA9IChTaG9ydCkoIGUxICYgNyApOwogCi0gICAgICByYXMuYlRhcmdldFtyYXMudHJhY2VPZnMgKyBjMV0gfD0gKGNoYXIpKCAweDgwID4+IGYxICk7CisgICAgICByYXMuYk9yaWdpbltyYXMudHJhY2VPZnMgKyBjMV0gfD0gKGNoYXIpKCAweDgwID4+IGYxICk7CiAgICAgfQogCiAgIEV4aXQ6CkBAIC0yNDMxLDE0ICsyNDU5LDE0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgSG9yaXpvbnRhbCBTd2VlcCBQcm9jZWR1cmUgU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIFRoZXNlIGZvdXIgcm91dGluZXMgYXJlIHVzZWQgZHVyaW5nIHRoZSBob3Jpem9udGFsIGJsYWNrL3doaXRlICAgICAqLwotICAvKiAgc3dlZXAgcGhhc2UgYnkgdGhlIGdlbmVyaWMgRHJhd19Td2VlcCgpIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEhvcml6b250YWwgU3dlZXAgUHJvY2VkdXJlIFNldAorICAgKgorICAgKiBUaGVzZSBmb3VyIHJvdXRpbmVzIGFyZSB1c2VkIGR1cmluZyB0aGUgaG9yaXpvbnRhbCBibGFjay93aGl0ZQorICAgKiBzd2VlcCBwaGFzZSBieSB0aGUgZ2VuZXJpYyBEcmF3X1N3ZWVwKCkgZnVuY3Rpb24uCisgICAqCisgICAqLwogCiAgIHN0YXRpYyB2b2lkCiAgIEhvcml6b250YWxfU3dlZXBfSW5pdCggUkFTX0FSR1MgU2hvcnQqICBtaW4sCkBAIC0yNDgzLDE5ICsyNTExLDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICBCeXRlICAgZjE7CiAgICAgICAgICAgUEJ5dGUgIGJpdHM7Ci0gICAgICAgICAgUEJ5dGUgIHA7CiAKIAogICAgICAgICAgIEZUX1RSQUNFNygoICIgLT4geT0lZCAoZHJvcC1vdXQpIiwgZTEgKSk7CiAKLSAgICAgICAgICBiaXRzID0gcmFzLmJUYXJnZXQgKyAoIHkgPj4gMyApOworICAgICAgICAgIGJpdHMgPSByYXMuYk9yaWdpbiArICggeSA+PiAzICkgLSBlMSAqIHJhcy50YXJnZXQucGl0Y2g7CiAgICAgICAgICAgZjEgICA9IChCeXRlKSggMHg4MCA+PiAoIHkgJiA3ICkgKTsKLSAgICAgICAgICBwICAgID0gYml0cyAtIGUxICogcmFzLnRhcmdldC5waXRjaDsKIAotICAgICAgICAgIGlmICggcmFzLnRhcmdldC5waXRjaCA+IDAgKQotICAgICAgICAgICAgcCArPSAoTG9uZykoIHJhcy50YXJnZXQucm93cyAtIDEgKSAqIHJhcy50YXJnZXQucGl0Y2g7Ci0KLSAgICAgICAgICBwWzBdIHw9IGYxOworICAgICAgICAgIGJpdHNbMF0gfD0gZjE7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtMjU5NywxMyArMjYyMCw5IEBACiAKICAgICAgICAgZTEgPSBUUlVOQyggZTEgKTsKIAotICAgICAgICBiaXRzID0gcmFzLmJUYXJnZXQgKyAoIHkgPj4gMyApOworICAgICAgICBiaXRzID0gcmFzLmJPcmlnaW4gKyAoIHkgPj4gMyApIC0gZTEgKiByYXMudGFyZ2V0LnBpdGNoOwogICAgICAgICBmMSAgID0gKEJ5dGUpKCAweDgwID4+ICggeSAmIDcgKSApOwogCi0gICAgICAgIGJpdHMgLT0gZTEgKiByYXMudGFyZ2V0LnBpdGNoOwotICAgICAgICBpZiAoIHJhcy50YXJnZXQucGl0Y2ggPiAwICkKLSAgICAgICAgICBiaXRzICs9IChMb25nKSggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcmFzLnRhcmdldC5waXRjaDsKLQogICAgICAgICBpZiAoIGUxID49IDAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgIChVTG9uZyllMSA8IHJhcy50YXJnZXQucm93cyAmJgogICAgICAgICAgICAgICpiaXRzICYgZjEgICAgICAgICAgICAgICAgICApCkBAIC0yNjE5LDEyICsyNjM4LDggQEAKICAgICB7CiAgICAgICBGVF9UUkFDRTcoKCAiIC0+IHk9JWQgKGRyb3Atb3V0KSIsIGUxICkpOwogCi0gICAgICBiaXRzICA9IHJhcy5iVGFyZ2V0ICsgKCB5ID4+IDMgKTsKKyAgICAgIGJpdHMgID0gcmFzLmJPcmlnaW4gKyAoIHkgPj4gMyApIC0gZTEgKiByYXMudGFyZ2V0LnBpdGNoOwogICAgICAgZjEgICAgPSAoQnl0ZSkoIDB4ODAgPj4gKCB5ICYgNyApICk7Ci0gICAgICBiaXRzIC09IGUxICogcmFzLnRhcmdldC5waXRjaDsKLQotICAgICAgaWYgKCByYXMudGFyZ2V0LnBpdGNoID4gMCApCi0gICAgICAgIGJpdHMgKz0gKExvbmcpKCByYXMudGFyZ2V0LnJvd3MgLSAxICkgKiByYXMudGFyZ2V0LnBpdGNoOwogCiAgICAgICBiaXRzWzBdIHw9IGYxOwogICAgIH0KQEAgLTI2NDIsMTEgKzI2NTcsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgR2VuZXJpYyBTd2VlcCBEcmF3aW5nIHJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR2VuZXJpYyBTd2VlcCBEcmF3aW5nIHJvdXRpbmUKKyAgICoKKyAgICovCiAKICAgc3RhdGljIEJvb2wKICAgRHJhd19Td2VlcCggUkFTX0FSRyApCkBAIC0yODg4LDIwICsyOTAzLDEwOSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZW5kZXJfU2luZ2xlX1Bhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQZXJmb3JtIG9uZSBzd2VlcCB3aXRoIHN1Yi1iYW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmbGlwcGVkIDo6IElmIHNldCwgZmxpcCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZW5kZXJlciBlcnJvciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgU1RBTkRBTE9ORV8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgY29tcGlsZSBpbiBzdGFuZC1hbG9uZSBtb2RlLAorICAgKiBpLmUuLCB3aGVuIGJ1aWxkaW5nIHRoaXMgY29tcG9uZW50IHdpdGhvdXQgdGhlIHJlc3Qgb2YgRnJlZVR5cGUuCisgICAqCisgICAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgRlRfT3V0bGluZV9HZXRfQ0JveAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIGFuIG91dGxpbmUncyBgY29udHJvbCBib3gnLiAgVGhlIGNvbnRyb2wgYm94IGVuY2xvc2VzIGFsbAorICAgKiAgIHRoZSBvdXRsaW5lJ3MgcG9pbnRzLCBpbmNsdWRpbmcgQsOpemllciBjb250cm9sIHBvaW50cy4gIFRob3VnaCBpdAorICAgKiAgIGNvaW5jaWRlcyB3aXRoIHRoZSBleGFjdCBib3VuZGluZyBib3ggZm9yIG1vc3QgZ2x5cGhzLCBpdCBjYW4gYmUKKyAgICogICBzbGlnaHRseSBsYXJnZXIgaW4gc29tZSBzaXR1YXRpb25zIChsaWtlIHdoZW4gcm90YXRpbmcgYW4gb3V0bGluZQorICAgKiAgIHRoYXQgY29udGFpbnMgQsOpemllciBvdXRzaWRlIGFyY3MpLgorICAgKgorICAgKiAgIENvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZworICAgKiAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzCisgICAqICAgYW5kIGFyY3MgaW4gdGhlIG91dGxpbmUuICBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlCisgICAqICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIG91dGxpbmUgZGVzY3JpcHRvci4KKyAgICoKKyAgICogQE91dHB1dDoKKyAgICogICBhY2JveCA6OgorICAgKiAgICAgVGhlIG91dGxpbmUncyBjb250cm9sIGJveC4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgU2VlIEBGVF9HbHlwaF9HZXRfQ0JveCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRyaWNreSBmb250cy4KKyAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgRlRfT3V0bGluZV9HZXRfQ0JveCggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3ggICAgICAgICAgICphY2JveCApCisgIHsKKyAgICBMb25nICB4TWluLCB5TWluLCB4TWF4LCB5TWF4OworCisKKyAgICBpZiAoIG91dGxpbmUgJiYgYWNib3ggKQorICAgIHsKKyAgICAgIGlmICggb3V0bGluZS0+bl9wb2ludHMgPT0gMCApCisgICAgICB7CisgICAgICAgIHhNaW4gPSAwOworICAgICAgICB5TWluID0gMDsKKyAgICAgICAgeE1heCA9IDA7CisgICAgICAgIHlNYXggPSAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBGVF9WZWN0b3IqICB2ZWMgICA9IG91dGxpbmUtPnBvaW50czsKKyAgICAgICAgRlRfVmVjdG9yKiAgbGltaXQgPSB2ZWMgKyBvdXRsaW5lLT5uX3BvaW50czsKKworCisgICAgICAgIHhNaW4gPSB4TWF4ID0gdmVjLT54OworICAgICAgICB5TWluID0geU1heCA9IHZlYy0+eTsKKyAgICAgICAgdmVjKys7CisKKyAgICAgICAgZm9yICggOyB2ZWMgPCBsaW1pdDsgdmVjKysgKQorICAgICAgICB7CisgICAgICAgICAgTG9uZyAgeCwgeTsKKworCisgICAgICAgICAgeCA9IHZlYy0+eDsKKyAgICAgICAgICBpZiAoIHggPCB4TWluICkgeE1pbiA9IHg7CisgICAgICAgICAgaWYgKCB4ID4geE1heCApIHhNYXggPSB4OworCisgICAgICAgICAgeSA9IHZlYy0+eTsKKyAgICAgICAgICBpZiAoIHkgPCB5TWluICkgeU1pbiA9IHk7CisgICAgICAgICAgaWYgKCB5ID4geU1heCApIHlNYXggPSB5OworICAgICAgICB9CisgICAgICB9CisgICAgICBhY2JveC0+eE1pbiA9IHhNaW47CisgICAgICBhY2JveC0+eE1heCA9IHhNYXg7CisgICAgICBhY2JveC0+eU1pbiA9IHlNaW47CisgICAgICBhY2JveC0+eU1heCA9IHlNYXg7CisgICAgfQorICB9CisKKyNlbmRpZiAvKiBTVEFOREFMT05FXyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBSZW5kZXJfU2luZ2xlX1Bhc3MKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFBlcmZvcm0gb25lIHN3ZWVwIHdpdGggc3ViLWJhbmRpbmcuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmbGlwcGVkIDo6CisgICAqICAgICBJZiBzZXQsIGZsaXAgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb3V0bGluZS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSZW5kZXJlciBlcnJvciBjb2RlLgorICAgKi8KICAgc3RhdGljIGludAogICBSZW5kZXJfU2luZ2xlX1Bhc3MoIFJBU19BUkdTIEJvb2wgIGZsaXBwZWQgKQogICB7CkBAIC0yOTYzLDE3ICszMDY3LDE3IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJlbmRlcl9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJlbmRlciBhIGdseXBoIGluIGEgYml0bWFwLiAgU3ViLWJhbmRpbmcgaWYgbmVlZGVkLiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBSZW5kZXJfR2x5cGgKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFJlbmRlciBhIGdseXBoIGluIGEgYml0bWFwLiAgU3ViLWJhbmRpbmcgaWYgbmVlZGVkLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgUmVuZGVyX0dseXBoKCBSQVNfQVJHICkKICAgewpAQCAtMjk4Miw3ICszMDg2LDYgQEAKIAogICAgIFNldF9IaWdoX1ByZWNpc2lvbiggUkFTX1ZBUlMgcmFzLm91dGxpbmUuZmxhZ3MgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfT1VUTElORV9ISUdIX1BSRUNJU0lPTiApOwotICAgIHJhcy5zY2FsZV9zaGlmdCA9IHJhcy5wcmVjaXNpb25fc2hpZnQ7CiAKICAgICBpZiAoIHJhcy5vdXRsaW5lLmZsYWdzICYgRlRfT1VUTElORV9JR05PUkVfRFJPUE9VVFMgKQogICAgICAgcmFzLmRyb3BPdXRDb250cm9sID0gMjsKQEAgLTMwMTMsNyArMzExNiwxMCBAQAogICAgIHJhcy5iYW5kX3N0YWNrWzBdLnlfbWF4ID0gKFNob3J0KSggcmFzLnRhcmdldC5yb3dzIC0gMSApOwogCiAgICAgcmFzLmJXaWR0aCAgPSAoVVNob3J0KXJhcy50YXJnZXQud2lkdGg7Ci0gICAgcmFzLmJUYXJnZXQgPSAoQnl0ZSopcmFzLnRhcmdldC5idWZmZXI7CisgICAgcmFzLmJPcmlnaW4gPSAoQnl0ZSopcmFzLnRhcmdldC5idWZmZXI7CisKKyAgICBpZiAoIHJhcy50YXJnZXQucGl0Y2ggPiAwICkKKyAgICAgIHJhcy5iT3JpZ2luICs9IChMb25nKSggcmFzLnRhcmdldC5yb3dzIC0gMSApICogcmFzLnRhcmdldC5waXRjaDsKIAogICAgIGlmICggKCBlcnJvciA9IFJlbmRlcl9TaW5nbGVfUGFzcyggUkFTX1ZBUlMgMCApICkgIT0gMCApCiAgICAgICByZXR1cm4gZXJyb3I7CkBAIC0zMTg1LDIwICszMjkxLDYgQEAKICAgICBpZiAoICF0YXJnZXRfbWFwLT5idWZmZXIgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkICk7CiAKLSAgICAvKiByZWplY3QgdG9vIGxhcmdlIG91dGxpbmUgY29vcmRpbmF0ZXMgKi8KLSAgICB7Ci0gICAgICBGVF9WZWN0b3IqICB2ZWMgICA9IG91dGxpbmUtPnBvaW50czsKLSAgICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7Ci0KLQotICAgICAgZm9yICggOyB2ZWMgPCBsaW1pdDsgdmVjKysgKQotICAgICAgewotICAgICAgICBpZiAoIHZlYy0+eCA8IC0weDEwMDAwMDBMIHx8IHZlYy0+eCA+IDB4MTAwMDAwMEwgfHwKLSAgICAgICAgICAgICB2ZWMtPnkgPCAtMHgxMDAwMDAwTCB8fCB2ZWMtPnkgPiAweDEwMDAwMDBMICkKLSAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOwotICAgICAgfQotICAgIH0KLQogICAgIHJhcy5vdXRsaW5lID0gKm91dGxpbmU7CiAgICAgcmFzLnRhcmdldCAgPSAqdGFyZ2V0X21hcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCmluZGV4IDQwYjVkNmQuLjNmMTM3OTMgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaAorKysgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cmFzdGVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCi0vKiAgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cmFzdGVyLmgKKyAqCisgKiAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkCisgKiBtb2RpZmllZCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRSQVNURVJfSF8KQEAgLTI4LDExICsyOCwxMSBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IGFyZSB1c2luZyBmdHJhc3Rlci5jIGFzIGEgICAgICAgICAqLwotICAvKiBzdGFuZGFsb25lIG1vZHVsZSwgZnVsbHkgaW5kZXBlbmRlbnQgb2YgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSBhcmUgdXNpbmcgZnRyYXN0ZXIuYyBhcyBhCisgICAqIHN0YW5kYWxvbmUgbW9kdWxlLCBmdWxseSBpbmRlcGVuZGVudCBvZiBGcmVlVHlwZS4KKyAgICovCiAvKiAjZGVmaW5lIFNUQU5EQUxPTkVfICovCiAKICAgRlRfRVhQT1JUX1ZBUiggY29uc3QgRlRfUmFzdGVyX0Z1bmNzICkgIGZ0X3N0YW5kYXJkX3Jhc3RlcjsKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyZW5kMS5jIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKaW5kZXggYTdjZTk3My4uZThlYTljYiAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKKysrIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cmVuZDEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cmVuZDEuYworICoKKyAqICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKICNpbmNsdWRlICJmdHJlbmQxLmgiCiAjaW5jbHVkZSAiZnRyYXN0ZXIuaCIKLSNpbmNsdWRlICJyYXN0cGljLmgiCiAKICNpbmNsdWRlICJyYXN0ZXJycy5oIgogCkBAIC0xMzAsNiArMTI5LDE0IEBACiAKICAgICBmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCggc2xvdCwgbW9kZSwgb3JpZ2luICk7CiAKKyAgICBpZiAoIGJpdG1hcC0+d2lkdGggPiAweDdGRkYgfHwgYml0bWFwLT5yb3dzID4gMHg3RkZGICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJmdF9yYXN0ZXIxX3JlbmRlcjogZ2x5cGggaXMgdG9vIGxhcmdlOiAldSB4ICV1XG4iLAorICAgICAgICAgICAgICAgICBiaXRtYXAtPndpZHRoLCBiaXRtYXAtPnJvd3MgKSk7CisgICAgICBlcnJvciA9IEZUX1RIUk9XKCBSYXN0ZXJfT3ZlcmZsb3cgKTsKKyAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKICAgICAvKiBhbGxvY2F0ZSBuZXcgb25lICovCiAgICAgaWYgKCBGVF9BTExPQ19NVUxUKCBiaXRtYXAtPmJ1ZmZlciwgYml0bWFwLT5yb3dzLCBiaXRtYXAtPnBpdGNoICkgKQogICAgICAgZ290byBFeGl0OwpAQCAtMTk3LDcgKzIwNCw3IEBACiAgICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfcmFzdGVyMV9nZXRfY2JveCwgICAvKiBnZXRfZ2x5cGhfY2JveCAgKi8KICAgICAoRlRfUmVuZGVyZXJfU2V0TW9kZUZ1bmMpICBmdF9yYXN0ZXIxX3NldF9tb2RlLCAgIC8qIHNldF9tb2RlICAgICAgICAqLwogCi0gICAgKEZUX1Jhc3Rlcl9GdW5jcyopJkZUX1NUQU5EQVJEX1JBU1RFUl9HRVQgICAgICAgICAvKiByYXN0ZXJfY2xhc3MgICAgKi8KKyAgICAoRlRfUmFzdGVyX0Z1bmNzKikmZnRfc3RhbmRhcmRfcmFzdGVyICAgICAgICAgICAgIC8qIHJhc3Rlcl9jbGFzcyAgICAqLwogICApCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmggYi9zcmMvcmFzdGVyL2Z0cmVuZDEuaAppbmRleCAyYWJkZjJkLi4wNWJlNTRmIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmVuZDEuaAorKysgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRyZW5kMS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRyZW5kMS5oCisgKgorICogICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIEZUUkVORDFfSF8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMgYi9zcmMvcmFzdGVyL3Jhc3Rlci5jCmluZGV4IDc2ZWRkMjEuLmZmZDg5OTQgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMKKysrIGIvc3JjL3Jhc3Rlci9yYXN0ZXIuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcmFzdGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIG1vbm9jaHJvbWUgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcmFzdGVyLmMKKyAqCisgKiAgIEZyZWVUeXBlIG1vbm9jaHJvbWUgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJmdHJhc3Rlci5jIgogI2luY2x1ZGUgImZ0cmVuZDEuYyIKLSNpbmNsdWRlICJyYXN0cGljLmMiCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL3Jhc3RlcnJzLmggYi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKaW5kZXggMjJhM2UxNS4uYWIyNDJhYyAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCisrKyBiL3NyYy9yYXN0ZXIvcmFzdGVycnMuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcmFzdGVycnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIG1vbm9jaHJvbWUgcmVuZGVyZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcmFzdGVycnMuaAorICoKKyAqICAgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBlbnVtZXJhdGlvbiAqLwotICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBtb25vY2hyb21lIHJlbmRlcmVyIGVycm9yIGVudW1lcmF0aW9uCisgICAqIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgUkFTVEVSUlNfSF8KICNkZWZpbmUgUkFTVEVSUlNfSF8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdHBpYy5jIGIvc3JjL3Jhc3Rlci9yYXN0cGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYzg5ODEuLjAwMDAwMDAKLS0tIGEvc3JjL3Jhc3Rlci9yYXN0cGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICByYXN0cGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHJhc3RlciBtb2R1bGUuICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSAicmFzdHBpYy5oIgotI2luY2x1ZGUgInJhc3RlcnJzLmgiCi0KLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBmdHJhc3Rlci5jICovCi0gIHZvaWQKLSAgRlRfSW5pdF9DbGFzc19mdF9zdGFuZGFyZF9yYXN0ZXIoIEZUX1Jhc3Rlcl9GdW5jcyogIGZ1bmNzICk7Ci0KLQotICB2b2lkCi0gIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgaWYgKCBwaWNfY29udGFpbmVyLT5yYXN0ZXIgKQotICAgIHsKLSAgICAgIFJhc3RlclBJQyogIGNvbnRhaW5lciA9IChSYXN0ZXJQSUMqKXBpY19jb250YWluZXItPnJhc3RlcjsKLQotCi0gICAgICBpZiAoIC0tY29udGFpbmVyLT5yZWZfY291bnQgKQotICAgICAgICByZXR1cm47Ci0gICAgICBGVF9GUkVFKCBjb250YWluZXIgKTsKLSAgICAgIHBpY19jb250YWluZXItPnJhc3RlciA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLQotICBGVF9FcnJvcgotICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7Ci0gICAgUmFzdGVyUElDKiAgICAgICAgIGNvbnRhaW5lciAgICAgPSBOVUxMOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICAvKiBYWFg6IHNpbmNlIHRoaXMgZnVuY3Rpb24gYWxzbyBzZXJ2ZWQgdGhlIG5vIGxvbmdlciBhdmFpbGFibGUgICovCi0gICAgLyogICAgICByYXN0ZXI1IHJlbmRlcmVyIGl0IHVzZXMgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBjb3VsZCAqLwotICAgIC8qICAgICAgYmUgcmVtb3ZlZCBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIHBpY19jb250YWluZXItPnJhc3RlciApCi0gICAgewotICAgICAgKChSYXN0ZXJQSUMqKXBpY19jb250YWluZXItPnJhc3RlciktPnJlZl9jb3VudCsrOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCi0gICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKLSAgICBwaWNfY29udGFpbmVyLT5yYXN0ZXIgPSBjb250YWluZXI7Ci0KLSAgICBjb250YWluZXItPnJlZl9jb3VudCA9IDE7Ci0KLSAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KLSAgICBGVF9Jbml0X0NsYXNzX2Z0X3N0YW5kYXJkX3Jhc3RlciggJmNvbnRhaW5lci0+ZnRfc3RhbmRhcmRfcmFzdGVyICk7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL3Jhc3RwaWMuaCBiL3NyYy9yYXN0ZXIvcmFzdHBpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDA4NzdjLi4wMDAwMDAwCi0tLSBhL3NyYy9yYXN0ZXIvcmFzdHBpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcmFzdHBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciByYXN0ZXIgbW9kdWxlLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIFJBU1RQSUNfSF8KLSNkZWZpbmUgUkFTVFBJQ19IXwotCi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotI2RlZmluZSBGVF9TVEFOREFSRF9SQVNURVJfR0VUICBmdF9zdGFuZGFyZF9yYXN0ZXIKLQotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotICB0eXBlZGVmIHN0cnVjdCAgUmFzdGVyUElDXwotICB7Ci0gICAgaW50ICAgICAgICAgICAgICByZWZfY291bnQ7Ci0gICAgRlRfUmFzdGVyX0Z1bmNzICBmdF9zdGFuZGFyZF9yYXN0ZXI7Ci0KLSAgfSBSYXN0ZXJQSUM7Ci0KLQotI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIChSYXN0ZXJQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIucmFzdGVyICkgKQotI2RlZmluZSBGVF9TVEFOREFSRF9SQVNURVJfR0VUICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+ZnRfc3RhbmRhcmRfcmFzdGVyICkKLQotCi0gIC8qIHNlZSByYXN0cGljLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiAqLwotICB2b2lkCi0gIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotICBGVF9FcnJvcgotICBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0gLyogKi8KLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogUkFTVFBJQ19IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9ydWxlcy5tayBiL3NyYy9yYXN0ZXIvcnVsZXMubWsKaW5kZXggOWFlZjFmMC4uNDQ0ZDBhZCAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9ydWxlcy5taworKysgYi9zcmMvcmFzdGVyL3J1bGVzLm1rCkBAIC0yOCw4ICsyOCw3IEBACiAjIHJhc3RlciBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKICMKIFJBU1RFUl9EUlZfU1JDIDo9ICQoUkFTVEVSX0RJUikvZnRyYXN0ZXIuYyBcCi0gICAgICAgICAgICAgICAgICAkKFJBU1RFUl9ESVIpL2Z0cmVuZDEuYyAgXAotICAgICAgICAgICAgICAgICAgJChSQVNURVJfRElSKS9yYXN0cGljLmMKKyAgICAgICAgICAgICAgICAgICQoUkFTVEVSX0RJUikvZnRyZW5kMS5jCiAKIAogIyByYXN0ZXIgZHJpdmVyIGhlYWRlcnMKZGlmZiAtLWdpdCBhL3NyYy9zZm50L0phbWZpbGUgYi9zcmMvc2ZudC9KYW1maWxlCmluZGV4IDU3OTc3ZmMuLjYzNWFhNjAgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L0phbWZpbGUKKysrIGIvc3JjL3NmbnQvSmFtZmlsZQpAQCAtMjIsNiArMjIsOCBAQAogICAgICAgICAgICAgICAgc2ZvYmpzCiAgICAgICAgICAgICAgICB0dGJkZgogICAgICAgICAgICAgICAgdHRjbWFwCisgICAgICAgICAgICAgICB0dGNvbHIKKyAgICAgICAgICAgICAgIHR0Y3BhbAogICAgICAgICAgICAgICAgdHRrZXJuCiAgICAgICAgICAgICAgICB0dGxvYWQKICAgICAgICAgICAgICAgIHR0bXR4CmRpZmYgLS1naXQgYS9zcmMvc2ZudC9wbmdzaGltLmMgYi9zcmMvc2ZudC9wbmdzaGltLmMKaW5kZXggMTYwMjAyNi4uMDY3NGJkYSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvcG5nc2hpbS5jCisrKyBiL3NyYy9zZm50L3BuZ3NoaW0uYwpAQCAtMSwyMCArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgcG5nc2hpbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBuZ3NoaW0uYworICoKKyAqICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAyMDEzLTIwMTggYnkKKyAqIEdvb2dsZSwgSW5jLgorICogV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5oIGIvc3JjL3NmbnQvcG5nc2hpbS5oCmluZGV4IDE5NDIzOGMuLjA0OWExZWQgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uaAorKysgYi9zcmMvc2ZudC9wbmdzaGltLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHBuZ3NoaW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQTkcgQml0bWFwIGdseXBoIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwbmdzaGltLmgKKyAqCisgKiAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CisgKiBHb29nbGUsIEluYy4KKyAqIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFBOR1NISU1fSF8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3J1bGVzLm1rIGIvc3JjL3NmbnQvcnVsZXMubWsKaW5kZXggODNhY2M2Ni4uZmY3ZDdjNyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvcnVsZXMubWsKKysrIGIvc3JjL3NmbnQvcnVsZXMubWsKQEAgLTI4LDE3ICsyOCwxOCBAQAogCiAjIFNGTlQgZHJpdmVyIHNvdXJjZXMgKGkuZS4sIEMgZmlsZXMpCiAjCi1TRk5UX0RSVl9TUkMgOj0gJChTRk5UX0RJUikvdHRsb2FkLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRtdHguYyAgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjbWFwLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRzYml0LmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRwb3N0LmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRrZXJuLmMgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRiZGYuYyAgICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2ZvYmpzLmMgICBcCitTRk5UX0RSVl9TUkMgOj0gJChTRk5UX0RJUikvcG5nc2hpbS5jICBcCiAgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2Zkcml2ZXIuYyBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2ZudHBpYy5jICBcCi0gICAgICAgICAgICAgICAgJChTRk5UX0RJUikvcG5nc2hpbS5jCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvc2ZvYmpzLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRiZGYuYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjbWFwLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjb2xyLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRjcGFsLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRrZXJuLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRsb2FkLmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRtdHguYyAgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRwb3N0LmMgICBcCisgICAgICAgICAgICAgICAgJChTRk5UX0RJUikvdHRzYml0LmMKIAogIyBTRk5UIGRyaXZlciBoZWFkZXJzCiAjCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZmRyaXZlci5jIGIvc3JjL3NmbnQvc2Zkcml2ZXIuYwppbmRleCAzMDNlMWNhLi5hZTZkNmNkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZmRyaXZlci5jCisrKyBiL3NyYy9zZm50L3NmZHJpdmVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHNmZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBIaWdoLWxldmVsIFNGTlQgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmZHJpdmVyLmMKKyAqCisgKiAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAic2Zkcml2ZXIuaCIKICNpbmNsdWRlICJ0dGxvYWQuaCIKICNpbmNsdWRlICJzZm9ianMuaCIKLSNpbmNsdWRlICJzZm50cGljLmgiCiAKICNpbmNsdWRlICJzZmVycm9ycy5oIgogCkBAIC0zMyw2ICszMiwxMSBAQAogI2luY2x1ZGUgInR0c2JpdC5oIgogI2VuZGlmCiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUworI2luY2x1ZGUgInR0Y29sci5oIgorI2luY2x1ZGUgInR0Y3BhbC5oIgorI2VuZGlmCisKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKICNpbmNsdWRlICJ0dHBvc3QuaCIKICNlbmRpZgpAQCAtNTcsMTggKzYxLDE4IEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zZmRyaXZlcgogCiAKICAgLyoKLSAgICogIFNGTlQgVEFCTEUgU0VSVklDRQorICAgKiBTRk5UIFRBQkxFIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTE1NSw3ICsxNTksNyBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwogCiAgIC8qCi0gICAqICBHTFlQSCBESUNUIFNFUlZJQ0UKKyAgICogR0xZUEggRElDVCBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC0yMjIsNyArMjI2LDcgQEAKIAogCiAgIC8qCi0gICAqICBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQorICAgKiBQT1NUU0NSSVBUIE5BTUUgU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtNjQzLDkgKzY0Nyw5IEBACiAKIAogICAvKgotICAgKiAgRmluZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIDE2LjE2IGZpeGVkIHBvaW50Ci0gICAqICBudW1iZXIuICBUaGUgZnVuY3Rpb24gZmlsbHMgYGJ1Zicgd2l0aCB0aGUgcmVzdWx0LCByZXR1cm5pbmcgYSBwb2ludGVyCi0gICAqICB0byB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIHJlcHJlc2VudGF0aW9uJ3MgbGFzdCBieXRlLgorICAgKiBGaW5kIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgMTYuMTYgZml4ZWQgcG9pbnQKKyAgICogbnVtYmVyLiAgVGhlIGZ1bmN0aW9uIGZpbGxzIGBidWYnIHdpdGggdGhlIHJlc3VsdCwgcmV0dXJuaW5nIGEgcG9pbnRlcgorICAgKiB0byB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIHJlcHJlc2VudGF0aW9uJ3MgbGFzdCBieXRlLgogICAgKi8KIAogICBzdGF0aWMgY2hhcioKQEAgLTY3Myw3ICs2NzcsNyBAQAogICAgIGlmICggZml4ZWQgPCAwICkKICAgICB7CiAgICAgICAqcCsrID0gJy0nOwotICAgICAgZml4ZWQgPSAtZml4ZWQ7CisgICAgICBmaXhlZCA9IE5FR19JTlQoIGZpeGVkICk7CiAgICAgfQogCiAgICAgaW50X3BhcnQgID0gKCBmaXhlZCA+PiAxNiApICYgMHhGRkZGOwpAQCAtMTA3Myw3ICsxMDc3LDcgQEAKIAogCiAgIC8qCi0gICAqICBUVCBDTUFQIElORk8KKyAgICogVFQgQ01BUCBJTkZPCiAgICAqLwogICBGVF9ERUZJTkVfU0VSVklDRV9UVENNQVBTUkVDKAogICAgIHR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbywKQEAgLTExMzIsNDEgKzExMzYsNDEgQEAKIAogCiAgIC8qCi0gICAqICBTRVJWSUNFIExJU1QKKyAgICogU0VSVklDRSBMSVNUCiAgICAqLwogCiAjaWYgZGVmaW5lZCBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMgJiYgZGVmaW5lZCBUVF9DT05GSUdfT1BUSU9OX0JERgogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM1KAogICAgIHNmbnRfc2VydmljZXMsCiAKLSAgICBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUsICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX1NGTlRfVEFCTEVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZTRk5UX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX0JERiwgICAgICAgICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX0JERl9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJlRUX1NFUlZJQ0VfQ01BUF9JTkZPX0dFVCApCisgICAgRlRfU0VSVklDRV9JRF9TRk5UX1RBQkxFLCAgICAgICAgICAgJnNmbnRfc2VydmljZV9zZm50X3RhYmxlLAorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZzZm50X3NlcnZpY2VfcHNfbmFtZSwKKyAgICBGVF9TRVJWSUNFX0lEX0dMWVBIX0RJQ1QsICAgICAgICAgICAmc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QsCisgICAgRlRfU0VSVklDRV9JRF9CREYsICAgICAgICAgICAgICAgICAgJnNmbnRfc2VydmljZV9iZGYsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJnR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApCiAjZWxpZiBkZWZpbmVkIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUwogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM0KAogICAgIHNmbnRfc2VydmljZXMsCiAKLSAgICBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUsICAgICAgICAgICAmU0ZOVF9TRVJWSUNFX1NGTlRfVEFCTEVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZTRk5UX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICkKKyAgICBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUsICAgICAgICAgICAmc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJnNmbnRfc2VydmljZV9wc19uYW1lLAorICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZzZm50X3NlcnZpY2VfZ2x5cGhfZGljdCwKKyAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmdHRfc2VydmljZV9nZXRfY21hcF9pbmZvICkKICNlbGlmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9CREYKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNCgKICAgICBzZm50X3NlcnZpY2VzLAogCi0gICAgRlRfU0VSVklDRV9JRF9TRk5UX1RBQkxFLCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmU0ZOVF9TRVJWSUNFX1BTX05BTUVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfQkRGLCAgICAgICAgICAgICAgICAgICZTRk5UX1NFUlZJQ0VfQkRGX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICkKKyAgICBGVF9TRVJWSUNFX0lEX1NGTlRfVEFCTEUsICAgICAgICAgICAmc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJnNmbnRfc2VydmljZV9wc19uYW1lLAorICAgIEZUX1NFUlZJQ0VfSURfQkRGLCAgICAgICAgICAgICAgICAgICZzZm50X3NlcnZpY2VfYmRmLAorICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZ0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8gKQogI2Vsc2UKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMygKICAgICBzZm50X3NlcnZpY2VzLAogCi0gICAgRlRfU0VSVklDRV9JRF9TRk5UX1RBQkxFLCAgICAgICAgICAgJlNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmU0ZOVF9TRVJWSUNFX1BTX05BTUVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZUVF9TRVJWSUNFX0NNQVBfSU5GT19HRVQgKQorICAgIEZUX1NFUlZJQ0VfSURfU0ZOVF9UQUJMRSwgICAgICAgICAgICZzZm50X3NlcnZpY2Vfc2ZudF90YWJsZSwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmc2ZudF9zZXJ2aWNlX3BzX25hbWUsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJnR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApCiAjZW5kaWYKIAogCkBAIC0xMTc0LDIxICsxMTc4LDkgQEAKICAgc2ZudF9nZXRfaW50ZXJmYWNlKCBGVF9Nb2R1bGUgICAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBtb2R1bGVfaW50ZXJmYWNlICkKICAgewotICAgIC8qIFNGTlRfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0KLQotICAgIGlmICggIW1vZHVsZSApCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICBsaWJyYXJ5ID0gbW9kdWxlLT5saWJyYXJ5OwotICAgIGlmICggIWxpYnJhcnkgKQotICAgICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQogICAgIEZUX1VOVVNFRCggbW9kdWxlICk7Ci0jZW5kaWYKIAotICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBTRk5UX1NFUlZJQ0VTX0dFVCwgbW9kdWxlX2ludGVyZmFjZSApOworICAgIHJldHVybiBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwKCBzZm50X3NlcnZpY2VzLCBtb2R1bGVfaW50ZXJmYWNlICk7CiAgIH0KIAogCkBAIC0xMTk4LDYgKzExOTAsMTIgQEAKICNkZWZpbmUgUFVUX0VNQkVEREVEX0JJVE1BUFMoIGEgKSAgTlVMTAogI2VuZGlmCiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUworI2RlZmluZSBQVVRfQ09MT1JfTEFZRVJTKCBhICkgIGEKKyNlbHNlCisjZGVmaW5lIFBVVF9DT0xPUl9MQVlFUlMoIGEgKSAgTlVMTAorI2VuZGlmCisKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMKICNkZWZpbmUgUFVUX1BTX05BTUVTKCBhICkgIGEKICNlbHNlCkBAIC0xMjU2LDkgKzEyNTQsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICBmcmVlX2VibGMgICAgICAgKi8KIAogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX3NldF9zYml0X3N0cmlrZSAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYyBzZXRfc2JpdF9zdHJpa2UgKi8KKyAgICAgICAgICAgICAgICAgICAvKiBUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYyAgICAgIHNldF9zYml0X3N0cmlrZSAgICAgKi8KICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzICksCi0gICAgICAgICAgICAgICAgICAgIC8qIFRUX0xvYWRfU3RyaWtlX01ldHJpY3NfRnVuYyBsb2FkX3N0cmlrZV9tZXRyaWNzICovCisgICAgICAgICAgICAgICAgICAgLyogVFRfTG9hZF9TdHJpa2VfTWV0cmljc19GdW5jICBsb2FkX3N0cmlrZV9tZXRyaWNzICovCisKKyAgICBQVVRfQ09MT1JfTEFZRVJTKCB0dF9mYWNlX2xvYWRfY3BhbCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfY3BhbCAgICAgICAqLworICAgIFBVVF9DT0xPUl9MQVlFUlMoIHR0X2ZhY2VfbG9hZF9jb2xyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9jb2xyICAgICAgICovCisgICAgUFVUX0NPTE9SX0xBWUVSUyggdHRfZmFjZV9mcmVlX2NwYWwgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICBmcmVlX2NwYWwgICAgICAgKi8KKyAgICBQVVRfQ09MT1JfTEFZRVJTKCB0dF9mYWNlX2ZyZWVfY29sciApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgIGZyZWVfY29sciAgICAgICAqLworICAgIFBVVF9DT0xPUl9MQVlFUlMoIHR0X2ZhY2VfcGFsZXR0ZV9zZXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9TZXRfUGFsZXR0ZV9GdW5jICAgICBzZXRfcGFsZXR0ZSAgICAgKi8KKyAgICBQVVRfQ09MT1JfTEFZRVJTKCB0dF9mYWNlX2dldF9jb2xyX2xheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfR2V0X0NvbHJfTGF5ZXJfRnVuYyAgZ2V0X2NvbHJfbGF5ZXIgICovCisgICAgUFVUX0NPTE9SX0xBWUVSUyggdHRfZmFjZV9jb2xyX2JsZW5kX2xheWVyICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfQmxlbmRfQ29scl9GdW5jICAgICAgY29scl9ibGVuZCAgICAgICovCiAKICAgICB0dF9mYWNlX2dldF9tZXRyaWNzLCAgICAvKiBUVF9HZXRfTWV0cmljc19GdW5jICAgICBnZXRfbWV0cmljcyAgICAgKi8KIApAQCAtMTI3Nyw3ICsxMjkwLDcgQEAKICAgICAweDEwMDAwTCwgICAvKiBkcml2ZXIgdmVyc2lvbiAxLjAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIDB4MjAwMDBMLCAgIC8qIGRyaXZlciByZXF1aXJlcyBGcmVlVHlwZSAyLjAgb3IgaGlnaGVyICovCiAKLSAgICAoY29uc3Qgdm9pZCopJlNGTlRfSU5URVJGQUNFX0dFVCwgIC8qIG1vZHVsZSBzcGVjaWZpYyBpbnRlcmZhY2UgKi8KKyAgICAoY29uc3Qgdm9pZCopJnNmbnRfaW50ZXJmYWNlLCAgLyogbW9kdWxlIHNwZWNpZmljIGludGVyZmFjZSAqLwogCiAgICAgKEZUX01vZHVsZV9Db25zdHJ1Y3RvcilOVUxMLCAgICAgICAgICAgICAgIC8qIG1vZHVsZV9pbml0ICAgKi8KICAgICAoRlRfTW9kdWxlX0Rlc3RydWN0b3IpIE5VTEwsICAgICAgICAgICAgICAgLyogbW9kdWxlX2RvbmUgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuaCBiL3NyYy9zZm50L3NmZHJpdmVyLmgKaW5kZXggODFjMjJkMi4uMDJkOGQzZCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuaAorKysgYi9zcmMvc2ZudC9zZmRyaXZlci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzZmRyaXZlci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGlnaC1sZXZlbCBTRk5UIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZmRyaXZlci5oCisgKgorICogICBIaWdoLWxldmVsIFNGTlQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgU0ZEUklWRVJfSF8KQEAgLTI2LDEwICsyNiw4IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0KICAgRlRfREVDTEFSRV9NT0RVTEUoIHNmbnRfbW9kdWxlX2NsYXNzICkKIAotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBTRkRSSVZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZlcnJvcnMuaCBiL3NyYy9zZm50L3NmZXJyb3JzLmgKaW5kZXggNzQwMDNkNC4uNmY3ODA2MyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZlcnJvcnMuaAorKysgYi9zcmMvc2ZudC9zZmVycm9ycy5oCkBAIC0xLDI2ICsxLDI2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzZmVycm9ycy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU0ZOVCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZmVycm9ycy5oCisgKgorICogICBTRk5UIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBTRk5UIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgU0ZOVCBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIFNGRVJST1JTX0hfCiAjZGVmaW5lIFNGRVJST1JTX0hfCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm50LmMgYi9zcmMvc2ZudC9zZm50LmMKaW5kZXggOGI5YTZiMy4uOWI0ZTNjMCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZudC5jCisrKyBiL3NyYy9zZm50L3NmbnQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc2ZudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFNpbmdsZSBvYmplY3QgbGlicmFyeSBjb21wb25lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2ZudC5jCisgKgorICogICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50LgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKQEAgLTIxLDEwICsyMSwxMiBAQAogCiAjaW5jbHVkZSAicG5nc2hpbS5jIgogI2luY2x1ZGUgInNmZHJpdmVyLmMiCi0jaW5jbHVkZSAic2ZudHBpYy5jIgogI2luY2x1ZGUgInNmb2Jqcy5jIgogI2luY2x1ZGUgInR0YmRmLmMiCiAjaW5jbHVkZSAidHRjbWFwLmMiCisjaW5jbHVkZSAidHRjb2xyLmMiCisjaW5jbHVkZSAidHRjcGFsLmMiCisKICNpbmNsdWRlICJ0dGtlcm4uYyIKICNpbmNsdWRlICJ0dGxvYWQuYyIKICNpbmNsdWRlICJ0dG10eC5jIgpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudHBpYy5jIGIvc3JjL3NmbnQvc2ZudHBpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjJkODE2Li4wMDAwMDAwCi0tLSBhL3NyYy9zZm50L3NmbnRwaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBzZm50cGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHNmbnQgbW9kdWxlLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSAic2ZudHBpYy5oIgotI2luY2x1ZGUgInNmZXJyb3JzLmgiCi0KLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBzZmRyaXZlci5jICovCi0gIEZUX0Vycm9yCi0gIEZUX0NyZWF0ZV9DbGFzc19zZm50X3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICk7Ci0gIHZvaWQKLSAgRlRfRGVzdHJveV9DbGFzc19zZm50X3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApOwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3Nfc2ZudF9zZXJ2aWNlX2JkZiggRlRfU2VydmljZV9CREZSZWMqICBjbGF6eiApOwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3Nfc2ZudF9pbnRlcmZhY2UoIEZUX0xpYnJhcnkgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0ZOVF9JbnRlcmZhY2UqICBjbGF6eiApOwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3Nfc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QoCi0gICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgIEZUX1NlcnZpY2VfR2x5cGhEaWN0UmVjKiAgY2xhenogKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9wc19uYW1lKAotICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgIGxpYnJhcnksCi0gICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjKiAgY2xhenogKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbygKLSAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICBsaWJyYXJ5LAotICAgIEZUX1NlcnZpY2VfVFRDTWFwc1JlYyogIGNsYXp6ICk7Ci0gIHZvaWQKLSAgRlRfSW5pdF9DbGFzc19zZm50X3NlcnZpY2Vfc2ZudF90YWJsZSgKLSAgICBGVF9TZXJ2aWNlX1NGTlRfVGFibGVSZWMqICBjbGF6eiApOwotCi0KLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSB0dGNtYXAuYyAqLwotICBGVF9FcnJvcgotICBGVF9DcmVhdGVfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBfQ2xhc3MqKiAgb3V0cHV0X2NsYXNzICk7Ci0gIHZvaWQKLSAgRlRfRGVzdHJveV9DbGFzc190dF9jbWFwX2NsYXNzZXMoIEZUX0xpYnJhcnkgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfQ01hcF9DbGFzcyogIGNsYXp6ICk7Ci0KLQotICB2b2lkCi0gIHNmbnRfbW9kdWxlX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIGlmICggcGljX2NvbnRhaW5lci0+c2ZudCApCi0gICAgewotICAgICAgc2ZudE1vZHVsZVBJQyogIGNvbnRhaW5lciA9IChzZm50TW9kdWxlUElDKilwaWNfY29udGFpbmVyLT5zZm50OwotCi0KLSAgICAgIGlmICggY29udGFpbmVyLT5zZm50X3NlcnZpY2VzICkKLSAgICAgICAgRlRfRGVzdHJveV9DbGFzc19zZm50X3NlcnZpY2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlcyApOwotICAgICAgY29udGFpbmVyLT5zZm50X3NlcnZpY2VzID0gTlVMTDsKLQotICAgICAgaWYgKCBjb250YWluZXItPnR0X2NtYXBfY2xhc3NlcyApCi0gICAgICAgIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLT50dF9jbWFwX2NsYXNzZXMgKTsKLSAgICAgIGNvbnRhaW5lci0+dHRfY21hcF9jbGFzc2VzID0gTlVMTDsKLQotICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7Ci0gICAgICBwaWNfY29udGFpbmVyLT5zZm50ID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotCi0gIEZUX0Vycm9yCi0gIHNmbnRfbW9kdWxlX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yICAgICAgICAgPSBGVF9FcnJfT2s7Ci0gICAgc2ZudE1vZHVsZVBJQyogICAgIGNvbnRhaW5lciAgICAgPSBOVUxMOwotICAgIEZUX01lbW9yeSAgICAgICAgICBtZW1vcnkgICAgICAgID0gbGlicmFyeS0+bWVtb3J5OwotCi0KLSAgICAvKiBhbGxvY2F0ZSBwb2ludGVyLCBjbGVhciBhbmQgc2V0IGdsb2JhbCBjb250YWluZXIgcG9pbnRlciAqLwotICAgIGlmICggRlRfQUxMT0MoIGNvbnRhaW5lciwgc2l6ZW9mICggKmNvbnRhaW5lciApICkgKQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIEZUX01FTV9TRVQoIGNvbnRhaW5lciwgMCwgc2l6ZW9mICggKmNvbnRhaW5lciApICk7Ci0gICAgcGljX2NvbnRhaW5lci0+c2ZudCA9IGNvbnRhaW5lcjsKLQotICAgIC8qIGluaXRpYWxpemUgcG9pbnRlciB0YWJsZSAtICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIHRoaXMgaXMgaG93IHRoZSBtb2R1bGUgdXN1YWxseSBleHBlY3RzIHRoaXMgZGF0YSAqLwotICAgIGVycm9yID0gRlRfQ3JlYXRlX0NsYXNzX3NmbnRfc2VydmljZXMoIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlcyApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgZXJyb3IgPSBGVF9DcmVhdGVfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5lci0+dHRfY21hcF9jbGFzc2VzICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9nbHlwaF9kaWN0KAotICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlX2dseXBoX2RpY3QgKTsKLSAgICBGVF9Jbml0X0NsYXNzX3NmbnRfc2VydmljZV9wc19uYW1lKAotICAgICAgbGlicmFyeSwgJmNvbnRhaW5lci0+c2ZudF9zZXJ2aWNlX3BzX25hbWUgKTsKLSAgICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbygKLSAgICAgIGxpYnJhcnksICZjb250YWluZXItPnR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbyApOwotICAgIEZUX0luaXRfQ2xhc3Nfc2ZudF9zZXJ2aWNlX3NmbnRfdGFibGUoCi0gICAgICAmY29udGFpbmVyLT5zZm50X3NlcnZpY2Vfc2ZudF90YWJsZSApOwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCi0gICAgRlRfSW5pdF9DbGFzc19zZm50X3NlcnZpY2VfYmRmKCAmY29udGFpbmVyLT5zZm50X3NlcnZpY2VfYmRmICk7Ci0jZW5kaWYKLSAgICBGVF9Jbml0X0NsYXNzX3NmbnRfaW50ZXJmYWNlKCBsaWJyYXJ5LCAmY29udGFpbmVyLT5zZm50X2ludGVyZmFjZSApOwotCi0gIEV4aXQ6Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBzZm50X21vZHVsZV9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOwotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3NmbnRwaWMuaCBiL3NyYy9zZm50L3NmbnRwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0MzEyMi4uMDAwMDAwMAotLS0gYS9zcmMvc2ZudC9zZm50cGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc2ZudHBpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIFNGTlRQSUNfSF8KLSNkZWZpbmUgU0ZOVFBJQ19IXwotCi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICi0KLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jZGVmaW5lIFNGTlRfU0VSVklDRVNfR0VUICAgICAgICAgICAgc2ZudF9zZXJ2aWNlcwotI2RlZmluZSBTRk5UX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQgIHNmbnRfc2VydmljZV9nbHlwaF9kaWN0Ci0jZGVmaW5lIFNGTlRfU0VSVklDRV9QU19OQU1FX0dFVCAgICAgc2ZudF9zZXJ2aWNlX3BzX25hbWUKLSNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICB0dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8KLSNkZWZpbmUgVFRfQ01BUF9DTEFTU0VTX0dFVCAgICAgICAgICB0dF9jbWFwX2NsYXNzZXMKLSNkZWZpbmUgU0ZOVF9TRVJWSUNFX1NGTlRfVEFCTEVfR0VUICBzZm50X3NlcnZpY2Vfc2ZudF90YWJsZQotI2RlZmluZSBTRk5UX1NFUlZJQ0VfQkRGX0dFVCAgICAgICAgIHNmbnRfc2VydmljZV9iZGYKLSNkZWZpbmUgU0ZOVF9JTlRFUkZBQ0VfR0VUICAgICAgICAgICBzZm50X2ludGVyZmFjZQotCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0gIC8qIHNvbWUgaW5jbHVkZSBmaWxlcyByZXF1aXJlZCBmb3IgbWVtYmVycyBvZiBzZm50TW9kdWxlUElDICovCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0dMWVBIX0RJQ1RfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX05BTUVfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9TRk5UX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfVFRfQ01BUF9ICi0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0JERgotI2luY2x1ZGUgInR0YmRmLmgiCi0jaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICi0jZW5kaWYKLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgInR0Y21hcC5oIgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIHR5cGVkZWYgc3RydWN0ICBzZm50TW9kdWxlUElDXwotICB7Ci0gICAgRlRfU2VydmljZURlc2NSZWMqICAgICAgICBzZm50X3NlcnZpY2VzOwotICAgIEZUX1NlcnZpY2VfR2x5cGhEaWN0UmVjICAgc2ZudF9zZXJ2aWNlX2dseXBoX2RpY3Q7Ci0gICAgRlRfU2VydmljZV9Qc0ZvbnROYW1lUmVjICBzZm50X3NlcnZpY2VfcHNfbmFtZTsKLSAgICBGVF9TZXJ2aWNlX1RUQ01hcHNSZWMgICAgIHR0X3NlcnZpY2VfZ2V0X2NtYXBfaW5mbzsKLSAgICBUVF9DTWFwX0NsYXNzKiAgICAgICAgICAgIHR0X2NtYXBfY2xhc3NlczsKLSAgICBGVF9TZXJ2aWNlX1NGTlRfVGFibGVSZWMgIHNmbnRfc2VydmljZV9zZm50X3RhYmxlOwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCi0gICAgRlRfU2VydmljZV9CREZSZWMgICAgICAgICBzZm50X3NlcnZpY2VfYmRmOwotI2VuZGlmCi0gICAgU0ZOVF9JbnRlcmZhY2UgICAgICAgICAgICBzZm50X2ludGVyZmFjZTsKLQotICB9IHNmbnRNb2R1bGVQSUM7Ci0KLQotI2RlZmluZSBHRVRfUElDKCBsaWIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggKHNmbnRNb2R1bGVQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIuc2ZudCApICkKLQotI2RlZmluZSBTRk5UX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2VzICkKLSNkZWZpbmUgU0ZOVF9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9nbHlwaF9kaWN0ICkKLSNkZWZpbmUgU0ZOVF9TRVJWSUNFX1BTX05BTUVfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9wc19uYW1lICkKLSNkZWZpbmUgVFRfU0VSVklDRV9DTUFQX0lORk9fR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX2dldF9jbWFwX2luZm8gKQotI2RlZmluZSBUVF9DTUFQX0NMQVNTRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnR0X2NtYXBfY2xhc3NlcyApCi0jZGVmaW5lIFNGTlRfU0VSVklDRV9TRk5UX1RBQkxFX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5zZm50X3NlcnZpY2Vfc2ZudF90YWJsZSApCi0jZGVmaW5lIFNGTlRfU0VSVklDRV9CREZfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnNmbnRfc2VydmljZV9iZGYgKQotI2RlZmluZSBTRk5UX0lOVEVSRkFDRV9HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+c2ZudF9pbnRlcmZhY2UgKQotCi0KLSAgLyogc2VlIHNmbnRwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCi0gIHZvaWQKLSAgc2ZudF9tb2R1bGVfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotICBGVF9FcnJvcgotICBzZm50X21vZHVsZV9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAgLyogKi8KLQotI2VuZGlmIC8qIFNGTlRQSUNfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3Nmb2Jqcy5jIGIvc3JjL3NmbnQvc2ZvYmpzLmMKaW5kZXggMGM5MTcwMy4uOWRmYzIwZSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZvYmpzLmMKKysrIGIvc3JjL3NmbnQvc2ZvYmpzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHNmb2Jqcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChiYXNlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmb2Jqcy5jCisgKgorICogICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChiYXNlKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MSwxMiArNDEsMTIgQEAKICNlbmRpZgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Nmb2JqcwogCkBAIC05MTgsNyArOTE4LDkgQEAKICAgICAvKiBTdHJlYW0gbWF5IGhhdmUgY2hhbmdlZCBpbiBzZm50X29wZW5fZm9udC4gKi8KICAgICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKIAotICAgIEZUX1RSQUNFMigoICJzZm50X2luaXRfZmFjZTogJTA4cCwgJWRcbiIsIGZhY2UsIGZhY2VfaW5zdGFuY2VfaW5kZXggKSk7CisgICAgRlRfVFJBQ0UyKCggInNmbnRfaW5pdF9mYWNlOiAlMDhwIChpbmRleCAlZClcbiIsCisgICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICBmYWNlX2luc3RhbmNlX2luZGV4ICkpOwogCiAgICAgZmFjZV9pbmRleCA9IEZUX0FCUyggZmFjZV9pbnN0YW5jZV9pbmRleCApICYgMHhGRkZGOwogCkBAIC0xMDAxLDE1ICsxMDAzLDE1IEBACiAgICAgICAgIGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0IHw9IFRUX0ZBQ0VfRkxBR19WQVJfRlZBUjsKIAogICAgICAgLyoKLSAgICAgICAqICBBcyBkb2N1bWVudGVkIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLCBhbiBlbnRyeSBmb3IgdGhlCi0gICAgICAgKiAgZGVmYXVsdCBpbnN0YW5jZSBtYXkgYmUgb21pdHRlZCBpbiB0aGUgbmFtZWQgaW5zdGFuY2UgdGFibGUuICBJbgotICAgICAgICogIHBhcnRpY3VsYXIgdGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlcmUgaXMgbm8gbmFtZWQgaW5zdGFuY2UKLSAgICAgICAqICB0YWJsZSBpbiB0aGUgZm9udCB3ZSBhY3R1YWxseSBkbyBoYXZlIGEgbmFtZWQgaW5zdGFuY2UsIG5hbWVseSB0aGUKLSAgICAgICAqICBkZWZhdWx0IGluc3RhbmNlLgorICAgICAgICogQXMgZG9jdW1lbnRlZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiwgYW4gZW50cnkgZm9yIHRoZQorICAgICAgICogZGVmYXVsdCBpbnN0YW5jZSBtYXkgYmUgb21pdHRlZCBpbiB0aGUgbmFtZWQgaW5zdGFuY2UgdGFibGUuICBJbgorICAgICAgICogcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBubyBuYW1lZCBpbnN0YW5jZQorICAgICAgICogdGFibGUgaW4gdGhlIGZvbnQgd2UgYWN0dWFsbHkgZG8gaGF2ZSBhIG5hbWVkIGluc3RhbmNlLCBuYW1lbHkgdGhlCisgICAgICAgKiBkZWZhdWx0IGluc3RhbmNlLgogICAgICAgICoKLSAgICAgICAqICBGb3IgY29uc2lzdGVuY3ksIHdlIGFsd2F5cyB3YW50IHRoZSBkZWZhdWx0IGluc3RhbmNlIGluIG91ciBsaXN0Ci0gICAgICAgKiAgb2YgbmFtZWQgaW5zdGFuY2VzLiAgSWYgaXQgaXMgbWlzc2luZywgd2UgdHJ5IHRvIHN5bnRoZXNpemUgaXQKLSAgICAgICAqICBsYXRlciBvbi4gIEhlcmUsIHdlIGhhdmUgdG8gYWRqdXN0IGBudW1faW5zdGFuY2VzJyBhY2NvcmRpbmdseS4KKyAgICAgICAqIEZvciBjb25zaXN0ZW5jeSwgd2UgYWx3YXlzIHdhbnQgdGhlIGRlZmF1bHQgaW5zdGFuY2UgaW4gb3VyIGxpc3QKKyAgICAgICAqIG9mIG5hbWVkIGluc3RhbmNlcy4gIElmIGl0IGlzIG1pc3NpbmcsIHdlIHRyeSB0byBzeW50aGVzaXplIGl0CisgICAgICAgKiBsYXRlciBvbi4gIEhlcmUsIHdlIGhhdmUgdG8gYWRqdXN0IGBudW1faW5zdGFuY2VzJyBhY2NvcmRpbmdseS4KICAgICAgICAqLwogCiAgICAgICBpZiAoICggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJiBUVF9GQUNFX0ZMQUdfVkFSX0ZWQVIgKSAmJgpAQCAtMTE0NCw2ICsxMTQ2LDggQEAKICAgICBGVF9Cb29sICAgICAgIGhhc19vdXRsaW5lOwogICAgIEZUX0Jvb2wgICAgICAgaXNfYXBwbGVfc2JpdDsKICAgICBGVF9Cb29sICAgICAgIGlzX2FwcGxlX3NiaXg7CisgICAgRlRfQm9vbCAgICAgICBoYXNfQ0JMQzsKKyAgICBGVF9Cb29sICAgICAgIGhhc19DQkRUOwogICAgIEZUX0Jvb2wgICAgICAgaWdub3JlX3R5cG9ncmFwaGljX2ZhbWlseSAgICA9IEZBTFNFOwogICAgIEZUX0Jvb2wgICAgICAgaWdub3JlX3R5cG9ncmFwaGljX3N1YmZhbWlseSA9IEZBTFNFOwogCkBAIC0xMjI0LDYgKzEyMjgsMTMgQEAKICAgICAgICAgZ290byBFeGl0OwogICAgIH0KIAorICAgIGhhc19DQkxDID0gIWZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfQ0JMQywgc3RyZWFtLCAwICk7CisgICAgaGFzX0NCRFQgPSAhZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19DQkRULCBzdHJlYW0sIDAgKTsKKworICAgIC8qIElnbm9yZSBvdXRsaW5lcyBmb3IgQ0JMQy9DQkRUIGZvbnRzLiAqLworICAgIGlmICggaGFzX0NCTEMgfHwgaGFzX0NCRFQgKQorICAgICAgaGFzX291dGxpbmUgPSBGQUxTRTsKKwogICAgIC8qIE9wZW5UeXBlIDEuOC4yIGludHJvZHVjZWQgbGltaXRzIHRvIHRoaXMgdmFsdWU7ICAgICovCiAgICAgLyogaG93ZXZlciwgdGhleSBtYWtlIHNlbnNlIGZvciBvbGRlciBTRk5UIGZvbnRzIGFsc28gKi8KICAgICBpZiAoIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gPCAgICAxNiB8fApAQCAtMTMzMiw2ICsxMzQzLDEzIEBACiAgICAgaWYgKCBzZm50LT5sb2FkX2VibGMgKQogICAgICAgTE9BRF8oIGVibGMgKTsKIAorICAgIC8qIGNvbG9yZWQgZ2x5cGggc3VwcG9ydCAqLworICAgIGlmICggc2ZudC0+bG9hZF9jcGFsICkKKyAgICB7CisgICAgICBMT0FEXyggY3BhbCApOworICAgICAgTE9BRF8oIGNvbHIgKTsKKyAgICB9CisKICAgICAvKiBjb25zaWRlciB0aGUgcGNsdCwga2VybmluZywgYW5kIGdhc3AgdGFibGVzIGFzIG9wdGlvbmFsICovCiAgICAgTE9BRF8oIHBjbHQgKTsKICAgICBMT0FEXyggZ2FzcCApOwpAQCAtMTM4MCwxMiArMTM5OCwxMyBAQAogICAgICAgRlRfTG9uZyAgZmxhZ3MgPSByb290LT5mYWNlX2ZsYWdzOwogCiAKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogQ29tcHV0ZSBmYWNlIGZsYWdzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICoKKyAgICAgICAqIENvbXB1dGUgZmFjZSBmbGFncy4KKyAgICAgICAqLwogICAgICAgaWYgKCBmYWNlLT5zYml0X3RhYmxlX3R5cGUgPT0gVFRfU0JJVF9UQUJMRV9UWVBFX0NCTEMgfHwKLSAgICAgICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID09IFRUX1NCSVRfVEFCTEVfVFlQRV9TQklYICkKKyAgICAgICAgICAgZmFjZS0+c2JpdF90YWJsZV90eXBlID09IFRUX1NCSVRfVEFCTEVfVFlQRV9TQklYIHx8CisgICAgICAgICAgIGZhY2UtPmNvbHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgIGZsYWdzIHw9IEZUX0ZBQ0VfRkxBR19DT0xPUjsgICAgICAvKiBjb2xvciBnbHlwaHMgKi8KIAogICAgICAgaWYgKCBoYXNfb3V0bGluZSA9PSBUUlVFICkKQEAgLTE0MjksMTAgKzE0NDgsMTAgQEAKIAogICAgICAgcm9vdC0+ZmFjZV9mbGFncyA9IGZsYWdzOwogCi0gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qIENvbXB1dGUgc3R5bGUgZmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqCisgICAgICAgKiBDb21wdXRlIHN0eWxlIGZsYWdzLgorICAgICAgICovCiAKICAgICAgIGZsYWdzID0gMDsKICAgICAgIGlmICggaGFzX291dGxpbmUgPT0gVFJVRSAmJiBmYWNlLT5vczIudmVyc2lvbiAhPSAweEZGRkZVICkKQEAgLTE0NjIsMTQgKzE0ODEsMTQgQEAKIAogICAgICAgcm9vdC0+c3R5bGVfZmxhZ3MgfD0gZmxhZ3M7CiAKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogUG9saXNoIHRoZSBjaGFybWFwcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgIFRyeSB0byBzZXQgdGhlIGNoYXJtYXAgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHRoZSBwbGF0Zm9ybSAmICAgICAqLwotICAgICAgLyogICBlbmNvZGluZyBJRCBvZiBlYWNoIGNoYXJtYXAuICBFbXVsYXRlIFVuaWNvZGUgY2hhcm1hcCBpZiBvbmUgICAgKi8KLSAgICAgIC8qICAgaXMgbWlzc2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqCisgICAgICAgKiBQb2xpc2ggdGhlIGNoYXJtYXBzLgorICAgICAgICoKKyAgICAgICAqICAgVHJ5IHRvIHNldCB0aGUgY2hhcm1hcCBlbmNvZGluZyBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtICYKKyAgICAgICAqICAgZW5jb2RpbmcgSUQgb2YgZWFjaCBjaGFybWFwLiAgRW11bGF0ZSBVbmljb2RlIGNoYXJtYXAgaWYgb25lCisgICAgICAgKiAgIGlzIG1pc3NpbmcuCisgICAgICAgKi8KIAogICAgICAgdHRfZmFjZV9idWlsZF9jbWFwcyggZmFjZSApOyAgLyogaWdub3JlIGVycm9ycyAqLwogCkBAIC0xNTI0LDkgKzE1NDMsOSBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUwogCiAgICAgICAvKgotICAgICAgICogIE5vdyBhbGxvY2F0ZSB0aGUgcm9vdCBhcnJheSBvZiBGVF9CaXRtYXBfU2l6ZSByZWNvcmRzIGFuZAotICAgICAgICogIHBvcHVsYXRlIHRoZW0uICBVbmZvcnR1bmF0ZWx5LCBpdCBpc24ndCBwb3NzaWJsZSB0byBpbmRpY2F0ZSBiaXQKLSAgICAgICAqICBkZXB0aHMgaW4gdGhlIEZUX0JpdG1hcF9TaXplIHJlY29yZC4gIFRoaXMgaXMgYSBkZXNpZ24gZXJyb3IuCisgICAgICAgKiBOb3cgYWxsb2NhdGUgdGhlIHJvb3QgYXJyYXkgb2YgRlRfQml0bWFwX1NpemUgcmVjb3JkcyBhbmQKKyAgICAgICAqIHBvcHVsYXRlIHRoZW0uICBVbmZvcnR1bmF0ZWx5LCBpdCBpc24ndCBwb3NzaWJsZSB0byBpbmRpY2F0ZSBiaXQKKyAgICAgICAqIGRlcHRocyBpbiB0aGUgRlRfQml0bWFwX1NpemUgcmVjb3JkLiAgVGhpcyBpcyBhIGRlc2lnbiBlcnJvci4KICAgICAgICAqLwogICAgICAgewogICAgICAgICBGVF9VSW50ICBjb3VudDsKQEAgLTE2MDYsMTAgKzE2MjUsMTAgQEAKICAgICAgICAgcm9vdC0+ZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfU0NBTEFCTEU7CiAKIAotICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgU2V0IHVwIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgKgorICAgICAgICogU2V0IHVwIG1ldHJpY3MuCisgICAgICAgKi8KICAgICAgIGlmICggRlRfSVNfU0NBTEFCTEUoIHJvb3QgKSApCiAgICAgICB7CiAgICAgICAgIC8qIFhYWCBXaGF0IGFib3V0IGlmIG91dGxpbmUgaGVhZGVyIGlzIG1pc3NpbmcgKi8KQEAgLTE3MjgsNiArMTc0NywxMyBAQAogICAgICAgLyogZGVzdHJveSB0aGUgZW1iZWRkZWQgYml0bWFwcyB0YWJsZSBpZiBpdCBpcyBsb2FkZWQgKi8KICAgICAgIGlmICggc2ZudC0+ZnJlZV9lYmxjICkKICAgICAgICAgc2ZudC0+ZnJlZV9lYmxjKCBmYWNlICk7CisKKyAgICAgIC8qIGRlc3Ryb3kgY29sb3IgdGFibGUgZGF0YSBpZiBpdCBpcyBsb2FkZWQgKi8KKyAgICAgIGlmICggc2ZudC0+ZnJlZV9jcGFsICkKKyAgICAgIHsKKyAgICAgICAgc2ZudC0+ZnJlZV9jcGFsKCBmYWNlICk7CisgICAgICAgIHNmbnQtPmZyZWVfY29sciggZmFjZSApOworICAgICAgfQogICAgIH0KIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCkBAIC0xNzgzLDExICsxODA5LDE4IEBACiAgICAgRlRfRlJFRSggZmFjZS0+c2JpdF9zdHJpa2VfbWFwICk7CiAgICAgZmFjZS0+cm9vdC5udW1fZml4ZWRfc2l6ZXMgPSAwOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICAgIEZUX0ZSRUUoIGZhY2UtPnBvc3RzY3JpcHRfbmFtZSApOworCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICAgIEZUX0ZSRUUoIGZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeCApOwogI2VuZGlmCiAKKyAgICAvKiBmcmVlaW5nIGdseXBoIGNvbG9yIHBhbGV0dGUgZGF0YSAqLworICAgIEZUX0ZSRUUoIGZhY2UtPnBhbGV0dGVfZGF0YS5wYWxldHRlX25hbWVfaWRzICk7CisgICAgRlRfRlJFRSggZmFjZS0+cGFsZXR0ZV9kYXRhLnBhbGV0dGVfZmxhZ3MgKTsKKyAgICBGVF9GUkVFKCBmYWNlLT5wYWxldHRlX2RhdGEucGFsZXR0ZV9lbnRyeV9uYW1lX2lkcyApOworICAgIEZUX0ZSRUUoIGZhY2UtPnBhbGV0dGUgKTsKKwogICAgIGZhY2UtPnNmbnQgPSBOVUxMOwogICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3Nmb2Jqcy5oIGIvc3JjL3NmbnQvc2ZvYmpzLmgKaW5kZXggMWI4ZDFiZS4uZDNiYmFmMSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZvYmpzLmgKKysrIGIvc3JjL3NmbnQvc2ZvYmpzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHNmb2Jqcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmb2Jqcy5oCisgKgorICogICBTRk5UIG9iamVjdCBtYW5hZ2VtZW50IChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBTRk9CSlNfSF8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0YmRmLmMgYi9zcmMvc2ZudC90dGJkZi5jCmluZGV4IDUzNDIwMWYuLmE4NWE2ODcgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0YmRmLmMKKysrIGIvc3JjL3NmbnQvdHRiZGYuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRiZGYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoYm9keSkuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRiZGYuYworICoKKyAqICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIEJERiBwcm9wZXJ0aWVzIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQkRGCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0YmRmCiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIGlmICggYmRmLT5sb2FkZWQgKQogICAgIHsKLSAgICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gRlRfRkFDRShmYWNlKS0+c3RyZWFtOworICAgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBGVF9GQUNFKCBmYWNlICktPnN0cmVhbTsKIAogCiAgICAgICBpZiAoIGJkZi0+dGFibGUgKQpAQCAtMTExLDggKzExMSw4IEBACiAgICAgICAgIEZUX1VJbnQgIG51bV9pdGVtcyA9IEZUX1BFRUtfVVNIT1JUKCBwICsgMiApOwogCiAgICAgICAgIC8qCi0gICAgICAgICAqICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZSBzZXRzIHRoZW1zZWx2ZXMsIHNpbmNlIHRoaXMKLSAgICAgICAgICogIGlzIGRvbmUgbGF0ZXIuCisgICAgICAgICAqIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHZhbHVlIHNldHMgdGhlbXNlbHZlcywgc2luY2UgdGhpcworICAgICAgICAgKiBpcyBkb25lIGxhdGVyLgogICAgICAgICAgKi8KICAgICAgICAgc3RyaWtlICs9IDEwICogbnVtX2l0ZW1zOwogCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBCREZfUHJvcGVydHlSZWMgICphcHJvcCApCiAgIHsKICAgICBUVF9CREYgICAgIGJkZiAgID0gJmZhY2UtPmJkZjsKLSAgICBGVF9TaXplICAgIHNpemUgID0gRlRfRkFDRShmYWNlKS0+c2l6ZTsKKyAgICBGVF9TaXplICAgIHNpemUgID0gRlRfRkFDRSggZmFjZSApLT5zaXplOwogICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgRlRfQnl0ZSogICBwOwogICAgIEZUX1VJbnQgICAgY291bnQ7CmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGJkZi5oIGIvc3JjL3NmbnQvdHRiZGYuaAppbmRleCA4MDlhNjYzLi41Y2VlNTk5IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGJkZi5oCisrKyBiL3NyYy9zZm50L3R0YmRmLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0YmRmLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0YmRmLmgKKyAqCisgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRCREZfSF8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcC5jIGIvc3JjL3NmbnQvdHRjbWFwLmMKaW5kZXggOGNjNzBmNy4uYTNhOGM1MiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwLmMKKysrIGIvc3JjL3NmbnQvdHRjbWFwLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0Y21hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0Y21hcC5jCisgKgorICogICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjcsMTUgKzI3LDE0IEBACiAjaW5jbHVkZSAidHRsb2FkLmgiCiAjaW5jbHVkZSAidHRjbWFwLmgiCiAjaW5jbHVkZSAidHRwb3N0LmgiCi0jaW5jbHVkZSAic2ZudHBpYy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Y21hcAogCkBAIC03NywxOSArNzYsMTkgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVEFCTEUgT1ZFUlZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBOQU1FICAgICAgICBPRkZTRVQgICAgICAgICBUWVBFICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGZvcm1hdCAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgbXVzdCBiZSAwICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsZW5ndGggICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcyAgICAgICovCi0gIC8qICAgbGFuZ3VhZ2UgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICAgICAqLwotICAvKiAgIGdseXBoX2lkcyAgIDYgICAgICAgICAgICAgIEJZVEVbMjU2XSAgICAgYXJyYXkgb2YgZ2x5cGggaW5kaWNlcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAyNjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVEFCTEUgT1ZFUlZJRVcKKyAgICogLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogICBOQU1FICAgICAgICBPRkZTRVQgICAgICAgICBUWVBFICAgICAgICAgIERFU0NSSVBUSU9OCisgICAqCisgICAqICAgZm9ybWF0ICAgICAgMCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICBtdXN0IGJlIDAKKyAgICogICBsZW5ndGggICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcworICAgKiAgIGxhbmd1YWdlICAgIDQgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUKKyAgICogICBnbHlwaF9pZHMgICA2ICAgICAgICAgICAgICBCWVRFWzI1Nl0gICAgIGFycmF5IG9mIGdseXBoIGluZGljZXMKKyAgICogICAgICAgICAgICAgICAyNjIKKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMAogCkBAIC0yMjIsMTAgKzIyMSwxMCBAQAogICAvKioqKiogVGhlIGZvbGxvd2luZyBjaGFybWFwIGxvb2t1cCBhbmQgaXRlcmF0aW9uIGZ1bmN0aW9ucyBhbGwgICAgICAqKioqKi8KICAgLyoqKioqIGFzc3VtZSB0aGF0IHRoZSB2YWx1ZSBgY2hhcmNvZGUnIGZ1bGZpbGxzIHRoZSBmb2xsb3dpbmcuICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAtIEZvciBvbmUgYnl0ZSBjaGFyYWN0ZXJzLCBgY2hhcmNvZGUnIGlzIHNpbXBseSB0aGUgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgLSBGb3Igb25lLWJ5dGUgY2hhcmFjdGVycywgYGNoYXJjb2RlJyBpcyBzaW1wbHkgdGhlICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqICAgLSBGb3IgdHdvIGJ5dGUgY2hhcmFjdGVycywgYGNoYXJjb2RlJyBpcyB0aGUgMi1ieXRlICAgICAgICAgKioqKiovCisgIC8qKioqKiAgIC0gRm9yIHR3by1ieXRlIGNoYXJhY3RlcnMsIGBjaGFyY29kZScgaXMgdGhlIDItYnl0ZSAgICAgICAgICoqKioqLwogICAvKioqKiogICAgIGNoYXJhY3RlciBjb2RlIGluIGJpZyBlbmRpYW4gZm9ybWF0LiAgTW9yZSBwcmVjaXNlbHk6ICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAoY2hhcmNvZGUgPj4gOCkgICAgaXMgdGhlIGZpcnN0IGJ5dGUgdmFsdWUgICAgICAgICAgICAgICoqKioqLwpAQCAtMjM4LDU3ICsyMzcsNTcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVEFCTEUgT1ZFUlZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBOQU1FICAgICAgICBPRkZTRVQgICAgICAgICBUWVBFICAgICAgICAgICAgREVTQ1JJUFRJT04gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGZvcm1hdCAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICBtdXN0IGJlIDIgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsZW5ndGggICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgdGFibGUgbGVuZ3RoIGluIGJ5dGVzICAgICovCi0gIC8qICAgbGFuZ3VhZ2UgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgICAqLwotICAvKiAgIGtleXMgICAgICAgIDYgICAgICAgICAgICAgIFVTSE9SVFsyNTZdICAgICBzdWItaGVhZGVyIGtleXMgICAgICAgICAgKi8KLSAgLyogICBzdWJzICAgICAgICA1MTggICAgICAgICAgICBTVUJIRUFEW05TVUJTXSAgc3ViLWhlYWRlcnMgYXJyYXkgICAgICAgICovCi0gIC8qICAgZ2x5cGhfaWRzICAgNTE4K05TVUIqOCAgICAgVVNIT1JUW10gICAgICAgIGdseXBoIElEIGFycmF5ICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIGBrZXlzJyB0YWJsZSBpcyB1c2VkIHRvIG1hcCBjaGFyY29kZSBoaWdoLWJ5dGVzIHRvIHN1Yi1oZWFkZXJzLiAgICovCi0gIC8qIFRoZSB2YWx1ZSBvZiBgTlNVQlMnIGlzIHRoZSBudW1iZXIgb2Ygc3ViLWhlYWRlcnMgZGVmaW5lZCBpbiB0aGUgICAgICAqLwotICAvKiB0YWJsZSBhbmQgaXMgY29tcHV0ZWQgYnkgZmluZGluZyB0aGUgbWF4aW11bSBvZiB0aGUgYGtleXMnIHRhYmxlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGUgdGhhdCBmb3IgYW55IG4sIGBrZXlzW25dJyBpcyBhIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgYHN1YnMnICAgICAqLwotICAvKiB0YWJsZSwgaS5lLiwgaXQgaXMgdGhlIGNvcnJlc3BvbmRpbmcgc3ViLWhlYWRlciBpbmRleCBtdWx0aXBsaWVkICAgICAgKi8KLSAgLyogYnkgOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFYWNoIHN1Yi1oZWFkZXIgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgVFlQRSAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBmaXJzdCAgICAgICAwICAgICAgICAgICBVU0hPUlQgICAgICAgICAgZmlyc3QgdmFsaWQgbG93LWJ5dGUgICAgICAgICovCi0gIC8qICAgY291bnQgICAgICAgMiAgICAgICAgICAgVVNIT1JUICAgICAgICAgIG51bWJlciBvZiB2YWxpZCBsb3ctYnl0ZXMgICAqLwotICAvKiAgIGRlbHRhICAgICAgIDQgICAgICAgICAgIFNIT1JUICAgICAgICAgICBzZWUgYmVsb3cgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBvZmZzZXQgICAgICA2ICAgICAgICAgICBVU0hPUlQgICAgICAgICAgc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBIHN1Yi1oZWFkZXIgZGVmaW5lcywgZm9yIGVhY2ggaGlnaC1ieXRlLCB0aGUgcmFuZ2Ugb2YgdmFsaWQgICAgICAgICAgKi8KLSAgLyogbG93LWJ5dGVzIHdpdGhpbiB0aGUgY2hhcm1hcC4gIE5vdGUgdGhhdCB0aGUgcmFuZ2UgZGVmaW5lZCBieSBgZmlyc3QnICovCi0gIC8qIGFuZCBgY291bnQnIG11c3QgYmUgY29tcGxldGVseSBpbmNsdWRlZCBpbiB0aGUgaW50ZXJ2YWwgWzAuLjI1NV0gICAgICAqLwotICAvKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElmIGEgY2hhcmFjdGVyIGNvZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIGdpdmVuIHN1Yi1oZWFkZXIsIHRoZW4gICAgICAqLwotICAvKiBtYXBwaW5nIGl0IHRvIGEgZ2x5cGggaW5kZXggaXMgZG9uZSBhcyBmb2xsb3dzLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICogVGhlIHZhbHVlIG9mIGBvZmZzZXQnIGlzIHJlYWQuICBUaGlzIGlzIGEgX2J5dGVfIGRpc3RhbmNlIGZyb20gdGhlICAqLwotICAvKiAgIGxvY2F0aW9uIG9mIHRoZSBgb2Zmc2V0JyBmaWVsZCBpdHNlbGYgaW50byBhIHNsaWNlIG9mIHRoZSAgICAgICAgICAgKi8KLSAgLyogICBgZ2x5cGhfaWRzJyB0YWJsZS4gIExldCdzIGNhbGwgaXQgYHNsaWNlJyAoaXQgaXMgYSBVU0hPUlRbXSwgdG9vKS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAqIFRoZSB2YWx1ZSBgc2xpY2VbY2hhci5sbyAtIGZpcnN0XScgaXMgcmVhZC4gIElmIGl0IGlzIDAsIHRoZXJlIGlzICAgKi8KLSAgLyogICBubyBnbHlwaCBmb3IgdGhlIGNoYXJjb2RlLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YgYGRlbHRhJyBpcyAgICAgICovCi0gIC8qICAgYWRkZWQgdG8gaXQgKG1vZHVsbyA2NTUzNikgdG8gZm9ybSBhIG5ldyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSXQgaXMgdXAgdG8gdGhlIHZhbGlkYXRpb24gcm91dGluZSB0byBjaGVjayB0aGF0IGFsbCBvZmZzZXRzIGZhbGwgICAgICovCi0gIC8qIHdpdGhpbiB0aGUgZ2x5cGggSURzIHRhYmxlIChhbmQgbm90IHdpdGhpbiB0aGUgYHN1YnMnIHRhYmxlIGl0c2VsZiBvciAqLwotICAvKiBvdXRzaWRlIG9mIHRoZSBDTWFwKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUQUJMRSBPVkVSVklFVworICAgKiAtLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgICAgIFRZUEUgICAgICAgICAgICBERVNDUklQVElPTgorICAgKgorICAgKiAgIGZvcm1hdCAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICBtdXN0IGJlIDIKKyAgICogICBsZW5ndGggICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgdGFibGUgbGVuZ3RoIGluIGJ5dGVzCisgICAqICAgbGFuZ3VhZ2UgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlCisgICAqICAga2V5cyAgICAgICAgNiAgICAgICAgICAgICAgVVNIT1JUWzI1Nl0gICAgIHN1Yi1oZWFkZXIga2V5cworICAgKiAgIHN1YnMgICAgICAgIDUxOCAgICAgICAgICAgIFNVQkhFQURbTlNVQlNdICBzdWItaGVhZGVycyBhcnJheQorICAgKiAgIGdseXBoX2lkcyAgIDUxOCtOU1VCKjggICAgIFVTSE9SVFtdICAgICAgICBnbHlwaCBJRCBhcnJheQorICAgKgorICAgKiBUaGUgYGtleXMnIHRhYmxlIGlzIHVzZWQgdG8gbWFwIGNoYXJjb2RlIGhpZ2ggYnl0ZXMgdG8gc3ViLWhlYWRlcnMuCisgICAqIFRoZSB2YWx1ZSBvZiBgTlNVQlMnIGlzIHRoZSBudW1iZXIgb2Ygc3ViLWhlYWRlcnMgZGVmaW5lZCBpbiB0aGUKKyAgICogdGFibGUgYW5kIGlzIGNvbXB1dGVkIGJ5IGZpbmRpbmcgdGhlIG1heGltdW0gb2YgdGhlIGBrZXlzJyB0YWJsZS4KKyAgICoKKyAgICogTm90ZSB0aGF0IGZvciBhbnkgYG4nLCBga2V5c1tuXScgaXMgYSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIGBzdWJzJworICAgKiB0YWJsZSwgaS5lLiwgaXQgaXMgdGhlIGNvcnJlc3BvbmRpbmcgc3ViLWhlYWRlciBpbmRleCBtdWx0aXBsaWVkCisgICAqIGJ5IDguCisgICAqCisgICAqIEVhY2ggc3ViLWhlYWRlciBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQuCisgICAqCisgICAqICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgVFlQRSAgICAgICAgICAgIERFU0NSSVBUSU9OCisgICAqCisgICAqICAgZmlyc3QgICAgICAgMCAgICAgICAgICAgVVNIT1JUICAgICAgICAgIGZpcnN0IHZhbGlkIGxvdy1ieXRlCisgICAqICAgY291bnQgICAgICAgMiAgICAgICAgICAgVVNIT1JUICAgICAgICAgIG51bWJlciBvZiB2YWxpZCBsb3ctYnl0ZXMKKyAgICogICBkZWx0YSAgICAgICA0ICAgICAgICAgICBTSE9SVCAgICAgICAgICAgc2VlIGJlbG93CisgICAqICAgb2Zmc2V0ICAgICAgNiAgICAgICAgICAgVVNIT1JUICAgICAgICAgIHNlZSBiZWxvdworICAgKgorICAgKiBBIHN1Yi1oZWFkZXIgZGVmaW5lcywgZm9yIGVhY2ggaGlnaCBieXRlLCB0aGUgcmFuZ2Ugb2YgdmFsaWQKKyAgICogbG93IGJ5dGVzIHdpdGhpbiB0aGUgY2hhcm1hcC4gIE5vdGUgdGhhdCB0aGUgcmFuZ2UgZGVmaW5lZCBieSBgZmlyc3QnCisgICAqIGFuZCBgY291bnQnIG11c3QgYmUgY29tcGxldGVseSBpbmNsdWRlZCBpbiB0aGUgaW50ZXJ2YWwgWzAuLjI1NV0KKyAgICogYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgKgorICAgKiBJZiBhIGNoYXJhY3RlciBjb2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBnaXZlbiBzdWItaGVhZGVyLCB0aGVuCisgICAqIG1hcHBpbmcgaXQgdG8gYSBnbHlwaCBpbmRleCBpcyBkb25lIGFzIGZvbGxvd3MuCisgICAqCisgICAqIC0gVGhlIHZhbHVlIG9mIGBvZmZzZXQnIGlzIHJlYWQuICBUaGlzIGlzIGEgX2J5dGVfIGRpc3RhbmNlIGZyb20gdGhlCisgICAqICAgbG9jYXRpb24gb2YgdGhlIGBvZmZzZXQnIGZpZWxkIGl0c2VsZiBpbnRvIGEgc2xpY2Ugb2YgdGhlCisgICAqICAgYGdseXBoX2lkcycgdGFibGUuICBMZXQncyBjYWxsIGl0IGBzbGljZScgKGl0IGlzIGEgVVNIT1JUW10sIHRvbykuCisgICAqCisgICAqIC0gVGhlIHZhbHVlIGBzbGljZVtjaGFyLmxvIC0gZmlyc3RdJyBpcyByZWFkLiAgSWYgaXQgaXMgMCwgdGhlcmUgaXMKKyAgICogICBubyBnbHlwaCBmb3IgdGhlIGNoYXJjb2RlLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgb2YgYGRlbHRhJyBpcworICAgKiAgIGFkZGVkIHRvIGl0IChtb2R1bG8gNjU1MzYpIHRvIGZvcm0gYSBuZXcgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEl0IGlzIHVwIHRvIHRoZSB2YWxpZGF0aW9uIHJvdXRpbmUgdG8gY2hlY2sgdGhhdCBhbGwgb2Zmc2V0cyBmYWxsCisgICAqIHdpdGhpbiB0aGUgZ2x5cGggSURzIHRhYmxlIChhbmQgbm90IHdpdGhpbiB0aGUgYHN1YnMnIHRhYmxlIGl0c2VsZiBvcgorICAgKiBvdXRzaWRlIG9mIHRoZSBDTWFwKS4KKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMgogCkBAIC0zNjAsNyArMzU5LDcgQEAKICAgICAgIC8qIGNoZWNrIHJhbmdlIHdpdGhpbiAwLi4yNTUgKi8KICAgICAgIGlmICggdmFsaWQtPmxldmVsID49IEZUX1ZBTElEQVRFX1BBUkFOT0lEICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBmaXJzdF9jb2RlID49IDI1NiB8fCBmaXJzdF9jb2RlICsgY29kZV9jb3VudCA+IDI1NiApCisgICAgICAgIGlmICggZmlyc3RfY29kZSA+PSAyNTYgfHwgY29kZV9jb3VudCA+IDI1NiAtIGZpcnN0X2NvZGUgKQogICAgICAgICAgIEZUX0lOVkFMSURfREFUQTsKICAgICAgIH0KIApAQCAtNDEyLDcgKzQxMSw3IEBACiAgICAgewogICAgICAgRlRfVUludCAgIGNoYXJfbG8gPSAoRlRfVUludCkoIGNoYXJfY29kZSAmIDB4RkYgKTsKICAgICAgIEZUX1VJbnQgICBjaGFyX2hpID0gKEZUX1VJbnQpKCBjaGFyX2NvZGUgPj4gOCApOwotICAgICAgRlRfQnl0ZSogIHAgICAgICAgPSB0YWJsZSArIDY7ICAgIC8qIGtleXMgdGFibGUgKi8KKyAgICAgIEZUX0J5dGUqICBwICAgICAgID0gdGFibGUgKyA2OyAgICAvKiBrZXlzIHRhYmxlICAgICAgICovCiAgICAgICBGVF9CeXRlKiAgc3VicyAgICA9IHRhYmxlICsgNTE4OyAgLyogc3ViaGVhZGVycyB0YWJsZSAqLwogICAgICAgRlRfQnl0ZSogIHN1YjsKIApAQCAtNDI1LDggKzQyNCw4IEBACiAgICAgICAgIHN1YiA9IHN1YnM7ICAvKiBqdW1wIHRvIGZpcnN0IHN1Yi1oZWFkZXIgKi8KIAogICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBzdWItaGVhZGVyIGZvciB0aGlzIGJ5dGUgaXMgMCwgd2hpY2ggKi8KLSAgICAgICAgLyogaW5kaWNhdGVzIHRoYXQgaXQgaXMgcmVhbGx5IGEgdmFsaWQgb25lLWJ5dGUgdmFsdWUgICovCi0gICAgICAgIC8qIE90aGVyd2lzZSwgcmV0dXJuIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZWFsbHkgYSB2YWxpZCBvbmUtYnl0ZSB2YWx1ZTsgKi8KKyAgICAgICAgLyogb3RoZXJ3aXNlLCByZXR1cm4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICBwICs9IGNoYXJfbG8gKiAyOwogICAgICAgICBpZiAoIFRUX1BFRUtfVVNIT1JUKCBwICkgIT0gMCApCkBAIC00NDUsNiArNDQ0LDcgQEAKICAgICAgICAgaWYgKCBzdWIgPT0gc3VicyApCiAgICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQorCiAgICAgICByZXN1bHQgPSBzdWI7CiAgICAgfQogCkBAIC01MTcsNiArNTE3LDEzIEBACiAgICAgICAgIEZUX1VJbnQgICBwb3MsIGlkeDsKIAogCisgICAgICAgIGlmICggY2hhcl9sbyA+PSBzdGFydCArIGNvdW50ICYmIGNoYXJjb2RlIDw9IDB4RkYgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBoYXBwZW5zIG9ubHkgZm9yIGEgbWFsZm9ybWVkIGNtYXAgKi8KKyAgICAgICAgICBjaGFyY29kZSA9IDB4MTAwOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKCBvZmZzZXQgPT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICBpZiAoIGNoYXJjb2RlID09IDB4MTAwICkKQEAgLTU0OSwxOSArNTU2LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLyogaWYgdW5zdWNjZXNzZnVsLCBhdm9pZCBgY2hhcmNvZGUnIGxlYXZpbmcgKi8KKyAgICAgICAgLyogdGhlIGN1cnJlbnQgMjU2LWNoYXJhY3RlciBibG9jayAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBjb3VudCApCisgICAgICAgICAgY2hhcmNvZGUtLTsKICAgICAgIH0KIAotICAgICAgLyogSWYgYGNoYXJjb2RlJyBpcyA8PSAweEZGLCByZXRyeSB3aXRoIGBjaGFyY29kZSArIDEnLiAgSWYgICAgICAgICovCi0gICAgICAvKiBgY2hhcmNvZGUnIGlzIDB4MTAwIGFmdGVyIHRoZSBsb29wLCBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgICAgKi8KLSAgICAgIC8qIGp1c3QgcmVhY2hlZCB0aGUgZmlyc3Qgc3ViLWhlYWRlciBmb3IgdHdvLWJ5dGUgY2hhcmFjdGVyIGNvZGVzLiAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBqdW1wIHRvIHRoZSBuZXh0IHN1Yi1oZWFkZXIgYW5kIGFkanVzdCAgKi8KLSAgICAgIC8qIGBjaGFyY29kZScgYWNjb3JkaW5nbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogSWYgYGNoYXJjb2RlJyBpcyA8PSAweEZGLCByZXRyeSB3aXRoIGBjaGFyY29kZSArIDEnLiAgICAgICovCisgICAgICAvKiBPdGhlcndpc2UganVtcCB0byB0aGUgbmV4dCAyNTYtY2hhcmFjdGVyIGJsb2NrIGFuZCByZXRyeS4gKi8KICAgICBOZXh0X1N1YkhlYWRlcjoKICAgICAgIGlmICggY2hhcmNvZGUgPD0gMHhGRiApCiAgICAgICAgIGNoYXJjb2RlKys7Ci0gICAgICBlbHNlIGlmICggY2hhcmNvZGUgPT0gMHgxMDAgKQotICAgICAgICA7CiAgICAgICBlbHNlCiAgICAgICAgIGNoYXJjb2RlID0gRlRfUEFEX0ZMT09SKCBjaGFyY29kZSwgMHgxMDAgKSArIDB4MTAwOwogICAgIH0KQEAgLTYxOSw2OCArNjI1LDY4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTkFNRSAgICAgICAgICBPRkZTRVQgICAgICAgICBUWVBFICAgICAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBmb3JtYXQgICAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIG11c3QgYmUgNCAgICAgICAgICAgICovCi0gIC8qICAgbGVuZ3RoICAgICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgICB0YWJsZSBsZW5ndGggICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYnl0ZXMgICAgICAgICAgICAgKi8KLSAgLyogICBsYW5ndWFnZSAgICAgIDQgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHNlZ0NvdW50WDIgICAgNiAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgMipOVU1fU0VHUyAgICAgICAgICAgKi8KLSAgLyogICBzZWFyY2hSYW5nZSAgIDggICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIDIqKDEgPDwgTE9HX1NFR1MpICAgICovCi0gIC8qICAgZW50cnlTZWxlY3RvciAxMCAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgICBMT0dfU0VHUyAgICAgICAgICAgICAqLwotICAvKiAgIHJhbmdlU2hpZnQgICAgMTIgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgc2VnQ291bnRYMiAtICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGVuZENvdW50ICAgICAgMTQgICAgICAgICAgICAgVVNIT1JUW05VTV9TRUdTXSAgZW5kIGNoYXJjb2RlIGZvciAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggc2VnbWVudDsgbGFzdCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyAweEZGRkYgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBwYWQgICAgICAgICAgIDE0K05VTV9TRUdTKjIgIFVTSE9SVCAgICAgICAgICAgIHBhZGRpbmcgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHN0YXJ0Q291bnQgICAgMTYrTlVNX1NFR1MqMiAgVVNIT1JUW05VTV9TRUdTXSAgZmlyc3QgY2hhcmNvZGUgZm9yICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggc2VnbWVudCAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGlkRGVsdGEgICAgICAgMTYrTlVNX1NFR1MqNCAgU0hPUlRbTlVNX1NFR1NdICAgZGVsdGEgZm9yIGVhY2ggICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgICAgICAgICAgICAgICovCi0gIC8qICAgaWRPZmZzZXQgICAgICAxNitOVU1fU0VHUyo2ICBTSE9SVFtOVU1fU0VHU10gICByYW5nZSBvZmZzZXQgZm9yICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBzZWdtZW50OyBjYW4gYmUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGdseXBoSWRzICAgICAgMTYrTlVNX1NFR1MqOCAgVVNIT1JUW10gICAgICAgICAgYXJyYXkgb2YgZ2x5cGggSUQgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcyAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBDaGFyYWN0ZXIgY29kZXMgYXJlIG1vZGVsbGVkIGJ5IGEgc2VyaWVzIG9mIG9yZGVyZWQgKGluY3JlYXNpbmcpICAgICAgKi8KLSAgLyogaW50ZXJ2YWxzIGNhbGxlZCBzZWdtZW50cy4gIEVhY2ggc2VnbWVudCBoYXMgc3RhcnQgYW5kIGVuZCBjb2RlcywgICAgICovCi0gIC8qIHByb3ZpZGVkIGJ5IHRoZSBgc3RhcnRDb3VudCcgYW5kIGBlbmRDb3VudCcgYXJyYXlzLiAgU2VnbWVudHMgbXVzdCAgICAqLwotICAvKiBub3Qgb3ZlcmxhcCwgYW5kIHRoZSBsYXN0IHNlZ21lbnQgc2hvdWxkIGFsd2F5cyBjb250YWluIHRoZSB2YWx1ZSAgICAgKi8KLSAgLyogMHhGRkZGIGZvciBgZW5kQ291bnQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgZmllbGRzIGBzZWFyY2hSYW5nZScsIGBlbnRyeVNlbGVjdG9yJyBhbmQgYHJhbmdlU2hpZnQnIGFyZSBiZXR0ZXIgKi8KLSAgLyogaWdub3JlZCAodGhleSBhcmUgdHJhY2VzIG9mIG92ZXItZW5naW5lZXJpbmcgaW4gdGhlIFRydWVUeXBlICAgICAgICAgICovCi0gIC8qIHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRWFjaCBzZWdtZW50IGFsc28gaGFzIGEgc2lnbmVkIGBkZWx0YScsIGFzIHdlbGwgYXMgYW4gb3B0aW9uYWwgb2Zmc2V0ICovCi0gIC8qIHdpdGhpbiB0aGUgYGdseXBoSWRzJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgYSBzZWdtZW50J3MgaWRPZmZzZXQgaXMgMCwgdGhlIGdseXBoIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gYW55ICAgICovCi0gIC8qIGNoYXJjb2RlIHdpdGhpbiB0aGUgc2VnbWVudCBpcyBvYnRhaW5lZCBieSBhZGRpbmcgdGhlIHZhbHVlIG9mICAgICAgICAqLwotICAvKiBgaWREZWx0YScgZGlyZWN0bHkgdG8gdGhlIGNoYXJjb2RlLCBtb2R1bG8gNjU1MzYuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE90aGVyd2lzZSwgYSBnbHlwaCBpbmRleCBpcyB0YWtlbiBmcm9tIHRoZSBnbHlwaCBJRHMgc3ViLWFycmF5IGZvciAgICAqLwotICAvKiB0aGUgc2VnbWVudCwgYW5kIHRoZSB2YWx1ZSBvZiBgaWREZWx0YScgaXMgYWRkZWQgdG8gaXQuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGaW5hbGx5LCBub3RlIHRoYXQgYSBsb3Qgb2YgZm9udHMgY29udGFpbiBhbiBpbnZhbGlkIGxhc3Qgc2VnbWVudCwgICAgKi8KLSAgLyogd2hlcmUgYHN0YXJ0JyBhbmQgYGVuZCcgYXJlIGNvcnJlY3RseSBzZXQgdG8gMHhGRkZGIGJ1dCBib3RoIGBkZWx0YScgICovCi0gIC8qIGFuZCBgb2Zmc2V0JyBhcmUgaW5jb3JyZWN0IChlLmcuLCBgb3BlbnNfX18udHRmJyB3aGljaCBjb21lcyB3aXRoICAgICAqLwotICAvKiBPcGVuT2ZmaWNlLm9yZykuICBXZSBuZWVkIHNwZWNpYWwgY29kZSB0byBkZWFsIHdpdGggdGhlbSBjb3JyZWN0bHkuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUQUJMRSBPVkVSVklFVworICAgKiAtLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiAgIE5BTUUgICAgICAgICAgT0ZGU0VUICAgICAgICAgVFlQRSAgICAgICAgICAgICAgREVTQ1JJUFRJT04KKyAgICoKKyAgICogICBmb3JtYXQgICAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIG11c3QgYmUgNAorICAgKiAgIGxlbmd0aCAgICAgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgdGFibGUgbGVuZ3RoCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBieXRlcworICAgKiAgIGxhbmd1YWdlICAgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgTWFjIGxhbmd1YWdlIGNvZGUKKyAgICoKKyAgICogICBzZWdDb3VudFgyICAgIDYgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIDIqTlVNX1NFR1MKKyAgICogICBzZWFyY2hSYW5nZSAgIDggICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgIDIqKDEgPDwgTE9HX1NFR1MpCisgICAqICAgZW50cnlTZWxlY3RvciAxMCAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgICBMT0dfU0VHUworICAgKiAgIHJhbmdlU2hpZnQgICAgMTIgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICAgc2VnQ291bnRYMiAtCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlCisgICAqCisgICAqICAgZW5kQ291bnQgICAgICAxNCAgICAgICAgICAgICBVU0hPUlRbTlVNX1NFR1NdICBlbmQgY2hhcmNvZGUgZm9yCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHNlZ21lbnQ7IGxhc3QKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIDB4RkZGRgorICAgKgorICAgKiAgIHBhZCAgICAgICAgICAgMTQrTlVNX1NFR1MqMiAgVVNIT1JUICAgICAgICAgICAgcGFkZGluZworICAgKgorICAgKiAgIHN0YXJ0Q291bnQgICAgMTYrTlVNX1NFR1MqMiAgVVNIT1JUW05VTV9TRUdTXSAgZmlyc3QgY2hhcmNvZGUgZm9yCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHNlZ21lbnQKKyAgICoKKyAgICogICBpZERlbHRhICAgICAgIDE2K05VTV9TRUdTKjQgIFNIT1JUW05VTV9TRUdTXSAgIGRlbHRhIGZvciBlYWNoCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50CisgICAqICAgaWRPZmZzZXQgICAgICAxNitOVU1fU0VHUyo2ICBTSE9SVFtOVU1fU0VHU10gICByYW5nZSBvZmZzZXQgZm9yCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIHNlZ21lbnQ7IGNhbiBiZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybworICAgKgorICAgKiAgIGdseXBoSWRzICAgICAgMTYrTlVNX1NFR1MqOCAgVVNIT1JUW10gICAgICAgICAgYXJyYXkgb2YgZ2x5cGggSUQKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcworICAgKgorICAgKiBDaGFyYWN0ZXIgY29kZXMgYXJlIG1vZGVsbGVkIGJ5IGEgc2VyaWVzIG9mIG9yZGVyZWQgKGluY3JlYXNpbmcpCisgICAqIGludGVydmFscyBjYWxsZWQgc2VnbWVudHMuICBFYWNoIHNlZ21lbnQgaGFzIHN0YXJ0IGFuZCBlbmQgY29kZXMsCisgICAqIHByb3ZpZGVkIGJ5IHRoZSBgc3RhcnRDb3VudCcgYW5kIGBlbmRDb3VudCcgYXJyYXlzLiAgU2VnbWVudHMgbXVzdAorICAgKiBub3Qgb3ZlcmxhcCwgYW5kIHRoZSBsYXN0IHNlZ21lbnQgc2hvdWxkIGFsd2F5cyBjb250YWluIHRoZSB2YWx1ZQorICAgKiAweEZGRkYgZm9yIGBlbmRDb3VudCcuCisgICAqCisgICAqIFRoZSBmaWVsZHMgYHNlYXJjaFJhbmdlJywgYGVudHJ5U2VsZWN0b3InIGFuZCBgcmFuZ2VTaGlmdCcgYXJlIGJldHRlcgorICAgKiBpZ25vcmVkICh0aGV5IGFyZSB0cmFjZXMgb2Ygb3Zlci1lbmdpbmVlcmluZyBpbiB0aGUgVHJ1ZVR5cGUKKyAgICogc3BlY2lmaWNhdGlvbikuCisgICAqCisgICAqIEVhY2ggc2VnbWVudCBhbHNvIGhhcyBhIHNpZ25lZCBgZGVsdGEnLCBhcyB3ZWxsIGFzIGFuIG9wdGlvbmFsIG9mZnNldAorICAgKiB3aXRoaW4gdGhlIGBnbHlwaElkcycgdGFibGUuCisgICAqCisgICAqIElmIGEgc2VnbWVudCdzIGlkT2Zmc2V0IGlzIDAsIHRoZSBnbHlwaCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGFueQorICAgKiBjaGFyY29kZSB3aXRoaW4gdGhlIHNlZ21lbnQgaXMgb2J0YWluZWQgYnkgYWRkaW5nIHRoZSB2YWx1ZSBvZgorICAgKiBgaWREZWx0YScgZGlyZWN0bHkgdG8gdGhlIGNoYXJjb2RlLCBtb2R1bG8gNjU1MzYuCisgICAqCisgICAqIE90aGVyd2lzZSwgYSBnbHlwaCBpbmRleCBpcyB0YWtlbiBmcm9tIHRoZSBnbHlwaCBJRHMgc3ViLWFycmF5IGZvcgorICAgKiB0aGUgc2VnbWVudCwgYW5kIHRoZSB2YWx1ZSBvZiBgaWREZWx0YScgaXMgYWRkZWQgdG8gaXQuCisgICAqCisgICAqCisgICAqIEZpbmFsbHksIG5vdGUgdGhhdCBhIGxvdCBvZiBmb250cyBjb250YWluIGFuIGludmFsaWQgbGFzdCBzZWdtZW50LAorICAgKiB3aGVyZSBgc3RhcnQnIGFuZCBgZW5kJyBhcmUgY29ycmVjdGx5IHNldCB0byAweEZGRkYgYnV0IGJvdGggYGRlbHRhJworICAgKiBhbmQgYG9mZnNldCcgYXJlIGluY29ycmVjdCAoZS5nLiwgYG9wZW5zX19fLnR0Zicgd2hpY2ggY29tZXMgd2l0aAorICAgKiBPcGVuT2ZmaWNlLm9yZykuICBXZSBuZWVkIHNwZWNpYWwgY29kZSB0byBkZWFsIHdpdGggdGhlbSBjb3JyZWN0bHkuCisgICAqLwogCiAjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzQKIApAQCAtMTU2NiwyMyArMTU3MiwyMyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgICAgICBUWVBFICAgICAgICAgICAgIERFU0NSSVBUSU9OICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAgIDAgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgbXVzdCBiZSA2ICAgICAgICAgICAgICAqLwotICAvKiAgIGxlbmd0aCAgICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcyAgKi8KLSAgLyogICBsYW5ndWFnZSAgICAgNCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGZpcnN0ICAgICAgICA2ICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIGZpcnN0IHNlZ21lbnQgY29kZSAgICAgKi8KLSAgLyogICBjb3VudCAgICAgICAgOCAgICAgICAgICAgICAgVVNIT1JUICAgICAgICAgICBzZWdtZW50IHNpemUgaW4gY2hhcnMgICovCi0gIC8qICAgZ2x5cGhJZHMgICAgIDEwICAgICAgICAgICAgIFVTSE9SVFtjb3VudF0gICAgZ2x5cGggSURzICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSB2ZXJ5IHNpbXBsaWZpZWQgc2VnbWVudCBtYXBwaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVEFCTEUgT1ZFUlZJRVcKKyAgICogLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogICBOQU1FICAgICAgICBPRkZTRVQgICAgICAgICAgVFlQRSAgICAgICAgICAgICBERVNDUklQVElPTgorICAgKgorICAgKiAgIGZvcm1hdCAgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIG11c3QgYmUgNgorICAgKiAgIGxlbmd0aCAgICAgICAyICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcworICAgKiAgIGxhbmd1YWdlICAgICA0ICAgICAgICAgICAgICBVU0hPUlQgICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlCisgICAqCisgICAqICAgZmlyc3QgICAgICAgIDYgICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgZmlyc3Qgc2VnbWVudCBjb2RlCisgICAqICAgY291bnQgICAgICAgIDggICAgICAgICAgICAgIFVTSE9SVCAgICAgICAgICAgc2VnbWVudCBzaXplIGluIGNoYXJzCisgICAqICAgZ2x5cGhJZHMgICAgIDEwICAgICAgICAgICAgIFVTSE9SVFtjb3VudF0gICAgZ2x5cGggSURzCisgICAqCisgICAqIEEgdmVyeSBzaW1wbGlmaWVkIHNlZ21lbnQgbWFwcGluZy4KKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNgogCkBAIC0xNzYxLDI2ICsxNzY3LDI2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRBQkxFIE9WRVJWSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgTkFNRSAgICAgICAgT0ZGU0VUICAgICAgICAgVFlQRSAgICAgICAgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBmb3JtYXQgICAgICAwICAgICAgICAgICAgICBVU0hPUlQgICAgICBtdXN0IGJlIDggICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgcmVzZXJ2ZWQgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGxlbmd0aCAgICAgIDQgICAgICAgICAgICAgIFVMT05HICAgICAgIGxlbmd0aCBpbiBieXRlcyAgICAgICAgICAgICAgKi8KLSAgLyogICBsYW5ndWFnZSAgICA4ICAgICAgICAgICAgICBVTE9ORyAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZSAgICAgICAgICAgICovCi0gIC8qICAgaXMzMiAgICAgICAgMTIgICAgICAgICAgICAgQllURVs4MTkyXSAgMzItYml0bmVzcyBiaXRtYXAgICAgICAgICAgICAqLwotICAvKiAgIGNvdW50ICAgICAgIDgyMDQgICAgICAgICAgIFVMT05HICAgICAgIG51bWJlciBvZiBncm91cHMgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IGBjb3VudCcgZ3JvdXBzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBzdGFydCAgICAgICAwICAgICAgICAgICAgICBVTE9ORyAgICAgICBmaXJzdCBjaGFyY29kZSAgICAgICAgICAgICAgICovCi0gIC8qICAgZW5kICAgICAgICAgNCAgICAgICAgICAgICAgVUxPTkcgICAgICAgbGFzdCBjaGFyY29kZSAgICAgICAgICAgICAgICAqLwotICAvKiAgIHN0YXJ0SWQgICAgIDggICAgICAgICAgICAgIFVMT05HICAgICAgIHN0YXJ0IGdseXBoIElEIGZvciB0aGUgZ3JvdXAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUQUJMRSBPVkVSVklFVworICAgKiAtLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgICAgIFRZUEUgICAgICAgIERFU0NSSVBUSU9OCisgICAqCisgICAqICAgZm9ybWF0ICAgICAgMCAgICAgICAgICAgICAgVVNIT1JUICAgICAgbXVzdCBiZSA4CisgICAqICAgcmVzZXJ2ZWQgICAgMiAgICAgICAgICAgICAgVVNIT1JUICAgICAgcmVzZXJ2ZWQKKyAgICogICBsZW5ndGggICAgICA0ICAgICAgICAgICAgICBVTE9ORyAgICAgICBsZW5ndGggaW4gYnl0ZXMKKyAgICogICBsYW5ndWFnZSAgICA4ICAgICAgICAgICAgICBVTE9ORyAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZQorICAgKiAgIGlzMzIgICAgICAgIDEyICAgICAgICAgICAgIEJZVEVbODE5Ml0gIDMyLWJpdG5lc3MgYml0bWFwCisgICAqICAgY291bnQgICAgICAgODIwNCAgICAgICAgICAgVUxPTkcgICAgICAgbnVtYmVyIG9mIGdyb3VwcworICAgKgorICAgKiBUaGlzIGhlYWRlciBpcyBmb2xsb3dlZCBieSBgY291bnQnIGdyb3VwcyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgICoKKyAgICogICBzdGFydCAgICAgICAwICAgICAgICAgICAgICBVTE9ORyAgICAgICBmaXJzdCBjaGFyY29kZQorICAgKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgICAgIFVMT05HICAgICAgIGxhc3QgY2hhcmNvZGUKKyAgICogICBzdGFydElkICAgICA4ICAgICAgICAgICAgICBVTE9ORyAgICAgICBzdGFydCBnbHlwaCBJRCBmb3IgdGhlIGdyb3VwCisgICAqLwogCiAjaWZkZWYgVFRfQ09ORklHX0NNQVBfRk9STUFUXzgKIApAQCAtMjAzMCwyMiArMjAzNiwyMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5BTUUgICAgICBPRkZTRVQgIFRZUEUgICAgICAgICAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAwICAgICAgVVNIT1JUICAgICAgICAgICAgIG11c3QgYmUgMTAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHJlc2VydmVkICAgMiAgICAgIFVTSE9SVCAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsZW5ndGggICAgIDQgICAgICBVTE9ORyAgICAgICAgICAgICAgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICovCi0gIC8qICAgbGFuZ3VhZ2UgICA4ICAgICAgVUxPTkcgICAgICAgICAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBzdGFydCAgICAgMTIgICAgICBVTE9ORyAgICAgICAgICAgICAgZmlyc3QgY2hhciBpbiByYW5nZSAgICAgICAgICAgICovCi0gIC8qICAgY291bnQgICAgIDE2ICAgICAgVUxPTkcgICAgICAgICAgICAgIG51bWJlciBvZiBjaGFycyBpbiByYW5nZSAgICAgICAqLwotICAvKiAgIGdseXBoSWRzICAyMCAgICAgIFVTSE9SVFtjb3VudF0gICAgICBnbHlwaCBpbmRpY2VzIGNvdmVyZWQgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUQUJMRSBPVkVSVklFVworICAgKiAtLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiAgIE5BTUUgICAgICBPRkZTRVQgIFRZUEUgICAgICAgICAgICAgICBERVNDUklQVElPTgorICAgKgorICAgKiAgIGZvcm1hdCAgICAgMCAgICAgIFVTSE9SVCAgICAgICAgICAgICBtdXN0IGJlIDEwCisgICAqICAgcmVzZXJ2ZWQgICAyICAgICAgVVNIT1JUICAgICAgICAgICAgIHJlc2VydmVkCisgICAqICAgbGVuZ3RoICAgICA0ICAgICAgVUxPTkcgICAgICAgICAgICAgIGxlbmd0aCBpbiBieXRlcworICAgKiAgIGxhbmd1YWdlICAgOCAgICAgIFVMT05HICAgICAgICAgICAgICBNYWMgbGFuZ3VhZ2UgY29kZQorICAgKgorICAgKiAgIHN0YXJ0ICAgICAxMiAgICAgIFVMT05HICAgICAgICAgICAgICBmaXJzdCBjaGFyIGluIHJhbmdlCisgICAqICAgY291bnQgICAgIDE2ICAgICAgVUxPTkcgICAgICAgICAgICAgIG51bWJlciBvZiBjaGFycyBpbiByYW5nZQorICAgKiAgIGdseXBoSWRzICAyMCAgICAgIFVTSE9SVFtjb3VudF0gICAgICBnbHlwaCBpbmRpY2VzIGNvdmVyZWQKKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTAKIApAQCAtMjIwMiwyNiArMjIwOCwyNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgVFlQRSAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAgMCAgICAgICAgICBVU0hPUlQgICAgIG11c3QgYmUgMTIgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHJlc2VydmVkICAgIDIgICAgICAgICAgVVNIT1JUICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsZW5ndGggICAgICA0ICAgICAgICAgIFVMT05HICAgICAgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgbGFuZ3VhZ2UgICAgOCAgICAgICAgICBVTE9ORyAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGNvdW50ICAgICAgIDEyICAgICAgICAgVUxPTkcgICAgICBudW1iZXIgb2YgZ3JvdXBzICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGhlYWRlciBpcyBmb2xsb3dlZCBieSBgY291bnQnIGdyb3VwcyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDogICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgc3RhcnQgICAgICAgMCAgICAgICAgICBVTE9ORyAgICAgIGZpcnN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsYXN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBzdGFydElkICAgICA4ICAgICAgICAgIFVMT05HICAgICAgc3RhcnQgZ2x5cGggSUQgZm9yIHRoZSBncm91cCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVEFCTEUgT1ZFUlZJRVcKKyAgICogLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogICBOQU1FICAgICAgICBPRkZTRVQgICAgIFRZUEUgICAgICAgREVTQ1JJUFRJT04KKyAgICoKKyAgICogICBmb3JtYXQgICAgICAwICAgICAgICAgIFVTSE9SVCAgICAgbXVzdCBiZSAxMgorICAgKiAgIHJlc2VydmVkICAgIDIgICAgICAgICAgVVNIT1JUICAgICByZXNlcnZlZAorICAgKiAgIGxlbmd0aCAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsZW5ndGggaW4gYnl0ZXMKKyAgICogICBsYW5ndWFnZSAgICA4ICAgICAgICAgIFVMT05HICAgICAgTWFjIGxhbmd1YWdlIGNvZGUKKyAgICogICBjb3VudCAgICAgICAxMiAgICAgICAgIFVMT05HICAgICAgbnVtYmVyIG9mIGdyb3VwcworICAgKiAgICAgICAgICAgICAgIDE2CisgICAqCisgICAqIFRoaXMgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IGBjb3VudCcgZ3JvdXBzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICAgKgorICAgKiAgIHN0YXJ0ICAgICAgIDAgICAgICAgICAgVUxPTkcgICAgICBmaXJzdCBjaGFyY29kZQorICAgKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsYXN0IGNoYXJjb2RlCisgICAqICAgc3RhcnRJZCAgICAgOCAgICAgICAgICBVTE9ORyAgICAgIHN0YXJ0IGdseXBoIElEIGZvciB0aGUgZ3JvdXAKKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTIKIApAQCAtMjU1OCwyNiArMjU2NCwyNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5BTUUgICAgICAgIE9GRlNFVCAgICAgVFlQRSAgICAgICBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAgMCAgICAgICAgICBVU0hPUlQgICAgIG11c3QgYmUgMTMgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHJlc2VydmVkICAgIDIgICAgICAgICAgVVNIT1JUICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBsZW5ndGggICAgICA0ICAgICAgICAgIFVMT05HICAgICAgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgbGFuZ3VhZ2UgICAgOCAgICAgICAgICBVTE9ORyAgICAgIE1hYyBsYW5ndWFnZSBjb2RlICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGNvdW50ICAgICAgIDEyICAgICAgICAgVUxPTkcgICAgICBudW1iZXIgb2YgZ3JvdXBzICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGhlYWRlciBpcyBmb2xsb3dlZCBieSBgY291bnQnIGdyb3VwcyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDogICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgc3RhcnQgICAgICAgMCAgICAgICAgICBVTE9ORyAgICAgIGZpcnN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsYXN0IGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBnbHlwaElkICAgICA4ICAgICAgICAgIFVMT05HICAgICAgZ2x5cGggSUQgZm9yIHRoZSB3aG9sZSBncm91cCAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVEFCTEUgT1ZFUlZJRVcKKyAgICogLS0tLS0tLS0tLS0tLS0KKyAgICoKKyAgICogICBOQU1FICAgICAgICBPRkZTRVQgICAgIFRZUEUgICAgICAgREVTQ1JJUFRJT04KKyAgICoKKyAgICogICBmb3JtYXQgICAgICAwICAgICAgICAgIFVTSE9SVCAgICAgbXVzdCBiZSAxMworICAgKiAgIHJlc2VydmVkICAgIDIgICAgICAgICAgVVNIT1JUICAgICByZXNlcnZlZAorICAgKiAgIGxlbmd0aCAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsZW5ndGggaW4gYnl0ZXMKKyAgICogICBsYW5ndWFnZSAgICA4ICAgICAgICAgIFVMT05HICAgICAgTWFjIGxhbmd1YWdlIGNvZGUKKyAgICogICBjb3VudCAgICAgICAxMiAgICAgICAgIFVMT05HICAgICAgbnVtYmVyIG9mIGdyb3VwcworICAgKiAgICAgICAgICAgICAgIDE2CisgICAqCisgICAqIFRoaXMgaGVhZGVyIGlzIGZvbGxvd2VkIGJ5IGBjb3VudCcgZ3JvdXBzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICAgKgorICAgKiAgIHN0YXJ0ICAgICAgIDAgICAgICAgICAgVUxPTkcgICAgICBmaXJzdCBjaGFyY29kZQorICAgKiAgIGVuZCAgICAgICAgIDQgICAgICAgICAgVUxPTkcgICAgICBsYXN0IGNoYXJjb2RlCisgICAqICAgZ2x5cGhJZCAgICAgOCAgICAgICAgICBVTE9ORyAgICAgIGdseXBoIElEIGZvciB0aGUgd2hvbGUgZ3JvdXAKKyAgICovCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTMKIApAQCAtMjg4NCw1OCArMjg5MCw1OSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUQUJMRSBPVkVSVklFVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIE5BTUUgICAgICAgICBPRkZTRVQgIFRZUEUgICAgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgZm9ybWF0ICAgICAgICAgMCAgICAgVVNIT1JUICBtdXN0IGJlIDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIGxlbmd0aCAgICAgICAgIDIgICAgIFVMT05HICAgdGFibGUgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBudW1TZWxlY3RvciAgICA2ICAgICBVTE9ORyAgIG51bWJlciBvZiB2YXJpYXRpb24gc2VsLiByZWNvcmRzICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGb2xsb3dlZCBieSBudW1TZWxlY3RvciByZWNvcmRzLCBlYWNoIG9mIHdoaWNoIGxvb2tzIGxpa2UgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgdmFyU2VsZWN0b3IgICAgMCAgICAgVUlOVDI0ICBVbmljb2RlIGNvZGVwb2ludCBvZiBzZWwuICAgICAgICAgICAgICAqLwotICAvKiAgIGRlZmF1bHRPZmYgICAgIDMgICAgIFVMT05HICAgb2Zmc2V0IHRvIGEgZGVmYXVsdCBVVlMgdGFibGUgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJpbmcgYW55IHZhcmlhbnRzIHRvIGJlIGZvdW5kIGluICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbm9ybWFsIFVuaWNvZGUgc3VidGFibGUuICAgICAgICAgICAqLwotICAvKiAgIG5vbkRlZk9mZiAgICAgIDcgICAgIFVMT05HICAgb2Zmc2V0IHRvIGEgbm9uLWRlZmF1bHQgVVZTIHRhYmxlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJpbmcgYW55IHZhcmlhbnRzIG5vdCBpbiB0aGUgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBjbWFwLCB3aXRoIEdJRHMgaGVyZSAgICAgICAgICAqLwotICAvKiAoZWl0aGVyIG9mZnNldCBtYXkgYmUgMCBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNlbGVjdG9ycyBhcmUgc29ydGVkIGJ5IGNvZGUgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSBkZWZhdWx0IFVuaWNvZGUgVmFyaWF0aW9uIFNlbGVjdG9yIChVVlMpIHN1YnRhYmxlIGlzIGp1c3QgYSBsaXN0IG9mICovCi0gIC8qIHJhbmdlcyBvZiBjb2RlIHBvaW50cyB3aGljaCBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIHN0YW5kYXJkIGNtYXAuICBObyAqLwotICAvKiBnbHlwaCBJRHMgKEdJRHMpIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgbnVtUmFuZ2VzICAgICAgMCAgICAgVUxPTkcgICBudW1iZXIgb2YgcmFuZ2VzIGZvbGxvd2luZyAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSByYW5nZSBsb29rcyBsaWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHVuaVN0YXJ0ICAgICAgIDAgICAgIFVJTlQyNCAgY29kZSBwb2ludCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgYWRkaXRpb25hbENudCAgMyAgICAgVUJZVEUgICBjb3VudCBvZiBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgaW4gdGhpcyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgKHplcm8gbWVhbnMgYSByYW5nZSBvZiBhIHNpbmdsZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSYW5nZXMgYXJlIHNvcnRlZCBieSBgdW5pU3RhcnQnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEEgbm9uLWRlZmF1bHQgVW5pY29kZSBWYXJpYXRpb24gU2VsZWN0b3IgKFVWUykgc3VidGFibGUgaXMgYSBsaXN0IG9mICAqLwotICAvKiBtYXBwaW5ncyBmcm9tIGNvZGVwb2ludCB0byBHSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgbnVtTWFwcGluZ3MgICAgMCAgICAgVUxPTkcgICBudW1iZXIgb2YgbWFwcGluZ3MgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSByYW5nZSBsb29rcyBsaWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIHVuaVN0YXJ0ICAgICAgIDAgICAgIFVJTlQyNCAgY29kZSBwb2ludCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgR0lEICAgICAgICAgICAgMyAgICAgVVNIT1JUICBhbmQgaXRzIEdJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUmFuZ2VzIGFyZSBzb3J0ZWQgYnkgYHVuaVN0YXJ0Jy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUQUJMRSBPVkVSVklFVworICAgKiAtLS0tLS0tLS0tLS0tLQorICAgKgorICAgKiAgIE5BTUUgICAgICAgICBPRkZTRVQgIFRZUEUgICAgREVTQ1JJUFRJT04KKyAgICoKKyAgICogICBmb3JtYXQgICAgICAgICAwICAgICBVU0hPUlQgIG11c3QgYmUgMTQKKyAgICogICBsZW5ndGggICAgICAgICAyICAgICBVTE9ORyAgIHRhYmxlIGxlbmd0aCBpbiBieXRlcworICAgKiAgIG51bVNlbGVjdG9yICAgIDYgICAgIFVMT05HICAgbnVtYmVyIG9mIHZhcmlhdGlvbiBzZWwuIHJlY29yZHMKKyAgICoKKyAgICogRm9sbG93ZWQgYnkgbnVtU2VsZWN0b3IgcmVjb3JkcywgZWFjaCBvZiB3aGljaCBsb29rcyBsaWtlCisgICAqCisgICAqICAgdmFyU2VsZWN0b3IgICAgMCAgICAgVUlOVDI0ICBVbmljb2RlIGNvZGVwb2ludCBvZiBzZWwuCisgICAqICAgZGVmYXVsdE9mZiAgICAgMyAgICAgVUxPTkcgICBvZmZzZXQgdG8gYSBkZWZhdWx0IFVWUyB0YWJsZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmluZyBhbnkgdmFyaWFudHMgdG8gYmUgZm91bmQgaW4KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBub3JtYWwgVW5pY29kZSBzdWJ0YWJsZS4KKyAgICogICBub25EZWZPZmYgICAgICA3ICAgICBVTE9ORyAgIG9mZnNldCB0byBhIG5vbi1kZWZhdWx0IFVWUyB0YWJsZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmluZyBhbnkgdmFyaWFudHMgbm90IGluIHRoZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgY21hcCwgd2l0aCBHSURzIGhlcmUKKyAgICogKGVpdGhlciBvZmZzZXQgbWF5IGJlIDAgTlVMTCkKKyAgICoKKyAgICogU2VsZWN0b3JzIGFyZSBzb3J0ZWQgYnkgY29kZSBwb2ludC4KKyAgICoKKyAgICogQSBkZWZhdWx0IFVuaWNvZGUgVmFyaWF0aW9uIFNlbGVjdG9yIChVVlMpIHN1YnRhYmxlIGlzIGp1c3QgYSBsaXN0IG9mCisgICAqIHJhbmdlcyBvZiBjb2RlIHBvaW50cyB3aGljaCBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIHN0YW5kYXJkIGNtYXAuICBObworICAgKiBnbHlwaCBJRHMgKEdJRHMpIGhlcmUuCisgICAqCisgICAqICAgbnVtUmFuZ2VzICAgICAgMCAgICAgVUxPTkcgICBudW1iZXIgb2YgcmFuZ2VzIGZvbGxvd2luZworICAgKgorICAgKiBBIHJhbmdlIGxvb2tzIGxpa2UKKyAgICoKKyAgICogICB1bmlTdGFydCAgICAgICAwICAgICBVSU5UMjQgIGNvZGUgcG9pbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyByYW5nZQorICAgKiAgIGFkZGl0aW9uYWxDbnQgIDMgICAgIFVCWVRFICAgY291bnQgb2YgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGluIHRoaXMKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlICh6ZXJvIG1lYW5zIGEgcmFuZ2Ugb2YgYSBzaW5nbGUKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcikKKyAgICoKKyAgICogUmFuZ2VzIGFyZSBzb3J0ZWQgYnkgYHVuaVN0YXJ0Jy4KKyAgICoKKyAgICogQSBub24tZGVmYXVsdCBVbmljb2RlIFZhcmlhdGlvbiBTZWxlY3RvciAoVVZTKSBzdWJ0YWJsZSBpcyBhIGxpc3Qgb2YKKyAgICogbWFwcGluZ3MgZnJvbSBjb2RlcG9pbnQgdG8gR0lELgorICAgKgorICAgKiAgIG51bU1hcHBpbmdzICAgIDAgICAgIFVMT05HICAgbnVtYmVyIG9mIG1hcHBpbmdzCisgICAqCisgICAqIEEgcmFuZ2UgbG9va3MgbGlrZQorICAgKgorICAgKiAgIHVuaVN0YXJ0ICAgICAgIDAgICAgIFVJTlQyNCAgY29kZSBwb2ludCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHJhbmdlCisgICAqICAgR0lEICAgICAgICAgICAgMyAgICAgVVNIT1JUICBhbmQgaXRzIEdJRAorICAgKgorICAgKiBSYW5nZXMgYXJlIHNvcnRlZCBieSBgdW5pU3RhcnQnLgorICAgKi8KIAogI2lmZGVmIFRUX0NPTkZJR19DTUFQX0ZPUk1BVF8xNAogCkBAIC0zNzQyLDcgKzM3NDksNiBAQAogCiAjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTICovCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIAogICBzdGF0aWMgY29uc3QgVFRfQ01hcF9DbGFzcyAgdHRfY21hcF9jbGFzc2VzW10gPQogICB7CkBAIC0zNzUxLDYxICszNzU3LDYgQEAKICAgICBOVUxMLAogICB9OwogCi0jZWxzZSAvKkZUX0NPTkZJR19PUFRJT05fUElDKi8KLQotICB2b2lkCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBfQ2xhc3MqICBjbGF6eiApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgaWYgKCBjbGF6eiApCi0gICAgICBGVF9GUkVFKCBjbGF6eiApOwotICB9Ci0KLQotICBGVF9FcnJvcgotICBGVF9DcmVhdGVfQ2xhc3NfdHRfY21hcF9jbGFzc2VzKCBGVF9MaWJyYXJ5ICAgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0NNYXBfQ2xhc3MqKiAgb3V0cHV0X2NsYXNzICkKLSAgewotICAgIFRUX0NNYXBfQ2xhc3MqICAgICBjbGF6eiAgPSBOVUxMOwotICAgIFRUX0NNYXBfQ2xhc3NSZWMqICByZWNzOwotICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OwotCi0gICAgaW50ICBpID0gMDsKLQotCi0jZGVmaW5lIFRUQ01BUENJVEVNKCBhICkgaSsrOwotI2luY2x1ZGUgInR0Y21hcGMuaCIKLQotICAgIC8qIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgYm90aCB0aGUgcG9pbnRlcnMgKi8KLSAgICAvKiBwbHVzIHRlcm1pbmF0b3IgYW5kIHRoZSBjbGFzcyBpbnN0YW5jZXMgICAgICovCi0gICAgaWYgKCBGVF9BTExPQyggY2xhenosIHNpemVvZiAoICpjbGF6eiApICogKCBpICsgMSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggVFRfQ01hcF9DbGFzc1JlYyApICogaSApICkKLSAgICAgIHJldHVybiBlcnJvcjsKLQotICAgIC8qIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2xhc3MgaW5zdGFuY2VzIGZvbGxvd3MgdGhlIGFycmF5IG9mIHBvaW50ZXJzICovCi0gICAgcmVjcyA9IChUVF9DTWFwX0NsYXNzUmVjKikoIChjaGFyKiljbGF6eiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoICpjbGF6eiApICogKCBpICsgMSApICk7Ci0gICAgaSAgICA9IDA7Ci0KLSN1bmRlZiBUVENNQVBDSVRFTQotI2RlZmluZSAgVFRDTUFQQ0lURU0oIGEgKSAgICAgICAgICAgICBcCi0gICAgRlRfSW5pdF9DbGFzc18gIyMgYSggJnJlY3NbaV0gKTsgIFwKLSAgICBjbGF6eltpXSA9ICZyZWNzW2ldOyAgICAgICAgICAgICAgXAotICAgIGkrKzsKLSNpbmNsdWRlICJ0dGNtYXBjLmgiCi0KLSAgICBjbGF6eltpXSA9IE5VTEw7Ci0KLSAgICAqb3V0cHV0X2NsYXNzID0gY2xheno7Ci0gICAgcmV0dXJuIEZUX0Vycl9PazsKLSAgfQotCi0jZW5kaWYgLypGVF9DT05GSUdfT1BUSU9OX1BJQyovCi0KIAogICAvKiBwYXJzZSB0aGUgYGNtYXAnIHRhYmxlIGFuZCBidWlsZCB0aGUgY29ycmVzcG9uZGluZyBUVF9DTWFwIG9iamVjdHMgKi8KICAgLyogaW4gdGhlIGN1cnJlbnQgZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zODUyLDcgKzM4MDMsNyBAQAogICAgICAgewogICAgICAgICBGVF9CeXRlKiB2b2xhdGlsZSAgICAgICAgICAgICAgY21hcCAgID0gdGFibGUgKyBvZmZzZXQ7CiAgICAgICAgIHZvbGF0aWxlIEZUX1VJbnQgICAgICAgICAgICAgICBmb3JtYXQgPSBUVF9QRUVLX1VTSE9SVCggY21hcCApOwotICAgICAgICBjb25zdCBUVF9DTWFwX0NsYXNzKiB2b2xhdGlsZSAgcGNsYXp6ID0gVFRfQ01BUF9DTEFTU0VTX0dFVDsKKyAgICAgICAgY29uc3QgVFRfQ01hcF9DbGFzcyogdm9sYXRpbGUgIHBjbGF6eiA9IHR0X2NtYXBfY2xhc3NlczsKICAgICAgICAgVFRfQ01hcF9DbGFzcyB2b2xhdGlsZSAgICAgICAgIGNsYXp6OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcC5oIGIvc3JjL3NmbnQvdHRjbWFwLmgKaW5kZXggZDI2NGQ5OS4uMTRhNzAwZCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0Y21hcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0Y21hcC5oCisgKgorICogICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRDTUFQX0hfCkBAIC01Niw4ICs1Niw2IEBACiAgIH0gVFRfQ01hcF9DbGFzc1JlYzsKIAogCi0jaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KICNkZWZpbmUgRlRfREVGSU5FX1RUX0NNQVAoIGNsYXNzXywgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV8sICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0XywgICAgICAgICAgICAgIFwKQEAgLTkyLDQyICs5MCw2IEBACiAgICAgZ2V0X2NtYXBfaW5mb18gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAotI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotI2RlZmluZSBGVF9ERUZJTkVfVFRfQ01BUCggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplXywgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZV8sICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2luZGV4XywgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfbmV4dF8sICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl92YXJfaW5kZXhfLCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3Zhcl9kZWZhdWx0XywgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRfbGlzdF8sICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnZhcmlhbnRfbGlzdF8sICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Y2hhcl9saXN0XywgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF8sICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY21hcF9pbmZvXyApICAgICAgICAgICAgIFwKLSAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIFRUX0NNYXBfQ2xhc3NSZWMqICBjbGF6eiApICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2xhenouc2l6ZSAgICAgICAgICAgICA9IHNpemVfOyAgICAgICAgICAgICAgXAotICAgIGNsYXp6LT5jbGF6ei5pbml0ICAgICAgICAgICAgID0gaW5pdF87ICAgICAgICAgICAgICBcCi0gICAgY2xhenotPmNsYXp6LmRvbmUgICAgICAgICAgICAgPSBkb25lXzsgICAgICAgICAgICAgIFwKLSAgICBjbGF6ei0+Y2xhenouY2hhcl9pbmRleCAgICAgICA9IGNoYXJfaW5kZXhfOyAgICAgICAgXAotICAgIGNsYXp6LT5jbGF6ei5jaGFyX25leHQgICAgICAgID0gY2hhcl9uZXh0XzsgICAgICAgICBcCi0gICAgY2xhenotPmNsYXp6LmNoYXJfdmFyX2luZGV4ICAgPSBjaGFyX3Zhcl9pbmRleF87ICAgIFwKLSAgICBjbGF6ei0+Y2xhenouY2hhcl92YXJfZGVmYXVsdCA9IGNoYXJfdmFyX2RlZmF1bHRfOyAgXAotICAgIGNsYXp6LT5jbGF6ei52YXJpYW50X2xpc3QgICAgID0gdmFyaWFudF9saXN0XzsgICAgICBcCi0gICAgY2xhenotPmNsYXp6LmNoYXJ2YXJpYW50X2xpc3QgPSBjaGFydmFyaWFudF9saXN0XzsgIFwKLSAgICBjbGF6ei0+Y2xhenoudmFyaWFudGNoYXJfbGlzdCA9IHZhcmlhbnRjaGFyX2xpc3RfOyAgXAotICAgIGNsYXp6LT5mb3JtYXQgICAgICAgICAgICAgICAgID0gZm9ybWF0XzsgICAgICAgICAgICBcCi0gICAgY2xhenotPnZhbGlkYXRlICAgICAgICAgICAgICAgPSB2YWxpZGF0ZV87ICAgICAgICAgIFwKLSAgICBjbGF6ei0+Z2V0X2NtYXBfaW5mbyAgICAgICAgICA9IGdldF9jbWFwX2luZm9fOyAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCiAKICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX1ZhbGlkYXRvclJlY18KICAgewpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjbWFwYy5oIGIvc3JjL3NmbnQvdHRjbWFwYy5oCmluZGV4IDQ5ODBlOWQuLjExZDNlOTggMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0Y21hcGMuaAorKysgYi9zcmMvc2ZudC90dGNtYXBjLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0Y21hcGMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUVCBDTUFQIGNsYXNzZXMgZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0Y21hcGMuaAorICoKKyAqICAgVFQgQ01BUCBjbGFzc2VzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTggYnkKKyAqIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZmRlZiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjb2xyLmMgYi9zcmMvc2ZudC90dGNvbHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZmMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NmbnQvdHRjb2xyLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRjb2xyLmMKKyAqCisgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBjb2xvcmVkIGdseXBoIGxheWVyIHN1cHBvcnQgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFNoYW8gWXUgWmhhbmcgPHNoYW96aGFuZ0BmYi5jb20+LgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIGBDT0xSJyB0YWJsZSBzcGVjaWZpY2F0aW9uOgorICAgKgorICAgKiAgIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvY29sci5odG0KKyAgICoKKyAgICovCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisjaW5jbHVkZSBGVF9DT0xPUl9ICisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTCisKKyNpbmNsdWRlICJ0dGNvbHIuaCIKKworCisgIC8qIE5PVEU6IFRoZXNlIGFyZSB0aGUgdGFibGUgc2l6ZXMgY2FsY3VsYXRlZCB0aHJvdWdoIHRoZSBzcGVjcy4gKi8KKyNkZWZpbmUgQkFTRV9HTFlQSF9TSVpFICAgICAgICAgICAgNgorI2RlZmluZSBMQVlFUl9TSVpFICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENPTFJfSEVBREVSX1NJWkUgICAgICAgICAgMTQKKworCisgIHR5cGVkZWYgc3RydWN0IEJhc2VHbHlwaFJlY29yZF8KKyAgeworICAgIEZUX1VTaG9ydCAgZ2lkOworICAgIEZUX1VTaG9ydCAgZmlyc3RfbGF5ZXJfaW5kZXg7CisgICAgRlRfVVNob3J0ICBudW1fbGF5ZXJzOworCisgIH0gQmFzZUdseXBoUmVjb3JkOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgQ29scl8KKyAgeworICAgIEZUX1VTaG9ydCAgdmVyc2lvbjsKKyAgICBGVF9VU2hvcnQgIG51bV9iYXNlX2dseXBoczsKKyAgICBGVF9VU2hvcnQgIG51bV9sYXllcnM7CisKKyAgICBGVF9CeXRlKiAgYmFzZV9nbHlwaHM7CisgICAgRlRfQnl0ZSogIGxheWVyczsKKworICAgIC8qIFRoZSBtZW1vcnkgd2hpY2ggYmFja3MgdXAgdGhlIGBDT0xSJyB0YWJsZS4gKi8KKyAgICB2b2lkKiAgICAgdGFibGU7CisgICAgRlRfVUxvbmcgIHRhYmxlX3NpemU7CisKKyAgfSBDb2xyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Y29scgorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9jb2xyKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKyAgICBGVF9CeXRlKiAgdGFibGUgPSBOVUxMOworICAgIEZUX0J5dGUqICBwICAgICA9IE5VTEw7CisKKyAgICBDb2xyKiAgY29sciA9IE5VTEw7CisKKyAgICBGVF9VTG9uZyAgYmFzZV9nbHlwaF9vZmZzZXQsIGxheWVyX29mZnNldDsKKyAgICBGVF9VTG9uZyAgdGFibGVfc2l6ZTsKKworCisgICAgLyogYENPTFInIGFsd2F5cyBuZWVkcyBgQ1BBTCcgKi8KKyAgICBpZiAoICFmYWNlLT5jcGFsICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX0NPTFIsIHN0cmVhbSwgJnRhYmxlX3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gTm9Db2xyOworCisgICAgaWYgKCB0YWJsZV9zaXplIDwgQ09MUl9IRUFERVJfU0laRSApCisgICAgICBnb3RvIEludmFsaWRUYWJsZTsKKworICAgIGlmICggRlRfRlJBTUVfRVhUUkFDVCggdGFibGVfc2l6ZSwgdGFibGUgKSApCisgICAgICBnb3RvIE5vQ29scjsKKworICAgIHAgPSB0YWJsZTsKKworICAgIGlmICggRlRfTkVXKCBjb2xyICkgKQorICAgICAgZ290byBOb0NvbHI7CisKKyAgICBjb2xyLT52ZXJzaW9uID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBpZiAoIGNvbHItPnZlcnNpb24gIT0gMCApCisgICAgICBnb3RvIEludmFsaWRUYWJsZTsKKworICAgIGNvbHItPm51bV9iYXNlX2dseXBocyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgYmFzZV9nbHlwaF9vZmZzZXQgICAgID0gRlRfTkVYVF9VTE9ORyggcCApOworCisgICAgaWYgKCBiYXNlX2dseXBoX29mZnNldCA+PSB0YWJsZV9zaXplICkKKyAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworICAgIGlmICggY29sci0+bnVtX2Jhc2VfZ2x5cGhzICogQkFTRV9HTFlQSF9TSVpFID4KKyAgICAgICAgICAgdGFibGVfc2l6ZSAtIGJhc2VfZ2x5cGhfb2Zmc2V0ICkKKyAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworCisgICAgbGF5ZXJfb2Zmc2V0ICAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKyAgICBjb2xyLT5udW1fbGF5ZXJzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIGlmICggbGF5ZXJfb2Zmc2V0ID49IHRhYmxlX3NpemUgKQorICAgICAgZ290byBJbnZhbGlkVGFibGU7CisgICAgaWYgKCBjb2xyLT5udW1fbGF5ZXJzICogTEFZRVJfU0laRSA+IHRhYmxlX3NpemUgLSBsYXllcl9vZmZzZXQgKQorICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICBjb2xyLT5iYXNlX2dseXBocyA9IChGVF9CeXRlKikoIHRhYmxlICsgYmFzZV9nbHlwaF9vZmZzZXQgKTsKKyAgICBjb2xyLT5sYXllcnMgICAgICA9IChGVF9CeXRlKikoIHRhYmxlICsgbGF5ZXJfb2Zmc2V0ICAgICAgKTsKKyAgICBjb2xyLT50YWJsZSAgICAgICA9IHRhYmxlOworICAgIGNvbHItPnRhYmxlX3NpemUgID0gdGFibGVfc2l6ZTsKKworICAgIGZhY2UtPmNvbHIgPSBjb2xyOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKworICBJbnZhbGlkVGFibGU6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgIE5vQ29scjoKKyAgICBGVF9GUkFNRV9SRUxFQVNFKCB0YWJsZSApOworICAgIEZUX0ZSRUUoIGNvbHIgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgdHRfZmFjZV9mcmVlX2NvbHIoIFRUX0ZhY2UgIGZhY2UgKQorICB7CisgICAgRlRfU3RyZWFtICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCisgICAgQ29sciogIGNvbHIgPSAoQ29sciopZmFjZS0+Y29scjsKKworCisgICAgaWYgKCBjb2xyICkKKyAgICB7CisgICAgICBGVF9GUkFNRV9SRUxFQVNFKCBjb2xyLT50YWJsZSApOworICAgICAgRlRfRlJFRSggY29sciApOworICAgIH0KKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgZmluZF9iYXNlX2dseXBoX3JlY29yZCggRlRfQnl0ZSogICAgICAgICAgYmFzZV9nbHlwaF9iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgICAgbnVtX2Jhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgIGdseXBoX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlR2x5cGhSZWNvcmQqICByZWNvcmQgKQorICB7CisgICAgRlRfSW50ICBtaW4gPSAwOworICAgIEZUX0ludCAgbWF4ID0gbnVtX2Jhc2VfZ2x5cGggLSAxOworCisKKyAgICB3aGlsZSAoIG1pbiA8PSBtYXggKQorICAgIHsKKyAgICAgIEZUX0ludCAgICBtaWQgPSBtaW4gKyAoIG1heCAtIG1pbiApIC8gMjsKKyAgICAgIEZUX0J5dGUqICBwICAgPSBiYXNlX2dseXBoX2JlZ2luICsgbWlkICogQkFTRV9HTFlQSF9TSVpFOworCisgICAgICBGVF9VU2hvcnQgIGdpZCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKworICAgICAgaWYgKCBnaWQgPCBnbHlwaF9pZCApCisgICAgICAgIG1pbiA9IG1pZCArIDE7CisgICAgICBlbHNlIGlmIChnaWQgPiBnbHlwaF9pZCApCisgICAgICAgIG1heCA9IG1pZCAtIDE7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJlY29yZC0+Z2lkICAgICAgICAgICAgICAgPSBnaWQ7CisgICAgICAgIHJlY29yZC0+Zmlyc3RfbGF5ZXJfaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgICAgICByZWNvcmQtPm51bV9sYXllcnMgICAgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgdHRfZmFjZV9nZXRfY29scl9sYXllciggVFRfRmFjZSAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICBiYXNlX2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWNvbG9yX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MYXllckl0ZXJhdG9yKiAgaXRlcmF0b3IgKQorICB7CisgICAgQ29sciogICAgICAgICAgICBjb2xyID0gKENvbHIqKWZhY2UtPmNvbHI7CisgICAgQmFzZUdseXBoUmVjb3JkICBnbHlwaF9yZWNvcmQ7CisKKworICAgIGlmICggIWNvbHIgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICFpdGVyYXRvci0+cCApCisgICAgeworICAgICAgRlRfVUxvbmcgIG9mZnNldDsKKworCisgICAgICAvKiBmaXJzdCBjYWxsIHRvIGZ1bmN0aW9uICovCisgICAgICBpdGVyYXRvci0+bGF5ZXIgPSAwOworCisgICAgICBpZiAoICFmaW5kX2Jhc2VfZ2x5cGhfcmVjb3JkKCBjb2xyLT5iYXNlX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHItPm51bV9iYXNlX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfZ2x5cGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhfcmVjb3JkICkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgaWYgKCBnbHlwaF9yZWNvcmQubnVtX2xheWVycyApCisgICAgICAgIGl0ZXJhdG9yLT5udW1fbGF5ZXJzID0gZ2x5cGhfcmVjb3JkLm51bV9sYXllcnM7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworCisgICAgICBvZmZzZXQgPSBMQVlFUl9TSVpFICogZ2x5cGhfcmVjb3JkLmZpcnN0X2xheWVyX2luZGV4OworICAgICAgaWYgKCBvZmZzZXQgKyBMQVlFUl9TSVpFICogZ2x5cGhfcmVjb3JkLm51bV9sYXllcnMgPiBjb2xyLT50YWJsZV9zaXplICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgIGl0ZXJhdG9yLT5wID0gY29sci0+bGF5ZXJzICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmICggaXRlcmF0b3ItPmxheWVyID49IGl0ZXJhdG9yLT5udW1fbGF5ZXJzICkKKyAgICAgIHJldHVybiAwOworCisgICAgKmFnbHlwaF9pbmRleCA9IEZUX05FWFRfVVNIT1JUKCBpdGVyYXRvci0+cCApOworICAgICphY29sb3JfaW5kZXggPSBGVF9ORVhUX1VTSE9SVCggaXRlcmF0b3ItPnAgKTsKKworICAgIGlmICggKmFnbHlwaF9pbmRleCA+PSAoRlRfVUludCkoIEZUX0ZBQ0UoIGZhY2UgKS0+bnVtX2dseXBocyApICAgfHwKKyAgICAgICAgICggKmFjb2xvcl9pbmRleCAhPSAweEZGRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAqYWNvbG9yX2luZGV4ID49IGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZV9lbnRyaWVzICkgKQorICAgICAgcmV0dXJuIDA7CisKKyAgICBpdGVyYXRvci0+bGF5ZXIrKzsKKworICAgIHJldHVybiAxOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9jb2xyX2JsZW5kX2xheWVyKCBUVF9GYWNlICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBjb2xvcl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIGRzdFNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhTbG90ICBzcmNTbG90ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIEZUX1VJbnQgIHgsIHk7CisgICAgRlRfQnl0ZSAgYiwgZywgciwgYWxwaGE7CisKKyAgICBGVF9VTG9uZyAgc2l6ZTsKKyAgICBGVF9CeXRlKiAgc3JjOworICAgIEZUX0J5dGUqICBkc3Q7CisKKworICAgIGlmICggIWRzdFNsb3QtPmJpdG1hcC5idWZmZXIgKQorICAgIHsKKyAgICAgIC8qIEluaXRpYWxpemUgZGVzdGluYXRpb24gb2YgY29sb3IgYml0bWFwICovCisgICAgICAvKiB3aXRoIHRoZSBzaXplIG9mIGZpcnN0IGNvbXBvbmVudC4gICAgICAqLworICAgICAgZHN0U2xvdC0+Yml0bWFwX2xlZnQgPSBzcmNTbG90LT5iaXRtYXBfbGVmdDsKKyAgICAgIGRzdFNsb3QtPmJpdG1hcF90b3AgID0gc3JjU2xvdC0+Yml0bWFwX3RvcDsKKworICAgICAgZHN0U2xvdC0+Yml0bWFwLndpZHRoICAgICAgPSBzcmNTbG90LT5iaXRtYXAud2lkdGg7CisgICAgICBkc3RTbG90LT5iaXRtYXAucm93cyAgICAgICA9IHNyY1Nsb3QtPmJpdG1hcC5yb3dzOworICAgICAgZHN0U2xvdC0+Yml0bWFwLnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0JHUkE7CisgICAgICBkc3RTbG90LT5iaXRtYXAucGl0Y2ggICAgICA9IChpbnQpZHN0U2xvdC0+Yml0bWFwLndpZHRoICogNDsKKyAgICAgIGRzdFNsb3QtPmJpdG1hcC5udW1fZ3JheXMgID0gMjU2OworCisgICAgICBzaXplID0gZHN0U2xvdC0+Yml0bWFwLnJvd3MgKiAodW5zaWduZWQgaW50KWRzdFNsb3QtPmJpdG1hcC5waXRjaDsKKworICAgICAgZXJyb3IgPSBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwKCBkc3RTbG90LCBzaXplICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICBGVF9NRU1fWkVSTyggZHN0U2xvdC0+Yml0bWFwLmJ1ZmZlciwgc2l6ZSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUmVzaXplIGRlc3RpbmF0aW9uIGlmIG5lZWRlZCBzdWNoIHRoYXQgbmV3IGNvbXBvbmVudCBmaXRzLiAqLworICAgICAgRlRfSW50ICB4X21pbiwgeF9tYXgsIHlfbWluLCB5X21heDsKKworCisgICAgICB4X21pbiA9IEZUX01JTiggZHN0U2xvdC0+Yml0bWFwX2xlZnQsIHNyY1Nsb3QtPmJpdG1hcF9sZWZ0ICk7CisgICAgICB4X21heCA9IEZUX01BWCggZHN0U2xvdC0+Yml0bWFwX2xlZnQgKyAoRlRfSW50KWRzdFNsb3QtPmJpdG1hcC53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBzcmNTbG90LT5iaXRtYXBfbGVmdCArIChGVF9JbnQpc3JjU2xvdC0+Yml0bWFwLndpZHRoICk7CisKKyAgICAgIHlfbWluID0gRlRfTUlOKCBkc3RTbG90LT5iaXRtYXBfdG9wIC0gKEZUX0ludClkc3RTbG90LT5iaXRtYXAucm93cywKKyAgICAgICAgICAgICAgICAgICAgICBzcmNTbG90LT5iaXRtYXBfdG9wIC0gKEZUX0ludClzcmNTbG90LT5iaXRtYXAucm93cyApOworICAgICAgeV9tYXggPSBGVF9NQVgoIGRzdFNsb3QtPmJpdG1hcF90b3AsIHNyY1Nsb3QtPmJpdG1hcF90b3AgKTsKKworICAgICAgaWYgKCB4X21pbiAhPSBkc3RTbG90LT5iaXRtYXBfbGVmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgIHhfbWF4ICE9IGRzdFNsb3QtPmJpdG1hcF9sZWZ0ICsgKEZUX0ludClkc3RTbG90LT5iaXRtYXAud2lkdGggfHwKKyAgICAgICAgICAgeV9taW4gIT0gZHN0U2xvdC0+Yml0bWFwX3RvcCAtIChGVF9JbnQpZHN0U2xvdC0+Yml0bWFwLnJvd3MgICB8fAorICAgICAgICAgICB5X21heCAhPSBkc3RTbG90LT5iaXRtYXBfdG9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgIHsKKyAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgICAgICBGVF9VSW50ICB3aWR0aCA9IChGVF9VSW50KSggeF9tYXggLSB4X21pbiApOworICAgICAgICBGVF9VSW50ICByb3dzICA9IChGVF9VSW50KSggeV9tYXggLSB5X21pbiApOworICAgICAgICBGVF9VSW50ICBwaXRjaCA9IHdpZHRoICogNDsKKworICAgICAgICBGVF9CeXRlKiAgYnVmID0gTlVMTDsKKyAgICAgICAgRlRfQnl0ZSogIHA7CisgICAgICAgIEZUX0J5dGUqICBxOworCisKKyAgICAgICAgc2l6ZSAgPSByb3dzICogcGl0Y2g7CisgICAgICAgIGlmICggRlRfQUxMT0MoIGJ1Ziwgc2l6ZSApICkKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICAgICAgcCA9IGRzdFNsb3QtPmJpdG1hcC5idWZmZXI7CisgICAgICAgIHEgPSBidWYgKworICAgICAgICAgICAgKGludClwaXRjaCAqICggeV9tYXggLSBkc3RTbG90LT5iaXRtYXBfdG9wICkgKworICAgICAgICAgICAgNCAqICggZHN0U2xvdC0+Yml0bWFwX2xlZnQgLSB4X21pbiApOworCisgICAgICAgIGZvciAoIHkgPSAwOyB5IDwgZHN0U2xvdC0+Yml0bWFwLnJvd3M7IHkrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9NRU1fQ09QWSggcSwgcCwgZHN0U2xvdC0+Yml0bWFwLndpZHRoICogNCApOworCisgICAgICAgICAgcCArPSBkc3RTbG90LT5iaXRtYXAucGl0Y2g7CisgICAgICAgICAgcSArPSBwaXRjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ0X2dseXBoc2xvdF9zZXRfYml0bWFwKCBkc3RTbG90LCBidWYgKTsKKworICAgICAgICBkc3RTbG90LT5iaXRtYXBfdG9wICA9IHlfbWF4OworICAgICAgICBkc3RTbG90LT5iaXRtYXBfbGVmdCA9IHhfbWluOworCisgICAgICAgIGRzdFNsb3QtPmJpdG1hcC53aWR0aCA9IHdpZHRoOworICAgICAgICBkc3RTbG90LT5iaXRtYXAucm93cyAgPSByb3dzOworICAgICAgICBkc3RTbG90LT5iaXRtYXAucGl0Y2ggPSAoaW50KXBpdGNoOworCisgICAgICAgIGRzdFNsb3QtPmludGVybmFsLT5mbGFncyB8PSBGVF9HTFlQSF9PV05fQklUTUFQOworICAgICAgICBkc3RTbG90LT5mb3JtYXQgICAgICAgICAgID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGNvbG9yX2luZGV4ID09IDB4RkZGRiApCisgICAgeworICAgICAgaWYgKCBmYWNlLT5oYXZlX2ZvcmVncm91bmRfY29sb3IgKQorICAgICAgeworICAgICAgICBiICAgICA9IGZhY2UtPmZvcmVncm91bmRfY29sb3IuYmx1ZTsKKyAgICAgICAgZyAgICAgPSBmYWNlLT5mb3JlZ3JvdW5kX2NvbG9yLmdyZWVuOworICAgICAgICByICAgICA9IGZhY2UtPmZvcmVncm91bmRfY29sb3IucmVkOworICAgICAgICBhbHBoYSA9IGZhY2UtPmZvcmVncm91bmRfY29sb3IuYWxwaGE7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmICggZmFjZS0+cGFsZXR0ZV9kYXRhLnBhbGV0dGVfZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCBmYWNlLT5wYWxldHRlX2RhdGEucGFsZXR0ZV9mbGFnc1tmYWNlLT5wYWxldHRlX2luZGV4XSAmCisgICAgICAgICAgICAgICAgIEZUX1BBTEVUVEVfRk9SX0RBUktfQkFDS0dST1VORCAgICAgICAgICAgICAgICAgICAgICApICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHdoaXRlIG9wYXF1ZSAqLworICAgICAgICAgIGIgICAgID0gMHhGRjsKKyAgICAgICAgICBnICAgICA9IDB4RkY7CisgICAgICAgICAgciAgICAgPSAweEZGOworICAgICAgICAgIGFscGhhID0gMHhGRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBibGFjayBvcGFxdWUgKi8KKyAgICAgICAgICBiICAgICA9IDB4MDA7CisgICAgICAgICAgZyAgICAgPSAweDAwOworICAgICAgICAgIHIgICAgID0gMHgwMDsKKyAgICAgICAgICBhbHBoYSA9IDB4RkY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGIgICAgID0gZmFjZS0+cGFsZXR0ZVtjb2xvcl9pbmRleF0uYmx1ZTsKKyAgICAgIGcgICAgID0gZmFjZS0+cGFsZXR0ZVtjb2xvcl9pbmRleF0uZ3JlZW47CisgICAgICByICAgICA9IGZhY2UtPnBhbGV0dGVbY29sb3JfaW5kZXhdLnJlZDsKKyAgICAgIGFscGhhID0gZmFjZS0+cGFsZXR0ZVtjb2xvcl9pbmRleF0uYWxwaGE7CisgICAgfQorCisgICAgLyogWFhYIENvbnZlcnQgaWYgc3JjU2xvdC5iaXRtYXAgaXMgbm90IGdyZXk/ICovCisgICAgc3JjID0gc3JjU2xvdC0+Yml0bWFwLmJ1ZmZlcjsKKyAgICBkc3QgPSBkc3RTbG90LT5iaXRtYXAuYnVmZmVyICsKKyAgICAgICAgICBkc3RTbG90LT5iaXRtYXAucGl0Y2ggKiAoIGRzdFNsb3QtPmJpdG1hcF90b3AgLSBzcmNTbG90LT5iaXRtYXBfdG9wICkgKworICAgICAgICAgIDQgKiAoIHNyY1Nsb3QtPmJpdG1hcF9sZWZ0IC0gZHN0U2xvdC0+Yml0bWFwX2xlZnQgKTsKKworICAgIGZvciAoIHkgPSAwOyB5IDwgc3JjU2xvdC0+Yml0bWFwLnJvd3M7IHkrKyApCisgICAgeworICAgICAgZm9yICggeCA9IDA7IHggPCBzcmNTbG90LT5iaXRtYXAud2lkdGg7IHgrKyApCisgICAgICB7CisgICAgICAgIGludCAgYWEgPSBzcmNbeF07CisgICAgICAgIGludCAgZmEgPSBhbHBoYSAqIGFhIC8gMjU1OworCisgICAgICAgIGludCAgZmIgPSBiICogZmEgLyAyNTU7CisgICAgICAgIGludCAgZmcgPSBnICogZmEgLyAyNTU7CisgICAgICAgIGludCAgZnIgPSByICogZmEgLyAyNTU7CisKKyAgICAgICAgaW50ICBiYTIgPSAyNTUgLSBmYTsKKworICAgICAgICBpbnQgIGJiID0gZHN0WzQgKiB4ICsgMF07CisgICAgICAgIGludCAgYmcgPSBkc3RbNCAqIHggKyAxXTsKKyAgICAgICAgaW50ICBiciA9IGRzdFs0ICogeCArIDJdOworICAgICAgICBpbnQgIGJhID0gZHN0WzQgKiB4ICsgM107CisKKworICAgICAgICBkc3RbNCAqIHggKyAwXSA9IChGVF9CeXRlKSggYmIgKiBiYTIgLyAyNTUgKyBmYiApOworICAgICAgICBkc3RbNCAqIHggKyAxXSA9IChGVF9CeXRlKSggYmcgKiBiYTIgLyAyNTUgKyBmZyApOworICAgICAgICBkc3RbNCAqIHggKyAyXSA9IChGVF9CeXRlKSggYnIgKiBiYTIgLyAyNTUgKyBmciApOworICAgICAgICBkc3RbNCAqIHggKyAzXSA9IChGVF9CeXRlKSggYmEgKiBiYTIgLyAyNTUgKyBmYSApOworICAgICAgfQorCisgICAgICBzcmMgKz0gc3JjU2xvdC0+Yml0bWFwLnBpdGNoOworICAgICAgZHN0ICs9IGRzdFNsb3QtPmJpdG1hcC5waXRjaDsKKyAgICB9CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUyAqLworCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfdHRfY29scl9kdW1teTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUyAqLworCisvKiBFT0YgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y29sci5oIGIvc3JjL3NmbnQvdHRjb2xyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjYzA4MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zZm50L3R0Y29sci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRjb2xyLmgKKyAqCisgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBjb2xvcmVkIGdseXBoIGxheWVyIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFNoYW8gWXUgWmhhbmcgPHNoYW96aGFuZ0BmYi5jb20+LgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLworCisKKyNpZm5kZWYgX19UVENPTFJfSF9fCisjZGVmaW5lIF9fVFRDT0xSX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInR0bG9hZC5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2NvbHIoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfY29sciggVFRfRmFjZSAgZmFjZSApOworCisgIEZUX0xPQ0FMKCBGVF9Cb29sICkKKyAgdHRfZmFjZV9nZXRfY29scl9sYXllciggVFRfRmFjZSAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICBiYXNlX2dseXBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgICAgICAqYWNvbG9yX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MYXllckl0ZXJhdG9yKiAgaXRlcmF0b3IgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0dF9mYWNlX2NvbHJfYmxlbmRfbGF5ZXIoIFRUX0ZhY2UgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGNvbG9yX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgZHN0U2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNyY1Nsb3QgKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fVFRDT0xSX0hfXyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y3BhbC5jIGIvc3JjL3NmbnQvdHRjcGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiNjBlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zZm50L3R0Y3BhbC5jCkBAIC0wLDAgKzEsMzA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0Y3BhbC5jCisgKgorICogICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgY29sb3IgcGFsZXR0ZSBzdXBwb3J0IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBTaGFvIFl1IFpoYW5nIDxzaGFvemhhbmdAZmIuY29tPi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBgQ1BBTCcgdGFibGUgc3BlY2lmaWNhdGlvbjoKKyAgICoKKyAgICogICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2NwYWwuaHRtCisgICAqCisgICAqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAorI2luY2x1ZGUgRlRfQ09MT1JfSAorCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUworCisjaW5jbHVkZSAidHRjcGFsLmgiCisKKworICAvKiBOT1RFOiBUaGVzZSBhcmUgdGhlIHRhYmxlIHNpemVzIGNhbGN1bGF0ZWQgdGhyb3VnaCB0aGUgc3BlY3MuICovCisjZGVmaW5lIENQQUxfVjBfSEVBREVSX0JBU0VfU0laRSAgMTIKKyNkZWZpbmUgQ09MT1JfU0laRSAgICAgICAgICAgICAgICAgNAorCisKKyAgLyogYWxsIGRhdGEgZnJvbSBgQ1BBTCcgbm90IGNvdmVyZWQgaW4gRlRfUGFsZXR0ZV9EYXRhICovCisgIHR5cGVkZWYgc3RydWN0IENwYWxfCisgIHsKKyAgICBGVF9VU2hvcnQgIHZlcnNpb247ICAgICAgICAvKiBUYWJsZSB2ZXJzaW9uIG51bWJlciAoMCBvciAxIHN1cHBvcnRlZCkuICovCisgICAgRlRfVVNob3J0ICBudW1fY29sb3JzOyAgICAgICAgICAgICAgIC8qIFRvdGFsIG51bWJlciBvZiBjb2xvciByZWNvcmRzLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21iaW5lZCBmb3IgYWxsIHBhbGV0dGVzLiAgICAgKi8KKyAgICBGVF9CeXRlKiAgY29sb3JzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJHQkEgYXJyYXkgb2YgY29sb3JzICovCisgICAgRlRfQnl0ZSogIGNvbG9yX2luZGljZXM7IC8qIEluZGV4IG9mIGVhY2ggcGFsZXR0ZSdzIGZpcnN0IGNvbG9yIHJlY29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgY29tYmluZWQgY29sb3IgcmVjb3JkIGFycmF5LiAgICAgICAgKi8KKworICAgIC8qIFRoZSBtZW1vcnkgd2hpY2ggYmFja3MgdXAgdGhlIGBDUEFMJyB0YWJsZS4gKi8KKyAgICB2b2lkKiAgICAgdGFibGU7CisgICAgRlRfVUxvbmcgIHRhYmxlX3NpemU7CisKKyAgfSBDcGFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0Y3BhbAorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfbG9hZF9jcGFsKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKyAgICBGVF9CeXRlKiAgdGFibGUgPSBOVUxMOworICAgIEZUX0J5dGUqICBwICAgICA9IE5VTEw7CisKKyAgICBDcGFsKiAgY3BhbCA9IE5VTEw7CisKKyAgICBGVF9VTG9uZyAgY29sb3JzX29mZnNldDsKKyAgICBGVF9VTG9uZyAgdGFibGVfc2l6ZTsKKworCisgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX0NQQUwsIHN0cmVhbSwgJnRhYmxlX3NpemUgKTsKKyAgICBpZiAoIGVycm9yICkKKyAgICAgIGdvdG8gTm9DcGFsOworCisgICAgaWYgKCB0YWJsZV9zaXplIDwgQ1BBTF9WMF9IRUFERVJfQkFTRV9TSVpFICkKKyAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworCisgICAgaWYgKCBGVF9GUkFNRV9FWFRSQUNUKCB0YWJsZV9zaXplLCB0YWJsZSApICkKKyAgICAgIGdvdG8gTm9DcGFsOworCisgICAgcCA9IHRhYmxlOworCisgICAgaWYgKCBGVF9ORVcoIGNwYWwgKSApCisgICAgICBnb3RvIE5vQ3BhbDsKKworICAgIGNwYWwtPnZlcnNpb24gPSBGVF9ORVhUX1VTSE9SVCggcCApOworICAgIGlmICggY3BhbC0+dmVyc2lvbiA+IDEgKQorICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVfZW50cmllcyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyAgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgY3BhbC0+bnVtX2NvbG9ycyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisgICAgY29sb3JzX29mZnNldCAgICA9IEZUX05FWFRfVUxPTkcoIHAgKTsKKworICAgIGlmICggQ1BBTF9WMF9IRUFERVJfQkFTRV9TSVpFICAgICAgICAgICAgICsKKyAgICAgICAgIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyVSA+IHRhYmxlX3NpemUgKQorICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICBpZiAoIGNvbG9yc19vZmZzZXQgPj0gdGFibGVfc2l6ZSApCisgICAgICBnb3RvIEludmFsaWRUYWJsZTsKKyAgICBpZiAoIGNwYWwtPm51bV9jb2xvcnMgKiBDT0xPUl9TSVpFID4gdGFibGVfc2l6ZSAtIGNvbG9yc19vZmZzZXQgKQorICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICBjcGFsLT5jb2xvcl9pbmRpY2VzID0gcDsKKyAgICBjcGFsLT5jb2xvcnMgICAgICAgID0gKEZUX0J5dGUqKSggdGFibGUgKyBjb2xvcnNfb2Zmc2V0ICk7CisKKyAgICBpZiAoIGNwYWwtPnZlcnNpb24gPT0gMSApCisgICAgeworICAgICAgRlRfVUxvbmcgICAgdHlwZV9vZmZzZXQsIGxhYmVsX29mZnNldCwgZW50cnlfbGFiZWxfb2Zmc2V0OworICAgICAgRlRfVVNob3J0KiAgYXJyYXkgPSBOVUxMOworICAgICAgRlRfVVNob3J0KiAgbGltaXQ7CisgICAgICBGVF9VU2hvcnQqICBxOworCisKKyAgICAgIGlmICggQ1BBTF9WMF9IRUFERVJfQkFTRV9TSVpFICAgICAgICAgICAgICsKKyAgICAgICAgICAgZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyAqIDJVICsKKyAgICAgICAgICAgM1UgKiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gdGFibGVfc2l6ZSApCisgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworCisgICAgICBwICs9IGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyOworCisgICAgICB0eXBlX29mZnNldCAgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBsYWJlbF9vZmZzZXQgICAgICAgPSBGVF9ORVhUX1VMT05HKCBwICk7CisgICAgICBlbnRyeV9sYWJlbF9vZmZzZXQgPSBGVF9ORVhUX1VMT05HKCBwICk7CisKKyAgICAgIGlmICggdHlwZV9vZmZzZXQgKQorICAgICAgeworICAgICAgICBpZiAoIHR5cGVfb2Zmc2V0ID49IHRhYmxlX3NpemUgKQorICAgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworICAgICAgICBpZiAoIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXMgKiAyID4KKyAgICAgICAgICAgICAgIHRhYmxlX3NpemUgLSB0eXBlX29mZnNldCApCisgICAgICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICAgICAgaWYgKCBGVF9RTkVXX0FSUkFZKCBhcnJheSwgZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyApICkKKyAgICAgICAgICBnb3RvIE5vQ3BhbDsKKworICAgICAgICBwICAgICA9IHRhYmxlICsgdHlwZV9vZmZzZXQ7CisgICAgICAgIHEgICAgID0gYXJyYXk7CisgICAgICAgIGxpbWl0ID0gcSArIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZXM7CisKKyAgICAgICAgd2hpbGUgKCBxIDwgbGltaXQgKQorICAgICAgICAgICpxKysgPSBGVF9ORVhUX1VTSE9SVCggcCApOworCisgICAgICAgIGZhY2UtPnBhbGV0dGVfZGF0YS5wYWxldHRlX2ZsYWdzID0gYXJyYXk7CisgICAgICB9CisKKyAgICAgIGlmICggbGFiZWxfb2Zmc2V0ICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCBsYWJlbF9vZmZzZXQgPj0gdGFibGVfc2l6ZSApCisgICAgICAgICAgZ290byBJbnZhbGlkVGFibGU7CisgICAgICAgIGlmICggZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyAqIDIgPgorICAgICAgICAgICAgICAgdGFibGVfc2l6ZSAtIGxhYmVsX29mZnNldCApCisgICAgICAgICAgZ290byBJbnZhbGlkVGFibGU7CisKKyAgICAgICAgaWYgKCBGVF9RTkVXX0FSUkFZKCBhcnJheSwgZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyApICkKKyAgICAgICAgICBnb3RvIE5vQ3BhbDsKKworICAgICAgICBwICAgICA9IHRhYmxlICsgbGFiZWxfb2Zmc2V0OworICAgICAgICBxICAgICA9IGFycmF5OworICAgICAgICBsaW1pdCA9IHEgKyBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVzOworCisgICAgICAgIHdoaWxlICggcSA8IGxpbWl0ICkKKyAgICAgICAgICAqcSsrID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgICBmYWNlLT5wYWxldHRlX2RhdGEucGFsZXR0ZV9uYW1lX2lkcyA9IGFycmF5OworICAgICAgfQorCisgICAgICBpZiAoIGVudHJ5X2xhYmVsX29mZnNldCApCisgICAgICB7CisgICAgICAgIGlmICggZW50cnlfbGFiZWxfb2Zmc2V0ID49IHRhYmxlX3NpemUgKQorICAgICAgICAgIGdvdG8gSW52YWxpZFRhYmxlOworICAgICAgICBpZiAoIGZhY2UtPnBhbGV0dGVfZGF0YS5udW1fcGFsZXR0ZV9lbnRyaWVzICogMiA+CisgICAgICAgICAgICAgICB0YWJsZV9zaXplIC0gZW50cnlfbGFiZWxfb2Zmc2V0ICkKKyAgICAgICAgICBnb3RvIEludmFsaWRUYWJsZTsKKworICAgICAgICBpZiAoIEZUX1FORVdfQVJSQVkoIGFycmF5LCBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVfZW50cmllcyApICkKKyAgICAgICAgICBnb3RvIE5vQ3BhbDsKKworICAgICAgICBwICAgICA9IHRhYmxlICsgZW50cnlfbGFiZWxfb2Zmc2V0OworICAgICAgICBxICAgICA9IGFycmF5OworICAgICAgICBsaW1pdCA9IHEgKyBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVfZW50cmllczsKKworICAgICAgICB3aGlsZSAoIHEgPCBsaW1pdCApCisgICAgICAgICAgKnErKyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAgICAgZmFjZS0+cGFsZXR0ZV9kYXRhLnBhbGV0dGVfZW50cnlfbmFtZV9pZHMgPSBhcnJheTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBjcGFsLT50YWJsZSAgICAgID0gdGFibGU7CisgICAgY3BhbC0+dGFibGVfc2l6ZSA9IHRhYmxlX3NpemU7CisKKyAgICBmYWNlLT5jcGFsID0gY3BhbDsKKworICAgIC8qIHNldCB1cCBkZWZhdWx0IHBhbGV0dGUgKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggZmFjZS0+cGFsZXR0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlX2VudHJpZXMgKSApCisgICAgICBnb3RvIE5vQ3BhbDsKKworICAgIHR0X2ZhY2VfcGFsZXR0ZV9zZXQoIGZhY2UsIDAgKTsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgSW52YWxpZFRhYmxlOgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKworICBOb0NwYWw6CisgICAgRlRfRlJBTUVfUkVMRUFTRSggdGFibGUgKTsKKyAgICBGVF9GUkVFKCBjcGFsICk7CisKKyAgICAvKiBhcnJheXMgaW4gYGZhY2UtPnBhbGV0dGVfZGF0YScgYW5kIGBmYWNlLT5wYWxldHRlJyAqLworICAgIC8qIGFyZSBmcmVlZCBpbiBgc2ZudF9kb25lX2ZhY2UnICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHR0X2ZhY2VfZnJlZV9jcGFsKCBUVF9GYWNlICBmYWNlICkKKyAgeworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIENwYWwqICBjcGFsID0gKENwYWwqKWZhY2UtPmNwYWw7CisKKworICAgIGlmICggY3BhbCApCisgICAgeworICAgICAgRlRfRlJBTUVfUkVMRUFTRSggY3BhbC0+dGFibGUgKTsKKyAgICAgIEZUX0ZSRUUoIGNwYWwgKTsKKyAgICB9CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0dF9mYWNlX3BhbGV0dGVfc2V0KCBUVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwYWxldHRlX2luZGV4ICkKKyAgeworICAgIENwYWwqICBjcGFsID0gKENwYWwqKWZhY2UtPmNwYWw7CisKKyAgICBGVF9CeXRlKiAgIG9mZnNldDsKKyAgICBGVF9CeXRlKiAgIHA7CisKKyAgICBGVF9Db2xvciogIHE7CisgICAgRlRfQ29sb3IqICBsaW1pdDsKKworICAgIEZUX1VMb25nICByZWNvcmRfb2Zmc2V0OworCisKKyAgICBpZiAoICFjcGFsIHx8IHBhbGV0dGVfaW5kZXggPj0gZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIG9mZnNldCAgICAgICAgPSBjcGFsLT5jb2xvcl9pbmRpY2VzICsgMiAqIHBhbGV0dGVfaW5kZXg7CisgICAgcmVjb3JkX29mZnNldCA9IENPTE9SX1NJWkUgKiBGVF9QRUVLX1VTSE9SVCggb2Zmc2V0ICk7CisKKyAgICBpZiAoIHJlY29yZF9vZmZzZXQgKyBDT0xPUl9TSVpFICogZmFjZS0+cGFsZXR0ZV9kYXRhLm51bV9wYWxldHRlX2VudHJpZXMgPgorICAgICAgICAgICBjcGFsLT50YWJsZV9zaXplICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworCisgICAgcCAgICAgPSBjcGFsLT5jb2xvcnMgKyByZWNvcmRfb2Zmc2V0OworICAgIHEgICAgID0gZmFjZS0+cGFsZXR0ZTsKKyAgICBsaW1pdCA9IHEgKyBmYWNlLT5wYWxldHRlX2RhdGEubnVtX3BhbGV0dGVfZW50cmllczsKKworICAgIHdoaWxlICggcSA8IGxpbWl0ICkKKyAgICB7CisgICAgICBxLT5ibHVlICA9IEZUX05FWFRfQllURSggcCApOworICAgICAgcS0+Z3JlZW4gPSBGVF9ORVhUX0JZVEUoIHAgKTsKKyAgICAgIHEtPnJlZCAgID0gRlRfTkVYVF9CWVRFKCBwICk7CisgICAgICBxLT5hbHBoYSA9IEZUX05FWFRfQllURSggcCApOworCisgICAgICBxKys7CisgICAgfQorCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUyAqLworCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfdHRfY3BhbF9kdW1teTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUyAqLworCisvKiBFT0YgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y3BhbC5oIGIvc3JjL3NmbnQvdHRjcGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ZWYzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zZm50L3R0Y3BhbC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRjcGFsLmgKKyAqCisgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBjb2xvciBwYWxldHRlIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFNoYW8gWXUgWmhhbmcgPHNoYW96aGFuZ0BmYi5jb20+LgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLworCisKKyNpZm5kZWYgX19UVENQQUxfSF9fCisjZGVmaW5lIF9fVFRDUEFMX0hfXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgInR0bG9hZC5oIgorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgdHRfZmFjZV9sb2FkX2NwYWwoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICB0dF9mYWNlX2ZyZWVfY3BhbCggVFRfRmFjZSAgZmFjZSApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHR0X2ZhY2VfcGFsZXR0ZV9zZXQoIFRUX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIHBhbGV0dGVfaW5kZXggKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIF9fVFRDUEFMX0hfXyAqLworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0a2Vybi5jIGIvc3JjL3NmbnQvdHRrZXJuLmMKaW5kZXggNjhmMTVhMi4uNDhhZDQxNyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRrZXJuLmMKKysrIGIvc3JjL3NmbnQvdHRrZXJuLmMKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0a2Vybi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLwotLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGtlcm4uYworICoKKyAqICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUKKyAqICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgInNmZXJyb3JzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRrZXJuCiAKQEAgLTEyNyw4ICsxMjcsOCBAQAogICAgICAgYXZhaWwgfD0gbWFzazsKIAogICAgICAgLyoKLSAgICAgICAqICBOb3cgY2hlY2sgd2hldGhlciB0aGUgcGFpcnMgaW4gdGhpcyB0YWJsZSBhcmUgb3JkZXJlZC4KLSAgICAgICAqICBXZSB0aGVuIGNhbiB1c2UgYmluYXJ5IHNlYXJjaC4KKyAgICAgICAqIE5vdyBjaGVjayB3aGV0aGVyIHRoZSBwYWlycyBpbiB0aGlzIHRhYmxlIGFyZSBvcmRlcmVkLgorICAgICAgICogV2UgdGhlbiBjYW4gdXNlIGJpbmFyeSBzZWFyY2guCiAgICAgICAgKi8KICAgICAgIGlmICggbnVtX3BhaXJzID4gMCApCiAgICAgICB7CkBAIC0yODMsOCArMjgzLDggQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgICAvKgotICAgICAgICAqICBXZSBkb24ndCBzdXBwb3J0IGZvcm1hdCAyIGJlY2F1c2Ugd2UgaGF2ZW4ndCBzZWVuIGEgc2luZ2xlIGZvbnQKLSAgICAgICAgKiAgdXNpbmcgaXQgaW4gcmVhbCBsaWZlLi4uCisgICAgICAgICogV2UgZG9uJ3Qgc3VwcG9ydCBmb3JtYXQgMiBiZWNhdXNlIHdlIGhhdmVuJ3Qgc2VlbiBhIHNpbmdsZSBmb250CisgICAgICAgICogdXNpbmcgaXQgaW4gcmVhbCBsaWZlLi4uCiAgICAgICAgICovCiAKICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGtlcm4uaCBiL3NyYy9zZm50L3R0a2Vybi5oCmluZGV4IDRlNDVkMDkuLmMyNmJiOGQgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0a2Vybi5oCisrKyBiL3NyYy9zZm50L3R0a2Vybi5oCkBAIC0xLDIwICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dGtlcm4uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUgICAgICAgICAgKi8KLS8qICAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRrZXJuLmgKKyAqCisgKiAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIGtlcm5pbmcgdGFibGUuICBUaGlzIGRvZXNuJ3QgaGFuZGxlCisgKiAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUVEtFUk5fSF8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0bG9hZC5jIGIvc3JjL3NmbnQvdHRsb2FkLmMKaW5kZXggYTg2YTU0Ni4uZjNmZWQ4ZiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRsb2FkLmMKKysrIGIvc3JjL3NmbnQvdHRsb2FkLmMKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0bG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMsIGkuZS4sIHRhYmxlcyB0aGF0IGNhbiBiZSBlaXRoZXIgaW4gICAqLwotLyogICAgVFRGIG9yIE9URiBmb250cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGxvYWQuYworICoKKyAqICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluCisgKiAgIFRURiBvciBPVEYgZm9udHMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI2LDMyICsyNiwzNCBAQAogI2luY2x1ZGUgInNmZXJyb3JzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRsb2FkCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9mYWNlX2xvb2t1cF90YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb29rcyBmb3IgYSBUcnVlVHlwZSB0YWJsZSBieSBuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IEEgZmFjZSBvYmplY3QgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhZyAgOjogVGhlIHNlYXJjaGVkIHRhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgcG9pbnRlciB0byB0aGUgdGFibGUgZGlyZWN0b3J5IGVudHJ5LiAgMCBpZiBub3QgZm91bmQuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2xvb2t1cF90YWJsZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9va3MgZm9yIGEgVHJ1ZVR5cGUgdGFibGUgYnkgbmFtZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgZmFjZSBvYmplY3QgaGFuZGxlLgorICAgKgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgVGhlIHNlYXJjaGVkIHRhZy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBBIHBvaW50ZXIgdG8gdGhlIHRhYmxlIGRpcmVjdG9yeSBlbnRyeS4gIDAgaWYgbm90IGZvdW5kLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBUVF9UYWJsZSAgKQogICB0dF9mYWNlX2xvb2t1cF90YWJsZSggVFRfRmFjZSAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdGFnICApCkBAIC0xMDEsMjcgKzEwMywzMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9mYWNlX2dvdG9fdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb29rcyBmb3IgYSBUcnVlVHlwZSB0YWJsZSBieSBuYW1lLCB0aGVuIHNlZWsgYSBzdHJlYW0gdG8gaXQuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBmYWNlIG9iamVjdCBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHRhZyAgICA6OiBUaGUgc2VhcmNoZWQgdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IFRoZSBzdHJlYW0gdG8gc2VlayB3aGVuIHRoZSB0YWJsZSBpcyBmb3VuZC4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGVuZ3RoIDo6IFRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfZ290b190YWJsZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9va3MgZm9yIGEgVHJ1ZVR5cGUgdGFibGUgYnkgbmFtZSwgdGhlbiBzZWVrIGEgc3RyZWFtIHRvIGl0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBmYWNlIG9iamVjdCBoYW5kbGUuCisgICAqCisgICAqICAgdGFnIDo6CisgICAqICAgICBUaGUgc2VhcmNoZWQgdGFnLgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIHN0cmVhbSB0byBzZWVrIHdoZW4gdGhlIHRhYmxlIGlzIGZvdW5kLgorICAgKgorICAgKiBAT3V0cHV0OgorICAgKiAgIGxlbmd0aCA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgaWYgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2UuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2dvdG9fdGFibGUoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHRhZywKQEAgLTMwOSwyOCArMzE1LDMxIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9mb250X2RpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBoZWFkZXIgb2YgYSBTRk5UIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2ZudCAgICAgICA6OiBUaGUgU0ZOVCBoZWFkZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIHN0cmVhbSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb250IGRpcmVjdG9yeS4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9mb250X2RpcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZHMgdGhlIGhlYWRlciBvZiBhIFNGTlQgZm9udCBmaWxlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAgc2ZudCA6OgorICAgKiAgICAgVGhlIFNGTlQgaGVhZGVyLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIFRoZSBzdHJlYW0gY3Vyc29yIG11c3QgYmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZm9udCBkaXJlY3RvcnkuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2ZvbnRfZGlyKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQpAQCAtNDk2LDQ2ICs1MDUsNTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX2FueSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZHMgYW55IGZvbnQgdGFibGUgaW50byBjbGllbnQgbWVtb3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IFRoZSBmYWNlIG9iamVjdCB0byBsb29rIGZvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0YWcgICAgOjogVGhlIHRhZyBvZiB0YWJsZSB0byBsb2FkLiAgVXNlIHRoZSB2YWx1ZSAwIGlmIHlvdSB3YW50ICAgKi8KLSAgLyogICAgICAgICAgICAgIHRvIGFjY2VzcyB0aGUgd2hvbGUgZm9udCBmaWxlLCBlbHNlIHNldCB0aGlzIHBhcmFtZXRlciAgICovCi0gIC8qICAgICAgICAgICAgICB0byBhIHZhbGlkIFRydWVUeXBlIHRhYmxlIHRhZyB0aGF0IHlvdSBjYW4gZm9yZ2Ugd2l0aCAgICAqLwotICAvKiAgICAgICAgICAgICAgdGhlIE1BS0VfVFRfVEFHIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG9mZnNldCA6OiBUaGUgc3RhcnRpbmcgb2Zmc2V0IGluIHRoZSB0YWJsZSAob3IgdGhlIGZpbGUgaWYgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgdGFnID09IDApLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlbmd0aCA6OiBUaGUgYWRkcmVzcyBvZiB0aGUgZGVjaXNpb24gdmFyaWFibGU6ICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgSWYgbGVuZ3RoID09IE5VTEw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgTG9hZHMgdGhlIHdob2xlIHRhYmxlLiAgUmV0dXJucyBhbiBlcnJvciBpZiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGBvZmZzZXQnID09IDAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIElmICpsZW5ndGggPT0gMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIEV4aXRzIGltbWVkaWF0ZWx5OyByZXR1cm5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4gKi8KLSAgLyogICAgICAgICAgICAgICAgICB0YWJsZSBvciBvZiB0aGUgZm9udCBmaWxlLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mICovCi0gIC8qICAgICAgICAgICAgICAgICAgYHRhZycuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgSWYgKmxlbmd0aCAhPSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgTG9hZHMgdGhlIG5leHQgYGxlbmd0aCcgYnl0ZXMgb2YgdGFibGUgb3IgZm9udCwgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IG9mZnNldCBgb2Zmc2V0JyAoaW4gdGFibGUgb3IgZm9udCB0b28pLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWZmZXIgOjogVGhlIGFkZHJlc3Mgb2YgdGFyZ2V0IGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZmFjZV9sb2FkX2FueQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZHMgYW55IGZvbnQgdGFibGUgaW50byBjbGllbnQgbWVtb3J5LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZhY2Ugb2JqZWN0IHRvIGxvb2sgZm9yLgorICAgKgorICAgKiAgIHRhZyA6OgorICAgKiAgICAgVGhlIHRhZyBvZiB0YWJsZSB0byBsb2FkLiAgVXNlIHRoZSB2YWx1ZSAwIGlmIHlvdSB3YW50CisgICAqICAgICB0byBhY2Nlc3MgdGhlIHdob2xlIGZvbnQgZmlsZSwgZWxzZSBzZXQgdGhpcyBwYXJhbWV0ZXIKKyAgICogICAgIHRvIGEgdmFsaWQgVHJ1ZVR5cGUgdGFibGUgdGFnIHRoYXQgeW91IGNhbiBmb3JnZSB3aXRoCisgICAqICAgICB0aGUgTUFLRV9UVF9UQUcgbWFjcm8uCisgICAqCisgICAqICAgb2Zmc2V0IDo6CisgICAqICAgICBUaGUgc3RhcnRpbmcgb2Zmc2V0IGluIHRoZSB0YWJsZSAob3IgdGhlIGZpbGUgaWYKKyAgICogICAgIHRhZyA9PSAwKS4KKyAgICoKKyAgICogICBsZW5ndGggOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIHRoZSBkZWNpc2lvbiB2YXJpYWJsZToKKyAgICoKKyAgICogICAgIElmIGxlbmd0aCA9PSBOVUxMOgorICAgKiAgICAgICBMb2FkcyB0aGUgd2hvbGUgdGFibGUuICBSZXR1cm5zIGFuIGVycm9yIGlmCisgICAqICAgICAgIGBvZmZzZXQnID09IDAhCisgICAqCisgICAqICAgICBJZiAqbGVuZ3RoID09IDA6CisgICAqICAgICAgIEV4aXRzIGltbWVkaWF0ZWx5OyByZXR1cm5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgZ2l2ZW4KKyAgICogICAgICAgdGFibGUgb3Igb2YgdGhlIGZvbnQgZmlsZSwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgorICAgKiAgICAgICBgdGFnJy4KKyAgICoKKyAgICogICAgIElmICpsZW5ndGggIT0gMDoKKyAgICogICAgICAgTG9hZHMgdGhlIG5leHQgYGxlbmd0aCcgYnl0ZXMgb2YgdGFibGUgb3IgZm9udCwKKyAgICogICAgICAgc3RhcnRpbmcgYXQgb2Zmc2V0IGBvZmZzZXQnIChpbiB0YWJsZSBvciBmb250IHRvbykuCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAgYnVmZmVyIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0YXJnZXQgYnVmZmVyLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2FueSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIHRhZywKQEAgLTU4NiwyMiArNjAwLDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9nZW5lcmljX2hlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBUcnVlVHlwZSB0YWJsZSBgaGVhZCcgb3IgYGJoZWQnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9nZW5lcmljX2hlYWRlcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZHMgdGhlIFRydWVUeXBlIHRhYmxlIGBoZWFkJyBvciBgYmhlZCcuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIHR0X2ZhY2VfbG9hZF9nZW5lcmljX2hlYWRlciggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLApAQCAtNjc2LDIyICs2OTIsMjQgQEAKICNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9tYXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBtYXhpbXVtIHByb2ZpbGUgaW50byBhIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9tYXhwCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyB0aGUgbWF4aW11bSBwcm9maWxlIGludG8gYSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX21heHAoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICkKQEAgLTc4NCwyMiArODAyLDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBuYW1lIHJlY29yZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9uYW1lCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyB0aGUgbmFtZSByZWNvcmRzLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2xvYWRfbmFtZSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQpAQCAtOTgxLDE3ICsxMDAxLDE4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfZnJlZV9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVzIHRoZSBuYW1lIHJlY29yZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2ZyZWVfbmFtZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRnJlZXMgdGhlIG5hbWUgcmVjb3Jkcy4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICB0dF9mYWNlX2ZyZWVfbmFtZSggVFRfRmFjZSAgZmFjZSApCiAgIHsKQEAgLTEwMzAsMjMgKzEwNTEsMjUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX2NtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZHMgdGhlIGNtYXAgZGlyZWN0b3J5IGluIGEgZmFjZSBvYmplY3QuICBUaGUgY21hcHMgdGhlbXNlbHZlcyAgICovCi0gIC8qICAgIGFyZSBsb2FkZWQgb24gZGVtYW5kIGluIHRoZSBgdHRjbWFwLmMnIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9jbWFwCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyB0aGUgY21hcCBkaXJlY3RvcnkgaW4gYSBmYWNlIG9iamVjdC4gIFRoZSBjbWFwcyB0aGVtc2VsdmVzCisgICAqICAgYXJlIGxvYWRlZCBvbiBkZW1hbmQgaW4gdGhlIGB0dGNtYXAuYycgbW9kdWxlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAKICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfbG9hZF9jbWFwKCBUVF9GYWNlICAgIGZhY2UsCkBAIC0xMDY4LDIyICsxMDkxLDI0IEBACiAKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9vczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBPUzIgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9vczIKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIExvYWRzIHRoZSBPUzIgdGFibGUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfbG9hZF9vczIoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQpAQCAtMTIyOCwyMiArMTI1MywyNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9mYWNlX2xvYWRfcG9zdHNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkcyB0aGUgUG9zdHNjcmlwdCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2xvYWRfcG9zdHNjcmlwdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZHMgdGhlIFBvc3RzY3JpcHQgdGFibGUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfbG9hZF9wb3N0KCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCkBAIC0xMjg4LDIyICsxMzE1LDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9wY2x0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBQQ0wgNSBUYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9wY2x0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyB0aGUgUENMIDUgVGFibGUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfbG9hZF9wY2x0KCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCkBAIC0xMzQ5LDIyICsxMzc4LDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9nYXNwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWRzIHRoZSBgZ2FzcCcgdGFibGUgaW50byBhIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IFRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9nYXNwCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyB0aGUgYGdhc3AnIHRhYmxlIGludG8gYSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2dhc3AoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICkKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0bG9hZC5oIGIvc3JjL3NmbnQvdHRsb2FkLmgKaW5kZXggZjk0YmU4Yi4uMjFkOWNiNiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRsb2FkLmgKKysrIGIvc3JjL3NmbnQvdHRsb2FkLmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0bG9hZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSB0YWJsZXMsIGkuZS4sIHRhYmxlcyB0aGF0IGNhbiBiZSBlaXRoZXIgaW4gICAqLwotLyogICAgVFRGIG9yIE9URiBmb250cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGxvYWQuaAorICoKKyAqICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluCisgKiAgIFRURiBvciBPVEYgZm9udHMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFRUTE9BRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRtdHguYyBiL3NyYy9zZm50L3R0bXR4LmMKaW5kZXggNmRkZGE5NS4uOGVkZjRlNiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRtdHguYworKysgYi9zcmMvc2ZudC90dG10eC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dG10eC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChib2R5KS4gICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dG10eC5jCisgKgorICogICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM4LDM0ICszOCwzNyBAQAogICAvKiAgICAgICAgICAgIGJvdGggdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGhlYWRlcnMuICAgICAgICAgICAgICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dG10eAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX2htdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCB0aGUgYGhtdHgnIG9yIGB2bXR4JyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRpY2FsIDo6IEEgYm9vbGVhbiBmbGFnLiAgSWYgc2V0LCBsb2FkIGB2bXR4Jy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2xvYWRfaG10eAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZCB0aGUgYGhtdHgnIG9yIGB2bXR4JyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgYHZtdHgnLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2htdHgoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLApAQCAtMTAyLDI0ICsxMDUsMjcgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX2hoZWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCB0aGUgYGhoZWEnIG9yICd2aGVhJyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gICA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZlcnRpY2FsIDo6IEEgYm9vbGVhbiBmbGFnLiAgSWYgc2V0LCBsb2FkIGB2aGVhJy4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2xvYWRfaGhlYQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZCB0aGUgYGhoZWEnIG9yICd2aGVhJyB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgQSBib29sZWFuIGZsYWcuICBJZiBzZXQsIGxvYWQgYHZoZWEnLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2hoZWEoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtLApAQCAtMTkwLDMwICsxOTYsMzUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9nZXRfbWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJuIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIG1ldHJpY3MgaW4gZm9udCB1bml0cyBmb3IgYSAgICAgICovCi0gIC8qICAgIGdpdmVuIGdseXBoLiAgVGhlIHZhbHVlcyBhcmUgdGhlIGxlZnQgc2lkZSBiZWFyaW5nICh0b3Agc2lkZSAgICAgICAqLwotICAvKiAgICBiZWFyaW5nIGZvciB2ZXJ0aWNhbCBtZXRyaWNzKSBhbmQgYWR2YW5jZSB3aWR0aCAoYWR2YW5jZSBoZWlnaHQgICAgKi8KLSAgLyogICAgZm9yIHZlcnRpY2FsIG1ldHJpY3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgOjogQSBwb2ludGVyIHRvIHRoZSBUcnVlVHlwZSBmYWNlIHN0cnVjdHVyZS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0aWNhbCA6OiBJZiBzZXQgdG8gVFJVRSwgZ2V0IHZlcnRpY2FsIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdpbmRleCAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFiZWFyaW5nIDo6IFRoZSBiZWFyaW5nLCBlaXRoZXIgbGVmdCBzaWRlIG9yIHRvcCBzaWRlLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWFkdmFuY2UgOjogVGhlIGFkdmFuY2Ugd2lkdGggb3IgYWR2YW5jZSBoZWlnaHQsIGRlcGVuZGluZyBvbiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgIHRoZSBgdmVydGljYWwnIGZsYWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2dldF9tZXRyaWNzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm4gdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgbWV0cmljcyBpbiBmb250IHVuaXRzIGZvciBhCisgICAqICAgZ2l2ZW4gZ2x5cGguICBUaGUgdmFsdWVzIGFyZSB0aGUgbGVmdCBzaWRlIGJlYXJpbmcgKHRvcCBzaWRlCisgICAqICAgYmVhcmluZyBmb3IgdmVydGljYWwgbWV0cmljcykgYW5kIGFkdmFuY2Ugd2lkdGggKGFkdmFuY2UgaGVpZ2h0CisgICAqICAgZm9yIHZlcnRpY2FsIG1ldHJpY3MpLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBUcnVlVHlwZSBmYWNlIHN0cnVjdHVyZS4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgSWYgc2V0IHRvIFRSVUUsIGdldCB2ZXJ0aWNhbCBtZXRyaWNzLgorICAgKgorICAgKiAgIGdpbmRleCA6OgorICAgKiAgICAgVGhlIGdseXBoIGluZGV4LgorICAgKgorICAgKiBAT3V0cHV0OgorICAgKiAgIGFiZWFyaW5nIDo6CisgICAqICAgICBUaGUgYmVhcmluZywgZWl0aGVyIGxlZnQgc2lkZSBvciB0b3Agc2lkZS4KKyAgICoKKyAgICogICBhYWR2YW5jZSA6OgorICAgKiAgICAgVGhlIGFkdmFuY2Ugd2lkdGggb3IgYWR2YW5jZSBoZWlnaHQsIGRlcGVuZGluZyBvbgorICAgKiAgICAgdGhlIGB2ZXJ0aWNhbCcgZmxhZy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgIHZlcnRpY2FsLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRtdHguaCBiL3NyYy9zZm50L3R0bXR4LmgKaW5kZXggYWIwMGFjZC4uZjM2MGI0NSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRtdHguaAorKysgYi9zcmMvc2ZudC90dG10eC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dG10eC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dG10eC5oCisgKgorICogICBMb2FkIHRoZSBtZXRyaWNzIHRhYmxlcyBjb21tb24gdG8gVFRGIGFuZCBPVEYgZm9udHMgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFRUTVRYX0hfCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHBvc3QuYyBiL3NyYy9zZm50L3R0cG9zdC5jCmluZGV4IDZkZTk5ZWYuLjcxNDgzMDEgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0cG9zdC5jCisrKyBiL3NyYy9zZm50L3R0cG9zdC5jCkBAIC0xLDI4ICsxLDI4IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dHBvc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgKi8KLS8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRwb3N0LmMKKyAqCisgKiAgIFBvc3RTY3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMKKyAqICAgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBwb3N0IHRhYmxlIGlzIG5vdCBjb21wbGV0ZWx5IGxvYWRlZCBieSB0aGUgY29yZSBlbmdpbmUuICBUaGlzICAgICAqLwotICAvKiBmaWxlIGxvYWRzIHRoZSBtaXNzaW5nIFBTIGdseXBoIG5hbWVzIGFuZCBpbXBsZW1lbnRzIGFuIEFQSSB0byBhY2Nlc3MgKi8KLSAgLyogdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBwb3N0IHRhYmxlIGlzIG5vdCBjb21wbGV0ZWx5IGxvYWRlZCBieSB0aGUgY29yZSBlbmdpbmUuICBUaGlzCisgICAqIGZpbGUgbG9hZHMgdGhlIG1pc3NpbmcgUFMgZ2x5cGggbmFtZXMgYW5kIGltcGxlbWVudHMgYW4gQVBJIHRvIGFjY2VzcworICAgKiB0aGVtLgorICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM4LDEyICszOCwxMiBAQAogI2luY2x1ZGUgInNmZXJyb3JzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRwb3N0CiAKQEAgLTQ1OSwyOCArNDU5LDMxIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfZ2V0X3BzX25hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lIG9mIGEgZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaWR4ICAgIDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUFNuYW1lIDo6IFRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nIHBvaW50ZXIuICBVbmRlZmluZWQgaW4gY2FzZSBvZiAgICovCi0gIC8qICAgICAgICAgICAgICBlcnJvciwgb3RoZXJ3aXNlIGl0IGlzIGEgcG9pbnRlciB0byB0aGUgZ2x5cGggbmFtZS4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIFlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIHJldHVybmVkIHN0cmluZyEgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfZ2V0X3BzX25hbWUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEdldCB0aGUgUG9zdFNjcmlwdCBnbHlwaCBuYW1lIG9mIGEgZ2x5cGguCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2UuCisgICAqCisgICAqICAgaWR4IDo6CisgICAqICAgICBUaGUgZ2x5cGggaW5kZXguCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBQU25hbWUgOjoKKyAgICogICAgIFRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nIHBvaW50ZXIuICBVbmRlZmluZWQgaW4gY2FzZSBvZgorICAgKiAgICAgZXJyb3IsIG90aGVyd2lzZSBpdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGdseXBoIG5hbWUuCisgICAqCisgICAqICAgICBZb3UgbXVzdCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzdHJpbmchCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2dldF9wc19uYW1lKCBUVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGlkeCwKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0cG9zdC5oIGIvc3JjL3NmbnQvdHRwb3N0LmgKaW5kZXggM2JlYzA3ZS4uYTZmMmNmMiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRwb3N0LmgKKysrIGIvc3JjL3NmbnQvdHRwb3N0LmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0cG9zdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0U2NyaXB0IG5hbWUgdGFibGUgcHJvY2Vzc2luZyBmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzICAgICAqLwotLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dHBvc3QuaAorICoKKyAqICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cworICogICAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRQT1NUX0hfCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHNiaXQuYyBiL3NyYy9zZm50L3R0c2JpdC5jCmluZGV4IDUzZTYxNzUuLjMyMmMwMDAgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0c2JpdC5jCisrKyBiL3NyYy9zZm50L3R0c2JpdC5jCkBAIC0xLDIyICsxLDIyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dHNiaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEdvb2dsZSBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dHNiaXQuYworICoKKyAqICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zNiwxMiArMzYsMTIgQEAKICNpbmNsdWRlICJwbmdzaGltLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRzYml0CiAKQEAgLTEyOSw4ICsxMjksOCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoKLSAgICAgICAgICogIENvdW50IHRoZSBudW1iZXIgb2Ygc3RyaWtlcyBhdmFpbGFibGUgaW4gdGhlIHRhYmxlLiAgV2UgYXJlIGEgYml0Ci0gICAgICAgICAqICBwYXJhbm9pZCB0aGVyZSBhbmQgZG9uJ3QgdHJ1c3QgdGhlIGRhdGEuCisgICAgICAgICAqIENvdW50IHRoZSBudW1iZXIgb2Ygc3RyaWtlcyBhdmFpbGFibGUgaW4gdGhlIHRhYmxlLiAgV2UgYXJlIGEgYml0CisgICAgICAgICAqIHBhcmFub2lkIHRoZXJlIGFuZCBkb24ndCB0cnVzdCB0aGUgZGF0YS4KICAgICAgICAgICovCiAgICAgICAgIGNvdW50ID0gKEZUX1VJbnQpbnVtX3N0cmlrZXM7CiAgICAgICAgIGlmICggOCArIDQ4VUwgKiBjb3VudCA+IHRhYmxlX3NpemUgKQpAQCAtMTgyLDggKzE4Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIiBleHBlY3QgYmFkIHJlbmRlcmluZyByZXN1bHRzXG4iICkpOwogCiAgICAgICAgIC8qCi0gICAgICAgICAqICBDb3VudCB0aGUgbnVtYmVyIG9mIHN0cmlrZXMgYXZhaWxhYmxlIGluIHRoZSB0YWJsZS4gIFdlIGFyZSBhIGJpdAotICAgICAgICAgKiAgcGFyYW5vaWQgdGhlcmUgYW5kIGRvbid0IHRydXN0IHRoZSBkYXRhLgorICAgICAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHN0cmlrZXMgYXZhaWxhYmxlIGluIHRoZSB0YWJsZS4gIFdlIGFyZSBhIGJpdAorICAgICAgICAgKiBwYXJhbm9pZCB0aGVyZSBhbmQgZG9uJ3QgdHJ1c3QgdGhlIGRhdGEuCiAgICAgICAgICAqLwogICAgICAgICBjb3VudCA9IChGVF9VSW50KW51bV9zdHJpa2VzOwogICAgICAgICBpZiAoIDggKyA0VUwgKiBjb3VudCA+IHRhYmxlX3NpemUgKQpAQCAtMTUxNCw3ICsxNTE0LDcgQEAKICAgICBGVF9GUkFNRV9FWElUKCk7CiAKICAgICBpZiAoIGdseXBoX3N0YXJ0ID09IGdseXBoX2VuZCApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19CaXRtYXAgKTsKICAgICBpZiAoIGdseXBoX3N0YXJ0ID4gZ2x5cGhfZW5kICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgIGdseXBoX2VuZCAtIGdseXBoX3N0YXJ0IDwgOCAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgIGZhY2UtPmViZHRfc2l6ZSAtIHN0cmlrZV9vZmZzZXQgPCBnbHlwaF9lbmQgKQpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRzYml0LmggYi9zcmMvc2ZudC90dHNiaXQuaAppbmRleCBjZTJhZjNjLi45OWJmNTYwIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dHNiaXQuaAorKysgYi9zcmMvc2ZudC90dHNiaXQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRzYml0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRzYml0LmgKKyAqCisgKiAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRTQklUX0hfCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL2Z0Z3JheXMuYyBiL3NyYy9zbW9vdGgvZnRncmF5cy5jCmluZGV4IDZjZTZmODYuLjhmMmE2MDAgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRncmF5cy5jCisrKyBiL3NyYy9zbW9vdGgvZnRncmF5cy5jCkBAIC0xLDkyICsxLDkyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQSBuZXcgYHBlcmZlY3QnIGFudGktYWxpYXNpbmcgcmVuZGVyZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdGdyYXlzLmMKKyAqCisgKiAgIEEgbmV3IGBwZXJmZWN0JyBhbnRpLWFsaWFzaW5nIHJlbmRlcmVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHJlc3Qgb2YgdGhlIEZyZWVUeXBlIGVuZ2luZSwgYnkgKi8KLSAgLyogZGVmaW5pbmcgdGhlIFNUQU5EQUxPTkVfIG1hY3JvIHdoZW4gY29tcGlsaW5nIGl0LiAgWW91IGFsc28gbmVlZCB0byAgICovCi0gIC8qIHB1dCB0aGUgZmlsZXMgYGZ0Z3JheXMuaCcgYW5kIGBmdGltYWdlLmgnIGludG8gdGhlIGN1cnJlbnQgICAgICAgICAgICAqLwotICAvKiBjb21waWxhdGlvbiBkaXJlY3RvcnkuICBUeXBpY2FsbHksIHlvdSBjb3VsZCBkbyBzb21ldGhpbmcgbGlrZSAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gY29weSBgc3JjL3Ntb290aC9mdGdyYXlzLmMnICh0aGlzIGZpbGUpIHRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBjb3B5IGBpbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCcgYW5kIGBzcmMvc21vb3RoL2Z0Z3JheXMuaCcgdG8gdGhlICovCi0gIC8qICAgc2FtZSBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogLSBjb21waWxlIGBmdGdyYXlzJyB3aXRoIHRoZSBTVEFOREFMT05FXyBtYWNybyBkZWZpbmVkLCBhcyBpbiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgY2MgLWMgLURTVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSByZW5kZXJlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBgZnRfZ3JheV9yYXN0ZXIucmFzdGVyX25ldyc7IGFuIGFudGktYWxpYXNlZCBiaXRtYXAgY2FuIGJlIGdlbmVyYXRlZCAgKi8KLSAgLyogd2l0aCBhIGNhbGwgdG8gYGZ0X2dyYXlfcmFzdGVyLnJhc3Rlcl9yZW5kZXInLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTZWUgdGhlIGNvbW1lbnRzIGFuZCBkb2N1bWVudGF0aW9uIGluIHRoZSBmaWxlIGBmdGltYWdlLmgnIGZvciBtb3JlICAgKi8KLSAgLyogZGV0YWlscyBvbiBob3cgdGhlIHJhc3RlciB3b3Jrcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCB0aGUgcmVzdCBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLCBieQorICAgKiBkZWZpbmluZyB0aGUgU1RBTkRBTE9ORV8gbWFjcm8gd2hlbiBjb21waWxpbmcgaXQuICBZb3UgYWxzbyBuZWVkIHRvCisgICAqIHB1dCB0aGUgZmlsZXMgYGZ0Z3JheXMuaCcgYW5kIGBmdGltYWdlLmgnIGludG8gdGhlIGN1cnJlbnQKKyAgICogY29tcGlsYXRpb24gZGlyZWN0b3J5LiAgVHlwaWNhbGx5LCB5b3UgY291bGQgZG8gc29tZXRoaW5nIGxpa2UKKyAgICoKKyAgICogLSBjb3B5IGBzcmMvc21vb3RoL2Z0Z3JheXMuYycgKHRoaXMgZmlsZSkgdG8geW91ciBjdXJyZW50IGRpcmVjdG9yeQorICAgKgorICAgKiAtIGNvcHkgYGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9zbW9vdGgvZnRncmF5cy5oJyB0byB0aGUKKyAgICogICBzYW1lIGRpcmVjdG9yeQorICAgKgorICAgKiAtIGNvbXBpbGUgYGZ0Z3JheXMnIHdpdGggdGhlIFNUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluCisgICAqCisgICAqICAgICBjYyAtYyAtRFNUQU5EQUxPTkVfIGZ0Z3JheXMuYworICAgKgorICAgKiBUaGUgcmVuZGVyZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYSBjYWxsIHRvCisgICAqIGBmdF9ncmF5X3Jhc3Rlci5yYXN0ZXJfbmV3JzsgYW4gYW50aS1hbGlhc2VkIGJpdG1hcCBjYW4gYmUgZ2VuZXJhdGVkCisgICAqIHdpdGggYSBjYWxsIHRvIGBmdF9ncmF5X3Jhc3Rlci5yYXN0ZXJfcmVuZGVyJy4KKyAgICoKKyAgICogU2VlIHRoZSBjb21tZW50cyBhbmQgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZmlsZSBgZnRpbWFnZS5oJyBmb3IgbW9yZQorICAgKiBkZXRhaWxzIG9uIGhvdyB0aGUgcmFzdGVyIHdvcmtzLgorICAgKgorICAgKi8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgaXMgYSBuZXcgYW50aS1hbGlhc2luZyBzY2FuLWNvbnZlcnRlciBmb3IgRnJlZVR5cGUgMi4gIFRoZSAgICAgICAqLwotICAvKiBhbGdvcml0aG0gdXNlZCBoZXJlIGlzIF92ZXJ5XyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIGluIHRoZSBzdGFuZGFyZCAgKi8KLSAgLyogYGZ0cmFzdGVyJyBtb2R1bGUuICBBY3R1YWxseSwgYGZ0Z3JheXMnIGNvbXB1dGVzIHRoZSBfZXhhY3RfICAgICAgICAgICovCi0gIC8qIGNvdmVyYWdlIG9mIHRoZSBvdXRsaW5lIG9uIGVhY2ggcGl4ZWwgY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSXQgaXMgYmFzZWQgb24gaWRlYXMgdGhhdCBJIGluaXRpYWxseSBmb3VuZCBpbiBSYXBoIExldmllbidzICAgICAgICAgICovCi0gIC8qIGV4Y2VsbGVudCBMaWJBcnQgZ3JhcGhpY3MgbGlicmFyeSAoc2VlIGh0dHA6Ly93d3cubGV2aWVuLmNvbS9saWJhcnQgICAqLwotICAvKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgdGhvdWdoIHRoZSB3ZWIgcGFnZXMgZG8gbm90IHRlbGwgYW55dGhpbmcgICAgICAgKi8KLSAgLyogYWJvdXQgdGhlIHJlbmRlcmVyOyB5b3UnbGwgaGF2ZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvICAgICAgICovCi0gIC8qIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIGlzIGEgX3ZlcnlfIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICovCi0gIC8qIGNvbXBhcmVkIHRvIFJhcGgncy4gIENvdmVyYWdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIHZlcnkgICAgICAgICAqLwotICAvKiBkaWZmZXJlbnQgd2F5LCBhbmQgSSBkb24ndCB1c2Ugc29ydGVkIHZlY3RvciBwYXRocy4gIEFsc28sIGl0IGRvZXNuJ3QgKi8KLSAgLyogdXNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIHJlbmRlcmVyIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gSXQgZG9lc24ndCBuZWVkIGFuIGludGVybWVkaWF0ZSBiaXRtYXAuICBJbnN0ZWFkLCBvbmUgY2FuIHN1cHBseSBhICAqLwotICAvKiAgIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHJlbmRlcmVyIHRvIGRyYXcgZ3JheSAgKi8KLSAgLyogICBzcGFucyBvbiBhbnkgdGFyZ2V0IHN1cmZhY2UuICBZb3UgY2FuIHRodXMgZG8gZGlyZWN0IGNvbXBvc2l0aW9uIG9uICovCi0gIC8qICAgYW55IGtpbmQgb2YgYml0bWFwLCBwcm92aWRlZCB0aGF0IHlvdSBnaXZlIHRoZSByZW5kZXJlciB0aGUgcmlnaHQgICAqLwotICAvKiAgIGNhbGxiYWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gQSBwZXJmZWN0IGFudGktYWxpYXNlciwgaS5lLiwgaXQgY29tcHV0ZXMgdGhlIF9leGFjdF8gY292ZXJhZ2Ugb24gICAqLwotICAvKiAgIGVhY2ggcGl4ZWwgY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gSXQgcGVyZm9ybXMgYSBzaW5nbGUgcGFzcyBvbiB0aGUgb3V0bGluZSAodGhlIGBzdGFuZGFyZCcgRlQyICAgICAgICAqLwotICAvKiAgIHJlbmRlcmVyIG1ha2VzIHR3byBwYXNzZXMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gSXQgY2FuIGVhc2lseSBiZSBtb2RpZmllZCB0byByZW5kZXIgdG8gX2FueV8gbnVtYmVyIG9mIGdyYXkgbGV2ZWxzICAqLwotICAvKiAgIGNoZWFwbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gRm9yIHNtYWxsICg8IDIwKSBwaXhlbCBzaXplcywgaXQgaXMgZmFzdGVyIHRoYW4gdGhlIHN0YW5kYXJkICAgICAgICAqLwotICAvKiAgIHJlbmRlcmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBpcyBhIG5ldyBhbnRpLWFsaWFzaW5nIHNjYW4tY29udmVydGVyIGZvciBGcmVlVHlwZSAyLiAgVGhlCisgICAqIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgX3ZlcnlfIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgaW4gdGhlIHN0YW5kYXJkCisgICAqIGBmdHJhc3RlcicgbW9kdWxlLiAgQWN0dWFsbHksIGBmdGdyYXlzJyBjb21wdXRlcyB0aGUgX2V4YWN0XworICAgKiBjb3ZlcmFnZSBvZiB0aGUgb3V0bGluZSBvbiBlYWNoIHBpeGVsIGNlbGwuCisgICAqCisgICAqIEl0IGlzIGJhc2VkIG9uIGlkZWFzIHRoYXQgSSBpbml0aWFsbHkgZm91bmQgaW4gUmFwaCBMZXZpZW4ncworICAgKiBleGNlbGxlbnQgTGliQXJ0IGdyYXBoaWNzIGxpYnJhcnkgKHNlZSBodHRwOi8vd3d3Lmxldmllbi5jb20vbGliYXJ0CisgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLCB0aG91Z2ggdGhlIHdlYiBwYWdlcyBkbyBub3QgdGVsbCBhbnl0aGluZworICAgKiBhYm91dCB0aGUgcmVuZGVyZXI7IHlvdSdsbCBoYXZlIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8KKyAgICogdW5kZXJzdGFuZCBob3cgaXQgd29ya3MpLgorICAgKgorICAgKiBOb3RlLCBob3dldmVyLCB0aGF0IHRoaXMgaXMgYSBfdmVyeV8gZGlmZmVyZW50IGltcGxlbWVudGF0aW9uCisgICAqIGNvbXBhcmVkIHRvIFJhcGgncy4gIENvdmVyYWdlIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIHZlcnkKKyAgICogZGlmZmVyZW50IHdheSwgYW5kIEkgZG9uJ3QgdXNlIHNvcnRlZCB2ZWN0b3IgcGF0aHMuICBBbHNvLCBpdCBkb2Vzbid0CisgICAqIHVzZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuCisgICAqCisgICAqIFRoaXMgcmVuZGVyZXIgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKyAgICoKKyAgICogLSBJdCBkb2Vzbid0IG5lZWQgYW4gaW50ZXJtZWRpYXRlIGJpdG1hcC4gIEluc3RlYWQsIG9uZSBjYW4gc3VwcGx5IGEKKyAgICogICBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSByZW5kZXJlciB0byBkcmF3IGdyYXkKKyAgICogICBzcGFucyBvbiBhbnkgdGFyZ2V0IHN1cmZhY2UuICBZb3UgY2FuIHRodXMgZG8gZGlyZWN0IGNvbXBvc2l0aW9uIG9uCisgICAqICAgYW55IGtpbmQgb2YgYml0bWFwLCBwcm92aWRlZCB0aGF0IHlvdSBnaXZlIHRoZSByZW5kZXJlciB0aGUgcmlnaHQKKyAgICogICBjYWxsYmFjay4KKyAgICoKKyAgICogLSBBIHBlcmZlY3QgYW50aS1hbGlhc2VyLCBpLmUuLCBpdCBjb21wdXRlcyB0aGUgX2V4YWN0XyBjb3ZlcmFnZSBvbgorICAgKiAgIGVhY2ggcGl4ZWwgY2VsbC4KKyAgICoKKyAgICogLSBJdCBwZXJmb3JtcyBhIHNpbmdsZSBwYXNzIG9uIHRoZSBvdXRsaW5lICh0aGUgYHN0YW5kYXJkJyBGVDIKKyAgICogICByZW5kZXJlciBtYWtlcyB0d28gcGFzc2VzKS4KKyAgICoKKyAgICogLSBJdCBjYW4gZWFzaWx5IGJlIG1vZGlmaWVkIHRvIHJlbmRlciB0byBfYW55XyBudW1iZXIgb2YgZ3JheSBsZXZlbHMKKyAgICogICBjaGVhcGx5LgorICAgKgorICAgKiAtIEZvciBzbWFsbCAoPCAyMCkgcGl4ZWwgc2l6ZXMsIGl0IGlzIGZhc3RlciB0aGFuIHRoZSBzdGFuZGFyZAorICAgKiAgIHJlbmRlcmVyLgorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zbW9vdGgKIApAQCAtMTEyLDkgKzExMiw5IEBACiAKIAogICAvKgotICAgKiAgQXBwcm94aW1hdGUgc3FydCh4KngreSp5KSB1c2luZyB0aGUgYGFscGhhIG1heCBwbHVzIGJldGEgbWluJwotICAgKiAgYWxnb3JpdGhtLiAgV2UgdXNlIGFscGhhID0gMSwgYmV0YSA9IDMvOCwgZ2l2aW5nIHVzIHJlc3VsdHMgd2l0aCBhCi0gICAqICBsYXJnZXN0IGVycm9yIGxlc3MgdGhhbiA3JSBjb21wYXJlZCB0byB0aGUgZXhhY3QgdmFsdWUuCisgICAqIEFwcHJveGltYXRlIHNxcnQoeCp4K3kqeSkgdXNpbmcgdGhlIGBhbHBoYSBtYXggcGx1cyBiZXRhIG1pbicKKyAgICogYWxnb3JpdGhtLiAgV2UgdXNlIGFscGhhID0gMSwgYmV0YSA9IDMvOCwgZ2l2aW5nIHVzIHJlc3VsdHMgd2l0aCBhCisgICAqIGxhcmdlc3QgZXJyb3IgbGVzcyB0aGFuIDclIGNvbXBhcmVkIHRvIHRoZSBleGFjdCB2YWx1ZS4KICAgICovCiAjZGVmaW5lIEZUX0hZUE9UKCB4LCB5ICkgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIHggPSBGVF9BQlMoIHggKSwgICAgICAgICAgICAgXApAQCAtMjc5LDggKzI3OSw2IEBACiAKICNpbmNsdWRlICJmdHNtZXJycy5oIgogCi0jaW5jbHVkZSAiZnRzcGljLmgiCi0KICNkZWZpbmUgU21vb3RoX0Vycl9JbnZhbGlkX01vZGUgICAgIFNtb290aF9FcnJfQ2Fubm90X1JlbmRlcl9HbHlwaAogI2RlZmluZSBTbW9vdGhfRXJyX01lbW9yeV9PdmVyZmxvdyAgU21vb3RoX0Vycl9PdXRfT2ZfTWVtb3J5CiAjZGVmaW5lIEVyclJhc3Rlcl9NZW1vcnlfT3ZlcmZsb3cgICBTbW9vdGhfRXJyX091dF9PZl9NZW1vcnkKQEAgLTM5NSwxNiArMzkzLDE2IEBACiAgICAgKCBzaXplb2YoIGxvbmcgKSAqIEZUX0NIQVJfQklUIC0gUElYRUxfQklUUyApICkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUWVBFIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVFlQRSBERUZJTklUSU9OUworICAgKi8KIAogICAvKiBkb24ndCBjaGFuZ2UgdGhlIGZvbGxvd2luZyB0eXBlcyB0byBGVF9JbnQgb3IgRlRfUG9zLCBzaW5jZSB3ZSBtaWdodCAqLwogICAvKiBuZWVkIHRvIGRlZmluZSB0aGVtIHRvICJmbG9hdCIgb3IgImRvdWJsZSIgd2hlbiBleHBlcmltZW50aW5nIHdpdGggICAqLwogICAvKiBuZXcgYWxnb3JpdGhtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHR5cGVkZWYgbG9uZyAgVFBvczsgICAgIC8qIHN1Yi1waXhlbCBjb29yZGluYXRlICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGxvbmcgIFRQb3M7ICAgICAvKiBzdWJwaXhlbCBjb29yZGluYXRlICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBpbnQgICBUQ29vcmQ7ICAgLyogaW50ZWdlciBzY2FubGluZS9waXhlbCBjb29yZGluYXRlICovCiAgIHR5cGVkZWYgaW50ICAgVEFyZWE7ICAgIC8qIGNlbGwgYXJlYXMsIGNvb3JkaW5hdGUgcHJvZHVjdHMgICAqLwogCkBAIC01MTYsMTAgKzUxNCwxMCBAQAogI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJlY29yZCB0aGUgY3VycmVudCBjZWxsIGluIHRoZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJlY29yZCB0aGUgY3VycmVudCBjZWxsIGluIHRoZSB0YWJsZS4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19BUkcgKQogICB7CkBAIC01NjEsMTAgKzU1OSwxMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNldCB0aGUgY3VycmVudCBjZWxsIHRvIGEgbmV3IHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNldCB0aGUgY3VycmVudCBjZWxsIHRvIGEgbmV3IHBvc2l0aW9uLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgZ3JheV9zZXRfY2VsbCggUkFTX0FSR18gVENvb3JkICBleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVENvb3JkICBleSApCkBAIC01OTgsMTAgKzU5NiwxMCBAQAogCiAjaWZuZGVmIEZUX0xPTkc2NAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUmVuZGVyIGEgc2NhbmxpbmUgYXMgb25lIG9yIG1vcmUgY2VsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUmVuZGVyIGEgc2NhbmxpbmUgYXMgb25lIG9yIG1vcmUgY2VsbHMuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX0FSR18gVENvb3JkICBleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQb3MgICAgeDEsCkBAIC02OTYsMTAgKzY5NCwxMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJlbmRlciBhIGdpdmVuIGxpbmUgYXMgYSBzZXJpZXMgb2Ygc2NhbmxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJlbmRlciBhIGdpdmVuIGxpbmUgYXMgYSBzZXJpZXMgb2Ygc2NhbmxpbmVzLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX0FSR18gVFBvcyAgdG9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgdG9feSApCkBAIC04MzcsMTAgKzgzNSwxMCBAQAogCiAjZWxzZQogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUmVuZGVyIGEgc3RyYWlnaHQgbGluZSBhY3Jvc3MgbXVsdGlwbGUgY2VsbHMgaW4gYW55IGRpcmVjdGlvbi4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUmVuZGVyIGEgc3RyYWlnaHQgbGluZSBhY3Jvc3MgbXVsdGlwbGUgY2VsbHMgaW4gYW55IGRpcmVjdGlvbi4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIGdyYXlfcmVuZGVyX2xpbmUoIFJBU19BUkdfIFRQb3MgIHRvX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQb3MgIHRvX3kgKQpAQCAtMTMzMCw0MCArMTMyOCw0MyBAQAogCiAjaWZkZWYgU1RBTkRBTE9ORV8KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBzaG91bGQgb25seSBjb21waWxlIGluIHN0YW5kLWFsb25lIG1vZGUsICAgICAqLwotICAvKiAgaS5lLiwgd2hlbiBidWlsZGluZyB0aGlzIGNvbXBvbmVudCB3aXRob3V0IHRoZSByZXN0IG9mIEZyZWVUeXBlLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgY29tcGlsZSBpbiBzdGFuZC1hbG9uZSBtb2RlLAorICAgKiBpLmUuLCB3aGVuIGJ1aWxkaW5nIHRoaXMgY29tcG9uZW50IHdpdGhvdXQgdGhlIHJlc3Qgb2YgRnJlZVR5cGUuCisgICAqCisgICAqLwogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfRGVjb21wb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdhbGsgb3ZlciBhbiBvdXRsaW5lJ3Mgc3RydWN0dXJlIHRvIGRlY29tcG9zZSBpdCBpbnRvIGluZGl2aWR1YWwgICAqLwotICAvKiAgICBzZWdtZW50cyBhbmQgQsOpemllciBhcmNzLiAgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGFibGUgdG8gZW1pdCAgICAgICovCi0gIC8qICAgIGBtb3ZlIHRvJyBhbmQgYGNsb3NlIHRvJyBvcGVyYXRpb25zIHRvIGluZGljYXRlIHRoZSBzdGFydCBhbmQgZW5kICAqLwotICAvKiAgICBvZiBuZXcgY29udG91cnMgaW4gdGhlIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvdXRsaW5lICAgICAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSB0YXJnZXQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ1bmNfaW50ZXJmYWNlIDo6IEEgdGFibGUgb2YgYGVtaXR0ZXJzJywgaS5lLiwgZnVuY3Rpb24gcG9pbnRlcnMgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgZHVyaW5nIGRlY29tcG9zaXRpb24gdG8gaW5kaWNhdGUgcGF0aCAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdXNlciAgICAgICAgICAgOjogQSB0eXBlbGVzcyBwb2ludGVyIHdoaWNoIGlzIHBhc3NlZCB0byBlYWNoICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIgZHVyaW5nIHRoZSBkZWNvbXBvc2l0aW9uLiAgSXQgY2FuIGJlICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHN0b3JlIHRoZSBzdGF0ZSBkdXJpbmcgdGhlICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgZGVjb21wb3NpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEZUX091dGxpbmVfRGVjb21wb3NlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBXYWxrIG92ZXIgYW4gb3V0bGluZSdzIHN0cnVjdHVyZSB0byBkZWNvbXBvc2UgaXQgaW50byBpbmRpdmlkdWFsCisgICAqICAgc2VnbWVudHMgYW5kIELDqXppZXIgYXJjcy4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhYmxlIHRvIGVtaXQKKyAgICogICBgbW92ZSB0bycgYW5kIGBjbG9zZSB0bycgb3BlcmF0aW9ucyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZAorICAgKiAgIG9mIG5ldyBjb250b3VycyBpbiB0aGUgb3V0bGluZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIG91dGxpbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgc291cmNlIHRhcmdldC4KKyAgICoKKyAgICogICBmdW5jX2ludGVyZmFjZSA6OgorICAgKiAgICAgQSB0YWJsZSBvZiBgZW1pdHRlcnMnLCBpLmUuLCBmdW5jdGlvbiBwb2ludGVycworICAgKiAgICAgY2FsbGVkIGR1cmluZyBkZWNvbXBvc2l0aW9uIHRvIGluZGljYXRlIHBhdGgKKyAgICogICAgIG9wZXJhdGlvbnMuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICB1c2VyIDo6CisgICAqICAgICBBIHR5cGVsZXNzIHBvaW50ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIGVhY2gKKyAgICogICAgIGVtaXR0ZXIgZHVyaW5nIHRoZSBkZWNvbXBvc2l0aW9uLiAgSXQgY2FuIGJlCisgICAqICAgICB1c2VkIHRvIHN0b3JlIHRoZSBzdGF0ZSBkdXJpbmcgdGhlCisgICAqICAgICBkZWNvbXBvc2l0aW9uLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBzdGF0aWMgaW50CiAgIEZUX091dGxpbmVfRGVjb21wb3NlKCBjb25zdCBGVF9PdXRsaW5lKiAgICAgICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX091dGxpbmVfRnVuY3MqICBmdW5jX2ludGVyZmFjZSwKQEAgLTE2MTAsODEgKzE2MTEsNiBAQAogICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CiAgIH0KIAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX091dGxpbmVfR2V0X0NCb3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybiBhbiBvdXRsaW5lJ3MgYGNvbnRyb2wgYm94Jy4gIFRoZSBjb250cm9sIGJveCBlbmNsb3NlcyBhbGwgICAqLwotICAvKiAgICB0aGUgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIELDqXppZXIgY29udHJvbCBwb2ludHMuICBUaG91Z2ggaXQgICovCi0gIC8qICAgIGNvaW5jaWRlcyB3aXRoIHRoZSBleGFjdCBib3VuZGluZyBib3ggZm9yIG1vc3QgZ2x5cGhzLCBpdCBjYW4gYmUgICAqLwotICAvKiAgICBzbGlnaHRseSBsYXJnZXIgaW4gc29tZSBzaXR1YXRpb25zIChsaWtlIHdoZW4gcm90YXRpbmcgYW4gb3V0bGluZSAgKi8KLSAgLyogICAgdGhhdCBjb250YWlucyBCw6l6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCi0gIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLwotICAvKiAgICBhbmQgYXJjcyBpbiB0aGUgb3V0bGluZS4gIFRvIGdldCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgICAgICAgKi8KLSAgLyogICAgYGZ0YmJveCcgY29tcG9uZW50LCB3aGljaCBpcyBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgdGFzay4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb3V0bGluZSA6OiBBIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvdXRsaW5lIGRlc2NyaXB0b3IuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYWNib3ggICA6OiBUaGUgb3V0bGluZSdzIGNvbnRyb2wgYm94LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2VlIEBGVF9HbHlwaF9HZXRfQ0JveCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRyaWNreSBmb250cy4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIHN0YXRpYyB2b2lkCi0gIEZUX091dGxpbmVfR2V0X0NCb3goIGNvbnN0IEZUX091dGxpbmUqICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICBGVF9CQm94ICAgICAgICAgICAqYWNib3ggKQotICB7Ci0gICAgVFBvcyAgeE1pbiwgeU1pbiwgeE1heCwgeU1heDsKLQotCi0gICAgaWYgKCBvdXRsaW5lICYmIGFjYm94ICkKLSAgICB7Ci0gICAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID09IDAgKQotICAgICAgewotICAgICAgICB4TWluID0gMDsKLSAgICAgICAgeU1pbiA9IDA7Ci0gICAgICAgIHhNYXggPSAwOwotICAgICAgICB5TWF4ID0gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgRlRfVmVjdG9yKiAgdmVjICAgPSBvdXRsaW5lLT5wb2ludHM7Ci0gICAgICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7Ci0KLQotICAgICAgICB4TWluID0geE1heCA9IHZlYy0+eDsKLSAgICAgICAgeU1pbiA9IHlNYXggPSB2ZWMtPnk7Ci0gICAgICAgIHZlYysrOwotCi0gICAgICAgIGZvciAoIDsgdmVjIDwgbGltaXQ7IHZlYysrICkKLSAgICAgICAgewotICAgICAgICAgIFRQb3MgIHgsIHk7Ci0KLQotICAgICAgICAgIHggPSB2ZWMtPng7Ci0gICAgICAgICAgaWYgKCB4IDwgeE1pbiApIHhNaW4gPSB4OwotICAgICAgICAgIGlmICggeCA+IHhNYXggKSB4TWF4ID0geDsKLQotICAgICAgICAgIHkgPSB2ZWMtPnk7Ci0gICAgICAgICAgaWYgKCB5IDwgeU1pbiApIHlNaW4gPSB5OwotICAgICAgICAgIGlmICggeSA+IHlNYXggKSB5TWF4ID0geTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYWNib3gtPnhNaW4gPSB4TWluOwotICAgICAgYWNib3gtPnhNYXggPSB4TWF4OwotICAgICAgYWNib3gtPnlNaW4gPSB5TWluOwotICAgICAgYWNib3gtPnlNYXggPSB5TWF4OwotICAgIH0KLSAgfQotCiAjZW5kaWYgLyogU1RBTkRBTE9ORV8gKi8KIAogCkBAIC0xNzAyLDE5ICsxNjI4LDIwIEBACiAKIAogICBzdGF0aWMgaW50Ci0gIGdyYXlfY29udmVydF9nbHlwaF9pbm5lciggUkFTX0FSRyApCisgIGdyYXlfY29udmVydF9nbHlwaF9pbm5lciggUkFTX0FSRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNvbnRpbnVlZCApCiAgIHsKLQogICAgIHZvbGF0aWxlIGludCAgZXJyb3IgPSAwOwogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSAgICAgIEZUX091dGxpbmVfRnVuY3MgZnVuY19pbnRlcmZhY2U7Ci0gICAgICBJbml0X0NsYXNzX2Z1bmNfaW50ZXJmYWNlKCZmdW5jX2ludGVyZmFjZSk7Ci0jZW5kaWYKIAogICAgIGlmICggZnRfc2V0am1wKCByYXMuanVtcF9idWZmZXIgKSA9PSAwICkKICAgICB7CisgICAgICBpZiAoIGNvbnRpbnVlZCApCisgICAgICAgIEZUX1RyYWNlX0Rpc2FibGUoKTsKICAgICAgIGVycm9yID0gRlRfT3V0bGluZV9EZWNvbXBvc2UoICZyYXMub3V0bGluZSwgJmZ1bmNfaW50ZXJmYWNlLCAmcmFzICk7CisgICAgICBpZiAoIGNvbnRpbnVlZCApCisgICAgICAgIEZUX1RyYWNlX0VuYWJsZSgpOworCiAgICAgICBpZiAoICFyYXMuaW52YWxpZCApCiAgICAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKIApAQCAtMTc0MSw4ICsxNjY4LDYgQEAKICAgewogICAgIGNvbnN0IFRDb29yZCAgeU1pbiA9IHJhcy5taW5fZXk7CiAgICAgY29uc3QgVENvb3JkICB5TWF4ID0gcmFzLm1heF9leTsKLSAgICBjb25zdCBUQ29vcmQgIHhNaW4gPSByYXMubWluX2V4OwotICAgIGNvbnN0IFRDb29yZCAgeE1heCA9IHJhcy5tYXhfZXg7CiAKICAgICBUQ2VsbCAgICBidWZmZXJbRlRfTUFYX0dSQVlfUE9PTF07CiAgICAgc2l6ZV90ICAgaGVpZ2h0ID0gKHNpemVfdCkoIHlNYXggLSB5TWluICk7CkBAIC0xNzUxLDYgKzE2NzYsOCBAQAogICAgIFRDb29yZCAgIGJhbmRzWzMyXTsgIC8qIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBiaXNlY3Rpb25zICovCiAgICAgVENvb3JkKiAgYmFuZDsKIAorICAgIGludCAgY29udGludWVkID0gMDsKKwogCiAgICAgLyogc2V0IHVwIHZlcnRpY2FsIGJhbmRzICovCiAgICAgaWYgKCBoZWlnaHQgPiBuICkKQEAgLTE3NzQsOCArMTcwMSw4IEBACiAgICAgICByYXMubWF4X2V5ID0gRlRfTUlOKCB5LCB5TWF4ICk7CiAKICAgICAgIGJhbmQgICAgPSBiYW5kczsKLSAgICAgIGJhbmRbMV0gPSB4TWluOwotICAgICAgYmFuZFswXSA9IHhNYXg7CisgICAgICBiYW5kWzFdID0gcmFzLm1pbl9leTsKKyAgICAgIGJhbmRbMF0gPSByYXMubWF4X2V5OwogCiAgICAgICBkbwogICAgICAgewpAQCAtMTc4NywxMCArMTcxNCwxMSBAQAogCiAgICAgICAgIHJhcy5udW1fY2VsbHMgPSAwOwogICAgICAgICByYXMuaW52YWxpZCAgID0gMTsKLSAgICAgICAgcmFzLm1pbl9leCAgICA9IGJhbmRbMV07Ci0gICAgICAgIHJhcy5tYXhfZXggICAgPSBiYW5kWzBdOworICAgICAgICByYXMubWluX2V5ICAgID0gYmFuZFsxXTsKKyAgICAgICAgcmFzLm1heF9leSAgICA9IGJhbmRbMF07CiAKLSAgICAgICAgZXJyb3IgPSBncmF5X2NvbnZlcnRfZ2x5cGhfaW5uZXIoIFJBU19WQVIgKTsKKyAgICAgICAgZXJyb3IgICAgID0gZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKCBSQVNfVkFSLCBjb250aW51ZWQgKTsKKyAgICAgICAgY29udGludWVkID0gMTsKIAogICAgICAgICBpZiAoICFlcnJvciApCiAgICAgICAgIHsKQEAgLTE4MjcsNyArMTc1NSw3IEBACiAgIHsKICAgICBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSAgICA9IChjb25zdCBGVF9PdXRsaW5lKilwYXJhbXMtPnNvdXJjZTsKICAgICBjb25zdCBGVF9CaXRtYXAqICAgdGFyZ2V0X21hcCA9IHBhcmFtcy0+dGFyZ2V0OwotICAgIEZUX0JCb3ggICAgICAgICAgICBjYm94LCBjbGlwOworICAgIEZUX0JCb3ggICAgICAgICAgICBjbGlwOwogCiAjaWZuZGVmIEZUX1NUQVRJQ19SQVNURVIKICAgICBncmF5X1RXb3JrZXIgIHdvcmtlclsxXTsKQEAgLTE4OTAsMjEgKzE4MTgsMTEgQEAKICAgICAgIHJhcy5yZW5kZXJfc3Bhbl9kYXRhID0gTlVMTDsKICAgICB9CiAKLSAgICBGVF9PdXRsaW5lX0dldF9DQm94KCBvdXRsaW5lLCAmY2JveCApOwotCi0gICAgLyogcmVqZWN0IHRvbyBsYXJnZSBvdXRsaW5lIGNvb3JkaW5hdGVzICovCi0gICAgaWYgKCBjYm94LnhNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnhNYXggPiAweDEwMDAwMDBMIHx8Ci0gICAgICAgICBjYm94LnlNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnlNYXggPiAweDEwMDAwMDBMICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7Ci0KLSAgICAvKiB0cnVuY2F0ZSB0aGUgYm91bmRpbmcgYm94IHRvIGludGVnZXIgcGl4ZWxzICovCi0gICAgY2JveC54TWluID0gY2JveC54TWluID4+IDY7Ci0gICAgY2JveC55TWluID0gY2JveC55TWluID4+IDY7Ci0gICAgY2JveC54TWF4ID0gKCBjYm94LnhNYXggKyA2MyApID4+IDY7Ci0gICAgY2JveC55TWF4ID0gKCBjYm94LnlNYXggKyA2MyApID4+IDY7Ci0KICAgICAvKiBjb21wdXRlIGNsaXBwaW5nIGJveCAqLwotICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKKyAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgJiYKKyAgICAgICAgIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19DTElQICAgKQorICAgICAgY2xpcCA9IHBhcmFtcy0+Y2xpcF9ib3g7CisgICAgZWxzZQogICAgIHsKICAgICAgIC8qIGNvbXB1dGUgY2xpcCBib3ggZnJvbSB0YXJnZXQgcGl4bWFwICovCiAgICAgICBjbGlwLnhNaW4gPSAwOwpAQCAtMTkxMiwyMSArMTgzMCwxMiBAQAogICAgICAgY2xpcC54TWF4ID0gKEZUX1Bvcyl0YXJnZXRfbWFwLT53aWR0aDsKICAgICAgIGNsaXAueU1heCA9IChGVF9Qb3MpdGFyZ2V0X21hcC0+cm93czsKICAgICB9Ci0gICAgZWxzZSBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19DTElQICkKLSAgICAgIGNsaXAgPSBwYXJhbXMtPmNsaXBfYm94OwotICAgIGVsc2UKLSAgICB7Ci0gICAgICBjbGlwLnhNaW4gPSAtMzI3NjhMOwotICAgICAgY2xpcC55TWluID0gLTMyNzY4TDsKLSAgICAgIGNsaXAueE1heCA9ICAzMjc2N0w7Ci0gICAgICBjbGlwLnlNYXggPSAgMzI3NjdMOwotICAgIH0KIAogICAgIC8qIGNsaXAgdG8gdGFyZ2V0IGJpdG1hcCwgZXhpdCBpZiBub3RoaW5nIHRvIGRvICovCi0gICAgcmFzLm1pbl9leCA9IEZUX01BWCggY2JveC54TWluLCBjbGlwLnhNaW4gKTsKLSAgICByYXMubWluX2V5ID0gRlRfTUFYKCBjYm94LnlNaW4sIGNsaXAueU1pbiApOwotICAgIHJhcy5tYXhfZXggPSBGVF9NSU4oIGNib3gueE1heCwgY2xpcC54TWF4ICk7Ci0gICAgcmFzLm1heF9leSA9IEZUX01JTiggY2JveC55TWF4LCBjbGlwLnlNYXggKTsKKyAgICByYXMubWluX2V4ID0gY2xpcC54TWluOworICAgIHJhcy5taW5fZXkgPSBjbGlwLnlNaW47CisgICAgcmFzLm1heF9leCA9IGNsaXAueE1heDsKKyAgICByYXMubWF4X2V5ID0gY2xpcC55TWF4OwogCiAgICAgaWYgKCByYXMubWF4X2V4IDw9IHJhcy5taW5fZXggfHwgcmFzLm1heF9leSA8PSByYXMubWluX2V5ICkKICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmggYi9zcmMvc21vb3RoL2Z0Z3JheXMuaAppbmRleCA5ZTExY2E2Li42YWE3ZjM1IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuaAorKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRncmF5cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIHNtb290aCByZW5kZXJlciBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRncmF5cy5oCisgKgorICogICBGcmVlVHlwZSBzbW9vdGggcmVuZGVyZXIgZGVjbGFyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBGVEdSQVlTX0hfCkBAIC0yOCwxOSArMjgsMTggQEAKICNpbmNsdWRlICJmdGltYWdlLmgiCiAjZWxzZQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0ggLyogZm9yIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAjaW5jbHVkZSBGVF9JTUFHRV9ICiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVG8gbWFrZSBmdGdyYXlzLmggaW5kZXBlbmRlbnQgZnJvbSBjb25maWd1cmF0aW9uIGZpbGVzIHdlIGNoZWNrICAgICAgICovCi0gIC8qIHdoZXRoZXIgRlRfRVhQT1JUX1ZBUiBoYXMgYmVlbiBkZWZpbmVkIGFscmVhZHkuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT24gc29tZSBzeXN0ZW1zIGFuZCBjb21waWxlcnMgKFdpbjMyIG1vc3RseSksIGFuIGV4dHJhIGtleXdvcmQgaXMgICAgICovCi0gIC8qIG5lY2Vzc2FyeSB0byBjb21waWxlIHRoZSBsaWJyYXJ5IGFzIGEgRExMLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRvIG1ha2UgZnRncmF5cy5oIGluZGVwZW5kZW50IGZyb20gY29uZmlndXJhdGlvbiBmaWxlcyB3ZSBjaGVjaworICAgKiB3aGV0aGVyIEZUX0VYUE9SVF9WQVIgaGFzIGJlZW4gZGVmaW5lZCBhbHJlYWR5LgorICAgKgorICAgKiBPbiBzb21lIHN5c3RlbXMgYW5kIGNvbXBpbGVycyAoV2luMzIgbW9zdGx5KSwgYW4gZXh0cmEga2V5d29yZCBpcworICAgKiBuZWNlc3NhcnkgdG8gY29tcGlsZSB0aGUgbGlicmFyeSBhcyBhIERMTC4KKyAgICovCiAjaWZuZGVmIEZUX0VYUE9SVF9WQVIKICNkZWZpbmUgRlRfRVhQT1JUX1ZBUiggeCApICBleHRlcm4gIHgKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNtZXJycy5oIGIvc3JjL3Ntb290aC9mdHNtZXJycy5oCmluZGV4IDIyNmRjMWIuLjRjNTVlMzIgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzbWVycnMuaAorKysgYi9zcmMvc21vb3RoL2Z0c21lcnJzLmgKQEAgLTEsMjcgKzEsMjcgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c21lcnJzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBzbW9vdGggcmVuZGVyZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c21lcnJzLmgKKyAqCisgKiAgIHNtb290aCByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgc21vb3RoIHJlbmRlcmVyIGVycm9yIGVudW1lcmF0aW9uICAgICAqLwotICAvKiBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBzbW9vdGggcmVuZGVyZXIgZXJyb3IgZW51bWVyYXRpb24KKyAgICogY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBGVFNNRVJSU19IXwogI2RlZmluZSBGVFNNRVJSU19IXwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNtb290aC5jIGIvc3JjL3Ntb290aC9mdHNtb290aC5jCmluZGV4IGVmMTc2YmQuLmM2YjdlMjEgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzbW9vdGguYworKysgYi9zcmMvc21vb3RoL2Z0c21vb3RoLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c21vb3RoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0c21vb3RoLmMKKyAqCisgKiAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKICNpbmNsdWRlICJmdHNtb290aC5oIgogI2luY2x1ZGUgImZ0Z3JheXMuaCIKLSNpbmNsdWRlICJmdHNwaWMuaCIKIAogI2luY2x1ZGUgImZ0c21lcnJzLmgiCiAKQEAgLTMxLDYgKzMwLDIyIEBACiAgIHN0YXRpYyBGVF9FcnJvcgogICBmdF9zbW9vdGhfaW5pdCggRlRfUmVuZGVyZXIgIHJlbmRlciApCiAgIHsKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORworCisgICAgRlRfVmVjdG9yKiAgc3ViID0gcmVuZGVyLT5yb290LmxpYnJhcnktPmxjZF9nZW9tZXRyeTsKKworCisgICAgLyogc2V0IHVwIGRlZmF1bHQgc3VicGl4ZWwgZ2VvbWV0cnkgZm9yIHN0cmlwZWQgUkdCIHBhbmVscy4gKi8KKyAgICBzdWJbMF0ueCA9IC0yMTsKKyAgICBzdWJbMF0ueSA9IDA7CisgICAgc3ViWzFdLnggPSAwOworICAgIHN1YlsxXS55ID0gMDsKKyAgICBzdWJbMl0ueCA9IDIxOworICAgIHN1YlsyXS55ID0gMDsKKworI2VuZGlmCisKICAgICByZW5kZXItPmNsYXp6LT5yYXN0ZXJfY2xhc3MtPnJhc3Rlcl9yZXNldCggcmVuZGVyLT5yYXN0ZXIsIE5VTEwsIDAgKTsKIAogICAgIHJldHVybiAwOwpAQCAtMTMyLDYgKzE0NywxNCBAQAogCiAgICAgZnRfZ2x5cGhzbG90X3ByZXNldF9iaXRtYXAoIHNsb3QsIG1vZGUsIG9yaWdpbiApOwogCisgICAgaWYgKCBiaXRtYXAtPndpZHRoID4gMHg3RkZGIHx8IGJpdG1hcC0+cm93cyA+IDB4N0ZGRiApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljOiBnbHlwaCBpcyB0b28gbGFyZ2U6ICV1IHggJXVcbiIsCisgICAgICAgICAgICAgICAgIGJpdG1hcC0+d2lkdGgsIGJpdG1hcC0+cm93cyApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIFJhc3Rlcl9PdmVyZmxvdyApOworICAgICAgZ290byBFeGl0OworICAgIH0KKwogICAgIC8qIGFsbG9jYXRlIG5ldyBvbmUgKi8KICAgICBpZiAoIEZUX0FMTE9DX01VTFQoIGJpdG1hcC0+YnVmZmVyLCBiaXRtYXAtPnJvd3MsIGJpdG1hcC0+cGl0Y2ggKSApCiAgICAgICBnb3RvIEV4aXQ7CkBAIC0yMzUsMzMgKzI1OCwzNCBAQAogICAgICAgdW5zaWduZWQgaW50ICB3aWR0aCAgPSBiaXRtYXAtPndpZHRoOwogICAgICAgaW50ICAgICAgICAgICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOwogCisgICAgICBGVF9WZWN0b3IqICBzdWIgPSBzbG90LT5saWJyYXJ5LT5sY2RfZ2VvbWV0cnk7CiAKLSAgICAgIC8qIFJlbmRlciAzIHNlcGFyYXRlIG1vbm9jaHJvbWUgYml0bWFwcywgc2hpZnRpbmcgdGhlIG91dGxpbmUgICovCi0gICAgICAvKiBieSAxLzMgcGl4ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAvKiBSZW5kZXIgMyBzZXBhcmF0ZSBtb25vY2hyb21lIGJpdG1hcHMsIHNoaWZ0aW5nIHRoZSBvdXRsaW5lLiAgKi8KICAgICAgIHdpZHRoIC89IDM7CiAKLSAgICAgIGJpdG1hcC0+YnVmZmVyICs9IHdpZHRoOwotCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgICAgICAgICAgIC1zdWJbMF0ueCwgICAgICAgICAgIC1zdWJbMF0ueSApOwogICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgLTIxLCAwICk7Ci0gICAgICB4X3NoaWZ0ICAgICAgICAtPSAyMTsKICAgICAgIGJpdG1hcC0+YnVmZmVyICs9IHdpZHRoOwotCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgc3ViWzBdLnggLSBzdWJbMV0ueCwgc3ViWzBdLnkgLSBzdWJbMV0ueSApOwogICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICBiaXRtYXAtPmJ1ZmZlciAtPSB3aWR0aDsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCAgNDIsIDAgKTsKLSAgICAgIHhfc2hpZnQgICAgICAgICs9IDQyOworICAgICAgYml0bWFwLT5idWZmZXIgKz0gMiAqIHdpZHRoOworICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIHN1YlsxXS54IC0gc3ViWzJdLngsIHN1YlsxXS55IC0gc3ViWzJdLnkgKTsKKyAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOwogICAgICAgYml0bWFwLT5idWZmZXIgLT0gMiAqIHdpZHRoOwotCi0gICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKKyAgICAgIHhfc2hpZnQgICAgICAgIC09IHN1YlsyXS54OworICAgICAgeV9zaGlmdCAgICAgICAgLT0gc3ViWzJdLnk7CisKICAgICAgIC8qIFhYWDogUmVhcnJhbmdlIHRoZSBieXRlcyBhY2NvcmRpbmcgdG8gRlRfUElYRUxfTU9ERV9MQ0QuICAgICovCiAgICAgICAvKiBYWFg6IEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHJlbmRlciBldmVyeSB0aGlyZCBieXRlIGFib3ZlLiAqLwogCkBAIC0yODYsMzQgKzMxMCwzNyBAQAogICAgIHsKICAgICAgIGludCAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKIAorICAgICAgRlRfVmVjdG9yKiAgc3ViID0gc2xvdC0+bGlicmFyeS0+bGNkX2dlb21ldHJ5OwogCi0gICAgICAvKiBSZW5kZXIgMyBzZXBhcmF0ZSBtb25vY2hyb21lIGJpdG1hcHMsIHNoaWZ0aW5nIHRoZSBvdXRsaW5lICAqLwotICAgICAgLyogYnkgMS8zIHBpeGVsLiBUcmlwbGUgdGhlIHBpdGNoIHRvIHJlbmRlciBvbiBlYWNoIHRoaXJkIHJvdy4gKi8KKworICAgICAgLyogUmVuZGVyIDMgc2VwYXJhdGUgbW9ub2Nocm9tZSBiaXRtYXBzLCBzaGlmdGluZyB0aGUgb3V0bGluZS4gKi8KKyAgICAgIC8qIE5vdGljZSB0aGF0IHRoZSBzdWJwaXhlbCBnZW9tZXRyeSB2ZWN0b3JzIGFyZSByb3RhdGVkLiAgICAgICovCisgICAgICAvKiBUcmlwbGUgdGhlIHBpdGNoIHRvIHJlbmRlciBvbiBlYWNoIHRoaXJkIHJvdy4gICAgICAgICAgICAgICAqLwogICAgICAgYml0bWFwLT5waXRjaCAqPSAzOwogICAgICAgYml0bWFwLT5yb3dzICAvPSAzOwogCi0gICAgICBiaXRtYXAtPmJ1ZmZlciArPSBwaXRjaDsKLQorICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsICAgICAgICAgICAtc3ViWzBdLnksIHN1YlswXS54ICAgICAgICAgICAgKTsKICAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIDAsICAyMSApOwotICAgICAgeV9zaGlmdCAgICAgICAgKz0gMjE7CiAgICAgICBiaXRtYXAtPmJ1ZmZlciArPSBwaXRjaDsKLQorICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIHN1YlswXS55IC0gc3ViWzFdLnksIHN1YlsxXS54IC0gc3ViWzBdLnggKTsKICAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworICAgICAgYml0bWFwLT5idWZmZXIgLT0gcGl0Y2g7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgMCwgLTQyICk7Ci0gICAgICB5X3NoaWZ0ICAgICAgICAtPSA0MjsKKyAgICAgIGJpdG1hcC0+YnVmZmVyICs9IDIgKiBwaXRjaDsKKyAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCBzdWJbMV0ueSAtIHN1YlsyXS55LCBzdWJbMl0ueCAtIHN1YlsxXS54ICk7CisgICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKICAgICAgIGJpdG1hcC0+YnVmZmVyIC09IDIgKiBwaXRjaDsKLQotICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCisgICAgICB4X3NoaWZ0ICAgICAgICAtPSBzdWJbMl0ueTsKKyAgICAgIHlfc2hpZnQgICAgICAgICs9IHN1YlsyXS54OworCiAgICAgICBiaXRtYXAtPnBpdGNoIC89IDM7CiAgICAgICBiaXRtYXAtPnJvd3MgICo9IDM7CiAgICAgfQpAQCAtNDAzLDcgKzQzMCw3IEBACiAgICAgKEZUX1JlbmRlcmVyX0dldENCb3hGdW5jKSAgZnRfc21vb3RoX2dldF9jYm94LCAgIC8qIGdldF9nbHlwaF9jYm94ICAqLwogICAgIChGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykgIGZ0X3Ntb290aF9zZXRfbW9kZSwgICAvKiBzZXRfbW9kZSAgICAgICAgKi8KIAotICAgIChGVF9SYXN0ZXJfRnVuY3MqKSZGVF9HUkFZU19SQVNURVJfR0VUICAgICAgICAgICAvKiByYXN0ZXJfY2xhc3MgICAgKi8KKyAgICAoRlRfUmFzdGVyX0Z1bmNzKikmZnRfZ3JheXNfcmFzdGVyICAgICAgICAgICAgICAgLyogcmFzdGVyX2NsYXNzICAgICovCiAgICkKIAogCkBAIC00MzAsNyArNDU3LDcgQEAKICAgICAoRlRfUmVuZGVyZXJfR2V0Q0JveEZ1bmMpICBmdF9zbW9vdGhfZ2V0X2Nib3gsICAgIC8qIGdldF9nbHlwaF9jYm94ICAqLwogICAgIChGVF9SZW5kZXJlcl9TZXRNb2RlRnVuYykgIGZ0X3Ntb290aF9zZXRfbW9kZSwgICAgLyogc2V0X21vZGUgICAgICAgICovCiAKLSAgICAoRlRfUmFzdGVyX0Z1bmNzKikmRlRfR1JBWVNfUkFTVEVSX0dFVCAgICAgICAgICAgIC8qIHJhc3Rlcl9jbGFzcyAgICAqLworICAgIChGVF9SYXN0ZXJfRnVuY3MqKSZmdF9ncmF5c19yYXN0ZXIgICAgICAgICAgICAgICAgLyogcmFzdGVyX2NsYXNzICAgICovCiAgICkKIAogCkBAIC00NTcsNyArNDg0LDcgQEAKICAgICAoRlRfUmVuZGVyZXJfR2V0Q0JveEZ1bmMpICBmdF9zbW9vdGhfZ2V0X2Nib3gsICAgICAgLyogZ2V0X2dseXBoX2Nib3ggICovCiAgICAgKEZUX1JlbmRlcmVyX1NldE1vZGVGdW5jKSAgZnRfc21vb3RoX3NldF9tb2RlLCAgICAgIC8qIHNldF9tb2RlICAgICAgICAqLwogCi0gICAgKEZUX1Jhc3Rlcl9GdW5jcyopJkZUX0dSQVlTX1JBU1RFUl9HRVQgICAgICAgICAgICAgIC8qIHJhc3Rlcl9jbGFzcyAgICAqLworICAgIChGVF9SYXN0ZXJfRnVuY3MqKSZmdF9ncmF5c19yYXN0ZXIgICAgICAgICAgICAgICAgICAvKiByYXN0ZXJfY2xhc3MgICAgKi8KICAgKQogCiAKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguaCBiL3NyYy9zbW9vdGgvZnRzbW9vdGguaAppbmRleCBjNzZmZmM1Li43ODJmMTFhIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmgKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHNtb290aC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQW50aS1hbGlhc2luZyByZW5kZXJlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHNtb290aC5oCisgKgorICogICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgRlRTTU9PVEhfSF8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzcGljLmMgYi9zcmMvc21vb3RoL2Z0c3BpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGYwNGNmLi4wMDAwMDAwCi0tLSBhL3NyYy9zbW9vdGgvZnRzcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRzcGljLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzbW9vdGggbW9kdWxlLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgImZ0c3BpYy5oIgotI2luY2x1ZGUgImZ0c21lcnJzLmgiCi0KLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCi0KLSAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBQSUMgaW5pdCBmdW5jdGlvbnMgZnJvbSBmdGdyYXlzLmMgKi8KLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX2Z0X2dyYXlzX3Jhc3RlciggRlRfUmFzdGVyX0Z1bmNzKiAgZnVuY3MgKTsKLQotCi0gIHZvaWQKLSAgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIEZUX1BJQ19Db250YWluZXIqICBwaWNfY29udGFpbmVyID0gJmxpYnJhcnktPnBpY19jb250YWluZXI7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIGlmICggcGljX2NvbnRhaW5lci0+c21vb3RoICkKLSAgICB7Ci0gICAgICBTbW9vdGhQSUMqICBjb250YWluZXIgPSAoU21vb3RoUElDKilwaWNfY29udGFpbmVyLT5zbW9vdGg7Ci0KLQotICAgICAgaWYgKCAtLWNvbnRhaW5lci0+cmVmX2NvdW50ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBGVF9GUkVFKCBjb250YWluZXIgKTsKLSAgICAgIHBpY19jb250YWluZXItPnNtb290aCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLQotICBGVF9FcnJvcgotICBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKLSAgICBTbW9vdGhQSUMqICAgICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIC8qIHNpbmNlIHRoaXMgZnVuY3Rpb24gYWxzbyBzZXJ2ZSBzbW9vdGhfbGNkIGFuZCBzbW9vdGhfbGNkdiByZW5kZXJlcnMsCi0gICAgICAgaXQgaW1wbGVtZW50cyByZWZlcmVuY2UgY291bnRpbmcgKi8KLSAgICBpZiAoIHBpY19jb250YWluZXItPnNtb290aCApCi0gICAgewotICAgICAgKChTbW9vdGhQSUMqKXBpY19jb250YWluZXItPnNtb290aCktPnJlZl9jb3VudCsrOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCi0gICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKLSAgICBwaWNfY29udGFpbmVyLT5zbW9vdGggPSBjb250YWluZXI7Ci0KLSAgICBjb250YWluZXItPnJlZl9jb3VudCA9IDE7Ci0KLSAgICAvKiBpbml0aWFsaXplIHBvaW50ZXIgdGFibGUgLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0aGlzIGlzIGhvdyB0aGUgbW9kdWxlIHVzdWFsbHkgZXhwZWN0cyB0aGlzIGRhdGEgKi8KLSAgICBGVF9Jbml0X0NsYXNzX2Z0X2dyYXlzX3Jhc3RlciggJmNvbnRhaW5lci0+ZnRfZ3JheXNfcmFzdGVyICk7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIC8qIHJlLXJvdXRlIHRoZXNlIGluaXQgYW5kIGZyZWUgZnVuY3Rpb25zIHRvIHRoZSBhYm92ZSBmdW5jdGlvbnMgKi8KLSAgRlRfRXJyb3IKLSAgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICByZXR1cm4gZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19pbml0KCBsaWJyYXJ5ICk7Ci0gIH0KLQotCi0gIHZvaWQKLSAgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApCi0gIHsKLSAgICBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3NfcGljX2ZyZWUoIGxpYnJhcnkgKTsKLSAgfQotCi0KLSAgRlRfRXJyb3IKLSAgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgcmV0dXJuIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggbGlicmFyeSApOwotICB9Ci0KLQotICB2b2lkCi0gIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKLSAgewotICAgIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggbGlicmFyeSApOwotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNwaWMuaCBiL3NyYy9zbW9vdGgvZnRzcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZmI2NGMuLjAwMDAwMDAKLS0tIGEvc3JjL3Ntb290aC9mdHNwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0c3BpYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBGVFNQSUNfSF8KLSNkZWZpbmUgRlRTUElDX0hfCi0KLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKLQotCi1GVF9CRUdJTl9IRUFERVIKLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jZGVmaW5lIEZUX0dSQVlTX1JBU1RFUl9HRVQgIGZ0X2dyYXlzX3Jhc3RlcgotCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0gIHR5cGVkZWYgc3RydWN0ICBTbW9vdGhQSUNfCi0gIHsKLSAgICBpbnQgICAgICAgICAgICAgIHJlZl9jb3VudDsKLSAgICBGVF9SYXN0ZXJfRnVuY3MgIGZ0X2dyYXlzX3Jhc3RlcjsKLQotICB9IFNtb290aFBJQzsKLQotCi0jZGVmaW5lIEdFVF9QSUMoIGxpYiApIFwKLSAgICAgICAgICAoIChTbW9vdGhQSUMqKSggKGxpYiktPnBpY19jb250YWluZXIuc21vb3RoICkgKQotI2RlZmluZSBGVF9HUkFZU19SQVNURVJfR0VUICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+ZnRfZ3JheXNfcmFzdGVyICkKLQotCi0gIC8qIHNlZSBmdHNwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCi0gIHZvaWQKLSAgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLSAgdm9pZAotICBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLSAgdm9pZAotICBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzc19waWNfZnJlZSggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0gIEZUX0Vycm9yCi0gIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0gIEZUX0Vycm9yCi0gIGZ0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKLQotICBGVF9FcnJvcgotICBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzc19waWNfaW5pdCggRlRfTGlicmFyeSAgbGlicmFyeSApOwotCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KLQotIC8qICovCi0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIEZUU1BJQ19IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9ydWxlcy5tayBiL3NyYy9zbW9vdGgvcnVsZXMubWsKaW5kZXggZjMwODI0YS4uOGY4MDhmOCAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9ydWxlcy5taworKysgYi9zcmMvc21vb3RoL3J1bGVzLm1rCkBAIC0yOSw4ICsyOSw3IEBACiAjIHNtb290aCBkcml2ZXIgc291cmNlcyAoaS5lLiwgQyBmaWxlcykKICMKIFNNT09USF9EUlZfU1JDIDo9ICQoU01PT1RIX0RJUikvZnRncmF5cy5jICBcCi0gICAgICAgICAgICAgICAgICAkKFNNT09USF9ESVIpL2Z0c21vb3RoLmMgXAotICAgICAgICAgICAgICAgICAgJChTTU9PVEhfRElSKS9mdHNwaWMuYworICAgICAgICAgICAgICAgICAgJChTTU9PVEhfRElSKS9mdHNtb290aC5jCiAKIAogIyBzbW9vdGggZHJpdmVyIGhlYWRlcnMKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvc21vb3RoLmMgYi9zcmMvc21vb3RoL3Ntb290aC5jCmluZGV4IDUyNDlhODkuLmFjNDE0ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvc21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9zbW9vdGguYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgc21vb3RoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIGFudGktYWxpYXNpbmcgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc21vb3RoLmMKKyAqCisgKiAgIEZyZWVUeXBlIGFudGktYWxpYXNpbmcgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJmdGdyYXlzLmMiCiAjaW5jbHVkZSAiZnRzbW9vdGguYyIKLSNpbmNsdWRlICJmdHNwaWMuYyIKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IGIvc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkKaW5kZXggYzk5NjlkYi4uMTk4NzgwYSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIGRlZiAgZHVtcCggc2VsZiwgcHJlZml4ID0gIiIsIHdpZHRoID0gNjAgKToKICAgICAgICAgbGluZXMgPSBzZWxmLmR1bXBfbGluZXMoIDAsIHdpZHRoICkKICAgICAgICAgZm9yIGwgaW4gbGluZXM6Ci0gICAgICAgICAgICBwcmludCBwcmVmaXggKyBsCisgICAgICAgICAgICBwcmludCggcHJlZml4ICsgbCApCiAKICAgICBkZWYgIGR1bXBfbGluZXMoIHNlbGYsIG1hcmdpbiA9IDAsIHdpZHRoID0gNjAgKToKICAgICAgICAgcmVzdWx0ID0gW10KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgIGRlZiAgZHVtcCggc2VsZiwgcHJlZml4ID0gIiIsIHdpZHRoID0gNjAgKToKICAgICAgICAgbGluZXMgPSBzZWxmLmR1bXBfbGluZXMoIDAsIHdpZHRoICkKICAgICAgICAgZm9yIGwgaW4gbGluZXM6Ci0gICAgICAgICAgICBwcmludCBwcmVmaXggKyBsCisgICAgICAgICAgICBwcmludCggcHJlZml4ICsgbCApCiAKICAgICBkZWYgIGR1bXBfbGluZXMoIHNlbGYsIG1hcmdpbiA9IDAsIHdpZHRoID0gNjAgKToKICAgICAgICAgY3VyICAgID0gIiIgICMgY3VycmVudCBsaW5lCkBAIC0yNDMsMTMgKzI0MywxMyBAQAogCiAgICAgZGVmICBkdW1wKCBzZWxmLCBwcmVmaXggPSAiIiApOgogICAgICAgICBpZiBzZWxmLmZpZWxkOgotICAgICAgICAgICAgcHJpbnQgcHJlZml4ICsgc2VsZi5maWVsZCArICIgOjoiCisgICAgICAgICAgICBwcmludCggcHJlZml4ICsgc2VsZi5maWVsZCArICIgOjoiICkKICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeCArICItLS0tIgogCiAgICAgICAgIGZpcnN0ID0gMQogICAgICAgICBmb3IgcCBpbiBzZWxmLml0ZW1zOgogICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotICAgICAgICAgICAgICAgIHByaW50ICIiCisgICAgICAgICAgICAgICAgcHJpbnQoICIiICkKICAgICAgICAgICAgIHAuZHVtcCggcHJlZml4ICkKICAgICAgICAgICAgIGZpcnN0ID0gMAogCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiAgZHVtcCggc2VsZiwgbWFyZ2luICk6Ci0gICAgICAgIHByaW50ICIgIiAqIG1hcmdpbiArICI8IiArIHNlbGYudGFnICsgIj4iCisgICAgICAgIHByaW50KCAiICIgKiBtYXJnaW4gKyAiPCIgKyBzZWxmLnRhZyArICI+IiApCiAgICAgICAgIGZvciBmIGluIHNlbGYuZmllbGRzOgogICAgICAgICAgICAgZi5kdW1wKCAiICAiICkKLSAgICAgICAgcHJpbnQgIiAiICogbWFyZ2luICsgIjwvIiArIHNlbGYudGFnICsgIj4iCisgICAgICAgIHByaW50KCAiICIgKiBtYXJnaW4gKyAiPC8iICsgc2VsZi50YWcgKyAiPiIgKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci9kb2NiZWF1dHkucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvZG9jYmVhdXR5LnB5CmluZGV4IDNkZGY0YTkuLjBiMDIxZmEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9kb2NtYWtlci9kb2NiZWF1dHkucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY2JlYXV0eS5weQpAQCAtMTAsOSArMTAsNyBAQAogZnJvbSBjb250ZW50IGltcG9ydCAqCiBmcm9tIHV0aWxzICAgaW1wb3J0ICoKIAotaW1wb3J0IHV0aWxzCi0KLWltcG9ydCBzeXMsIG9zLCB0aW1lLCBzdHJpbmcsIGdldG9wdAoraW1wb3J0IHN5cywgb3MsIHN0cmluZywgZ2V0b3B0CiAKIAogY29udGVudF9wcm9jZXNzb3IgPSBDb250ZW50UHJvY2Vzc29yKCkKQEAgLTQwLDEzICszOCwxMyBAQAogCiAKIGRlZiAgdXNhZ2UoKToKLSAgICBwcmludCAiXG5Eb2NCZWF1dHkgMC4xIFVzYWdlIGluZm9ybWF0aW9uXG4iCi0gICAgcHJpbnQgIiAgZG9jYmVhdXR5IFtvcHRpb25zXSBmaWxlMSBbZmlsZTIgLi4uXVxuIgotICAgIHByaW50ICJ1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4iCi0gICAgcHJpbnQgIiAgLWggOiBwcmludCB0aGlzIHBhZ2UiCi0gICAgcHJpbnQgIiAgLWIgOiBiYWNrdXAgb3JpZ2luYWwgZmlsZXMgd2l0aCB0aGUgJ29yaWcnIGV4dGVuc2lvbiIKLSAgICBwcmludCAiIgotICAgIHByaW50ICIgIC0tYmFja3VwIDogc2FtZSBhcyAtYiIKKyAgICBwcmludCggIlxuRG9jQmVhdXR5IDAuMSBVc2FnZSBpbmZvcm1hdGlvblxuIiApCisgICAgcHJpbnQoICIgIGRvY2JlYXV0eSBbb3B0aW9uc10gZmlsZTEgW2ZpbGUyIC4uLl1cbiIgKQorICAgIHByaW50KCAidXNpbmcgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuIiApCisgICAgcHJpbnQoICIgIC1oIDogcHJpbnQgdGhpcyBwYWdlIiApCisgICAgcHJpbnQoICIgIC1iIDogYmFja3VwIG9yaWdpbmFsIGZpbGVzIHdpdGggdGhlICdvcmlnJyBleHRlbnNpb24iICkKKyAgICBwcmludCggIiIgKQorICAgIHByaW50KCAiICAtLWJhY2t1cCA6IHNhbWUgYXMgLWIiICkKIAogCiBkZWYgIG1haW4oIGFyZ3YgKToKZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weSBiL3NyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weQppbmRleCAyNTNhNGQzLi5lYjQ5YWZiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvZG9jbWFrZXIvZG9jbWFrZXIucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5CkBAIC0zMSwyMSArMzEsMjEgQEAKIAogaW1wb3J0IHV0aWxzCiAKLWltcG9ydCBzeXMsIG9zLCB0aW1lLCBzdHJpbmcsIGdsb2IsIGdldG9wdAoraW1wb3J0IHN5cywgZ2xvYiwgZ2V0b3B0CiAKIAogZGVmICB1c2FnZSgpOgotICAgIHByaW50ICJcbkRvY01ha2VyIFVzYWdlIGluZm9ybWF0aW9uXG4iCi0gICAgcHJpbnQgIiAgZG9jbWFrZXIgW29wdGlvbnNdIGZpbGUxIFtmaWxlMiAuLi5dXG4iCi0gICAgcHJpbnQgInVzaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiIKLSAgICBwcmludCAiICAtaCA6IHByaW50IHRoaXMgcGFnZSIKLSAgICBwcmludCAiICAtdCA6IHNldCBwcm9qZWN0IHRpdGxlLCBhcyBpbiAnLXQgXCJNeSBQcm9qZWN0XCInIgotICAgIHByaW50ICIgIC1vIDogc2V0IG91dHB1dCBkaXJlY3RvcnksIGFzIGluICctbyBteWRpciciCi0gICAgcHJpbnQgIiAgLXAgOiBzZXQgZG9jdW1lbnRhdGlvbiBwcmVmaXgsIGFzIGluICctcCBmdDInIgotICAgIHByaW50ICIiCi0gICAgcHJpbnQgIiAgLS10aXRsZSAgOiBzYW1lIGFzIC10LCBhcyBpbiAnLS10aXRsZT1cIk15IFByb2plY3RcIiciCi0gICAgcHJpbnQgIiAgLS1vdXRwdXQgOiBzYW1lIGFzIC1vLCBhcyBpbiAnLS1vdXRwdXQ9bXlkaXInIgotICAgIHByaW50ICIgIC0tcHJlZml4IDogc2FtZSBhcyAtcCwgYXMgaW4gJy0tcHJlZml4PWZ0MiciCisgICAgcHJpbnQoICJcbkRvY01ha2VyIFVzYWdlIGluZm9ybWF0aW9uXG4iICkKKyAgICBwcmludCggIiAgZG9jbWFrZXIgW29wdGlvbnNdIGZpbGUxIFtmaWxlMiAuLi5dXG4iICkKKyAgICBwcmludCggInVzaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiIgKQorICAgIHByaW50KCAiICAtaCA6IHByaW50IHRoaXMgcGFnZSIgKQorICAgIHByaW50KCAiICAtdCA6IHNldCBwcm9qZWN0IHRpdGxlLCBhcyBpbiAnLXQgXCJNeSBQcm9qZWN0XCInIiApCisgICAgcHJpbnQoICIgIC1vIDogc2V0IG91dHB1dCBkaXJlY3RvcnksIGFzIGluICctbyBteWRpciciICkKKyAgICBwcmludCggIiAgLXAgOiBzZXQgZG9jdW1lbnRhdGlvbiBwcmVmaXgsIGFzIGluICctcCBmdDInIiApCisgICAgcHJpbnQoICIiICkKKyAgICBwcmludCggIiAgLS10aXRsZSAgOiBzYW1lIGFzIC10LCBhcyBpbiAnLS10aXRsZT1cIk15IFByb2plY3RcIiciICkKKyAgICBwcmludCggIiAgLS1vdXRwdXQgOiBzYW1lIGFzIC1vLCBhcyBpbiAnLS1vdXRwdXQ9bXlkaXInIiApCisgICAgcHJpbnQoICIgIC0tcHJlZml4IDogc2FtZSBhcyAtcCwgYXMgaW4gJy0tcHJlZml4PWZ0MiciICkKIAogCiBkZWYgIG1haW4oIGFyZ3YgKToKZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci9zb3VyY2VzLnB5IGIvc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkKaW5kZXggMmNkNWEzMy4uZTNiOTVlMCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkKQEAgLTI5LDcgKzI5LDcgQEAKICMKIAogCi1pbXBvcnQgZmlsZWlucHV0LCByZSwgc3lzLCBvcywgc3RyaW5nCitpbXBvcnQgZmlsZWlucHV0LCByZSwgc3RyaW5nCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMjk2LDEwICsyOTYsMTAgQEAKICAgICAjIGRlYnVnZ2luZyBvbmx5IC0tIG5vdCB1c2VkIGluIG5vcm1hbCBvcGVyYXRpb25zCiAgICAgZGVmICBkdW1wKCBzZWxmICk6CiAgICAgICAgIGlmIHNlbGYuY29udGVudDoKLSAgICAgICAgICAgIHByaW50ICJ7e3tjb250ZW50IHN0YXJ0LS0tIgorICAgICAgICAgICAgcHJpbnQoICJ7e3tjb250ZW50IHN0YXJ0LS0tIiApCiAgICAgICAgICAgICBmb3IgbCBpbiBzZWxmLmNvbnRlbnQ6Ci0gICAgICAgICAgICAgICAgcHJpbnQgbAotICAgICAgICAgICAgcHJpbnQgIi0tLWNvbnRlbnQgZW5kfX19IgorICAgICAgICAgICAgICAgIHByaW50KCBsICkKKyAgICAgICAgICAgIHByaW50KCAiLS0tY29udGVudCBlbmR9fX0iICkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGZtdCA9ICIiCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICAgICAgICAgIGZtdCA9IHJlcHIoIHNlbGYuZm9ybWF0LmlkICkgKyAiICIKIAogICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgotICAgICAgICAgICAgcHJpbnQgbGluZQorICAgICAgICAgICAgcHJpbnQoIGxpbmUgKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5CmluZGV4IDdmNWVjZGEuLjk3YTU0NTkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weQpAQCAtNDA2LDcgKzQwNiw3IEBACiAgICAgICAgIHJldHVybiBzdHJpbmcuam9pbiggbGluZXMsICdcbicgKQogCiAgICAgZGVmICBwcmludF9odG1sX2l0ZW1zKCBzZWxmLCBpdGVtcyApOgotICAgICAgICBwcmludCBzZWxmLm1ha2VfaHRtbF9pdGVtcyggaXRlbXMgKQorICAgICAgICBwcmludCggc2VsZi5tYWtlX2h0bWxfaXRlbXMoIGl0ZW1zICkgKQogCiAgICAgZGVmICBwcmludF9odG1sX2ZpZWxkKCBzZWxmLCBmaWVsZCApOgogICAgICAgICBpZiBmaWVsZC5uYW1lOgpAQCAtNDE0LDEwICs0MTQsMTAgQEAKICAgICAgICAgICAgICAgICAgICArIGZpZWxkLm5hbWUKICAgICAgICAgICAgICAgICAgICArICI8L2I+PC90ZD48dGQ+IiApCiAKLSAgICAgICAgcHJpbnQgc2VsZi5tYWtlX2h0bWxfaXRlbXMoIGZpZWxkLml0ZW1zICkKKyAgICAgICAgcHJpbnQoIHNlbGYubWFrZV9odG1sX2l0ZW1zKCBmaWVsZC5pdGVtcyApICkKIAogICAgICAgICBpZiBmaWVsZC5uYW1lOgotICAgICAgICAgICAgcHJpbnQgIjwvdGQ+PC90cj48L3RhYmxlPiIKKyAgICAgICAgICAgIHByaW50KCAiPC90ZD48L3RyPjwvdGFibGU+IiApCiAKICAgICBkZWYgIGh0bWxfc291cmNlX3F1b3RlKCBzZWxmLCBsaW5lLCBibG9ja19uYW1lID0gTm9uZSApOgogICAgICAgICByZXN1bHQgPSAiIgpAQCAtNDY4LDE0ICs0NjgsMTQgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmICBwcmludF9odG1sX2ZpZWxkX2xpc3QoIHNlbGYsIGZpZWxkcyApOgotICAgICAgICBwcmludCAnPHRhYmxlIGNsYXNzPSJmaWVsZHMiPicKKyAgICAgICAgcHJpbnQoICc8dGFibGUgY2xhc3M9ImZpZWxkcyI+JyApCiAgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6Ci0gICAgICAgICAgICBwcmludCAoICc8dHI+PHRkIGNsYXNzPSJ2YWwiIGlkPSInICsgZmllbGQubmFtZSArICciPicKLSAgICAgICAgICAgICAgICAgICAgKyBmaWVsZC5uYW1lCi0gICAgICAgICAgICAgICAgICAgICsgJzwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4nICkKKyAgICAgICAgICAgIHByaW50KCAnPHRyPjx0ZCBjbGFzcz0idmFsIiBpZD0iJyArIGZpZWxkLm5hbWUgKyAnIj4nCisgICAgICAgICAgICAgICAgICAgKyBmaWVsZC5uYW1lCisgICAgICAgICAgICAgICAgICAgKyAnPC90ZD48dGQgY2xhc3M9ImRlc2MiPicgKQogICAgICAgICAgICAgc2VsZi5wcmludF9odG1sX2l0ZW1zKCBmaWVsZC5pdGVtcyApCi0gICAgICAgICAgICBwcmludCAiPC90ZD48L3RyPiIKLSAgICAgICAgcHJpbnQgIjwvdGFibGU+IgorICAgICAgICAgICAgcHJpbnQoICI8L3RkPjwvdHI+IiApCisgICAgICAgIHByaW50KCAiPC90YWJsZT4iICkKIAogICAgIGRlZiAgcHJpbnRfaHRtbF9tYXJrdXAoIHNlbGYsIG1hcmt1cCApOgogICAgICAgICB0YWJsZV9maWVsZHMgPSBbXQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgIyBmb3JtYXR0aW5nIHRoZSBpbmRleAogICAgICMKICAgICBkZWYgIGluZGV4X2VudGVyKCBzZWxmICk6Ci0gICAgICAgIHByaW50IHNlbGYuaHRtbF9pbmRleF9oZWFkZXIKKyAgICAgICAgcHJpbnQoIHNlbGYuaHRtbF9pbmRleF9oZWFkZXIgKQogICAgICAgICBzZWxmLmluZGV4X2l0ZW1zID0ge30KIAogICAgIGRlZiAgaW5kZXhfbmFtZV9lbnRlciggc2VsZiwgbmFtZSApOgpAQCAtNTEyLDcgKzUxMiw3IEBACiAgICAgICAgIGNvdW50ID0gbGVuKCBzZWxmLmJsb2NrX2luZGV4ICkKICAgICAgICAgcm93cyAgPSAoIGNvdW50ICsgc2VsZi5jb2x1bW5zIC0gMSApIC8vIHNlbGYuY29sdW1ucwogCi0gICAgICAgIHByaW50ICc8dGFibGUgY2xhc3M9ImluZGV4Ij4nCisgICAgICAgIHByaW50KCAnPHRhYmxlIGNsYXNzPSJpbmRleCI+JyApCiAgICAgICAgIGZvciByIGluIHJhbmdlKCByb3dzICk6CiAgICAgICAgICAgICBsaW5lID0gIjx0cj4iCiAgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSggc2VsZi5jb2x1bW5zICk6CkBAIC01MzEsMTUgKzUzMSwxNSBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJzx0ZD48L3RkPicKICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgIjwvdHI+IgotICAgICAgICAgICAgcHJpbnQgbGluZQorICAgICAgICAgICAgcHJpbnQoIGxpbmUgKQogCi0gICAgICAgIHByaW50ICI8L3RhYmxlPiIKKyAgICAgICAgcHJpbnQoICI8L3RhYmxlPiIgKQogCiAgICAgICAgIHByaW50KCBpbmRleF9mb290ZXJfc3RhcnQKICAgICAgICAgICAgICAgICsgc2VsZi5maWxlX3ByZWZpeCArICJ0b2MuaHRtbCIKICAgICAgICAgICAgICAgICsgaW5kZXhfZm9vdGVyX2VuZCApCiAKLSAgICAgICAgcHJpbnQgc2VsZi5odG1sX2Zvb3RlcgorICAgICAgICBwcmludCggc2VsZi5odG1sX2Zvb3RlciApCiAKICAgICAgICAgc2VsZi5pbmRleF9pdGVtcyA9IHt9CiAKQEAgLTU1MywyNSArNTUzLDI1IEBACiAgICAgIyBmb3JtYXR0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cwogICAgICMKICAgICBkZWYgIHRvY19lbnRlciggc2VsZiApOgotICAgICAgICBwcmludCBzZWxmLmh0bWxfdG9jX2hlYWRlcgotICAgICAgICBwcmludCAiPGgxPlRhYmxlIG9mIENvbnRlbnRzPC9oMT4iCisgICAgICAgIHByaW50KCBzZWxmLmh0bWxfdG9jX2hlYWRlciApCisgICAgICAgIHByaW50KCAiPGgxPlRhYmxlIG9mIENvbnRlbnRzPC9oMT4iICkKIAogICAgIGRlZiAgdG9jX2NoYXB0ZXJfZW50ZXIoIHNlbGYsIGNoYXB0ZXIgKToKLSAgICAgICAgcHJpbnQgY2hhcHRlcl9oZWFkZXIgKyBzdHJpbmcuam9pbiggY2hhcHRlci50aXRsZSApICsgY2hhcHRlcl9pbnRlcgotICAgICAgICBwcmludCAnPHRhYmxlIGNsYXNzPSJ0b2MiPicKKyAgICAgICAgcHJpbnQoIGNoYXB0ZXJfaGVhZGVyICsgc3RyaW5nLmpvaW4oIGNoYXB0ZXIudGl0bGUgKSArIGNoYXB0ZXJfaW50ZXIgKQorICAgICAgICBwcmludCggJzx0YWJsZSBjbGFzcz0idG9jIj4nICkKIAogICAgIGRlZiAgdG9jX3NlY3Rpb25fZW50ZXIoIHNlbGYsIHNlY3Rpb24gKToKLSAgICAgICAgcHJpbnQgKCAnPHRyPjx0ZCBjbGFzcz0ibGluayI+JwotICAgICAgICAgICAgICAgICsgJzxhIGhyZWY9IicgKyBzZWxmLm1ha2Vfc2VjdGlvbl91cmwoIHNlY3Rpb24gKSArICciPicKLSAgICAgICAgICAgICAgICArIHNlY3Rpb24udGl0bGUgKyAnPC9hPjwvdGQ+PHRkIGNsYXNzPSJkZXNjIj4nICkKLSAgICAgICAgcHJpbnQgc2VsZi5tYWtlX2h0bWxfcGFyYSggc2VjdGlvbi5hYnN0cmFjdCApCisgICAgICAgIHByaW50KCAnPHRyPjx0ZCBjbGFzcz0ibGluayI+JworICAgICAgICAgICAgICAgKyAnPGEgaHJlZj0iJyArIHNlbGYubWFrZV9zZWN0aW9uX3VybCggc2VjdGlvbiApICsgJyI+JworICAgICAgICAgICAgICAgKyBzZWN0aW9uLnRpdGxlICsgJzwvYT48L3RkPjx0ZCBjbGFzcz0iZGVzYyI+JyApCisgICAgICAgIHByaW50KCBzZWxmLm1ha2VfaHRtbF9wYXJhKCBzZWN0aW9uLmFic3RyYWN0ICkgKQogCiAgICAgZGVmICB0b2Nfc2VjdGlvbl9leGl0KCBzZWxmLCBzZWN0aW9uICk6Ci0gICAgICAgIHByaW50ICI8L3RkPjwvdHI+IgorICAgICAgICBwcmludCggIjwvdGQ+PC90cj4iICkKIAogICAgIGRlZiAgdG9jX2NoYXB0ZXJfZXhpdCggc2VsZiwgY2hhcHRlciApOgotICAgICAgICBwcmludCAiPC90YWJsZT4iCi0gICAgICAgIHByaW50IGNoYXB0ZXJfZm9vdGVyCisgICAgICAgIHByaW50KCAiPC90YWJsZT4iICkKKyAgICAgICAgcHJpbnQoIGNoYXB0ZXJfZm9vdGVyICkKIAogICAgIGRlZiAgdG9jX2luZGV4KCBzZWxmLCBpbmRleF9maWxlbmFtZSApOgogICAgICAgICBwcmludCggY2hhcHRlcl9oZWFkZXIKQEAgLTU4Myw3ICs1ODMsNyBAQAogICAgICAgICAgICAgICAgKyBzZWxmLmZpbGVfcHJlZml4ICsgImluZGV4Lmh0bWwiCiAgICAgICAgICAgICAgICArIHRvY19mb290ZXJfZW5kICkKIAotICAgICAgICBwcmludCBzZWxmLmh0bWxfZm9vdGVyCisgICAgICAgIHByaW50KCBzZWxmLmh0bWxfZm9vdGVyICkKIAogICAgIGRlZiAgdG9jX2R1bXAoIHNlbGYsIHRvY19maWxlbmFtZSA9IE5vbmUsIGluZGV4X2ZpbGVuYW1lID0gTm9uZSApOgogICAgICAgICBpZiB0b2NfZmlsZW5hbWUgPT0gTm9uZToKQEAgLTU5OCwxMSArNTk4LDExIEBACiAgICAgIyBmb3JtYXR0aW5nIHNlY3Rpb25zCiAgICAgIwogICAgIGRlZiAgc2VjdGlvbl9lbnRlciggc2VsZiwgc2VjdGlvbiApOgotICAgICAgICBwcmludCBzZWxmLmh0bWxfaGVhZGVyCisgICAgICAgIHByaW50KCBzZWxmLmh0bWxfaGVhZGVyICkKIAotICAgICAgICBwcmludCAoIHNlY3Rpb25fdGl0bGVfaGVhZGVyMSArIHNlY3Rpb24ubmFtZSArIHNlY3Rpb25fdGl0bGVfaGVhZGVyMgotICAgICAgICAgICAgICAgICsgc2VjdGlvbi50aXRsZQotICAgICAgICAgICAgICAgICsgc2VjdGlvbl90aXRsZV9mb290ZXIgKQorICAgICAgICBwcmludCggc2VjdGlvbl90aXRsZV9oZWFkZXIxICsgc2VjdGlvbi5uYW1lICsgc2VjdGlvbl90aXRsZV9oZWFkZXIyCisgICAgICAgICAgICAgICArIHNlY3Rpb24udGl0bGUKKyAgICAgICAgICAgICAgICsgc2VjdGlvbl90aXRsZV9mb290ZXIgKQogCiAgICAgICAgIG1heHdpZHRoID0gMAogICAgICAgICBmb3IgYiBpbiBzZWN0aW9uLmJsb2Nrcy52YWx1ZXMoKToKQEAgLTYxMiw4ICs2MTIsOCBAQAogICAgICAgICB3aWR0aCA9IDcwICAjIFhYWCBtYWdpYyBudW1iZXIKICAgICAgICAgaWYgbWF4d2lkdGggPiAwOgogICAgICAgICAgICAgIyBwcmludCBzZWN0aW9uIHN5bm9wc2lzCi0gICAgICAgICAgICBwcmludCBzZWN0aW9uX3N5bm9wc2lzX2hlYWRlcgotICAgICAgICAgICAgcHJpbnQgJzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPicKKyAgICAgICAgICAgIHByaW50KCBzZWN0aW9uX3N5bm9wc2lzX2hlYWRlciApCisgICAgICAgICAgICBwcmludCggJzx0YWJsZSBjbGFzcz0ic3lub3BzaXMiPicgKQogCiAgICAgICAgICAgICBjb2x1bW5zID0gd2lkdGggLy8gbWF4d2lkdGgKICAgICAgICAgICAgIGlmIGNvbHVtbnMgPCAxOgpAQCAtNjUwLDE3ICs2NTAsMTcgQEAKIAogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICc8L3RkPicKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICI8L3RyPiIKLSAgICAgICAgICAgICAgICBwcmludCBsaW5lCisgICAgICAgICAgICAgICAgcHJpbnQoIGxpbmUgKQogCi0gICAgICAgICAgICBwcmludCAiPC90YWJsZT4iCi0gICAgICAgICAgICBwcmludCBzZWN0aW9uX3N5bm9wc2lzX2Zvb3RlcgorICAgICAgICAgICAgcHJpbnQoICI8L3RhYmxlPiIgKQorICAgICAgICAgICAgcHJpbnQoIHNlY3Rpb25fc3lub3BzaXNfZm9vdGVyICkKIAotICAgICAgICBwcmludCBkZXNjcmlwdGlvbl9oZWFkZXIKLSAgICAgICAgcHJpbnQgc2VsZi5tYWtlX2h0bWxfaXRlbXMoIHNlY3Rpb24uZGVzY3JpcHRpb24gKQotICAgICAgICBwcmludCBkZXNjcmlwdGlvbl9mb290ZXIKKyAgICAgICAgcHJpbnQoIGRlc2NyaXB0aW9uX2hlYWRlciApCisgICAgICAgIHByaW50KCBzZWxmLm1ha2VfaHRtbF9pdGVtcyggc2VjdGlvbi5kZXNjcmlwdGlvbiApICkKKyAgICAgICAgcHJpbnQoIGRlc2NyaXB0aW9uX2Zvb3RlciApCiAKICAgICBkZWYgIGJsb2NrX2VudGVyKCBzZWxmLCBibG9jayApOgotICAgICAgICBwcmludCBibG9ja19oZWFkZXIKKyAgICAgICAgcHJpbnQoIGJsb2NrX2hlYWRlciApCiAKICAgICAgICAgIyBwbGFjZSBodG1sIGFuY2hvciBpZiBuZWVkZWQKICAgICAgICAgaWYgYmxvY2submFtZToKQEAgLTY3Niw3ICs2NzYsOCBAQAogICAgICAgICBpZiBibG9jay5jb2RlOgogICAgICAgICAgICAgaGVhZGVyID0gJycKICAgICAgICAgICAgIGZvciBmIGluIHNlbGYuaGVhZGVycy5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgaWYgYmxvY2suc291cmNlLmZpbGVuYW1lLmZpbmQoIGYgKSA+PSAwOgorICAgICAgICAgICAgICAgIGhlYWRlcl9maWxlbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgoYmxvY2suc291cmNlLmZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGlmIGhlYWRlcl9maWxlbmFtZS5maW5kKCBvcy5wYXRoLm5vcm1wYXRoKCBmICkgKSA+PSAwOgogICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBzZWxmLmhlYWRlcnNbZl0gKyAnICgnICsgZiArICcpJwogICAgICAgICAgICAgICAgICAgICBicmVhawogCkBAIC02ODYsMjggKzY4NywyOCBAQAogIyAgICAgICAgICAgICAgICAgKyAiICciICsgYmxvY2suc291cmNlLmZpbGVuYW1lICsgIicuXG4iICkKIAogICAgICAgICAgICAgaWYgaGVhZGVyOgotICAgICAgICAgICAgICAgIHByaW50ICggaGVhZGVyX2xvY2F0aW9uX2hlYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgKyAnRGVmaW5lZCBpbiAnICsgaGVhZGVyICsgJy4nCi0gICAgICAgICAgICAgICAgICAgICAgICArIGhlYWRlcl9sb2NhdGlvbl9mb290ZXIgKQorICAgICAgICAgICAgICAgIHByaW50KCBoZWFkZXJfbG9jYXRpb25faGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICsgJ0RlZmluZWQgaW4gJyArIGhlYWRlciArICcuJworICAgICAgICAgICAgICAgICAgICAgICArIGhlYWRlcl9sb2NhdGlvbl9mb290ZXIgKQogCi0gICAgICAgICAgICBwcmludCBzb3VyY2VfaGVhZGVyCisgICAgICAgICAgICBwcmludCggc291cmNlX2hlYWRlciApCiAgICAgICAgICAgICBmb3IgbCBpbiBibG9jay5jb2RlOgotICAgICAgICAgICAgICAgIHByaW50IHNlbGYuaHRtbF9zb3VyY2VfcXVvdGUoIGwsIGJsb2NrLm5hbWUgKQotICAgICAgICAgICAgcHJpbnQgc291cmNlX2Zvb3RlcgorICAgICAgICAgICAgICAgIHByaW50KCBzZWxmLmh0bWxfc291cmNlX3F1b3RlKCBsLCBibG9jay5uYW1lICkgKQorICAgICAgICAgICAgcHJpbnQoIHNvdXJjZV9mb290ZXIgKQogCiAgICAgZGVmICBtYXJrdXBfZW50ZXIoIHNlbGYsIG1hcmt1cCwgYmxvY2sgKToKICAgICAgICAgaWYgbWFya3VwLnRhZyA9PSAiZGVzY3JpcHRpb24iOgotICAgICAgICAgICAgcHJpbnQgZGVzY3JpcHRpb25faGVhZGVyCisgICAgICAgICAgICBwcmludCggZGVzY3JpcHRpb25faGVhZGVyICkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50IG1hcmtlcl9oZWFkZXIgKyBtYXJrdXAudGFnICsgbWFya2VyX2ludGVyCisgICAgICAgICAgICBwcmludCggbWFya2VyX2hlYWRlciArIG1hcmt1cC50YWcgKyBtYXJrZXJfaW50ZXIgKQogCiAgICAgICAgIHNlbGYucHJpbnRfaHRtbF9tYXJrdXAoIG1hcmt1cCApCiAKICAgICBkZWYgIG1hcmt1cF9leGl0KCBzZWxmLCBtYXJrdXAsIGJsb2NrICk6CiAgICAgICAgIGlmIG1hcmt1cC50YWcgPT0gImRlc2NyaXB0aW9uIjoKLSAgICAgICAgICAgIHByaW50IGRlc2NyaXB0aW9uX2Zvb3RlcgorICAgICAgICAgICAgcHJpbnQoIGRlc2NyaXB0aW9uX2Zvb3RlciApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCBtYXJrZXJfZm9vdGVyCisgICAgICAgICAgICBwcmludCggbWFya2VyX2Zvb3RlciApCiAKICAgICBkZWYgIGJsb2NrX2V4aXQoIHNlbGYsIGJsb2NrICk6CiAgICAgICAgIHByaW50KCBibG9ja19mb290ZXJfc3RhcnQgKyBzZWxmLmZpbGVfcHJlZml4ICsgImluZGV4Lmh0bWwiCkBAIC03MTUsNyArNzE2LDcgQEAKICAgICAgICAgICAgICAgICsgYmxvY2tfZm9vdGVyX2VuZCApCiAKICAgICBkZWYgIHNlY3Rpb25fZXhpdCggc2VsZiwgc2VjdGlvbiApOgotICAgICAgICBwcmludCBodG1sX2Zvb3RlcgorICAgICAgICBwcmludCggaHRtbF9mb290ZXIgKQogCiAgICAgZGVmICBzZWN0aW9uX2R1bXBfYWxsKCBzZWxmICk6CiAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlbGYuc2VjdGlvbnM6CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvUkVBRE1FIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkOGU5Zi4uMDAwMDAwMAotLS0gYS9zcmMvdG9vbHMvZnRmdXp6ZXIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotZnRmdXp6ZXIKLT09PT09PT09Ci0KLQotZnRmdXp6ZXIuY2MKLS0tLS0tLS0tLS0tCi0KLVRoaXMgZmlsZSBjb250YWlucyBhIHRhcmdldCBmdW5jdGlvbiAgZm9yIEZyZWVUeXBlIGZ1enppbmcuICBJdCBjYW4gYmUKLXVzZWQgICB3aXRoICAgIGxpYkZ1enplciAgIChodHRwczovL2xsdm0ub3JnL2RvY3MvTGliRnV6emVyLmh0bWwpICAgb3IKLXBvdGVudGlhbGx5IGFueSBvdGhlciBzaW1pbGFyIGZ1enplci4KLQotVXNhZ2U6Ci0KLSAgMS4gQnVpbGQgIGBsaWJmcmVldHlwZS5hJyBhbmQgIGBmdGZ1enplci5jYycgdXNpbmcgIHRoZSBtb3N0ICByZWNlbnQKLSAgICAgY2xhbmcgY29tcGlsZXIgd2l0aCB0aGVzZSBmbGFnczoKLQotICAgICAgICMgZm9yIGZ1enplciBjb3ZlcmFnZSBmZWVkYmFjawotICAgICAgIC1mc2FuaXRpemUtY292ZXJhZ2U9ZWRnZSw4Yml0LWNvdW50ZXJzCi0gICAgICAgIyBmb3IgYnVnIGNoZWNraW5nCi0gICAgICAgLWZzYW5pdGl6ZT1hZGRyZXNzLHNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93LHNoaWZ0Ci0KLSAgICAgWW91ICBhbHNvIG5lZWQgIHRoZSBoZWFkZXIgIGZpbGVzIGZyb20gIHRoZSBgbGliYXJjaGl2ZScgIGxpYnJhcnkKLSAgICAgKGh0dHBzOi8vd3d3LmxpYmFyY2hpdmUub3JnLykgIGZvciBoYW5kbGluZyAgdGFyIGZpbGVzICAoc2VlIGZpbGUKLSAgICAgYGZ0bXV0YXRvci5jYycgYmVsb3cgZm9yIG1vcmUpLgotCi0gIDIuIExpbmsgd2l0aCBgbGliRnV6emVyJyAoaXQgY29udGFpbnMgYG1haW4nKSBhbmQgYGxpYmFyY2hpdmUnLgotCi0gIDMuIFJ1biB0aGUgZnV6emVyIG9uIHNvbWUgdGVzdCBjb3JwdXMuCi0KLVRoZSBleGFjdCBmbGFncyBhbmQgY29tbWFuZHMgbWF5IHZhcnkuCi0KLSAgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9vc3MtZnV6ei90cmVlL21hc3Rlci9wcm9qZWN0cy9mcmVldHlwZTIKLQotVGhlcmUgaXMgYSBjb250aW51b3VzIGZ1enppbmcgYm90IHRoYXQgcnVucyBmdGZ1enplci4KLQotICBodHRwczovL29zcy1mdXp6LmNvbQotCi0oWW91IG5lZWQgYW4gYWNjb3VudCAgdG8gYmUgYWJsZSB0byBzZWUgY292ZXJhZ2UgIHJlcG9ydHMgYW5kIHRoZSBsaWtlCi1vbiBvc3MtZnV6ei5jb20uKQotCi1DaGVjayB0aGUgYm90IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBtb3N0IGN1cnJlbnQgc2V0dGluZ3MuCi0KLQotZnRtdXRhdG9yLmNjCi0tLS0tLS0tLS0tLS0KLQotRnJlZVR5cGUgaGFzIHRoZSAgYWJpbGl0eSB0byBgYXR0YWNoJyBhdXhpbGlhcnkgZmlsZXMgdG8gIGEgZm9udCBmaWxlLAotcHJvdmlkaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uICBUaGUgbWFpbiB1c2FnZSBpcyB0byBsb2FkIEFGTSBmaWxlcwotZm9yIFBvc3RTY3JpcHQgVHlwZSAxIGZvbnRzLgotCi1Ib3dldmVyLCBsaWJGdXp6ZXIgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgIG11dGF0aW9uIG9mIGEgc2luZ2xlIGlucHV0Ci1maWxlLiAgIEZvciAgdGhpcyAgcmVhc29uLCAgYGZ0bXV0YXRvci5jYycgY29udGFpbnMgIGEgIGN1c3RvbSAgZnV6emVyCi1tdXRhdG9yIHRoYXQgdXNlcyBhbiB1bmNvbXByZXNzZWQgdGFyICBmaWxlIGFyY2hpdmUgYXMgdGhlIGlucHV0LiAgVGhlCi1maXJzdCBmaWxlIGluICBzdWNoIGEgdGFyYmFsbCBnZXRzICBvcGVuZWQgYnkgRnJlZVR5cGUgYXMgIGEgZm9udCwgYWxsCi1vdGhlciBmaWxlcyBhcmUgdHJlYXRlZCBhcyBpbnB1dCBmb3IgYEZUX0F0dGFjaF9TdHJlYW0nLgotCi1Db21waWxhdGlvbiBpcyBzaW1pbGFyIHRvIGBmdGZ1enplci5jJy4KLQotCi1ydW5pbnB1dC5jYwotLS0tLS0tLS0tLS0KLQotVG8gcnVuIHRoZSB0YXJnZXQgZnVuY3Rpb24gb24gYSBzZXQgb2YgaW5wdXQgZmlsZXMsIHRoaXMgZmlsZSBjb250YWlucwotYSAgIGNvbnZlbmllbmNlICBgbWFpbicgICBmdW5jdGlvbi4gICBMaW5rICAgaXQgIHdpdGggICBgZnRmdXp6ZXIuY2MnLAotYGxpYmZyZWV0eXBlLmEnLCBhbmQgYGxpYmFyY2hpdmUnIGFuZCBydW4gbGlrZQotCi0gIC4vYS5vdXQgbXlfdGVzdHNfaW5wdXRzLyoKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgMjAxNS0yMDE4IGJ5Ci1EYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0KLVRoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKLW1vZGlmaWVkLCAgYW5kIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIHRlcm1zIG9mICB0aGUgIEZyZWVUeXBlIHByb2plY3QKLWxpY2Vuc2UsICBMSUNFTlNFLlRYVC4gIEJ5ICBjb250aW51aW5nIHRvICB1c2UsIG1vZGlmeSwgIG9yIGRpc3RyaWJ1dGUKLXRoaXMgZmlsZSB5b3UgIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCAgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQKLWFuZCBhY2NlcHQgaXQgZnVsbHkuCi0KLQotLS0tIGVuZCBvZiBSRUFETUUgLS0tCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgYi9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZjJiYzkuLjAwMDAwMDAKLS0tIGEvc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8vIGZ0ZnV6emVyLmNjCi0vLwotLy8gICBBIGZ1enppbmcgZnVuY3Rpb24gdG8gdGVzdCBGcmVlVHlwZSB3aXRoIGxpYkZ1enplci4KLS8vCi0vLyBDb3B5cmlnaHQgMjAxNS0yMDE4IGJ5Ci0vLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0vLwotLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAotLy8gbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKLS8vIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQotLy8gdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCi0vLyB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCi0KLQotLy8gd2UgdXNlIGB1bmlxdWVfcHRyJywgYGRlY2x0eXBlJywgYW5kIG90aGVyIGdpbW1pY2tzIGRlZmluZWQgc2luY2UgQysrMTEKLSNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKLSMgIGVycm9yICJhIEMrKzExIGNvbXBpbGVyIGlzIG5lZWRlZCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8YXJjaGl2ZS5oPgotI2luY2x1ZGUgPGFyY2hpdmVfZW50cnkuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotCi0gIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0dMWVBIX0gKLSNpbmNsdWRlIEZUX0NBQ0hFX0gKLSNpbmNsdWRlIEZUX0NBQ0hFX0NIQVJNQVBfSAotI2luY2x1ZGUgRlRfQ0FDSEVfSU1BR0VfSAotI2luY2x1ZGUgRlRfQ0FDSEVfU01BTExfQklUTUFQU19ICi0jaW5jbHVkZSBGVF9TWU5USEVTSVNfSAotI2luY2x1ZGUgRlRfQURWQU5DRVNfSAotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0jaW5jbHVkZSBGVF9CQk9YX0gKLSNpbmNsdWRlIEZUX01PRFVMRV9ICi0jaW5jbHVkZSBGVF9EUklWRVJfSAotI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICi0KLQotICBzdGF0aWMgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgc3RhdGljIGludCAgICAgICAgIEluaXRSZXN1bHQ7Ci0KLQotICBzdHJ1Y3QgRlRfR2xvYmFsCi0gIHsKLSAgICBGVF9HbG9iYWwoKQotICAgIHsKLSAgICAgIEluaXRSZXN1bHQgPSBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOwotICAgICAgaWYgKCBJbml0UmVzdWx0ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICAvLyB0cnkgdG8gYWN0aXZhdGUgQWRvYmUncyBDRkYgZW5naW5lOyBpdCBtaWdodCBub3QgYmUgdGhlIGRlZmF1bHQKLSAgICAgIHVuc2lnbmVkIGludCAgY2ZmX2hpbnRpbmdfZW5naW5lID0gRlRfSElOVElOR19BRE9CRTsKLSAgICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgImNmZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICJoaW50aW5nLWVuZ2luZSIsICZjZmZfaGludGluZ19lbmdpbmUgKTsKLSAgICB9Ci0KLSAgICB+RlRfR2xvYmFsKCkKLSAgICB7Ci0gICAgICBGVF9Eb25lX0ZyZWVUeXBlKCBsaWJyYXJ5ICk7Ci0gICAgfQotICB9OwotCi0gIEZUX0dsb2JhbCAgZ2xvYmFsX2Z0OwotCi0KLSAgLy8gV2Ugd2FudCB0byBzZWxlY3QgbiB2YWx1ZXMgYXQgcmFuZG9tICh3aXRob3V0IHJlcGV0aXRpb24pLAotICAvLyB3aXRoIDAgPCBuIDw9IE4uICBUaGUgYWxnb3JpdGhtIGlzIHRha2VuIGZyb20gVEFvQ1AsIFZvbC4gMgotICAvLyAoQWxnb3JpdGhtIFMsIHNlbGVjdGlvbiBzYW1wbGluZyB0ZWNobmlxdWUpCi0gIHN0cnVjdCBSYW5kb20KLSAgewotICAgIGludCAgbjsKLSAgICBpbnQgIE47Ci0KLSAgICBpbnQgIHQ7IC8vIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgc28gZmFyCi0gICAgaW50ICBtOyAvLyBudW1iZXIgb2Ygc2VsZWN0ZWQgdmFsdWVzIHNvIGZhcgotCi0gICAgdWludDMyX3QgIHI7IC8vIHRoZSBjdXJyZW50IHBzZXVkby1yYW5kb20gbnVtYmVyCi0KLSAgICBSYW5kb20oIGludCBuXywKLSAgICAgICAgICAgIGludCBOXyApCi0gICAgOiBuKCBuXyApLAotICAgICAgTiggTl8gKQotICAgIHsKLSAgICAgIHQgPSAwOwotICAgICAgbSA9IDA7Ci0KLSAgICAgIC8vIElkZWFsbHksIHRoaXMgc2hvdWxkIGRlcGVuZCBvbiB0aGUgaW5wdXQgZmlsZSwKLSAgICAgIC8vIGZvciBleGFtcGxlLCB0YWtpbmcgdGhlIHNoYTI1NiBhcyBpbnB1dDsKLSAgICAgIC8vIGhvd2V2ZXIsIHRoaXMgaXMgb3ZlcmtpbGwgZm9yIGZ1enp5aW5nIHRlc3RzLgotICAgICAgciA9IDEyMzQ1OwotICAgIH0KLQotICAgIGludCBnZXQoKQotICAgIHsKLSAgICAgIGlmICggbSA+PSBuICkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUmVkbzoKLSAgICAgIC8vIFdlIGNhbid0IHVzZSBgcmFuZCc6IGRpZmZlcmVudCBDIGxpYnJhcmllcyBtaWdodCBwcm92aWRlCi0gICAgICAvLyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uICBBcyBhIHJlcGxhY2VtZW50LAotICAgICAgLy8gd2UgdXNlIGEgMzJiaXQgdmVyc2lvbiBvZiB0aGUgYHhvcnNoaWZ0JyBhbGdvcml0aG0uCi0gICAgICByIF49IHIgPDwgMTM7Ci0gICAgICByIF49IHIgPj4gMTc7Ci0gICAgICByIF49IHIgPDwgNTsKLQotICAgICAgZG91YmxlICBVID0gZG91YmxlKCByICkgLyBVSU5UMzJfTUFYOwotCi0gICAgICBpZiAoICggTiAtIHQgKSAqIFUgPj0gKCBuIC0gbSApICkKLSAgICAgIHsKLSAgICAgICAgdCsrOwotICAgICAgICBnb3RvIFJlZG87Ci0gICAgICB9Ci0KLSAgICAgIHQrKzsKLSAgICAgIG0rKzsKLQotICAgICAgcmV0dXJuIHQ7Ci0gICAgfQotICB9OwotCi0KLSAgc3RhdGljIGludAotICBhcmNoaXZlX3JlYWRfZW50cnlfZGF0YSggc3RydWN0IGFyY2hpdmUgICAqYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8RlRfQnl0ZT4gICp2dyApCi0gIHsKLSAgICBpbnQgICAgICAgICAgICAgcjsKLSAgICBjb25zdCBGVF9CeXRlKiAgYnVmZjsKLSAgICBzaXplX3QgICAgICAgICAgc2l6ZTsKLSAgICBpbnQ2NF90ICAgICAgICAgb2Zmc2V0OwotCi0gICAgZm9yICg7OykKLSAgICB7Ci0gICAgICByID0gYXJjaGl2ZV9yZWFkX2RhdGFfYmxvY2soIGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqKj4oICZidWZmICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0ICk7Ci0gICAgICBpZiAoIHIgPT0gQVJDSElWRV9FT0YgKQotICAgICAgICByZXR1cm4gQVJDSElWRV9PSzsKLSAgICAgIGlmICggciAhPSBBUkNISVZFX09LICkKLSAgICAgICAgcmV0dXJuIHI7Ci0KLSAgICAgIHZ3LT5pbnNlcnQoIHZ3LT5lbmQoKSwgYnVmZiwgYnVmZiArIHNpemUgKTsKLSAgICB9Ci0gIH0KLQotCi0gIHN0YXRpYyB2ZWN0b3I8dmVjdG9yPEZUX0J5dGU+PgotICBwYXJzZV9kYXRhKCBjb25zdCB1aW50OF90KiAgZGF0YSwKLSAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIHNpemUgKQotICB7Ci0gICAgc3RydWN0IGFyY2hpdmVfZW50cnkqICAgIGVudHJ5OwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICByOwotICAgIHZlY3Rvcjx2ZWN0b3I8RlRfQnl0ZT4+ICBmaWxlczsKLQotICAgIHVuaXF1ZV9wdHI8c3RydWN0ICBhcmNoaXZlLAotICAgICAgICAgICAgICAgZGVjbHR5cGUgKCBhcmNoaXZlX3JlYWRfZnJlZSApKj4gIGEoIGFyY2hpdmVfcmVhZF9uZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3JlYWRfZnJlZSApOwotCi0gICAgLy8gYWN0aXZhdGUgcmVhZGluZyBvZiB1bmNvbXByZXNzZWQgdGFyIGFyY2hpdmVzCi0gICAgYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3RhciggYS5nZXQoKSApOwotCi0gICAgLy8gdGhlIG5lZWQgZm9yIGBjb25zdF9jYXN0JyB3YXMgcmVtb3ZlZCB3aXRoIGxpYmFyY2hpdmUgY29tbWl0IGJlNGQ0ZGQKLSAgICBpZiAoICEoIHIgPSBhcmNoaXZlX3JlYWRfb3Blbl9tZW1vcnkoCi0gICAgICAgICAgICAgICAgICBhLmdldCgpLAotICAgICAgICAgICAgICAgICAgY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCBkYXRhICkgKSwKLSAgICAgICAgICAgICAgICAgIHNpemUgKSApICkKLSAgICB7Ci0gICAgICB1bmlxdWVfcHRyPHN0cnVjdCAgYXJjaGl2ZSwKLSAgICAgICAgICAgICAgICAgZGVjbHR5cGUgKCBhcmNoaXZlX3JlYWRfY2xvc2UgKSo+ICBhX29wZW4oIGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3JlYWRfY2xvc2UgKTsKLQotICAgICAgLy8gcmVhZCBmaWxlcyBjb250YWluZWQgaW4gYXJjaGl2ZQotICAgICAgZm9yICg7OykKLSAgICAgIHsKLSAgICAgICAgciA9IGFyY2hpdmVfcmVhZF9uZXh0X2hlYWRlciggYV9vcGVuLmdldCgpLCAmZW50cnkgKTsKLSAgICAgICAgaWYgKCByID09IEFSQ0hJVkVfRU9GICkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCByICE9IEFSQ0hJVkVfT0sgKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHZlY3RvcjxGVF9CeXRlPiAgZW50cnlfZGF0YTsKLSAgICAgICAgciA9IGFyY2hpdmVfcmVhZF9lbnRyeV9kYXRhKCBhLmdldCgpLCAmZW50cnlfZGF0YSApOwotICAgICAgICBpZiAoIHIgIT0gQVJDSElWRV9PSyApCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZmlsZXMucHVzaF9iYWNrKCBtb3ZlKCBlbnRyeV9kYXRhICkgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGZpbGVzLnNpemUoKSA9PSAwICkKLSAgICAgIGZpbGVzLmVtcGxhY2VfYmFjayggZGF0YSwgZGF0YSArIHNpemUgKTsKLQotICAgIHJldHVybiBmaWxlczsKLSAgfQotCi0KLSAgc3RhdGljIHZvaWQKLSAgc2V0SW50ZXJtZWRpYXRlQXhpcyggRlRfRmFjZSAgZmFjZSApCi0gIHsKLSAgICAvLyBvbmx5IGhhbmRsZSBNdWx0aXBsZSBNYXN0ZXJzIGFuZCBHWCB2YXJpYXRpb24gZm9udHMKLSAgICBpZiAoICFGVF9IQVNfTVVMVElQTEVfTUFTVEVSUyggZmFjZSApICkKLSAgICAgIHJldHVybjsKLQotICAgIC8vIGdldCB2YXJpYXRpb24gZGF0YSBmb3IgY3VycmVudCBpbnN0YW5jZQotICAgIEZUX01NX1ZhciogIHZhcmlhdGlvbnNfcHRyID0gbnVsbHB0cjsKLSAgICBpZiAoIEZUX0dldF9NTV9WYXIoIGZhY2UsICZ2YXJpYXRpb25zX3B0ciApICkKLSAgICAgIHJldHVybjsKLQotICAgIHVuaXF1ZV9wdHI8RlRfTU1fVmFyLAotICAgICAgICAgICAgICAgZGVjbHR5cGUgKCBmcmVlICkqPiAgdmFyaWF0aW9ucyggdmFyaWF0aW9uc19wdHIsIGZyZWUgKTsKLSAgICB2ZWN0b3I8RlRfRml4ZWQ+ICAgICAgICAgICAgICAgIGNvb3JkcyggdmFyaWF0aW9ucy0+bnVtX2F4aXMgKTsKLQotICAgIC8vIHNlbGVjdCBhbiBhcmJpdHJhcnkgaW5zdGFuY2UKLSAgICBmb3IgKCB1bnNpZ25lZCBpbnQgIGkgPSAwOyBpIDwgdmFyaWF0aW9ucy0+bnVtX2F4aXM7IGkrKyApCi0gICAgICBjb29yZHNbaV0gPSAoIHZhcmlhdGlvbnMtPmF4aXNbaV0ubWluaW11bSArCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbnMtPmF4aXNbaV0uZGVmICAgICApIC8gMjsKLQotICAgIGlmICggRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCggY29vcmRzLnNpemUoKSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5kYXRhKCkgKSApCi0gICAgICByZXR1cm47Ci0gIH0KLQotCi0gIC8vIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb24gdG8gdGhlIGxpYkZ1enplciBsaWJyYXJ5Ci0gIGV4dGVybiAiQyIgaW50Ci0gIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoIGNvbnN0IHVpbnQ4X3QqICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZV8gKQotICB7Ci0gICAgYXNzZXJ0KCAhSW5pdFJlc3VsdCApOwotCi0gICAgaWYgKCBzaXplXyA8IDEgKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCB2ZWN0b3I8dmVjdG9yPEZUX0J5dGU+PiYgIGZpbGVzID0gcGFyc2VfZGF0YSggZGF0YSwgc2l6ZV8gKTsKLQotICAgIEZUX0ZhY2UgICAgICAgICBmYWNlOwotICAgIEZUX0ludDMyICAgICAgICBsb2FkX2ZsYWdzICA9IEZUX0xPQURfREVGQVVMVDsKLSNpZiAwCi0gICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlID0gRlRfUkVOREVSX01PREVfTk9STUFMOwotI2VuZGlmCi0KLSAgICAvLyBXZSB1c2UgYSBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggaGVyZSwgYXQgdGhlIGNvc3Qgb2YgY2FsbGluZwotICAgIC8vIGBGVF9OZXdfRmFjZScgcXVpdGUgb2Z0ZW4uICBUaGUgaWRlYSBpcyB0aGF0IHRoZSBmdXp6ZXIgc2hvdWxkIGJlCi0gICAgLy8gYWJsZSB0byB0cnkgYWxsIGZhY2VzIGFuZCBuYW1lZCBpbnN0YW5jZXMgb2YgYSBmb250LCBleHBlY3RpbmcgdGhhdAotICAgIC8vIHNvbWUgZmFjZXMgZG9uJ3Qgd29yayBmb3IgdmFyaW91cyByZWFzb25zLCBlLmcuLCBhIGJyb2tlbiBzdWJmb250LCBvcgotICAgIC8vIGFuIHVuc3VwcG9ydGVkIE5GTlQgYml0bWFwIGZvbnQgaW4gYSBNYWMgZGZvbnQgcmVzb3VyY2UgdGhhdCBob2xkcwotICAgIC8vIG1vcmUgdGhhbiBhIHNpbmdsZSBmb250LgotCi0gICAgLy8gZ2V0IG51bWJlciBvZiBmYWNlcwotICAgIGlmICggRlRfTmV3X01lbW9yeV9GYWNlKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1swXS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKWZpbGVzWzBdLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWNlICkgKQotICAgICAgcmV0dXJuIDA7Ci0gICAgbG9uZyAgbnVtX2ZhY2VzID0gZmFjZS0+bnVtX2ZhY2VzOwotICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOwotCi0gICAgLy8gbG9vcCBvdmVyIHVwIHRvIDIwIGFyYml0cmFyaWx5IHNlbGVjdGVkIGZhY2VzCi0gICAgLy8gZnJvbSBpbmRleCByYW5nZSBbMDtudW0tZmFjZXMtMV0KLSAgICBsb25nICBtYXhfZmFjZV9jbnQgPSBudW1fZmFjZXMgPCAyMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudW1fZmFjZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjA7Ci0KLSAgICBSYW5kb20gIGZhY2VzX3Bvb2woIChpbnQpbWF4X2ZhY2VfY250LCAoaW50KW51bV9mYWNlcyApOwotCi0gICAgZm9yICggbG9uZyAgZmFjZV9jbnQgPSAwOwotICAgICAgICAgIGZhY2VfY250IDwgbWF4X2ZhY2VfY250OwotICAgICAgICAgIGZhY2VfY250KysgKQotICAgIHsKLSAgICAgIGxvbmcgIGZhY2VfaW5kZXggPSBmYWNlc19wb29sLmdldCgpIC0gMTsKLQotICAgICAgLy8gZ2V0IG51bWJlciBvZiBpbnN0YW5jZXMKLSAgICAgIGlmICggRlRfTmV3X01lbW9yeV9GYWNlKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzWzBdLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmaWxlc1swXS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSggZmFjZV9pbmRleCArIDEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjZSApICkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBsb25nICBudW1faW5zdGFuY2VzID0gZmFjZS0+c3R5bGVfZmxhZ3MgPj4gMTY7Ci0gICAgICBGVF9Eb25lX0ZhY2UoIGZhY2UgKTsKLQotICAgICAgLy8gbG9vcCBvdmVyIHRoZSBmYWNlIHdpdGhvdXQgaW5zdGFuY2UgKGluZGV4IDApCi0gICAgICAvLyBhbmQgdXAgdG8gMjAgYXJiaXRyYXJpbHkgc2VsZWN0ZWQgaW5zdGFuY2VzCi0gICAgICAvLyBmcm9tIGluZGV4IHJhbmdlIFsxO251bV9pbnN0YW5jZXNdCi0gICAgICBsb25nICBtYXhfaW5zdGFuY2VfY250ID0gbnVtX2luc3RhbmNlcyA8IDIwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bV9pbnN0YW5jZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjA7Ci0KLSAgICAgIFJhbmRvbSAgaW5zdGFuY2VzX3Bvb2woIChpbnQpbWF4X2luc3RhbmNlX2NudCwgKGludCludW1faW5zdGFuY2VzICk7Ci0KLSAgICAgIGZvciAoIGxvbmcgIGluc3RhbmNlX2NudCA9IDA7Ci0gICAgICAgICAgICBpbnN0YW5jZV9jbnQgPD0gbWF4X2luc3RhbmNlX2NudDsKLSAgICAgICAgICAgIGluc3RhbmNlX2NudCsrICkKLSAgICAgIHsKLSAgICAgICAgbG9uZyAgaW5zdGFuY2VfaW5kZXggPSAwOwotCi0gICAgICAgIGlmICggIWluc3RhbmNlX2NudCApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIEZUX05ld19NZW1vcnlfRmFjZSggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbMF0uZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmaWxlc1swXS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWNlICkgKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgaW5zdGFuY2VfaW5kZXggPSBpbnN0YW5jZXNfcG9vbC5nZXQoKTsKLQotICAgICAgICAgIGlmICggRlRfTmV3X01lbW9yeV9GYWNlKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1swXS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKWZpbGVzWzBdLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBpbnN0YW5jZV9pbmRleCA8PCAxNiApICsgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2UgKSApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGlucHV0IGZpbGUgY29taW5nIGZyb20gYW4gYXJjaGl2ZSwKLSAgICAgICAgLy8gYXR0YWNoIHRoZW0gKHN0YXJ0aW5nIHdpdGggdGhlIHNlY29uZCBmaWxlKSB1c2luZyB0aGUgb3JkZXIgZ2l2ZW4KLSAgICAgICAgLy8gaW4gdGhlIGFyY2hpdmUKLSAgICAgICAgZm9yICggc2l6ZV90ICBmaWxlc19pbmRleCA9IDE7Ci0gICAgICAgICAgICAgIGZpbGVzX2luZGV4IDwgZmlsZXMuc2l6ZSgpOwotICAgICAgICAgICAgICBmaWxlc19pbmRleCsrICkKLSAgICAgICAgewotICAgICAgICAgIEZUX09wZW5fQXJncyAgb3Blbl9hcmdzID0ge307Ci0gICAgICAgICAgb3Blbl9hcmdzLmZsYWdzICAgICAgICAgPSBGVF9PUEVOX01FTU9SWTsKLSAgICAgICAgICBvcGVuX2FyZ3MubWVtb3J5X2Jhc2UgICA9IGZpbGVzW2ZpbGVzX2luZGV4XS5kYXRhKCk7Ci0gICAgICAgICAgb3Blbl9hcmdzLm1lbW9yeV9zaXplICAgPSAoRlRfTG9uZylmaWxlc1tmaWxlc19pbmRleF0uc2l6ZSgpOwotCi0gICAgICAgICAgLy8gdGhlIGxhc3QgYXJjaGl2ZSBlbGVtZW50IHdpbGwgYmUgZXZlbnR1YWxseSB1c2VkIGFzIHRoZQotICAgICAgICAgIC8vIGF0dGFjaG1lbnQKLSAgICAgICAgICBGVF9BdHRhY2hfU3RyZWFtKCBmYWNlLCAmb3Blbl9hcmdzICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBsb29wIG92ZXIgYW4gYXJiaXRyYXJ5IHNpemUgZm9yIG91dGxpbmVzCi0gICAgICAgIC8vIGFuZCB1cCB0byB0ZW4gYXJiaXRyYXJpbHkgc2VsZWN0ZWQgYml0bWFwIHN0cmlrZSBzaXplcwotICAgICAgICAvLyBmcm9tIHRoZSByYW5nZSBbMDtudW1fZml4ZWRfc2l6ZXMgLSAxXQotICAgICAgICBpbnQgIG1heF9zaXplX2NudCA9IGZhY2UtPm51bV9maXhlZF9zaXplcyA8IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPm51bV9maXhlZF9zaXplcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxMDsKLQotICAgICAgICBSYW5kb20gc2l6ZXNfcG9vbCggbWF4X3NpemVfY250LCBmYWNlLT5udW1fZml4ZWRfc2l6ZXMgKTsKLQotICAgICAgICBmb3IgKCBpbnQgIHNpemVfY250ID0gMDsKLSAgICAgICAgICAgICAgc2l6ZV9jbnQgPD0gbWF4X3NpemVfY250OwotICAgICAgICAgICAgICBzaXplX2NudCsrICkKLSAgICAgICAgewotICAgICAgICAgIEZUX0ludDMyICBmbGFncyA9IGxvYWRfZmxhZ3M7Ci0KLSAgICAgICAgICBpbnQgIHNpemVfaW5kZXggPSAwOwotCi0gICAgICAgICAgaWYgKCAhc2l6ZV9jbnQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHNldCB1cCAyMHB0IGF0IDcyZHBpIGFzIGFuIGFyYml0cmFyeSBzaXplCi0gICAgICAgICAgICBpZiAoIEZUX1NldF9DaGFyX1NpemUoIGZhY2UsIDIwICogNjQsIDIwICogNjQsIDcyLCA3MiApICkKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmbGFncyB8PSBGVF9MT0FEX05PX0JJVE1BUDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGJpdG1hcCBzdHJpa2VzIGFyZSBub3QgYWN0aXZlIGZvciBmb250IHZhcmlhdGlvbnMKLSAgICAgICAgICAgIGlmICggaW5zdGFuY2VfaW5kZXggKQotICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgc2l6ZV9pbmRleCA9IHNpemVzX3Bvb2wuZ2V0KCkgLSAxOwotCi0gICAgICAgICAgICBpZiAoIEZUX1NlbGVjdF9TaXplKCBmYWNlLCBzaXplX2luZGV4ICkgKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZsYWdzIHw9IEZUX0xPQURfQ09MT1I7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gdGVzdCBNTSBpbnRlcmZhY2Ugb25seSBmb3IgYSBmYWNlIHdpdGhvdXQgYSBzZWxlY3RlZCBpbnN0YW5jZQotICAgICAgICAgIC8vIGFuZCB3aXRob3V0IGEgc2VsZWN0ZWQgYml0bWFwIHN0cmlrZQotICAgICAgICAgIGlmICggIWluc3RhbmNlX2luZGV4ICYmICFzaXplX2NudCApCi0gICAgICAgICAgICBzZXRJbnRlcm1lZGlhdGVBeGlzKCBmYWNlICk7Ci0KLSAgICAgICAgICAvLyBsb29wIG92ZXIgYWxsIGdseXBocwotICAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCAgZ2x5cGhfaW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGdseXBoX2luZGV4IDwgKHVuc2lnbmVkIGludClmYWNlLT5udW1fZ2x5cGhzOwotICAgICAgICAgICAgICAgIGdseXBoX2luZGV4KysgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggRlRfTG9hZF9HbHlwaCggZmFjZSwgZ2x5cGhfaW5kZXgsIGZsYWdzICkgKQotICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gUmVuZGVyaW5nIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZSBhbmQgdGhlIGxlYXN0IGludGVyZXN0aW5nIHBhcnQuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gaWYgKCBGVF9SZW5kZXJfR2x5cGgoIGZhY2UtPmdseXBoLCByZW5kZXJfbW9kZSkgKQotICAgICAgICAgICAgLy8gICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIEZUX0dseXBoU2xvdF9FbWJvbGRlbiggZmFjZS0+Z2x5cGggKTsKLQotI2lmIDAKLSAgICAgICAgICAgIEZUX0dseXBoICBnbHlwaDsKLSAgICAgICAgICAgIGlmICggIUZUX0dldF9HbHlwaCggZmFjZS0+Z2x5cGgsICZnbHlwaCApICkKLSAgICAgICAgICAgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGggKTsKLQotICAgICAgICAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSAmZmFjZS0+Z2x5cGgtPm91dGxpbmU7Ci0gICAgICAgICAgICBGVF9NYXRyaXggICAgcm90MzAgICA9IHsgMHhEREI0LCAtMHg4MDAwLCAweDgwMDAsIDB4RERCNCB9OwotCi0gICAgICAgICAgICBGVF9PdXRsaW5lX1RyYW5zZm9ybSggb3V0bGluZSwgJnJvdDMwICk7Ci0KLSAgICAgICAgICAgIEZUX0JCb3ggIGJib3g7Ci0gICAgICAgICAgICBGVF9PdXRsaW5lX0dldF9CQm94KCBvdXRsaW5lLCAmYmJveCApOwotI2VuZGlmCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEZUX0RvbmVfRmFjZSggZmFjZSApOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotICB9Ci0KLQotLy8gRU5ECmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRtdXRhdG9yLmNjIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0bXV0YXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU0YjE0MC4uMDAwMDAwMAotLS0gYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRtdXRhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8vIGZ0bXV0YXRvci5jYwotLy8KLS8vICAgQSBjdXN0b20gZnV6emVyIG11dGF0b3IgdG8gdGVzdCBmb3IgRnJlZVR5cGUgd2l0aCBsaWJGdXp6ZXIuCi0vLwotLy8gQ29weXJpZ2h0IDIwMTUtMjAxOCBieQotLy8gRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgotLy8KLS8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKLS8vIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0Ci0vLyBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKLS8vIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAotLy8gdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgotCi0KLS8vIFNpbmNlIGB0YXInIGlzIG5vdCBhIHZhbGlkIGZvcm1hdCBmb3IgaW5wdXQgdG8gRnJlZVR5cGUsIHRyZWF0IGFueSBpbnB1dAotLy8gdGhhdCBsb29rcyBsaWtlIGB0YXInIGFzIG11bHRpcGxlIGZpbGVzIGFuZCBtdXRhdGUgdGhlbSBzZXBhcmF0ZWx5LgotLy8KLS8vIEluIHRoZSBmdXR1cmUsIGEgdmFyaWF0aW9uIG9mIHRoaXMgbWF5IGJlIHVzZWQgdG8gZ3VpZGUgbXV0YXRpb24gb24gYQotLy8gbG9naWNhbGx5IGhpZ2hlciBsZXZlbC4KLQotCi0vLyB3ZSB1c2UgYHVuaXF1ZV9wdHInLCBgZGVjbHR5cGUnLCBhbmQgb3RoZXIgZ2ltbWlja3MgZGVmaW5lZCBzaW5jZSBDKysxMQotI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAotIyAgZXJyb3IgImEgQysrMTEgY29tcGlsZXIgaXMgbmVlZGVkIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxjc3RkaW50PgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGFyY2hpdmUuaD4KLSNpbmNsdWRlIDxhcmNoaXZlX2VudHJ5Lmg+Ci0KLSNpbmNsdWRlICJGdXp6ZXJJbnRlcmZhY2UuaCIKLQotCi0gIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLQotICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGJ5IGBmdGZ1enplci5jYycuCi0gIGV4dGVybiAiQyIgaW50Ci0gIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoIGNvbnN0IHVpbnQ4X3QqICBEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgU2l6ZSApOwotCi0KLSAgc3RhdGljIHZvaWQKLSAgY2hlY2tfcmVzdWx0KCBzdHJ1Y3QgYXJjaGl2ZSogIGEsCi0gICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICByICkKLSAgewotICAgIGlmICggciA9PSBBUkNISVZFX09LICkKLSAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIqICBtID0gYXJjaGl2ZV9lcnJvcl9zdHJpbmcoIGEgKTsKLSAgICB3cml0ZSggMSwgbSwgc3RybGVuKCBtICkgKTsKLSAgICBleGl0KCAxICk7Ci0gIH0KLQotCi0gIHN0YXRpYyBpbnQKLSAgYXJjaGl2ZV9yZWFkX2VudHJ5X2RhdGEoIHN0cnVjdCBhcmNoaXZlICAgKmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHVpbnQ4X3Q+ICAqdncgKQotICB7Ci0gICAgaW50ICAgICAgICAgICAgIHI7Ci0gICAgY29uc3QgdWludDhfdCogIGJ1ZmY7Ci0gICAgc2l6ZV90ICAgICAgICAgIHNpemU7Ci0gICAgaW50NjRfdCAgICAgICAgIG9mZnNldDsKLQotICAgIGZvciAoOzspCi0gICAgewotICAgICAgciA9IGFyY2hpdmVfcmVhZF9kYXRhX2Jsb2NrKCBhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKio+KCAmYnVmZiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCApOwotICAgICAgaWYgKCByID09IEFSQ0hJVkVfRU9GICkKLSAgICAgICAgcmV0dXJuIEFSQ0hJVkVfT0s7Ci0gICAgICBpZiAoIHIgIT0gQVJDSElWRV9PSyApCi0gICAgICAgIHJldHVybiByOwotCi0gICAgICB2dy0+aW5zZXJ0KCB2dy0+ZW5kKCksIGJ1ZmYsIGJ1ZmYgKyBzaXplICk7Ci0gICAgfQotICB9Ci0KLQotICBzdGF0aWMgdmVjdG9yPHZlY3Rvcjx1aW50OF90Pj4KLSAgcGFyc2VfZGF0YSggY29uc3QgdWludDhfdCogIGRhdGEsCi0gICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBzaXplICkKLSAgewotICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5KiAgICBlbnRyeTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcjsKLSAgICB2ZWN0b3I8dmVjdG9yPHVpbnQ4X3Q+PiAgZmlsZXM7Ci0KLSAgICB1bmlxdWVfcHRyPHN0cnVjdCAgYXJjaGl2ZSwKLSAgICAgICAgICAgICAgIGRlY2x0eXBlICggYXJjaGl2ZV9yZWFkX2ZyZWUgKSo+ICBhKCBhcmNoaXZlX3JlYWRfbmV3KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV9yZWFkX2ZyZWUgKTsKLQotICAgIC8vIGFjdGl2YXRlIHJlYWRpbmcgb2YgdW5jb21wcmVzc2VkIHRhciBhcmNoaXZlcwotICAgIGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF90YXIoIGEuZ2V0KCkgKTsKLQotICAgIC8vIHRoZSBuZWVkIGZvciBgY29uc3RfY2FzdCcgd2FzIHJlbW92ZWQgd2l0aCBsaWJhcmNoaXZlIGNvbW1pdCBiZTRkNGRkCi0gICAgaWYgKCAhKCByID0gYXJjaGl2ZV9yZWFkX29wZW5fbWVtb3J5KAotICAgICAgICAgICAgICAgICAgYS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPiggZGF0YSApICksCi0gICAgICAgICAgICAgICAgICBzaXplICkgKSApCi0gICAgewotICAgICAgdW5pcXVlX3B0cjxzdHJ1Y3QgIGFyY2hpdmUsCi0gICAgICAgICAgICAgICAgIGRlY2x0eXBlICggYXJjaGl2ZV9yZWFkX2Nsb3NlICkqPiAgYV9vcGVuKCBhLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV9yZWFkX2Nsb3NlICk7Ci0KLSAgICAgIC8vIHJlYWQgZmlsZXMgY29udGFpbmVkIGluIGFyY2hpdmUKLSAgICAgIGZvciAoOzspCi0gICAgICB7Ci0gICAgICAgIHIgPSBhcmNoaXZlX3JlYWRfbmV4dF9oZWFkZXIoIGFfb3Blbi5nZXQoKSwgJmVudHJ5ICk7Ci0gICAgICAgIGlmICggciA9PSBBUkNISVZFX0VPRiApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggciAhPSBBUkNISVZFX09LICkKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICB2ZWN0b3I8dWludDhfdD4gIGVudHJ5X2RhdGE7Ci0gICAgICAgIHIgPSBhcmNoaXZlX3JlYWRfZW50cnlfZGF0YSggYS5nZXQoKSwgJmVudHJ5X2RhdGEgKTsKLSAgICAgICAgaWYgKCBlbnRyeV9kYXRhLnNpemUoKSA9PSAwICkKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmaWxlcy5wdXNoX2JhY2soIG1vdmUoIGVudHJ5X2RhdGEgKSApOwotICAgICAgICBpZiAoIHIgIT0gQVJDSElWRV9PSyApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbGVzOwotICB9Ci0KLQotICBjbGFzcyBGVEZ1enplcgotICA6IHB1YmxpYyBmdXp6ZXI6OlVzZXJTdXBwbGllZEZ1enplcgotICB7Ci0KLSAgcHVibGljOgotICAgIEZURnV6emVyKCBmdXp6ZXI6OkZ1enplclJhbmRvbUJhc2UqICBSYW5kICkKLSAgICA6IGZ1enplcjo6VXNlclN1cHBsaWVkRnV6emVyKCBSYW5kICkge30KLQotCi0gICAgaW50Ci0gICAgVGFyZ2V0RnVuY3Rpb24oIGNvbnN0IHVpbnQ4X3QqICBEYXRhLAotICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgU2l6ZSApCi0gICAgewotICAgICAgcmV0dXJuIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoIERhdGEsIFNpemUgKTsKLSAgICB9Ci0KLQotICAgIC8vIEN1c3RvbSBtdXRhdG9yLgotICAgIHZpcnR1YWwgc2l6ZV90Ci0gICAgTXV0YXRlKCB1aW50OF90KiAgRGF0YSwKLSAgICAgICAgICAgIHNpemVfdCAgICBTaXplLAotICAgICAgICAgICAgc2l6ZV90ICAgIE1heFNpemUgKQotICAgIHsKLSAgICAgIHZlY3Rvcjx2ZWN0b3I8dWludDhfdD4+ICBmaWxlcyA9IHBhcnNlX2RhdGEoIERhdGEsIFNpemUgKTsKLQotICAgICAgLy8gSWYgdGhlIGZpbGUgd2FzIG5vdCByZWNvZ25pemVkIGFzIGEgdGFyIGZpbGUsIHRyZWF0IGl0IGFzIG5vbi10YXIuCi0gICAgICBpZiAoIGZpbGVzLnNpemUoKSA9PSAwICkKLSAgICAgICAgcmV0dXJuIGZ1enplcjo6VXNlclN1cHBsaWVkRnV6emVyOjpNdXRhdGUoIERhdGEsIFNpemUsIE1heFNpemUgKTsKLQotICAgICAgLy8gVGhpcyBpcyBzb21ld2hhdCBgd2hpdGUgYm94JyBvbiB0YXIuICBUaGUgdGFyIGZvcm1hdCB1c2VzIDUxMiBieXRlCi0gICAgICAvLyBibG9ja3MuICBPbmUgYmxvY2sgYXMgaGVhZGVyIGZvciBlYWNoIGZpbGUsIHR3byBlbXB0eSBibG9ja3Mgb2YgMCdzCi0gICAgICAvLyBhdCB0aGUgZW5kLiAgRmlsZSBkYXRhIGlzIHBhZGRlZCB0byBmaWxsIGl0cyBsYXN0IGJsb2NrLgotICAgICAgc2l6ZV90ICB1c2VkX2Jsb2NrcyA9IGZpbGVzLnNpemUoKSArIDI7Ci0gICAgICBmb3IgKCBjb25zdCBhdXRvJiAgZmlsZSA6IGZpbGVzICkKLSAgICAgICAgdXNlZF9ibG9ja3MgKz0gKCBmaWxlLnNpemUoKSArIDUxMSApIC8gNTEyOwotCi0gICAgICBzaXplX3QgIG1heF9ibG9ja3MgPSBNYXhTaXplIC8gNTEyOwotCi0gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYmlnLCBpdCB3aWxsIG5lZWQgdG8gYmUgZG93bnNpemVkLiAgSWYgdGhlIG9yaWdpbmFsCi0gICAgICAvLyB0YXIgZmlsZSB3YXMgdG9vIGJpZywgaXQgbWF5IGhhdmUgYmVlbiBjbGlwcGVkIHRvIGZpdC4gIEluIHRoaXMKLSAgICAgIC8vIGNhc2UgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBwcm9wZXJseSB3cml0ZSBvdXQgdGhlIGRhdGEsIGFzCi0gICAgICAvLyB0aGVyZSBtYXkgbm90IGJlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHRyYWlsaW5nIHR3byBibG9ja3MuICBTdGFydAotICAgICAgLy8gZHJvcHBpbmcgZmlsZSBkYXRhIG9yIGZpbGVzIGZyb20gdGhlIGVuZC4KLSAgICAgIGZvciAoIHNpemVfdCAgaSA9IGZpbGVzLnNpemUoKTsKLSAgICAgICAgICAgIGktLSA+IDEgJiYgdXNlZF9ibG9ja3MgPiBtYXhfYmxvY2tzOyApCi0gICAgICB7Ci0gICAgICAgIHNpemVfdCAgYmxvY2tzX3RvX2ZyZWUgPSB1c2VkX2Jsb2NrcyAtIG1heF9ibG9ja3M7Ci0gICAgICAgIHNpemVfdCAgYmxvY2tzX2N1cnJlbnRseV91c2VkX2J5X2ZpbGVfZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAoIGZpbGVzW2ldLnNpemUoKSArIDUxMSApIC8gNTEyOwotCi0gICAgICAgIGlmICggYmxvY2tzX2N1cnJlbnRseV91c2VkX2J5X2ZpbGVfZGF0YSA+PSBibG9ja3NfdG9fZnJlZSApCi0gICAgICAgIHsKLSAgICAgICAgICBmaWxlc1tpXS5yZXNpemUoICggYmxvY2tzX2N1cnJlbnRseV91c2VkX2J5X2ZpbGVfZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzX3RvX2ZyZWUgKSAqIDUxMiApOwotICAgICAgICAgIHVzZWRfYmxvY2tzIC09IGJsb2Nrc190b19mcmVlOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZmlsZXMucG9wX2JhY2soKTsKLSAgICAgICAgdXNlZF9ibG9ja3MgLT0gYmxvY2tzX2N1cnJlbnRseV91c2VkX2J5X2ZpbGVfZGF0YSArIDE7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHdlIGdldCBkb3duIHRvIG9uZSBmaWxlLCBkb24ndCB1c2UgdGFyLgotICAgICAgaWYgKCBmaWxlcy5zaXplKCkgPT0gMSApCi0gICAgICB7Ci0gICAgICAgIG1lbWNweSggRGF0YSwgZmlsZXNbMF0uZGF0YSgpLCBmaWxlc1swXS5zaXplKCkgKTsKLSAgICAgICAgcmV0dXJuIGZ1enplcjo6VXNlclN1cHBsaWVkRnV6emVyOjpNdXRhdGUoIERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1swXS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTaXplICk7Ci0gICAgICB9Ci0KLSAgICAgIHNpemVfdCAgZnJlZV9ibG9ja3MgPSBtYXhfYmxvY2tzIC0gdXNlZF9ibG9ja3M7Ci0KLSAgICAgIC8vIEFsbG93IGVhY2ggZmlsZSB0byB1c2UgdXAgYXMgbXVjaCBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBzcGFjZQotICAgICAgLy8gaXQgY2FuLiAgSWYgaXQgdXNlcyBvciBnaXZlcyB1cCBibG9ja3MsIGFkZCB0aGVtIG9yIHJlbW92ZSB0aGVtCi0gICAgICAvLyBmcm9tIHRoZSBwb29sLgotICAgICAgZm9yICggYXV0byYmICBmaWxlIDogZmlsZXMgKQotICAgICAgewotICAgICAgICBzaXplX3QgIGJsb2Nrc19jdXJyZW50bHlfdXNlZF9ieV9maWxlID0gKCBmaWxlLnNpemUoKSArIDUxMSApIC8gNTEyOwotICAgICAgICBzaXplX3QgIGJsb2Nrc19hdmFpbGFibGUgPSBibG9ja3NfY3VycmVudGx5X3VzZWRfYnlfZmlsZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9ibG9ja3M7Ci0gICAgICAgIHNpemVfdCAgbWF4X3NpemUgPSBibG9ja3NfYXZhaWxhYmxlICogNTEyOwotICAgICAgICBzaXplX3QgIGRhdGFfc2l6ZSA9IGZpbGUuc2l6ZSgpOwotCi0gICAgICAgIGZpbGUucmVzaXplKCBtYXhfc2l6ZSApOwotICAgICAgICBmaWxlLnJlc2l6ZSggZnV6emVyOjpVc2VyU3VwcGxpZWRGdXp6ZXI6Ok11dGF0ZSggZmlsZS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZSApICk7Ci0KLSAgICAgICAgc2l6ZV90ICBibG9ja3Nfbm93X3VzZWRfYnlfZmlsZSA9ICggZmlsZS5zaXplKCkgKyA1MTEgKSAvIDUxMjsKLSAgICAgICAgZnJlZV9ibG9ja3MgPSBmcmVlX2Jsb2NrcyArCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NfY3VycmVudGx5X3VzZWRfYnlfZmlsZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Nfbm93X3VzZWRfYnlfZmlsZTsKLSAgICAgIH0KLQotICAgICAgdW5pcXVlX3B0cjxzdHJ1Y3QgIGFyY2hpdmUsCi0gICAgICAgICAgICAgICAgIGRlY2x0eXBlICggYXJjaGl2ZV93cml0ZV9mcmVlICkqPiAgYSggYXJjaGl2ZV93cml0ZV9uZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3dyaXRlX2ZyZWUgKTsKLQotICAgICAgY2hlY2tfcmVzdWx0KCBhLmdldCgpLCBhcmNoaXZlX3dyaXRlX2FkZF9maWx0ZXJfbm9uZSggYS5nZXQoKSApICk7Ci0gICAgICBjaGVja19yZXN1bHQoIGEuZ2V0KCksIGFyY2hpdmVfd3JpdGVfc2V0X2Zvcm1hdF91c3RhciggYS5nZXQoKSApICk7Ci0KLSAgICAgIC8vIGB1c2VkJyBtYXkgbm90IGJlIGNvcnJlY3QgdW50aWwgYWZ0ZXIgdGhlIGFyY2hpdmUgaXMgY2xvc2VkLgotICAgICAgc2l6ZV90ICB1c2VkID0gMHhiYWRiZWVmOwotICAgICAgY2hlY2tfcmVzdWx0KCBhLmdldCgpLCBhcmNoaXZlX3dyaXRlX29wZW5fbWVtb3J5KCBhLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlZCApICk7Ci0KLSAgICAgIHsKLSAgICAgICAgdW5pcXVlX3B0cjxzdHJ1Y3QgIGFyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgZGVjbHR5cGUgKCBhcmNoaXZlX3dyaXRlX2Nsb3NlICkqPiAgYV9vcGVuKCBhLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV93cml0ZV9jbG9zZSApOwotCi0gICAgICAgIGludCAgZmlsZV9pbmRleCA9IDA7Ci0gICAgICAgIGZvciAoIGNvbnN0IGF1dG8mICBmaWxlIDogZmlsZXMgKQotICAgICAgICB7Ci0gICAgICAgICAgdW5pcXVlX3B0cjxzdHJ1Y3QgIGFyY2hpdmVfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZSAoIGFyY2hpdmVfZW50cnlfZnJlZSApKj4KLSAgICAgICAgICAgIGUoIGFyY2hpdmVfZW50cnlfbmV3MiggYV9vcGVuLmdldCgpICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfZW50cnlfZnJlZSApOwotCi0gICAgICAgICAgY2hhciAgbmFtZV9idWZmZXJbMTAwXTsKLSAgICAgICAgICBzbnByaW50ZiggbmFtZV9idWZmZXIsIDEwMCwgImZpbGUlZCIsIGZpbGVfaW5kZXgrKyApOwotCi0gICAgICAgICAgYXJjaGl2ZV9lbnRyeV9zZXRfcGF0aG5hbWUoIGUuZ2V0KCksIG5hbWVfYnVmZmVyICk7Ci0gICAgICAgICAgYXJjaGl2ZV9lbnRyeV9zZXRfc2l6ZSggZS5nZXQoKSwgZmlsZS5zaXplKCkgKTsKLSAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9maWxldHlwZSggZS5nZXQoKSwgQUVfSUZSRUcgKTsKLSAgICAgICAgICBhcmNoaXZlX2VudHJ5X3NldF9wZXJtKCBlLmdldCgpLCAwNjQ0ICk7Ci0KLSAgICAgICAgICBjaGVja19yZXN1bHQoIGFfb3Blbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfd3JpdGVfaGVhZGVyKCBhX29wZW4uZ2V0KCksIGUuZ2V0KCkgKSApOwotICAgICAgICAgIGFyY2hpdmVfd3JpdGVfZGF0YSggYV9vcGVuLmdldCgpLCBmaWxlLmRhdGEoKSwgZmlsZS5zaXplKCkgKTsKLSAgICAgICAgICBjaGVja19yZXN1bHQoIGFfb3Blbi5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfd3JpdGVfZmluaXNoX2VudHJ5KCBhX29wZW4uZ2V0KCkgKSApOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB1c2VkOwotICAgIH0KLQotCi0gICAgLy8gQ3Jvc3MgYERhdGExJyBhbmQgYERhdGEyJywgd3JpdGUgdXAgdG8gYE1heE91dFNpemUnIGJ5dGVzIGludG8gYE91dCcsCi0gICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgd2hpY2ggc2hvdWxkIGJlIHBvc2l0aXZlLgotICAgIHZpcnR1YWwgc2l6ZV90Ci0gICAgQ3Jvc3NPdmVyKCBjb25zdCB1aW50OF90KiAgRGF0YTEsCi0gICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgU2l6ZTEsCi0gICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiAgRGF0YTIsCi0gICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgU2l6ZTIsCi0gICAgICAgICAgICAgICB1aW50OF90KiAgICAgICAgT3V0LAotICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIE1heE91dFNpemUgKQotICAgIHsKLSAgICAgIHJldHVybiBmdXp6ZXI6OlVzZXJTdXBwbGllZEZ1enplcjo6Q3Jvc3NPdmVyKCBEYXRhMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4T3V0U2l6ZSApOwotICAgIH0KLQotICB9OyAvLyBlbmQgb2YgRlRGdXp6ZXIgY2xhc3MKLQotCi0gIGludAotICBtYWluKCBpbnQgICAgIGFyZ2MsCi0gICAgICAgIGNoYXIqICAqYXJndiApCi0gIHsKLSAgICBmdXp6ZXI6OkZ1enplclJhbmRvbUxpYmMgIFJhbmQoIDAgKTsKLSAgICBGVEZ1enplciAgICAgICAgICAgICAgICAgIEYoICZSYW5kICk7Ci0KLSAgICBmdXp6ZXI6OkZ1enplckRyaXZlciggYXJnYywgYXJndiwgRiApOwotICB9Ci0KLQotLy8gRU5ECmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvcmFzdGVyZnV6emVyLmNjIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL3Jhc3RlcmZ1enplci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY5Yjk1ZS4uMDAwMDAwMAotLS0gYS9zcmMvdG9vbHMvZnRmdXp6ZXIvcmFzdGVyZnV6emVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8vIHJhc3RlcmZ1enplci5jYwotLy8KLS8vICAgQSBmdXp6aW5nIGZ1bmN0aW9uIHRvIHRlc3QgRnJlZVR5cGUncyByYXN0ZXJpemVycyB3aXRoIGxpYkZ1enplci4KLS8vCi0vLyBDb3B5cmlnaHQgMjAxNi0yMDE4IGJ5Ci0vLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCi0vLwotLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAotLy8gbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKLS8vIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQotLy8gdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCi0vLyB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCi0KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0KLSAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLQotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfSU1BR0VfSAotI2luY2x1ZGUgRlRfT1VUTElORV9ICi0KLQotICBzdGF0aWMgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgc3RhdGljIGludCAgICAgICAgIEluaXRSZXN1bHQ7Ci0KLQotICBzdHJ1Y3QgRlRfR2xvYmFsIHsKLSAgICBGVF9HbG9iYWwoKSB7Ci0gICAgICBJbml0UmVzdWx0ID0gRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICB9Ci0gICAgfkZUX0dsb2JhbCgpIHsKLSAgICAgIEZUX0RvbmVfRnJlZVR5cGUoIGxpYnJhcnkgKTsKLSAgICB9Ci0gIH07Ci0KLSAgRlRfR2xvYmFsICBnbG9iYWxfZnQ7Ci0KLQotICBleHRlcm4gIkMiIGludAotICBMTFZNRnV6emVyVGVzdE9uZUlucHV0KCBjb25zdCB1aW50OF90KiAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIHNpemVfICkKLSAgewotICAgIHVuc2lnbmVkIGNoYXIgIHBpeGVsc1s0XTsKLQotICAgIEZUX0JpdG1hcCAgYml0bWFwX21vbm8gPSB7Ci0gICAgICAxLCAgICAgICAgICAgICAgICAgIC8vIHJvd3MKLSAgICAgIDEsICAgICAgICAgICAgICAgICAgLy8gd2lkdGgKLSAgICAgIDQsICAgICAgICAgICAgICAgICAgLy8gcGl0Y2gKLSAgICAgIHBpeGVscywgICAgICAgICAgICAgLy8gYnVmZmVyCi0gICAgICAyLCAgICAgICAgICAgICAgICAgIC8vIG51bV9ncmF5cwotICAgICAgRlRfUElYRUxfTU9ERV9NT05PLCAvLyBwaXhlbF9tb2RlCi0gICAgICAwLCAgICAgICAgICAgICAgICAgIC8vIHBhbGV0dGVfbW9kZQotICAgICAgTlVMTCAgICAgICAgICAgICAgICAvLyBwYWxldHRlCi0gICAgfTsKLQotICAgIEZUX0JpdG1hcCAgYml0bWFwX2dyYXkgPSB7Ci0gICAgICAxLCAgICAgICAgICAgICAgICAgIC8vIHJvd3MKLSAgICAgIDEsICAgICAgICAgICAgICAgICAgLy8gd2lkdGgKLSAgICAgIDQsICAgICAgICAgICAgICAgICAgLy8gcGl0Y2gKLSAgICAgIHBpeGVscywgICAgICAgICAgICAgLy8gYnVmZmVyCi0gICAgICAyNTYsICAgICAgICAgICAgICAgIC8vIG51bV9ncmF5cwotICAgICAgRlRfUElYRUxfTU9ERV9HUkFZLCAvLyBwaXhlbF9tb2RlCi0gICAgICAwLCAgICAgICAgICAgICAgICAgIC8vIHBhbGV0dGVfbW9kZQotICAgICAgTlVMTCAgICAgICAgICAgICAgICAvLyBwYWxldHRlCi0gICAgfTsKLQotICAgIGNvbnN0IHNpemVfdCB2c2l6ZSA9IHNpemVvZiAoIEZUX1ZlY3RvciApOwotICAgIGNvbnN0IHNpemVfdCB0c2l6ZSA9IHNpemVvZiAoIGNoYXIgKTsKLQotICAgIC8vIHdlIHVzZSB0aGUgaW5wdXQgZGF0YSBmb3IgYm90aCBwb2ludHMgYW5kIHRhZ3MKLSAgICBzaG9ydCAgbl9wb2ludHMgPSBzaG9ydCggc2l6ZV8gLyAoIHZzaXplICsgdHNpemUgKSApOwotICAgIGlmICggbl9wb2ludHMgPD0gMiApCi0gICAgICByZXR1cm4gMDsKLQotICAgIEZUX1ZlY3RvciogIHBvaW50cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RlRfVmVjdG9yKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PHVpbnQ4X3QqPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSApICk7Ci0gICAgY2hhciogICAgICAgdGFncyAgID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PHVpbnQ4X3QqPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIHNpemVfdCggbl9wb2ludHMgKSAqIHZzaXplICkgKTsKLQotICAgIC8vIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGludmFsaWQgb3V0bGluZXMgdGhhdCBhcmUgaW1tZWRpYXRlbHkKLSAgICAvLyByZWplY3RlZCBpbiBgRlRfT3V0bGluZV9SZW5kZXInLCBsaW1pdCB2YWx1ZXMgdG8gMl4xOCBwaXhlbHMKLSAgICAvLyAoaS5lLiwgMl4yNCBiaXRzKQotICAgIGZvciAoIHNob3J0ICBpID0gMDsgaSA8IG5fcG9pbnRzOyBpKysgKQotICAgIHsKLSAgICAgIGlmICggcG9pbnRzW2ldLnggPT0gTE9OR19NSU4gKQotICAgICAgICBwb2ludHNbaV0ueCA9IDA7Ci0gICAgICBlbHNlIGlmICggcG9pbnRzW2ldLnggPCAwICkKLSAgICAgICAgcG9pbnRzW2ldLnggPSAtKCAtcG9pbnRzW2ldLnggJiAweEZGRkZGRiApIC0gMTsKLSAgICAgIGVsc2UKLSAgICAgICAgcG9pbnRzW2ldLnggPSAoIHBvaW50c1tpXS54ICYgMHhGRkZGRkYgKSArIDE7Ci0KLSAgICAgIGlmICggcG9pbnRzW2ldLnkgPT0gTE9OR19NSU4gKQotICAgICAgICBwb2ludHNbaV0ueSA9IDA7Ci0gICAgICBlbHNlIGlmICggcG9pbnRzW2ldLnkgPCAwICkKLSAgICAgICAgcG9pbnRzW2ldLnkgPSAtKCAtcG9pbnRzW2ldLnkgJiAweEZGRkZGRiApIC0gMTsKLSAgICAgIGVsc2UKLSAgICAgICAgcG9pbnRzW2ldLnkgPSAoIHBvaW50c1tpXS55ICYgMHhGRkZGRkYgKSArIDE7Ci0gICAgfQotCi0gICAgc2hvcnQgIGNvbnRvdXJzWzFdOwotICAgIGNvbnRvdXJzWzBdID0gbl9wb2ludHMgLSAxOwotCi0gICAgRlRfT3V0bGluZSAgb3V0bGluZSA9Ci0gICAgewotICAgICAgMSwgICAgICAgICAgICAgICAvLyBuX2NvbnRvdXJzCi0gICAgICBuX3BvaW50cywgICAgICAgIC8vIG5fcG9pbnRzCi0gICAgICBwb2ludHMsICAgICAgICAgIC8vIHBvaW50cwotICAgICAgdGFncywgICAgICAgICAgICAvLyB0YWdzCi0gICAgICBjb250b3VycywgICAgICAgIC8vIGNvbnRvdXJzCi0gICAgICBGVF9PVVRMSU5FX05PTkUgIC8vIGZsYWdzCi0gICAgfTsKLQotICAgIEZUX091dGxpbmVfR2V0X0JpdG1hcCggbGlicmFyeSwgJm91dGxpbmUsICZiaXRtYXBfbW9ubyApOwotICAgIEZUX091dGxpbmVfR2V0X0JpdG1hcCggbGlicmFyeSwgJm91dGxpbmUsICZiaXRtYXBfZ3JheSApOwotCi0gICAgcmV0dXJuIDA7Ci0gIH0KLQotCi0vLyBFTkQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9mdGZ1enplci9ydW5pbnB1dC5jYyBiL3NyYy90b29scy9mdGZ1enplci9ydW5pbnB1dC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwMmY1Ny4uMDAwMDAwMAotLS0gYS9zcmMvdG9vbHMvZnRmdXp6ZXIvcnVuaW5wdXQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vLyBydW5pbnB1dC5jYwotLy8KLS8vICAgQSBgbWFpbicgZnVuY3Rpb24gZm9yIGZ1enplcnMgbGlrZSBgZnRmdXp6ZXIuY2MnLgotLy8KLS8vIENvcHlyaWdodCAyMDE1LTIwMTggYnkKLS8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KLS8vCi0vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCi0vLyBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAotLy8gbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCi0vLyB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKLS8vIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KLQotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotCi0gIGV4dGVybiAiQyIgdm9pZAotICBMTFZNRnV6emVyVGVzdE9uZUlucHV0KCBjb25zdCB1aW50OF90KiAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIHNpemUgKTsKLQotCi0gIHVuc2lnbmVkIGNoYXIgYVsxIDw8IDI0XTsKLQotCi0gIGludAotICBtYWluKCBpbnQgICAgIGFyZ2MsCi0gICAgICAgIGNoYXIqICAqYXJndiApCi0gIHsKLSAgICBhc3NlcnQoIGFyZ2MgPj0gMiApOwotCi0gICAgZm9yICggaW50IGkgPSAxOyBpIDwgYXJnYzsgaSsrICkKLSAgICB7Ci0gICAgICBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgYXJndltpXSApOwotCi0gICAgICBGSUxFKiAgZiA9IGZvcGVuKCBhcmd2W2ldLCAiciIgKTsKLSAgICAgIGFzc2VydCggZiApOwotCi0gICAgICBzaXplX3QgIG4gPSBmcmVhZCggYSwgMSwgc2l6ZW9mICggYSApLCBmICk7Ci0gICAgICBmY2xvc2UoIGYgKTsKLSAgICAgIGlmICggIW4gKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgdW5zaWduZWQgY2hhciogIGIgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKCBuICk7Ci0gICAgICBtZW1jcHkoIGIsIGEsIG4gKTsKLQotICAgICAgTExWTUZ1enplclRlc3RPbmVJbnB1dCggYiwgbiApOwotCi0gICAgICBmcmVlKCBiICk7Ci0gICAgfQotICB9Ci0KLQotLy8gRU5ECmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZ2xuYW1lcy5weSBiL3NyYy90b29scy9nbG5hbWVzLnB5CmluZGV4IGIwNDhkMjkuLmU4OGY3MTAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9nbG5hbWVzLnB5CisrKyBiL3NyYy90b29scy9nbG5hbWVzLnB5CkBAIC01MzEwLDI0ICs1MzEwLDI0IEBACiAgIG1hY19leHRyYXNfY291bnQgPSBsZW4oIG1hY19leHRyYXMgKQogICBiYXNlX2xpc3QgICAgICAgID0gbWFjX2V4dHJhcyArIHNpZF9zdGFuZGFyZF9uYW1lcwogCi0gIHdyaXRlKCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIgKQotICB3cml0ZSggIi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKKyAgd3JpdGUoICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIiApCisgIHdyaXRlKCAiICpcbiIgKQogCi0gIHdyaXRlKCAiLyogICUtNzFzKi9cbiIgJSBvcy5wYXRoLmJhc2VuYW1lKCBzeXMuYXJndlsxXSApICkKKyAgd3JpdGUoICIgKiAlLTcxc1xuIiAlIG9zLnBhdGguYmFzZW5hbWUoIHN5cy5hcmd2WzFdICkgKQogCi0gIHdyaXRlKCAiLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQotICB3cml0ZSggIi8qICAgIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKLSAgd3JpdGUoICIvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCi0gIHdyaXRlKCAiLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQotICB3cml0ZSggIi8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKLSAgd3JpdGUoICIvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCi0gIHdyaXRlKCAiLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi9cbiIgKQotICB3cml0ZSggIi8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovXG4iICkKLSAgd3JpdGUoICIvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqL1xuIiApCi0gIHdyaXRlKCAiLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi9cbiIgKQotICB3cml0ZSggIi8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKLSAgd3JpdGUoICIvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCi0gIHdyaXRlKCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiIgKQorICB3cml0ZSggIiAqXG4iICkKKyAgd3JpdGUoICIgKiAgIFBvc3RTY3JpcHQgZ2x5cGggbmFtZXMuXG4iICkKKyAgd3JpdGUoICIgKlxuIiApCisgIHdyaXRlKCAiICogQ29weXJpZ2h0IDIwMDUtMjAxOCBieVxuIiApCisgIHdyaXRlKCAiICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLlxuIiApCisgIHdyaXRlKCAiICpcbiIgKQorICB3cml0ZSggIiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCxcbiIgKQorICB3cml0ZSggIiAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0XG4iICkKKyAgd3JpdGUoICIgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGVcbiIgKQorICB3cml0ZSggIiAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZFxuIiApCisgIHdyaXRlKCAiICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LlxuIiApCisgIHdyaXRlKCAiICpcbiIgKQorICB3cml0ZSggIiAqL1xuIiApCiAgIHdyaXRlKCAiXG4iICkKICAgd3JpdGUoICJcbiIgKQogICB3cml0ZSggIiAgLyogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IC0tIGRvIG5vdCBlZGl0ISAqL1xuIiApCkBAIC01MzYxLDEyICs1MzYxLDEyIEBACiAKICAgd3JpdGUoICIiIlwKICAgLyoKLSAgICogIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCi0gICAqICBvcHRpbWl6ZWQgZm9yIGVmZmljaWVudCBzZWFyY2hpbmcuICBJdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlCi0gICAqICBgZ2xuYW1lcy5weScgcHl0aG9uIHNjcmlwdCBsb2NhdGVkIGluIHRoZSBgc3JjL3Rvb2xzJyBkaXJlY3RvcnkuCisgICAqIFRoaXMgdGFibGUgaXMgYSBjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIEFkb2JlIEdseXBoIExpc3QgKEFHTCksCisgICAqIG9wdGltaXplZCBmb3IgZWZmaWNpZW50IHNlYXJjaGluZy4gIEl0IGhhcyBiZWVuIGdlbmVyYXRlZCBieSB0aGUKKyAgICogYGdsbmFtZXMucHknIHB5dGhvbiBzY3JpcHQgbG9jYXRlZCBpbiB0aGUgYHNyYy90b29scycgZGlyZWN0b3J5LgogICAgKgotICAgKiAgVGhlIGxvb2t1cCBmdW5jdGlvbiB0byBnZXQgdGhlIFVuaWNvZGUgdmFsdWUgZm9yIGEgZ2l2ZW4gc3RyaW5nCi0gICAqICBpcyBkZWZpbmVkIGJlbG93IHRoZSB0YWJsZS4KKyAgICogVGhlIGxvb2t1cCBmdW5jdGlvbiB0byBnZXQgdGhlIFVuaWNvZGUgdmFsdWUgZm9yIGEgZ2l2ZW4gc3RyaW5nCisgICAqIGlzIGRlZmluZWQgYmVsb3cgdGhlIHRhYmxlLgogICAgKi8KIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fQURPQkVfR0xZUEhfTElTVApAQCAtNTM4MCw3ICs1MzgwLDcgQEAKICAgd3JpdGUoICIiIlwKICNpZmRlZiAgREVGSU5FX1BTX1RBQkxFUwogICAvKgotICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgY29tcHJlc3NlZCB0YWJsZSBlZmZpY2llbnRseS4KKyAgICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgY29tcHJlc3NlZCB0YWJsZSBlZmZpY2llbnRseS4KICAgICovCiAgIHN0YXRpYyB1bnNpZ25lZCBsb25nCiAgIGZ0X2dldF9hZG9iZV9nbHlwaF9pbmRleCggY29uc3QgY2hhciogIG5hbWUsCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvcnVsZXMubWsgYi9zcmMvdHJ1ZXR5cGUvcnVsZXMubWsKaW5kZXggZTE2MTEzZi4uZTE1NDdlZCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3J1bGVzLm1rCisrKyBiL3NyYy90cnVldHlwZS9ydWxlcy5tawpAQCAtMzMsNyArMzMsNiBAQAogICAgICAgICAgICAgICAkKFRUX0RJUikvdHRneHZhci5jICBcCiAgICAgICAgICAgICAgICQoVFRfRElSKS90dGludGVycC5jIFwKICAgICAgICAgICAgICAgJChUVF9ESVIpL3R0b2Jqcy5jICAgXAotICAgICAgICAgICAgICAkKFRUX0RJUikvdHRwaWMuYyAgICBcCiAgICAgICAgICAgICAgICQoVFRfRElSKS90dHBsb2FkLmMgIFwKICAgICAgICAgICAgICAgJChUVF9ESVIpL3R0c3VicGl4LmMKIApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMgYi9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwppbmRleCA0ODQzNzA5Li5kZDY0ZGI4IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHJ1ZXR5cGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIFRydWVUeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHJ1ZXR5cGUuYworICoKKyAqICAgRnJlZVR5cGUgVHJ1ZVR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAidHRneHZhci5jIiAgICAvKiBneCBkaXN0b3J0YWJsZSBmb250ICovCiAjaW5jbHVkZSAidHRpbnRlcnAuYyIKICNpbmNsdWRlICJ0dG9ianMuYyIgICAgIC8qIG9iamVjdCBtYW5hZ2VyICAgICAgKi8KLSNpbmNsdWRlICJ0dHBpYy5jIgogI2luY2x1ZGUgInR0cGxvYWQuYyIgICAgLyogdGFibGVzIGxvYWRlciAgICAgICAqLwogI2luY2x1ZGUgInR0c3VicGl4LmMiCiAKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGRyaXZlci5jIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKaW5kZXggODIwY2FmYi4uZWFjNzM2YyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0ZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBmb250IGRyaXZlciBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0ZHJpdmVyLmMKKyAqCisgKiAgIFRydWVUeXBlIGZvbnQgZHJpdmVyIGltcGxlbWVudGF0aW9uIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MywyMCArNDMsMTkgQEAKIAogI2luY2x1ZGUgInR0ZXJyb3JzLmgiCiAKLSNpbmNsdWRlICJ0dHBpYy5oIgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGRyaXZlcgogCiAKICAgLyoKLSAgICogIFBST1BFUlRZIFNFUlZJQ0UKKyAgICogUFJPUEVSVFkgU0VSVklDRQogICAgKgogICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCkBAIC0xNjQsMzggKzE2Myw0MiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2dldF9rZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIHJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gICAgICAqLwotICAvKiAgICBnbHlwaHMgb2YgdGhlIHNhbWUgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAga2VybmluZyAgICAgOjogVGhlIGtlcm5pbmcgdmVjdG9yLiAgVGhpcyBpcyBpbiBmb250IHVuaXRzIGZvciAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHNjYWxhYmxlIGZvcm1hdHMsIGFuZCBpbiBwaXhlbHMgZm9yIGZpeGVkLXNpemVzICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZSAgICAgICAgKi8KLSAgLyogICAgc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICovCi0gIC8qICAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHNjb3BlIG9mIHRoaXMgbWV0aG9kICh0aGUgYmFzaWMgZHJpdmVyICAgICAgICAqLwotICAvKiAgICBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gYmUgc2ltcGxlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9nZXRfa2VybmluZworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQSBkcml2ZXIgbWV0aG9kIHVzZWQgdG8gcmV0dXJuIHRoZSBrZXJuaW5nIHZlY3RvciBiZXR3ZWVuIHR3bworICAgKiAgIGdseXBocyBvZiB0aGUgc2FtZSBmYWNlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBsZWZ0X2dseXBoIDo6CisgICAqICAgICBUaGUgaW5kZXggb2YgdGhlIGxlZnQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4KKyAgICoKKyAgICogICByaWdodF9nbHlwaCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLgorICAgKgorICAgKiBAT3V0cHV0OgorICAgKiAgIGtlcm5pbmcgOjoKKyAgICogICAgIFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgaW4gZm9udCB1bml0cyBmb3IKKyAgICogICAgIHNjYWxhYmxlIGZvcm1hdHMsIGFuZCBpbiBwaXhlbHMgZm9yIGZpeGVkLXNpemVzCisgICAqICAgICBmb3JtYXRzLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIE9ubHkgaG9yaXpvbnRhbCBsYXlvdXRzIChsZWZ0LXRvLXJpZ2h0ICYgcmlnaHQtdG8tbGVmdCkgYXJlCisgICAqICAgc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24uICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQKKyAgICogICBrZXJuaW5ncywgYXJlIG91dCBvZiBzY29wZSBvZiB0aGlzIG1ldGhvZCAodGhlIGJhc2ljIGRyaXZlcgorICAgKiAgIGludGVyZmFjZSBpcyBtZWFudCB0byBiZSBzaW1wbGUpLgorICAgKgorICAgKiAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIHR0X2dldF9rZXJuaW5nKCBGVF9GYWNlICAgICB0dGZhY2UsICAgICAgICAgIC8qIFRUX0ZhY2UgKi8KICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlZnRfZ2x5cGgsCkBAIC0zODQsMzIgKzM4NywzNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9nbHlwaF9sb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byBsb2FkIGEgZ2x5cGggd2l0aGluIGEgZ2l2ZW4gZ2x5cGggc2xvdC4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzbG90ICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNsb3Qgb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgd2lsbCBiZSBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugc2l6ZSBhdCB3aGljaCB0aGUgZ2x5cGggKi8KLSAgLyogICAgICAgICAgICAgICAgICAgbXVzdCBiZSBzY2FsZWQsIGxvYWRlZCwgZXRjLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBnbHlwaF9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGdseXBoIGluIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZSAqLwotICAvKiAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1hYWCBjb25zdGFudHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZ2x5cGhfbG9hZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQSBkcml2ZXIgbWV0aG9kIHVzZWQgdG8gbG9hZCBhIGdseXBoIHdpdGhpbiBhIGdpdmVuIGdseXBoIHNsb3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzbG90IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNsb3Qgb2JqZWN0IHdoZXJlIHRoZSBnbHlwaAorICAgKiAgICAgd2lsbCBiZSBsb2FkZWQuCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIHNpemUgYXQgd2hpY2ggdGhlIGdseXBoCisgICAqICAgICBtdXN0IGJlIHNjYWxlZCwgbG9hZGVkLCBldGMuCisgICAqCisgICAqICAgZ2x5cGhfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4KKyAgICoKKyAgICogICBsb2FkX2ZsYWdzIDo6CisgICAqICAgICBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUKKyAgICogICAgIEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZQorICAgKiAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lCisgICAqICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsCisgICAqICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgogICB0dF9nbHlwaF9sb2FkKCBGVF9HbHlwaFNsb3QgIHR0c2xvdCwgICAgICAvKiBUVF9HbHlwaFNsb3QgKi8KICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgICB0dHNpemUsICAgICAgLyogVFRfU2l6ZSAgICAgICovCkBAIC00NjQsNyArNDcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICA/ICZ0dHNpemUtPm1ldHJpY3MKICAgICAgICAgICAgICAgICAgICAgICA6ICZzaXplLT5oaW50ZWRfbWV0cmljczsKIAotICAgIC8qIG5vdyBsb2FkIHRoZSBnbHlwaCBvdXRsaW5lIGlmIG5lY2Vzc2FyeSAqLworICAgIC8qIG5vdyBmaWxsIGluIHRoZSBnbHlwaCBzbG90IHdpdGggb3V0bGluZS9iaXRtYXAvbGF5ZXJlZCAqLwogICAgIGVycm9yID0gVFRfTG9hZF9HbHlwaCggc2l6ZSwgc2xvdCwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKIAogICAgIC8qIGZvcmNlIGRyb3Atb3V0IG1vZGUgdG8gMiAtIGlycmVsZXZhbnQgbm93ICovCkBAIC01NDgsMTkgKzU1NSwxOSBAQAogICAgIHR0X3NlcnZpY2VzLAogCiAgICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgIEZUX0ZPTlRfRk9STUFUX1RSVUVUWVBFLAotICAgIEZUX1NFUlZJQ0VfSURfTVVMVElfTUFTVEVSUywgICAgICAmVFRfU0VSVklDRV9HWF9NVUxUSV9NQVNURVJTX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX01FVFJJQ1NfVkFSSUFUSU9OUywgJlRUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX01VTFRJX01BU1RFUlMsICAgICAgJnR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycywKKyAgICBGVF9TRVJWSUNFX0lEX01FVFJJQ1NfVkFSSUFUSU9OUywgJnR0X3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zLAogICAgIEZUX1NFUlZJQ0VfSURfVFJVRVRZUEVfRU5HSU5FLCAgICAmdHRfc2VydmljZV90cnVldHlwZV9lbmdpbmUsCi0gICAgRlRfU0VSVklDRV9JRF9UVF9HTFlGLCAgICAgICAgICAgICZUVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAgICAmVFRfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCApCisgICAgRlRfU0VSVklDRV9JRF9UVF9HTFlGLCAgICAgICAgICAgICZ0dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYsCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICZ0dF9zZXJ2aWNlX3Byb3BlcnRpZXMgKQogI2Vsc2UKICAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDNCgKICAgICB0dF9zZXJ2aWNlcywKIAogICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICBGVF9GT05UX0ZPUk1BVF9UUlVFVFlQRSwKICAgICBGVF9TRVJWSUNFX0lEX1RSVUVUWVBFX0VOR0lORSwgJnR0X3NlcnZpY2VfdHJ1ZXR5cGVfZW5naW5lLAotICAgIEZUX1NFUlZJQ0VfSURfVFRfR0xZRiwgICAgICAgICAmVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgJlRUX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQgKQorICAgIEZUX1NFUlZJQ0VfSURfVFRfR0xZRiwgICAgICAgICAmdHRfc2VydmljZV90cnVldHlwZV9nbHlmLAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAmdHRfc2VydmljZV9wcm9wZXJ0aWVzICkKICNlbmRpZgogCiAKQEAgLTU3NCwyNiArNTgxLDE1IEBACiAgICAgU0ZOVF9TZXJ2aWNlICAgICAgICAgc2ZudDsKIAogCi0gICAgLyogVFRfU0VSVklDRVNfR0VUIGRlcmVmZXJlbmNlcyBgbGlicmFyeScgaW4gUElDIG1vZGUgKi8KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotICAgIGlmICggIWRyaXZlciApCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICBsaWJyYXJ5ID0gZHJpdmVyLT5saWJyYXJ5OwotICAgIGlmICggIWxpYnJhcnkgKQotICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKLQotICAgIHJlc3VsdCA9IGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAoIFRUX1NFUlZJQ0VTX0dFVCwgdHRfaW50ZXJmYWNlICk7CisgICAgcmVzdWx0ID0gZnRfc2VydmljZV9saXN0X2xvb2t1cCggdHRfc2VydmljZXMsIHR0X2ludGVyZmFjZSApOwogICAgIGlmICggcmVzdWx0ICkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKICAgICBpZiAoICFkcml2ZXIgKQogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGlicmFyeSA9IGRyaXZlci0+bGlicmFyeTsKICAgICBpZiAoICFsaWJyYXJ5ICkKICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKICAgICAvKiBvbmx5IHJldHVybiB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgZnJvbSB0aGUgU0ZOVCBtb2R1bGUgKi8KICAgICBzZm50ZCA9IEZUX0dldF9Nb2R1bGUoIGxpYnJhcnksICJzZm50IiApOwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmggYi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuaAppbmRleCA3MDdhYTY4Li40NWUyNWI2IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRkcml2ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhpZ2gtbGV2ZWwgVHJ1ZVR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRkcml2ZXIuaAorICoKKyAqICAgSGlnaC1sZXZlbCBUcnVlVHlwZSBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUVERSSVZFUl9IXwpAQCAtMjYsMTAgKzI2LDggQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLQogICBGVF9ERUNMQVJFX0RSSVZFUiggdHRfZHJpdmVyX2NsYXNzICkKIAotCiBGVF9FTkRfSEVBREVSCiAKICNlbmRpZiAvKiBUVERSSVZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0ZXJyb3JzLmggYi9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaAppbmRleCA4OGJjYTNhLi5hMTRkZWUzIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaApAQCAtMSwyNyArMSwyNyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRlcnJvcnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRlcnJvcnMuaAorICoKKyAqICAgVHJ1ZVR5cGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFRydWVUeXBlIGVycm9yIGVudW1lcmF0aW9uICAgICAgICAgICAgKi8KLSAgLyogY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgVHJ1ZVR5cGUgZXJyb3IgZW51bWVyYXRpb24KKyAgICogY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBUVEVSUk9SU19IXwogI2RlZmluZSBUVEVSUk9SU19IXwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyBiL3NyYy90cnVldHlwZS90dGdsb2FkLmMKaW5kZXggMzJlZDM0YS4uOWU5OGYxMSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dGdsb2FkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGdsb2FkLmMKKyAqCisgKiAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzgsMjAgKzM4LDIwIEBACiAjaW5jbHVkZSAidHRzdWJwaXguaCIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGdsb2FkCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENvbXBvc2l0ZSBnbHlwaCBmbGFncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIENvbXBvc2l0ZSBnbHlwaCBmbGFncy4KKyAgICovCiAjZGVmaW5lIEFSR1NfQVJFX1dPUkRTICAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBBUkdTX0FSRV9YWV9WQUxVRVMgICAgICAgICAweDAwMDIKICNkZWZpbmUgUk9VTkRfWFlfVE9fR1JJRCAgICAgICAgICAgMHgwMDA0CkBAIC02NywxMCArNjcsMTAgQEAKICNkZWZpbmUgVU5TQ0FMRURfQ09NUE9ORU5UX09GRlNFVCAgMHgxMDAwCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJldHVybiB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIGluIGZvbnQgdW5pdHMgZm9yIGEgZ2l2ZW4gZ2x5cGguICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJldHVybiB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIGluIGZvbnQgdW5pdHMgZm9yIGEgZ2l2ZW4gZ2x5cGguCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBUVF9HZXRfSE1ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgaWR4LApAQCAtODQsMTEgKzg0LDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUmV0dXJuIHRoZSB2ZXJ0aWNhbCBtZXRyaWNzIGluIGZvbnQgdW5pdHMgZm9yIGEgZ2l2ZW4gZ2x5cGguICAgICAgICAgICovCi0gIC8qIFNlZSBmdW5jdGlvbiBgdHRfbG9hZGVyX3NldF9wcCcgYmVsb3cgZm9yIGV4cGxhbmF0aW9ucy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJldHVybiB0aGUgdmVydGljYWwgbWV0cmljcyBpbiBmb250IHVuaXRzIGZvciBhIGdpdmVuIGdseXBoLgorICAgKiBTZWUgZnVuY3Rpb24gYHR0X2xvYWRlcl9zZXRfcHAnIGJlbG93IGZvciBleHBsYW5hdGlvbnMuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBUVF9HZXRfVk1ldHJpY3MoIFRUX0ZhY2UgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgaWR4LApAQCAtMjUwLDEzICsyNTAsMTMgQEAKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgd2l0aCBUcnVlVHlwZSBmb250cy4gICAgICAqLwotICAvKiBIb3dldmVyLCB0aGV5IGNhbiBiZSByZXBsYWNlZCBieSBhbHRlcm5hdGl2ZXMgaWYgd2UgbmVlZCB0byBzdXBwb3J0ICAgKi8KLSAgLyogVHJ1ZVR5cGUtY29tcHJlc3NlZCBmb3JtYXRzIChsaWtlIE1pY3JvVHlwZSkgaW4gdGhlIGZ1dHVyZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgd2l0aCBUcnVlVHlwZSBmb250cy4KKyAgICogSG93ZXZlciwgdGhleSBjYW4gYmUgcmVwbGFjZWQgYnkgYWx0ZXJuYXRpdmVzIGlmIHdlIG5lZWQgdG8gc3VwcG9ydAorICAgKiBUcnVlVHlwZS1jb21wcmVzc2VkIGZvcm1hdHMgKGxpa2UgTWljcm9UeXBlKSBpbiB0aGUgZnV0dXJlLgorICAgKgorICAgKi8KIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKICAgVFRfQWNjZXNzX0dseXBoX0ZyYW1lKCBUVF9Mb2FkZXIgIGxvYWRlciwKQEAgLTM4Miw2ICszODIsOCBAQAogICAgICAgICBnb3RvIEludmFsaWRfT3V0bGluZTsKICAgICB9CiAKKyAgICBGVF9UUkFDRTUoKCAiICAjIG9mIHBvaW50czogJWRcbiIsIG5fcG9pbnRzICkpOworCiAgICAgLyogbm90ZSB0aGF0IHdlIHdpbGwgYWRkIGZvdXIgcGhhbnRvbSBwb2ludHMgbGF0ZXIgKi8KICAgICBlcnJvciA9IEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggZ2xvYWRlciwgbl9wb2ludHMgKyA0LCAwICk7CiAgICAgaWYgKCBlcnJvciApCkBAIC01NTksOSArNTYxLDEwIEBACiAgIFRUX0xvYWRfQ29tcG9zaXRlX0dseXBoKCBUVF9Mb2FkZXIgIGxvYWRlciApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICAgZXJyb3I7Ci0gICAgRlRfQnl0ZSogICAgICAgIHAgICAgICAgPSBsb2FkZXItPmN1cnNvcjsKLSAgICBGVF9CeXRlKiAgICAgICAgbGltaXQgICA9IGxvYWRlci0+bGltaXQ7Ci0gICAgRlRfR2x5cGhMb2FkZXIgIGdsb2FkZXIgPSBsb2FkZXItPmdsb2FkZXI7CisgICAgRlRfQnl0ZSogICAgICAgIHAgICAgICAgICAgPSBsb2FkZXItPmN1cnNvcjsKKyAgICBGVF9CeXRlKiAgICAgICAgbGltaXQgICAgICA9IGxvYWRlci0+bGltaXQ7CisgICAgRlRfR2x5cGhMb2FkZXIgIGdsb2FkZXIgICAgPSBsb2FkZXItPmdsb2FkZXI7CisgICAgRlRfTG9uZyAgICAgICAgIG51bV9nbHlwaHMgPSBsb2FkZXItPmZhY2UtPnJvb3QubnVtX2dseXBoczsKICAgICBGVF9TdWJHbHlwaCAgICAgc3ViZ2x5cGg7CiAgICAgRlRfVUludCAgICAgICAgIG51bV9zdWJnbHlwaHM7CiAKQEAgLTU5MCw2ICs1OTMsMTEgQEAKICAgICAgIHN1YmdseXBoLT5mbGFncyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAgICAgICBzdWJnbHlwaC0+aW5kZXggPSBGVF9ORVhUX1VTSE9SVCggcCApOwogCisgICAgICAvKiB3ZSByZWplY3QgY29tcG9zaXRlcyB0aGF0IGhhdmUgY29tcG9uZW50cyAqLworICAgICAgLyogd2l0aCBpbnZhbGlkIGdseXBoIGluZGljZXMgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggc3ViZ2x5cGgtPmluZGV4ID49IG51bV9nbHlwaHMgKQorICAgICAgICBnb3RvIEludmFsaWRfQ29tcG9zaXRlOworCiAgICAgICAvKiBjaGVjayBzcGFjZSAqLwogICAgICAgY291bnQgPSAyOwogICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9XT1JEUyApCkBAIC03NjgsMTUgKzc3NiwxNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9IaW50X0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBIaW50IHRoZSBnbHlwaCB1c2luZyB0aGUgem9uZSBwcmVwYXJlZCBieSB0aGUgY2FsbGVyLiAgTm90ZSB0aGF0ICAgKi8KLSAgLyogICAgdGhlIHpvbmUgaXMgc3VwcG9zZWQgdG8gaW5jbHVkZSBmb3VyIHBoYW50b20gcG9pbnRzLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX0hpbnRfR2x5cGgKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEhpbnQgdGhlIGdseXBoIHVzaW5nIHRoZSB6b25lIHByZXBhcmVkIGJ5IHRoZSBjYWxsZXIuICBOb3RlIHRoYXQKKyAgICogICB0aGUgem9uZSBpcyBzdXBwb3NlZCB0byBpbmNsdWRlIGZvdXIgcGhhbnRvbSBwb2ludHMuCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgVFRfSGludF9HbHlwaCggVFRfTG9hZGVyICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgaXNfY29tcG9zaXRlICkKQEAgLTg5NiwxNiArOTA0LDE2IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9uY2UgYSBzaW1wbGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkLCBpdCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuICAgICAqLwotICAvKiAgICBVc3VhbGx5LCB0aGlzIG1lYW5zIHNjYWxpbmcgYW5kIGhpbnRpbmcgdGhyb3VnaCBieXRlY29kZSAgICAgICAgICAgKi8KLSAgLyogICAgaW50ZXJwcmV0YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBPbmNlIGEgc2ltcGxlIGdseXBoIGhhcyBiZWVuIGxvYWRlZCwgaXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLgorICAgKiAgIFVzdWFsbHksIHRoaXMgbWVhbnMgc2NhbGluZyBhbmQgaGludGluZyB0aHJvdWdoIGJ5dGVjb2RlCisgICAqICAgaW50ZXJwcmV0YXRpb24uCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyICkKICAgewpAQCAtMTA3MSwxNSArMTA3OSwxNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmNlIGEgY29tcG9zaXRlIGNvbXBvbmVudCBoYXMgYmVlbiBsb2FkZWQsIGl0IG5lZWRzIHRvIGJlICAgICAgICAgKi8KLSAgLyogICAgcHJvY2Vzc2VkLiAgVXN1YWxseSwgdGhpcyBtZWFucyB0cmFuc2Zvcm1pbmcgYW5kIHRyYW5zbGF0aW5nLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1Byb2Nlc3NfQ29tcG9zaXRlX0NvbXBvbmVudAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgT25jZSBhIGNvbXBvc2l0ZSBjb21wb25lbnQgaGFzIGJlZW4gbG9hZGVkLCBpdCBuZWVkcyB0byBiZQorICAgKiAgIHByb2Nlc3NlZC4gIFVzdWFsbHksIHRoaXMgbWVhbnMgdHJhbnNmb3JtaW5nIGFuZCB0cmFuc2xhdGluZy4KKyAgICovCiAgIHN0YXRpYyBGVF9FcnJvcgogICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQoIFRUX0xvYWRlciAgICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU3ViR2x5cGggIHN1YmdseXBoLApAQCAtMTE1MywxMCArMTE2MSwxMCBAQAogCiAjaWYgMAogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogVGhpcyBhbGdvcml0aG0gaXMgd2hhdCBBcHBsZSBkb2N1bWVudHMuICBCdXQgaXQgZG9lc24ndCB3b3JrLiAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBhbGdvcml0aG0gaXMgd2hhdCBBcHBsZSBkb2N1bWVudHMuICBCdXQgaXQgZG9lc24ndCB3b3JrLgorICAgICAgICAgKi8KICAgICAgICAgaW50ICBhID0gc3ViZ2x5cGgtPnRyYW5zZm9ybS54eCA+IDAgPyAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnh4OwogICAgICAgICBpbnQgIGIgPSBzdWJnbHlwaC0+dHJhbnNmb3JtLnl4ID4gMCA/ICBzdWJnbHlwaC0+dHJhbnNmb3JtLnl4CkBAIC0xMTc4LDEwICsxMTg2LDEwIEBACiAKICNlbHNlIC8qIDEgKi8KIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIFRoaXMgYWxnb3JpdGhtIGlzIGEgZ3Vlc3MgYW5kIHdvcmtzIG11Y2ggYmV0dGVyIHRoYW4gdGhlIGFib3ZlLiAqLwotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgYWxnb3JpdGhtIGlzIGEgZ3Vlc3MgYW5kIHdvcmtzIG11Y2ggYmV0dGVyIHRoYW4gdGhlIGFib3ZlLgorICAgICAgICAgKi8KICAgICAgICAgRlRfRml4ZWQgIG1hY194c2NhbGUgPSBGVF9IeXBvdCggc3ViZ2x5cGgtPnRyYW5zZm9ybS54eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eSApOwogICAgICAgICBGVF9GaXhlZCAgbWFjX3lzY2FsZSA9IEZUX0h5cG90KCBzdWJnbHlwaC0+dHJhbnNmb3JtLnl5LApAQCAtMTIxOSw3ICsxMjI3LDcgQEAKICAgICAgICAgICAgICAqIFRoZW9yZXRpY2FsbHksIGEgZ2x5cGgncyBieXRlY29kZSBjYW4gdG9nZ2xlIENsZWFyVHlwZSdzCiAgICAgICAgICAgICAgKiBgYmFja3dhcmQgY29tcGF0aWJpbGl0eScgbW9kZSwgd2hpY2ggd291bGQgYWxsb3cgbW9kaWZpY2F0aW9uCiAgICAgICAgICAgICAgKiBvZiB0aGUgYWR2YW5jZSB3aWR0aC4gIEluIHJlYWxpdHksIGhvd2V2ZXIsIGFwcGxpY2F0aW9ucwotICAgICAgICAgICAgICogbmVpdGhlciBhbGxvdyBub3IgZXhwZWN0IG1vZGlmaWVkIGFkdmFuY2Ugd2lkdGhzIGlmIHN1Yi1waXhlbAorICAgICAgICAgICAgICogbmVpdGhlciBhbGxvdyBub3IgZXhwZWN0IG1vZGlmaWVkIGFkdmFuY2Ugd2lkdGhzIGlmIHN1YnBpeGVsCiAgICAgICAgICAgICAgKiByZW5kZXJpbmcgaXMgYWN0aXZlLgogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqLwpAQCAtMTIzOSwxNiArMTI0NywxNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLCBpbiB0aGF0ICAgKi8KLSAgLyogICAgaXRzIHNvbGUgcHVycG9zZSBpcyB0byBoaW50IHRoZSBnbHlwaC4gIFRodXMgdGhpcyBmdW5jdGlvbiBpcyAgICAgICovCi0gIC8qICAgIG9ubHkgYXZhaWxhYmxlIHdoZW4gYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMgZW5hYmxlZC4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9HbHlwaAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhpcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwgaW4gdGhhdAorICAgKiAgIGl0cyBzb2xlIHB1cnBvc2UgaXMgdG8gaGludCB0aGUgZ2x5cGguICBUaHVzIHRoaXMgZnVuY3Rpb24gaXMKKyAgICogICBvbmx5IGF2YWlsYWJsZSB3aGVuIGJ5dGVjb2RlIGludGVycHJldGVyIGlzIGVuYWJsZWQuCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgVFRfUHJvY2Vzc19Db21wb3NpdGVfR2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBzdGFydF9wb2ludCwKQEAgLTE0OTcsMTUgKzE1MDUsMTUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF90cnVldHlwZV9nbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZHMgYSBnaXZlbiB0cnVldHlwZSBnbHlwaC4gIEhhbmRsZXMgY29tcG9zaXRlcyBhbmQgdXNlcyBhICAgICAgICovCi0gIC8qICAgIFRUX0xvYWRlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBsb2FkX3RydWV0eXBlX2dseXBoCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkcyBhIGdpdmVuIHRydWV0eXBlIGdseXBoLiAgSGFuZGxlcyBjb21wb3NpdGVzIGFuZCB1c2VzIGEKKyAgICogICBUVF9Mb2FkZXIgb2JqZWN0LgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIGxvYWRfdHJ1ZXR5cGVfZ2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LApAQCAtMjI3NiwxMyArMjI4NCwxMyBAQAogICAgICAgLyogWFhYOiBmb3Igbm93LCB3ZSBoYXZlIG5vIGJldHRlciBhbGdvcml0aG0gZm9yIHRoZSBsc2IsIGJ1dCBpdCAqLwogICAgICAgLyogICAgICBzaG91bGQgd29yayBmaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdYIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgLyAyOworICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gU1VCX0xPTkcoIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSAvIDIgKTsKICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IHRvcDsKICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlICA9IGFkdmFuY2U7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQogCiAKQEAgLTI2NTYsMzMgKzI2NjQsMzcgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGxvYWQgYSBzaW5nbGUgZ2x5cGggd2l0aGluIGEgZ2l2ZW4gZ2x5cGggc2xvdCwgICovCi0gIC8qICAgIGZvciBhIGdpdmVuIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IHNsb3Qgb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGxvYWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBzaXplIGF0IHdoaWNoIHRoZSBnbHlwaCAqLwotICAvKiAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNjYWxlZC9sb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbG9hZF9mbGFncyAgOjogQSBmbGFnIGluZGljYXRpbmcgd2hhdCB0byBsb2FkIGZvciB0aGlzIGdseXBoLiAgVGhlICovCi0gIC8qICAgICAgICAgICAgICAgICAgIEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBnbHlwaCBsb2FkaW5nIHByb2Nlc3MgKGUuZy4sIHdoZXRoZXIgdGhlIG91dGxpbmUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNjYWxlZCwgd2hldGhlciB0byBsb2FkIGJpdG1hcHMgb3Igbm90LCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgdG8gaGludCB0aGUgb3V0bGluZSwgZXRjKS4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9Mb2FkX0dseXBoCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGZ1bmN0aW9uIHVzZWQgdG8gbG9hZCBhIHNpbmdsZSBnbHlwaCB3aXRoaW4gYSBnaXZlbiBnbHlwaCBzbG90LAorICAgKiAgIGZvciBhIGdpdmVuIHNpemUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBnbHlwaCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSB0YXJnZXQgc2xvdCBvYmplY3Qgd2hlcmUgdGhlIGdseXBoCisgICAqICAgICB3aWxsIGJlIGxvYWRlZC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugc2l6ZSBhdCB3aGljaCB0aGUgZ2x5cGgKKyAgICogICAgIG11c3QgYmUgc2NhbGVkL2xvYWRlZC4KKyAgICoKKyAgICogICBnbHlwaF9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKiAgIGxvYWRfZmxhZ3MgOjoKKyAgICogICAgIEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZQorICAgKiAgICAgRlRfTE9BRF9YWFggY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlCisgICAqICAgICBnbHlwaCBsb2FkaW5nIHByb2Nlc3MgKGUuZy4sIHdoZXRoZXIgdGhlIG91dGxpbmUKKyAgICogICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwKKyAgICogICAgIHdoZXRoZXIgdG8gaGludCB0aGUgb3V0bGluZSwgZXRjKS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIFRUX0xvYWRfR2x5cGgoIFRUX1NpemUgICAgICAgc2l6ZSwKICAgICAgICAgICAgICAgICAgVFRfR2x5cGhTbG90ICBnbHlwaCwKQEAgLTI3MDksNiArMjcyMSwxMCBAQAogICAgICAgICAgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19CSVRNQVAgKSA9PSAwICYmCiAgICAgICAgICBJU19ERUZBVUxUX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAgKQogICAgIHsKKyAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gc2l6ZS0+cm9vdC5tZXRyaWNzLnhfc2NhbGU7CisgICAgICBGVF9GaXhlZCAgeV9zY2FsZSA9IHNpemUtPnJvb3QubWV0cmljcy55X3NjYWxlOworCisKICAgICAgIGVycm9yID0gbG9hZF9zYml0X2ltYWdlKCBzaXplLCBnbHlwaCwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MgKTsKICAgICAgIGlmICggRlRfRVJSX0VRKCBlcnJvciwgTWlzc2luZ19CaXRtYXAgKSApCiAgICAgICB7CkBAIC0yNzE2LDkgKzI3MzIsMTMgQEAKICAgICAgICAgLyogaWYgd2UgaGF2ZSBhIGJpdG1hcC1vbmx5IGZvbnQsIHJldHVybiBhbiBlbXB0eSBnbHlwaCAgICAgICAgICAgICovCiAgICAgICAgIGlmICggIUZUX0lTX1NDQUxBQkxFKCBnbHlwaC0+ZmFjZSApICkKICAgICAgICAgewotICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSA9IChUVF9GYWNlKWdseXBoLT5mYWNlOwotICAgICAgICAgIEZUX1Nob3J0ICAgbGVmdF9iZWFyaW5nID0gMCwgdG9wX2JlYXJpbmcgPSAwOwotICAgICAgICAgIEZUX1VTaG9ydCAgYWR2YW5jZV93aWR0aCA9IDAsIGFkdmFuY2VfaGVpZ2h0ID0gMDsKKyAgICAgICAgICBUVF9GYWNlICBmYWNlID0gKFRUX0ZhY2UpZ2x5cGgtPmZhY2U7CisKKyAgICAgICAgICBGVF9TaG9ydCAgbGVmdF9iZWFyaW5nID0gMDsKKyAgICAgICAgICBGVF9TaG9ydCAgdG9wX2JlYXJpbmcgID0gMDsKKworICAgICAgICAgIEZUX1VTaG9ydCAgYWR2YW5jZV93aWR0aCAgPSAwOworICAgICAgICAgIEZUX1VTaG9ydCAgYWR2YW5jZV9oZWlnaHQgPSAwOwogCiAKICAgICAgICAgICAvKiB0byByZXR1cm4gYW4gZW1wdHkgZ2x5cGgsIGhvd2V2ZXIsIHdlIG5lZWQgbWV0cmljcyBkYXRhICAgKi8KQEAgLTI3NDQsMTMgKzI3NjQsMTMgQEAKICAgICAgICAgICBnbHlwaC0+bWV0cmljcy53aWR0aCAgPSAwOwogICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IDA7CiAKLSAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1ggPSBsZWZ0X2JlYXJpbmc7CisgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdYID0gRlRfTXVsRml4KCBsZWZ0X2JlYXJpbmcsIHhfc2NhbGUgKTsKICAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1kgPSAwOwotICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IGFkdmFuY2Vfd2lkdGg7CisgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgID0gRlRfTXVsRml4KCBhZHZhbmNlX3dpZHRoLCB4X3NjYWxlICk7CiAKICAgICAgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAwOwotICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IHRvcF9iZWFyaW5nOwotICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlICA9IGFkdmFuY2VfaGVpZ2h0OworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IEZUX011bEZpeCggdG9wX2JlYXJpbmcsIHlfc2NhbGUgKTsKKyAgICAgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QWR2YW5jZSAgPSBGVF9NdWxGaXgoIGFkdmFuY2VfaGVpZ2h0LCB5X3NjYWxlICk7CiAKICAgICAgICAgICBnbHlwaC0+Zm9ybWF0ICAgICAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQklUTUFQOwogICAgICAgICAgIGdseXBoLT5iaXRtYXAucGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTU9OTzsKQEAgLTI3ODEsMTMgKzI4MDEsMTEgQEAKICAgICAgICAgICAvKiBzYW5pdHkgY2hlY2tzOiBpZiBgeHh4QWR2YW5jZScgaW4gdGhlIHNiaXQgbWV0cmljICovCiAgICAgICAgICAgLyogc3RydWN0dXJlIGlzbid0IHNldCwgdXNlIGBsaW5lYXJYWFhBZHZhbmNlJyAgICAgICovCiAgICAgICAgICAgaWYgKCAhZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgJiYgZ2x5cGgtPmxpbmVhckhvcmlBZHZhbmNlICkKLSAgICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlID0KLSAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaC0+bGluZWFySG9yaUFkdmFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy0+eF9zY2FsZSApOworICAgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPSBGVF9NdWxGaXgoIGdseXBoLT5saW5lYXJIb3JpQWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X3NjYWxlICk7CiAgICAgICAgICAgaWYgKCAhZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgJiYgZ2x5cGgtPmxpbmVhclZlcnRBZHZhbmNlICkKLSAgICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlID0KLSAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaC0+bGluZWFyVmVydEFkdmFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy0+eV9zY2FsZSApOworICAgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgPSBGVF9NdWxGaXgoIGdseXBoLT5saW5lYXJWZXJ0QWR2YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X3NjYWxlICk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gRlRfRXJyX09rOwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCBiL3NyYy90cnVldHlwZS90dGdsb2FkLmgKaW5kZXggZDIzN2NmZC4uYzExNzcyOCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dGdsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGUgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGdsb2FkLmgKKyAqCisgKiAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRHTE9BRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyBiL3NyYy90cnVldHlwZS90dGd4dmFyLmMKaW5kZXggYjNlOWVjNy4uM2RmNTBkNiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCkBAIC0xLDQyICsxLDQyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dGd4dmFyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnLCBhbmQgR2VvcmdlIFdpbGxpYW1zLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dGd4dmFyLmMKKyAqCisgKiAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlcgorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnLCBhbmQgR2VvcmdlIFdpbGxpYW1zLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBcHBsZSBkb2N1bWVudHMgdGhlIGBmdmFyJywgYGd2YXInLCBgY3ZhcicsIGFuZCBgYXZhcicgdGFibGVzIGF0ICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1RydWVUeXBlLVJlZmVyZW5jZS1NYW51YWwvUk0wNi9DaGFwNltmZ2NhXXZhci5odG1sICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgYGd2YXInIGlzIG5vdCBpbnRlbGxpZ2libGU7IGBjdmFyJyByZWZlcnMgeW91ICAgKi8KLSAgLyogdG8gYGd2YXInIGFuZCBpcyB0aHVzIGFsc28gaW5jb21wcmVoZW5zaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgYGF2YXInIGFwcGVhcnMgY29ycmVjdCwgYnV0IEFwcGxlIGhhcyBubyBmb250cyAgKi8KLSAgLyogd2l0aCBhbiBgYXZhcicgdGFibGUsIHNvIGl0IGlzIGhhcmQgdG8gdGVzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNYW55IHRoYW5rcyB0byBKb2huIEplbmtpbnMgKGF0IEFwcGxlKSBpbiBmaWd1cmluZyB0aGlzIG91dC4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBcHBsZSdzIGBrZXJuJyB0YWJsZSBoYXMgc29tZSByZWZlcmVuY2VzIHRvIHR1cGxlIGluZGljZXMsIGJ1dCBhcyAgICAgKi8KLSAgLyogdGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB3aGVyZSB0aGVzZSBpbmRpY2VzIGFyZSBkZWZpbmVkLCBub3IgaG93IHRvICAgICovCi0gIC8qIGludGVycG9sYXRlIHRoZSBrZXJuaW5nIHZhbHVlcyAoZGlmZmVyZW50IHR1cGxlcyBoYXZlIGRpZmZlcmVudCAgICAgICAqLwotICAvKiBjbGFzc2VzKSB0aGlzIGlzc3VlIGlzIGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQXBwbGUgZG9jdW1lbnRzIHRoZSBgZnZhcicsIGBndmFyJywgYGN2YXInLCBhbmQgYGF2YXInIHRhYmxlcyBhdAorICAgKgorICAgKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZbZmdjYV12YXIuaHRtbAorICAgKgorICAgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgYGd2YXInIGlzIG5vdCBpbnRlbGxpZ2libGU7IGBjdmFyJyByZWZlcnMgeW91CisgICAqIHRvIGBndmFyJyBhbmQgaXMgdGh1cyBhbHNvIGluY29tcHJlaGVuc2libGUuCisgICAqCisgICAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciBgYXZhcicgYXBwZWFycyBjb3JyZWN0LCBidXQgQXBwbGUgaGFzIG5vIGZvbnRzCisgICAqIHdpdGggYW4gYGF2YXInIHRhYmxlLCBzbyBpdCBpcyBoYXJkIHRvIHRlc3QuCisgICAqCisgICAqIE1hbnkgdGhhbmtzIHRvIEpvaG4gSmVua2lucyAoYXQgQXBwbGUpIGluIGZpZ3VyaW5nIHRoaXMgb3V0LgorICAgKgorICAgKgorICAgKiBBcHBsZSdzIGBrZXJuJyB0YWJsZSBoYXMgc29tZSByZWZlcmVuY2VzIHRvIHR1cGxlIGluZGljZXMsIGJ1dCBhcworICAgKiB0aGVyZSBpcyBubyBpbmRpY2F0aW9uIHdoZXJlIHRoZXNlIGluZGljZXMgYXJlIGRlZmluZWQsIG5vciBob3cgdG8KKyAgICogaW50ZXJwb2xhdGUgdGhlIGtlcm5pbmcgdmFsdWVzIChkaWZmZXJlbnQgdHVwbGVzIGhhdmUgZGlmZmVyZW50CisgICAqIGNsYXNzZXMpIHRoaXMgaXNzdWUgaXMgaWdub3JlZC4KKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC02NywxMiArNjcsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDogKHN0cmVhbSktPmxpbWl0CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBzb21lIG1hY3JvcyB3ZSBuZWVkICovCisjZGVmaW5lIEZUX0ZJWEVEX09ORSAgKCAoRlRfRml4ZWQpMHgxMDAwMCApCisKKyNkZWZpbmUgRlRfZmRvdDE0VG9GaXhlZCggeCApICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoRlRfRml4ZWQpKCAoRlRfVUxvbmcpKHgpIDw8IDIgKSApCisjZGVmaW5lIEZUX2ludFRvRml4ZWQoIGkgKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoIChGVF9GaXhlZCkoIChGVF9VTG9uZykoaSkgPDwgMTYgKSApCisjZGVmaW5lIEZUX2ZpeGVkVG9JbnQoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoIChGVF9TaG9ydCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgPj4gMTYgKSApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdHRneHZhcgogCkBAIC04NiwxMiArOTcsMTIgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBBTExfUE9JTlRTIGlzIHVzZWQgaW4gYGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzJy4gIEl0ICAgICAgICAqLwotICAvKiBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGRlbHRhIGZvciBldmVyeSBwb2ludCB3aXRob3V0IG5lZWRpbmcgdG8gICAgKi8KLSAgLyogZW51bWVyYXRlIGFsbCBvZiB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEFMTF9QT0lOVFMgaXMgdXNlZCBpbiBgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMnLiAgSXQKKyAgICogaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBkZWx0YSBmb3IgZXZlcnkgcG9pbnQgd2l0aG91dCBuZWVkaW5nIHRvCisgICAqIGVudW1lcmF0ZSBhbGwgb2YgdGhlbS4KKyAgICovCiAKICAgLyogZW5zdXJlIHRoYXQgdmFsdWUgYDAnIGhhcyB0aGUgc2FtZSB3aWR0aCBhcyBhIHBvaW50ZXIgKi8KICNkZWZpbmUgQUxMX1BPSU5UUyAgKEZUX1VTaG9ydCopfihGVF9QdHJEaXN0KTAKQEAgLTEwMSwyOSArMTEyLDMyIEBACiAjZGVmaW5lIEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLICAweDdGVQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVhZCBhIHNldCBvZiBwb2ludHMgdG8gd2hpY2ggdGhlIGZvbGxvd2luZyBkZWx0YXMgd2lsbCBhcHBseS4gICAgICovCi0gIC8qICAgIFBvaW50cyBhcmUgcGFja2VkIHdpdGggYSBydW4gbGVuZ3RoIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSAgICA6OiBUaGUgZGF0YSBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSAgICAgIDo6IFRoZSBzaXplIG9mIHRoZSB0YWJsZSBob2xkaW5nIHRoZSBkYXRhLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9pbnRfY250IDo6IFRoZSBudW1iZXIgb2YgcG9pbnRzIHJlYWQuICBBIHplcm8gdmFsdWUgbWVhbnMgdGhhdCAgICovCi0gIC8qICAgICAgICAgICAgICAgICBhbGwgcG9pbnRzIGluIHRoZSBnbHlwaCB3aWxsIGJlIGFmZmVjdGVkLCB3aXRob3V0ICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgZW51bWVyYXRpbmcgdGhlbSBpbmRpdmlkdWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBhcnJheSBvZiBGVF9VU2hvcnQgY29udGFpbmluZyB0aGUgYWZmZWN0ZWQgcG9pbnRzIG9yIHRoZSAgICAgICAgKi8KLSAgLyogICAgc3BlY2lhbCB2YWx1ZSBBTExfUE9JTlRTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBSZWFkIGEgc2V0IG9mIHBvaW50cyB0byB3aGljaCB0aGUgZm9sbG93aW5nIGRlbHRhcyB3aWxsIGFwcGx5LgorICAgKiAgIFBvaW50cyBhcmUgcGFja2VkIHdpdGggYSBydW4gbGVuZ3RoIGVuY29kaW5nLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgZGF0YSBzdHJlYW0uCisgICAqCisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgVGhlIHNpemUgb2YgdGhlIHRhYmxlIGhvbGRpbmcgdGhlIGRhdGEuCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAgcG9pbnRfY250IDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIHBvaW50cyByZWFkLiAgQSB6ZXJvIHZhbHVlIG1lYW5zIHRoYXQKKyAgICogICAgIGFsbCBwb2ludHMgaW4gdGhlIGdseXBoIHdpbGwgYmUgYWZmZWN0ZWQsIHdpdGhvdXQKKyAgICogICAgIGVudW1lcmF0aW5nIHRoZW0gaW5kaXZpZHVhbGx5LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEFuIGFycmF5IG9mIEZUX1VTaG9ydCBjb250YWluaW5nIHRoZSBhZmZlY3RlZCBwb2ludHMgb3IgdGhlCisgICAqICAgc3BlY2lhbCB2YWx1ZSBBTExfUE9JTlRTLgorICAgKi8KICAgc3RhdGljIEZUX1VTaG9ydCoKICAgZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIEZUX1N0cmVhbSAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplLApAQCAtMjExLDM0ICsyMjUsNDEgQEAKICNkZWZpbmUgR1hfRFRfREVMVEFfUlVOX0NPVU5UX01BU0sgIDB4M0ZVCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZWFkIGEgc2V0IG9mIGRlbHRhcy4gIFRoZXNlIGFyZSBwYWNrZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgdGhhbiAgKi8KLSAgLyogICAgcG9pbnRzLiAgSW4gcGFydGljdWxhciB0aGVyZSBpcyBubyBvdmVyYWxsIGNvdW50LiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtICAgIDo6IFRoZSBkYXRhIHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplICAgICAgOjogVGhlIHNpemUgb2YgdGhlIHRhYmxlIGhvbGRpbmcgdGhlIGRhdGEuICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRlbHRhX2NudCA6OiBUaGUgbnVtYmVyIG9mIGRlbHRhcyB0byBiZSByZWFkLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEFuIGFycmF5IG9mIEZUX1Nob3J0IGNvbnRhaW5pbmcgdGhlIGRlbHRhcyBmb3IgdGhlIGFmZmVjdGVkICAgICAgICAqLwotICAvKiAgICBwb2ludHMuICAoVGhpcyBvbmx5IGdldHMgdGhlIGRlbHRhcyBmb3Igb25lIGRpbWVuc2lvbi4gIEl0IHdpbGwgICAgKi8KLSAgLyogICAgZ2VuZXJhbGx5IGJlIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgeCwgb25jZSBmb3IgeS4gIFdoZW4gdXNlZCBpbiAgICovCi0gIC8qICAgIGN2dCB0YWJsZSwgaXQgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlLikgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIEZUX1Nob3J0KgorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBSZWFkIGEgc2V0IG9mIGRlbHRhcy4gIFRoZXNlIGFyZSBwYWNrZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgdGhhbgorICAgKiAgIHBvaW50cy4gIEluIHBhcnRpY3VsYXIgdGhlcmUgaXMgbm8gb3ZlcmFsbCBjb3VudC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGRhdGEgc3RyZWFtLgorICAgKgorICAgKiAgIHNpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSB0YWJsZSBob2xkaW5nIHRoZSBkYXRhLgorICAgKgorICAgKiAgIGRlbHRhX2NudCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBkZWx0YXMgdG8gYmUgcmVhZC4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBBbiBhcnJheSBvZiBGVF9GaXhlZCBjb250YWluaW5nIHRoZSBkZWx0YXMgZm9yIHRoZSBhZmZlY3RlZAorICAgKiAgIHBvaW50cy4gIChUaGlzIG9ubHkgZ2V0cyB0aGUgZGVsdGFzIGZvciBvbmUgZGltZW5zaW9uLiAgSXQgd2lsbAorICAgKiAgIGdlbmVyYWxseSBiZSBjYWxsZWQgdHdpY2UsIG9uY2UgZm9yIHgsIG9uY2UgZm9yIHkuICBXaGVuIHVzZWQgaW4KKyAgICogICBjdnQgdGFibGUsIGl0IHdpbGwgb25seSBiZSBjYWxsZWQgb25jZS4pCisgICAqCisgICAqICAgV2UgdXNlIEZUX0ZpeGVkIHRvIGF2b2lkIGFjY3VtdWxhdGlvbiBlcnJvcnMgd2hpbGUgc3VtbWluZyB1cCBhbGwKKyAgICogICBkZWx0YXMgKHRoZSByb3VuZGluZyB0byBpbnRlZ2VyIHZhbHVlcyBoYXBwZW5zIGFzIHRoZSB2ZXJ5IGxhc3QKKyAgICogICBzdGVwKS4KKyAgICovCisgIHN0YXRpYyBGVF9GaXhlZCoKICAgZnRfdmFyX3JlYWRwYWNrZWRkZWx0YXMoIEZUX1N0cmVhbSAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBkZWx0YV9jbnQgKQogICB7Ci0gICAgRlRfU2hvcnQgICpkZWx0YXMgPSBOVUxMOworICAgIEZUX0ZpeGVkICAqZGVsdGFzID0gTlVMTDsKICAgICBGVF9VSW50ICAgIHJ1bmNudCwgY250OwogICAgIEZUX1VJbnQgICAgaSwgajsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwpAQCAtMjcyLDEzICsyOTMsMTMgQEAKICAgICAgIHsKICAgICAgICAgLyogYHJ1bmNudCcgc2hvcnRzIGZyb20gdGhlIHN0YWNrICovCiAgICAgICAgIGZvciAoIGogPSAwOyBqIDw9IGNudCAmJiBpIDwgZGVsdGFfY250OyBqKysgKQotICAgICAgICAgIGRlbHRhc1tpKytdID0gRlRfR0VUX1NIT1JUKCk7CisgICAgICAgICAgZGVsdGFzW2krK10gPSBGVF9pbnRUb0ZpeGVkKCBGVF9HRVRfU0hPUlQoKSApOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewogICAgICAgICAvKiBgcnVuY250JyBzaWduZWQgYnl0ZXMgZnJvbSB0aGUgc3RhY2sgKi8KICAgICAgICAgZm9yICggaiA9IDA7IGogPD0gY250ICYmIGkgPCBkZWx0YV9jbnQ7IGorKyApCi0gICAgICAgICAgZGVsdGFzW2krK10gPSBGVF9HRVRfQ0hBUigpOworICAgICAgICAgIGRlbHRhc1tpKytdID0gRlRfaW50VG9GaXhlZCggRlRfR0VUX0NIQVIoKSApOwogICAgICAgfQogCiAgICAgICBpZiAoIGogPD0gY250ICkKQEAgLTI5MywxOCArMzE0LDE5IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ0X3Zhcl9sb2FkX2F2YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBhcnNlIHRoZSBgYXZhcicgdGFibGUgaWYgcHJlc2VudC4gIEl0IG5lZWQgbm90IGJlLCBzbyB3ZSByZXR1cm4gICAqLwotICAvKiAgICBub3RoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IFRoZSBmb250IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgZnRfdmFyX2xvYWRfYXZhcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUGFyc2UgdGhlIGBhdmFyJyB0YWJsZSBpZiBwcmVzZW50LiAgSXQgbmVlZCBub3QgYmUsIHNvIHdlIHJldHVybgorICAgKiAgIG5vdGhpbmcuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgZm9udCBmYWNlLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgZnRfdmFyX2xvYWRfYXZhciggVFRfRmFjZSAgZmFjZSApCiAgIHsKQEAgLTM5NCwxNyArNDE2LDYgQEAKICAgfQogCiAKLSAgLyogc29tZSBtYWNyb3Mgd2UgbmVlZCAqLwotI2RlZmluZSBGVF9GSVhFRF9PTkUgICggKEZUX0ZpeGVkKTB4MTAwMDAgKQotCi0jZGVmaW5lIEZUX2Zkb3QxNFRvRml4ZWQoIHggKSAgICAgICAgICAgICAgICBcCi0gICAgICAgICggKEZUX0ZpeGVkKSggKEZUX1VMb25nKSh4KSA8PCAyICkgKQotI2RlZmluZSBGVF9pbnRUb0ZpeGVkKCBpICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKCAoRlRfRml4ZWQpKCAoRlRfVUxvbmcpKGkpIDw8IDE2ICkgKQotI2RlZmluZSBGVF9maXhlZFRvSW50KCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKCAoRlRfU2hvcnQpKCAoIChGVF9VSW50MzIpKHgpICsgMHg4MDAwVSApID4+IDE2ICkgKQotCi0KICAgc3RhdGljIEZUX0Vycm9yCiAgIGZ0X3Zhcl9sb2FkX2l0ZW1fdmFyaWF0aW9uX3N0b3JlKCBUVF9GYWNlICAgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgIG9mZnNldCwKQEAgLTcwMiwyOSArNzEzLDMwIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ0X3Zhcl9sb2FkX2h2dmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElmIGB2ZXJ0aWNhbCcgaXMgemVybywgcGFyc2UgdGhlIGBIVkFSJyB0YWJsZSBhbmQgc2V0ICAgICAgICAgICAgICAqLwotICAvKiAgICBgYmxlbmQtPmh2YXJfbG9hZGVkJyB0byBUUlVFLiAgT24gc3VjY2VzcywgYGJsZW5kLT5odmFyX2NoZWNrZWQnICAgKi8KLSAgLyogICAgaXMgc2V0IHRvIFRSVUUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJZiBgdmVydGljYWwnIGlzIG5vdCB6ZXJvLCBwYXJzZSB0aGUgYFZWQVInIHRhYmxlIGFuZCBzZXQgICAgICAgICAgKi8KLSAgLyogICAgYGJsZW5kLT52dmFyX2xvYWRlZCcgdG8gVFJVRS4gIE9uIHN1Y2Nlc3MsIGBibGVuZC0+dnZhcl9jaGVja2VkJyAgICovCi0gIC8qICAgIGlzIHNldCB0byBUUlVFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU29tZSBtZW1vcnkgbWF5IHJlbWFpbiBhbGxvY2F0ZWQgb24gZXJyb3I7IGl0IGlzIGFsd2F5cyBmcmVlZCBpbiAgICovCi0gIC8qICAgIGB0dF9kb25lX2JsZW5kJywgaG93ZXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogVGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBmdF92YXJfbG9hZF9odnZhcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSWYgYHZlcnRpY2FsJyBpcyB6ZXJvLCBwYXJzZSB0aGUgYEhWQVInIHRhYmxlIGFuZCBzZXQKKyAgICogICBgYmxlbmQtPmh2YXJfbG9hZGVkJyB0byBUUlVFLiAgT24gc3VjY2VzcywgYGJsZW5kLT5odmFyX2NoZWNrZWQnCisgICAqICAgaXMgc2V0IHRvIFRSVUUuCisgICAqCisgICAqICAgSWYgYHZlcnRpY2FsJyBpcyBub3QgemVybywgcGFyc2UgdGhlIGBWVkFSJyB0YWJsZSBhbmQgc2V0CisgICAqICAgYGJsZW5kLT52dmFyX2xvYWRlZCcgdG8gVFJVRS4gIE9uIHN1Y2Nlc3MsIGBibGVuZC0+dnZhcl9jaGVja2VkJworICAgKiAgIGlzIHNldCB0byBUUlVFLgorICAgKgorICAgKiAgIFNvbWUgbWVtb3J5IG1heSByZW1haW4gYWxsb2NhdGVkIG9uIGVycm9yOyBpdCBpcyBhbHdheXMgZnJlZWQgaW4KKyAgICogICBgdHRfZG9uZV9ibGVuZCcsIGhvd2V2ZXIuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgZm9udCBmYWNlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgZnRfdmFyX2xvYWRfaHZ2YXIoIFRUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICB2ZXJ0aWNhbCApCkBAIC05MzcsMjUgKzk0OSwyOSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9odmFkdmFuY2VfYWRqdXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBcHBseSBgSFZBUicgYWR2YW5jZSB3aWR0aCBvciBgVlZBUicgYWR2YW5jZSBoZWlnaHQgYWRqdXN0bWVudCBvZiAgKi8KLSAgLyogICAgYSBnaXZlbiBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2luZGV4ICAgOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2ZXJ0aWNhbCA6OiBJZiBzZXQsIGhhbmRsZSBgVlZBUicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICA6OiBUaGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFkZWx0YSAgIDo6IFBvaW50cyB0byB3aWR0aCBvciBoZWlnaHQgdmFsdWUgdGhhdCBnZXRzIG1vZGlmaWVkLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9odmFkdmFuY2VfYWRqdXN0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBcHBseSBgSFZBUicgYWR2YW5jZSB3aWR0aCBvciBgVlZBUicgYWR2YW5jZSBoZWlnaHQgYWRqdXN0bWVudCBvZgorICAgKiAgIGEgZ2l2ZW4gZ2x5cGguCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBnaW5kZXggOjoKKyAgICogICAgIFRoZSBnbHlwaCBpbmRleC4KKyAgICoKKyAgICogICB2ZXJ0aWNhbCA6OgorICAgKiAgICAgSWYgc2V0LCBoYW5kbGUgYFZWQVInIHRhYmxlLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZvbnQgZmFjZS4KKyAgICoKKyAgICogICBhZGVsdGEgOjoKKyAgICogICAgIFBvaW50cyB0byB3aWR0aCBvciBoZWlnaHQgdmFsdWUgdGhhdCBnZXRzIG1vZGlmaWVkLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIHR0X2h2YWR2YW5jZV9hZGp1c3QoIFRUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGdpbmRleCwKQEAgLTExNTEsMjAgKzExNjcsMjEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnRfdmFyX2xvYWRfbXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGFyc2UgdGhlIGBNVkFSJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTb21lIG1lbW9yeSBtYXkgcmVtYWluIGFsbG9jYXRlZCBvbiBlcnJvcjsgaXQgaXMgYWx3YXlzIGZyZWVkIGluICAgKi8KLSAgLyogICAgYHR0X2RvbmVfYmxlbmQnLCBob3dldmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiBUaGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIGZ0X3Zhcl9sb2FkX212YXIKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFBhcnNlIHRoZSBgTVZBUicgdGFibGUuCisgICAqCisgICAqICAgU29tZSBtZW1vcnkgbWF5IHJlbWFpbiBhbGxvY2F0ZWQgb24gZXJyb3I7IGl0IGlzIGFsd2F5cyBmcmVlZCBpbgorICAgKiAgIGB0dF9kb25lX2JsZW5kJywgaG93ZXZlci4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIFRoZSBmb250IGZhY2UuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBmdF92YXJfbG9hZF9tdmFyKCBUVF9GYWNlICBmYWNlICkKICAgewpAQCAtMTI5NywxNyArMTMxNCwxOCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9hcHBseV9tdmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBcHBseSBgTVZBUicgdGFibGUgYWRqdXN0bWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlIDo6IFRoZSBmb250IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfYXBwbHlfbXZhcgorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQXBwbHkgYE1WQVInIHRhYmxlIGFkanVzdG1lbnRzLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZvbnQgZmFjZS4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2FwcGx5X212YXIoIFRUX0ZhY2UgIGZhY2UgKQogICB7CkBAIC0xNDAwLDIxICsxNDE4LDIyIEBACiAgIH0gR1hfR1Zhcl9IZWFkOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZnRfdmFyX2xvYWRfZ3ZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGFyc2UgdGhlIGBndmFyJyB0YWJsZSBpZiBwcmVzZW50LiAgSWYgYGZ2YXInIGlzIHRoZXJlLCBgZ3ZhcicgaGFkICovCi0gIC8qICAgIGJldHRlciBiZSB0aGVyZSB0b28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogVGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBmdF92YXJfbG9hZF9ndmFyCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBQYXJzZSB0aGUgYGd2YXInIHRhYmxlIGlmIHByZXNlbnQuICBJZiBgZnZhcicgaXMgdGhlcmUsIGBndmFyJyBoYWQKKyAgICogICBiZXR0ZXIgYmUgdGhlcmUgdG9vLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZvbnQgZmFjZS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIGZ0X3Zhcl9sb2FkX2d2YXIoIFRUX0ZhY2UgIGZhY2UgKQogICB7CkBAIC0xNTY3LDMzICsxNTg2LDM4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZ0X3Zhcl9hcHBseV90dXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpZ3VyZSBvdXQgd2hldGhlciBhIGdpdmVuIHR1cGxlIChkZXNpZ24pIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgICAqLwotICAvKiAgICBibGVuZCwgYW5kIGlmIHNvLCB3aGF0IGlzIHRoZSBzY2FsaW5nIGZhY3Rvci4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBibGVuZCAgICAgICAgICAgOjogVGhlIGN1cnJlbnQgYmxlbmQgb2YgdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR1cGxlSW5kZXggICAgICA6OiBBIGZsYWcgc2F5aW5nIHdoZXRoZXIgdGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUgb3Igbm90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR1cGxlX2Nvb3JkcyAgICA6OiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHR1cGxlIGluIG5vcm1hbGl6ZWQgYXhpcyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGltX3N0YXJ0X2Nvb3JkcyA6OiBUaGUgaW5pdGlhbCBjb29yZGluYXRlcyB3aGVyZSB0aGlzIHR1cGxlIHN0YXJ0cyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgdG8gYXBwbHkgKGZvciBpbnRlcm1lZGlhdGUgY29vcmRpbmF0ZXMpLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGltX2VuZF9jb29yZHMgICA6OiBUaGUgZmluYWwgY29vcmRpbmF0ZXMgYWZ0ZXIgd2hpY2ggdGhpcyB0dXBsZSBubyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2VyIGFwcGxpZXMgKGZvciBpbnRlcm1lZGlhdGUgY29vcmRpbmF0ZXMpLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbiBGVF9GaXhlZCB2YWx1ZSBjb250YWluaW5nIHRoZSBzY2FsaW5nIGZhY3Rvci4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgZnRfdmFyX2FwcGx5X3R1cGxlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGaWd1cmUgb3V0IHdoZXRoZXIgYSBnaXZlbiB0dXBsZSAoZGVzaWduKSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50CisgICAqICAgYmxlbmQsIGFuZCBpZiBzbywgd2hhdCBpcyB0aGUgc2NhbGluZyBmYWN0b3IuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBibGVuZCA6OgorICAgKiAgICAgVGhlIGN1cnJlbnQgYmxlbmQgb2YgdGhlIGZvbnQuCisgICAqCisgICAqICAgdHVwbGVJbmRleCA6OgorICAgKiAgICAgQSBmbGFnIHNheWluZyB3aGV0aGVyIHRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlCisgICAqICAgICB0dXBsZSBvciBub3QuCisgICAqCisgICAqICAgdHVwbGVfY29vcmRzIDo6CisgICAqICAgICBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHR1cGxlIGluIG5vcm1hbGl6ZWQgYXhpcworICAgKiAgICAgdW5pdHMuCisgICAqCisgICAqICAgaW1fc3RhcnRfY29vcmRzIDo6CisgICAqICAgICBUaGUgaW5pdGlhbCBjb29yZGluYXRlcyB3aGVyZSB0aGlzIHR1cGxlIHN0YXJ0cworICAgKiAgICAgdG8gYXBwbHkgKGZvciBpbnRlcm1lZGlhdGUgY29vcmRpbmF0ZXMpLgorICAgKgorICAgKiAgIGltX2VuZF9jb29yZHMgOjoKKyAgICogICAgIFRoZSBmaW5hbCBjb29yZGluYXRlcyBhZnRlciB3aGljaCB0aGlzIHR1cGxlIG5vCisgICAqICAgICBsb25nZXIgYXBwbGllcyAoZm9yIGludGVybWVkaWF0ZSBjb29yZGluYXRlcykuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgQW4gRlRfRml4ZWQgdmFsdWUgY29udGFpbmluZyB0aGUgc2NhbGluZyBmYWN0b3IuCisgICAqLwogICBzdGF0aWMgRlRfRml4ZWQKICAgZnRfdmFyX2FwcGx5X3R1cGxlKCBHWF9CbGVuZCAgIGJsZW5kLAogICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgdHVwbGVJbmRleCwKQEAgLTE3NTYsMTEgKzE3ODAsMTEgQEAKICAgICAgIH0KIAogICAgICAgaWYgKCBjb29yZCA8IGEtPmRlZiApCi0gICAgICAgIG5vcm1hbGl6ZWRbaV0gPSAtRlRfRGl2Rml4KCBjb29yZCAtIGEtPmRlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEtPm1pbmltdW0gLSBhLT5kZWYgKTsKKyAgICAgICAgbm9ybWFsaXplZFtpXSA9IC1GVF9EaXZGaXgoIFNVQl9MT05HKCBjb29yZCwgYS0+ZGVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfTE9ORyggYS0+bWluaW11bSwgYS0+ZGVmICkgKTsKICAgICAgIGVsc2UgaWYgKCBjb29yZCA+IGEtPmRlZiApCi0gICAgICAgIG5vcm1hbGl6ZWRbaV0gPSBGVF9EaXZGaXgoIGNvb3JkIC0gYS0+ZGVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC0gYS0+ZGVmICk7CisgICAgICAgIG5vcm1hbGl6ZWRbaV0gPSBGVF9EaXZGaXgoIFNVQl9MT05HKCBjb29yZCwgYS0+ZGVmICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCBhLT5tYXhpbXVtLCBhLT5kZWYgKSApOwogICAgICAgZWxzZQogICAgICAgICBub3JtYWxpemVkW2ldID0gMDsKICAgICB9CkBAIC0xOTEwLDI3ICsxOTM0LDI5IEBACiAgIH0gR1hfRlZhcl9BeGlzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfR2V0X01NX1ZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2hlY2sgdGhhdCB0aGUgZm9udCdzIGBmdmFyJyB0YWJsZSBpcyB2YWxpZCwgcGFyc2UgaXQsIGFuZCByZXR1cm4gICovCi0gIC8qICAgIHRob3NlIGRhdGEuICBJdCBhbHNvIGxvYWRzIChhbmQgcGFyc2VzKSB0aGUgYE1WQVInIHRhYmxlLCBpZiAgICAgICAqLwotICAvKiAgICBwb3NzaWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogVGhlIGZvbnQgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgIFRUX0dldF9NTV9WYXIgaW5pdGlhbGl6ZXMgdGhlIGJsZW5kIHN0cnVjdHVyZS4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWFzdGVyIDo6IFRoZSBgZnZhcicgZGF0YSAobXVzdCBiZSBmcmVlZCBieSBjYWxsZXIpLiAgQ2FuIGJlIE5VTEwsICovCi0gIC8qICAgICAgICAgICAgICB3aGljaCBtYWtlcyB0aGlzIGZ1bmN0aW9uIHNpbXBseSBsb2FkIE1NIHN1cHBvcnQuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9HZXRfTU1fVmFyCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDaGVjayB0aGF0IHRoZSBmb250J3MgYGZ2YXInIHRhYmxlIGlzIHZhbGlkLCBwYXJzZSBpdCwgYW5kIHJldHVybgorICAgKiAgIHRob3NlIGRhdGEuICBJdCBhbHNvIGxvYWRzIChhbmQgcGFyc2VzKSB0aGUgYE1WQVInIHRhYmxlLCBpZgorICAgKiAgIHBvc3NpYmxlLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZvbnQgZmFjZS4KKyAgICogICAgIFRUX0dldF9NTV9WYXIgaW5pdGlhbGl6ZXMgdGhlIGJsZW5kIHN0cnVjdHVyZS4KKyAgICoKKyAgICogQE91dHB1dDoKKyAgICogICBtYXN0ZXIgOjoKKyAgICogICAgIFRoZSBgZnZhcicgZGF0YSAobXVzdCBiZSBmcmVlZCBieSBjYWxsZXIpLiAgQ2FuIGJlIE5VTEwsCisgICAqICAgICB3aGljaCBtYWtlcyB0aGlzIGZ1bmN0aW9uIHNpbXBseSBsb2FkIE1NIHN1cHBvcnQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9HZXRfTU1fVmFyKCBUVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgRlRfTU1fVmFyKiAgKm1hc3RlciApCkBAIC0yMjgwLDYgKzIzMDYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgIHBzbmFtZSA/ICJQUyBuYW1lOiBgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgIHBzbmFtZSA/IHBzbmFtZSA6ICJubyBQUyBuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICBwc25hbWUgPyAiJyIgOiAiIiApKTsKKworICAgICAgICAgIEZUX0ZSRUUoIHN0cm5hbWUgKTsKKyAgICAgICAgICBGVF9GUkVFKCBwc25hbWUgKTsKICAgICAgICAgfQogI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCiAKQEAgLTI1MDQsMTEgKzI1MzMsMTQgQEAKIAogICAgICAgaWYgKCBGVF9JU19OQU1FRF9JTlNUQU5DRSggRlRfRkFDRSggZmFjZSApICkgKQogICAgICAgewotICAgICAgICBGVF9VSW50ICBpZHggPSAoRlRfVUludClmYWNlLT5yb290LmZhY2VfaW5kZXggPj4gMTY7CisgICAgICAgIEZUX1VJbnQgIGluc3RhbmNlX2luZGV4ID0gKEZUX1VJbnQpZmFjZS0+cm9vdC5mYWNlX2luZGV4ID4+IDE2OwogCiAKICAgICAgICAgYyA9IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzICsgaTsKLSAgICAgICAgbiA9IGJsZW5kLT5ub3JtYWxpemVkX3N0eWxlY29vcmRzICsgaWR4ICogbW12YXItPm51bV9heGlzICsgaTsKKyAgICAgICAgbiA9IGJsZW5kLT5ub3JtYWxpemVkX3N0eWxlY29vcmRzICAgICAgICAgICAgKworICAgICAgICAgICAgKCBpbnN0YW5jZV9pbmRleCAtIDEgKSAqIG1tdmFyLT5udW1fYXhpcyArCisgICAgICAgICAgICBpOworCiAgICAgICAgIGZvciAoIGogPSBpOyBqIDwgbW12YXItPm51bV9heGlzOyBqKyssIG4rKywgYysrICkKICAgICAgICAgICBpZiAoICpjICE9ICpuICkKICAgICAgICAgICAgIGhhdmVfZGlmZiA9IDE7CkBAIC0yNTIzLDcgKzI1NTUsMTEgQEAKIAogICAgICAgLyogcmV0dXJuIHZhbHVlIC0xIGluZGljYXRlcyBgbm8gY2hhbmdlJyAqLwogICAgICAgaWYgKCAhaGF2ZV9kaWZmICkKKyAgICAgIHsKKyAgICAgICAgZmFjZS0+ZG9ibGVuZCA9IFRSVUU7CisKICAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQogCiAgICAgICBmb3IgKCA7IGkgPCBtbXZhci0+bnVtX2F4aXM7IGkrKyApCiAgICAgICB7CkBAIC0yNTg3LDMxICsyNjIzLDM0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NldF9NTV9CbGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldCB0aGUgYmxlbmQgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZSAgICAqLwotICAvKiAgICBmb250LiAgQ2hlY2sgdGhhdCB0aGUgYGd2YXInIHRhYmxlIGlzIHJlYXNvbmFibGUgYW5kIGRvZXMgc29tZSAgICAgKi8KLSAgLyogICAgaW5pdGlhbCBwcmVwYXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgYmxlbmQgc3RydWN0dXJlIHdpdGggYGd2YXInIGRhdGEuICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29vcmRpbmF0ZXMuICBJZiBpdCBpcyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICgwKSBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzICAgICA6OiBBbiBhcnJheSBvZiBgbnVtX2Nvb3JkcycsIGVhY2ggYmV0d2VlbiBbLTEsMV0uICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1NldF9NTV9CbGVuZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU2V0IHRoZSBibGVuZCAobm9ybWFsaXplZCkgY29vcmRpbmF0ZXMgZm9yIHRoaXMgaW5zdGFuY2Ugb2YgdGhlCisgICAqICAgZm9udC4gIENoZWNrIHRoYXQgdGhlIGBndmFyJyB0YWJsZSBpcyByZWFzb25hYmxlIGFuZCBkb2VzIHNvbWUKKyAgICogICBpbml0aWFsIHByZXBhcmF0aW9uLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgVGhlIGZvbnQuCisgICAqICAgICBJbml0aWFsaXplIHRoZSBibGVuZCBzdHJ1Y3R1cmUgd2l0aCBgZ3ZhcicgZGF0YS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIG51bV9jb29yZHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvb3JkaW5hdGVzLiAgSWYgaXQgaXMKKyAgICogICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MKKyAgICogICAgIHZhbHVlcy4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsCisgICAqICAgICB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgKDApIGZvciB0aGUgcmVtYWluaW5nIGF4ZXMuCisgICAqCisgICAqICAgY29vcmRzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBgbnVtX2Nvb3JkcycsIGVhY2ggYmV0d2VlbiBbLTEsMV0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9TZXRfTU1fQmxlbmQoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCkBAIC0yNjMzLDI5ICsyNjcyLDMyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0dldF9NTV9CbGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEdldCB0aGUgYmxlbmQgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZSAgICAqLwotICAvKiAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgIDo6IFRoZSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBJbml0aWFsaXplIHRoZSBibGVuZCBzdHJ1Y3R1cmUgd2l0aCBgZ3ZhcicgZGF0YS4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb29yZGluYXRlcy4gIElmIGl0IGlzICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBzZXQgdGhlIGV4Y2VzcyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyB0byAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvb3JkcyAgICAgOjogQW4gYXJyYXkgb2YgYG51bV9jb29yZHMnLCBlYWNoIGJldHdlZW4gWy0xLDFdLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9HZXRfTU1fQmxlbmQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEdldCB0aGUgYmxlbmQgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGZvciB0aGlzIGluc3RhbmNlIG9mIHRoZQorICAgKiAgIGZvbnQuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgZm9udC4KKyAgICogICAgIEluaXRpYWxpemUgdGhlIGJsZW5kIHN0cnVjdHVyZSB3aXRoIGBndmFyJyBkYXRhLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgbnVtX2Nvb3JkcyA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29vcmRpbmF0ZXMuICBJZiBpdCBpcworICAgKiAgICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBzZXQgdGhlIGV4Y2VzcworICAgKiAgICAgdmFsdWVzIHRvIDAuCisgICAqCisgICAqICAgY29vcmRzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBgbnVtX2Nvb3JkcycsIGVhY2ggYmV0d2VlbiBbLTEsMV0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9HZXRfTU1fQmxlbmQoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCkBAIC0yNzA5LDMxICsyNzUxLDM0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NldF9WYXJfRGVzaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBpbnN0YW5jZSwgbWVhc3VyZWQgaW4gdGhlIHVzZXIgICAgICAgICAqLwotICAvKiAgICBjb29yZGluYXRlIHN5c3RlbS4gIFBhcnNlIHRoZSBgYXZhcicgdGFibGUgKGlmIHByZXNlbnQpIHRvIGNvbnZlcnQgKi8KLSAgLyogICAgZnJvbSB1c2VyIHRvIG5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgZm9udCBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgYmxlbmQgc3RydWN0IHdpdGggYGd2YXInIGRhdGEuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9jb29yZHMgOjogVGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29vcmRpbmF0ZXMuICBJZiBpdCBpcyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXhlcywgaWdub3JlIHRoZSBleGNlc3MgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzICAgICA6OiBBIGNvb3JkaW5hdGUgYXJyYXkgd2l0aCBgbnVtX2Nvb3JkcycgZWxlbWVudHMuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1NldF9WYXJfRGVzaWduCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBTZXQgdGhlIGNvb3JkaW5hdGVzIGZvciB0aGUgaW5zdGFuY2UsIG1lYXN1cmVkIGluIHRoZSB1c2VyCisgICAqICAgY29vcmRpbmF0ZSBzeXN0ZW0uICBQYXJzZSB0aGUgYGF2YXInIHRhYmxlIChpZiBwcmVzZW50KSB0byBjb252ZXJ0CisgICAqICAgZnJvbSB1c2VyIHRvIG5vcm1hbGl6ZWQgY29vcmRpbmF0ZXMuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgZm9udCBmYWNlLgorICAgKiAgICAgSW5pdGlhbGl6ZSB0aGUgYmxlbmQgc3RydWN0IHdpdGggYGd2YXInIGRhdGEuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBudW1fY29vcmRzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb29yZGluYXRlcy4gIElmIGl0IGlzCisgICAqICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIGlnbm9yZSB0aGUgZXhjZXNzCisgICAqICAgICB2YWx1ZXMuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLAorICAgKiAgICAgdXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHJlbWFpbmluZyBheGVzLgorICAgKgorICAgKiAgIGNvb3JkcyA6OgorICAgKiAgICAgQSBjb29yZGluYXRlIGFycmF5IHdpdGggYG51bV9jb29yZHMnIGVsZW1lbnRzLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgVFRfU2V0X1Zhcl9EZXNpZ24oIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKQEAgLTI4NTEsMjggKzI4OTYsMzEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfR2V0X1Zhcl9EZXNpZ24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR2V0IHRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbnRlcnBvbGF0ZWQgICovCi0gIC8qICAgIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2Nvb3JkcyA6OiBUaGUgbnVtYmVyIG9mIGRlc2lnbiBjb29yZGluYXRlcyB0byByZXRyaWV2ZS4gIElmIGl0ICovCi0gIC8qICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBheGVzLCBzZXQgdGhlIGV4Y2VzcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyB0b34wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb29yZHMgICAgIDo6IFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVFRfR2V0X1Zhcl9EZXNpZ24KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEdldCB0aGUgZGVzaWduIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW50ZXJwb2xhdGVkCisgICAqICAgZm9udC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4KKyAgICoKKyAgICogICBudW1fY29vcmRzIDo6CisgICAqICAgICBUaGUgbnVtYmVyIG9mIGRlc2lnbiBjb29yZGluYXRlcyB0byByZXRyaWV2ZS4gIElmIGl0CisgICAqICAgICBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF4ZXMsIHNldCB0aGUgZXhjZXNzCisgICAqICAgICB2YWx1ZXMgdG9+MC4KKyAgICoKKyAgICogQE91dHB1dDoKKyAgICogICBjb29yZHMgOjoKKyAgICogICAgIFRoZSBkZXNpZ24gY29vcmRpbmF0ZXMgYXJyYXkuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9HZXRfVmFyX0Rlc2lnbiggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLApAQCAtMjkyNiwyNCArMjk3NCwyNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9TZXRfTmFtZWRfSW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZXQgdGhlIGdpdmVuIG5hbWVkIGluc3RhbmNlLCBhbHNvIHJlc2V0dGluZyBhbnkgZnVydGhlciAgICAgICAgICAgKi8KLSAgLyogICAgdmFyaWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBpbnN0YW5jZV9pbmRleCA6OiBUaGUgaW5zdGFuY2UgaW5kZXgsIHN0YXJ0aW5nIHdpdGggdmFsdWUgMS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgVmFsdWUgMCBpbmRpY2F0ZXMgdG8gbm90IHVzZSBhbiBpbnN0YW5jZS4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1NldF9OYW1lZF9JbnN0YW5jZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU2V0IHRoZSBnaXZlbiBuYW1lZCBpbnN0YW5jZSwgYWxzbyByZXNldHRpbmcgYW55IGZ1cnRoZXIKKyAgICogICB2YXJpYXRpb24uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2UuCisgICAqCisgICAqICAgaW5zdGFuY2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbnN0YW5jZSBpbmRleCwgc3RhcnRpbmcgd2l0aCB2YWx1ZSAxLgorICAgKiAgICAgVmFsdWUgMCBpbmRpY2F0ZXMgdG8gbm90IHVzZSBhbiBpbnN0YW5jZS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIFRUX1NldF9OYW1lZF9JbnN0YW5jZSggVFRfRmFjZSAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBpbnN0YW5jZV9pbmRleCApCkBAIC0zMDE5LDQ4ICszMDY5LDYwIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV92YXJ5X2N2dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTW9kaWZ5IHRoZSBsb2FkZWQgY3Z0IHRhYmxlIGFjY29yZGluZyB0byB0aGUgYGN2YXInIHRhYmxlIGFuZCB0aGUgICovCi0gIC8qICAgIGZvbnQncyBibGVuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTW9zdCBlcnJvcnMgYXJlIGlnbm9yZWQuICBJdCBpcyBwZXJmZWN0bHkgdmFsaWQgbm90IHRvIGhhdmUgYSAgICAgICovCi0gIC8qICAgIGBjdmFyJyB0YWJsZSBldmVuIGlmIHRoZXJlIGlzIGEgYGd2YXInIGFuZCBgZnZhcicgdGFibGUuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX3ZhcnlfY3Z0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBNb2RpZnkgdGhlIGxvYWRlZCBjdnQgdGFibGUgYWNjb3JkaW5nIHRvIHRoZSBgY3ZhcicgdGFibGUgYW5kIHRoZQorICAgKiAgIGZvbnQncyBibGVuZC4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogICBNb3N0IGVycm9ycyBhcmUgaWdub3JlZC4gIEl0IGlzIHBlcmZlY3RseSB2YWxpZCBub3QgdG8gaGF2ZSBhCisgICAqICAgYGN2YXInIHRhYmxlIGV2ZW4gaWYgdGhlcmUgaXMgYSBgZ3ZhcicgYW5kIGBmdmFyJyB0YWJsZS4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX3ZhcnlfY3Z0KCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgc3RyZWFtICkKICAgewotICAgIEZUX0Vycm9yICAgIGVycm9yOwotICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OwotICAgIEZUX1VMb25nICAgIHRhYmxlX3N0YXJ0OwotICAgIEZUX1VMb25nICAgIHRhYmxlX2xlbjsKLSAgICBGVF9VSW50ICAgICB0dXBsZUNvdW50OwotICAgIEZUX1VMb25nICAgIG9mZnNldFRvRGF0YTsKLSAgICBGVF9VTG9uZyAgICBoZXJlOwotICAgIEZUX1VJbnQgICAgIGksIGo7Ci0gICAgRlRfRml4ZWQqICAgdHVwbGVfY29vcmRzICAgID0gTlVMTDsKLSAgICBGVF9GaXhlZCogICBpbV9zdGFydF9jb29yZHMgPSBOVUxMOwotICAgIEZUX0ZpeGVkKiAgIGltX2VuZF9jb29yZHMgICA9IE5VTEw7Ci0gICAgR1hfQmxlbmQgICAgYmxlbmQgICAgICAgICAgID0gZmFjZS0+YmxlbmQ7Ci0gICAgRlRfVUludCAgICAgcG9pbnRfY291bnQsIHNwb2ludF9jb3VudCA9IDA7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworCisgICAgRlRfVUxvbmcgIHRhYmxlX3N0YXJ0OworICAgIEZUX1VMb25nICB0YWJsZV9sZW47CisKKyAgICBGVF9VSW50ICAgdHVwbGVDb3VudDsKKyAgICBGVF9VTG9uZyAgb2Zmc2V0VG9EYXRhOworCisgICAgRlRfVUxvbmcgIGhlcmU7CisgICAgRlRfVUludCAgIGksIGo7CisKKyAgICBGVF9GaXhlZCogIHR1cGxlX2Nvb3JkcyAgICA9IE5VTEw7CisgICAgRlRfRml4ZWQqICBpbV9zdGFydF9jb29yZHMgPSBOVUxMOworICAgIEZUX0ZpeGVkKiAgaW1fZW5kX2Nvb3JkcyAgID0gTlVMTDsKKworICAgIEdYX0JsZW5kICBibGVuZCA9IGZhY2UtPmJsZW5kOworCisgICAgRlRfVUludCAgcG9pbnRfY291bnQ7CisgICAgRlRfVUludCAgc3BvaW50X2NvdW50ID0gMDsKKwogICAgIEZUX1VTaG9ydCogIHNoYXJlZHBvaW50cyA9IE5VTEw7CiAgICAgRlRfVVNob3J0KiAgbG9jYWxwb2ludHMgID0gTlVMTDsKICAgICBGVF9VU2hvcnQqICBwb2ludHM7Ci0gICAgRlRfU2hvcnQqICAgZGVsdGFzOworCisgICAgRlRfRml4ZWQqICBkZWx0YXMgICAgID0gTlVMTDsKKyAgICBGVF9GaXhlZCogIGN2dF9kZWx0YXMgPSBOVUxMOwogCiAKICAgICBGVF9UUkFDRTIoKCAiQ1ZBUiAiICkpOwpAQCAtMzE0Nyw2ICszMjA5LDkgQEAKICAgICAgICAgICAgICAgICB0dXBsZUNvdW50ICYgMHhGRkYsCiAgICAgICAgICAgICAgICAgKCB0dXBsZUNvdW50ICYgMHhGRkYgKSA9PSAxID8gIiIgOiAicyIgKSk7CiAKKyAgICBpZiAoIEZUX05FV19BUlJBWSggY3Z0X2RlbHRhcywgZmFjZS0+Y3Z0X3NpemUgKSApCisgICAgICBnb3RvIEZFeGl0OworCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiAweEZGRiApOyBpKysgKQogICAgIHsKICAgICAgIEZUX1VJbnQgICB0dXBsZURhdGFTaXplOwpAQCAtMzIzOCwxNyArMzMwMywyMSBAQAogICAgICAgICAvKiB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIGRlbHRhcyBmb3IgZXZlcnkgZW50cnkgaW4gY3Z0ICovCiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZmFjZS0+Y3Z0X3NpemU7IGorKyApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9Mb25nICBvcmlnX2N2dCA9IGZhY2UtPmN2dFtqXTsKKyAgICAgICAgICBGVF9GaXhlZCAgb2xkX2N2dF9kZWx0YTsKIAogCi0gICAgICAgICAgZmFjZS0+Y3Z0W2pdID0gKEZUX1Nob3J0KSggb3JpZ19jdnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZGVsdGFzW2pdLCBhcHBseSApICk7CisgICAgICAgICAgb2xkX2N2dF9kZWx0YSA9IGN2dF9kZWx0YXNbal07CisgICAgICAgICAgY3Z0X2RlbHRhc1tqXSA9IG9sZF9jdnRfZGVsdGEgKyBGVF9NdWxGaXgoIGRlbHRhc1tqXSwgYXBwbHkgKTsKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgaWYgKCBvcmlnX2N2dCAhPSBmYWNlLT5jdnRbal0gKQorICAgICAgICAgIGlmICggb2xkX2N2dF9kZWx0YSAhPSBjdnRfZGVsdGFzW2pdICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICVkIC0+ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaiwgb3JpZ19jdnQsIGZhY2UtPmN2dFtqXSApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogJWYgLT4gJWZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICAgICAgICAgKCBGVF9pbnRUb0ZpeGVkKCBmYWNlLT5jdnRbal0gKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9jdnRfZGVsdGEgKSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX2ludFRvRml4ZWQoIGZhY2UtPmN2dFtqXSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3Z0X2RlbHRhc1tqXSApIC8gNjU1MzYuMCApKTsKICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgfQogI2VuZGlmCkBAIC0zMjcxLDIzICszMzQwLDI2IEBACiAKICAgICAgICAgZm9yICggaiA9IDA7IGogPCBwb2ludF9jb3VudDsgaisrICkKICAgICAgICAgewotICAgICAgICAgIGludCAgICAgIHBpbmRleDsKLSAgICAgICAgICBGVF9Mb25nICBvcmlnX2N2dDsKKyAgICAgICAgICBpbnQgICAgICAgcGluZGV4OworICAgICAgICAgIEZUX0ZpeGVkICBvbGRfY3Z0X2RlbHRhOwogCiAKICAgICAgICAgICBwaW5kZXggPSBwb2ludHNbal07CiAgICAgICAgICAgaWYgKCAoRlRfVUxvbmcpcGluZGV4ID49IGZhY2UtPmN2dF9zaXplICkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgb3JpZ19jdnQgICAgICAgICAgPSBmYWNlLT5jdnRbcGluZGV4XTsKLSAgICAgICAgICBmYWNlLT5jdnRbcGluZGV4XSA9IChGVF9TaG9ydCkoIG9yaWdfY3Z0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZGVsdGFzW2pdLCBhcHBseSApICk7CisgICAgICAgICAgb2xkX2N2dF9kZWx0YSAgICAgID0gY3Z0X2RlbHRhc1twaW5kZXhdOworICAgICAgICAgIGN2dF9kZWx0YXNbcGluZGV4XSA9IG9sZF9jdnRfZGVsdGEgKyBGVF9NdWxGaXgoIGRlbHRhc1tqXSwgYXBwbHkgKTsKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgaWYgKCBvcmlnX2N2dCAhPSBmYWNlLT5jdnRbcGluZGV4XSApCisgICAgICAgICAgaWYgKCBvbGRfY3Z0X2RlbHRhICE9IGN2dF9kZWx0YXNbcGluZGV4XSApCiAgICAgICAgICAgewotICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAlZCAtPiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpbmRleCwgb3JpZ19jdnQsIGZhY2UtPmN2dFtwaW5kZXhdICkpOworICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAlZiAtPiAlZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICggRlRfaW50VG9GaXhlZCggZmFjZS0+Y3Z0W3BpbmRleF0gKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9jdnRfZGVsdGEgKSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX2ludFRvRml4ZWQoIGZhY2UtPmN2dFtwaW5kZXhdICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBjdnRfZGVsdGFzW3BpbmRleF0gKSAvIDY1NTM2LjAgKSk7CiAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgIH0KICNlbmRpZgpAQCAtMzMxMCw2ICszMzgyLDkgQEAKIAogICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CiAKKyAgICBmb3IgKCBpID0gMDsgaSA8IGZhY2UtPmN2dF9zaXplOyBpKysgKQorICAgICAgZmFjZS0+Y3Z0W2ldICs9IEZUX2ZpeGVkVG9JbnQoIGN2dF9kZWx0YXNbaV0gKTsKKwogICBGRXhpdDoKICAgICBGVF9GUkFNRV9FWElUKCk7CiAKQEAgLTMzMTksNiArMzM5NCw3IEBACiAgICAgRlRfRlJFRSggdHVwbGVfY29vcmRzICk7CiAgICAgRlRfRlJFRSggaW1fc3RhcnRfY29vcmRzICk7CiAgICAgRlRfRlJFRSggaW1fZW5kX2Nvb3JkcyApOworICAgIEZUX0ZSRUUoIGN2dF9kZWx0YXMgKTsKIAogICAgIHJldHVybiBlcnJvcjsKICAgfQpAQCAtMzUyNSw1NiArMzYwMSw3MSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBcHBseSB0aGUgYXBwcm9wcmlhdGUgZGVsdGFzIHRvIHRoZSBjdXJyZW50IGdseXBoLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggYmVpbmcgbW9kaWZpZWQuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbl9wb2ludHMgICAgOjogVGhlIG51bWJlciBvZiB0aGUgcG9pbnRzIGluIHRoZSBnbHlwaCwgaW5jbHVkaW5nICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHBoYW50b20gcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG91dGxpbmUgICAgIDo6IFRoZSBvdXRsaW5lIHRvIGNoYW5nZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQXBwbHkgdGhlIGFwcHJvcHJpYXRlIGRlbHRhcyB0byB0aGUgY3VycmVudCBnbHlwaC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgZ2x5cGhfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggYmVpbmcgbW9kaWZpZWQuCisgICAqCisgICAqICAgbl9wb2ludHMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgdGhlIHBvaW50cyBpbiB0aGUgZ2x5cGgsIGluY2x1ZGluZworICAgKiAgICAgcGhhbnRvbSBwb2ludHMuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBvdXRsaW5lIDo6CisgICAqICAgICBUaGUgb3V0bGluZSB0byBjaGFuZ2UuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBuX3BvaW50cyApCiAgIHsKLSAgICBGVF9TdHJlYW0gICBzdHJlYW0gPSBmYWNlLT5yb290LnN0cmVhbTsKLSAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKLSAgICBHWF9CbGVuZCAgICBibGVuZCAgPSBmYWNlLT5ibGVuZDsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX1N0cmVhbSAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07CisgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKIAotICAgIEZUX1ZlY3RvciogIHBvaW50c19vcmcgPSBOVUxMOwotICAgIEZUX1ZlY3RvciogIHBvaW50c19vdXQgPSBOVUxMOworICAgIEZUX1ZlY3RvciogIHBvaW50c19vcmcgPSBOVUxMOyAgLyogY29vcmRpbmF0ZXMgaW4gMTYuMTYgZm9ybWF0ICovCisgICAgRlRfVmVjdG9yKiAgcG9pbnRzX291dCA9IE5VTEw7ICAvKiBjb29yZGluYXRlcyBpbiAxNi4xNiBmb3JtYXQgKi8KICAgICBGVF9Cb29sKiAgICBoYXNfZGVsdGEgID0gTlVMTDsKIAotICAgIEZUX0Vycm9yICAgIGVycm9yOwotICAgIEZUX1VMb25nICAgIGdseXBoX3N0YXJ0OwotICAgIEZUX1VJbnQgICAgIHR1cGxlQ291bnQ7Ci0gICAgRlRfVUxvbmcgICAgb2Zmc2V0VG9EYXRhOwotICAgIEZUX1VMb25nICAgIGhlcmU7Ci0gICAgRlRfVUludCAgICAgaSwgajsKLSAgICBGVF9GaXhlZCogICB0dXBsZV9jb29yZHMgICAgPSBOVUxMOwotICAgIEZUX0ZpeGVkKiAgIGltX3N0YXJ0X2Nvb3JkcyA9IE5VTEw7Ci0gICAgRlRfRml4ZWQqICAgaW1fZW5kX2Nvb3JkcyAgID0gTlVMTDsKLSAgICBGVF9VSW50ICAgICBwb2ludF9jb3VudCwgc3BvaW50X2NvdW50ID0gMDsKKyAgICBGVF9VTG9uZyAgZ2x5cGhfc3RhcnQ7CisKKyAgICBGVF9VSW50ICAgdHVwbGVDb3VudDsKKyAgICBGVF9VTG9uZyAgb2Zmc2V0VG9EYXRhOworCisgICAgRlRfVUxvbmcgIGhlcmU7CisgICAgRlRfVUludCAgIGksIGo7CisKKyAgICBGVF9GaXhlZCogIHR1cGxlX2Nvb3JkcyAgICA9IE5VTEw7CisgICAgRlRfRml4ZWQqICBpbV9zdGFydF9jb29yZHMgPSBOVUxMOworICAgIEZUX0ZpeGVkKiAgaW1fZW5kX2Nvb3JkcyAgID0gTlVMTDsKKworICAgIEdYX0JsZW5kICBibGVuZCA9IGZhY2UtPmJsZW5kOworCisgICAgRlRfVUludCAgcG9pbnRfY291bnQ7CisgICAgRlRfVUludCAgc3BvaW50X2NvdW50ID0gMDsKKwogICAgIEZUX1VTaG9ydCogIHNoYXJlZHBvaW50cyA9IE5VTEw7CiAgICAgRlRfVVNob3J0KiAgbG9jYWxwb2ludHMgID0gTlVMTDsKICAgICBGVF9VU2hvcnQqICBwb2ludHM7Ci0gICAgRlRfU2hvcnQgICAgKmRlbHRhc194LCAqZGVsdGFzX3k7CisKKyAgICBGVF9GaXhlZCogIGRlbHRhc194ICAgICAgID0gTlVMTDsKKyAgICBGVF9GaXhlZCogIGRlbHRhc195ICAgICAgID0gTlVMTDsKKyAgICBGVF9GaXhlZCogIHBvaW50X2RlbHRhc194ID0gTlVMTDsKKyAgICBGVF9GaXhlZCogIHBvaW50X2RlbHRhc195ID0gTlVMTDsKIAogCiAgICAgaWYgKCAhZmFjZS0+ZG9ibGVuZCB8fCAhYmxlbmQgKQpAQCAtMzY0Myw4ICszNzM0LDE1IEBACiAgICAgICAgICAgICAgICAgdHVwbGVDb3VudCAmIEdYX1RDX1RVUExFX0NPVU5UX01BU0ssCiAgICAgICAgICAgICAgICAgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApID09IDEgPyAiIiA6ICJzIiApKTsKIAorICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludF9kZWx0YXNfeCwgbl9wb2ludHMgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCBwb2ludF9kZWx0YXNfeSwgbl9wb2ludHMgKSApCisgICAgICBnb3RvIEZhaWwzOworCiAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKLSAgICAgIHBvaW50c19vcmdbal0gPSBvdXRsaW5lLT5wb2ludHNbal07CisgICAgeworICAgICAgcG9pbnRzX29yZ1tqXS54ID0gRlRfaW50VG9GaXhlZCggb3V0bGluZS0+cG9pbnRzW2pdLnggKTsKKyAgICAgIHBvaW50c19vcmdbal0ueSA9IEZUX2ludFRvRml4ZWQoIG91dGxpbmUtPnBvaW50c1tqXS55ICk7CisgICAgfQogCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiBHWF9UQ19UVVBMRV9DT1VOVF9NQVNLICk7IGkrKyApCiAgICAgewpAQCAtMzY3MCw3ICszNzY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHR1cGxlIGluZGV4XG4iICkpOwogCiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKLSAgICAgICAgZ290byBGYWlsMjsKKyAgICAgICAgZ290byBGYWlsMzsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgRlRfTUVNX0NPUFkoCkBAIC0zNzM5LDE0ICszODM3LDE3IEBACiAgICAgICAgIC8qIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgZGVsdGFzIGZvciBldmVyeSBwb2ludCBpbiB0aGUgZ2x5cGggKi8KICAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrICkKICAgICAgICAgewotICAgICAgICAgIEZUX1BvcyAgZGVsdGFfeCA9IEZUX011bEZpeCggZGVsdGFzX3hbal0sIGFwcGx5ICk7Ci0gICAgICAgICAgRlRfUG9zICBkZWx0YV95ID0gRlRfTXVsRml4KCBkZWx0YXNfeVtqXSwgYXBwbHkgKTsKKyAgICAgICAgICBGVF9GaXhlZCAgb2xkX3BvaW50X2RlbHRhX3ggPSBwb2ludF9kZWx0YXNfeFtqXTsKKyAgICAgICAgICBGVF9GaXhlZCAgb2xkX3BvaW50X2RlbHRhX3kgPSBwb2ludF9kZWx0YXNfeVtqXTsKKworICAgICAgICAgIEZUX0ZpeGVkICBwb2ludF9kZWx0YV94ID0gRlRfTXVsRml4KCBkZWx0YXNfeFtqXSwgYXBwbHkgKTsKKyAgICAgICAgICBGVF9GaXhlZCAgcG9pbnRfZGVsdGFfeSA9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CiAKIAogICAgICAgICAgIGlmICggaiA8IG5fcG9pbnRzIC0gNCApCiAgICAgICAgICAgewotICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKLSAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisgICAgICAgICAgICBwb2ludF9kZWx0YXNfeFtqXSA9IG9sZF9wb2ludF9kZWx0YV94ICsgcG9pbnRfZGVsdGFfeDsKKyAgICAgICAgICAgIHBvaW50X2RlbHRhc195W2pdID0gb2xkX3BvaW50X2RlbHRhX3kgKyBwb2ludF9kZWx0YV95OwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewpAQCAtMzc1NiwzMyArMzg1NywzNyBAQAogICAgICAgICAgICAgaWYgKCBqID09ICggbl9wb2ludHMgLSA0ICkgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICEoIGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYKICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9MU0IgICAgKSApCi0gICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54ICs9IGRlbHRhX3g7CisgICAgICAgICAgICAgIHBvaW50X2RlbHRhc194W2pdID0gb2xkX3BvaW50X2RlbHRhX3ggKyBwb2ludF9kZWx0YV94OwogCiAgICAgICAgICAgICBlbHNlIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gMyApICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICkKLSAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKKyAgICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3hbal0gPSBvbGRfcG9pbnRfZGVsdGFfeCArIHBvaW50X2RlbHRhX3g7CiAKICAgICAgICAgICAgIGVsc2UgaWYgKCBqID09ICggbl9wb2ludHMgLSAyICkgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJgogICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0ZBQ0VfRkxBR19WQVJfVFNCICAgICkgKQotICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSArPSBkZWx0YV95OworICAgICAgICAgICAgICBwb2ludF9kZWx0YXNfeVtqXSA9IG9sZF9wb2ludF9kZWx0YV95ICsgcG9pbnRfZGVsdGFfeTsKIAogICAgICAgICAgICAgZWxzZSBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDEgKSAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICAgICEoIGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICAgJgogICAgICAgICAgICAgICAgICAgICAgICAgIFRUX0ZBQ0VfRkxBR19WQVJfVkFEVkFOQ0UgKSApCi0gICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisgICAgICAgICAgICAgIHBvaW50X2RlbHRhc195W2pdID0gb2xkX3BvaW50X2RlbHRhX3kgKyBwb2ludF9kZWx0YV95OwogICAgICAgICAgIH0KIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgaWYgKCBkZWx0YV94IHx8IGRlbHRhX3kgKQorICAgICAgICAgIGlmICggcG9pbnRfZGVsdGFfeCB8fCBwb2ludF9kZWx0YV95ICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICglZCwgJWQpIC0+ICglZCwgJWQpXG4iLAorICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgICVkOiAoJWYsICVmKSAtPiAoJWYsICVmKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGosCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCAtIGRlbHRhX3gsCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSAtIGRlbHRhX3ksCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICkpOworICAgICAgICAgICAgICAgICAgICAgICAgKCBGVF9pbnRUb0ZpeGVkKCBvdXRsaW5lLT5wb2ludHNbal0ueCApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3BvaW50X2RlbHRhX3ggKSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX2ludFRvRml4ZWQoIG91dGxpbmUtPnBvaW50c1tqXS55ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfcG9pbnRfZGVsdGFfeSApIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICggRlRfaW50VG9GaXhlZCggb3V0bGluZS0+cG9pbnRzW2pdLnggKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50X2RlbHRhc194W2pdICkgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgICAgKCBGVF9pbnRUb0ZpeGVkKCBvdXRsaW5lLT5wb2ludHNbal0ueSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3lbal0gKSAvIDY1NTM2LjAgKSk7CiAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgIH0KICNlbmRpZgpAQCAtMzgzNCwxNCArMzkzOSwxNyBAQAogCiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKyApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9Qb3MgIGRlbHRhX3ggPSBwb2ludHNfb3V0W2pdLnggLSBwb2ludHNfb3JnW2pdLng7Ci0gICAgICAgICAgRlRfUG9zICBkZWx0YV95ID0gcG9pbnRzX291dFtqXS55IC0gcG9pbnRzX29yZ1tqXS55OworICAgICAgICAgIEZUX0ZpeGVkICBvbGRfcG9pbnRfZGVsdGFfeCA9IHBvaW50X2RlbHRhc194W2pdOworICAgICAgICAgIEZUX0ZpeGVkICBvbGRfcG9pbnRfZGVsdGFfeSA9IHBvaW50X2RlbHRhc195W2pdOworCisgICAgICAgICAgRlRfUG9zICBwb2ludF9kZWx0YV94ID0gcG9pbnRzX291dFtqXS54IC0gcG9pbnRzX29yZ1tqXS54OworICAgICAgICAgIEZUX1BvcyAgcG9pbnRfZGVsdGFfeSA9IHBvaW50c19vdXRbal0ueSAtIHBvaW50c19vcmdbal0ueTsKIAogCiAgICAgICAgICAgaWYgKCBqIDwgbl9wb2ludHMgLSA0ICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OwotICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gZGVsdGFfeTsKKyAgICAgICAgICAgIHBvaW50X2RlbHRhc194W2pdID0gb2xkX3BvaW50X2RlbHRhX3ggKyBwb2ludF9kZWx0YV94OworICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3lbal0gPSBvbGRfcG9pbnRfZGVsdGFfeSArIHBvaW50X2RlbHRhX3k7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICB7CkBAIC0zODUxLDMzICszOTU5LDM3IEBACiAgICAgICAgICAgICBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDQgKSAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJgogICAgICAgICAgICAgICAgICAgICBUVF9GQUNFX0ZMQUdfVkFSX0xTQiAgICApICkKLSAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKKyAgICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3hbal0gPSBvbGRfcG9pbnRfZGVsdGFfeCArIHBvaW50X2RlbHRhX3g7CiAKICAgICAgICAgICAgIGVsc2UgaWYgKCBqID09ICggbl9wb2ludHMgLSAzICkgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9GQUNFX0ZMQUdfVkFSX0hBRFZBTkNFICkgKQotICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworICAgICAgICAgICAgICBwb2ludF9kZWx0YXNfeFtqXSA9IG9sZF9wb2ludF9kZWx0YV94ICsgcG9pbnRfZGVsdGFfeDsKIAogICAgICAgICAgICAgZWxzZSBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDIgKSAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9UU0IgICAgKSApCi0gICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisgICAgICAgICAgICAgIHBvaW50X2RlbHRhc195W2pdID0gb2xkX3BvaW50X2RlbHRhX3kgKyBwb2ludF9kZWx0YV95OwogCiAgICAgICAgICAgICBlbHNlIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gMSApICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgICAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9WQURWQU5DRSApICkKLSAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gZGVsdGFfeTsKKyAgICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3lbal0gPSBvbGRfcG9pbnRfZGVsdGFfeSArIHBvaW50X2RlbHRhX3k7CiAgICAgICAgICAgfQogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgICBpZiAoIGRlbHRhX3ggfHwgZGVsdGFfeSApCisgICAgICAgICAgaWYgKCBwb2ludF9kZWx0YV94IHx8IHBvaW50X2RlbHRhX3kgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogKCVkLCAlZCkgLT4gKCVkLCAlZClcbiIsCisgICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICglZiwgJWYpIC0+ICglZiwgJWYpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54IC0gZGVsdGFfeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55IC0gZGVsdGFfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54LAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX2ludFRvRml4ZWQoIG91dGxpbmUtPnBvaW50c1tqXS54ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfcG9pbnRfZGVsdGFfeCApIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICggRlRfaW50VG9GaXhlZCggb3V0bGluZS0+cG9pbnRzW2pdLnkgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9wb2ludF9kZWx0YV95ICkgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgICAgKCBGVF9pbnRUb0ZpeGVkKCBvdXRsaW5lLT5wb2ludHNbal0ueCApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfZGVsdGFzX3hbal0gKSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAoIEZUX2ludFRvRml4ZWQoIG91dGxpbmUtPnBvaW50c1tqXS55ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9kZWx0YXNfeVtqXSApIC8gNjU1MzYuMCApKTsKICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgfQogI2VuZGlmCkBAIC0zOTAxLDYgKzQwMTMsMTYgQEAKIAogICAgIEZUX1RSQUNFNSgoICJcbiIgKSk7CiAKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5fcG9pbnRzOyBpKysgKQorICAgIHsKKyAgICAgIG91dGxpbmUtPnBvaW50c1tpXS54ICs9IEZUX2ZpeGVkVG9JbnQoIHBvaW50X2RlbHRhc194W2ldICk7CisgICAgICBvdXRsaW5lLT5wb2ludHNbaV0ueSArPSBGVF9maXhlZFRvSW50KCBwb2ludF9kZWx0YXNfeVtpXSApOworICAgIH0KKworICBGYWlsMzoKKyAgICBGVF9GUkVFKCBwb2ludF9kZWx0YXNfeCApOworICAgIEZUX0ZSRUUoIHBvaW50X2RlbHRhc195ICk7CisKICAgRmFpbDI6CiAgICAgaWYgKCBzaGFyZWRwb2ludHMgIT0gQUxMX1BPSU5UUyApCiAgICAgICBGVF9GUkVFKCBzaGFyZWRwb2ludHMgKTsKQEAgLTM5MTksMTYgKzQwNDEsMTYgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZ2V0X3Zhcl9ibGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZXh0ZW5kZWQgaW50ZXJuYWwgdmVyc2lvbiBvZiBgVFRfR2V0X01NX0JsZW5kJyB0aGF0IHJldHVybnMgICAgICovCi0gIC8qICAgIHBvaW50ZXJzIGluc3RlYWQgb2YgY29weWluZyBkYXRhLCB3aXRob3V0IGFueSBpbml0aWFsaXphdGlvbiBvZiAgICAqLwotICAvKiAgICB0aGUgTU0gbWFjaGluZXJ5IGluIGNhc2UgaXQgaXNuJ3QgbG9hZGVkIHlldC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZ2V0X3Zhcl9ibGVuZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQW4gZXh0ZW5kZWQgaW50ZXJuYWwgdmVyc2lvbiBvZiBgVFRfR2V0X01NX0JsZW5kJyB0aGF0IHJldHVybnMKKyAgICogICBwb2ludGVycyBpbnN0ZWFkIG9mIGNvcHlpbmcgZGF0YSwgd2l0aG91dCBhbnkgaW5pdGlhbGl6YXRpb24gb2YKKyAgICogICB0aGUgTU0gbWFjaGluZXJ5IGluIGNhc2UgaXQgaXNuJ3QgbG9hZGVkIHlldC4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9nZXRfdmFyX2JsZW5kKCBUVF9GYWNlICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgKm51bV9jb29yZHMsCkBAIC0zOTkwLDE0ICs0MTEyLDE0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2RvbmVfYmxlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWUgdGhlIGJsZW5kIGludGVybmFsIGRhdGEgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9kb25lX2JsZW5kCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGcmVlIHRoZSBibGVuZCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZS4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2RvbmVfYmxlbmQoIFRUX0ZhY2UgIGZhY2UgKQogICB7CmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oIGIvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaAppbmRleCBhMzdiYjkwLi5iZGMwOWQxIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCisrKyBiL3NyYy90cnVldHlwZS90dGd4dmFyLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0Z3h2YXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBHWCBGb250IFZhcmlhdGlvbiBsb2FkZXIgKHNwZWNpZmljYXRpb24pICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIEdlb3JnZSBXaWxsaWFtcy4gICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0Z3h2YXIuaAorICoKKyAqICAgVHJ1ZVR5cGUgR1ggRm9udCBWYXJpYXRpb24gbG9hZGVyIChzcGVjaWZpY2F0aW9uKQorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnIGFuZCBHZW9yZ2UgV2lsbGlhbXMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUVEdYVkFSX0hfCkBAIC0yOSwxNSArMjksMTUgQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHWF9BVmFyQ29ycmVzcG9uZGVuY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBgc2hvcnRGcmFjQ29ycmVzcG9uZGVuY2UnIGluIGBhdmFyJyAgKi8KLSAgLyogICAgdGFibGUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9ucyBmcm9tIEFwcGxlLiAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFN0cnVjdDoKKyAgICogICBHWF9BVmFyQ29ycmVzcG9uZGVuY2VSZWMKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGBzaG9ydEZyYWNDb3JyZXNwb25kZW5jZScgaW4gYGF2YXInCisgICAqICAgdGFibGUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9ucyBmcm9tIEFwcGxlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0FWYXJDb3JyZXNwb25kZW5jZVJlY18KICAgewogICAgIEZUX0ZpeGVkICBmcm9tQ29vcmQ7CkBAIC00NiwxNSArNDYsMTUgQEAKICAgfSBHWF9BVmFyQ29ycmVzcG9uZGVuY2VSZWNfLCAqR1hfQVZhckNvcnJlc3BvbmRlbmNlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR1hfQVZhclJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGF0YSBmcm9tIHRoZSBzZWdtZW50IGZpZWxkIG9mIGBhdmFyJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZXJlIGlzIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBheGlzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBTdHJ1Y3Q6CisgICAqICAgR1hfQVZhclJlYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRGF0YSBmcm9tIHRoZSBzZWdtZW50IGZpZWxkIG9mIGBhdmFyJyB0YWJsZS4KKyAgICogICBUaGVyZSBpcyBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggYXhpcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBHWF9BVmFyU2VnbWVudFJlY18KICAgewogICAgIEZUX1VTaG9ydCAgICAgICAgICAgICAgcGFpckNvdW50OwpAQCAtMTE0LDE0ICsxMTQsMTQgQEAKICAgfSBHWF9EZWx0YVNldElkeE1hcFJlYywgKkdYX0RlbHRhU2V0SWR4TWFwOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR1hfSFZWYXJUYWJsZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRGF0YSBmcm9tIGVpdGhlciB0aGUgYEhWQVInIG9yIGBWVkFSJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFN0cnVjdDoKKyAgICogICBHWF9IVlZhclRhYmxlUmVjCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBEYXRhIGZyb20gZWl0aGVyIHRoZSBgSFZBUicgb3IgYFZWQVInIHRhYmxlLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEdYX0hWVmFyVGFibGVSZWNfCiAgIHsKICAgICBHWF9JdGVtVmFyU3RvcmVSZWMgICAgaXRlbVN0b3JlOyAgICAgICAgLyogSXRlbSBWYXJpYXRpb24gU3RvcmUgICovCkBAIC0xOTEsMTQgKzE5MSwxNCBAQAogICB9IEdYX1ZhbHVlUmVjLCAqR1hfVmFsdWU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHWF9NVmFyVGFibGVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEYXRhIGZyb20gdGhlIGBNVkFSJyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAU3RydWN0OgorICAgKiAgIEdYX01WYXJUYWJsZVJlYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRGF0YSBmcm9tIHRoZSBgTVZBUicgdGFibGUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgR1hfTVZhclRhYmxlUmVjXwogICB7CiAgICAgRlRfVVNob3J0ICB2YWx1ZUNvdW50OwpAQCAtMjA5LDk1ICsyMDksOTUgQEAKICAgfSBHWF9NVmFyVGFibGVSZWMsICpHWF9NVmFyVGFibGU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHWF9CbGVuZFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEYXRhIGZvciBpbnRlcnBvbGF0aW5nIGEgZm9udCBmcm9tIGEgZGlzdG9ydGFibGUgZm9udCBzcGVjaWZpZWQgICAgKi8KLSAgLyogICAgYnkgdGhlIEdYICp2YXIgdGFibGVzIChbZmdjYWh2bV12YXIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbnVtX2F4aXMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIG51bWJlciBvZiBheGVzIGFsb25nIHdoaWNoIGludGVycG9sYXRpb24gbWF5IGhhcHBlbi4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29vcmRzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQW4gYXJyYXkgb2YgZGVzaWduIGNvb3JkaW5hdGVzIChpbiB1c2VyIHNwYWNlKSBpbmRpY2F0aW5nIHRoZSAgICAqLwotICAvKiAgICAgIGNvbnRyaWJ1dGlvbiBhbG9uZyBlYWNoIGF4aXMgdG8gdGhlIGZpbmFsIGludGVycG9sYXRlZCBmb250LiAgICAgKi8KLSAgLyogICAgICBgbm9ybWFsaXplZGNvb3JkcycgaG9sZHMgdGhlIHNhbWUgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBub3JtYWxpemVkY29vcmRzIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBbiBhcnJheSBvZiBub3JtYWxpemVkIHZhbHVlcyAoYmV0d2VlbiBbLTEsMV0pIGluZGljYXRpbmcgdGhlICAgICovCi0gIC8qICAgICAgY29udHJpYnV0aW9uIGFsb25nIGVhY2ggYXhpcyB0byB0aGUgZmluYWwgaW50ZXJwb2xhdGVkIGZvbnQuICAgICAqLwotICAvKiAgICAgIGBjb29yZHMnIGhvbGRzIHRoZSBzYW1lIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1tdmFyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIERhdGEgZnJvbSB0aGUgYGZ2YXInIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1tdmFyX2xlbiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGBtbXZhcicgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5vcm1hbGl6ZWRfc3R5bGVjb29yZHMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgdHdvLWRpbWVuc2lvbmFsIGFycmF5IHRoYXQgaG9sZHMgdGhlIG5hbWVkIGluc3RhbmNlIGRhdGEgZnJvbSAgKi8KLSAgLyogICAgICBgbW12YXInIGFzIG5vcm1hbGl6ZWQgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhdmFyX2xvYWRlZCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBIEJvb2xlYW47IGlmIHNldCwgRnJlZVR5cGUgdHJpZWQgdG8gbG9hZCAoYW5kIHBhcnNlKSB0aGUgYGF2YXInICovCi0gIC8qICAgICAgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXZhcl9zZWdtZW50IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRGF0YSBmcm9tIHRoZSBgYXZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaHZhcl9sb2FkZWQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBCb29sZWFuOyBpZiBzZXQsIEZyZWVUeXBlIHRyaWVkIHRvIGxvYWQgKGFuZCBwYXJzZSkgdGhlIGBodmFyJyAqLwotICAvKiAgICAgIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGh2YXJfY2hlY2tlZCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgQm9vbGVhbjsgaWYgc2V0LCBGcmVlVHlwZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWQgdGhlICAgKi8KLSAgLyogICAgICBgaHZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBodmFyX2Vycm9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBJZiBsb2FkaW5nIGFuZCBwYXJzaW5nIG9mIHRoZSBgaHZhcicgdGFibGUgZmFpbGVkLCB0aGlzIGZpZWxkICAgICovCi0gIC8qICAgICAgaG9sZHMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaHZhcl90YWJsZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRGF0YSBmcm9tIHRoZSBgaHZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdnZhcl9sb2FkZWQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSBCb29sZWFuOyBpZiBzZXQsIEZyZWVUeXBlIHRyaWVkIHRvIGxvYWQgKGFuZCBwYXJzZSkgdGhlIGB2dmFyJyAqLwotICAvKiAgICAgIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHZ2YXJfY2hlY2tlZCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIEEgQm9vbGVhbjsgaWYgc2V0LCBGcmVlVHlwZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWQgdGhlICAgKi8KLSAgLyogICAgICBgdnZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2dmFyX2Vycm9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBJZiBsb2FkaW5nIGFuZCBwYXJzaW5nIG9mIHRoZSBgdnZhcicgdGFibGUgZmFpbGVkLCB0aGlzIGZpZWxkICAgICovCi0gIC8qICAgICAgaG9sZHMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdnZhcl90YWJsZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRGF0YSBmcm9tIHRoZSBgdnZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbXZhcl90YWJsZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRGF0YSBmcm9tIHRoZSBgbXZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHVwbGVjb3VudCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhlIG51bWJlciBvZiBzaGFyZWQgdHVwbGVzIGluIHRoZSBgZ3ZhcicgdGFibGUuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHVwbGVjb29yZHMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgQSB0d28tZGltZW5zaW9uYWwgYXJyYXkgdGhhdCBob2xkcyB0aGUgc2hhcmVkIHR1cGxlIGNvb3JkaW5hdGVzICAqLwotICAvKiAgICAgIGluIHRoZSBgZ3ZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGd2X2dseXBoY250IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBudW1iZXIgb2YgZ2x5cGhzIGhhbmRsZWQgaW4gdGhlIGBndmFyJyB0YWJsZS4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGdseXBob2Zmc2V0cyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIE9mZnNldHMgaW50byB0aGUgZ2x5cGggdmFyaWF0aW9uIGRhdGEgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGd2YXJfc2l6ZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBzaXplIG9mIHRoZSBgZ3ZhcicgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAU3RydWN0OgorICAgKiAgIEdYX0JsZW5kUmVjCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBEYXRhIGZvciBpbnRlcnBvbGF0aW5nIGEgZm9udCBmcm9tIGEgZGlzdG9ydGFibGUgZm9udCBzcGVjaWZpZWQKKyAgICogICBieSB0aGUgR1ggKnZhciB0YWJsZXMgKFtmZ2NhaHZtXXZhcikuCisgICAqCisgICAqIEBGaWVsZHM6CisgICAqICAgbnVtX2F4aXMgOjoKKyAgICogICAgIFRoZSBudW1iZXIgb2YgYXhlcyBhbG9uZyB3aGljaCBpbnRlcnBvbGF0aW9uIG1heSBoYXBwZW4uCisgICAqCisgICAqICAgY29vcmRzIDo6CisgICAqICAgICBBbiBhcnJheSBvZiBkZXNpZ24gY29vcmRpbmF0ZXMgKGluIHVzZXIgc3BhY2UpIGluZGljYXRpbmcgdGhlCisgICAqICAgICBjb250cmlidXRpb24gYWxvbmcgZWFjaCBheGlzIHRvIHRoZSBmaW5hbCBpbnRlcnBvbGF0ZWQgZm9udC4KKyAgICogICAgIGBub3JtYWxpemVkY29vcmRzJyBob2xkcyB0aGUgc2FtZSB2YWx1ZXMuCisgICAqCisgICAqICAgbm9ybWFsaXplZGNvb3JkcyA6OgorICAgKiAgICAgQW4gYXJyYXkgb2Ygbm9ybWFsaXplZCB2YWx1ZXMgKGJldHdlZW4gWy0xLDFdKSBpbmRpY2F0aW5nIHRoZQorICAgKiAgICAgY29udHJpYnV0aW9uIGFsb25nIGVhY2ggYXhpcyB0byB0aGUgZmluYWwgaW50ZXJwb2xhdGVkIGZvbnQuCisgICAqICAgICBgY29vcmRzJyBob2xkcyB0aGUgc2FtZSB2YWx1ZXMuCisgICAqCisgICAqICAgbW12YXIgOjoKKyAgICogICAgIERhdGEgZnJvbSB0aGUgYGZ2YXInIHRhYmxlLgorICAgKgorICAgKiAgIG1tdmFyX2xlbiA6OgorICAgKiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgYG1tdmFyJyBzdHJ1Y3R1cmUuCisgICAqCisgICAqICAgbm9ybWFsaXplZF9zdHlsZWNvb3JkcyA6OgorICAgKiAgICAgQSB0d28tZGltZW5zaW9uYWwgYXJyYXkgdGhhdCBob2xkcyB0aGUgbmFtZWQgaW5zdGFuY2UgZGF0YSBmcm9tCisgICAqICAgICBgbW12YXInIGFzIG5vcm1hbGl6ZWQgdmFsdWVzLgorICAgKgorICAgKiAgIGF2YXJfbG9hZGVkIDo6CisgICAqICAgICBBIEJvb2xlYW47IGlmIHNldCwgRnJlZVR5cGUgdHJpZWQgdG8gbG9hZCAoYW5kIHBhcnNlKSB0aGUgYGF2YXInCisgICAqICAgICB0YWJsZS4KKyAgICoKKyAgICogICBhdmFyX3NlZ21lbnQgOjoKKyAgICogICAgIERhdGEgZnJvbSB0aGUgYGF2YXInIHRhYmxlLgorICAgKgorICAgKiAgIGh2YXJfbG9hZGVkIDo6CisgICAqICAgICBBIEJvb2xlYW47IGlmIHNldCwgRnJlZVR5cGUgdHJpZWQgdG8gbG9hZCAoYW5kIHBhcnNlKSB0aGUgYGh2YXInCisgICAqICAgICB0YWJsZS4KKyAgICoKKyAgICogICBodmFyX2NoZWNrZWQgOjoKKyAgICogICAgIEEgQm9vbGVhbjsgaWYgc2V0LCBGcmVlVHlwZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWQgdGhlCisgICAqICAgICBgaHZhcicgdGFibGUuCisgICAqCisgICAqICAgaHZhcl9lcnJvciA6OgorICAgKiAgICAgSWYgbG9hZGluZyBhbmQgcGFyc2luZyBvZiB0aGUgYGh2YXInIHRhYmxlIGZhaWxlZCwgdGhpcyBmaWVsZAorICAgKiAgICAgaG9sZHMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgY29kZS4KKyAgICoKKyAgICogICBodmFyX3RhYmxlIDo6CisgICAqICAgICBEYXRhIGZyb20gdGhlIGBodmFyJyB0YWJsZS4KKyAgICoKKyAgICogICB2dmFyX2xvYWRlZCA6OgorICAgKiAgICAgQSBCb29sZWFuOyBpZiBzZXQsIEZyZWVUeXBlIHRyaWVkIHRvIGxvYWQgKGFuZCBwYXJzZSkgdGhlIGB2dmFyJworICAgKiAgICAgdGFibGUuCisgICAqCisgICAqICAgdnZhcl9jaGVja2VkIDo6CisgICAqICAgICBBIEJvb2xlYW47IGlmIHNldCwgRnJlZVR5cGUgc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhbmQgcGFyc2VkIHRoZQorICAgKiAgICAgYHZ2YXInIHRhYmxlLgorICAgKgorICAgKiAgIHZ2YXJfZXJyb3IgOjoKKyAgICogICAgIElmIGxvYWRpbmcgYW5kIHBhcnNpbmcgb2YgdGhlIGB2dmFyJyB0YWJsZSBmYWlsZWQsIHRoaXMgZmllbGQKKyAgICogICAgIGhvbGRzIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIGNvZGUuCisgICAqCisgICAqICAgdnZhcl90YWJsZSA6OgorICAgKiAgICAgRGF0YSBmcm9tIHRoZSBgdnZhcicgdGFibGUuCisgICAqCisgICAqICAgbXZhcl90YWJsZSA6OgorICAgKiAgICAgRGF0YSBmcm9tIHRoZSBgbXZhcicgdGFibGUuCisgICAqCisgICAqICAgdHVwbGVjb3VudCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBzaGFyZWQgdHVwbGVzIGluIHRoZSBgZ3ZhcicgdGFibGUuCisgICAqCisgICAqICAgdHVwbGVjb29yZHMgOjoKKyAgICogICAgIEEgdHdvLWRpbWVuc2lvbmFsIGFycmF5IHRoYXQgaG9sZHMgdGhlIHNoYXJlZCB0dXBsZSBjb29yZGluYXRlcworICAgKiAgICAgaW4gdGhlIGBndmFyJyB0YWJsZS4KKyAgICoKKyAgICogICBndl9nbHlwaGNudCA6OgorICAgKiAgICAgVGhlIG51bWJlciBvZiBnbHlwaHMgaGFuZGxlZCBpbiB0aGUgYGd2YXInIHRhYmxlLgorICAgKgorICAgKiAgIGdseXBob2Zmc2V0cyA6OgorICAgKiAgICAgT2Zmc2V0cyBpbnRvIHRoZSBnbHlwaCB2YXJpYXRpb24gZGF0YSBhcnJheS4KKyAgICoKKyAgICogICBndmFyX3NpemUgOjoKKyAgICogICAgIFRoZSBzaXplIG9mIHRoZSBgZ3ZhcicgdGFibGUuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgR1hfQmxlbmRSZWNfCiAgIHsKICAgICBGVF9VSW50ICAgICAgICAgbnVtX2F4aXM7CkBAIC0zMzYsMTQgKzMzNiwxNCBAQAogICB9IEdYX0JsZW5kUmVjOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8ZW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR1hfVHVwbGVDb3VudEZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmxhZ3MgdXNlZCB3aXRoaW4gdGhlIGBUdXBsZUNvdW50JyBmaWVsZCBvZiB0aGUgYGd2YXInIHRhYmxlLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgR1hfVHVwbGVDb3VudEZsYWdzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGbGFncyB1c2VkIHdpdGhpbiB0aGUgYFR1cGxlQ291bnQnIGZpZWxkIG9mIHRoZSBgZ3ZhcicgdGFibGUuCisgICAqLwogICB0eXBlZGVmIGVudW0gIEdYX1R1cGxlQ291bnRGbGFnc18KICAgewogICAgIEdYX1RDX1RVUExFU19TSEFSRV9QT0lOVF9OVU1CRVJTID0gMHg4MDAwLApAQCAtMzUzLDE1ICszNTMsMTUgQEAKICAgfSBHWF9UdXBsZUNvdW50RmxhZ3M7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxlbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHWF9UdXBsZUluZGV4RmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGbGFncyB1c2VkIHdpdGhpbiB0aGUgYFR1cGxlSW5kZXgnIGZpZWxkIG9mIHRoZSBgZ3ZhcicgYW5kIGBjdmFyJyAgKi8KLSAgLyogICAgdGFibGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgR1hfVHVwbGVJbmRleEZsYWdzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBGbGFncyB1c2VkIHdpdGhpbiB0aGUgYFR1cGxlSW5kZXgnIGZpZWxkIG9mIHRoZSBgZ3ZhcicgYW5kIGBjdmFyJworICAgKiAgIHRhYmxlcy4KKyAgICovCiAgIHR5cGVkZWYgZW51bSAgR1hfVHVwbGVJbmRleEZsYWdzXwogICB7CiAgICAgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgID0gMHg4MDAwLApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwppbmRleCA1NTFmMTRhLi4zNWFhMzk5IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRpbnRlcnAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRpbnRlcnAuYworICoKKyAqICAgVHJ1ZVR5cGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAvKiBHcmVnIEhpdGNoY29jayBmcm9tIE1pY3Jvc29mdCBoYXMgaGVscGVkIGEgbG90IGluIHJlc29sdmluZyB1bmNsZWFyICovCkBAIC0zOSwxMiArMzksMTIgQEAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGludGVycAogCkBAIC04MiwxMCArODIsMTAgQEAKICAgICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ooIGV4YywgKHYpLT54LCAodiktPnkgKQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUd28gc2ltcGxlIGJvdW5kcy1jaGVja2luZyBtYWNyb3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUd28gc2ltcGxlIGJvdW5kcy1jaGVja2luZyBtYWNyb3MuCisgICAqLwogI2RlZmluZSBCT1VORFMoIHgsIG4gKSAgICggKEZUX1VJbnQpKHgpICA+PSAoRlRfVUludCkobikgICkKICNkZWZpbmUgQk9VTkRTTCggeCwgbiApICAoIChGVF9VTG9uZykoeCkgPj0gKEZUX1VMb25nKShuKSApCiAKQEAgLTk3LDMwICs5NywzMyBAQAogI2RlZmluZSBGQUlMVVJFICAxCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgQ09ERVJBTkdFIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgQ09ERVJBTkdFIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX0dvdG9fQ29kZVJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFN3aXRjaGVzIHRvIGEgbmV3IGNvZGUgcmFuZ2UgKHVwZGF0ZXMgdGhlIGNvZGUgcmVsYXRlZCBlbGVtZW50cyBpbiAqLwotICAvKiAgICBgZXhlYycsIGFuZCBgSVAnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYW5nZSA6OiBUaGUgbmV3IGV4ZWN1dGlvbiBjb2RlIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIElQICAgIDo6IFRoZSBuZXcgSVAgaW4gdGhlIG5ldyBjb2RlIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGV4ZWMgIDo6IFRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9Hb3RvX0NvZGVSYW5nZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU3dpdGNoZXMgdG8gYSBuZXcgY29kZSByYW5nZSAodXBkYXRlcyB0aGUgY29kZSByZWxhdGVkIGVsZW1lbnRzIGluCisgICAqICAgYGV4ZWMnLCBhbmQgYElQJykuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICByYW5nZSA6OgorICAgKiAgICAgVGhlIG5ldyBleGVjdXRpb24gY29kZSByYW5nZS4KKyAgICoKKyAgICogICBJUCA6OgorICAgKiAgICAgVGhlIG5ldyBJUCBpbiB0aGUgbmV3IGNvZGUgcmFuZ2UuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBleGVjIDo6CisgICAqICAgICBUaGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVFRfR290b19Db2RlUmFuZ2UoIFRUX0V4ZWNDb250ZXh0ICBleGVjLAogICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHJhbmdlLApAQCAtMTQ4LDI0ICsxNTEsMjggQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfU2V0X0NvZGVSYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2V0cyBhIGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFuZ2UgIDo6IFRoZSBjb2RlIHJhbmdlIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiYXNlICAgOjogVGhlIG5ldyBjb2RlIGJhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxlbmd0aCA6OiBUaGUgcmFuZ2Ugc2l6ZSBpbiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGV4ZWMgICA6OiBUaGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9TZXRfQ29kZVJhbmdlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBTZXRzIGEgY29kZSByYW5nZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHJhbmdlIDo6CisgICAqICAgICBUaGUgY29kZSByYW5nZSBpbmRleC4KKyAgICoKKyAgICogICBiYXNlIDo6CisgICAqICAgICBUaGUgbmV3IGNvZGUgYmFzZS4KKyAgICoKKyAgICogICBsZW5ndGggOjoKKyAgICogICAgIFRoZSByYW5nZSBzaXplIGluIGJ5dGVzLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZXhlYyA6OgorICAgKiAgICAgVGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIFRUX1NldF9Db2RlUmFuZ2UoIFRUX0V4ZWNDb250ZXh0ICBleGVjLAogICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgcmFuZ2UsCkBAIC0xNzksMjAgKzE4NiwyMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9DbGVhcl9Db2RlUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDbGVhcnMgYSBjb2RlIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICByYW5nZSA6OiBUaGUgY29kZSByYW5nZSBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBleGVjICA6OiBUaGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVFRfQ2xlYXJfQ29kZVJhbmdlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDbGVhcnMgYSBjb2RlIHJhbmdlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgcmFuZ2UgOjoKKyAgICogICAgIFRoZSBjb2RlIHJhbmdlIGluZGV4LgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZXhlYyA6OgorICAgKiAgICAgVGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIFRUX0NsZWFyX0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgIHJhbmdlICkKQEAgLTIwNCwyOSArMjEzLDMxIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgRVhFQ1VUSU9OIENPTlRFWFQgUk9VVElORVMgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqICAgICAgICAgICAgICAgICAgRVhFQ1VUSU9OIENPTlRFWFQgUk9VVElORVMKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Eb25lX0NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEZXN0cm95cyBhIGdpdmVuIGNvbnRleHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBleGVjICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1lbW9yeSA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9Eb25lX0NvbnRleHQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIERlc3Ryb3lzIGEgZ2l2ZW4gY29udGV4dC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGV4ZWMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAqCisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIFRUX0RvbmVfQ29udGV4dCggVFRfRXhlY0NvbnRleHQgIGV4ZWMgKQogICB7CkBAIC0yNTcsMjMgKzI2OCwyNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0X0NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplcyBhIGNvbnRleHQgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgOjogQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBleGVjICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgSW5pdF9Db250ZXh0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBJbml0aWFsaXplcyBhIGNvbnRleHQgb2JqZWN0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgbWVtb3J5IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBleGVjIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBzdGF0aWMgRlRfRXJyb3IKICAgSW5pdF9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5ICkKQEAgLTMxMywzMCArMzI2LDM1IEBACiAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVXBkYXRlX01heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ2hlY2tzIHRoZSBzaXplIG9mIGEgYnVmZmVyIGFuZCByZWFsbG9jYXRlcyBpdCBpZiBuZWNlc3NhcnkuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWVtb3J5ICAgICA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtdWx0aXBsaWVyIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgYnVmZmVyLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5ld19tYXggICAgOjogVGhlIG5ldyBjYXBhY2l0eSAoc2l6ZSkgb2YgdGhlIGJ1ZmZlci4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgICAgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcidzIGN1cnJlbnQgc2l6ZSBleHByZXNzZWQgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGluIGVsZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJ1ZmYgICAgICAgOjogVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBiYXNlIHBvaW50ZXIuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBVcGRhdGVfTWF4CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDaGVja3MgdGhlIHNpemUgb2YgYSBidWZmZXIgYW5kIHJlYWxsb2NhdGVzIGl0IGlmIG5lY2Vzc2FyeS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIG1lbW9yeSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBtZW1vcnkgb2JqZWN0LgorICAgKgorICAgKiAgIG11bHRpcGxpZXIgOjoKKyAgICogICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgYnVmZmVyLgorICAgKgorICAgKiAgIG5ld19tYXggOjoKKyAgICogICAgIFRoZSBuZXcgY2FwYWNpdHkgKHNpemUpIG9mIHRoZSBidWZmZXIuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBzaXplIDo6CisgICAqICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyJ3MgY3VycmVudCBzaXplIGV4cHJlc3NlZAorICAgKiAgICAgaW4gZWxlbWVudHMuCisgICAqCisgICAqICAgYnVmZiA6OgorICAgKiAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBiYXNlIHBvaW50ZXIuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBVcGRhdGVfTWF4KCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgRlRfVUxvbmcqICBzaXplLApAQCAtMzU5LDI4ICszNzcsMzEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfTG9hZF9Db250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUHJlcGFyZSBhbiBleGVjdXRpb24gY29udGV4dCBmb3IgZ2x5cGggaGludGluZy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzaXplIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2Ugc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBleGVjIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmx5IHRoZSBnbHlwaCBsb2FkZXIgYW5kIGRlYnVnZ2VyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24uICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVFRfTG9hZF9Db250ZXh0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBQcmVwYXJlIGFuIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBnbHlwaCBoaW50aW5nLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIHNpemUgb2JqZWN0LgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZXhlYyA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBATm90ZToKKyAgICogICBPbmx5IHRoZSBnbHlwaCBsb2FkZXIgYW5kIGRlYnVnZ2VyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgVFRfTG9hZF9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICAgZmFjZSwKQEAgLTQ2NywyMyArNDg4LDI1IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1NhdmVfQ29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNhdmVzIHRoZSBjb2RlIHJhbmdlcyBpbiBhIGBzaXplJyBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGV4ZWMgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUVF9TYXZlX0NvbnRleHQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFNhdmVzIHRoZSBjb2RlIHJhbmdlcyBpbiBhIGBzaXplJyBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBleGVjIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGV4ZWN1dGlvbiBjb250ZXh0LgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBzaXplIG9iamVjdC4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgT25seSB0aGUgZ2x5cGggbG9hZGVyIGFuZCBkZWJ1Z2dlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVFRfU2F2ZV9Db250ZXh0KCBUVF9FeGVjQ29udGV4dCAgZXhlYywKICAgICAgICAgICAgICAgICAgICBUVF9TaXplICAgICAgICAgc2l6ZSApCkBAIC01MDUsMjcgKzUyOCwyOSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9SdW5fQ29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBFeGVjdXRlcyBvbmUgb3IgbW9yZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWJ1ZyA6OiBBIEJvb2xlYW4gZmxhZy4gIElmIHNldCwgdGhlIGZ1bmN0aW9uIHNldHMgc29tZSBpbnRlcm5hbCAgKi8KLSAgLyogICAgICAgICAgICAgdmFyaWFibGVzIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UgVFRfUnVuSW5zKCkgICovCi0gIC8qICAgICAgICAgICAgIGlzIGNhbGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgVGhpcyBpcyBjb21tZW50ZWQgb3V0IGN1cnJlbnRseS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZXhlYyAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBleGVjdXRpb24gY29udGV4dC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHJ1ZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFRUX1J1bl9Db250ZXh0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBFeGVjdXRlcyBvbmUgb3IgbW9yZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZGVidWcgOjoKKyAgICogICAgIEEgQm9vbGVhbiBmbGFnLiAgSWYgc2V0LCB0aGUgZnVuY3Rpb24gc2V0cyBzb21lIGludGVybmFsCisgICAqICAgICB2YXJpYWJsZXMgYW5kIHJldHVybnMgaW1tZWRpYXRlbHksIG90aGVyd2lzZSBUVF9SdW5JbnMoKQorICAgKiAgICAgaXMgY2FsbGVkLgorICAgKgorICAgKiAgICAgVGhpcyBpcyBjb21tZW50ZWQgb3V0IGN1cnJlbnRseS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGV4ZWMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgVHJ1ZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUVF9SdW5fQ29udGV4dCggVFRfRXhlY0NvbnRleHQgIGV4ZWMgKQogICB7CkBAIC02MDksMjIgKzYzNCwyMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEJlZm9yZSBhbiBvcGNvZGUgaXMgZXhlY3V0ZWQsIHRoZSBpbnRlcnByZXRlciB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZSAqLwotICAvKiBlbm91Z2ggYXJndW1lbnRzIG9uIHRoZSBzdGFjaywgd2l0aCB0aGUgaGVscCBvZiB0aGUgYFBvcF9QdXNoX0NvdW50JyAgKi8KLSAgLyogdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGb3IgZWFjaCBvcGNvZGUsIHRoZSBmaXJzdCBjb2x1bW4gZ2l2ZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCAgKi8KLSAgLyogYXJlIHBvcHBlZCBmcm9tIHRoZSBzdGFjazsgdGhlIHNlY29uZCBvbmUgZ2l2ZXMgdGhlIG51bWJlciBvZiB0aG9zZSAgICovCi0gIC8qIHRoYXQgYXJlIHB1c2hlZCBpbiByZXN1bHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlcyB3aGljaCBoYXZlIGEgdmFyeWluZyBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgZGF0YSBzdHJlYW0gICovCi0gIC8qIChOUFVTSEIsIE5QVVNIVykgYXJlIGhhbmRsZWQgc3BlY2lhbGx5OyB0aGV5IGhhdmUgYSBuZWdhdGl2ZSB2YWx1ZSBpbiAqLwotICAvKiB0aGUgYG9wY29kZV9sZW5ndGgnIHRhYmxlLCBhbmQgdGhlIHZhbHVlIGluIGBQb3BfUHVzaF9Db3VudCcgaXMgc2V0ICAgKi8KLSAgLyogdG8gemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEJlZm9yZSBhbiBvcGNvZGUgaXMgZXhlY3V0ZWQsIHRoZSBpbnRlcnByZXRlciB2ZXJpZmllcyB0aGF0IHRoZXJlIGFyZQorICAgKiBlbm91Z2ggYXJndW1lbnRzIG9uIHRoZSBzdGFjaywgd2l0aCB0aGUgaGVscCBvZiB0aGUgYFBvcF9QdXNoX0NvdW50JworICAgKiB0YWJsZS4KKyAgICoKKyAgICogRm9yIGVhY2ggb3Bjb2RlLCB0aGUgZmlyc3QgY29sdW1uIGdpdmVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQKKyAgICogYXJlIHBvcHBlZCBmcm9tIHRoZSBzdGFjazsgdGhlIHNlY29uZCBvbmUgZ2l2ZXMgdGhlIG51bWJlciBvZiB0aG9zZQorICAgKiB0aGF0IGFyZSBwdXNoZWQgaW4gcmVzdWx0LgorICAgKgorICAgKiBPcGNvZGVzIHdoaWNoIGhhdmUgYSB2YXJ5aW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRoZSBkYXRhIHN0cmVhbQorICAgKiAoTlBVU0hCLCBOUFVTSFcpIGFyZSBoYW5kbGVkIHNwZWNpYWxseTsgdGhleSBoYXZlIGEgbmVnYXRpdmUgdmFsdWUgaW4KKyAgICogdGhlIGBvcGNvZGVfbGVuZ3RoJyB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBpbiBgUG9wX1B1c2hfQ291bnQnIGlzIHNldAorICAgKiB0byB6ZXJvLgorICAgKgorICAgKi8KIAogCiAjdW5kZWYgIFBBQ0sKQEAgLTExMjksNzMgKzExNTQsNzMgQEAKICAgICAiOCBQdXNoV1s2XSIsCiAgICAgIjggUHVzaFdbN10iLAogCi0gICAgIjggTURSUFswMF0iLAotICAgICI4IE1EUlBbMDFdIiwKLSAgICAiOCBNRFJQWzAyXSIsCi0gICAgIjggTURSUFswM10iLAotICAgICI4IE1EUlBbMDRdIiwKLSAgICAiOCBNRFJQWzA1XSIsCi0gICAgIjggTURSUFswNl0iLAotICAgICI4IE1EUlBbMDddIiwKLSAgICAiOCBNRFJQWzA4XSIsCi0gICAgIjggTURSUFswOV0iLAotICAgICI4IE1EUlBbMTBdIiwKLSAgICAiOCBNRFJQWzExXSIsCi0gICAgIjggTURSUFsxMl0iLAotICAgICI4IE1EUlBbMTNdIiwKLSAgICAiOCBNRFJQWzE0XSIsCi0gICAgIjggTURSUFsxNV0iLAorICAgICI3IE1EUlBbR10iLAorICAgICI3IE1EUlBbQl0iLAorICAgICI3IE1EUlBbV10iLAorICAgICI3IE1EUlBbP10iLAorICAgICI4IE1EUlBbckddIiwKKyAgICAiOCBNRFJQW3JCXSIsCisgICAgIjggTURSUFtyV10iLAorICAgICI4IE1EUlBbcj9dIiwKKyAgICAiOCBNRFJQW21HXSIsCisgICAgIjggTURSUFttQl0iLAorICAgICI4IE1EUlBbbVddIiwKKyAgICAiOCBNRFJQW20/XSIsCisgICAgIjkgTURSUFttckddIiwKKyAgICAiOSBNRFJQW21yQl0iLAorICAgICI5IE1EUlBbbXJXXSIsCisgICAgIjkgTURSUFttcj9dIiwKIAotICAgICI4IE1EUlBbMTZdIiwKLSAgICAiOCBNRFJQWzE3XSIsCi0gICAgIjggTURSUFsxOF0iLAotICAgICI4IE1EUlBbMTldIiwKLSAgICAiOCBNRFJQWzIwXSIsCi0gICAgIjggTURSUFsyMV0iLAotICAgICI4IE1EUlBbMjJdIiwKLSAgICAiOCBNRFJQWzIzXSIsCi0gICAgIjggTURSUFsyNF0iLAotICAgICI4IE1EUlBbMjVdIiwKLSAgICAiOCBNRFJQWzI2XSIsCi0gICAgIjggTURSUFsyN10iLAotICAgICI4IE1EUlBbMjhdIiwKLSAgICAiOCBNRFJQWzI5XSIsCi0gICAgIjggTURSUFszMF0iLAotICAgICI4IE1EUlBbMzFdIiwKKyAgICAiOCBNRFJQW3BHXSIsCisgICAgIjggTURSUFtwQl0iLAorICAgICI4IE1EUlBbcFddIiwKKyAgICAiOCBNRFJQW3A/XSIsCisgICAgIjkgTURSUFtwckddIiwKKyAgICAiOSBNRFJQW3ByQl0iLAorICAgICI5IE1EUlBbcHJXXSIsCisgICAgIjkgTURSUFtwcj9dIiwKKyAgICAiOSBNRFJQW3BtR10iLAorICAgICI5IE1EUlBbcG1CXSIsCisgICAgIjkgTURSUFtwbVddIiwKKyAgICAiOSBNRFJQW3BtP10iLAorICAgICJBIE1EUlBbcG1yR10iLAorICAgICJBIE1EUlBbcG1yQl0iLAorICAgICJBIE1EUlBbcG1yV10iLAorICAgICJBIE1EUlBbcG1yP10iLAogCi0gICAgIjggTUlSUFswMF0iLAotICAgICI4IE1JUlBbMDFdIiwKLSAgICAiOCBNSVJQWzAyXSIsCi0gICAgIjggTUlSUFswM10iLAotICAgICI4IE1JUlBbMDRdIiwKLSAgICAiOCBNSVJQWzA1XSIsCi0gICAgIjggTUlSUFswNl0iLAotICAgICI4IE1JUlBbMDddIiwKLSAgICAiOCBNSVJQWzA4XSIsCi0gICAgIjggTUlSUFswOV0iLAotICAgICI4IE1JUlBbMTBdIiwKLSAgICAiOCBNSVJQWzExXSIsCi0gICAgIjggTUlSUFsxMl0iLAotICAgICI4IE1JUlBbMTNdIiwKLSAgICAiOCBNSVJQWzE0XSIsCi0gICAgIjggTUlSUFsxNV0iLAorICAgICI3IE1JUlBbR10iLAorICAgICI3IE1JUlBbQl0iLAorICAgICI3IE1JUlBbV10iLAorICAgICI3IE1JUlBbP10iLAorICAgICI4IE1JUlBbckddIiwKKyAgICAiOCBNSVJQW3JCXSIsCisgICAgIjggTUlSUFtyV10iLAorICAgICI4IE1JUlBbcj9dIiwKKyAgICAiOCBNSVJQW21HXSIsCisgICAgIjggTUlSUFttQl0iLAorICAgICI4IE1JUlBbbVddIiwKKyAgICAiOCBNSVJQW20/XSIsCisgICAgIjkgTUlSUFttckddIiwKKyAgICAiOSBNSVJQW21yQl0iLAorICAgICI5IE1JUlBbbXJXXSIsCisgICAgIjkgTUlSUFttcj9dIiwKIAotICAgICI4IE1JUlBbMTZdIiwKLSAgICAiOCBNSVJQWzE3XSIsCi0gICAgIjggTUlSUFsxOF0iLAotICAgICI4IE1JUlBbMTldIiwKLSAgICAiOCBNSVJQWzIwXSIsCi0gICAgIjggTUlSUFsyMV0iLAotICAgICI4IE1JUlBbMjJdIiwKLSAgICAiOCBNSVJQWzIzXSIsCi0gICAgIjggTUlSUFsyNF0iLAotICAgICI4IE1JUlBbMjVdIiwKLSAgICAiOCBNSVJQWzI2XSIsCi0gICAgIjggTUlSUFsyN10iLAotICAgICI4IE1JUlBbMjhdIiwKLSAgICAiOCBNSVJQWzI5XSIsCi0gICAgIjggTUlSUFszMF0iLAotICAgICI4IE1JUlBbMzFdIgorICAgICI4IE1JUlBbcEddIiwKKyAgICAiOCBNSVJQW3BCXSIsCisgICAgIjggTUlSUFtwV10iLAorICAgICI4IE1JUlBbcD9dIiwKKyAgICAiOSBNSVJQW3ByR10iLAorICAgICI5IE1JUlBbcHJCXSIsCisgICAgIjkgTUlSUFtwclddIiwKKyAgICAiOSBNSVJQW3ByP10iLAorICAgICI5IE1JUlBbcG1HXSIsCisgICAgIjkgTUlSUFtwbUJdIiwKKyAgICAiOSBNSVJQW3BtV10iLAorICAgICI5IE1JUlBbcG0/XSIsCisgICAgIkEgTUlSUFtwbXJHXSIsCisgICAgIkEgTUlSUFtwbXJCXSIsCisgICAgIkEgTUlSUFtwbXJXXSIsCisgICAgIkEgTUlSUFtwbXI/XSIKICAgfTsKIAogI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCkBAIC0xNDQ4LDE4ICsxNDczLDE4IEBACiAjZW5kaWYgLyogVFRfRG90Rml4MTQgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEN1cnJlbnRfUmF0aW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYXNwZWN0IHJhdGlvIHNjYWxpbmcgZmFjdG9yIGRlcGVuZGluZyBvbiB0aGUgICAqLwotICAvKiAgICBwcm9qZWN0aW9uIHZlY3RvcidzIHN0YXRlIGFuZCBkZXZpY2UgcmVzb2x1dGlvbnMuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgYXNwZWN0IHJhdGlvIGluIDE2LjE2IGZvcm1hdCwgYWx3YXlzIDw9IDEuMCAuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgQ3VycmVudF9SYXRpbworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUmV0dXJucyB0aGUgY3VycmVudCBhc3BlY3QgcmF0aW8gc2NhbGluZyBmYWN0b3IgZGVwZW5kaW5nIG9uIHRoZQorICAgKiAgIHByb2plY3Rpb24gdmVjdG9yJ3Mgc3RhdGUgYW5kIGRldmljZSByZXNvbHV0aW9ucy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBUaGUgYXNwZWN0IHJhdGlvIGluIDE2LjE2IGZvcm1hdCwgYWx3YXlzIDw9IDEuMCAuCisgICAqLwogICBzdGF0aWMgRlRfTG9uZwogICBDdXJyZW50X1JhdGlvKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtMTUwMSwxMSArMTUyNiwxMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb250cm9sIHZhbHVlIHRhYmxlIChDVlQpLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29udHJvbCB2YWx1ZSB0YWJsZSAoQ1ZUKS4KKyAgICoKKyAgICovCiAKIAogICBGVF9DQUxMQkFDS19ERUYoIEZUX0YyNkRvdDYgKQpAQCAtMTU2MCwyMSArMTU4NSwyMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHZXRTaG9ydElucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSZXR1cm5zIGEgc2hvcnQgaW50ZWdlciB0YWtlbiBmcm9tIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gYXQgICAgICAgKi8KLSAgLyogICAgYWRkcmVzcyBJUC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2hvcnQgcmVhZCBhdCBjb2RlW0lQXS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBvbmUgY291bGQgYmVjb21lIGEgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIEdldFNob3J0SW5zCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBSZXR1cm5zIGEgc2hvcnQgaW50ZWdlciB0YWtlbiBmcm9tIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gYXQKKyAgICogICBhZGRyZXNzIElQLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNob3J0IHJlYWQgYXQgY29kZVtJUF0uCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIFRoaXMgb25lIGNvdWxkIGJlY29tZSBhIG1hY3JvLgorICAgKi8KICAgc3RhdGljIEZUX1Nob3J0CiAgIEdldFNob3J0SW5zKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtMTU4NSwyMiArMTYxMCwyNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbnNfR290b19Db2RlUmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHb2VzIHRvIGEgY2VydGFpbiBjb2RlIHJhbmdlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhUmFuZ2UgOjogVGhlIGluZGV4IG9mIHRoZSBjb2RlIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFJUCAgICA6OiBUaGUgbmV3IElQIGFkZHJlc3MgaW4gdGhlIGNvZGUgcmFuZ2UuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNVQ0NFU1Mgb3IgRkFJTFVSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBJbnNfR290b19Db2RlUmFuZ2UKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEdvZXMgdG8gYSBjZXJ0YWluIGNvZGUgcmFuZ2UgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGFSYW5nZSA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBjb2RlIHJhbmdlLgorICAgKgorICAgKiAgIGFJUCA6OgorICAgKiAgICAgVGhlIG5ldyBJUCBhZGRyZXNzIGluIHRoZSBjb2RlIHJhbmdlLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFNVQ0NFU1Mgb3IgRkFJTFVSRS4KKyAgICovCiAgIHN0YXRpYyBGVF9Cb29sCiAgIEluc19Hb3RvX0NvZGVSYW5nZSggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgICAgYVJhbmdlLApAQCAtMTY0MiwyNyArMTY2OSwzMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEaXJlY3RfTW92ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBNb3ZlcyBhIHBvaW50IGJ5IGEgZ2l2ZW4gZGlzdGFuY2UgYWxvbmcgdGhlIGZyZWVkb20gdmVjdG9yLiAgVGhlICAgKi8KLSAgLyogICAgcG9pbnQgd2lsbCBiZSBgdG91Y2hlZCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcG9pbnQgICAgOjogVGhlIGluZGV4IG9mIHRoZSBwb2ludCB0byBtb3ZlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkaXN0YW5jZSA6OiBUaGUgZGlzdGFuY2UgdG8gYXBwbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB6b25lICAgICA6OiBUaGUgYWZmZWN0ZWQgZ2x5cGggem9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZS4gICAgICAgKi8KLSAgLyogICAgYFRvdWNoZXMnIHRoZSBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIERpcmVjdF9Nb3ZlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBNb3ZlcyBhIHBvaW50IGJ5IGEgZ2l2ZW4gZGlzdGFuY2UgYWxvbmcgdGhlIGZyZWVkb20gdmVjdG9yLiAgVGhlCisgICAqICAgcG9pbnQgd2lsbCBiZSBgdG91Y2hlZCcuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBwb2ludCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBwb2ludCB0byBtb3ZlLgorICAgKgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gYXBwbHkuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICB6b25lIDo6CisgICAqICAgICBUaGUgYWZmZWN0ZWQgZ2x5cGggem9uZS4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuCisgICAqICAgYFRvdWNoZXMnIHRoZSBwb2ludC4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIERpcmVjdF9Nb3ZlKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgVFRfR2x5cGhab25lICAgIHpvbmUsCkBAIC0xNzI4LDIzICsxNzU4LDI2IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERpcmVjdF9Nb3ZlX09yaWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE1vdmVzIHRoZSAqb3JpZ2luYWwqIHBvc2l0aW9uIG9mIGEgcG9pbnQgYnkgYSBnaXZlbiBkaXN0YW5jZSBhbG9uZyAqLwotICAvKiAgICB0aGUgZnJlZWRvbSB2ZWN0b3IuICBPYnZpb3VzbHksIHRoZSBwb2ludCB3aWxsIG5vdCBiZSBgdG91Y2hlZCcuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb2ludCAgICA6OiBUaGUgaW5kZXggb2YgdGhlIHBvaW50IHRvIG1vdmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRpc3RhbmNlIDo6IFRoZSBkaXN0YW5jZSB0byBhcHBseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHpvbmUgICAgIDo6IFRoZSBhZmZlY3RlZCBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBEaXJlY3RfTW92ZV9PcmlnCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBNb3ZlcyB0aGUgKm9yaWdpbmFsKiBwb3NpdGlvbiBvZiBhIHBvaW50IGJ5IGEgZ2l2ZW4gZGlzdGFuY2UgYWxvbmcKKyAgICogICB0aGUgZnJlZWRvbSB2ZWN0b3IuICBPYnZpb3VzbHksIHRoZSBwb2ludCB3aWxsIG5vdCBiZSBgdG91Y2hlZCcuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBwb2ludCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBwb2ludCB0byBtb3ZlLgorICAgKgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gYXBwbHkuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICB6b25lIDo6CisgICAqICAgICBUaGUgYWZmZWN0ZWQgZ2x5cGggem9uZS4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIERpcmVjdF9Nb3ZlX09yaWcoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgIFRUX0dseXBoWm9uZSAgICB6b25lLApAQCAtMTc3MiwxNSArMTgwNSwxNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNwZWNpYWwgdmVyc2lvbnMgb2YgRGlyZWN0X01vdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgZm9sbG93aW5nIHZlcnNpb25zIGFyZSB1c2VkIHdoZW5ldmVyIGJvdGggdmVjdG9ycyBhcmUgYm90aCAgICAgICovCi0gIC8qICAgYWxvbmcgb25lIG9mIHRoZSBjb29yZGluYXRlIHVuaXQgdmVjdG9ycywgaS5lLiBpbiA5MCUgb2YgdGhlIGNhc2VzLiAqLwotICAvKiAgIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU3BlY2lhbCB2ZXJzaW9ucyBvZiBEaXJlY3RfTW92ZSgpCisgICAqCisgICAqICAgVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBhcmUgdXNlZCB3aGVuZXZlciBib3RoIHZlY3RvcnMgYXJlIGJvdGgKKyAgICogICBhbG9uZyBvbmUgb2YgdGhlIGNvb3JkaW5hdGUgdW5pdCB2ZWN0b3JzLCBpLmUuIGluIDkwJSBvZiB0aGUgY2FzZXMuCisgICAqICAgU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuCisgICAqCisgICAqLwogCiAKICAgc3RhdGljIHZvaWQKQEAgLTE4MjcsMTQgKzE4NjAsMTQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTcGVjaWFsIHZlcnNpb25zIG9mIERpcmVjdF9Nb3ZlX09yaWcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBhcmUgdXNlZCB3aGVuZXZlciBib3RoIHZlY3RvcnMgYXJlIGJvdGggICAgICAqLwotICAvKiAgIGFsb25nIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSB1bml0IHZlY3RvcnMsIGkuZS4gaW4gOTAlIG9mIHRoZSBjYXNlcy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU3BlY2lhbCB2ZXJzaW9ucyBvZiBEaXJlY3RfTW92ZV9PcmlnKCkKKyAgICoKKyAgICogICBUaGUgZm9sbG93aW5nIHZlcnNpb25zIGFyZSB1c2VkIHdoZW5ldmVyIGJvdGggdmVjdG9ycyBhcmUgYm90aAorICAgKiAgIGFsb25nIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSB1bml0IHZlY3RvcnMsIGkuZS4gaW4gOTAlIG9mIHRoZSBjYXNlcy4KKyAgICoKKyAgICovCiAKIAogICBzdGF0aWMgdm9pZApAQCAtMTg2MSwyOCArMTg5NCwzMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZF9Ob25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBEb2VzIG5vdCByb3VuZCwgYnV0IGFkZHMgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkaXN0YW5jZSAgICAgOjogVGhlIGRpc3RhbmNlIChub3QpIHRvIHJvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbXBlbnNhdGlvbiA6OiBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBjb21wZW5zYXRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIHNheXMgdmVyeSBmZXcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCAgICAqLwotICAvKiAgICBiZXR3ZWVuIHJvdW5kaW5nIGFuZCBlbmdpbmUgY29tcGVuc2F0aW9uLiAgSG93ZXZlciwgaXQgc2VlbXMgZnJvbSAgKi8KLSAgLyogICAgdGhlIGRlc2NyaXB0aW9uIG9mIHN1cGVyIHJvdW5kIHRoYXQgd2Ugc2hvdWxkIGFkZCB0aGUgY29tcGVuc2F0aW9uICovCi0gIC8qICAgIGJlZm9yZSByb3VuZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBSb3VuZF9Ob25lCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBEb2VzIG5vdCByb3VuZCwgYnV0IGFkZHMgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgKG5vdCkgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBUaGUgY29tcGVuc2F0ZWQgZGlzdGFuY2UuCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIFRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIHNheXMgdmVyeSBmZXcgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcAorICAgKiAgIGJldHdlZW4gcm91bmRpbmcgYW5kIGVuZ2luZSBjb21wZW5zYXRpb24uICBIb3dldmVyLCBpdCBzZWVtcyBmcm9tCisgICAqICAgdGhlIGRlc2NyaXB0aW9uIG9mIHN1cGVyIHJvdW5kIHRoYXQgd2Ugc2hvdWxkIGFkZCB0aGUgY29tcGVuc2F0aW9uCisgICAqICAgYmVmb3JlIHJvdW5kaW5nLgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfTm9uZSggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLApAQCAtMTkwOSwyMiArMTk0NCwyNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZF9Ub19HcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZHMgdmFsdWUgdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkaXN0YW5jZSAgICAgOjogVGhlIGRpc3RhbmNlIHRvIHJvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbXBlbnNhdGlvbiA6OiBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJvdW5kZWQgZGlzdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBSb3VuZF9Ub19HcmlkCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBSb3VuZHMgdmFsdWUgdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSb3VuZGVkIGRpc3RhbmNlLgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfVG9fR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLApAQCAtMTk1MywyMiArMTk5MCwyNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZF9Ub19IYWxmX0dyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZHMgdmFsdWUgdG8gaGFsZiBncmlkIGFmdGVyIGFkZGluZyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkaXN0YW5jZSAgICAgOjogVGhlIGRpc3RhbmNlIHRvIHJvdW5kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbXBlbnNhdGlvbiA6OiBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJvdW5kZWQgZGlzdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBSb3VuZF9Ub19IYWxmX0dyaWQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFJvdW5kcyB2YWx1ZSB0byBoYWxmIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkaXN0YW5jZSA6OgorICAgKiAgICAgVGhlIGRpc3RhbmNlIHRvIHJvdW5kLgorICAgKgorICAgKiAgIGNvbXBlbnNhdGlvbiA6OgorICAgKiAgICAgVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgUm91bmRlZCBkaXN0YW5jZS4KKyAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2CiAgIFJvdW5kX1RvX0hhbGZfR3JpZCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCkBAIC0xOTk5LDIyICsyMDM4LDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJvdW5kX0Rvd25fVG9fR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJvdW5kcyB2YWx1ZSBkb3duIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRpc3RhbmNlICAgICA6OiBUaGUgZGlzdGFuY2UgdG8gcm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29tcGVuc2F0aW9uIDo6IFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFJvdW5kX0Rvd25fVG9fR3JpZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUm91bmRzIHZhbHVlIGRvd24gdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSb3VuZGVkIGRpc3RhbmNlLgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfRG93bl9Ub19HcmlkKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKQEAgLTIwNDIsMjIgKzIwODMsMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRfVXBfVG9fR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRzIHZhbHVlIHVwIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgUm91bmRfVXBfVG9fR3JpZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUm91bmRzIHZhbHVlIHVwIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkaXN0YW5jZSA6OgorICAgKiAgICAgVGhlIGRpc3RhbmNlIHRvIHJvdW5kLgorICAgKgorICAgKiAgIGNvbXBlbnNhdGlvbiA6OgorICAgKiAgICAgVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgUm91bmRlZCBkaXN0YW5jZS4KKyAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2CiAgIFJvdW5kX1VwX1RvX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKQEAgLTIwODYsMjIgKzIxMjksMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRfVG9fRG91YmxlX0dyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRzIHZhbHVlIHRvIGRvdWJsZSBncmlkIGFmdGVyIGFkZGluZyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgUm91bmRfVG9fRG91YmxlX0dyaWQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFJvdW5kcyB2YWx1ZSB0byBkb3VibGUgZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSb3VuZGVkIGRpc3RhbmNlLgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUm91bmRfVG9fRG91YmxlX0dyaWQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZGlzdGFuY2UsCkBAIC0yMTMwLDI4ICsyMTc1LDMwIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJvdW5kX1N1cGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFN1cGVyLXJvdW5kcyB2YWx1ZSB0byBncmlkIGFmdGVyIGFkZGluZyBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRpc3RhbmNlICAgICA6OiBUaGUgZGlzdGFuY2UgdG8gcm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29tcGVuc2F0aW9uIDo6IFRoZSBlbmdpbmUgY29tcGVuc2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gc2F5cyB2ZXJ5IGxpdHRsZSBhYm91dCB0aGUgcmVsYXRpb25zaGlwICovCi0gIC8qICAgIGJldHdlZW4gcm91bmRpbmcgYW5kIGVuZ2luZSBjb21wZW5zYXRpb24uICBIb3dldmVyLCBpdCBzZWVtcyBmcm9tICAqLwotICAvKiAgICB0aGUgZGVzY3JpcHRpb24gb2Ygc3VwZXIgcm91bmQgdGhhdCB3ZSBzaG91bGQgYWRkIHRoZSBjb21wZW5zYXRpb24gKi8KLSAgLyogICAgYmVmb3JlIHJvdW5kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFJvdW5kX1N1cGVyCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBTdXBlci1yb3VuZHMgdmFsdWUgdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSb3VuZGVkIGRpc3RhbmNlLgorICAgKgorICAgKiBATm90ZToKKyAgICogICBUaGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBzYXlzIHZlcnkgbGl0dGxlIGFib3V0IHRoZSByZWxhdGlvbnNoaXAKKyAgICogICBiZXR3ZWVuIHJvdW5kaW5nIGFuZCBlbmdpbmUgY29tcGVuc2F0aW9uLiAgSG93ZXZlciwgaXQgc2VlbXMgZnJvbQorICAgKiAgIHRoZSBkZXNjcmlwdGlvbiBvZiBzdXBlciByb3VuZCB0aGF0IHdlIHNob3VsZCBhZGQgdGhlIGNvbXBlbnNhdGlvbgorICAgKiAgIGJlZm9yZSByb3VuZGluZy4KKyAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2CiAgIFJvdW5kX1N1cGVyKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgICAgIGRpc3RhbmNlLApAQCAtMjE2NSw3ICsyMjEyLDcgQEAKICAgICAgIHZhbCA9IEFERF9MT05HKCBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24gKSAmCiAgICAgICAgICAgICAgIC1leGMtPnBlcmlvZDsKLSAgICAgIHZhbCArPSBleGMtPnBoYXNlOworICAgICAgdmFsID0gQUREX0xPTkcoIHZhbCwgZXhjLT5waGFzZSApOwogICAgICAgaWYgKCB2YWwgPCAwICkKICAgICAgICAgdmFsID0gZXhjLT5waGFzZTsKICAgICB9CkBAIC0yMTc0LDcgKzIyMjEsNyBAQAogICAgICAgdmFsID0gTkVHX0xPTkcoIFNVQl9MT05HKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlICkgJgogICAgICAgICAgICAgICAgICAgICAgICAgLWV4Yy0+cGVyaW9kICk7Ci0gICAgICB2YWwgLT0gZXhjLT5waGFzZTsKKyAgICAgIHZhbCA9IFNVQl9MT05HKCB2YWwsIGV4Yy0+cGhhc2UgKTsKICAgICAgIGlmICggdmFsID4gMCApCiAgICAgICAgIHZhbCA9IC1leGMtPnBoYXNlOwogICAgIH0KQEAgLTIxODMsMjYgKzIyMzAsMjggQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUm91bmRfU3VwZXJfNDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU3VwZXItcm91bmRzIHZhbHVlIHRvIGdyaWQgYWZ0ZXIgYWRkaW5nIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGlzdGFuY2UgICAgIDo6IFRoZSBkaXN0YW5jZSB0byByb3VuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb21wZW5zYXRpb24gOjogVGhlIGVuZ2luZSBjb21wZW5zYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBSb3VuZGVkIGRpc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGVyZSBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBSb3VuZF9TdXBlcl80NSgpIGFzIHdlIG1heSBuZWVkICAgKi8KLSAgLyogICAgZ3JlYXRlciBwcmVjaXNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFJvdW5kX1N1cGVyXzQ1CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBTdXBlci1yb3VuZHMgdmFsdWUgdG8gZ3JpZCBhZnRlciBhZGRpbmcgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRpc3RhbmNlIDo6CisgICAqICAgICBUaGUgZGlzdGFuY2UgdG8gcm91bmQuCisgICAqCisgICAqICAgY29tcGVuc2F0aW9uIDo6CisgICAqICAgICBUaGUgZW5naW5lIGNvbXBlbnNhdGlvbi4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSb3VuZGVkIGRpc3RhbmNlLgorICAgKgorICAgKiBATm90ZToKKyAgICogICBUaGVyZSBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBSb3VuZF9TdXBlcl80NSgpIGFzIHdlIG1heSBuZWVkCisgICAqICAgZ3JlYXRlciBwcmVjaXNpb24uCisgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgogICBSb3VuZF9TdXBlcl80NSggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKQEAgLTIyMTYsNyArMjI2NSw3IEBACiAgICAgICB2YWwgPSAoIEFERF9MT05HKCBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dGhyZXNob2xkIC0gZXhjLT5waGFzZSArIGNvbXBlbnNhdGlvbiApIC8KICAgICAgICAgICAgICAgICBleGMtPnBlcmlvZCApICogZXhjLT5wZXJpb2Q7Ci0gICAgICB2YWwgKz0gZXhjLT5waGFzZTsKKyAgICAgIHZhbCA9IEFERF9MT05HKCB2YWwsIGV4Yy0+cGhhc2UgKTsKICAgICAgIGlmICggdmFsIDwgMCApCiAgICAgICAgIHZhbCA9IGV4Yy0+cGhhc2U7CiAgICAgfQpAQCAtMjIyNSw3ICsyMjc0LDcgQEAKICAgICAgIHZhbCA9IE5FR19MT05HKCAoIFNVQl9MT05HKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgKSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+cGVyaW9kICkgKiBleGMtPnBlcmlvZCApOwotICAgICAgdmFsIC09IGV4Yy0+cGhhc2U7CisgICAgICB2YWwgPSBTVUJfTE9ORyggdmFsLCBleGMtPnBoYXNlICk7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAtZXhjLT5waGFzZTsKICAgICB9CkBAIC0yMjM0LDE3ICsyMjgzLDE4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGVfUm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNldHMgdGhlIHJvdW5kaW5nIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJvdW5kX21vZGUgOjogVGhlIHJvdW5kaW5nIG1vZGUgdG8gYmUgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBDb21wdXRlX1JvdW5kCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBTZXRzIHRoZSByb3VuZGluZyBtb2RlLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgcm91bmRfbW9kZSA6OgorICAgKiAgICAgVGhlIHJvdW5kaW5nIG1vZGUgdG8gYmUgdXNlZC4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIENvbXB1dGVfUm91bmQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICAgICByb3VuZF9tb2RlICkKQEAgLTIyODYsMTkgKzIzMzYsMjEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2V0U3VwZXJSb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgU2V0cyBTdXBlciBSb3VuZCBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgR3JpZFBlcmlvZCA6OiBUaGUgZ3JpZCBwZXJpb2QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzZWxlY3RvciAgIDo6IFRoZSBTUk9VTkQgb3Bjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgU2V0U3VwZXJSb3VuZAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgU2V0cyBTdXBlciBSb3VuZCBwYXJhbWV0ZXJzLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgR3JpZFBlcmlvZCA6OgorICAgKiAgICAgVGhlIGdyaWQgcGVyaW9kLgorICAgKgorICAgKiAgIHNlbGVjdG9yIDo6CisgICAqICAgICBUaGUgU1JPVU5EIG9wY29kZS4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIFNldFN1cGVyUm91bmQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgIEZUX0YyRG90MTQgICAgICBHcmlkUGVyaW9kLApAQCAtMjM1NSwyMiArMjQwNywyNCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDb21wdXRlcyB0aGUgcHJvamVjdGlvbiBvZiB2ZWN0b3IgZ2l2ZW4gYnkgKHYyLXYxKSBhbG9uZyB0aGUgICAgICAgKi8KLSAgLyogICAgY3VycmVudCBwcm9qZWN0aW9uIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdjEgOjogRmlyc3QgaW5wdXQgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHYyIDo6IFNlY29uZCBpbnB1dCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBkaXN0YW5jZSBpbiBGMjZkb3Q2IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBQcm9qZWN0CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlcyB0aGUgcHJvamVjdGlvbiBvZiB2ZWN0b3IgZ2l2ZW4gYnkgKHYyLXYxKSBhbG9uZyB0aGUKKyAgICogICBjdXJyZW50IHByb2plY3Rpb24gdmVjdG9yLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgdjEgOjoKKyAgICogICAgIEZpcnN0IGlucHV0IHZlY3Rvci4KKyAgICogICB2MiA6OgorICAgKiAgICAgU2Vjb25kIGlucHV0IHZlY3Rvci4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuCisgICAqLwogICBzdGF0aWMgRlRfRjI2RG90NgogICBQcm9qZWN0KCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCkBAIC0yMzgyLDIyICsyNDM2LDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIER1YWxfUHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGVzIHRoZSBwcm9qZWN0aW9uIG9mIHRoZSB2ZWN0b3IgZ2l2ZW4gYnkgKHYyLXYxKSBhbG9uZyB0aGUgICAqLwotICAvKiAgICBjdXJyZW50IGR1YWwgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2MSA6OiBGaXJzdCBpbnB1dCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdjIgOjogU2Vjb25kIGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIER1YWxfUHJvamVjdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gb2YgdGhlIHZlY3RvciBnaXZlbiBieSAodjItdjEpIGFsb25nIHRoZQorICAgKiAgIGN1cnJlbnQgZHVhbCB2ZWN0b3IuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICB2MSA6OgorICAgKiAgICAgRmlyc3QgaW5wdXQgdmVjdG9yLgorICAgKiAgIHYyIDo6CisgICAqICAgICBTZWNvbmQgaW5wdXQgdmVjdG9yLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIFRoZSBkaXN0YW5jZSBpbiBGMjZkb3Q2IGZvcm1hdC4KKyAgICovCiAgIHN0YXRpYyBGVF9GMjZEb3Q2CiAgIER1YWxfUHJvamVjdCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICAgZHgsCkBAIC0yNDA5LDIyICsyNDY1LDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFByb2plY3RfeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENvbXB1dGVzIHRoZSBwcm9qZWN0aW9uIG9mIHRoZSB2ZWN0b3IgZ2l2ZW4gYnkgKHYyLXYxKSBhbG9uZyB0aGUgICAqLwotICAvKiAgICBob3Jpem9udGFsIGF4aXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2MSA6OiBGaXJzdCBpbnB1dCB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdjIgOjogU2Vjb25kIGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFByb2plY3RfeAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gb2YgdGhlIHZlY3RvciBnaXZlbiBieSAodjItdjEpIGFsb25nIHRoZQorICAgKiAgIGhvcml6b250YWwgYXhpcy4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHYxIDo6CisgICAqICAgICBGaXJzdCBpbnB1dCB2ZWN0b3IuCisgICAqICAgdjIgOjoKKyAgICogICAgIFNlY29uZCBpbnB1dCB2ZWN0b3IuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUHJvamVjdF94KCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKQEAgLTI0MzcsMjIgKzI0OTUsMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUHJvamVjdF95ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gb2YgdGhlIHZlY3RvciBnaXZlbiBieSAodjItdjEpIGFsb25nIHRoZSAgICovCi0gIC8qICAgIHZlcnRpY2FsIGF4aXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHYxIDo6IEZpcnN0IGlucHV0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB2MiA6OiBTZWNvbmQgaW5wdXQgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgZGlzdGFuY2UgaW4gRjI2ZG90NiBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgUHJvamVjdF95CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlcyB0aGUgcHJvamVjdGlvbiBvZiB0aGUgdmVjdG9yIGdpdmVuIGJ5ICh2Mi12MSkgYWxvbmcgdGhlCisgICAqICAgdmVydGljYWwgYXhpcy4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHYxIDo6CisgICAqICAgICBGaXJzdCBpbnB1dCB2ZWN0b3IuCisgICAqICAgdjIgOjoKKyAgICogICAgIFNlY29uZCBpbnB1dCB2ZWN0b3IuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgVGhlIGRpc3RhbmNlIGluIEYyNmRvdDYgZm9ybWF0LgorICAgKi8KICAgc3RhdGljIEZUX0YyNkRvdDYKICAgUHJvamVjdF95KCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKQEAgLTI0NjUsMTUgKzI1MjUsMTUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZV9GdW5jcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZXMgdGhlIHByb2plY3Rpb24gYW5kIG1vdmVtZW50IGZ1bmN0aW9uIHBvaW50ZXJzIGFjY29yZGluZyAgICovCi0gIC8qICAgIHRvIHRoZSBjdXJyZW50IGdyYXBoaWNzIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBDb21wdXRlX0Z1bmNzCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBDb21wdXRlcyB0aGUgcHJvamVjdGlvbiBhbmQgbW92ZW1lbnQgZnVuY3Rpb24gcG9pbnRlcnMgYWNjb3JkaW5nCisgICAqICAgdG8gdGhlIGN1cnJlbnQgZ3JhcGhpY3Mgc3RhdGUuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBDb21wdXRlX0Z1bmNzKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtMjUyOCwyOCArMjU4OCwzMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3JtYWxpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3JtcyBhIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBWeCA6OiBUaGUgaG9yaXpvbnRhbCBpbnB1dCB2ZWN0b3IgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVnkgOjogVGhlIHZlcnRpY2FsIGlucHV0IHZlY3RvciBjb29yZGluYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUiAgOjogVGhlIG5vcm1lZCB1bml0IHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmV0dXJucyBGQUlMVVJFIGlmIGEgdmVjdG9yIHBhcmFtZXRlciBpcyB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW4gY2FzZSBWeCBhbmQgVnkgYXJlIGJvdGggemVybywgYE5vcm1hbGl6ZScgcmV0dXJucyBTVUNDRVNTLCBhbmQgICovCi0gIC8qICAgIFIgaXMgdW5kZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBOb3JtYWxpemUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIE5vcm1zIGEgdmVjdG9yLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgVnggOjoKKyAgICogICAgIFRoZSBob3Jpem9udGFsIGlucHV0IHZlY3RvciBjb29yZGluYXRlLgorICAgKiAgIFZ5IDo6CisgICAqICAgICBUaGUgdmVydGljYWwgaW5wdXQgdmVjdG9yIGNvb3JkaW5hdGUuCisgICAqCisgICAqIEBPdXRwdXQ6CisgICAqICAgUiA6OgorICAgKiAgICAgVGhlIG5vcm1lZCB1bml0IHZlY3Rvci4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBSZXR1cm5zIEZBSUxVUkUgaWYgYSB2ZWN0b3IgcGFyYW1ldGVyIGlzIHplcm8uCisgICAqCisgICAqIEBOb3RlOgorICAgKiAgIEluIGNhc2UgVnggYW5kIFZ5IGFyZSBib3RoIHplcm8sIGBOb3JtYWxpemUnIHJldHVybnMgU1VDQ0VTUywgYW5kCisgICAqICAgUiBpcyB1bmRlZmluZWQuCisgICAqLwogICBzdGF0aWMgRlRfQm9vbAogICBOb3JtYWxpemUoIEZUX0YyNkRvdDYgICAgICBWeCwKICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgVnksCkBAIC0yNTc3LDExICsyNjQwLDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSGVyZSB3ZSBzdGFydCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmFyaW91cyBvcGNvZGVzLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEhlcmUgd2Ugc3RhcnQgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgb3Bjb2Rlcy4KKyAgICoKKyAgICovCiAKIAogI2RlZmluZSBBUlJBWV9CT1VORF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yNTkyLDEyICsyNjU1LDEyIEBACiAgICAgfSB3aGlsZSAoMCkKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTVBQRU1bXTogICAgICBNZWFzdXJlIFBpeGVsIFBlciBFTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiBFdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNUFBFTVtdOiAgICAgIE1lYXN1cmUgUGl4ZWwgUGVyIEVNCisgICAqIE9wY29kZSByYW5nZTogMHg0QgorICAgKiBTdGFjazogICAgICAgIC0tPiBFdWludDE2CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTVBQRU0oIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMjYwNiwxMiArMjY2OSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1QU1tdOiAgICAgICAgTWVhc3VyZSBQb2ludCBTaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gRXVpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTVBTW106ICAgICAgICBNZWFzdXJlIFBvaW50IFNpemUKKyAgICogT3Bjb2RlIHJhbmdlOiAweDRDCisgICAqIFN0YWNrOiAgICAgICAgLS0+IEV1aW50MTYKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19NUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTI2MzMsMTIgKzI2OTYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBEVVBbXTogICAgICAgIERVUGxpY2F0ZSB0aGUgc3RhY2sncyB0b3AgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiBTdGtFbHQgU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERVUFtdOiAgICAgICAgRFVQbGljYXRlIHRoZSBzdGFjaydzIHRvcCBlbGVtZW50CisgICAqIE9wY29kZSByYW5nZTogMHgyMAorICAgKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gU3RrRWx0IFN0a0VsdAorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0RVUCggRlRfTG9uZyogIGFyZ3MgKQogICB7CkBAIC0yNjQ2LDEyICsyNzA5LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUE9QW106ICAgICAgICBQT1AgdGhlIHN0YWNrJ3MgdG9wIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBQT1BbXTogICAgICAgIFBPUCB0aGUgc3RhY2sncyB0b3AgZWxlbWVudAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjEKKyAgICogU3RhY2s6ICAgICAgICBTdGtFbHQgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUE9QKCB2b2lkICkKICAgewpAQCAtMjY1OSwxMiArMjcyMiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENMRUFSW106ICAgICAgQ0xFQVIgdGhlIGVudGlyZSBzdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBTdGtFbHQuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ0xFQVJbXTogICAgICBDTEVBUiB0aGUgZW50aXJlIHN0YWNrCisgICAqIE9wY29kZSByYW5nZTogMHgyMgorICAgKiBTdGFjazogICAgICAgIFN0a0VsdC4uLiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19DTEVBUiggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTI2NzIsMTIgKzI3MzUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTV0FQW106ICAgICAgIFNXQVAgdGhlIHN0YWNrJ3MgdG9wIHR3byBlbGVtZW50cyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgMiAqIFN0a0VsdCAtLT4gMiAqIFN0a0VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNXQVBbXTogICAgICAgU1dBUCB0aGUgc3RhY2sncyB0b3AgdHdvIGVsZW1lbnRzCisgICAqIE9wY29kZSByYW5nZTogMHgyMworICAgKiBTdGFjazogICAgICAgIDIgKiBTdGtFbHQgLS0+IDIgKiBTdGtFbHQKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TV0FQKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI2OTAsMTIgKzI3NTMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBERVBUSFtdOiAgICAgIHJldHVybiB0aGUgc3RhY2sgREVQVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+IHVpbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERFUFRIW106ICAgICAgcmV0dXJuIHRoZSBzdGFjayBERVBUSAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjQKKyAgICogU3RhY2s6ICAgICAgICAtLT4gdWludDMyCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfREVQVEgoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMjcwNCwxMiArMjc2NywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIExUW106ICAgICAgICAgTGVzcyBUaGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTFRbXTogICAgICAgICBMZXNzIFRoYW4KKyAgICogT3Bjb2RlIHJhbmdlOiAweDUwCisgICAqIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gYm9vbAorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0xUKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI3MTcsMTIgKzI3ODAsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBMVEVRW106ICAgICAgIExlc3MgVGhhbiBvciBFUXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIExURVFbXTogICAgICAgTGVzcyBUaGFuIG9yIEVRdWFsCisgICAqIE9wY29kZSByYW5nZTogMHg1MQorICAgKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19MVEVRKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI3MzAsMTIgKzI3OTMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHVFtdOiAgICAgICAgIEdyZWF0ZXIgVGhhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdUW106ICAgICAgICAgR3JlYXRlciBUaGFuCisgICAqIE9wY29kZSByYW5nZTogMHg1MgorICAgKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19HVCggRlRfTG9uZyogIGFyZ3MgKQogICB7CkBAIC0yNzQzLDEyICsyODA2LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogR1RFUVtdOiAgICAgICBHcmVhdGVyIFRoYW4gb3IgRVF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBHVEVRW106ICAgICAgIEdyZWF0ZXIgVGhhbiBvciBFUXVhbAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NTMKKyAgICogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBib29sCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfR1RFUSggRlRfTG9uZyogIGFyZ3MgKQogICB7CkBAIC0yNzU2LDEyICsyODE5LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRVFbXTogICAgICAgICBFUXVhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBFUVtdOiAgICAgICAgIEVRdWFsCisgICAqIE9wY29kZSByYW5nZTogMHg1NAorICAgKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19FUSggRlRfTG9uZyogIGFyZ3MgKQogICB7CkBAIC0yNzY5LDEyICsyODMyLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTkVRW106ICAgICAgICBOb3QgRVF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBTdGtFbHQgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBORVFbXTogICAgICAgIE5vdCBFUXVhbAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NTUKKyAgICogU3RhY2s6ICAgICAgICBTdGtFbHQgU3RrRWx0IC0tPiBib29sCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTkVRKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI3ODIsMTIgKzI4NDUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPRERbXTogICAgICAgIElzIE9ERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE9ERFtdOiAgICAgICAgSXMgT0RECisgICAqIE9wY29kZSByYW5nZTogMHg1NgorICAgKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBib29sCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfT0REKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0yNzk2LDEyICsyODU5LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRVZFTltdOiAgICAgICBJcyBFVkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBFVkVOW106ICAgICAgIElzIEVWRU4KKyAgICogT3Bjb2RlIHJhbmdlOiAweDU3CisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGJvb2wKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19FVkVOKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMjgxMCwxMiArMjg3MywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFORFtdOiAgICAgICAgbG9naWNhbCBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQU5EW106ICAgICAgICBsb2dpY2FsIEFORAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NUEKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiB1aW50MzIKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19BTkQoIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMjgyMywxMiArMjg4NiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9SW106ICAgICAgICAgbG9naWNhbCBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogT1JbXTogICAgICAgICBsb2dpY2FsIE9SCisgICAqIE9wY29kZSByYW5nZTogMHg1QgorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+IHVpbnQzMgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX09SKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI4MzYsMTIgKzI4OTksMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOT1RbXTogICAgICAgIGxvZ2ljYWwgTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE5PVFtdOiAgICAgICAgbG9naWNhbCBOT1QKKyAgICogT3Bjb2RlIHJhbmdlOiAweDVDCisgICAqIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPiB1aW50MzIKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19OT1QoIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMjg0OSwxMiArMjkxMiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFERFtdOiAgICAgICAgQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQUREW106ICAgICAgICBBREQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDYwCisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfQUREKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI4NjIsMTIgKzI5MjUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTVUJbXTogICAgICAgIFNVQnRyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNVQltdOiAgICAgICAgU1VCdHJhY3QKKyAgICogT3Bjb2RlIHJhbmdlOiAweDYxCisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU1VCKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI4NzUsMTIgKzI5MzgsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBESVZbXTogICAgICAgIERJVmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERJVltdOiAgICAgICAgRElWaWRlCisgICAqIE9wY29kZSByYW5nZTogMHg2MgorICAgKiBTdGFjazogICAgICAgIGYyNi42IGYyNi42IC0tPiBmMjYuNgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0RJViggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMjg5MiwxMiArMjk1NSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1VTFtdOiAgICAgICAgTVVMdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTVVMW106ICAgICAgICBNVUx0aXBseQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NjMKKyAgICogU3RhY2s6ICAgICAgICBmMjYuNiBmMjYuNiAtLT4gZjI2LjYKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19NVUwoIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMjkwNSwxMiArMjk2OCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEFCU1tdOiAgICAgICAgQUJTb2x1dGUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQUJTW106ICAgICAgICBBQlNvbHV0ZSB2YWx1ZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NjQKKyAgICogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19BQlMoIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMjkxOSwxMiArMjk4MiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5FR1tdOiAgICAgICAgTkVHYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTkVHW106ICAgICAgICBORUdhdGUKKyAgICogT3Bjb2RlIHJhbmdlOiAweDY1CisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTkVHKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTI5MzIsMTIgKzI5OTUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGTE9PUltdOiAgICAgIEZMT09SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZMT09SW106ICAgICAgRkxPT1IKKyAgICogT3Bjb2RlIHJhbmdlOiAweDY2CisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfRkxPT1IoIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMjk0NSwyNSArMzAwOCwyNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENFSUxJTkdbXTogICAgQ0VJTElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ0VJTElOR1tdOiAgICBDRUlMSU5HCisgICAqIE9wY29kZSByYW5nZTogMHg2NworICAgKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0NFSUxJTkcoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIGFyZ3NbMF0gPSBGVF9QSVhfQ0VJTCggYXJnc1swXSApOworICAgIGFyZ3NbMF0gPSBGVF9QSVhfQ0VJTF9MT05HKCBhcmdzWzBdICk7CiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUlNbXTogICAgICAgICBSZWFkIFN0b3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBSU1tdOiAgICAgICAgIFJlYWQgU3RvcmUKKyAgICogT3Bjb2RlIHJhbmdlOiAweDQzCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiB1aW50MzIKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19SUyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zMDA0LDEyICszMDY3LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogV1NbXTogICAgICAgICBXcml0ZSBTdG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBXU1tdOiAgICAgICAgIFdyaXRlIFN0b3JlCisgICAqIE9wY29kZSByYW5nZTogMHg0MgorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfV1MoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMzAyNywxMiArMzA5MCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFdDVlRQW106ICAgICAgV3JpdGUgQ1ZUIGluIFBpeGVsIHVuaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogV0NWVFBbXTogICAgICBXcml0ZSBDVlQgaW4gUGl4ZWwgdW5pdHMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDQ0CisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1dDVlRQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTMwNTAsMTIgKzMxMTMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBXQ1ZURltdOiAgICAgIFdyaXRlIENWVCBpbiBGdW5pdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFdDVlRGW106ICAgICAgV3JpdGUgQ1ZUIGluIEZ1bml0cworICAgKiBPcGNvZGUgcmFuZ2U6IDB4NzAKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1dDVlRGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTMwNzMsMTIgKzMxMzYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSQ1ZUW106ICAgICAgIFJlYWQgQ1ZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJDVlRbXTogICAgICAgUmVhZCBDVlQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDQ1CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiBmMjYuNgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1JDVlQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zMDk4LDEyICszMTYxLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQUFbXTogICAgICAgICBBZGp1c3QgQW5nbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBQVtdOiAgICAgICAgIEFkanVzdCBBbmdsZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4N0YKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfQUEoIHZvaWQgKQogICB7CkBAIC0zMTExLDE0ICszMTc0LDE0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogREVCVUdbXTogICAgICBERUJVRy4gIFVuc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5vdGU6IFRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiBwb3BzIGEgdmFsdWUgZnJvbSB0aGUgc3RhY2suICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERFQlVHW106ICAgICAgREVCVUcuICBVbnN1cHBvcnRlZC4KKyAgICogT3Bjb2RlIHJhbmdlOiAweDRGCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKgorICAgKiBOb3RlOiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcG9wcyBhIHZhbHVlIGZyb20gdGhlIHN0YWNrLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0RFQlVHKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtMzEyNiwxMiArMzE4OSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJPVU5EW2FiXTogICAgUk9VTkQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjgtMHg2QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUk9VTkRbYWJdOiAgICBST1VORCB2YWx1ZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NjgtMHg2QgorICAgKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1JPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTMxNDMsMTIgKzMyMDYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOUk9VTkRbYWJdOiAgIE5vIFJPVU5EaW5nIG9mIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDZDLTB4NkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+IGYyNi42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE5ST1VORFthYl06ICAgTm8gUk9VTkRpbmcgb2YgdmFsdWUKKyAgICogT3Bjb2RlIHJhbmdlOiAweDZDLTB4NkYKKyAgICogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gZjI2LjYKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19OUk9VTkQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTMxNjAsMTIgKzMyMjMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNQVhbXTogICAgICAgIE1BWGltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDhCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1BWFtdOiAgICAgICAgTUFYaW11bQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4OEIKKyAgICogU3RhY2s6ICAgICAgICBpbnQzMj8gaW50MzI/IC0tPiBpbnQzMgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX01BWCggRlRfTG9uZyogIGFyZ3MgKQogICB7CkBAIC0zMTc0LDEyICszMjM3LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTUlOW106ICAgICAgICBNSU5pbXVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg4QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNSU5bXTogICAgICAgIE1JTmltdW0KKyAgICogT3Bjb2RlIHJhbmdlOiAweDhDCisgICAqIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19NSU4oIEZUX0xvbmcqICBhcmdzICkKICAgewpAQCAtMzE4OCwxMiArMzI1MSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1JTkRFWFtdOiAgICAgTW92ZSBJTkRFWGVkIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMj8gLS0+IFN0a0VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTUlOREVYW106ICAgICBNb3ZlIElOREVYZWQgZWxlbWVudAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjYKKyAgICogU3RhY2s6ICAgICAgICBpbnQzMj8gLS0+IFN0a0VsdAorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX01JTkRFWCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtMzIyMSwxMiArMzI4NCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENJTkRFWFtdOiAgICAgQ29weSBJTkRFWGVkIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gU3RrRWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQ0lOREVYW106ICAgICBDb3B5IElOREVYZWQgZWxlbWVudAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjUKKyAgICogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gU3RrRWx0CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfQ0lOREVYKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zMjQ3LDEyICszMzEwLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUk9MTFtdOiAgICAgICBST0xMIHRvcCB0aHJlZSBlbGVtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg4QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIDMgKiBTdGtFbHQgLS0+IDMgKiBTdGtFbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBST0xMW106ICAgICAgIFJPTEwgdG9wIHRocmVlIGVsZW1lbnRzCisgICAqIE9wY29kZSByYW5nZTogMHg4QQorICAgKiBTdGFjazogICAgICAgIDMgKiBTdGtFbHQgLS0+IDMgKiBTdGtFbHQKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19ST0xMKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTMyNjksMTkgKzMzMzIsMTkgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNQU5BR0lORyBUSEUgRkxPVyBPRiBDT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTUFOQUdJTkcgVEhFIEZMT1cgT0YgQ09OVFJPTAorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU0xPT1BbXTogICAgICBTZXQgTE9PUCB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGludDMyPyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTTE9PUFtdOiAgICAgIFNldCBMT09QIHZhcmlhYmxlCisgICAqIE9wY29kZSByYW5nZTogMHgxNworICAgKiBTdGFjazogICAgICAgIGludDMyPyAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TTE9PUCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zMjg5LDcgKzMzNTIsMTAgQEAKICAgICBpZiAoIGFyZ3NbMF0gPCAwICkKICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggQmFkX0FyZ3VtZW50ICk7CiAgICAgZWxzZQotICAgICAgZXhjLT5HUy5sb29wID0gYXJnc1swXTsKKyAgICB7CisgICAgICAvKiB3ZSBoZXVyaXN0aWNhbGx5IGxpbWl0IHRoZSBudW1iZXIgb2YgbG9vcHMgdG8gMTYgYml0cyAqLworICAgICAgZXhjLT5HUy5sb29wID0gYXJnc1swXSA+IDB4RkZGRkwgPyAweEZGRkZMIDogYXJnc1swXTsKKyAgICB9CiAgIH0KIAogCkBAIC0zMzIwLDEyICszMzg2LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSUZbXTogICAgICAgICBJRiB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJRltdOiAgICAgICAgIElGIHRlc3QKKyAgICogT3Bjb2RlIHJhbmdlOiAweDU4CisgICAqIFN0YWNrOiAgICAgICAgU3RrRWx0IC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0lGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTMzNjQsMTIgKzM0MzAsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFTFNFW106ICAgICAgIEVMU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDFCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEVMU0VbXTogICAgICAgRUxTRQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MUIKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19FTFNFKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtMzM5NywxMiArMzQ2MywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVJRltdOiAgICAgICAgRW5kIElGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRUlGW106ICAgICAgICBFbmQgSUYKKyAgICogT3Bjb2RlIHJhbmdlOiAweDU5CisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfRUlGKCB2b2lkICkKICAgewpAQCAtMzQxMCwxMiArMzQ3NiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEpNUFJbXTogICAgICAgSnVNUCBSZWxhdGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSk1QUltdOiAgICAgICBKdU1QIFJlbGF0aXZlCisgICAqIE9wY29kZSByYW5nZTogMHgxQworICAgKiBTdGFjazogICAgICAgIGludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0pNUFIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zNDQ1LDEyICszNTExLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSlJPVFtdOiAgICAgICBKdW1wIFJlbGF0aXZlIE9uIFRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIFN0a0VsdCBpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBKUk9UW106ICAgICAgIEp1bXAgUmVsYXRpdmUgT24gVHJ1ZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NzgKKyAgICogU3RhY2s6ICAgICAgICBTdGtFbHQgaW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfSlJPVCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTM0NjAsMTIgKzM1MjYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBKUk9GW106ICAgICAgIEp1bXAgUmVsYXRpdmUgT24gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDc5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgU3RrRWx0IGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEpST0ZbXTogICAgICAgSnVtcCBSZWxhdGl2ZSBPbiBGYWxzZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NzkKKyAgICogU3RhY2s6ICAgICAgICBTdGtFbHQgaW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfSlJPRiggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTM0NzUsMTkgKzM1NDEsMTkgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBERUZJTklORyBBTkQgVVNJTkcgRlVOQ1RJT05TIEFORCBJTlNUUlVDVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogREVGSU5JTkcgQU5EIFVTSU5HIEZVTkNUSU9OUyBBTkQgSU5TVFJVQ1RJT05TCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGREVGW106ICAgICAgIEZ1bmN0aW9uIERFRmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZERUZbXTogICAgICAgRnVuY3Rpb24gREVGaW5pdGlvbgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MkMKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfRkRFRiggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTM3ODUsMTIgKzM4NTEsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFTkRGW106ICAgICAgIEVORCBGdW5jdGlvbiBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEVOREZbXTogICAgICAgRU5EIEZ1bmN0aW9uIGRlZmluaXRpb24KKyAgICogT3Bjb2RlIHJhbmdlOiAweDJECisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfRU5ERiggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTM4MzQsMTIgKzM5MDAsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBDQUxMW106ICAgICAgIENBTEwgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyPyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIENBTExbXTogICAgICAgQ0FMTCBmdW5jdGlvbgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MkIKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzI/IC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0NBTEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC0zOTIzLDEyICszOTg5LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTE9PUENBTExbXTogICBMT09QIGFuZCBDQUxMIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgyQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMj8gRWludDE2PyAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBMT09QQ0FMTFtdOiAgIExPT1AgYW5kIENBTEwgZnVuY3Rpb24KKyAgICogT3Bjb2RlIHJhbmdlOiAweDJBCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyPyBFaW50MTY/IC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0xPT1BDQUxMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQwMTYsMTIgKzQwODIsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJREVGW106ICAgICAgIEluc3RydWN0aW9uIERFRmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDg5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgRWludDggLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIElERUZbXTogICAgICAgSW5zdHJ1Y3Rpb24gREVGaW5pdGlvbgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4ODkKKyAgICogU3RhY2s6ICAgICAgICBFaW50OCAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19JREVGKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDA5MSwxOSArNDE1NywxOSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBVU0hJTkcgREFUQSBPTlRPIFRIRSBJTlRFUlBSRVRFUiBTVEFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBQVVNISU5HIERBVEEgT05UTyBUSEUgSU5URVJQUkVURVIgU1RBQ0sKKyAgICoKKyAgICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5QVVNIQltdOiAgICAgUFVTSCBOIEJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gdWludDMyLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTlBVU0hCW106ICAgICBQVVNIIE4gQnl0ZXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDQwCisgICAqIFN0YWNrOiAgICAgICAgLS0+IHVpbnQzMi4uLgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX05QVVNIQiggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDEyNiwxMiArNDE5MiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE5QVVNIV1tdOiAgICAgUFVTSCBOIFdvcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gaW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTlBVU0hXW106ICAgICBQVVNIIE4gV29yZHMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDQxCisgICAqIFN0YWNrOiAgICAgICAgLS0+IGludDMyLi4uCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTlBVU0hXKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00MTU3LDEyICs0MjIzLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUFVTSEJbYWJjXTogICBQVVNIIEJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHhCMC0weEI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiB1aW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBQVVNIQlthYmNdOiAgIFBVU0ggQnl0ZXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweEIwLTB4QjcKKyAgICogU3RhY2s6ICAgICAgICAtLT4gdWludDMyLi4uCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUFVTSEIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDE4MywxMiArNDI0OSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFBVU0hXW2FiY106ICAgUFVTSCBXb3JkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4QjgtMHhCRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gaW50MzIuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUFVTSFdbYWJjXTogICBQVVNIIFdvcmRzCisgICAqIE9wY29kZSByYW5nZTogMHhCOC0weEJGCisgICAqIFN0YWNrOiAgICAgICAgLS0+IGludDMyLi4uCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUFVTSFcoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDIxMywxMSArNDI3OSwxMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1BTkFHSU5HIFRIRSBHUkFQSElDUyBTVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNQU5BR0lORyBUSEUgR1JBUEhJQ1MgU1RBVEUKKyAgICoKKyAgICovCiAKIAogICBzdGF0aWMgRlRfQm9vbApAQCAtNDI3MSwyMCArNDMzNywyMCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNWVENBW2FdOiAgICAgU2V0IChGIGFuZCBQKSBWZWN0b3JzIHRvIENvb3JkaW5hdGUgQXhpcyAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MDAtMHgwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTUHZUQ0FbYV06ICAgIFNldCBQVmVjdG9yIHRvIENvb3JkaW5hdGUgQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDAyLTB4MDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU0Z2VENBW2FdOiAgICBTZXQgRlZlY3RvciB0byBDb29yZGluYXRlIEF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwNC0weDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTVlRDQVthXTogICAgIFNldCAoRiBhbmQgUCkgVmVjdG9ycyB0byBDb29yZGluYXRlIEF4aXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDAwLTB4MDEKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICoKKyAgICogU1B2VENBW2FdOiAgICBTZXQgUFZlY3RvciB0byBDb29yZGluYXRlIEF4aXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDAyLTB4MDMKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICoKKyAgICogU0Z2VENBW2FdOiAgICBTZXQgRlZlY3RvciB0byBDb29yZGluYXRlIEF4aXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDA0LTB4MDUKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TeHlUQ0EoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CkBAIC00MzE1LDEyICs0MzgxLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1B2VExbYV06ICAgICBTZXQgUFZlY3RvciBUbyBMaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwNi0weDA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTUHZUTFthXTogICAgIFNldCBQVmVjdG9yIFRvIExpbmUKKyAgICogT3Bjb2RlIHJhbmdlOiAweDA2LTB4MDcKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NQVlRMKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQzMzYsMTIgKzQ0MDIsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTRnZUTFthXTogICAgIFNldCBGVmVjdG9yIFRvIExpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDA4LTB4MDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNGdlRMW2FdOiAgICAgU2V0IEZWZWN0b3IgVG8gTGluZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MDgtMHgwOQorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0ZWVEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDM1NiwxMiArNDQyMiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNGdlRQdltdOiAgICAgU2V0IEZWZWN0b3IgVG8gUFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0Z2VFB2W106ICAgICBTZXQgRlZlY3RvciBUbyBQVmVjdG9yCisgICAqIE9wY29kZSByYW5nZTogMHgwRQorICAgKiBTdGFjazogICAgICAgIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NGVlRQViggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTQzNzAsMTIgKzQ0MzYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTUHZGU1tdOiAgICAgIFNldCBQVmVjdG9yIEZyb20gU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjIuMTQgZjIuMTQgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNQdkZTW106ICAgICAgU2V0IFBWZWN0b3IgRnJvbSBTdGFjaworICAgKiBPcGNvZGUgcmFuZ2U6IDB4MEEKKyAgICogU3RhY2s6ICAgICAgICBmMi4xNCBmMi4xNCAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TUFZGUyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00Mzk3LDEyICs0NDYzLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU0Z2RlNbXTogICAgICBTZXQgRlZlY3RvciBGcm9tIFN0YWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyLjE0IGYyLjE0IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTRnZGU1tdOiAgICAgIFNldCBGVmVjdG9yIEZyb20gU3RhY2sKKyAgICogT3Bjb2RlIHJhbmdlOiAweDBCCisgICAqIFN0YWNrOiAgICAgICAgZjIuMTQgZjIuMTQgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0ZWRlMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDQyMiwxMiArNDQ4OCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEdQdltdOiAgICAgICAgR2V0IFByb2plY3Rpb24gVmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBlZjIuMTQgLS0+IGVmMi4xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR1B2W106ICAgICAgICBHZXQgUHJvamVjdGlvbiBWZWN0b3IKKyAgICogT3Bjb2RlIHJhbmdlOiAweDBDCisgICAqIFN0YWNrOiAgICAgICAgZWYyLjE0IC0tPiBlZjIuMTQKKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19HUFYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ0MzcsMTIgKzQ1MDMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHRnZbXTogICAgICAgIEdldCBGcmVlZG9tIFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZWYyLjE0IC0tPiBlZjIuMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdGdltdOiAgICAgICAgR2V0IEZyZWVkb20gVmVjdG9yCisgICAqIE9wY29kZSByYW5nZTogMHgwRAorICAgKiBTdGFjazogICAgICAgIGVmMi4xNCAtLT4gZWYyLjE0CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfR0ZWKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00NDUyLDEyICs0NTE4LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1JQMFtdOiAgICAgICBTZXQgUmVmZXJlbmNlIFBvaW50IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTUlAwW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MTAKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU1JQMCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ0NjYsMTIgKzQ1MzIsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTUlAxW106ICAgICAgIFNldCBSZWZlcmVuY2UgUG9pbnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNSUDFbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAxCisgICAqIE9wY29kZSByYW5nZTogMHgxMQorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TUlAxKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDQ4MCwxMiArNDU0NiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNSUDJbXTogICAgICAgU2V0IFJlZmVyZW5jZSBQb2ludCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU1JQMltdOiAgICAgICBTZXQgUmVmZXJlbmNlIFBvaW50IDIKKyAgICogT3Bjb2RlIHJhbmdlOiAweDEyCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NSUDIoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00NDk0LDEyICs0NTYwLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU01EW106ICAgICAgICBTZXQgTWluaW11bSBEaXN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTTURbXTogICAgICAgIFNldCBNaW5pbXVtIERpc3RhbmNlCisgICAqIE9wY29kZSByYW5nZTogMHgxQQorICAgKiBTdGFjazogICAgICAgIGYyNi42IC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NNRCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDUwOCwxMiArNDU3NCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNDVlRDSVtdOiAgICAgU2V0IENvbnRyb2wgVmFsdWUgVGFibGUgQ3V0IEluICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0NWVENJW106ICAgICBTZXQgQ29udHJvbCBWYWx1ZSBUYWJsZSBDdXQgSW4KKyAgICogT3Bjb2RlIHJhbmdlOiAweDFECisgICAqIFN0YWNrOiAgICAgICAgZjI2LjYgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0NWVENJKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00NTIyLDEyICs0NTg4LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1NXQ0lbXTogICAgICBTZXQgU2luZ2xlIFdpZHRoIEN1dCBJbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTU1dDSVtdOiAgICAgIFNldCBTaW5nbGUgV2lkdGggQ3V0IEluCisgICAqIE9wY29kZSByYW5nZTogMHgxRQorICAgKiBTdGFjazogICAgICAgIGYyNi42IC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NTV0NJKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ1MzYsMTIgKzQ2MDIsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTU1dbXTogICAgICAgIFNldCBTaW5nbGUgV2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDFGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNTV1tdOiAgICAgICAgU2V0IFNpbmdsZSBXaWR0aAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MUYKKyAgICogU3RhY2s6ICAgICAgICBpbnQzMj8gLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU1NXKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00NTUxLDEyICs0NjE3LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRkxJUE9OW106ICAgICBTZXQgYXV0by1GTElQIHRvIE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg0RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBGTElQT05bXTogICAgIFNldCBhdXRvLUZMSVAgdG8gT04KKyAgICogT3Bjb2RlIHJhbmdlOiAweDRECisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfRkxJUE9OKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNDU2NCwxMiArNDYzMCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZMSVBPRkZbXTogICAgU2V0IGF1dG8tRkxJUCB0byBPRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRkxJUE9GRltdOiAgICBTZXQgYXV0by1GTElQIHRvIE9GRgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NEUKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19GTElQT0ZGKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNDU3NywxMiArNDY0MywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNBTkdXW106ICAgICAgU2V0IEFOR2xlIFdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0FOR1dbXTogICAgICBTZXQgQU5HbGUgV2VpZ2h0CisgICAqIE9wY29kZSByYW5nZTogMHg3RQorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TQU5HVyggdm9pZCApCiAgIHsKQEAgLTQ1OTAsMTIgKzQ2NTYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTREJbXTogICAgICAgIFNldCBEZWx0YSBCYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNEQltdOiAgICAgICAgU2V0IERlbHRhIEJhc2UKKyAgICogT3Bjb2RlIHJhbmdlOiAweDVFCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NEQiggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDYwNCwxMiArNDY3MCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNEU1tdOiAgICAgICAgU2V0IERlbHRhIFNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0RTW106ICAgICAgICBTZXQgRGVsdGEgU2hpZnQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDVGCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NEUyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDYyMSwxMiArNDY4NywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJUSEdbXTogICAgICAgUm91bmQgVG8gSGFsZiBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUlRIR1tdOiAgICAgICBSb3VuZCBUbyBIYWxmIEdyaWQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDE5CisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUlRIRyggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTQ2MzUsMTIgKzQ3MDEsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSVEdbXTogICAgICAgIFJvdW5kIFRvIEdyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFJUR1tdOiAgICAgICAgUm91bmQgVG8gR3JpZAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MTgKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19SVEcoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CkBAIC00NjQ5LDExICs0NzE1LDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiBSVERHW106ICAgICAgIFJvdW5kIFRvIERvdWJsZSBHcmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFJUREdbXTogICAgICAgUm91bmQgVG8gRG91YmxlIEdyaWQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDNECisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUlRERyggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTQ2NjIsMTEgKzQ3MjgsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qIFJVVEdbXTogICAgICAgUm91bmQgVXAgVG8gR3JpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogUlVUR1tdOiAgICAgICBSb3VuZCBVcCBUbyBHcmlkCisgICAqIE9wY29kZSByYW5nZTogMHg3QworICAgKiBTdGFjazogICAgICAgIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1JVVEcoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CkBAIC00Njc1LDEyICs0NzQxLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUkRUR1tdOiAgICAgICBSb3VuZCBEb3duIFRvIEdyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBSRFRHW106ICAgICAgIFJvdW5kIERvd24gVG8gR3JpZAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4N0QKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19SRFRHKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNDY4OSwxMiArNDc1NSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFJPRkZbXTogICAgICAgUm91bmQgT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4N0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUk9GRltdOiAgICAgICBSb3VuZCBPRkYKKyAgICogT3Bjb2RlIHJhbmdlOiAweDdBCisgICAqIFN0YWNrOiAgICAgICAgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfUk9GRiggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTQ3MDMsMTIgKzQ3NjksMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTUk9VTkRbXTogICAgIFN1cGVyIFJPVU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgRWludDggLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNST1VORFtdOiAgICAgU3VwZXIgUk9VTkQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDc2CisgICAqIFN0YWNrOiAgICAgICAgRWludDggLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU1JPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC00NzIwLDEyICs0Nzg2LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUzQ1Uk9VTkRbXTogICBTdXBlciBST1VORCA0NSBkZWdyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTNDVST1VORFtdOiAgIFN1cGVyIFJPVU5EIDQ1IGRlZ3JlZXMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDc3CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1M0NVJPVU5EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ3MzcsMTUgKzQ4MDMsMTUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHQ1thXTogICAgICAgIEdldCBDb29yZGluYXRlIHByb2plY3RlZCBvbnRvICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDQ2LTB4NDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IE1lYXN1cmVzIGZyb20gdGhlIG9yaWdpbmFsIGdseXBoIG11c3QgYmUgdGFrZW4gICAgICovCi0gIC8qICAgICAgYWxvbmcgdGhlIGR1YWwgcHJvamVjdGlvbiB2ZWN0b3IhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdDW2FdOiAgICAgICAgR2V0IENvb3JkaW5hdGUgcHJvamVjdGVkIG9udG8KKyAgICogT3Bjb2RlIHJhbmdlOiAweDQ2LTB4NDcKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+IGYyNi42CisgICAqCisgICAqIFhYWDogVU5ET0NVTUVOVEVEOiBNZWFzdXJlcyBmcm9tIHRoZSBvcmlnaW5hbCBnbHlwaCBtdXN0IGJlIHRha2VuCisgICAqICAgICAgYWxvbmcgdGhlIGR1YWwgcHJvamVjdGlvbiB2ZWN0b3IhCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfR0MoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNDc3NCwxNiArNDg0MCwxNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNDRlNbXTogICAgICAgU2V0IENvb3JkaW5hdGUgRnJvbSBTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGb3JtdWxhOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgT0EgOj0gT0EgKyAoIHZhbHVlIC0gT0EucCApLyggZi5wICkgKiBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNDRlNbXTogICAgICAgU2V0IENvb3JkaW5hdGUgRnJvbSBTdGFjaworICAgKiBPcGNvZGUgcmFuZ2U6IDB4NDgKKyAgICogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+CisgICAqCisgICAqIEZvcm11bGE6CisgICAqCisgICAqICAgT0EgOj0gT0EgKyAoIHZhbHVlIC0gT0EucCApLyggZi5wICkgKiBmCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0NGUyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ4MTIsMjEgKzQ4NzgsMjEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNRFthXTogICAgICAgIE1lYXN1cmUgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDQ5LTB4NEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IE1lYXN1cmUgdGFrZW4gaW4gdGhlIG9yaWdpbmFsIGdseXBoIG11c3QgYmUgYWxvbmcgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICB0aGUgZHVhbCBwcm9qZWN0aW9uIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IEZsYWcgYXR0cmlidXRlcyBhcmUgaW52ZXJ0ZWQhICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIDAgPT4gbWVhc3VyZSBkaXN0YW5jZSBpbiBvcmlnaW5hbCBvdXRsaW5lICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAxID0+IG1lYXN1cmUgZGlzdGFuY2UgaW4gZ3JpZC1maXR0ZWQgb3V0bGluZSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFhYWDogVU5ET0NVTUVOVEVEOiBgenAwIC0genAxJywgYW5kIG5vdCBgenAyIC0genAxISAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1EW2FdOiAgICAgICAgTWVhc3VyZSBEaXN0YW5jZQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4NDktMHg0QQorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+IGYyNi42CisgICAqCisgICAqIFhYWDogVU5ET0NVTUVOVEVEOiBNZWFzdXJlIHRha2VuIGluIHRoZSBvcmlnaW5hbCBnbHlwaCBtdXN0IGJlIGFsb25nCisgICAqICAgICAgICAgICAgICAgICAgICB0aGUgZHVhbCBwcm9qZWN0aW9uIHZlY3Rvci4KKyAgICoKKyAgICogWFhYOiBVTkRPQ1VNRU5URUQ6IEZsYWcgYXR0cmlidXRlcyBhcmUgaW52ZXJ0ZWQhCisgICAqICAgICAgICAgICAgICAgICAgICAgIDAgPT4gbWVhc3VyZSBkaXN0YW5jZSBpbiBvcmlnaW5hbCBvdXRsaW5lCisgICAqICAgICAgICAgICAgICAgICAgICAgIDEgPT4gbWVhc3VyZSBkaXN0YW5jZSBpbiBncmlkLWZpdHRlZCBvdXRsaW5lCisgICAqCisgICAqIFhYWDogVU5ET0NVTUVOVEVEOiBgenAwIC0genAxJywgYW5kIG5vdCBgenAyIC0genAxIQorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX01EKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ4OTksMTIgKzQ5NjUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTRFB2VExbYV06ICAgIFNldCBEdWFsIFBWZWN0b3IgdG8gTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDg2LTB4ODcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNEUHZUTFthXTogICAgU2V0IER1YWwgUFZlY3RvciB0byBMaW5lCisgICAqIE9wY29kZSByYW5nZTogMHg4Ni0weDg3CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TRFBWVEwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTQ5ODIsMTIgKzUwNDgsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTWlAwW106ICAgICAgIFNldCBab25lIFBvaW50ZXIgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNaUDBbXTogICAgICAgU2V0IFpvbmUgUG9pbnRlciAwCisgICAqIE9wY29kZSByYW5nZTogMHgxMworICAgKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TWlAwKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTAxMiwxMiArNTA3OCwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNaUDFbXTogICAgICAgU2V0IFpvbmUgUG9pbnRlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU1pQMVtdOiAgICAgICBTZXQgWm9uZSBQb2ludGVyIDEKKyAgICogT3Bjb2RlIHJhbmdlOiAweDE0CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NaUDEoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC01MDQyLDEyICs1MTA4LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU1pQMltdOiAgICAgICBTZXQgWm9uZSBQb2ludGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTWlAyW106ICAgICAgIFNldCBab25lIFBvaW50ZXIgMgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MTUKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU1pQMiggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTUwNzIsMTIgKzUxMzgsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTWlBTW106ICAgICAgIFNldCBab25lIFBvaW50ZXJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNaUFNbXTogICAgICAgU2V0IFpvbmUgUG9pbnRlclMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDE2CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NaUFMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC01MTA3LDEyICs1MTczLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSU5TVENUUkxbXTogICBJTlNUcnVjdGlvbiBDb25UUm9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg4RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGludDMyIGludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJTlNUQ1RSTFtdOiAgIElOU1RydWN0aW9uIENvblRSb0wKKyAgICogT3Bjb2RlIHJhbmdlOiAweDhFCisgICAqIFN0YWNrOiAgICAgICAgaW50MzIgaW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfSU5TVENUUkwoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTE2OSwxMiArNTIzNSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNDQU5DVFJMW106ICAgU0NBTiBDb25UUm9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4ODUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzI/IC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0NBTkNUUkxbXTogICBTQ0FOIENvblRSb0wKKyAgICogT3Bjb2RlIHJhbmdlOiAweDg1CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyPyAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TQ0FOQ1RSTCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC01MjE2LDEyICs1MjgyLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU0NBTlRZUEVbXTogICBTQ0FOIFRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg4RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQxNiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBTQ0FOVFlQRVtdOiAgIFNDQU4gVFlQRQorICAgKiBPcGNvZGUgcmFuZ2U6IDB4OEQKKyAgICogU3RhY2s6ICAgICAgICB1aW50MTYgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0NBTlRZUEUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTIzMSwxOSArNTI5NywxOSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1BTkFHSU5HIE9VVExJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNQU5BR0lORyBPVVRMSU5FUworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRkxJUFBUW106ICAgICBGTElQIFBvaW5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg4MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMi4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBGTElQUFRbXTogICAgIEZMSVAgUG9pblQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDgwCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyLi4uIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0ZMSVBQVCggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKQEAgLTUyOTIsMTIgKzUzNTgsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGTElQUkdPTltdOiAgIEZMSVAgUmFuR2UgT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZMSVBSR09OW106ICAgRkxJUCBSYW5HZSBPTgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4ODEKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0ZMSVBSR09OKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTUzMzAsMTIgKzUzOTYsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBGTElQUkdPRkY6ICAgIEZMSVAgUmFuR2UgT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZMSVBSR09GRjogICAgRkxJUCBSYW5HZSBPRkYKKyAgICogT3Bjb2RlIHJhbmdlOiAweDgyCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19GTElQUkdPRkYoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTU0NDcsMTIgKzU1MTMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTSFBbYV06ICAgICAgIFNIaWZ0IFBvaW50IGJ5IHRoZSBsYXN0IHBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDMyLTB4MzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNIUFthXTogICAgICAgU0hpZnQgUG9pbnQgYnkgdGhlIGxhc3QgcG9pbnQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDMyLTB4MzMKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIuLi4gLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfU0hQKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNTUwNCwxNiArNTU3MCwxNiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNIQ1thXTogICAgICAgU0hpZnQgQ29udG91ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MzQtMzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVTkRPQ1VNRU5URUQ6IEFjY29yZGluZyB0byBHcmVnIEhpdGNoY29jaywgdGhlcmUgaXMgb25lICh2aXJ0dWFsKSAgICAgKi8KLSAgLyogICAgICAgICAgICAgICBjb250b3VyIGluIHRoZSB0d2lsaWdodCB6b25lLCBuYW1lbHkgY29udG91ciBudW1iZXIgICAgICovCi0gIC8qICAgICAgICAgICAgICAgemVybyB3aGljaCBpbmNsdWRlcyBhbGwgcG9pbnRzIG9mIGl0LiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNIQ1thXTogICAgICAgU0hpZnQgQ29udG91cgorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MzQtMzUKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqCisgICAqIFVORE9DVU1FTlRFRDogQWNjb3JkaW5nIHRvIEdyZWcgSGl0Y2hjb2NrLCB0aGVyZSBpcyBvbmUgKHZpcnR1YWwpCisgICAqICAgICAgICAgICAgICAgY29udG91ciBpbiB0aGUgdHdpbGlnaHQgem9uZSwgbmFtZWx5IGNvbnRvdXIgbnVtYmVyCisgICAqICAgICAgICAgICAgICAgemVybyB3aGljaCBpbmNsdWRlcyBhbGwgcG9pbnRzIG9mIGl0LgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX1NIQyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTU2MCwxMiArNTYyNiwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNIWlthXTogICAgICAgU0hpZnQgWm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MzYtMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU0haW2FdOiAgICAgICBTSGlmdCBab25lCisgICAqIE9wY29kZSByYW5nZTogMHgzNi0zNworICAgKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TSFooIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTU2MDgsMTIgKzU2NzQsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTSFBJWFtdOiAgICAgIFNIaWZ0IHBvaW50cyBieSBhIFBJWGVsIGFtb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgZjI2LjYgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNIUElYW106ICAgICAgU0hpZnQgcG9pbnRzIGJ5IGEgUElYZWwgYW1vdW50CisgICAqIE9wY29kZSByYW5nZTogMHgzOAorICAgKiBTdGFjazogICAgICAgIGYyNi42IHVpbnQzMi4uLiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19TSFBJWCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC01NzY4LDEyICs1ODM0LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTVNJUlBbYV06ICAgICBNb3ZlIFN0YWNrIEluZGlyZWN0IFJlbGF0aXZlIFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgzQS0weDNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIGYyNi42IHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBNU0lSUFthXTogICAgIE1vdmUgU3RhY2sgSW5kaXJlY3QgUmVsYXRpdmUgUG9zaXRpb24KKyAgICogT3Bjb2RlIHJhbmdlOiAweDNBLTB4M0IKKyAgICogU3RhY2s6ICAgICAgICBmMjYuNiB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTVNJUlAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTc4Miw2ICs1ODQ4LDcgQEAKICAgICBGVF9GMjZEb3Q2ICBkaXN0YW5jZTsKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIEZUX0YyNkRvdDYgIGNvbnRyb2xfdmFsdWVfY3V0aW4gPSAwOworICAgIEZUX0YyNkRvdDYgIGRlbHRhOwogCiAKICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCkBAIC01ODE3LDExICs1ODg0LDE1IEBACiAgICAgZGlzdGFuY2UgPSBQUk9KRUNUKCBleGMtPnpwMS5jdXIgKyBwb2ludCwgZXhjLT56cDAuY3VyICsgZXhjLT5HUy5ycDAgKTsKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgZGVsdGEgPSBTVUJfTE9ORyggZGlzdGFuY2UsIGFyZ3NbMV0gKTsKKyAgICBpZiAoIGRlbHRhIDwgMCApCisgICAgICBkZWx0YSA9IE5FR19MT05HKCBkZWx0YSApOworCiAgICAgLyogc3VicGl4ZWwgaGludGluZyAtIG1ha2UgTVNJUlAgcmVzcGVjdCBDVlQgY3V0LWluOyAqLwotICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgRlRfQUJTKCBTVUJfTE9ORyggZGlzdGFuY2UsIGFyZ3NbMV0gKSApID49IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCAgICAmJgorICAgICAgICAgZGVsdGEgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCiAgICAgICBkaXN0YW5jZSA9IGFyZ3NbMV07CiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIApAQCAtNTgzOCwxMiArNTkwOSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1EQVBbYV06ICAgICAgTW92ZSBEaXJlY3QgQWJzb2x1dGUgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MkUtMHgyRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTURBUFthXTogICAgICBNb3ZlIERpcmVjdCBBYnNvbHV0ZSBQb2ludAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MkUtMHgyRgorICAgKiBTdGFjazogICAgICAgIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19NREFQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTg2OSwxNiArNTk0MCwxOCBAQAogICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCiAgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICApCi0gICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKLSAgICAgICAgICAgICAgICAgICAgIGV4YywKLSAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKSAtIGN1cl9kaXN0OworICAgICAgICBkaXN0YW5jZSA9IFNVQl9MT05HKAorICAgICAgICAgICAgICAgICAgICAgUm91bmRfTm9uZSggZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2Rpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApLAorICAgICAgICAgICAgICAgICAgICAgY3VyX2Rpc3QgKTsKICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkaXN0YW5jZSA9IGV4Yy0+ZnVuY19yb3VuZCgKLSAgICAgICAgICAgICAgICAgICAgIGV4YywKLSAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAotICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKSAtIGN1cl9kaXN0OworICAgICAgICBkaXN0YW5jZSA9IFNVQl9MT05HKAorICAgICAgICAgICAgICAgICAgICAgZXhjLT5mdW5jX3JvdW5kKCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnR0X21ldHJpY3MuY29tcGVuc2F0aW9uc1swXSApLAorICAgICAgICAgICAgICAgICAgICAgY3VyX2Rpc3QgKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgZGlzdGFuY2UgPSAwOwpAQCAtNTg5MCwxMiArNTk2MywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE1JQVBbYV06ICAgICAgTW92ZSBJbmRpcmVjdCBBYnNvbHV0ZSBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4M0UtMHgzRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTUlBUFthXTogICAgICBNb3ZlIEluZGlyZWN0IEFic29sdXRlIFBvaW50CisgICAqIE9wY29kZSByYW5nZTogMHgzRS0weDNGCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19NSUFQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQpAQCAtNTk3OCw3ICs2MDUxLDE0IEBACiAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApICAgLyogcm91bmRpbmcgYW5kIGNvbnRyb2wgY3V0LWluIGZsYWcgKi8KICAgICB7Ci0gICAgICBpZiAoIEZUX0FCUyggZGlzdGFuY2UgLSBvcmdfZGlzdCApID4gY29udHJvbF92YWx1ZV9jdXRpbiApCisgICAgICBGVF9GMjZEb3Q2ICBkZWx0YTsKKworCisgICAgICBkZWx0YSA9IFNVQl9MT05HKCBkaXN0YW5jZSwgb3JnX2Rpc3QgKTsKKyAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgZGVsdGEgPSBORUdfTE9ORyggZGVsdGEgKTsKKworICAgICAgaWYgKCBkZWx0YSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICBkaXN0YW5jZSA9IG9yZ19kaXN0OwogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKQEAgLTYwMDMsMTIgKzYwODMsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNRFJQW2FiY2RlXTogIE1vdmUgRGlyZWN0IFJlbGF0aXZlIFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweEMwLTB4REYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1EUlBbYWJjZGVdOiAgTW92ZSBEaXJlY3QgUmVsYXRpdmUgUG9pbnQKKyAgICogT3Bjb2RlIHJhbmdlOiAweEMwLTB4REYKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTURSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTYxNDcsMTIgKzYyMjcsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNSVJQW2FiY2RlXTogIE1vdmUgSW5kaXJlY3QgUmVsYXRpdmUgUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweEUwLTB4RkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IHVpbnQzMiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIE1JUlBbYWJjZGVdOiAgTW92ZSBJbmRpcmVjdCBSZWxhdGl2ZSBQb2ludAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4RTAtMHhGRgorICAgKiBTdGFjazogICAgICAgIGludDMyPyB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfTUlSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTYxNzIsMTEgKzYyNTIsMTMgQEAKICAgICBGVF9Cb29sICAgICByZXZlcnNlX21vdmUgPSBGQUxTRTsKICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCisgICAgRlRfRjI2RG90NiAgZGVsdGE7CisKIAogICAgIG1pbmltdW1fZGlzdGFuY2UgICAgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CiAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKICAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOwotICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpKCBhcmdzWzFdICsgMSApOworICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpKCBBRERfTE9ORyggYXJnc1sxXSwgMSApICk7CiAKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKQEAgLTYyMDQsOCArNjI4NiwxMSBAQAogCiAgICAgLyogc2luZ2xlIHdpZHRoIHRlc3QgKi8KIAotICAgIGlmICggRlRfQUJTKCBjdnRfZGlzdCAtIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlICkgPAotICAgICAgICAgZXhjLT5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gKQorICAgIGRlbHRhID0gU1VCX0xPTkcoIGN2dF9kaXN0LCBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSApOworICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgIGRlbHRhID0gTkVHX0xPTkcoIGRlbHRhICk7CisKKyAgICBpZiAoIGRlbHRhIDwgZXhjLT5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gKQogICAgIHsKICAgICAgIGlmICggY3Z0X2Rpc3QgPj0gMCApCiAgICAgICAgIGN2dF9kaXN0ID0gIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlOwpAQCAtNjI3MSw3ICs2MzU2LDExIEBACiAgICAgICAgIC8qICAgICAgYHR0aW5zdDIuZG9jJywgdmVyc2lvbiAxLjY2LCBpcyB0aHVzIGluY29ycmVjdCBzaW5jZSAgKi8KICAgICAgICAgLyogICAgICBpdCBpbXBsaWVzIGA+PScgaW5zdGVhZCBvZiBgPicuICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIGlmICggRlRfQUJTKCBjdnRfZGlzdCAtIG9yZ19kaXN0ICkgPiBjb250cm9sX3ZhbHVlX2N1dGluICkKKyAgICAgICAgZGVsdGEgPSBTVUJfTE9ORyggY3Z0X2Rpc3QsIG9yZ19kaXN0ICk7CisgICAgICAgIGlmICggZGVsdGEgPCAwICkKKyAgICAgICAgICBkZWx0YSA9IE5FR19MT05HKCBkZWx0YSApOworCisgICAgICAgIGlmICggZGVsdGEgPiBjb250cm9sX3ZhbHVlX2N1dGluICkKICAgICAgICAgICBjdnRfZGlzdCA9IG9yZ19kaXN0OwogICAgICAgfQogCkBAIC02Mjg5LDcgKzYzNzgsMTEgQEAKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBGVF9BQlMoIGN2dF9kaXN0IC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQorICAgICAgICBkZWx0YSA9IFNVQl9MT05HKCBjdnRfZGlzdCwgb3JnX2Rpc3QgKTsKKyAgICAgICAgaWYgKCBkZWx0YSA8IDAgKQorICAgICAgICAgIGRlbHRhID0gTkVHX0xPTkcoIGRlbHRhICk7CisKKyAgICAgICAgaWYgKCBkZWx0YSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICAgIGN2dF9kaXN0ID0gb3JnX2Rpc3Q7CiAgICAgICB9CiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KQEAgLTYzODEsMTIgKzY0NzQsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBTElHTlJQW106ICAgIEFMSUdOIFJlbGF0aXZlIFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMi4uLiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEFMSUdOUlBbXTogICAgQUxJR04gUmVsYXRpdmUgUG9pbnQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDNDCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIHVpbnQzMi4uLiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19BTElHTlJQKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNjQ0NCwxMiArNjUzNywxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElTRUNUW106ICAgICAgbW92ZXMgcG9pbnQgdG8gSW50ZXJTRUNUaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4MEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICA1ICogdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogSVNFQ1RbXTogICAgICBtb3ZlcyBwb2ludCB0byBJbnRlclNFQ1Rpb24KKyAgICogT3Bjb2RlIHJhbmdlOiAweDBGCisgICAqIFN0YWNrOiAgICAgICAgNSAqIHVpbnQzMiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19JU0VDVCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC02NTQwLDEyICs2NjMzLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQUxJR05QVFNbXTogICBBTElHTiBQb2luVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiB1aW50MzIgLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBTElHTlBUU1tdOiAgIEFMSUdOIFBvaW5UUworICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjcKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgdWludDMyIC0tPgorICAgKi8KICAgc3RhdGljIHZvaWQKICAgSW5zX0FMSUdOUFRTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTY1NzIsMTIgKzY2NjUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJUFtdOiAgICAgICAgIEludGVycG9sYXRlIFBvaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyLi4uIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIElQW106ICAgICAgICAgSW50ZXJwb2xhdGUgUG9pbnQKKyAgICogT3Bjb2RlIHJhbmdlOiAweDM5CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyLi4uIC0tPgorICAgKi8KIAogICAvKiBTT01FVElNRVMsIERVTUJFUiBDT0RFIElTIEJFVFRFUiBDT0RFICovCiAKQEAgLTY3MzIsMTIgKzY4MjUsMTIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVVFBbYV06ICAgICAgIFVuVG91Y2ggUG9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFVUUFthXTogICAgICAgVW5Ub3VjaCBQb2ludAorICAgKiBPcGNvZGUgcmFuZ2U6IDB4MjkKKyAgICogU3RhY2s6ICAgICAgICB1aW50MzIgLS0+CisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfVVRQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCkBAIC02OTAxLDEyICs2OTk0LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSVVQW2FdOiAgICAgICBJbnRlcnBvbGF0ZSBVbnRvdWNoZWQgUG9pbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHgzMC0weDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJVVBbYV06ICAgICAgIEludGVycG9sYXRlIFVudG91Y2hlZCBQb2ludHMKKyAgICogT3Bjb2RlIHJhbmdlOiAweDMwLTB4MzEKKyAgICogU3RhY2s6ICAgICAgICAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19JVVAoIFRUX0V4ZWNDb250ZXh0ICBleGMgKQogICB7CkBAIC03MDI5LDEyICs3MTIyLDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogREVMVEFQbltdOiAgICBERUxUQSBleGNlcHRpb25zIFAxLCBQMiwgUDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg1RCwweDcxLDB4NzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAoMiAqIHVpbnQzMikuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBERUxUQVBuW106ICAgIERFTFRBIGV4Y2VwdGlvbnMgUDEsIFAyLCBQMworICAgKiBPcGNvZGUgcmFuZ2U6IDB4NUQsMHg3MSwweDcyCisgICAqIFN0YWNrOiAgICAgICAgdWludDMyICgyICogdWludDMyKS4uLiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19ERUxUQVAoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTcxMTEsMTIgKzcyMDQsMTIgQEAKICAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAgICAgICAgICAgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqICBBbGxvdyBkZWx0YSBtb3ZlIGlmCisgICAgICAgICAgICAgKiBBbGxvdyBkZWx0YSBtb3ZlIGlmCiAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICogIC0gbm90IHVzaW5nIGlnbm9yZV94X21vZGUgcmVuZGVyaW5nLAotICAgICAgICAgICAgICogIC0gZ2x5cGggaXMgc3BlY2lmaWNhbGx5IHNldCB0byBhbGxvdyBpdCwgb3IKLSAgICAgICAgICAgICAqICAtIGdseXBoIGlzIGNvbXBvc2l0ZSBhbmQgZnJlZWRvbSB2ZWN0b3IgaXMgbm90IGluIHN1YnBpeGVsCi0gICAgICAgICAgICAgKiAgICBkaXJlY3Rpb24uCisgICAgICAgICAgICAgKiAtIG5vdCB1c2luZyBpZ25vcmVfeF9tb2RlIHJlbmRlcmluZywKKyAgICAgICAgICAgICAqIC0gZ2x5cGggaXMgc3BlY2lmaWNhbGx5IHNldCB0byBhbGxvdyBpdCwgb3IKKyAgICAgICAgICAgICAqIC0gZ2x5cGggaXMgY29tcG9zaXRlIGFuZCBmcmVlZG9tIHZlY3RvciBpcyBub3QgaW4gc3VicGl4ZWwKKyAgICAgICAgICAgICAqICAgZGlyZWN0aW9uLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfQUxXQVlTX0RPX0RFTFRBUCApIHx8CkBAIC03MTk2LDEyICs3Mjg5LDEyIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogREVMVEFDbltdOiAgICBERUxUQSBleGNlcHRpb25zIEMxLCBDMiwgQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIE9wY29kZSByYW5nZTogMHg3MywweDc0LDB4NzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFjazogICAgICAgIHVpbnQzMiAoMiAqIHVpbnQzMikuLi4gLS0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBERUxUQUNuW106ICAgIERFTFRBIGV4Y2VwdGlvbnMgQzEsIEMyLCBDMworICAgKiBPcGNvZGUgcmFuZ2U6IDB4NzMsMHg3NCwweDc1CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyICgyICogdWludDMyKS4uLiAtLT4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19ERUxUQUMoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTcyNzQsMjcgKzczNjcsMjcgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBNSVNDLiBJTlNUUlVDVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTUlTQy4gSU5TVFJVQ1RJT05TCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHRVRJTkZPW106ICAgIEdFVCBJTkZPcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiB1aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWFhYOiBVTkRPQ1VNRU5URUQ6IFNlbGVjdG9yIGJpdHMgaGlnaGVyIHRoYW4gOSBhcmUgY3VycmVudGx5IChNYXkgICAgICovCi0gIC8qICAgICAgMjAxNSkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBTZWxlY3RvciBiaXQgMTEgaXMgaW5jb3JyZWN0bHkgZGVzY3JpYmVkIGFzIGJpdCA4LCB3aGlsZSB0aGUgICAgICovCi0gIC8qICAgICAgcmVhbCBtZWFuaW5nIG9mIGJpdCA4ICh2ZXJ0aWNhbCBMQ0Qgc3VicGl4ZWxzKSBzdGF5cyAgICAgICAgICAgICAqLwotICAvKiAgICAgIHVuZG9jdW1lbnRlZC4gIFRoZSBzYW1lIG1pc3Rha2UgY2FuIGJlIGZvdW5kIGluIEdyZWcgSGl0Y2hjb2NrJ3MgKi8KLSAgLyogICAgICB3aGl0ZXBhcGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR0VUSU5GT1tdOiAgICBHRVQgSU5GT3JtYXRpb24KKyAgICogT3Bjb2RlIHJhbmdlOiAweDg4CisgICAqIFN0YWNrOiAgICAgICAgdWludDMyIC0tPiB1aW50MzIKKyAgICoKKyAgICogWFhYOiBVTkRPQ1VNRU5URUQ6IFNlbGVjdG9yIGJpdHMgaGlnaGVyIHRoYW4gOSBhcmUgY3VycmVudGx5IChNYXkKKyAgICogICAgICAyMDE1KSBub3QgZG9jdW1lbnRlZCBpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbi4KKyAgICoKKyAgICogICAgICBTZWxlY3RvciBiaXQgMTEgaXMgaW5jb3JyZWN0bHkgZGVzY3JpYmVkIGFzIGJpdCA4LCB3aGlsZSB0aGUKKyAgICogICAgICByZWFsIG1lYW5pbmcgb2YgYml0IDggKHZlcnRpY2FsIExDRCBzdWJwaXhlbHMpIHN0YXlzCisgICAqICAgICAgdW5kb2N1bWVudGVkLiAgVGhlIHNhbWUgbWlzdGFrZSBjYW4gYmUgZm91bmQgaW4gR3JlZyBIaXRjaGNvY2sncworICAgKiAgICAgIHdoaXRlcGFwZXIuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBJbnNfR0VUSU5GTyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTczMDYsMTEgKzczOTksMTEgQEAKICAgICBLID0gMDsKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qIFJBU1RFUklaRVIgVkVSU0lPTiAgICAgICAgICAgKi8KLSAgICAvKiBTZWxlY3RvciBCaXQ6ICAwICAgICAgICAgICAgICovCi0gICAgLyogUmV0dXJuIEJpdChzKTogMC03ICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogUkFTVEVSSVpFUiBWRVJTSU9OCisgICAgICogU2VsZWN0b3IgQml0OiAgMAorICAgICAqIFJldHVybiBCaXQocyk6IDAtNworICAgICAqLwogICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCiAgICAgICAgICAoIGFyZ3NbMF0gJiAxICkgIT0gMCAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+c3VicGl4ZWxfaGludGluZyAgICAgICApCkBAIC03MzMxLDM5ICs3NDI0LDQwIEBACiAgICAgICBpZiAoICggYXJnc1swXSAmIDEgKSAhPSAwICkKICAgICAgICAgSyA9IGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbjsKIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBHTFlQSCBST1RBVEVEICAgICAgICAgICAgICAgICovCi0gICAgLyogU2VsZWN0b3IgQml0OiAgMSAgICAgICAgICAgICAqLwotICAgIC8qIFJldHVybiBCaXQocyk6IDggICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEdMWVBIIFJPVEFURUQKKyAgICAgKiBTZWxlY3RvciBCaXQ6ICAxCisgICAgICogUmV0dXJuIEJpdChzKTogOAorICAgICAqLwogICAgIGlmICggKCBhcmdzWzBdICYgMiApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnJvdGF0ZWQgKQogICAgICAgSyB8PSAxIDw8IDg7CiAKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogR0xZUEggU1RSRVRDSEVEICAgICAgICAgICAgICAqLwotICAgIC8qIFNlbGVjdG9yIEJpdDogIDIgICAgICAgICAgICAgKi8KLSAgICAvKiBSZXR1cm4gQml0KHMpOiA5ICAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHTFlQSCBTVFJFVENIRUQKKyAgICAgKiBTZWxlY3RvciBCaXQ6ICAyCisgICAgICogUmV0dXJuIEJpdChzKTogOQorICAgICAqLwogICAgIGlmICggKCBhcmdzWzBdICYgNCApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnN0cmV0Y2hlZCApCiAgICAgICBLIHw9IDEgPDwgOTsKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogVkFSSUFUSU9OIEdMWVBIICAgICAgICAgICAgICAqLwotICAgIC8qIFNlbGVjdG9yIEJpdDogIDMgICAgICAgICAgICAgKi8KLSAgICAvKiBSZXR1cm4gQml0KHMpOiAxMCAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIFhYWDogVU5ET0NVTUVOVEVEISAgICAgICAgICAgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVkFSSUFUSU9OIEdMWVBICisgICAgICogU2VsZWN0b3IgQml0OiAgMworICAgICAqIFJldHVybiBCaXQocyk6IDEwCisgICAgICoKKyAgICAgKiBYWFg6IFVORE9DVU1FTlRFRCEKKyAgICAgKi8KICAgICBpZiAoIChhcmdzWzBdICYgOCApICE9IDAgJiYgZXhjLT5mYWNlLT5ibGVuZCApCiAgICAgICBLIHw9IDEgPDwgMTA7CiAjZW5kaWYKIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBCSS1MRVZFTCBISU5USU5HIEFORCAgICAgICAgICovCi0gICAgLyogR1JBWVNDQUxFIFJFTkRFUklORyAgICAgICAgICAqLwotICAgIC8qIFNlbGVjdG9yIEJpdDogIDUgICAgICAgICAgICAgKi8KLSAgICAvKiBSZXR1cm4gQml0KHMpOiAxMiAgICAgICAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBCSS1MRVZFTCBISU5USU5HIEFORAorICAgICAqIEdSQVlTQ0FMRSBSRU5ERVJJTkcKKyAgICAgKiBTZWxlY3RvciBCaXQ6ICA1CisgICAgICogUmV0dXJuIEJpdChzKTogMTIKKyAgICAgKi8KICAgICBpZiAoICggYXJnc1swXSAmIDMyICkgIT0gMCAmJiBleGMtPmdyYXlzY2FsZSApCiAgICAgICBLIHw9IDEgPDwgMTI7CiAKQEAgLTczNzQsNTAgKzc0NjgsNTQgQEAKICAgICAvKiBCb2xkIEl0YWxpYycuICovCiAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgJiYgZXhjLT5zdWJwaXhlbF9oaW50aW5nX2xlYW4gKQogICAgIHsKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qIEhJTlRJTkcgRk9SIFNVQlBJWEVMICAgICAgICAgKi8KLSAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDYgICAgICAgICAgICAgKi8KLSAgICAgIC8qIFJldHVybiBCaXQocyk6IDEzICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qIHY0MCBkb2VzIHN1YnBpeGVsIGhpbnRpbmcgYnkgZGVmYXVsdC4gKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqIEhJTlRJTkcgRk9SIFNVQlBJWEVMCisgICAgICAgKiBTZWxlY3RvciBCaXQ6ICA2CisgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxMworICAgICAgICoKKyAgICAgICAqIHY0MCBkb2VzIHN1YnBpeGVsIGhpbnRpbmcgYnkgZGVmYXVsdC4KKyAgICAgICAqLwogICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA2NCApICE9IDAgKQogICAgICAgICBLIHw9IDEgPDwgMTM7CiAKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qIFZFUlRJQ0FMIExDRCBTVUJQSVhFTFM/ICAgICAgKi8KLSAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDggICAgICAgICAgICAgKi8KLSAgICAgIC8qIFJldHVybiBCaXQocyk6IDE1ICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqIFZFUlRJQ0FMIExDRCBTVUJQSVhFTFM/CisgICAgICAgKiBTZWxlY3RvciBCaXQ6ICA4CisgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxNQorICAgICAgICovCiAgICAgICBpZiAoICggYXJnc1swXSAmIDI1NiApICE9IDAgJiYgZXhjLT52ZXJ0aWNhbF9sY2RfbGVhbiApCiAgICAgICAgIEsgfD0gMSA8PCAxNTsKIAotICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLyogU1VCUElYRUwgUE9TSVRJT05FRD8gICAgICAgICAqLwotICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTAgICAgICAgICAgICAqLwotICAgICAgLyogUmV0dXJuIEJpdChzKTogMTcgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogWFhYOiBGcmVlVHlwZSBzdXBwb3J0cyBpdCwgZGVwZW5kZW50IG9uIHdoYXQgY2xpZW50IGRvZXM/ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgKiBTVUJQSVhFTCBQT1NJVElPTkVEPworICAgICAgICogU2VsZWN0b3IgQml0OiAgMTAKKyAgICAgICAqIFJldHVybiBCaXQocyk6IDE3CisgICAgICAgKgorICAgICAgICogWFhYOiBGcmVlVHlwZSBzdXBwb3J0cyBpdCwgZGVwZW5kZW50IG9uIHdoYXQgY2xpZW50IGRvZXM/CisgICAgICAgKi8KICAgICAgIGlmICggKCBhcmdzWzBdICYgMTAyNCApICE9IDAgKQogICAgICAgICBLIHw9IDEgPDwgMTc7CiAKLSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgIC8qIFNZTU1FVFJJQ0FMIFNNT09USElORyAgICAgICAgKi8KLSAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDExICAgICAgICAgICAgKi8KLSAgICAgIC8qIFJldHVybiBCaXQocyk6IDE4ICAgICAgICAgICAgKi8KLSAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIC8qIFRoZSBvbmx5IHNtb290aGluZyBtZXRob2QgRnJlZVR5cGUgc3VwcG9ydHMgdW5sZXNzIHNvbWVvbmUgc2V0cyAqLwotICAgICAgLyogRlRfTE9BRF9UQVJHRVRfTU9OTy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgKiBTWU1NRVRSSUNBTCBTTU9PVEhJTkcKKyAgICAgICAqIFNlbGVjdG9yIEJpdDogIDExCisgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxOAorICAgICAgICoKKyAgICAgICAqIFRoZSBvbmx5IHNtb290aGluZyBtZXRob2QgRnJlZVR5cGUgc3VwcG9ydHMgdW5sZXNzIHNvbWVvbmUgc2V0cworICAgICAgICogRlRfTE9BRF9UQVJHRVRfTU9OTy4KKyAgICAgICAqLwogICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyMDQ4ICkgIT0gMCAmJiBleGMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiApCiAgICAgICAgIEsgfD0gMSA8PCAxODsKIAotICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLyogQ0xFQVJUWVBFIEhJTlRJTkcgQU5EICAgICAgICAqLwotICAgICAgLyogR1JBWVNDQUxFIFJFTkRFUklORyAgICAgICAgICAqLwotICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTIgICAgICAgICAgICAqLwotICAgICAgLyogUmV0dXJuIEJpdChzKTogMTkgICAgICAgICAgICAqLwotICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogR3JheXNjYWxlIHJlbmRlcmluZyBpcyB3aGF0IEZyZWVUeXBlIGRvZXMgYW55d2F5IHVubGVzcyBzb21lb25lICovCi0gICAgICAvKiBzZXRzIEZUX0xPQURfVEFSR0VUX01PTk8gb3IgRlRfTE9BRF9UQVJHRVRfTENEKF9WKSAgICAgICAgICAgICAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAqIENMRUFSVFlQRSBISU5USU5HIEFORAorICAgICAgICogR1JBWVNDQUxFIFJFTkRFUklORworICAgICAgICogU2VsZWN0b3IgQml0OiAgMTIKKyAgICAgICAqIFJldHVybiBCaXQocyk6IDE5CisgICAgICAgKgorICAgICAgICogR3JheXNjYWxlIHJlbmRlcmluZyBpcyB3aGF0IEZyZWVUeXBlIGRvZXMgYW55d2F5IHVubGVzcyBzb21lb25lCisgICAgICAgKiBzZXRzIEZUX0xPQURfVEFSR0VUX01PTk8gb3IgRlRfTE9BRF9UQVJHRVRfTENEKF9WKQorICAgICAgICovCiAgICAgICBpZiAoICggYXJnc1swXSAmIDQwOTYgKSAhPSAwICYmIGV4Yy0+Z3JheXNjYWxlX2NsZWFydHlwZSApCiAgICAgICAgIEsgfD0gMSA8PCAxOTsKICAgICB9CkBAIC03NDMxLDY3ICs3NTI5LDczIEBACiAKICAgICAgIGlmICggZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb24gPj0gMzcgKQogICAgICAgewotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIC8qIEhJTlRJTkcgRk9SIFNVQlBJWEVMICAgICAgICAgKi8KLSAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgNiAgICAgICAgICAgICAqLwotICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxMyAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKiBISU5USU5HIEZPUiBTVUJQSVhFTAorICAgICAgICAgKiBTZWxlY3RvciBCaXQ6ICA2CisgICAgICAgICAqIFJldHVybiBCaXQocyk6IDEzCisgICAgICAgICAqLwogICAgICAgICBpZiAoICggYXJnc1swXSAmIDY0ICkgIT0gMCAmJiBleGMtPnN1YnBpeGVsX2hpbnRpbmcgKQogICAgICAgICAgIEsgfD0gMSA8PCAxMzsKIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIC8qIENPTVBBVElCTEUgV0lEVEhTIEVOQUJMRUQgICAgKi8KLSAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgNyAgICAgICAgICAgICAqLwotICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxNCAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAqIENPTVBBVElCTEUgV0lEVEhTIEVOQUJMRUQKKyAgICAgICAgICogU2VsZWN0b3IgQml0OiAgNworICAgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxNAorICAgICAgICAgKgorICAgICAgICAgKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkCisgICAgICAgICAqLwogICAgICAgICBpZiAoICggYXJnc1swXSAmIDEyOCApICE9IDAgJiYgZXhjLT5jb21wYXRpYmxlX3dpZHRocyApCiAgICAgICAgICAgSyB8PSAxIDw8IDE0OwogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgLyogVkVSVElDQUwgTENEIFNVQlBJWEVMUz8gICAgICAqLwotICAgICAgICAvKiBTZWxlY3RvciBCaXQ6ICA4ICAgICAgICAgICAgICovCi0gICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE1ICAgICAgICAgICAgKi8KLSAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICogVkVSVElDQUwgTENEIFNVQlBJWEVMUz8KKyAgICAgICAgICogU2VsZWN0b3IgQml0OiAgOAorICAgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxNQorICAgICAgICAgKgorICAgICAgICAgKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkCisgICAgICAgICAqLwogICAgICAgICBpZiAoICggYXJnc1swXSAmIDI1NiApICE9IDAgJiYgZXhjLT52ZXJ0aWNhbF9sY2QgKQogICAgICAgICAgIEsgfD0gMSA8PCAxNTsKIAotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgIC8qIEhJTlRJTkcgRk9SIEJHUj8gICAgICAgICAgICAgKi8KLSAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgOSAgICAgICAgICAgICAqLwotICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxNiAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAqIEhJTlRJTkcgRk9SIEJHUj8KKyAgICAgICAgICogU2VsZWN0b3IgQml0OiAgOQorICAgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxNgorICAgICAgICAgKgorICAgICAgICAgKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkCisgICAgICAgICAqLwogICAgICAgICBpZiAoICggYXJnc1swXSAmIDUxMiApICE9IDAgJiYgZXhjLT5iZ3IgKQogICAgICAgICAgIEsgfD0gMSA8PCAxNjsKIAogICAgICAgICBpZiAoIGV4Yy0+cmFzdGVyaXplcl92ZXJzaW9uID49IDM4ICkKICAgICAgICAgewotICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAvKiBTVUJQSVhFTCBQT1NJVElPTkVEPyAgICAgICAgICovCi0gICAgICAgICAgLyogU2VsZWN0b3IgQml0OiAgMTAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qIFJldHVybiBCaXQocyk6IDE3ICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgLyogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLworICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgKiBTVUJQSVhFTCBQT1NJVElPTkVEPworICAgICAgICAgICAqIFNlbGVjdG9yIEJpdDogIDEwCisgICAgICAgICAgICogUmV0dXJuIEJpdChzKTogMTcKKyAgICAgICAgICAgKgorICAgICAgICAgICAqIEZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQKKyAgICAgICAgICAgKi8KICAgICAgICAgICBpZiAoICggYXJnc1swXSAmIDEwMjQgKSAhPSAwICYmIGV4Yy0+c3VicGl4ZWxfcG9zaXRpb25lZCApCiAgICAgICAgICAgICBLIHw9IDEgPDwgMTc7CiAKLSAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgLyogU1lNTUVUUklDQUwgU01PT1RISU5HICAgICAgICAqLwotICAgICAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDExICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxOCAgICAgICAgICAgICovCi0gICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qIEZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KKyAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICogU1lNTUVUUklDQUwgU01PT1RISU5HCisgICAgICAgICAgICogU2VsZWN0b3IgQml0OiAgMTEKKyAgICAgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxOAorICAgICAgICAgICAqCisgICAgICAgICAgICogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZAorICAgICAgICAgICAqLwogICAgICAgICAgIGlmICggKCBhcmdzWzBdICYgMjA0OCApICE9IDAgJiYgZXhjLT5zeW1tZXRyaWNhbF9zbW9vdGhpbmcgKQogICAgICAgICAgICAgSyB8PSAxIDw8IDE4OwogCi0gICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgIC8qIEdSQVkgQ0xFQVJUWVBFICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBTZWxlY3RvciBCaXQ6ICAxMiAgICAgICAgICAgICovCi0gICAgICAgICAgLyogUmV0dXJuIEJpdChzKTogMTkgICAgICAgICAgICAqLwotICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBGdW5jdGlvbmFsaXR5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCisgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAqIEdSQVkgQ0xFQVJUWVBFCisgICAgICAgICAgICogU2VsZWN0b3IgQml0OiAgMTIKKyAgICAgICAgICAgKiBSZXR1cm4gQml0KHMpOiAxOQorICAgICAgICAgICAqCisgICAgICAgICAgICogRnVuY3Rpb25hbGl0eSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZAorICAgICAgICAgICAqLwogICAgICAgICAgIGlmICggKCBhcmdzWzBdICYgNDA5NiApICE9IDAgJiYgZXhjLT5ncmF5X2NsZWFydHlwZSApCiAgICAgICAgICAgICBLIHw9IDEgPDwgMTk7CiAgICAgICAgIH0KQEAgLTc1MDYsMTYgKzc2MTAsMTYgQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEdFVFZBUklBVElPTltdOiBnZXQgbm9ybWFsaXplZCB2YXJpYXRpb24gKGJsZW5kKSBjb29yZGluYXRlcyAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4OTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU3RhY2s6ICAgICAgICAtLT4gZjIuMTQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgIFRoZXJlIGlzIG5vIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZnJvbSBBcHBsZSBmb3IgKi8KLSAgLyogICAgICB0aGlzIGJ5dGVjb2RlIGluc3RydWN0aW9uLiAgQWN0aXZlIG9ubHkgaWYgYSBmb250IGhhcyBHWCAgICAgICAgICovCi0gIC8qICAgICAgdmFyaWF0aW9uIGF4ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdFVFZBUklBVElPTltdOiBnZXQgbm9ybWFsaXplZCB2YXJpYXRpb24gKGJsZW5kKSBjb29yZGluYXRlcworICAgKiBPcGNvZGUgcmFuZ2U6IDB4OTEKKyAgICogU3RhY2s6ICAgICAgICAtLT4gZjIuMTQuLi4KKyAgICoKKyAgICogWFhYOiBVTkRPQ1VNRU5URUQhICBUaGVyZSBpcyBubyBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGZyb20gQXBwbGUgZm9yCisgICAqICAgICAgdGhpcyBieXRlY29kZSBpbnN0cnVjdGlvbi4gIEFjdGl2ZSBvbmx5IGlmIGEgZm9udCBoYXMgR1gKKyAgICogICAgICB2YXJpYXRpb24gYXhlcy4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19HRVRWQVJJQVRJT04oIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKQEAgLTc1NDUsMTUgKzc2NDksMTUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHRVREQVRBW106ICAgIG5vIGlkZWEgd2hhdCB0aGlzIGlzIGdvb2QgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAgICAgICAgLS0+IDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWFhYOiBVTkRPQ1VNRU5URUQhICBUaGVyZSBpcyBubyBkb2N1bWVudGF0aW9uIGZyb20gQXBwbGUgZm9yIHRoaXMgICAgICovCi0gIC8qICAgICAgdmVyeSB3ZWlyZCBieXRlY29kZSBpbnN0cnVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEdFVERBVEFbXTogICAgbm8gaWRlYSB3aGF0IHRoaXMgaXMgZ29vZCBmb3IKKyAgICogT3Bjb2RlIHJhbmdlOiAweDkyCisgICAqIFN0YWNrOiAgICAgICAgLS0+IDE3CisgICAqCisgICAqIFhYWDogVU5ET0NVTUVOVEVEISAgVGhlcmUgaXMgbm8gZG9jdW1lbnRhdGlvbiBmcm9tIEFwcGxlIGZvciB0aGlzCisgICAqICAgICAgdmVyeSB3ZWlyZCBieXRlY29kZSBpbnN0cnVjdGlvbi4KKyAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19HRVREQVRBKCBGVF9Mb25nKiAgYXJncyApCiAgIHsKQEAgLTc2MDEsMzQgKzc3MDUsMzQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgcnVuIG9mIG9wY29kZXMuICBJdCB3aWxsIGV4aXQgaW4gdGhlICAgICAgICAqLwotICAvKiAgZm9sbG93aW5nIGNhc2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIEVycm9ycyAoaW4gd2hpY2ggY2FzZSBpdCByZXR1cm5zIEZBTFNFKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIC0gUmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgbWFpbiBjb2RlIHJhbmdlIChyZXR1cm5zIFRSVUUpLiAgICAgICAgICAgICovCi0gIC8qICAgIFJlYWNoaW5nIHRoZSBlbmQgb2YgYSBjb2RlIHJhbmdlIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwgaXMgYW4gICAgICAqLwotICAvKiAgICBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIEFmdGVyIGV4ZWN1dGluZyBvbmUgc2luZ2xlIG9wY29kZSwgaWYgdGhlIGZsYWcgYEluc3RydWN0aW9uX1RyYXAnICAqLwotICAvKiAgICBpcyBzZXQgdG8gVFJVRSAocmV0dXJucyBUUlVFKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBPbiBleGl0IHdpdGggVFJVRSwgdGVzdCBJUCA8IENvZGVTaXplIHRvIGtub3cgd2hldGhlciBpdCBjb21lcyBmcm9tICAqLwotICAvKiAgYW4gaW5zdHJ1Y3Rpb24gdHJhcCBvciBhIG5vcm1hbCB0ZXJtaW5hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgTm90ZTogVGhlIGRvY3VtZW50ZWQgREVCVUcgb3Bjb2RlIHBvcHMgYSB2YWx1ZSBmcm9tIHRoZSBzdGFjay4gIFRoaXMgKi8KLSAgLyogICAgICAgIGJlaGF2aW91ciBpcyB1bnN1cHBvcnRlZDsgaGVyZSBhIERFQlVHIG9wY29kZSBpcyBhbHdheXMgYW4gICAgICovCi0gIC8qICAgICAgICBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRISVMgSVMgVEhFIElOVEVSUFJFVEVSJ1MgTUFJTiBMT09QLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBSVU4KKyAgICoKKyAgICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBhIHJ1biBvZiBvcGNvZGVzLiAgSXQgd2lsbCBleGl0IGluIHRoZQorICAgKiBmb2xsb3dpbmcgY2FzZXM6CisgICAqCisgICAqIC0gRXJyb3JzIChpbiB3aGljaCBjYXNlIGl0IHJldHVybnMgRkFMU0UpLgorICAgKgorICAgKiAtIFJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIG1haW4gY29kZSByYW5nZSAocmV0dXJucyBUUlVFKS4KKyAgICogICBSZWFjaGluZyB0aGUgZW5kIG9mIGEgY29kZSByYW5nZSB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsIGlzIGFuCisgICAqICAgZXJyb3IuCisgICAqCisgICAqIC0gQWZ0ZXIgZXhlY3V0aW5nIG9uZSBzaW5nbGUgb3Bjb2RlLCBpZiB0aGUgZmxhZyBgSW5zdHJ1Y3Rpb25fVHJhcCcKKyAgICogICBpcyBzZXQgdG8gVFJVRSAocmV0dXJucyBUUlVFKS4KKyAgICoKKyAgICogT24gZXhpdCB3aXRoIFRSVUUsIHRlc3QgSVAgPCBDb2RlU2l6ZSB0byBrbm93IHdoZXRoZXIgaXQgY29tZXMgZnJvbQorICAgKiBhbiBpbnN0cnVjdGlvbiB0cmFwIG9yIGEgbm9ybWFsIHRlcm1pbmF0aW9uLgorICAgKgorICAgKgorICAgKiBOb3RlOiBUaGUgZG9jdW1lbnRlZCBERUJVRyBvcGNvZGUgcG9wcyBhIHZhbHVlIGZyb20gdGhlIHN0YWNrLiAgVGhpcworICAgKiAgICAgICBiZWhhdmlvdXIgaXMgdW5zdXBwb3J0ZWQ7IGhlcmUgYSBERUJVRyBvcGNvZGUgaXMgYWx3YXlzIGFuCisgICAqICAgICAgIGVycm9yLgorICAgKgorICAgKgorICAgKiBUSElTIElTIFRIRSBJTlRFUlBSRVRFUidTIE1BSU4gTE9PUC4KKyAgICoKKyAgICovCiAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIHR0aW50ZXJwLmggKi8KQEAgLTc2NjAsMTYgKzc3NjQsMTYgQEAKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgLyoKLSAgICAgKiAgVG9nZ2xlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWNjb3JkaW5nIHRvIHdoYXQgZm9udCB3YW50cywgZXhjZXB0Ci0gICAgICogIHdoZW4KKyAgICAgKiBUb2dnbGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhY2NvcmRpbmcgdG8gd2hhdCBmb250IHdhbnRzLCBleGNlcHQKKyAgICAgKiB3aGVuCiAgICAgICoKLSAgICAgKiAgMSkgd2UgaGF2ZSBhIGB0cmlja3knIGZvbnQgdGhhdCBoZWF2aWx5IHJlbGllcyBvbiB0aGUgaW50ZXJwcmV0ZXIgdG8KLSAgICAgKiAgICAgcmVuZGVyIGdseXBocyBjb3JyZWN0bHksIGZvciBleGFtcGxlIERGS2FpLVNCLCBvcgotICAgICAqICAyKSBGVF9SRU5ERVJfTU9ERV9NT05PIChpLmUsIG1vbm9jaG9tZSByZW5kZXJpbmcpIGlzIHJlcXVlc3RlZC4KKyAgICAgKiAxKSB3ZSBoYXZlIGEgYHRyaWNreScgZm9udCB0aGF0IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBpbnRlcnByZXRlciB0bworICAgICAqICAgIHJlbmRlciBnbHlwaHMgY29ycmVjdGx5LCBmb3IgZXhhbXBsZSBERkthaS1TQiwgb3IKKyAgICAgKiAyKSBGVF9SRU5ERVJfTU9ERV9NT05PIChpLmUsIG1vbm9jaG9tZSByZW5kZXJpbmcpIGlzIHJlcXVlc3RlZC4KICAgICAgKgotICAgICAqICBJbiB0aG9zZSBjYXNlcywgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBuZWVkcyB0byBiZSB0dXJuZWQgb2ZmIHRvIGdldAotICAgICAqICBjb3JyZWN0IHJlbmRlcmluZy4gIFRoZSByZW5kZXJpbmcgaXMgdGhlbiBjb21wbGV0ZWx5IHVwIHRvIHRoZQotICAgICAqICBmb250J3MgcHJvZ3JhbW1pbmcuCisgICAgICogSW4gdGhvc2UgY2FzZXMsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbmVlZHMgdG8gYmUgdHVybmVkIG9mZiB0byBnZXQKKyAgICAgKiBjb3JyZWN0IHJlbmRlcmluZy4gIFRoZSByZW5kZXJpbmcgaXMgdGhlbiBjb21wbGV0ZWx5IHVwIHRvIHRoZQorICAgICAqIGZvbnQncyBwcm9ncmFtbWluZy4KICAgICAgKgogICAgICAqLwogICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAgICAgICYmCkBAIC04NDk1LDggKzg1OTksOCBAQAogCiAgIExOb19FcnJvcl86CiAgICAgRlRfVFJBQ0U0KCggIiAgJWQgaW5zdHJ1Y3Rpb24lcyBleGVjdXRlZFxuIiwKLSAgICAgICAgICAgICAgICBpbnNfY291bnRlciA9PSAxID8gIiIgOiAicyIsCi0gICAgICAgICAgICAgICAgaW5zX2NvdW50ZXIgKSk7CisgICAgICAgICAgICAgICAgaW5zX2NvdW50ZXIsCisgICAgICAgICAgICAgICAgaW5zX2NvdW50ZXIgPT0gMSA/ICIiIDogInMiICkpOwogICAgIHJldHVybiBGVF9FcnJfT2s7CiAKICAgTEVycm9yQ29kZU92ZXJmbG93XzoKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGludGVycC5oIGIvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmgKaW5kZXggMjk2NjQzOS4uMTcyY2RkMCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0aW50ZXJwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0aW50ZXJwLmgKKyAqCisgKiAgIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUVElOVEVSUF9IXwpAQCAtMjYsMTAgKzI2LDEwIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogUm91bmRpbmcgbW9kZSBjb25zdGFudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUm91bmRpbmcgbW9kZSBjb25zdGFudHMuCisgICAqLwogI2RlZmluZSBUVF9Sb3VuZF9PZmYgICAgICAgICAgICAgNQogI2RlZmluZSBUVF9Sb3VuZF9Ub19IYWxmX0dyaWQgICAgMAogI2RlZmluZSBUVF9Sb3VuZF9Ub19HcmlkICAgICAgICAgMQpAQCAtNDAsMTMgKzQwLDEzIEBACiAjZGVmaW5lIFRUX1JvdW5kX1N1cGVyXzQ1ICAgICAgICA3CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZ1bmN0aW9uIHR5cGVzIHVzZWQgYnkgdGhlIGludGVycHJldGVyLCBkZXBlbmRpbmcgb24gdmFyaW91cyBtb2RlcyAgICAqLwotICAvKiAoZS5nLiB0aGUgcm91bmRpbmcgbW9kZSwgd2hldGhlciB0byByZW5kZXIgYSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsICAgKi8KLSAgLyogbGluZSBldGMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEZ1bmN0aW9uIHR5cGVzIHVzZWQgYnkgdGhlIGludGVycHJldGVyLCBkZXBlbmRpbmcgb24gdmFyaW91cyBtb2RlcworICAgKiAoZS5nLiB0aGUgcm91bmRpbmcgbW9kZSwgd2hldGhlciB0byByZW5kZXIgYSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsCisgICAqIGxpbmUgZXRjKS4KKyAgICoKKyAgICovCiAKICAgLyogUm91bmRpbmcgZnVuY3Rpb24gKi8KICAgdHlwZWRlZiBGVF9GMjZEb3Q2CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgdmFsdWUgKTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIGNhbGwgcmVjb3JkLCB1c2VkIHRvIG1hbmFnZSBmdW5jdGlvbiBjYWxscy4gICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIGNhbGwgcmVjb3JkLCB1c2VkIHRvIG1hbmFnZSBmdW5jdGlvbiBjYWxscy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9DYWxsUmVjXwogICB7CiAgICAgRlRfSW50ICAgQ2FsbGVyX1JhbmdlOwpAQCAtMTAxLDExICsxMDEsMTEgQEAKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGRlZmluZSBydWxlcyB1c2VkIHRvIHR3ZWFrIHN1YnBpeGVsIGhpbnRpbmcgZm9yICAgICAgKi8KLSAgLyogdmFyaW91cyBmb250cy4gICIiLCAwLCAiIiwgTlVMTCB2YWx1ZSBpbmRpY2F0ZXMgdG8gbWF0Y2ggYW55IHZhbHVlLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlc2Ugc3RydWN0dXJlcyBkZWZpbmUgcnVsZXMgdXNlZCB0byB0d2VhayBzdWJwaXhlbCBoaW50aW5nIGZvcgorICAgKiB2YXJpb3VzIGZvbnRzLiAgIiIsIDAsICIiLCBOVUxMIHZhbHVlIGluZGljYXRlcyB0byBtYXRjaCBhbnkgdmFsdWUuCisgICAqLwogCiAjZGVmaW5lIFNQSF9NQVhfTkFNRV9TSVpFICAgICAgMzIKICNkZWZpbmUgU1BIX01BWF9DTEFTU19NRU1CRVJTICAxMDAKQEAgLTE0MSwxMSArMTQxLDExIEBACiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1haW4gc3RydWN0dXJlIGZvciB0aGUgaW50ZXJwcmV0ZXIgd2hpY2ggY29sbGVjdHMgYWxsIG5lY2Vzc2FyeSAgICovCi0gIC8qIHZhcmlhYmxlcyBhbmQgc3RhdGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWluIHN0cnVjdHVyZSBmb3IgdGhlIGludGVycHJldGVyIHdoaWNoIGNvbGxlY3RzIGFsbCBuZWNlc3NhcnkKKyAgICogdmFyaWFibGVzIGFuZCBzdGF0ZXMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfRXhlY0NvbnRleHRSZWNfCiAgIHsKICAgICBUVF9GYWNlICAgICAgICAgICAgZmFjZTsKQEAgLTQ2NCwyNiArNDY0LDI3IEBACiAjZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9OZXdfQ29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBRdWVyaWVzIHRoZSBmYWNlIGNvbnRleHQgZm9yIGEgZ2l2ZW4gZm9udC4gIE5vdGUgdGhhdCB0aGVyZSBpcyAgICAgKi8KLSAgLyogICAgbm93IGEgX3NpbmdsZV8gZXhlY3V0aW9uIGNvbnRleHQgaW4gdGhlIFRydWVUeXBlIGRyaXZlciB3aGljaCBpcyAgICovCi0gIC8qICAgIHNoYXJlZCBhbW9uZyBmYWNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIHRoZSBleGVjdXRpb24gY29udGV4dC4gIEluaXRpYWxpemVkIGZvciBgZmFjZScuICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE9ubHkgdGhlIGdseXBoIGxvYWRlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAqLwotICAvKiAgICAoQW5kIHJpZ2h0IG5vdyBvbmx5IHRoZSBnbHlwaCBsb2FkZXIgdXNlcyBpdC4pICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVFRfTmV3X0NvbnRleHQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFF1ZXJpZXMgdGhlIGZhY2UgY29udGV4dCBmb3IgYSBnaXZlbiBmb250LiAgTm90ZSB0aGF0IHRoZXJlIGlzCisgICAqICAgbm93IGEgX3NpbmdsZV8gZXhlY3V0aW9uIGNvbnRleHQgaW4gdGhlIFRydWVUeXBlIGRyaXZlciB3aGljaCBpcworICAgKiAgIHNoYXJlZCBhbW9uZyBmYWNlcy4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgQSBoYW5kbGUgdG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LiAgSW5pdGlhbGl6ZWQgZm9yIGBmYWNlJy4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgT25seSB0aGUgZ2x5cGggbG9hZGVyIGFuZCBkZWJ1Z2dlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uLgorICAgKiAgIChBbmQgcmlnaHQgbm93IG9ubHkgdGhlIGdseXBoIGxvYWRlciB1c2VzIGl0LikKKyAgICovCiAgIEZUX0VYUE9SVCggVFRfRXhlY0NvbnRleHQgKQogICBUVF9OZXdfQ29udGV4dCggVFRfRHJpdmVyICBkcml2ZXIgKTsKIApAQCAtNTA2LDI3ICs1MDcsMjggQEAKICNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRUX1J1bklucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEV4ZWN1dGVzIG9uZSBvciBtb3JlIGluc3RydWN0aW9uIGluIHRoZSBleGVjdXRpb24gY29udGV4dC4gIFRoaXMgICAqLwotICAvKiAgICBpcyB0aGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgVHJ1ZVR5cGUgb3Bjb2RlIGludGVycHJldGVyLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBleGVjIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBPbmx5IHRoZSBvYmplY3QgbWFuYWdlciBhbmQgZGVidWdnZXIgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgcHVibGljbHkgZXhwb3J0ZWQgYmVjYXVzZSBpdCBpcyBkaXJlY3RseSAgICAgICAgICAqLwotICAvKiAgICBpbnZva2VkIGJ5IHRoZSBUcnVlVHlwZSBkZWJ1Z2dlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVFRfUnVuSW5zCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBFeGVjdXRlcyBvbmUgb3IgbW9yZSBpbnN0cnVjdGlvbiBpbiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuICBUaGlzCisgICAqICAgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2YgdGhlIFRydWVUeXBlIG9wY29kZSBpbnRlcnByZXRlci4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGV4ZWMgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQE5vdGU6CisgICAqICAgT25seSB0aGUgb2JqZWN0IG1hbmFnZXIgYW5kIGRlYnVnZ2VyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICAqCisgICAqICAgVGhpcyBmdW5jdGlvbiBpcyBwdWJsaWNseSBleHBvcnRlZCBiZWNhdXNlIGl0IGlzIGRpcmVjdGx5CisgICAqICAgaW52b2tlZCBieSB0aGUgVHJ1ZVR5cGUgZGVidWdnZXIuCisgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgVFRfUnVuSW5zKCBUVF9FeGVjQ29udGV4dCAgZXhlYyApOwogCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgYi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKaW5kZXggYmM4MDg2Zi4uZGY2YzcyYSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCisrKyBiL3NyYy90cnVldHlwZS90dG9ianMuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRvYmpzLmMKKyAqCisgKiAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzYsMzYgKzM2LDM3IEBACiAjaW5jbHVkZSAidHRneHZhci5oIgogI2VuZGlmCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0b2JqcwogCiAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBHTFlQSCBaT05FIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICBHTFlQSCBaT05FIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2dseXBoem9uZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIERlYWxsb2NhdGUgYSBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHpvbmUgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgZ2x5cGggem9uZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9nbHlwaHpvbmVfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRGVhbGxvY2F0ZSBhIGdseXBoIHpvbmUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICB6b25lIDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBnbHlwaCB6b25lLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgdHRfZ2x5cGh6b25lX2RvbmUoIFRUX0dseXBoWm9uZSAgem9uZSApCiAgIHsKQEAgLTg3LDI3ICs4OCwzMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9nbHlwaHpvbmVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBbGxvY2F0ZSBhIG5ldyBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG1heFBvaW50cyAgIDo6IFRoZSBjYXBhY2l0eSBvZiBnbHlwaCB6b25lIGluIHBvaW50cy4gICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWF4Q29udG91cnMgOjogVGhlIGNhcGFjaXR5IG9mIGdseXBoIHpvbmUgaW4gY29udG91cnMuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgem9uZSAgICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgZ2x5cGggem9uZSByZWNvcmQuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2dseXBoem9uZV9uZXcKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEFsbG9jYXRlIGEgbmV3IGdseXBoIHpvbmUuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBtZW1vcnkgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBvYmplY3QuCisgICAqCisgICAqICAgbWF4UG9pbnRzIDo6CisgICAqICAgICBUaGUgY2FwYWNpdHkgb2YgZ2x5cGggem9uZSBpbiBwb2ludHMuCisgICAqCisgICAqICAgbWF4Q29udG91cnMgOjoKKyAgICogICAgIFRoZSBjYXBhY2l0eSBvZiBnbHlwaCB6b25lIGluIGNvbnRvdXJzLgorICAgKgorICAgKiBAT3V0cHV0OgorICAgKiAgIHpvbmUgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGdseXBoIHpvbmUgcmVjb3JkLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZ2x5cGh6b25lX25ldyggRlRfTWVtb3J5ICAgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgICAgbWF4UG9pbnRzLApAQCAtMTQ3LDcgKzE1Miw3IEBACiAgIHsKIAogI2RlZmluZSBUUklDS19OQU1FU19NQVhfQ0hBUkFDVEVSUyAgMTkKLSNkZWZpbmUgVFJJQ0tfTkFNRVNfQ09VTlQgICAgICAgICAgIDIzCisjZGVmaW5lIFRSSUNLX05BTUVTX0NPVU5UICAgICAgICAgICAyNgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgdHJpY2tfbmFtZXNbVFJJQ0tfTkFNRVNfQ09VTlRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVFJJQ0tfTkFNRVNfTUFYX0NIQVJBQ1RFUlMgKyAxXSA9CkBAIC0xNjcsMTIgKzE3MiwxNSBAQAogICAgICAgIkRGR2lybC1XNi1XSU4tQkYiLCAgIC8qIGRmdHQtaDYudHRmOyB2ZXJzaW9uIDEuMDAsIDE5OTMgKi8KICAgICAgICJERkdvdGhpYy1FQiIsICAgICAgICAvKiBEeW5hTGFiIEluYy4gMTk5Mi0xOTk1ICovCiAgICAgICAiREZHeW9TaG8tTHQiLCAgICAgICAgLyogRHluYUxhYiBJbmMuIDE5OTItMTk5NSAqLworICAgICAgIkRGSGVpLU1kLUhLLUJGIiwgICAgIC8qIG1heWJlIER5bmFMYWIgSW5jLiAqLwogICAgICAgIkRGSFNHb3RoaWMtVzUiLCAgICAgIC8qIER5bmFMYWIgSW5jLiAxOTkyLTE5OTUgKi8KICAgICAgICJERkhTTWluY2hvLVczIiwgICAgICAvKiBEeW5hTGFiIEluYy4gMTk5Mi0xOTk1ICovCiAgICAgICAiREZIU01pbmNoby1XNyIsICAgICAgLyogRHluYUxhYiBJbmMuIDE5OTItMTk5NSAqLwogICAgICAgIkRGS2FpU2hvLVNCIiwgICAgICAgIC8qIGRma2Fpc2IudHRmICovCiAgICAgICAiREZLYWlTaHUiLAorICAgICAgIkRGS2FpU2h1LU1kLUhLLUJGIiwgIC8qIG1heWJlIER5bmFMYWIgSW5jLiAqLwogICAgICAgIkRGS2FpLVNCIiwgICAgICAgICAgIC8qIGthaXUudHRmOyB2ZXJzaW9uIDMuMDAsIDE5OTggW0RGS2FpU2h1LVNCLUVzdGQtQkZdICovCisgICAgICAiREZNaW5nLUJkLUhLLUJGIiwgICAgLyogbWF5YmUgRHluYUxhYiBJbmMuICovCiAgICAgICAiRExDIiwgICAgICAgICAgICAgICAgLyogZGZ0dC1tNy50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyBbRExDTWluZ0JvbGRdICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGZ0dC1mNS50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyBbRExDRm9uZ1N1bmddICovCiAgICAgICAiRExDSGF5TWVkaXVtIiwgICAgICAgLyogZGZ0dC1iNS50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyAqLwpAQCAtMjcwLDcgKzI3OCw3IEBACiAgIHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMoIFRUX0ZhY2UgIGZhY2UgKQogICB7CiAjZGVmaW5lIFRSSUNLX1NGTlRfSURTX1BFUl9GQUNFICAgMwotI2RlZmluZSBUUklDS19TRk5UX0lEU19OVU1fRkFDRVMgIDI2CisjZGVmaW5lIFRSSUNLX1NGTlRfSURTX05VTV9GQUNFUyAgMjkKIAogICAgIHN0YXRpYyBjb25zdCB0dF9zZm50X2lkX3JlYyBzZm50X2lkW1RSSUNLX1NGTlRfSURTX05VTV9GQUNFU10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUUklDS19TRk5UX0lEU19QRVJfRkFDRV0gPSB7CkBAIC0yOTksNiArMzA3LDExIEBACiAgICAgICAgIHsgMHhDRTU5NTZFOVVMLCAweDAwMDBCQzg1VUwgfSwgLyogZnBnbSAqLwogICAgICAgICB7IDB4ODI3MkY0MTZVTCwgMHgwMDAwMDA0NVVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCisgICAgICB7IC8qIERGSGVpLU1kLUhLLUJGICovCisgICAgICAgIHsgMHgxMjU3RUI0NlVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4RjY5OUQxNjBVTCwgMHgwMDAwNzE1RlVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEQyMjJGNTY4VUwsIDB4MDAwMDAzQkNVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAogICAgICAgeyAvKiBERkhTR290aGljLVc1ICovCiAgICAgICAgIHsgMHgxMjYyRUI0RVVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLwogICAgICAgICB7IDB4RTg2QTVENjRVTCwgMHgwMDAwNzk0MFVMIH0sIC8qIGZwZ20gKi8KQEAgLTMyNCw2ICszMzcsMTYgQEAKICAgICAgICAgeyAweEE2RTc4QzAxVUwsIDB4MDAwMDg5OThVTCB9LCAvKiBmcGdtICovCiAgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKKyAgICAgIHsgLyogREZLYWlTaHUtTWQtSEstQkYgKi8KKyAgICAgICAgeyAweDExRTVFQUQ0VUwsIDB4MDAwMDAzNjBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHg5REIyODJCMlVMLCAweDAwMDBDMDZFVUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4NTNFNkQ3Q0FVTCwgMHgwMDAwMDA4MlVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIERGTWluZy1CZC1ISy1CRiAqLworICAgICAgICB7IDB4MTI0M0VCMThVTCwgMHgwMDAwMDM1MFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweEJBMEE4QzMwVUwsIDB4MDAwMDc0QURVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhGM0Q4MzQwOVVMLCAweDAwMDAwMzdCVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKICAgICAgIHsgLyogRExDTGlTaHUgKi8KICAgICAgICAgeyAweDA3RENGNTQ2VUwsIDB4MDAwMDAzMDhVTCB9LCAvKiBjdnQgICovCiAgICAgICAgIHsgMHg0MEZFN0M5MFVMLCAweDAwMDA4RTJBVUwgfSwgLyogZnBnbSAqLwpAQCAtNTQ4LDMyICs1NzEsMzcgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZSBhIGdpdmVuIFRydWVUeXBlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtICAgICA6OiBUaGUgc291cmNlIGZvbnQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBpbiBiaXRzIDAtMTUuICBUaGUgbnVtYmVyZWQgaW5zdGFuY2UgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgaW5kZXh+K34xIG9mIGEgR1ggKHN1Yilmb250LCBpZiBhcHBsaWNhYmxlLCBpbiBiaXRzICAqLwotICAvKiAgICAgICAgICAgICAgICAgIDE2LTMwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFyYW1zICAgICA6OiBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgbmV3bHkgYnVpbHQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfaW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZSBhIGdpdmVuIFRydWVUeXBlIGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgc291cmNlIGZvbnQgc3RyZWFtLgorICAgKgorICAgKiAgIGZhY2VfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgVHJ1ZVR5cGUgZm9udCwgaWYgd2UgYXJlIG9wZW5pbmcgYQorICAgKiAgICAgY29sbGVjdGlvbiwgaW4gYml0cyAwLTE1LiAgVGhlIG51bWJlcmVkIGluc3RhbmNlCisgICAqICAgICBpbmRleH4rfjEgb2YgYSBHWCAoc3ViKWZvbnQsIGlmIGFwcGxpY2FibGUsIGluIGJpdHMKKyAgICogICAgIDE2LTMwLgorICAgKgorICAgKiAgIG51bV9wYXJhbXMgOjoKKyAgICogICAgIE51bWJlciBvZiBhZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqICAgcGFyYW1zIDo6CisgICAqICAgICBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgbmV3bHkgYnVpbHQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2luaXQoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICB0dGZhY2UsICAgICAgLyogVFRfRmFjZSAqLwpAQCAtNzI1LDE3ICs3NTMsMTggQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmluYWxpemUgYSBnaXZlbiBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSA6OiBBIHBvaW50ZXIgdG8gdGhlIGZhY2Ugb2JqZWN0IHRvIGRlc3Ryb3kuICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemUgYSBnaXZlbiBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZmFjZSBvYmplY3QgdG8gZGVzdHJveS4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2ZhY2VfZG9uZSggRlRfRmFjZSAgdHRmYWNlICkgICAgICAgICAgIC8qIFRUX0ZhY2UgKi8KICAgewpAQCAtNzgxLDMwICs4MTAsMzIgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkUgIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X3NpemVfcnVuX2ZwZ20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJ1biB0aGUgZm9udCBwcm9ncmFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGVkYW50aWMgOjogU2V0IGlmIGJ5dGVjb2RlIGV4ZWN1dGlvbiBzaG91bGQgYmUgcGVkYW50aWMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X3NpemVfcnVuX2ZwZ20KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFJ1biB0aGUgZm9udCBwcm9ncmFtLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNpemUgb2JqZWN0LgorICAgKgorICAgKiAgIHBlZGFudGljIDo6CisgICAqICAgICBTZXQgaWYgYnl0ZWNvZGUgZXhlY3V0aW9uIHNob3VsZCBiZSBwZWRhbnRpYy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X3NpemVfcnVuX2ZwZ20oIFRUX1NpemUgIHNpemUsCiAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHBlZGFudGljICkKQEAgLTg4MSwyMiArOTEyLDI0IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X3NpemVfcnVuX3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJ1biB0aGUgY29udHJvbCB2YWx1ZSBwcm9ncmFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGVkYW50aWMgOjogU2V0IGlmIGJ5dGVjb2RlIGV4ZWN1dGlvbiBzaG91bGQgYmUgcGVkYW50aWMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X3NpemVfcnVuX3ByZXAKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFJ1biB0aGUgY29udHJvbCB2YWx1ZSBwcm9ncmFtLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc2l6ZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHNpemUgb2JqZWN0LgorICAgKgorICAgKiAgIHBlZGFudGljIDo6CisgICAqICAgICBTZXQgaWYgYnl0ZWNvZGUgZXhlY3V0aW9uIHNob3VsZCBiZSBwZWRhbnRpYy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X3NpemVfcnVuX3ByZXAoIFRUX1NpemUgIHNpemUsCiAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHBlZGFudGljICkKQEAgLTExNzMsMjAgKzEyMDYsMjEgQEAKICNlbmRpZiAvKiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X3NpemVfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluaXRpYWxpemUgYSBuZXcgVHJ1ZVR5cGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgOjogQSBoYW5kbGUgdG8gdGhlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9zaXplX2luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemUgYSBuZXcgVHJ1ZVR5cGUgc2l6ZSBvYmplY3QuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc2l6ZSBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9zaXplX2luaXQoIEZUX1NpemUgIHR0c2l6ZSApICAgICAgICAgICAvKiBUVF9TaXplICovCiAgIHsKQEAgLTEyMDYsMTcgKzEyNDAsMTggQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfc2l6ZV9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRydWVUeXBlIHNpemUgb2JqZWN0IGZpbmFsaXplci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2l6ZSA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X3NpemVfZG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhlIFRydWVUeXBlIHNpemUgb2JqZWN0IGZpbmFsaXplci4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHNpemUgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc2l6ZSBvYmplY3QuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICB0dF9zaXplX2RvbmUoIEZUX1NpemUgIHR0c2l6ZSApICAgICAgICAgICAvKiBUVF9TaXplICovCiAgIHsKQEAgLTEyMzEsMjIgKzEyNjYsMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfc2l6ZV9yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUmVzZXQgYSBUcnVlVHlwZSBzaXplIHdoZW4gcmVzb2x1dGlvbnMgYW5kIGNoYXJhY3RlciBkaW1lbnNpb25zICAgICovCi0gIC8qICAgIGhhdmUgYmVlbiBjaGFuZ2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgb25seV9oZWlnaHQgOjogT25seSByZWNvbXB1dGUgYXNjZW5kZXIsIGRlc2NlbmRlciwgYW5kIGhlaWdodDsgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIHRoaXMgZmxhZyBpcyB1c2VkIGZvciB2YXJpYXRpb24gZm9udHMgd2hlcmUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBgdHRfc2l6ZV9yZXNldCcgaXMgdXNlZCBhcyBhbiBpdGVyYXRvciBmdW5jdGlvbi4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfc2l6ZV9yZXNldAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgUmVzZXQgYSBUcnVlVHlwZSBzaXplIHdoZW4gcmVzb2x1dGlvbnMgYW5kIGNoYXJhY3RlciBkaW1lbnNpb25zCisgICAqICAgaGF2ZSBiZWVuIGNoYW5nZWQuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzaXplIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IHNpemUgb2JqZWN0LgorICAgKgorICAgKiAgIG9ubHlfaGVpZ2h0IDo6CisgICAqICAgICBPbmx5IHJlY29tcHV0ZSBhc2NlbmRlciwgZGVzY2VuZGVyLCBhbmQgaGVpZ2h0OworICAgKiAgICAgdGhpcyBmbGFnIGlzIHVzZWQgZm9yIHZhcmlhdGlvbiBmb250cyB3aGVyZQorICAgKiAgICAgYHR0X3NpemVfcmVzZXQnIGlzIHVzZWQgYXMgYW4gaXRlcmF0b3IgZnVuY3Rpb24uCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfc2l6ZV9yZXNldCggVFRfU2l6ZSAgc2l6ZSwKICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgb25seV9oZWlnaHQgKQpAQCAtMTM0MCwyMCArMTM3NywyMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9kcml2ZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplIGEgZ2l2ZW4gVHJ1ZVR5cGUgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkcml2ZXIgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZHJpdmVyX2luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemUgYSBnaXZlbiBUcnVlVHlwZSBkcml2ZXIgb2JqZWN0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZHJpdmVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGRyaXZlciBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9kcml2ZXJfaW5pdCggRlRfTW9kdWxlICB0dGRyaXZlciApICAgICAvKiBUVF9Ecml2ZXIgKi8KICAgewpAQCAtMTM4MCwxNyArMTQxOCwxOCBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9kcml2ZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGaW5hbGl6ZSBhIGdpdmVuIFRydWVUeXBlIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkcml2ZXIgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBUcnVlVHlwZSBkcml2ZXIuICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZHJpdmVyX2RvbmUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEZpbmFsaXplIGEgZ2l2ZW4gVHJ1ZVR5cGUgZHJpdmVyLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZHJpdmVyIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IFRydWVUeXBlIGRyaXZlci4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIHR0X2RyaXZlcl9kb25lKCBGVF9Nb2R1bGUgIHR0ZHJpdmVyICkgICAgIC8qIFRUX0RyaXZlciAqLwogICB7CkBAIC0xMzk4LDIwICsxNDM3LDIxIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X3Nsb3RfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEluaXRpYWxpemUgYSBuZXcgc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNsb3QgOjogQSBoYW5kbGUgdG8gdGhlIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9zbG90X2luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemUgYSBuZXcgc2xvdCBvYmplY3QuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBzbG90IDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgc2xvdCBvYmplY3QuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9zbG90X2luaXQoIEZUX0dseXBoU2xvdCAgc2xvdCApCiAgIHsKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dG9ianMuaCBiL3NyYy90cnVldHlwZS90dG9ianMuaAppbmRleCAzOGZhMzBlLi5kY2ZmM2Y3IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dG9ianMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgT2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dG9ianMuaAorICoKKyAqICAgT2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUVE9CSlNfSF8KQEAgLTI4LDQwICsyOCw0MCBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9Ecml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIGRyaXZlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAVHlwZToKKyAgICogICBUVF9Ecml2ZXIKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHJ1ZVR5cGUgZHJpdmVyIG9iamVjdC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IFRUX0RyaXZlclJlY18qICBUVF9Ecml2ZXI7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGlzIGlzIGEgZGlyZWN0IHR5cGVkZWYgb2YgRlRfR2x5cGhTbG90LCBhcyB0aGVyZSBpcyBub3RoaW5nICAgICAgKi8KLSAgLyogICAgc3BlY2lmaWMgYWJvdXQgdGhlIFRydWVUeXBlIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgVFRfR2x5cGhTbG90CisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIGhhbmRsZSB0byBhIFRydWVUeXBlIGdseXBoIHNsb3Qgb2JqZWN0LgorICAgKgorICAgKiBATm90ZToKKyAgICogICBUaGlzIGlzIGEgZGlyZWN0IHR5cGVkZWYgb2YgRlRfR2x5cGhTbG90LCBhcyB0aGVyZSBpcyBub3RoaW5nCisgICAqICAgc3BlY2lmaWMgYWJvdXQgdGhlIFRydWVUeXBlIGdseXBoIHNsb3QuCisgICAqLwogICB0eXBlZGVmIEZUX0dseXBoU2xvdCAgVFRfR2x5cGhTbG90OwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVFRfR3JhcGhpY3NTdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRydWVUeXBlIGdyYXBoaWNzIHN0YXRlIHVzZWQgZHVyaW5nIGJ5dGVjb2RlIGludGVycHJldGF0aW9uLiAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFN0cnVjdDoKKyAgICogICBUVF9HcmFwaGljc1N0YXRlCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBUaGUgVHJ1ZVR5cGUgZ3JhcGhpY3Mgc3RhdGUgdXNlZCBkdXJpbmcgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24uCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfR3JhcGhpY3NTdGF0ZV8KICAgewogICAgIEZUX1VTaG9ydCAgICAgIHJwMDsKQEAgLTExMywyNSArMTEzLDI1IEBACiAKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogIEVYRUNVVElPTiBTVUJUQUJMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgVGhlc2Ugc3ViLXRhYmxlcyByZWxhdGUgdG8gaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRVhFQ1VUSU9OIFNVQlRBQkxFUworICAgKgorICAgKiBUaGVzZSBzdWItdGFibGVzIHJlbGF0ZSB0byBpbnN0cnVjdGlvbiBleGVjdXRpb24uCisgICAqCisgICAqLwogCiAKICNkZWZpbmUgVFRfTUFYX0NPREVfUkFOR0VTICAzCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXJlIGNhbiBvbmx5IGJlIDMgYWN0aXZlIGNvZGUgcmFuZ2VzIGF0IG9uY2U6ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gdGhlIEZvbnQgUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIHRoZSBDVlQgUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgLSBhIGdseXBoJ3MgaW5zdHJ1Y3Rpb25zIHNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZXJlIGNhbiBvbmx5IGJlIDMgYWN0aXZlIGNvZGUgcmFuZ2VzIGF0IG9uY2U6CisgICAqICAgLSB0aGUgRm9udCBQcm9ncmFtCisgICAqICAgLSB0aGUgQ1ZUIFByb2dyYW0KKyAgICogICAtIGEgZ2x5cGgncyBpbnN0cnVjdGlvbnMgc2V0CisgICAqLwogICB0eXBlZGVmIGVudW0gIFRUX0NvZGVSYW5nZV9UYWdfCiAgIHsKICAgICB0dF9jb2RlcmFuZ2Vfbm9uZSA9IDAsCkBAIC0xNTIsMTAgKzE1MiwxMCBAQAogICB0eXBlZGVmIFRUX0NvZGVSYW5nZSAgVFRfQ29kZVJhbmdlVGFibGVbVFRfTUFYX0NPREVfUkFOR0VTXTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRGVmaW5lcyBhIGZ1bmN0aW9uL2luc3RydWN0aW9uIGRlZmluaXRpb24gcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lcyBhIGZ1bmN0aW9uL2luc3RydWN0aW9uIGRlZmluaXRpb24gcmVjb3JkLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFRUX0RlZlJlY29yZF8KICAgewogICAgIEZUX0ludCAgICByYW5nZTsgICAgICAgICAgLyogaW4gd2hpY2ggY29kZSByYW5nZSBpcyBpdCBsb2NhdGVkPyAgICAgKi8KQEAgLTE2OSwxMCArMTY5LDEwIEBACiAgIH0gVFRfRGVmUmVjb3JkLCAqVFRfRGVmQXJyYXk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN1YmdseXBoIHRyYW5zZm9ybWF0aW9uIHJlY29yZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFN1YmdseXBoIHRyYW5zZm9ybWF0aW9uIHJlY29yZC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9UcmFuc2Zvcm1fCiAgIHsKICAgICBGVF9GaXhlZCAgICB4eCwgeHk7ICAgICAvKiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggY29lZmZpY2llbnRzICovCkBAIC0xODIsNzIgKzE4Miw3MiBAQAogICB9IFRUX1RyYW5zZm9ybTsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSBub3RlIHJlZ2FyZGluZyBub24tc3F1YXJlZCBwaXhlbHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAoVGhpcyB0ZXh0IHdpbGwgcHJvYmFibHkgZ28gaW50byBzb21lIGRvY3MgYXQgc29tZSB0aW1lOyBmb3Igbm93LCBpdCAgKi8KLSAgLyogaXMga2VwdCBoZXJlIHRvIGV4cGxhaW4gc29tZSBkZWZpbml0aW9ucyBpbiB0aGUgVFRfU2l6ZV9NZXRyaWNzICAgICAgICovCi0gIC8qIHJlY29yZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIENWVCBpcyBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHZhbHVlcyB0aGF0IGNvbnRyb2wgICAgICovCi0gIC8qIGNlcnRhaW4gaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljcyBpbiBhIGZvbnQsIGxpa2UgdGhlIGhlaWdodCBvZiBhbGwgICAqLwotICAvKiBjYXBpdGFscywgYWxsIGxvd2VyY2FzZSBsZXR0ZXIsIGRlZmF1bHQgc3BhY2luZyBvciBzdGVtIHdpZHRoL2hlaWdodC4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXNlIHZhbHVlcyBhcmUgZm91bmQgaW4gRlVuaXRzIGluIHRoZSBmb250IGZpbGUsIGFuZCBtdXN0IGJlIHNjYWxlZCAqLwotICAvKiB0byBwaXhlbCBjb29yZGluYXRlcyBiZWZvcmUgYmVpbmcgdXNlZCBieSB0aGUgQ1ZUIGFuZCBnbHlwaCBwcm9ncmFtcy4gKi8KLSAgLyogVW5mb3J0dW5hdGVseSwgd2hlbiB1c2luZyBkaXN0aW5jdCB4IGFuZCB5IHJlc29sdXRpb25zIChvciBkaXN0aW5jdCB4ICovCi0gIC8qIGFuZCB5IHBvaW50c2l6ZXMpLCB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNjYWxpbmdzLiAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQSBmaXJzdCB0cnkgd2FzIHRvIGltcGxlbWVudCBhIGBsYXp5JyBzY2hlbWUgd2hlcmUgYWxsIHZhbHVlcyB3ZXJlICAgICovCi0gIC8qIHNjYWxlZCB3aGVuIGZpcnN0IHVzZWQuICBIb3dldmVyLCB3aGlsZSBzb21lIHZhbHVlcyBhcmUgYWx3YXlzIHVzZWQgICAqLwotICAvKiBpbiB0aGUgc2FtZSBkaXJlY3Rpb24sIHNvbWUgb3RoZXJzIGFyZSB1c2VkIHVuZGVyIG1hbnkgZGlmZmVyZW50ICAgICAgKi8KLSAgLyogY2lyY3Vtc3RhbmNlcyBhbmQgb3JpZW50YXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJIGhhdmUgZm91bmQgYSBzaW1wbGVyIHdheSB0byBkbyB0aGUgc2FtZSwgYW5kIGl0IGV2ZW4gc2VlbXMgdG8gd29yayAgKi8KLSAgLyogaW4gbW9zdCBvZiB0aGUgY2FzZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIEFsbCBDVlQgdmFsdWVzIGFyZSBzY2FsZWQgdG8gdGhlIG1heGltdW0gcHBlbSBzaXplLiAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gV2hlbiBwZXJmb3JtaW5nIGEgcmVhZCBvciB3cml0ZSBpbiB0aGUgQ1ZULCBhIHJhdGlvIGZhY3RvciBpcyB1c2VkICAqLwotICAvKiAgIHRvIHBlcmZvcm0gYWRlcXVhdGUgc2NhbGluZy4gIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICB4X3BwZW0gPSAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgeV9wcGVtID0gMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgV2UgY2hvb3NlIHBwZW0gPSB4X3BwZW0gPSAxNCBhcyB0aGUgQ1ZUIHNjYWxpbmcgc2l6ZS4gIEFsbCBjdnQgICAgICAqLwotICAvKiAgIGVudHJpZXMgYXJlIHNjYWxlZCB0byBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICB4X3JhdGlvID0gMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgeV9yYXRpbyA9IHlfcHBlbS9wcGVtICg8IDEuMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgV2UgY29tcHV0ZSB0aGUgY3VycmVudCByYXRpbyBsaWtlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIElmIHByb2pWZWN0b3IgaXMgaG9yaXpvbnRhbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIHJhdGlvID0geF9yYXRpbyA9IDEuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIGlmIHByb2pWZWN0b3IgaXMgdmVydGljYWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIHJhdGlvID0geV9yYXRpbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAtIGVsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIHJhdGlvID0gc3FydCggKHByb2oueCAqIHhfcmF0aW8pIF4gMiArIChwcm9qLnkgKiB5X3JhdGlvKSBeIDIgKSAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBSZWFkaW5nIGEgY3Z0IHZhbHVlIHJldHVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICByYXRpbyAqIGN2dFtpbmRleF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBXcml0aW5nIGEgY3Z0IHZhbHVlIGluIHBpeGVsczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjdnRbaW5kZXhdIC8gcmF0aW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGUgY3VycmVudCBwcGVtIGlzIHNpbXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICByYXRpbyAqIHBwZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBBIG5vdGUgcmVnYXJkaW5nIG5vbi1zcXVhcmVkIHBpeGVsczoKKyAgICoKKyAgICogKFRoaXMgdGV4dCB3aWxsIHByb2JhYmx5IGdvIGludG8gc29tZSBkb2NzIGF0IHNvbWUgdGltZTsgZm9yIG5vdywgaXQKKyAgICogaXMga2VwdCBoZXJlIHRvIGV4cGxhaW4gc29tZSBkZWZpbml0aW9ucyBpbiB0aGUgVFRfU2l6ZV9NZXRyaWNzCisgICAqIHJlY29yZCkuCisgICAqCisgICAqIFRoZSBDVlQgaXMgYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB2YWx1ZXMgdGhhdCBjb250cm9sCisgICAqIGNlcnRhaW4gaW1wb3J0YW50IGNoYXJhY3RlcmlzdGljcyBpbiBhIGZvbnQsIGxpa2UgdGhlIGhlaWdodCBvZiBhbGwKKyAgICogY2FwaXRhbHMsIGFsbCBsb3dlcmNhc2UgbGV0dGVyLCBkZWZhdWx0IHNwYWNpbmcgb3Igc3RlbSB3aWR0aC9oZWlnaHQuCisgICAqCisgICAqIFRoZXNlIHZhbHVlcyBhcmUgZm91bmQgaW4gRlVuaXRzIGluIHRoZSBmb250IGZpbGUsIGFuZCBtdXN0IGJlIHNjYWxlZAorICAgKiB0byBwaXhlbCBjb29yZGluYXRlcyBiZWZvcmUgYmVpbmcgdXNlZCBieSB0aGUgQ1ZUIGFuZCBnbHlwaCBwcm9ncmFtcy4KKyAgICogVW5mb3J0dW5hdGVseSwgd2hlbiB1c2luZyBkaXN0aW5jdCB4IGFuZCB5IHJlc29sdXRpb25zIChvciBkaXN0aW5jdCB4CisgICAqIGFuZCB5IHBvaW50c2l6ZXMpLCB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNjYWxpbmdzLgorICAgKgorICAgKiBBIGZpcnN0IHRyeSB3YXMgdG8gaW1wbGVtZW50IGEgYGxhenknIHNjaGVtZSB3aGVyZSBhbGwgdmFsdWVzIHdlcmUKKyAgICogc2NhbGVkIHdoZW4gZmlyc3QgdXNlZC4gIEhvd2V2ZXIsIHdoaWxlIHNvbWUgdmFsdWVzIGFyZSBhbHdheXMgdXNlZAorICAgKiBpbiB0aGUgc2FtZSBkaXJlY3Rpb24sIHNvbWUgb3RoZXJzIGFyZSB1c2VkIHVuZGVyIG1hbnkgZGlmZmVyZW50CisgICAqIGNpcmN1bXN0YW5jZXMgYW5kIG9yaWVudGF0aW9ucy4KKyAgICoKKyAgICogSSBoYXZlIGZvdW5kIGEgc2ltcGxlciB3YXkgdG8gZG8gdGhlIHNhbWUsIGFuZCBpdCBldmVuIHNlZW1zIHRvIHdvcmsKKyAgICogaW4gbW9zdCBvZiB0aGUgY2FzZXM6CisgICAqCisgICAqIC0gQWxsIENWVCB2YWx1ZXMgYXJlIHNjYWxlZCB0byB0aGUgbWF4aW11bSBwcGVtIHNpemUuCisgICAqCisgICAqIC0gV2hlbiBwZXJmb3JtaW5nIGEgcmVhZCBvciB3cml0ZSBpbiB0aGUgQ1ZULCBhIHJhdGlvIGZhY3RvciBpcyB1c2VkCisgICAqICAgdG8gcGVyZm9ybSBhZGVxdWF0ZSBzY2FsaW5nLiAgRXhhbXBsZToKKyAgICoKKyAgICogICAgIHhfcHBlbSA9IDE0CisgICAqICAgICB5X3BwZW0gPSAxMAorICAgKgorICAgKiAgIFdlIGNob29zZSBwcGVtID0geF9wcGVtID0gMTQgYXMgdGhlIENWVCBzY2FsaW5nIHNpemUuICBBbGwgY3Z0CisgICAqICAgZW50cmllcyBhcmUgc2NhbGVkIHRvIGl0LgorICAgKgorICAgKiAgICAgeF9yYXRpbyA9IDEuMAorICAgKiAgICAgeV9yYXRpbyA9IHlfcHBlbS9wcGVtICg8IDEuMCkKKyAgICoKKyAgICogICBXZSBjb21wdXRlIHRoZSBjdXJyZW50IHJhdGlvIGxpa2U6CisgICAqCisgICAqICAgLSBJZiBwcm9qVmVjdG9yIGlzIGhvcml6b250YWwsCisgICAqICAgICAgIHJhdGlvID0geF9yYXRpbyA9IDEuMAorICAgKgorICAgKiAgIC0gaWYgcHJvalZlY3RvciBpcyB2ZXJ0aWNhbCwKKyAgICogICAgICAgcmF0aW8gPSB5X3JhdGlvCisgICAqCisgICAqICAgLSBlbHNlLAorICAgKiAgICAgICByYXRpbyA9IHNxcnQoIChwcm9qLnggKiB4X3JhdGlvKSBeIDIgKyAocHJvai55ICogeV9yYXRpbykgXiAyICkKKyAgICoKKyAgICogICBSZWFkaW5nIGEgY3Z0IHZhbHVlIHJldHVybnMKKyAgICogICAgIHJhdGlvICogY3Z0W2luZGV4XQorICAgKgorICAgKiAgIFdyaXRpbmcgYSBjdnQgdmFsdWUgaW4gcGl4ZWxzOgorICAgKiAgICAgY3Z0W2luZGV4XSAvIHJhdGlvCisgICAqCisgICAqICAgVGhlIGN1cnJlbnQgcHBlbSBpcyBzaW1wbHkKKyAgICogICAgIHJhdGlvICogcHBlbQorICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogTWV0cmljcyB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBzaXplIGFuZCBjb250ZXh0IG9iamVjdHMuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogTWV0cmljcyB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBzaXplIGFuZCBjb250ZXh0IG9iamVjdHMuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgVFRfU2l6ZV9NZXRyaWNzXwogICB7CiAgICAgLyogZm9yIG5vbi1zcXVhcmUgcGl4ZWxzICovCkBAIC0yNjgsMTAgKzI2OCwxMCBAQAogICB9IFRUX1NpemVfTWV0cmljczsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHJ1ZVR5cGUgc2l6ZSBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVHJ1ZVR5cGUgc2l6ZSBjbGFzcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9TaXplUmVjXwogICB7CiAgICAgRlRfU2l6ZVJlYyAgICAgICAgIHJvb3Q7CkBAIC0zMjQsMTAgKzMyNCwxMCBAQAogICB9IFRUX1NpemVSZWM7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRydWVUeXBlIGRyaXZlciBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRydWVUeXBlIGRyaXZlciBjbGFzcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUVF9Ecml2ZXJSZWNfCiAgIHsKICAgICBGVF9Ecml2ZXJSZWMgIHJvb3Q7CkBAIC0zNDgsMTAgKzM0OCwxMCBAQAogICAvKiB3aWxsIGFsd2F5cyB1c2UgdGhlIFRUIGRyaXZlciB0byBjcmVhdGUgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRmFjZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRmFjZSBmdW5jdGlvbnMKKyAgICovCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfaW5pdCggRlRfU3RyZWFtICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgIHR0ZmFjZSwgICAgICAvKiBUVF9GYWNlICovCkBAIC0zNjMsMTAgKzM2MywxMCBAQAogICB0dF9mYWNlX2RvbmUoIEZUX0ZhY2UgIHR0ZmFjZSApOyAgICAgICAgICAvKiBUVF9GYWNlICovCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFNpemUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFNpemUgZnVuY3Rpb25zCisgICAqLwogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICB0dF9zaXplX2luaXQoIEZUX1NpemUgIHR0c2l6ZSApOyAgICAgICAgICAvKiBUVF9TaXplICovCiAKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIG9ubHlfaGVpZ2h0ICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERyaXZlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIERyaXZlciBmdW5jdGlvbnMKKyAgICovCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHR0X2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIHR0ZHJpdmVyICk7ICAgIC8qIFRUX0RyaXZlciAqLwogCkBAIC00MDUsMTAgKzQwNSwxMCBAQAogICB0dF9kcml2ZXJfZG9uZSggRlRfTW9kdWxlICB0dGRyaXZlciApOyAgICAvKiBUVF9Ecml2ZXIgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU2xvdCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogU2xvdCBmdW5jdGlvbnMKKyAgICovCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHR0X3Nsb3RfaW5pdCggRlRfR2x5cGhTbG90ICBzbG90ICk7CiAKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHBpYy5jIGIvc3JjL3RydWV0eXBlL3R0cGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYmI4MDYuLjAwMDAwMDAKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRwaWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciB0cnVldHlwZSBtb2R1bGUuICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgInR0cGljLmgiCi0jaW5jbHVkZSAidHRlcnJvcnMuaCIKLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLQotICAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIFBJQyBpbml0IGZ1bmN0aW9ucyBmcm9tIHR0ZHJpdmVyLmMgKi8KLSAgRlRfRXJyb3IKLSAgRlRfQ3JlYXRlX0NsYXNzX3R0X3NlcnZpY2VzKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApOwotICB2b2lkCi0gIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfc2VydmljZXMoIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiApOwotICB2b2lkCi0gIEZUX0luaXRfQ2xhc3NfdHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzKAotICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjKiAgc3ZfbW0gKTsKLSAgdm9pZAotICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfdHJ1ZXR5cGVfZ2x5ZigKLSAgICBGVF9TZXJ2aWNlX1RUR2x5ZlJlYyogIHN2X3R0Z2x5ZiApOwotCi0KLSAgdm9pZAotICB0dF9kcml2ZXJfY2xhc3NfcGljX2ZyZWUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9NZW1vcnkgICAgICAgICAgbWVtb3J5ICAgICAgICA9IGxpYnJhcnktPm1lbW9yeTsKLQotCi0gICAgaWYgKCBwaWNfY29udGFpbmVyLT50cnVldHlwZSApCi0gICAgewotICAgICAgVFRNb2R1bGVQSUMqICBjb250YWluZXIgPSAoVFRNb2R1bGVQSUMqKXBpY19jb250YWluZXItPnRydWV0eXBlOwotCi0KLSAgICAgIGlmICggY29udGFpbmVyLT50dF9zZXJ2aWNlcyApCi0gICAgICAgIEZUX0Rlc3Ryb3lfQ2xhc3NfdHRfc2VydmljZXMoIGxpYnJhcnksIGNvbnRhaW5lci0+dHRfc2VydmljZXMgKTsKLSAgICAgIGNvbnRhaW5lci0+dHRfc2VydmljZXMgPSBOVUxMOwotICAgICAgRlRfRlJFRSggY29udGFpbmVyICk7Ci0gICAgICBwaWNfY29udGFpbmVyLT50cnVldHlwZSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLQotICBGVF9FcnJvcgotICB0dF9kcml2ZXJfY2xhc3NfcGljX2luaXQoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKQotICB7Ci0gICAgRlRfUElDX0NvbnRhaW5lciogIHBpY19jb250YWluZXIgPSAmbGlicmFyeS0+cGljX2NvbnRhaW5lcjsKLSAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3IgICAgICAgICA9IEZUX0Vycl9PazsKLSAgICBUVE1vZHVsZVBJQyogICAgICAgY29udGFpbmVyICAgICA9IE5VTEw7Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgIG1lbW9yeSAgICAgICAgPSBsaWJyYXJ5LT5tZW1vcnk7Ci0KLQotICAgIC8qIGFsbG9jYXRlIHBvaW50ZXIsIGNsZWFyIGFuZCBzZXQgZ2xvYmFsIGNvbnRhaW5lciBwb2ludGVyICovCi0gICAgaWYgKCBGVF9BTExPQyggY29udGFpbmVyLCBzaXplb2YgKCAqY29udGFpbmVyICkgKSApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgRlRfTUVNX1NFVCggY29udGFpbmVyLCAwLCBzaXplb2YgKCAqY29udGFpbmVyICkgKTsKLSAgICBwaWNfY29udGFpbmVyLT50cnVldHlwZSA9IGNvbnRhaW5lcjsKLQotICAgIC8qIGluaXRpYWxpemUgcG9pbnRlciB0YWJsZSAtIHRoaXMgaXMgaG93IHRoZSBtb2R1bGUgdXN1YWxseSAqLwotICAgIC8qIGV4cGVjdHMgdGhpcyBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGVycm9yID0gRlRfQ3JlYXRlX0NsYXNzX3R0X3NlcnZpY2VzKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbmVyLT50dF9zZXJ2aWNlcyApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSAgICBGVF9Jbml0X0NsYXNzX3R0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycygKLSAgICAgICZjb250YWluZXItPnR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycyApOwotI2VuZGlmCi0gICAgRlRfSW5pdF9DbGFzc190dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYoCi0gICAgICAmY29udGFpbmVyLT50dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYgKTsKLQotICBFeGl0OgotICAgIGlmICggZXJyb3IgKQotICAgICAgdHRfZHJpdmVyX2NsYXNzX3BpY19mcmVlKCBsaWJyYXJ5ICk7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLSNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGljLmggYi9zcmMvdHJ1ZXR5cGUvdHRwaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4NzhhZS4uMDAwMDAwMAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0cGljLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgdHJ1ZXR5cGUgbW9kdWxlLiAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBUVFBJQ19IXwotI2RlZmluZSBUVFBJQ19IXwotCi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICi0KLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotCi0jZGVmaW5lIFRUX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgdHRfc2VydmljZXMKLSNkZWZpbmUgVFRfU0VSVklDRV9HWF9NVUxUSV9NQVNURVJTX0dFVCAgICB0dF9zZXJ2aWNlX2d4X211bHRpX21hc3RlcnMKLSNkZWZpbmUgVFRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfR0VUICB0dF9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucwotI2RlZmluZSBUVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfR0VUICAgICAgIHR0X3NlcnZpY2VfdHJ1ZXR5cGVfZ2x5ZgotI2RlZmluZSBUVF9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICAgICAgICAgIHR0X3NlcnZpY2VfcHJvcGVydGllcwotCi0jZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwotCi0jaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKLSNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKLQotCi1GVF9CRUdJTl9IRUFERVIKLQotICB0eXBlZGVmIHN0cnVjdCAgVFRNb2R1bGVQSUNfCi0gIHsKLSAgICBGVF9TZXJ2aWNlRGVzY1JlYyogICAgICAgICAgICAgICB0dF9zZXJ2aWNlczsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCi0gICAgRlRfU2VydmljZV9NdWx0aU1hc3RlcnNSZWMgICAgICAgdHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzOwotICAgIEZUX1NlcnZpY2VfTWV0cmljc1ZhcmlhdGlvbnNSZWMgIHR0X3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zOwotI2VuZGlmCi0gICAgRlRfU2VydmljZV9UVEdseWZSZWMgICAgICAgICAgICAgdHRfc2VydmljZV90cnVldHlwZV9nbHlmOwotICAgIEZUX1NlcnZpY2VfUHJvcGVydGllc1JlYyAgICAgICAgIHR0X3NlcnZpY2VfcHJvcGVydGllczsKLQotICB9IFRUTW9kdWxlUElDOwotCi0KLSNkZWZpbmUgR0VUX1BJQyggbGliICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIChUVE1vZHVsZVBJQyopKChsaWIpLT5waWNfY29udGFpbmVyLnRydWV0eXBlKSApCi0jZGVmaW5lIFRUX1NFUlZJQ0VTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlcyApCi0jZGVmaW5lIFRUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucyApCi0jZGVmaW5lIFRUX1NFUlZJQ0VfR1hfTVVMVElfTUFTVEVSU19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+dHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzICkKLSNkZWZpbmUgVFRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT50dF9zZXJ2aWNlX3RydWV0eXBlX2dseWYgKQotI2RlZmluZSBUVF9TRVJWSUNFX1BST1BFUlRJRVNfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPnR0X3NlcnZpY2VfcHJvcGVydGllcyApCi0KLQotICAvKiBzZWUgdHRwaWMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uICovCi0gIHZvaWQKLSAgdHRfZHJpdmVyX2NsYXNzX3BpY19mcmVlKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLSAgRlRfRXJyb3IKLSAgdHRfZHJpdmVyX2NsYXNzX3BpY19pbml0KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICk7Ci0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCi0KLSAvKiAqLwotCi0jZW5kaWYgLyogVFRQSUNfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHBsb2FkLmMgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCmluZGV4IGQ5NTI2YWQuLmY3OTM1Y2YgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHBsb2FkLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0cGxvYWQuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHRwbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHRwbG9hZC5jCisgKgorICogICBUcnVlVHlwZS1zcGVjaWZpYyB0YWJsZXMgbG9hZGVyIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMSwzMyArMzEsMzUgQEAKICNpbmNsdWRlICJ0dGVycm9ycy5oIgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3R0cGxvYWQKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHR0X2ZhY2VfbG9hZF9sb2NhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIExvYWQgdGhlIGxvY2F0aW9ucyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHN0cmVhbSA6OiBUaGUgaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICB0dF9mYWNlX2xvYWRfbG9jYQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZCB0aGUgbG9jYXRpb25zIHRhYmxlLgorICAgKgorICAgKiBASW5PdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIHN0cmVhbSA6OgorICAgKiAgICAgVGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfbG9hZF9sb2NhKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCkBAIC0yOTcsMjMgKzI5OSwyNSBAQAogCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9mYWNlX2xvYWRfY3Z0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIHRoZSBjb250cm9sIHZhbHVlIHRhYmxlIGludG8gYSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZmFjZV9sb2FkX2N2dAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgTG9hZCB0aGUgY29udHJvbCB2YWx1ZSB0YWJsZSBpbnRvIGEgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgdHRfZmFjZV9sb2FkX2N2dCggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gIHN0cmVhbSApCkBAIC0zNzgsMjMgKzM4MiwyNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICB0dF9mYWNlX2xvYWRfZnBnbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBMb2FkIHRoZSBmb250IHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZmFjZV9sb2FkX2ZwZ20KKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIExvYWQgdGhlIGZvbnQgcHJvZ3JhbS4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2xvYWRfZnBnbSggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQpAQCAtNDQwLDIzICs0NDYsMjUgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCB0aGUgY3Z0IHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtIDo6IEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIHR0X2ZhY2VfbG9hZF9wcmVwCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBMb2FkIHRoZSBjdnQgcHJvZ3JhbS4KKyAgICoKKyAgICogQEluT3V0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBzdHJlYW0gOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2xvYWRfcHJlcCggVFRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKQpAQCAtNTAxLDIyICs1MDksMjQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9sb2FkX2hkbXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgTG9hZCB0aGUgYGhkbXgnIHRhYmxlIGludG8gdGhlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBzdHJlYW0gOjogQSBoYW5kbGUgdG8gdGhlIGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgdHRfZmFjZV9sb2FkX2hkbXgKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIExvYWQgdGhlIGBoZG14JyB0YWJsZSBpbnRvIHRoZSBmYWNlIG9iamVjdC4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBBIGhhbmRsZSB0byB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiBAUmV0dXJuOgorICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuCisgICAqLwogCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9mYWNlX2xvYWRfaGRteCggVFRfRmFjZSAgICBmYWNlLApAQCAtNjEwLDExICs2MjAsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBSZXR1cm4gdGhlIGFkdmFuY2Ugd2lkdGggdGFibGUgZm9yIGEgZ2l2ZW4gcGl4ZWwgc2l6ZSBpZiBpdCBpcyBmb3VuZCAgKi8KLSAgLyogaW4gdGhlIGZvbnQncyBgaGRteCcgdGFibGUgKGlmIGFueSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogUmV0dXJuIHRoZSBhZHZhbmNlIHdpZHRoIHRhYmxlIGZvciBhIGdpdmVuIHBpeGVsIHNpemUgaWYgaXQgaXMgZm91bmQKKyAgICogaW4gdGhlIGZvbnQncyBgaGRteCcgdGFibGUgKGlmIGFueSkuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0J5dGUqICkKICAgdHRfZmFjZV9nZXRfZGV2aWNlX21ldHJpY3MoIFRUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwcGVtLApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaCBiL3NyYy90cnVldHlwZS90dHBsb2FkLmgKaW5kZXggZmExMjUyNy4uZWVmMjY5NSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0dHBsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHJ1ZVR5cGUtc3BlY2lmaWMgdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0dHBsb2FkLmgKKyAqCisgKiAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFRUUExPQURfSF8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5jIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKaW5kZXggZDk0YmNjOC4uNzBlOTRlMiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKKysrIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0c3VicGl4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBTdWJwaXhlbCBIaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0c3VicGl4LmMKKyAqCisgKiAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuCisgKgorICogQ29weXJpZ2h0IDIwMTAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKQEAgLTMwLDM1ICszMCwzNSBAQAogI2lmIGRlZmluZWQoIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiApICAgICAgICAgICAgJiYgXAogICAgIGRlZmluZWQoIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZXNlIHJ1bGVzIGFmZmVjdCBob3cgdGhlIFRUIEludGVycHJldGVyIGRvZXMgaGludGluZywgd2l0aCB0aGUgICAgICAqLwotICAvKiBnb2FsIG9mIGRvaW5nIHN1YnBpeGVsIGhpbnRpbmcgYnkgKGluIGdlbmVyYWwpIGlnbm9yaW5nIHggbW92ZXMuICAgICAgKi8KLSAgLyogU29tZSBvZiB0aGVzZSBydWxlcyBhcmUgZml4ZXMgdGhhdCBnbyBhYm92ZSBhbmQgYmV5b25kIHRoZSAgICAgICAgICAgICovCi0gIC8qIHN0YXRlZCB0ZWNobmlxdWVzIGluIHRoZSBNUyB3aGl0ZXBhcGVyIG9uIENsZWFydHlwZSwgZHVlIHRvICAgICAgICAgICAqLwotICAvKiBhcnRpZmFjdHMgaW4gbWFueSBnbHlwaHMuICBTbywgdGhlc2UgcnVsZXMgbWFrZSBzb21lIGdseXBocyByZW5kZXIgICAgKi8KLSAgLyogYmV0dGVyIHRoYW4gdGhleSBkbyBpbiB0aGUgTVMgcmFzdGVyaXplci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAiIiBzdHJpbmcgb3IgMCBpbnQvY2hhciBpbmRpY2F0ZXMgdG8gYXBwbHkgdG8gYWxsIGdseXBocy4gICAgICAgICAgICAgKi8KLSAgLyogIi0iIHVzZWQgYXMgZHVtbXkgcGxhY2Vob2xkZXJzLCBidXQgYW55IG5vbi1tYXRjaGluZyBzdHJpbmcgd29ya3MuICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTb21lIG9mIHRoaXMgY291bGQgYXJndWFibHkgYmUgaW1wbGVtZW50ZWQgaW4gZm9udGNvbmZpZywgaG93ZXZlcjogICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIEZvbnRjb25maWcgY2FuJ3Qgc2V0IHRoaW5ncyBvbiBhIGdseXBoLWJ5LWdseXBoIGJhc2lzLiAgICAgICAgICAgICAqLwotICAvKiAgLSBUaGUgdHdlYWtzIHRoYXQgaGFwcGVuIGhlcmUgYXJlIHZlcnkgbG93LWxldmVsLCBmcm9tIGFuIGF2ZXJhZ2UgICAgKi8KLSAgLyogICAgdXNlcidzIHBvaW50IG9mIHZpZXcgYW5kIGFyZSBiZXN0IGltcGxlbWVudGVkIGluIHRoZSBoaW50ZXIuICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgZ29hbCBpcyB0byBtYWtlIHRoZSBzdWJwaXhlbCBoaW50aW5nIHRlY2huaXF1ZXMgYXMgZ2VuZXJhbGl6ZWQgICAgKi8KLSAgLyogYXMgcG9zc2libGUgYWNyb3NzIGFsbCBmb250cyB0byBwcmV2ZW50IHRoZSBuZWVkIGZvciBleHRyYSBydWxlcyBzdWNoICovCi0gIC8qIGFzIHRoZXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIHJ1bGUgc3RydWN0dXJlIGlzIGRlc2lnbmVkIHNvIHRoYXQgZW50aXJlbHkgbmV3IHJ1bGVzIGNhbiBlYXNpbHkgICovCi0gIC8qIGJlIGFkZGVkIHdoZW4gYSBuZXcgY29tcGF0aWJpbGl0eSBmZWF0dXJlIGlzIGRpc2NvdmVyZWQuICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIHJ1bGUgc3RydWN0dXJlcyBjb3VsZCBhbHNvIHVzZSBzb21lIGVuaGFuY2VtZW50IHRvIGhhbmRsZSByYW5nZXMuICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgKioqKioqKioqKioqKioqKioqIFdPUksgSU4gUFJPR1JFU1MgKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGVzZSBydWxlcyBhZmZlY3QgaG93IHRoZSBUVCBJbnRlcnByZXRlciBkb2VzIGhpbnRpbmcsIHdpdGggdGhlCisgICAqIGdvYWwgb2YgZG9pbmcgc3VicGl4ZWwgaGludGluZyBieSAoaW4gZ2VuZXJhbCkgaWdub3JpbmcgeCBtb3Zlcy4KKyAgICogU29tZSBvZiB0aGVzZSBydWxlcyBhcmUgZml4ZXMgdGhhdCBnbyBhYm92ZSBhbmQgYmV5b25kIHRoZQorICAgKiBzdGF0ZWQgdGVjaG5pcXVlcyBpbiB0aGUgTVMgd2hpdGVwYXBlciBvbiBDbGVhcnR5cGUsIGR1ZSB0bworICAgKiBhcnRpZmFjdHMgaW4gbWFueSBnbHlwaHMuICBTbywgdGhlc2UgcnVsZXMgbWFrZSBzb21lIGdseXBocyByZW5kZXIKKyAgICogYmV0dGVyIHRoYW4gdGhleSBkbyBpbiB0aGUgTVMgcmFzdGVyaXplci4KKyAgICoKKyAgICogIiIgc3RyaW5nIG9yIDAgaW50L2NoYXIgaW5kaWNhdGVzIHRvIGFwcGx5IHRvIGFsbCBnbHlwaHMuCisgICAqICItIiB1c2VkIGFzIGR1bW15IHBsYWNlaG9sZGVycywgYnV0IGFueSBub24tbWF0Y2hpbmcgc3RyaW5nIHdvcmtzLgorICAgKgorICAgKiBTb21lIG9mIHRoaXMgY291bGQgYXJndWFibHkgYmUgaW1wbGVtZW50ZWQgaW4gZm9udGNvbmZpZywgaG93ZXZlcjoKKyAgICoKKyAgICogLSBGb250Y29uZmlnIGNhbid0IHNldCB0aGluZ3Mgb24gYSBnbHlwaC1ieS1nbHlwaCBiYXNpcy4KKyAgICogLSBUaGUgdHdlYWtzIHRoYXQgaGFwcGVuIGhlcmUgYXJlIHZlcnkgbG93LWxldmVsLCBmcm9tIGFuIGF2ZXJhZ2UKKyAgICogICB1c2VyJ3MgcG9pbnQgb2YgdmlldyBhbmQgYXJlIGJlc3QgaW1wbGVtZW50ZWQgaW4gdGhlIGhpbnRlci4KKyAgICoKKyAgICogVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgc3VicGl4ZWwgaGludGluZyB0ZWNobmlxdWVzIGFzIGdlbmVyYWxpemVkCisgICAqIGFzIHBvc3NpYmxlIGFjcm9zcyBhbGwgZm9udHMgdG8gcHJldmVudCB0aGUgbmVlZCBmb3IgZXh0cmEgcnVsZXMgc3VjaAorICAgKiBhcyB0aGVzZS4KKyAgICoKKyAgICogVGhlIHJ1bGUgc3RydWN0dXJlIGlzIGRlc2lnbmVkIHNvIHRoYXQgZW50aXJlbHkgbmV3IHJ1bGVzIGNhbiBlYXNpbHkKKyAgICogYmUgYWRkZWQgd2hlbiBhIG5ldyBjb21wYXRpYmlsaXR5IGZlYXR1cmUgaXMgZGlzY292ZXJlZC4KKyAgICoKKyAgICogVGhlIHJ1bGUgc3RydWN0dXJlcyBjb3VsZCBhbHNvIHVzZSBzb21lIGVuaGFuY2VtZW50IHRvIGhhbmRsZSByYW5nZXMuCisgICAqCisgICAqICAgICAqKioqKioqKioqKioqKioqKiogV09SSyBJTiBQUk9HUkVTUyAqKioqKioqKioqKioqKioqKioqCisgICAqLwogCiAgIC8qIFRoZXNlIGFyZSBgY2xhc3Nlcycgb2YgZm9udHMgdGhhdCBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciBhbmQgdXNlZCBpbiAqLwogICAvKiBydWxlcyBiZWxvdy4gIEEgYmxhbmsgZW50cnkgIiIgaXMgcmVxdWlyZWQgYXQgdGhlIGVuZCBvZiB0aGVzZSEgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5oIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKaW5kZXggMTA3MGJiMC4uMmUxMGVhMyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKKysrIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR0c3VicGl4LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUcnVlVHlwZSBTdWJwaXhlbCBIaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR0c3VicGl4LmgKKyAqCisgKiAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuCisgKgorICogQ29weXJpZ2h0IDIwMTAtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVFRTVUJQSVhfSF8KQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIElEIGZsYWdzIHRvIGlkZW50aWZ5IHNwZWNpYWwgZnVuY3Rpb25zIGF0IEZERUYgYW5kIHJ1bnRpbWUuICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBJRCBmbGFncyB0byBpZGVudGlmeSBzcGVjaWFsIGZ1bmN0aW9ucyBhdCBGREVGIGFuZCBydW50aW1lLgorICAgKgorICAgKi8KICNkZWZpbmUgU1BIX0ZERUZfSU5MSU5FX0RFTFRBXzEgICAgICAgMHgwMDAwMDAxCiAjZGVmaW5lIFNQSF9GREVGX0lOTElORV9ERUxUQV8yICAgICAgIDB4MDAwMDAwMgogI2RlZmluZSBTUEhfRkRFRl9ESUFHT05BTF9TVFJPS0UgICAgICAweDAwMDAwMDQKQEAgLTQ1LDExICs0NSwxMSBAQAogI2RlZmluZSBTUEhfRkRFRl9UWVBFTUFOX0RJQUdFTkRDVFJMICAweDAwMDAxMDAKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVHdlYWsgZmxhZ3MgdGhhdCBhcmUgc2V0IGZvciBlYWNoIGdseXBoIGJ5IHRoZSBiZWxvdyBydWxlcy4gICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFR3ZWFrIGZsYWdzIHRoYXQgYXJlIHNldCBmb3IgZWFjaCBnbHlwaCBieSB0aGUgYmVsb3cgcnVsZXMuCisgICAqCisgICAqLwogI2RlZmluZSBTUEhfVFdFQUtfQUxMT1dfWF9ETU9WRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFVTAogI2RlZmluZSBTUEhfVFdFQUtfQUxXQVlTX0RPX0RFTFRBUCAgICAgICAgICAgICAgICAweDAwMDAwMDJVTAogI2RlZmluZSBTUEhfVFdFQUtfQUxXQVlTX1NLSVBfREVMVEFQICAgICAgICAgICAgICAweDAwMDAwMDRVTApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxYWZtLmMgYi9zcmMvdHlwZTEvdDFhZm0uYwppbmRleCA2MTA1M2Q5Li4wY2JlZjNiIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFhZm0uYworKysgYi9zcmMvdHlwZTEvdDFhZm0uYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFhZm0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFGTSBzdXBwb3J0IGZvciBUeXBlIDEgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFhZm0uYworICoKKyAqICAgQUZNIHN1cHBvcnQgZm9yIFR5cGUgMSBmb250cyAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjYsMTIgKzI2LDEyIEBACiAKICNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDFhZm0KIApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxYWZtLmggYi9zcmMvdHlwZTEvdDFhZm0uaAppbmRleCBjYjhkMzAyLi5kOTJiNzhmIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFhZm0uaAorKysgYi9zcmMvdHlwZTEvdDFhZm0uaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFhZm0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFGTSBzdXBwb3J0IGZvciBUeXBlIDEgZm9udHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFhZm0uaAorICoKKyAqICAgQUZNIHN1cHBvcnQgZm9yIFR5cGUgMSBmb250cyAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVDFBRk1fSF8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWRyaXZlci5jIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmMKaW5kZXggMDI5YjQxMC4uNGQ0NmUzZSAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZHJpdmVyLmMKKysrIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxZHJpdmVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxZHJpdmVyLmMKKyAqCisgKiAgIFR5cGUgMSBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MywxOSArNDMsMTkgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfS0VSTklOR19ICiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDFkcml2ZXIKIAotIC8qCi0gICogIEdMWVBIIERJQ1QgU0VSVklDRQotICAqCi0gICovCisgIC8qCisgICAqIEdMWVBIIERJQ1QgU0VSVklDRQorICAgKgorICAgKi8KIAogICBzdGF0aWMgRlRfRXJyb3IKICAgdDFfZ2V0X2dseXBoX25hbWUoIFQxX0ZhY2UgICAgIGZhY2UsCkBAIC05Nyw3ICs5Nyw3IEBACiAKIAogICAvKgotICAgKiAgUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKKyAgICogUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAKICAgLyoKLSAgICogIE1VTFRJUExFIE1BU1RFUlMgU0VSVklDRQorICAgKiBNVUxUSVBMRSBNQVNURVJTIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAKICAgLyoKLSAgICogIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCisgICAqIFBPU1RTQ1JJUFQgSU5GTyBTRVJWSUNFCiAgICAqCiAgICAqLwogCkBAIC0yNzAsOSArMjcwLDEyIEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9GT05UX05BTUU6Ci0gICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X25hbWUgKSArIDE7Ci0gICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQotICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfbmFtZSApLCByZXR2YWwgKTsKKyAgICAgIGlmICggdHlwZTEtPmZvbnRfbmFtZSApCisgICAgICB7CisgICAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfbmFtZSApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfbmFtZSApLCByZXR2YWwgKTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQU19ESUNUX1VOSVFVRV9JRDoKQEAgLTM2Miw3ICszNjUsNyBAQAogICAgICAgICAgICAgb2sgPSAxOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBvayApCisgICAgICAgIGlmICggb2sgJiYgdHlwZTEtPnN1YnJzICkKICAgICAgICAgewogICAgICAgICAgIHJldHZhbCA9IHR5cGUxLT5zdWJyc19sZW5baWR4XSArIDE7CiAgICAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKQEAgLTU1OSwzMyArNTYyLDQ5IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9WRVJTSU9OOgotICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLnZlcnNpb24gKSArIDE7Ci0gICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQotICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby52ZXJzaW9uICksIHJldHZhbCApOworICAgICAgaWYgKCB0eXBlMS0+Zm9udF9pbmZvLnZlcnNpb24gKQorICAgICAgeworICAgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X2luZm8udmVyc2lvbiApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby52ZXJzaW9uICksIHJldHZhbCApOworICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBTX0RJQ1RfTk9USUNFOgotICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLm5vdGljZSApICsgMTsKLSAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCi0gICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLm5vdGljZSApLCByZXR2YWwgKTsKKyAgICAgIGlmICggdHlwZTEtPmZvbnRfaW5mby5ub3RpY2UgKQorICAgICAgeworICAgICAgICByZXR2YWwgPSBmdF9zdHJsZW4oIHR5cGUxLT5mb250X2luZm8ubm90aWNlICkgKyAxOworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLm5vdGljZSApLCByZXR2YWwgKTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQU19ESUNUX0ZVTExfTkFNRToKLSAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSArIDE7Ci0gICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQotICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSwgcmV0dmFsICk7CisgICAgICBpZiAoIHR5cGUxLT5mb250X2luZm8uZnVsbF9uYW1lICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLmZ1bGxfbmFtZSApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby5mdWxsX25hbWUgKSwgcmV0dmFsICk7CisgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9GQU1JTFlfTkFNRToKLSAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby5mYW1pbHlfbmFtZSApICsgMTsKLSAgICAgIGlmICggdmFsdWUgJiYgdmFsdWVfbGVuID49IHJldHZhbCApCi0gICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICksIHJldHZhbCApOworICAgICAgaWYgKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICkgKyAxOworICAgICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQorICAgICAgICAgIGZ0X21lbWNweSggdmFsdWUsICh2b2lkICopKCB0eXBlMS0+Zm9udF9pbmZvLmZhbWlseV9uYW1lICksCisgICAgICAgICAgICAgICAgICAgICByZXR2YWwgKTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQU19ESUNUX1dFSUdIVDoKLSAgICAgIHJldHZhbCA9IGZ0X3N0cmxlbiggdHlwZTEtPmZvbnRfaW5mby53ZWlnaHQgKSArIDE7Ci0gICAgICBpZiAoIHZhbHVlICYmIHZhbHVlX2xlbiA+PSByZXR2YWwgKQotICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby53ZWlnaHQgKSwgcmV0dmFsICk7CisgICAgICBpZiAoIHR5cGUxLT5mb250X2luZm8ud2VpZ2h0ICkKKyAgICAgIHsKKyAgICAgICAgcmV0dmFsID0gZnRfc3RybGVuKCB0eXBlMS0+Zm9udF9pbmZvLndlaWdodCApICsgMTsKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiB2YWx1ZV9sZW4gPj0gcmV0dmFsICkKKyAgICAgICAgICBmdF9tZW1jcHkoIHZhbHVlLCAodm9pZCAqKSggdHlwZTEtPmZvbnRfaW5mby53ZWlnaHQgKSwgcmV0dmFsICk7CisgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUFNfRElDVF9JVEFMSUNfQU5HTEU6CkBAIC02MTgsNyArNjM3LDcgQEAKIAogCiAgIC8qCi0gICAqICBQUk9QRVJUWSBTRVJWSUNFCisgICAqIFBST1BFUlRZIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTYzMCw3ICs2NDksNyBAQAogCiAKICAgLyoKLSAgICogIFNFUlZJQ0UgTElTVAorICAgKiBTRVJWSUNFIExJU1QKICAgICoKICAgICovCiAKQEAgLTY2NSwzOCArNjg0LDQyIEBACiAKICNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBHZXRfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGRyaXZlciBtZXRob2QgdXNlZCB0byByZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvICAgICAgKi8KLSAgLyogICAgZ2x5cGhzIG9mIHRoZSBzYW1lIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsZWZ0X2dseXBoICA6OiBUaGUgaW5kZXggb2YgdGhlIGxlZnQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJpZ2h0X2dseXBoIDo6IFRoZSBpbmRleCBvZiB0aGUgcmlnaHQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4gICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGtlcm5pbmcgICAgIDo6IFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgaW4gZm9udCB1bml0cyBmb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcyAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUgICAgICAgICovCi0gIC8qICAgIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uLiAgT3RoZXIgbGF5b3V0cywgb3IgbW9yZSBzb3BoaXN0aWNhdGVkICAqLwotICAvKiAgICBrZXJuaW5ncyBhcmUgb3V0IG9mIHNjb3BlIG9mIHRoaXMgbWV0aG9kICh0aGUgYmFzaWMgZHJpdmVyICAgICAgICAgKi8KLSAgLyogICAgaW50ZXJmYWNlIGlzIG1lYW50IHRvIGJlIHNpbXBsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGV5IGNhbiBiZSBpbXBsZW1lbnRlZCBieSBmb3JtYXQtc3BlY2lmaWMgaW50ZXJmYWNlcy4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgR2V0X0tlcm5pbmcKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgZHJpdmVyIG1ldGhvZCB1c2VkIHRvIHJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28KKyAgICogICBnbHlwaHMgb2YgdGhlIHNhbWUgZmFjZS4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGZhY2UgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuCisgICAqCisgICAqICAgbGVmdF9nbHlwaCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBsZWZ0IGdseXBoIGluIHRoZSBrZXJuIHBhaXIuCisgICAqCisgICAqICAgcmlnaHRfZ2x5cGggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgcmlnaHQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4KKyAgICoKKyAgICogQE91dHB1dDoKKyAgICogICBrZXJuaW5nIDo6CisgICAqICAgICBUaGUga2VybmluZyB2ZWN0b3IuICBUaGlzIGlzIGluIGZvbnQgdW5pdHMgZm9yCisgICAqICAgICBzY2FsYWJsZSBmb3JtYXRzLCBhbmQgaW4gcGl4ZWxzIGZvciBmaXhlZC1zaXplcworICAgKiAgICAgZm9ybWF0cy4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKgorICAgKiBATm90ZToKKyAgICogICBPbmx5IGhvcml6b250YWwgbGF5b3V0cyAobGVmdC10by1yaWdodCAmIHJpZ2h0LXRvLWxlZnQpIGFyZQorICAgKiAgIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uLiAgT3RoZXIgbGF5b3V0cywgb3IgbW9yZSBzb3BoaXN0aWNhdGVkCisgICAqICAga2VybmluZ3MgYXJlIG91dCBvZiBzY29wZSBvZiB0aGlzIG1ldGhvZCAodGhlIGJhc2ljIGRyaXZlcgorICAgKiAgIGludGVyZmFjZSBpcyBtZWFudCB0byBiZSBzaW1wbGUpLgorICAgKgorICAgKiAgIFRoZXkgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGZvcm1hdC1zcGVjaWZpYyBpbnRlcmZhY2VzLgorICAgKi8KICAgc3RhdGljIEZUX0Vycm9yCiAgIEdldF9LZXJuaW5nKCBGVF9GYWNlICAgICB0MWZhY2UsICAgICAgICAvKiBUMV9GYWNlICovCiAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLApkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZHJpdmVyLmggYi9zcmMvdHlwZTEvdDFkcml2ZXIuaAppbmRleCAyYjE1MDcyLi4yZGFlNGJkIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFkcml2ZXIuaAorKysgYi9zcmMvdHlwZTEvdDFkcml2ZXIuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFkcml2ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhpZ2gtbGV2ZWwgVHlwZSAxIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFkcml2ZXIuaAorICoKKyAqICAgSGlnaC1sZXZlbCBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVDFEUklWRVJfSF8KQEAgLTI2LDE0ICsyNiw4IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAidGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgotI2VuZGlmCi0KLQogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgKSAgdDFfZHJpdmVyX2NsYXNzOwogCi0KIEZUX0VORF9IRUFERVIKIAogI2VuZGlmIC8qIFQxRFJJVkVSX0hfICovCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFlcnJvcnMuaCBiL3NyYy90eXBlMS90MWVycm9ycy5oCmluZGV4IDllMDE1MWIuLjMxMmY0NTYgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MWVycm9ycy5oCisrKyBiL3NyYy90eXBlMS90MWVycm9ycy5oCkBAIC0xLDI2ICsxLDI2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0MWVycm9ycy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHlwZSAxIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0MWVycm9ycy5oCisgKgorICogICBUeXBlIDEgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDEtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFR5cGUgMSBlcnJvciBlbnVtZXJhdGlvbiBjb25zdGFudHMuICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBUeXBlIDEgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLgorICAgKgorICAgKi8KIAogI2lmbmRlZiBUMUVSUk9SU19IXwogI2RlZmluZSBUMUVSUk9SU19IXwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZ2xvYWQuYyBiL3NyYy90eXBlMS90MWdsb2FkLmMKaW5kZXggODdkNDBlNy4uODdjMmEwZiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZ2xvYWQuYworKysgYi9zcmMvdHlwZTEvdDFnbG9hZC5jCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0MWdsb2FkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHlwZSAxIEdseXBoIExvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0MWdsb2FkLmMKKyAqCisgKiAgIFR5cGUgMSBHbHlwaCBMb2FkZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgInQxZXJyb3JzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDFnbG9hZAogCkBAIC02Miw2ICs2Miw3IEBACiAgICAgUFNfRHJpdmVyICBkcml2ZXIgPSAoUFNfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAjZW5kaWYKIAorCiAgICAgZGVjb2Rlci0+Zm9udF9tYXRyaXggPSB0eXBlMS0+Zm9udF9tYXRyaXg7CiAgICAgZGVjb2Rlci0+Zm9udF9vZmZzZXQgPSB0eXBlMS0+Zm9udF9vZmZzZXQ7CiAKQEAgLTI0OSw2ICsyNTAsOCBAQAogCiAgICAgKm1heF9hZHZhbmNlID0gMDsKIAorICAgIEZUX1RSQUNFNigoICJUMV9Db21wdXRlX01heF9BZHZhbmNlOlxuIiApKTsKKwogICAgIC8qIGZvciBlYWNoIGdseXBoLCBwYXJzZSB0aGUgZ2x5cGggY2hhcnN0cmluZyBhbmQgZXh0cmFjdCAqLwogICAgIC8qIHRoZSBhZHZhbmNlIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGZvciAoIGdseXBoX2luZGV4ID0gMDsgZ2x5cGhfaW5kZXggPCB0eXBlMS0+bnVtX2dseXBoczsgZ2x5cGhfaW5kZXgrKyApCkBAIC0yNjEsNiArMjY0LDkgQEAKICAgICAgIC8qIGlnbm9yZSB0aGUgZXJyb3IgaWYgb25lIG9jY3VycmVkIC0gc2tpcCB0byBuZXh0IGdseXBoICovCiAgICAgfQogCisgICAgRlRfVFJBQ0U2KCggIlQxX0NvbXB1dGVfTWF4X0FkdmFuY2U6IG1heCBhZHZhbmNlOiAlZlxuIiwKKyAgICAgICAgICAgICAgICAqbWF4X2FkdmFuY2UgLyA2NTUzNi4wICkpOworCiAgICAgcHNhdXgtPnQxX2RlY29kZXJfZnVuY3MtPmRvbmUoICZkZWNvZGVyICk7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwpAQCAtMjgyLDExICsyODgsMTggQEAKICAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKIAogCisgICAgRlRfVFJBQ0U1KCggIlQxX0dldF9BZHZhbmNlczpcbiIgKSk7CisKICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVCApCiAgICAgewogICAgICAgZm9yICggbm4gPSAwOyBubiA8IGNvdW50OyBubisrICkKKyAgICAgIHsKICAgICAgICAgYWR2YW5jZXNbbm5dID0gMDsKIAorICAgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2UgaGVpZ2h0IDAgZm9udCB1bml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgKyBubiApKTsKKyAgICAgIH0KKwogICAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgICB9CiAKQEAgLTMyMCw2ICszMzMsMTEgQEAKICAgICAgICAgYWR2YW5jZXNbbm5dID0gRklYRURfVE9fSU5UKCBkZWNvZGVyLmJ1aWxkZXIuYWR2YW5jZS54ICk7CiAgICAgICBlbHNlCiAgICAgICAgIGFkdmFuY2VzW25uXSA9IDA7CisKKyAgICAgIEZUX1RSQUNFNSgoICIgIGlkeCAlZDogYWR2YW5jZSB3aWR0aCAlZCBmb250IHVuaXQlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGZpcnN0ICsgbm4sCisgICAgICAgICAgICAgICAgICBhZHZhbmNlc1tubl0sCisgICAgICAgICAgICAgICAgICBhZHZhbmNlc1tubl0gPT0gMSA/ICIiIDogInMiICkpOwogICAgIH0KIAogICAgIHJldHVybiBGVF9FcnJfT2s7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFnbG9hZC5oIGIvc3JjL3R5cGUxL3QxZ2xvYWQuaAppbmRleCA3MmVmNzZmLi4xMmJhMjM0IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFnbG9hZC5oCisrKyBiL3NyYy90eXBlMS90MWdsb2FkLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxZ2xvYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgR2x5cGggTG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxZ2xvYWQuaAorICoKKyAqICAgVHlwZSAxIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVDFHTE9BRF9IXwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxbG9hZC5jIGIvc3JjL3R5cGUxL3QxbG9hZC5jCmluZGV4IDJiOGQ0ODkuLmE0NDM1NzEgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MWxvYWQuYworKysgYi9zcmMvdHlwZTEvdDFsb2FkLmMKQEAgLTEsNjMgKzEsNjMgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxbG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgZm9udCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxbG9hZC5jCisgKgorICogICBUeXBlIDEgZm9udCBsb2FkZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBpcyB0aGUgbmV3IGFuZCBpbXByb3ZlZCBUeXBlIDEgZGF0YSBsb2FkZXIgZm9yIEZyZWVUeXBlIDIuICBUaGUgICovCi0gIC8qIG9sZCBsb2FkZXIgaGFzIHNldmVyYWwgcHJvYmxlbXM6IGl0IGlzIHNsb3csIGNvbXBsZXgsIGRpZmZpY3VsdCB0byAgICAqLwotICAvKiBtYWludGFpbiwgYW5kIGNvbnRhaW5zIGluY3JlZGlibGUgaGFja3MgdG8gbWFrZSBpdCBhY2NlcHQgc29tZSAgICAgICAgKi8KLSAgLyogaWxsLWZvcm1lZCBUeXBlIDEgZm9udHMgd2l0aG91dCBoaWNjdXAtaW5nLiAgTW9yZW92ZXIsIGFib3V0IDUlIG9mICAgICovCi0gIC8qIHRoZSBUeXBlIDEgZm9udHMgb24gbXkgbWFjaGluZSBzdGlsbCBhcmVuJ3QgbG9hZGVkIGNvcnJlY3RseSBieSBpdC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyB2ZXJzaW9uIGlzIG11Y2ggc2ltcGxlciwgbXVjaCBmYXN0ZXIgYW5kIGFsc28gZWFzaWVyIHRvIHJlYWQgYW5kICovCi0gIC8qIG1haW50YWluIGJ5IGEgZ3JlYXQgb3JkZXIgb2YgbWFnbml0dWRlLiAgVGhlIGlkZWEgYmVoaW5kIGl0IGlzIHRvICAgICAqLwotICAvKiBfbm90XyB0cnkgdG8gcmVhZCB0aGUgVHlwZSAxIHRva2VuIHN0cmVhbSB3aXRoIGEgc3RhdGUgbWFjaGluZSAoaS5lLiAgKi8KLSAgLyogYSBQb3N0c2NyaXB0LWxpa2UgaW50ZXJwcmV0ZXIpIGJ1dCByYXRoZXIgdG8gcGVyZm9ybSBzaW1wbGUgcGF0dGVybiAgICovCi0gIC8qIG1hdGNoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW5kZWVkLCBuZWFybHkgYWxsIGRhdGEgZGVmaW5pdGlvbnMgZm9sbG93IGEgc2ltcGxlIHBhdHRlcm4gbGlrZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgLi4uIC9GaWVsZCA8ZGF0YT4gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIHdoZXJlIDxkYXRhPiBjYW4gYmUgYSBudW1iZXIsIGEgYm9vbGVhbiwgYSBzdHJpbmcsIG9yIGFuIGFycmF5IG9mICAgICAqLwotICAvKiBudW1iZXJzLiAgVGhlcmUgYXJlIGEgZmV3IGV4Y2VwdGlvbnMsIG5hbWVseSB0aGUgZW5jb2RpbmcsIGZvbnQgbmFtZSwgKi8KLSAgLyogY2hhcnN0cmluZ3MsIGFuZCBzdWJyczsgdGhleSBhcmUgaGFuZGxlZCB3aXRoIGEgc3BlY2lhbCBwYXR0ZXJuICAgICAgICovCi0gIC8qIG1hdGNoaW5nIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQWxsIG90aGVyIGNvbW1vbiBjYXNlcyBhcmUgaGFuZGxlZCB2ZXJ5IHNpbXBseS4gIFRoZSBtYXRjaGluZyBydWxlcyAgICovCi0gIC8qIGFyZSBkZWZpbmVkIGluIHRoZSBmaWxlIGB0MXRva2Vucy5oJyB0aHJvdWdoIHRoZSB1c2Ugb2Ygc2V2ZXJhbCAgICAgICAqLwotICAvKiBtYWNyb3MgY2FsbHMgUEFSU0VfWFhYLiAgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHR3aWNlIGhlcmU7IHRoZSBmaXJzdCAgKi8KLSAgLyogdGltZSB0byBnZW5lcmF0ZSBwYXJzaW5nIGNhbGxiYWNrIGZ1bmN0aW9ucywgdGhlIHNlY29uZCB0aW1lIHRvICAgICAgICovCi0gIC8qIGdlbmVyYXRlIGEgdGFibGUgb2Yga2V5d29yZHMgKHdpdGggcG9pbnRlcnMgdG8gdGhlIGFzc29jaWF0ZWQgICAgICAgICAqLwotICAvKiBjYWxsYmFjayBmdW5jdGlvbnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBmdW5jdGlvbiBgcGFyc2VfZGljdCcgc2ltcGx5IHNjYW5zICpsaW5lYXJseSogYSBnaXZlbiBkaWN0aW9uYXJ5ICAqLwotICAvKiAoZWl0aGVyIHRoZSB0b3AtbGV2ZWwgb3IgcHJpdmF0ZSBvbmUpIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgICAgICAgKi8KLSAgLyogY2FsbGJhY2sgd2hlbiBpdCBlbmNvdW50ZXJzIGFuIGltbWVkaWF0ZSBrZXl3b3JkLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGlzIGJ5IGZhciB0aGUgZmFzdGVzdCB3YXkgb25lIGNhbiBmaW5kIHRvIHBhcnNlIGFuZCByZWFkIGFsbCAgICAgKi8KLSAgLyogZGF0YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGxlZCB0byB0cmVtZW5kb3VzIGNvZGUgc2l6ZSByZWR1Y3Rpb24uICBOb3RlIHRoYXQgbGF0ZXIsIHRoZSAgICAgKi8KLSAgLyogZ2x5cGggbG9hZGVyIHdpbGwgYWxzbyBiZSBfZ3JlYXRseV8gc2ltcGxpZmllZCwgYW5kIHRoZSBhdXRvbWF0aWMgICAgICovCi0gIC8qIGhpbnRlciB3aWxsIHJlcGxhY2UgdGhlIGNsdW1zeSBgdDFoaW50ZXInLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGlzIHRoZSBuZXcgYW5kIGltcHJvdmVkIFR5cGUgMSBkYXRhIGxvYWRlciBmb3IgRnJlZVR5cGUgMi4gIFRoZQorICAgKiBvbGQgbG9hZGVyIGhhcyBzZXZlcmFsIHByb2JsZW1zOiBpdCBpcyBzbG93LCBjb21wbGV4LCBkaWZmaWN1bHQgdG8KKyAgICogbWFpbnRhaW4sIGFuZCBjb250YWlucyBpbmNyZWRpYmxlIGhhY2tzIHRvIG1ha2UgaXQgYWNjZXB0IHNvbWUKKyAgICogaWxsLWZvcm1lZCBUeXBlIDEgZm9udHMgd2l0aG91dCBoaWNjdXAtaW5nLiAgTW9yZW92ZXIsIGFib3V0IDUlIG9mCisgICAqIHRoZSBUeXBlIDEgZm9udHMgb24gbXkgbWFjaGluZSBzdGlsbCBhcmVuJ3QgbG9hZGVkIGNvcnJlY3RseSBieSBpdC4KKyAgICoKKyAgICogVGhpcyB2ZXJzaW9uIGlzIG11Y2ggc2ltcGxlciwgbXVjaCBmYXN0ZXIgYW5kIGFsc28gZWFzaWVyIHRvIHJlYWQgYW5kCisgICAqIG1haW50YWluIGJ5IGEgZ3JlYXQgb3JkZXIgb2YgbWFnbml0dWRlLiAgVGhlIGlkZWEgYmVoaW5kIGl0IGlzIHRvCisgICAqIF9ub3RfIHRyeSB0byByZWFkIHRoZSBUeXBlIDEgdG9rZW4gc3RyZWFtIHdpdGggYSBzdGF0ZSBtYWNoaW5lIChpLmUuCisgICAqIGEgUG9zdHNjcmlwdC1saWtlIGludGVycHJldGVyKSBidXQgcmF0aGVyIHRvIHBlcmZvcm0gc2ltcGxlIHBhdHRlcm4KKyAgICogbWF0Y2hpbmcuCisgICAqCisgICAqIEluZGVlZCwgbmVhcmx5IGFsbCBkYXRhIGRlZmluaXRpb25zIGZvbGxvdyBhIHNpbXBsZSBwYXR0ZXJuIGxpa2UKKyAgICoKKyAgICogLi4uIC9GaWVsZCA8ZGF0YT4gLi4uCisgICAqCisgICAqIHdoZXJlIDxkYXRhPiBjYW4gYmUgYSBudW1iZXIsIGEgYm9vbGVhbiwgYSBzdHJpbmcsIG9yIGFuIGFycmF5IG9mCisgICAqIG51bWJlcnMuICBUaGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucywgbmFtZWx5IHRoZSBlbmNvZGluZywgZm9udCBuYW1lLAorICAgKiBjaGFyc3RyaW5ncywgYW5kIHN1YnJzOyB0aGV5IGFyZSBoYW5kbGVkIHdpdGggYSBzcGVjaWFsIHBhdHRlcm4KKyAgICogbWF0Y2hpbmcgcm91dGluZS4KKyAgICoKKyAgICogQWxsIG90aGVyIGNvbW1vbiBjYXNlcyBhcmUgaGFuZGxlZCB2ZXJ5IHNpbXBseS4gIFRoZSBtYXRjaGluZyBydWxlcworICAgKiBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSBgdDF0b2tlbnMuaCcgdGhyb3VnaCB0aGUgdXNlIG9mIHNldmVyYWwKKyAgICogbWFjcm9zIGNhbGxzIFBBUlNFX1hYWC4gIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCB0d2ljZSBoZXJlOyB0aGUgZmlyc3QKKyAgICogdGltZSB0byBnZW5lcmF0ZSBwYXJzaW5nIGNhbGxiYWNrIGZ1bmN0aW9ucywgdGhlIHNlY29uZCB0aW1lIHRvCisgICAqIGdlbmVyYXRlIGEgdGFibGUgb2Yga2V5d29yZHMgKHdpdGggcG9pbnRlcnMgdG8gdGhlIGFzc29jaWF0ZWQKKyAgICogY2FsbGJhY2sgZnVuY3Rpb25zKS4KKyAgICoKKyAgICogVGhlIGZ1bmN0aW9uIGBwYXJzZV9kaWN0JyBzaW1wbHkgc2NhbnMgKmxpbmVhcmx5KiBhIGdpdmVuIGRpY3Rpb25hcnkKKyAgICogKGVpdGhlciB0aGUgdG9wLWxldmVsIG9yIHByaXZhdGUgb25lKSBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlCisgICAqIGNhbGxiYWNrIHdoZW4gaXQgZW5jb3VudGVycyBhbiBpbW1lZGlhdGUga2V5d29yZC4KKyAgICoKKyAgICogVGhpcyBpcyBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IG9uZSBjYW4gZmluZCB0byBwYXJzZSBhbmQgcmVhZCBhbGwKKyAgICogZGF0YS4KKyAgICoKKyAgICogVGhpcyBsZWQgdG8gdHJlbWVuZG91cyBjb2RlIHNpemUgcmVkdWN0aW9uLiAgTm90ZSB0aGF0IGxhdGVyLCB0aGUKKyAgICogZ2x5cGggbG9hZGVyIHdpbGwgYWxzbyBiZSBfZ3JlYXRseV8gc2ltcGxpZmllZCwgYW5kIHRoZSBhdXRvbWF0aWMKKyAgICogaGludGVyIHdpbGwgcmVwbGFjZSB0aGUgY2x1bXN5IGB0MWhpbnRlcicuCisgICAqCisgICAqLwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNzksMTIgKzc5LDEyIEBACiAjZW5kaWYKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWxvYWQKIApAQCAtMjIyLDExICsyMjIsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBHaXZlbiBhIG5vcm1hbGl6ZWQgKGJsZW5kKSBjb29yZGluYXRlLCBmaWd1cmUgb3V0IHRoZSBkZXNpZ24gICAgICAgICAgKi8KLSAgLyogY29vcmRpbmF0ZSBhcHByb3ByaWF0ZSBmb3IgdGhhdCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogR2l2ZW4gYSBub3JtYWxpemVkIChibGVuZCkgY29vcmRpbmF0ZSwgZmlndXJlIG91dCB0aGUgZGVzaWduCisgICAqIGNvb3JkaW5hdGUgYXBwcm9wcmlhdGUgZm9yIHRoYXQgdmFsdWUuCisgICAqLwogICBzdGF0aWMgRlRfRml4ZWQKICAgbW1fYXhpc191bm1hcCggUFNfRGVzaWduTWFwICBheGlzbWFwLAogICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgICAgIG5jdiApCkBAIC0yNTEsMTEgKzI1MSwxMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEdpdmVuIGEgdmVjdG9yIG9mIHdlaWdodHMsIG9uZSBmb3IgZWFjaCBkZXNpZ24sIGZpZ3VyZSBvdXQgdGhlICAgICAgICAqLwotICAvKiBub3JtYWxpemVkIGF4aXMgY29vcmRpbmF0ZXMgd2hpY2ggZ2F2ZSByaXNlIHRvIHRob3NlIHdlaWdodHMuICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBHaXZlbiBhIHZlY3RvciBvZiB3ZWlnaHRzLCBvbmUgZm9yIGVhY2ggZGVzaWduLCBmaWd1cmUgb3V0IHRoZQorICAgKiBub3JtYWxpemVkIGF4aXMgY29vcmRpbmF0ZXMgd2hpY2ggZ2F2ZSByaXNlIHRvIHRob3NlIHdlaWdodHMuCisgICAqLwogICBzdGF0aWMgdm9pZAogICBtbV93ZWlnaHRzX3VubWFwKCBGVF9GaXhlZCogIHdlaWdodHMsCiAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgYXhpc2Nvb3JkcywKQEAgLTI5MywxMSArMjkzLDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSnVzdCBhIHdyYXBwZXIgYXJvdW5kIFQxX0dldF9NdWx0aV9NYXN0ZXIgdG8gc3VwcG9ydCB0aGUgZGlmZmVyZW50ICAgICovCi0gIC8qICBhcmd1bWVudHMgbmVlZGVkIGJ5IHRoZSBHWCB2YXIgZGlzdG9ydGFibGUgZm9udHMuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEp1c3QgYSB3cmFwcGVyIGFyb3VuZCBUMV9HZXRfTXVsdGlfTWFzdGVyIHRvIHN1cHBvcnQgdGhlIGRpZmZlcmVudAorICAgKiBhcmd1bWVudHMgbmVlZGVkIGJ5IHRoZSBHWCB2YXIgZGlzdG9ydGFibGUgZm9udHMuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgVDFfR2V0X01NX1ZhciggVDFfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgIEZUX01NX1ZhciogICptYXN0ZXIgKQpAQCAtMzQ4LDE2ICszNDgsMTMgQEAKICAgICAgICAgbW12YXItPmF4aXNbaV0udGFnID0gRlRfTUFLRV9UQUcoICdvJywgJ3AnLCAncycsICd6JyApOwogICAgIH0KIAotICAgIGlmICggYmxlbmQtPm51bV9kZXNpZ25zID09ICggMVUgPDwgYmxlbmQtPm51bV9heGlzICkgKQotICAgIHsKLSAgICAgIG1tX3dlaWdodHNfdW5tYXAoIGJsZW5kLT5kZWZhdWx0X3dlaWdodF92ZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBheGlzY29vcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm51bV9heGlzICk7CisgICAgbW1fd2VpZ2h0c191bm1hcCggYmxlbmQtPmRlZmF1bHRfd2VpZ2h0X3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICBheGlzY29vcmRzLAorICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5udW1fYXhpcyApOwogCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IG1tYXN0ZXIubnVtX2F4aXM7IGkrKyApCi0gICAgICAgIG1tdmFyLT5heGlzW2ldLmRlZiA9IG1tX2F4aXNfdW5tYXAoICZibGVuZC0+ZGVzaWduX21hcFtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpc2Nvb3Jkc1tpXSApOwotICAgIH0KKyAgICBmb3IgKCBpID0gMDsgaSA8IG1tYXN0ZXIubnVtX2F4aXM7IGkrKyApCisgICAgICBtbXZhci0+YXhpc1tpXS5kZWYgPSBtbV9heGlzX3VubWFwKCAmYmxlbmQtPmRlc2lnbl9tYXBbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGlzY29vcmRzW2ldICk7CiAKICAgICAqbWFzdGVyID0gbW12YXI7CiAKQEAgLTU3MywxMSArNTcwLDExIEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSnVzdCBhIHdyYXBwZXIgYXJvdW5kIFQxX1NldF9NTV9EZXNpZ24gdG8gc3VwcG9ydCB0aGUgZGlmZmVyZW50ICAgICAgICovCi0gIC8qIGFyZ3VtZW50cyBuZWVkZWQgYnkgdGhlIEdYIHZhciBkaXN0b3J0YWJsZSBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEp1c3QgYSB3cmFwcGVyIGFyb3VuZCBUMV9TZXRfTU1fRGVzaWduIHRvIHN1cHBvcnQgdGhlIGRpZmZlcmVudAorICAgKiBhcmd1bWVudHMgbmVlZGVkIGJ5IHRoZSBHWCB2YXIgZGlzdG9ydGFibGUgZm9udHMuCisgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKICAgVDFfU2V0X1Zhcl9EZXNpZ24oIFQxX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKQEAgLTcxOSw2ICs3MTYsOCBAQAogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogCisgICAgRlRfVFJBQ0U0KCggIiBbIiApKTsKKwogICAgIGJsZW5kICA9IGZhY2UtPmJsZW5kOwogICAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OwogCkBAIC03NDEsMTEgKzc0MCwxMyBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICB9CiAKKyAgICAgIEZUX1RSQUNFNCgoICIgLyUuKnMiLCBsZW4sIHRva2VuLT5zdGFydCApKTsKKwogICAgICAgbmFtZSA9IChGVF9CeXRlKilibGVuZC0+YXhpc19uYW1lc1tuXTsKICAgICAgIGlmICggbmFtZSApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMCgoICJwYXJzZV9ibGVuZF9heGlzX3R5cGVzOiIKLSAgICAgICAgICAgICAgICAgICAgIiBvdmVyd3JpdGluZyBheGlzIG5hbWUgYCVzJyB3aXRoIGAlKi5zJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIiBvdmVyd3JpdGluZyBheGlzIG5hbWUgYCVzJyB3aXRoIGAlLipzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGVuLCB0b2tlbi0+c3RhcnQgKSk7CiAgICAgICAgIEZUX0ZSRUUoIG5hbWUgKTsKICAgICAgIH0KQEAgLTc1OCw2ICs3NTksOCBAQAogICAgICAgbmFtZVtsZW5dID0gJ1wwJzsKICAgICB9CiAKKyAgICBGVF9UUkFDRTQoKCAiXVxuIiApKTsKKwogICBFeGl0OgogICAgIGxvYWRlci0+cGFyc2VyLnJvb3QuZXJyb3IgPSBlcnJvcjsKICAgfQpAQCAtODAyLDYgKzgwNSw4IEBACiAgICAgICBibGVuZCAgICA9IGZhY2UtPmJsZW5kOwogICAgICAgbnVtX2F4aXMgPSAwOyAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLwogCisgICAgICBGVF9UUkFDRTQoKCAiIFsiICkpOworCiAgICAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9kZXNpZ25zOyBuKysgKQogICAgICAgewogICAgICAgICBUMV9Ub2tlblJlYyAgYXhpc190b2tlbnNbVDFfTUFYX01NX0FYSVNdOwpAQCAtODQyLDYgKzg0Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBub3cgcmVhZCBlYWNoIGF4aXMgdG9rZW4gaW50byB0aGUgZGVzaWduIHBvc2l0aW9uICovCisgICAgICAgIEZUX1RSQUNFNCgoICIgWyIgKSkgOwogICAgICAgICBmb3IgKCBheGlzID0gMDsgYXhpcyA8IG5fYXhpczsgYXhpcysrICkKICAgICAgICAgewogICAgICAgICAgIFQxX1Rva2VuICB0b2tlbjIgPSBheGlzX3Rva2VucyArIGF4aXM7CkBAIC04NTAsOSArODU2LDEzIEBACiAgICAgICAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IHRva2VuMi0+c3RhcnQ7CiAgICAgICAgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IHRva2VuMi0+bGltaXQ7CiAgICAgICAgICAgYmxlbmQtPmRlc2lnbl9wb3Nbbl1bYXhpc10gPSBUMV9Ub0ZpeGVkKCBwYXJzZXIsIDAgKTsKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICVmIiwgKGRvdWJsZSlibGVuZC0+ZGVzaWduX3Bvc1tuXVtheGlzXSAvIDY1NTM2ICkpOwogICAgICAgICB9CisgICAgICAgIEZUX1RSQUNFNCgoICJdIiApKSA7CiAgICAgICB9CiAKKyAgICAgIEZUX1RSQUNFNCgoICJdXG4iICkpOworCiAgICAgICBsb2FkZXItPnBhcnNlci5yb290LmN1cnNvciA9IG9sZF9jdXJzb3I7CiAgICAgICBsb2FkZXItPnBhcnNlci5yb290LmxpbWl0ICA9IG9sZF9saW1pdDsKICAgICB9CkBAIC04OTksNiArOTA5LDggQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICBibGVuZCA9IGZhY2UtPmJsZW5kOwogCisgICAgRlRfVFJBQ0U0KCggIiBbIiApKTsKKwogICAgIC8qIG5vdyByZWFkIGVhY2ggYXhpcyBkZXNpZ24gbWFwICovCiAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fYXhpczsgbisrICkKICAgICB7CkBAIC05MTUsNiArOTI3LDggQEAKICAgICAgIFQxX1RvVG9rZW5BcnJheSggcGFyc2VyLCBwb2ludF90b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIFQxX01BWF9NTV9NQVBfUE9JTlRTLCAmbnVtX3BvaW50cyApOwogCisgICAgICBGVF9UUkFDRTQoKCAiIFsiICkpOworCiAgICAgICBpZiAoIG51bV9wb2ludHMgPD0gMCB8fCBudW1fcG9pbnRzID4gVDFfTUFYX01NX01BUF9QT0lOVFMgKQogICAgICAgewogICAgICAgICBGVF9FUlJPUigoICJwYXJzZV9ibGVuZF9kZXNpZ25fbWFwOiBpbmNvcnJlY3QgdGFibGVcbiIgKSk7CkBAIC05NDgsOSArOTYyLDE3IEBACiAKICAgICAgICAgbWFwLT5kZXNpZ25fcG9pbnRzW3BdID0gVDFfVG9JbnQoIHBhcnNlciApOwogICAgICAgICBtYXAtPmJsZW5kX3BvaW50cyBbcF0gPSBUMV9Ub0ZpeGVkKCBwYXJzZXIsIDAgKTsKKworICAgICAgICBGVF9UUkFDRTQoKCAiIFslZCAlZl0iLAorICAgICAgICAgICAgICAgICAgICBtYXAtPmRlc2lnbl9wb2ludHNbcF0sCisgICAgICAgICAgICAgICAgICAgIChkb3VibGUpbWFwLT5ibGVuZF9wb2ludHNbcF0gLyA2NTUzNiApKTsKICAgICAgIH0KKworICAgICAgRlRfVFJBQ0U0KCggIl0iICkpOwogICAgIH0KIAorICAgIEZUX1RSQUNFNCgoICJdXG4iICkpOworCiAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IG9sZF9jdXJzb3I7CiAgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IG9sZF9saW1pdDsKIApAQCAtMTAxMCw2ICsxMDMyLDggQEAKICAgICBvbGRfY3Vyc29yID0gcGFyc2VyLT5yb290LmN1cnNvcjsKICAgICBvbGRfbGltaXQgID0gcGFyc2VyLT5yb290LmxpbWl0OwogCisgICAgRlRfVFJBQ0U0KCggIlsiICkpOworCiAgICAgZm9yICggbiA9IDA7IG4gPCBudW1fZGVzaWduczsgbisrICkKICAgICB7CiAgICAgICB0b2tlbiA9IGRlc2lnbl90b2tlbnMgKyBuOwpAQCAtMTAxOCw4ICsxMDQyLDEyIEBACiAKICAgICAgIGJsZW5kLT5kZWZhdWx0X3dlaWdodF92ZWN0b3Jbbl0gPQogICAgICAgYmxlbmQtPndlaWdodF92ZWN0b3Jbbl0gICAgICAgICA9IFQxX1RvRml4ZWQoIHBhcnNlciwgMCApOworCisgICAgICBGVF9UUkFDRTQoKCAiICVmIiwgKGRvdWJsZSlibGVuZC0+d2VpZ2h0X3ZlY3RvcltuXSAvIDY1NTM2ICkpOwogICAgIH0KIAorICAgIEZUX1RSQUNFNCgoICJdXG4iICkpOworCiAgICAgcGFyc2VyLT5yb290LmN1cnNvciA9IG9sZF9jdXJzb3I7CiAgICAgcGFyc2VyLT5yb290LmxpbWl0ICA9IG9sZF9saW1pdDsKIApAQCAtMTAzNCw4ICsxMDYyLDE2IEBACiAgIHBhcnNlX2J1aWxkY2hhciggVDFfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgIFQxX0xvYWRlciAgbG9hZGVyICkKICAgeworICAgIEZUX1VJbnQgIGk7CisKKwogICAgIGZhY2UtPmxlbl9idWlsZGNoYXIgPSAoRlRfVUludClUMV9Ub0ZpeGVkQXJyYXkoICZsb2FkZXItPnBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCAwICk7CisgICAgRlRfVFJBQ0U0KCggIiBbIiApKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGZhY2UtPmxlbl9idWlsZGNoYXI7IGkrKyApCisgICAgICBGVF9UUkFDRTQoKCAiIDAiICkpOworCisgICAgRlRfVFJBQ0U0KCggIl1cbiIgKSk7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTEwNzEsNiArMTEwNyw4IEBACiAgICAgLyogaWYgdGhlIGtleXdvcmQgaGFzIGEgZGVkaWNhdGVkIGNhbGxiYWNrLCBjYWxsIGl0ICovCiAgICAgaWYgKCBmaWVsZC0+dHlwZSA9PSBUMV9GSUVMRF9UWVBFX0NBTExCQUNLICkKICAgICB7CisgICAgICBGVF9UUkFDRTQoKCAiICAlcyIsIGZpZWxkLT5pZGVudCApKTsKKwogICAgICAgZmllbGQtPnJlYWRlciggKEZUX0ZhY2UpZmFjZSwgbG9hZGVyICk7CiAgICAgICBlcnJvciA9IGxvYWRlci0+cGFyc2VyLnJvb3QuZXJyb3I7CiAgICAgICBnb3RvIEV4aXQ7CkBAIC0xMTQ4LDYgKzExODYsOCBAQAogICAgICAgbWF4X29iamVjdHMgID0gMDsKICAgICB9CiAKKyAgICBGVF9UUkFDRTQoKCAiICAlcyIsIGZpZWxkLT5pZGVudCApKTsKKwogICAgIGlmICggKm9iamVjdHMgKQogICAgIHsKICAgICAgIGlmICggZmllbGQtPnR5cGUgPT0gVDFfRklFTERfVFlQRV9JTlRFR0VSX0FSUkFZIHx8CkBAIC0xMTY3LDYgKzEyMDcsOCBAQAogICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgfQogCisgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKwogICBFeGl0OgogICAgIHJldHVybiBlcnJvcjsKICAgfQpAQCAtMTE3OSw2ICsxMjIxLDggQEAKICAgICBGVF9VTlVTRUQoIGZhY2UgKTsKIAogICAgIGxvYWRlci0+a2V5d29yZHNfZW5jb3VudGVyZWQgfD0gVDFfUFJJVkFURTsKKworICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CiAgIH0KIAogCkBAIC0xMjU4LDYgKzEzMDIsMTQgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBGVF9UUkFDRTQoKCAiIFslZiAlZiAlZiAlZiAlZiAlZl1cbiIsCisgICAgICAgICAgICAgICAgKGRvdWJsZSl0ZW1wWzBdIC8gNjU1MzYgLyAxMDAwLAorICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFsxXSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAoZG91YmxlKXRlbXBbMl0gLyA2NTUzNiAvIDEwMDAsCisgICAgICAgICAgICAgICAgKGRvdWJsZSl0ZW1wWzNdIC8gNjU1MzYgLyAxMDAwLAorICAgICAgICAgICAgICAgIChkb3VibGUpdGVtcFs0XSAvIDY1NTM2IC8gMTAwMCwKKyAgICAgICAgICAgICAgICAoZG91YmxlKXRlbXBbNV0gLyA2NTUzNiAvIDEwMDAgKSk7CisKICAgICB0ZW1wX3NjYWxlID0gRlRfQUJTKCB0ZW1wWzNdICk7CiAKICAgICBpZiAoIHRlbXBfc2NhbGUgPT0gMCApCkBAIC0xMjgwLDEyICsxMzMyLDE4IEBACiAgICAgICB0ZW1wWzVdID0gRlRfRGl2Rml4KCB0ZW1wWzVdLCB0ZW1wX3NjYWxlICk7CiAgICAgICB0ZW1wWzNdID0gdGVtcFszXSA8IDAgPyAtMHgxMDAwMEwgOiAweDEwMDAwTDsKICAgICB9Ci0KICAgICBtYXRyaXgtPnh4ID0gdGVtcFswXTsKICAgICBtYXRyaXgtPnl4ID0gdGVtcFsxXTsKICAgICBtYXRyaXgtPnh5ID0gdGVtcFsyXTsKICAgICBtYXRyaXgtPnl5ID0gdGVtcFszXTsKIAorICAgIGlmICggIUZUX01hdHJpeF9DaGVjayggbWF0cml4ICkgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInQxX3BhcnNlX2ZvbnRfbWF0cml4OiBpbnZhbGlkIGZvbnQgbWF0cml4XG4iICkpOworICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvKiBub3RlIHRoYXQgdGhlIG9mZnNldHMgbXVzdCBiZSBleHByZXNzZWQgaW4gaW50ZWdlciBmb250IHVuaXRzICovCiAgICAgb2Zmc2V0LT54ID0gdGVtcFs0XSA+PiAxNjsKICAgICBvZmZzZXQtPnkgPSB0ZW1wWzVdID4+IDE2OwpAQCAtMTQ5NCw2ICsxNTUyLDE1IEBACiAgICAgICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKICAgICAgIH0KIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBGVF9UUkFDRTQoKCAiIFsiICkpOworCisgICAgICAvKiBYWFggc2hvdyBlbmNvZGluZyB2ZWN0b3IgKi8KKyAgICAgIEZUX1RSQUNFNCgoICIuLi4iICkpOworCisgICAgICBGVF9UUkFDRTQoKCAiXVxuIiApKTsKKyNlbmRpZgorCiAgICAgICBmYWNlLT50eXBlMS5lbmNvZGluZ190eXBlID0gVDFfRU5DT0RJTkdfVFlQRV9BUlJBWTsKICAgICAgIHBhcnNlci0+cm9vdC5jdXJzb3IgICAgICAgPSBjdXI7CiAgICAgfQpAQCAtMTUwNCwxOCArMTU3MSwzMCBAQAogICAgIHsKICAgICAgIGlmICggY3VyICsgMTcgPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgZnRfc3RybmNtcCggKGNvbnN0IGNoYXIqKWN1ciwgIlN0YW5kYXJkRW5jb2RpbmciLCAxNiApID09IDAgKQorICAgICAgewogICAgICAgICBmYWNlLT50eXBlMS5lbmNvZGluZ190eXBlID0gVDFfRU5DT0RJTkdfVFlQRV9TVEFOREFSRDsKKyAgICAgICAgRlRfVFJBQ0U0KCggIiBTdGFuZGFyZEVuY29kaW5nXG4iICkpOworICAgICAgfQogCiAgICAgICBlbHNlIGlmICggY3VyICsgMTUgPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgZnRfc3RybmNtcCggKGNvbnN0IGNoYXIqKWN1ciwgIkV4cGVydEVuY29kaW5nIiwgMTQgKSA9PSAwICkKKyAgICAgIHsKICAgICAgICAgZmFjZS0+dHlwZTEuZW5jb2RpbmdfdHlwZSA9IFQxX0VOQ09ESU5HX1RZUEVfRVhQRVJUOworICAgICAgICBGVF9UUkFDRTQoKCAiIEV4cGVydEVuY29kaW5nXG4iICkpOworICAgICAgfQogCiAgICAgICBlbHNlIGlmICggY3VyICsgMTggPCBsaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgZnRfc3RybmNtcCggKGNvbnN0IGNoYXIqKWN1ciwgIklTT0xhdGluMUVuY29kaW5nIiwgMTcgKSA9PSAwICkKKyAgICAgIHsKICAgICAgICAgZmFjZS0+dHlwZTEuZW5jb2RpbmdfdHlwZSA9IFQxX0VOQ09ESU5HX1RZUEVfSVNPTEFUSU4xOworICAgICAgICBGVF9UUkFDRTQoKCAiIElTT0xhdGluMUVuY29kaW5nXG4iICkpOworICAgICAgfQogCiAgICAgICBlbHNlCisgICAgICB7CiAgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX0VSUiggSWdub3JlICk7CisgICAgICAgIEZUX1RSQUNFNCgoICI8dW5rbm93bj5cbiIgKSk7CisgICAgICB9CiAgICAgfQogICB9CiAKQEAgLTE2OTYsNiArMTc3NSwxNSBAQAogICAgIGlmICggIWxvYWRlci0+bnVtX3N1YnJzICkKICAgICAgIGxvYWRlci0+bnVtX3N1YnJzID0gbnVtX3N1YnJzOwogCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgIEZUX1RSQUNFNCgoICIgPCIgKSk7CisKKyAgICAgIC8qIFhYWCBzaG93IHN1YnJzPyAqLworICAgICAgRlRfVFJBQ0U0KCggIiVkIGVsZW1lbnRzIiwgbnVtX3N1YnJzICkpOworCisgICAgICBGVF9UUkFDRTQoKCAiPlxuIiApKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuOwogCiAgIEZhaWw6CkBAIC0yMDE3LDYgKzIxMDUsMTUgQEAKICAgICAgIGxvYWRlci0+bnVtX2dseXBocyArPSAxOwogICAgIH0KIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBGVF9UUkFDRTQoKCAiIDwiICkpOworCisgICAgICAvKiBYWFggc2hvdyBjaGFyc3RyaW5ncz8gKi8KKyAgICAgIEZUX1RSQUNFNCgoICIlZCBlbGVtZW50cyIsIGxvYWRlci0+bnVtX2dseXBocyApKTsKKworICAgICAgRlRfVFJBQ0U0KCggIj5cbiIgKSk7CisjZW5kaWYKKwogICAgIHJldHVybjsKIAogICBGYWlsOgpAQCAtMjAyNCwxMiArMjEyMSwxMiBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERlZmluZSB0aGUgdG9rZW4gZmllbGQgc3RhdGljIHZhcmlhYmxlcy4gIFRoaXMgaXMgYSBzZXQgb2YgICAgICAgICAgICAqLwotICAvKiBUMV9GaWVsZFJlYyB2YXJpYWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogRGVmaW5lIHRoZSB0b2tlbiBmaWVsZCBzdGF0aWMgdmFyaWFibGVzLiAgVGhpcyBpcyBhIHNldCBvZgorICAgKiBUMV9GaWVsZFJlYyB2YXJpYWJsZXMuCisgICAqCisgICAqLwogCiAKICAgc3RhdGljCkBAIC0yMjE2LDYgKzIzMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICA/IFQxX0ZJRUxEX0RJQ1RfUFJJVkFURQogICAgICAgICAgICAgICAgICAgICA6IFQxX0ZJRUxEX0RJQ1RfRk9OVERJQ1Q7CiAKKwogICAgICAgICAgICAgICBpZiAoICEoIGRpY3QgJiBrZXl3b3JkLT5kaWN0ICkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRlRfVFJBQ0UxKCggInBhcnNlX2RpY3Q6IGZvdW5kIGAlcycgYnV0IGlnbm9yaW5nIGl0IgpAQCAtMjMzMCw2ICsyNDI4LDcgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAorICAgIEZUX1RSQUNFNCgoICIgdG9wIGRpY3Rpb25hcnk6XG4iICkpOwogICAgIGVycm9yID0gcGFyc2VfZGljdCggZmFjZSwgJmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+YmFzZV9kaWN0LCBwYXJzZXItPmJhc2VfbGVuICk7CiAgICAgaWYgKCBlcnJvciApCkBAIC0yMzM5LDYgKzI0MzgsNyBAQAogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwogCisgICAgRlRfVFJBQ0U0KCggIiBwcml2YXRlIGRpY3Rpb25hcnk6XG4iICkpOwogICAgIGVycm9yID0gcGFyc2VfZGljdCggZmFjZSwgJmxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+cHJpdmF0ZV9kaWN0LCBwYXJzZXItPnByaXZhdGVfbGVuICk7CiAgICAgaWYgKCBlcnJvciApCkBAIC0yMzQ5LDYgKzI0NDksMTYgQEAKIAogI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX01NX1NVUFBPUlQKIAorICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgTXVsdGlwbGUgTWFzdGVyIGZvbnRzIHdpdGggaW50ZXJtZWRpYXRlIGRlc2lnbnM7ICovCisgICAgLyogdGhpcyBpbXBsaWVzIHRoYXQgYG51bV9kZXNpZ25zJyBtdXN0IGJlIGVxdWFsIHRvIGAyXl5udW1fYXhpcycgICAgKi8KKyAgICBpZiAoIGZhY2UtPmJsZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBmYWNlLT5ibGVuZC0+bnVtX2Rlc2lnbnMgIT0gKCAxVSA8PCBmYWNlLT5ibGVuZC0+bnVtX2F4aXMgKSApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiVDFfT3Blbl9GYWNlOiIKKyAgICAgICAgICAgICAgICAgIiBudW1iZXItb2YtZGVzaWducyAhPSAyIF5eIG51bWJlci1vZi1heGVzXG4iICkpOworICAgICAgVDFfRG9uZV9CbGVuZCggZmFjZSApOworICAgIH0KKwogICAgIGlmICggZmFjZS0+YmxlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBmYWNlLT5ibGVuZC0+bnVtX2RlZmF1bHRfZGVzaWduX3ZlY3RvciAhPSAwICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGZhY2UtPmJsZW5kLT5udW1fZGVmYXVsdF9kZXNpZ25fdmVjdG9yICE9IGZhY2UtPmJsZW5kLT5udW1fYXhpcyApCkBAIC0yNDkzLDYgKzI2MDMsMjQgQEAKICAgICAgIHR5cGUxLT5lbmNvZGluZy5udW1fY2hhcnMgID0gbG9hZGVyLm51bV9jaGFyczsKICAgICB9CiAKKyAgICAvKiBzb21lIHNhbml0aXppbmcgdG8gYXZvaWQgb3ZlcmZsb3dzIGxhdGVyIG9uOyAqLworICAgIC8qIHRoZSB1cHBlciBsaW1pdHMgYXJlIGFkLWhvYyB2YWx1ZXMgICAgICAgICAgICovCisgICAgaWYgKCBwcml2LT5ibHVlX3NoaWZ0ID4gMTAwMCB8fCBwcml2LT5ibHVlX3NoaWZ0IDwgMCApCisgICAgeworICAgICAgRlRfVFJBQ0UyKCggIlQxX09wZW5fRmFjZToiCisgICAgICAgICAgICAgICAgICAiIHNldHRpbmcgdW5saWtlbHkgQmx1ZVNoaWZ0IHZhbHVlICVkIHRvIGRlZmF1bHQgKDcpXG4iLAorICAgICAgICAgICAgICAgICAgcHJpdi0+Ymx1ZV9zaGlmdCApKTsKKyAgICAgIHByaXYtPmJsdWVfc2hpZnQgPSA3OworICAgIH0KKworICAgIGlmICggcHJpdi0+Ymx1ZV9mdXp6ID4gMTAwMCB8fCBwcml2LT5ibHVlX2Z1enogPCAwICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAiVDFfT3Blbl9GYWNlOiIKKyAgICAgICAgICAgICAgICAgICIgc2V0dGluZyB1bmxpa2VseSBCbHVlRnV6eiB2YWx1ZSAlZCB0byBkZWZhdWx0ICgxKVxuIiwKKyAgICAgICAgICAgICAgICAgIHByaXYtPmJsdWVfZnV6eiApKTsKKyAgICAgIHByaXYtPmJsdWVfZnV6eiA9IDE7CisgICAgfQorCiAgIEV4aXQ6CiAgICAgdDFfZG9uZV9sb2FkZXIoICZsb2FkZXIgKTsKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFsb2FkLmggYi9zcmMvdHlwZTEvdDFsb2FkLmgKaW5kZXggMDNiZTNmNy4uNDNkNWRiNSAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxbG9hZC5oCisrKyBiL3NyYy90eXBlMS90MWxvYWQuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFsb2FkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFR5cGUgMSBmb250IGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFsb2FkLmgKKyAqCisgKiAgIFR5cGUgMSBmb250IGxvYWRlciAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVDFMT0FEX0hfCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFvYmpzLmMgYi9zcmMvdHlwZTEvdDFvYmpzLmMKaW5kZXggNzMzM2M0Yy4uMDVmMDJkNSAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3Qxb2Jqcy5jCisrKyBiL3NyYy90eXBlMS90MW9ianMuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFvYmpzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFR5cGUgMSBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFvYmpzLmMKKyAqCisgKiAgIFR5cGUgMSBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM2LDIxICszNiwyMSBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KLSAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCi0gIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cKKyAgICogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKyAgICovCiAjdW5kZWYgIEZUX0NPTVBPTkVOVAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3Qxb2JqcwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogCiAgIHN0YXRpYyBQU0hfR2xvYmFsc19GdW5jcwpAQCAtMTMzLDExICsxMzMsMTEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTE9UICBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBTTE9UICBGVU5DVElPTlMKKyAgICoKKyAgICovCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVDFfR2x5cGhTbG90X0RvbmUoIEZUX0dseXBoU2xvdCAgc2xvdCApCkBAIC0xNzcsMjQgKzE3NywyNSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBQ0UgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBQ0UgIEZVTkNUSU9OUworICAgKgorICAgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0ZhY2VfRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBmYWNlIG9iamVjdCBkZXN0cnVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgOjogQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBmYWNlIG9iamVjdCB0byBkZXN0cm95LiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUMV9GYWNlX0RvbmUKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFRoZSBmYWNlIG9iamVjdCBkZXN0cnVjdG9yLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgZmFjZSA6OgorICAgKiAgICAgQSB0eXBlbGVzcyBwb2ludGVyIHRvIHRoZSBmYWNlIG9iamVjdCB0byBkZXN0cm95LgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVDFfRmFjZV9Eb25lKCBGVF9GYWNlICB0MWZhY2UgKSAgICAgICAgIC8qIFQxX0ZhY2UgKi8KICAgewpAQCAtMjc0LDI5ICsyNzUsMzQgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfRmFjZV9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGZhY2Ugb2JqZWN0IGNvbnN0cnVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtICAgICA6OiAgaW5wdXQgc3RyZWFtIHdoZXJlIHRvIGxvYWQgZm9udCBkYXRhLiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIHRoZSByZXNvdXJjZS4gICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9wYXJhbXMgOjogTnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2VuZXJpYyBwYXJhbWV0ZXJzLiAgSWdub3JlZC4gICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGFyYW1zICAgICA6OiBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgZmFjZSByZWNvcmQgdG8gYnVpbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFQxX0ZhY2VfSW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVGhlIGZhY2Ugb2JqZWN0IGNvbnN0cnVjdG9yLgorICAgKgorICAgKiBASW5wdXQ6CisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBpbnB1dCBzdHJlYW0gd2hlcmUgdG8gbG9hZCBmb250IGRhdGEuCisgICAqCisgICAqICAgZmFjZV9pbmRleCA6OgorICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBmb250IGZhY2UgaW4gdGhlIHJlc291cmNlLgorICAgKgorICAgKiAgIG51bV9wYXJhbXMgOjoKKyAgICogICAgIE51bWJlciBvZiBhZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqICAgcGFyYW1zIDo6CisgICAqICAgICBBZGRpdGlvbmFsIGdlbmVyaWMgcGFyYW1ldGVycy4gIElnbm9yZWQuCisgICAqCisgICAqIEBJbk91dDoKKyAgICogICBmYWNlIDo6CisgICAqICAgICBUaGUgZmFjZSByZWNvcmQgdG8gYnVpbGQuCisgICAqCisgICAqIEBSZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4KKyAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUMV9GYWNlX0luaXQoIEZUX1N0cmVhbSAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICB0MWZhY2UsICAgICAgICAgIC8qIFQxX0ZhY2UgKi8KQEAgLTM0MSw2ICszNDcsMTAgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAorICAgIEZUX1RSQUNFMigoICJUMV9GYWNlX0luaXQ6ICUwOHAgKGluZGV4ICVkKVxuIiwKKyAgICAgICAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgIGZhY2VfaW5kZXggKSk7CisKICAgICAvKiBpZiB3ZSBqdXN0IHdhbnRlZCB0byBjaGVjayB0aGUgZm9ybWF0LCBsZWF2ZSBzdWNjZXNzZnVsbHkgbm93ICovCiAgICAgaWYgKCBmYWNlX2luZGV4IDwgMCApCiAgICAgICBnb3RvIEV4aXQ7CkBAIC01NjQsMjAgKzU3NCwyMSBAQAogICB9CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9Ecml2ZXJfSW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIFR5cGUgMSBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkcml2ZXIgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBkcml2ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBARnVuY3Rpb246CisgICAqICAgVDFfRHJpdmVyX0luaXQKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEluaXRpYWxpemVzIGEgZ2l2ZW4gVHlwZSAxIGRyaXZlciBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkcml2ZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIFQxX0RyaXZlcl9Jbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApCiAgIHsKQEAgLTYyMCwxNyArNjMxLDE4IEBACiAgIH0KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0RyaXZlcl9Eb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIFR5cGUgMSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGRyaXZlciA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IFR5cGUgMSBkcml2ZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBGdW5jdGlvbjoKKyAgICogICBUMV9Ecml2ZXJfRG9uZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgRmluYWxpemVzIGEgZ2l2ZW4gVHlwZSAxIGRyaXZlci4KKyAgICoKKyAgICogQElucHV0OgorICAgKiAgIGRyaXZlciA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBUeXBlIDEgZHJpdmVyLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVDFfRHJpdmVyX0RvbmUoIEZUX01vZHVsZSAgZHJpdmVyICkKICAgewpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3Qxb2Jqcy5oIGIvc3JjL3R5cGUxL3Qxb2Jqcy5oCmluZGV4IDgyOThlMDMuLjg2ZmVjZDkgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MW9ianMuaAorKysgYi9zcmMvdHlwZTEvdDFvYmpzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxb2Jqcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxb2Jqcy5oCisgKgorICogICBUeXBlIDEgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUMU9CSlNfSF8KQEAgLTM0LDU5ICszNCw1OSBAQAogICB0eXBlZGVmIHN0cnVjdCBUMV9HbHlwaF9IaW50c18gIFQxX0dseXBoX0hpbnRzOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBUeXBlIDEgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgVDFfU2l6ZQorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBUeXBlIDEgc2l6ZSBvYmplY3QuCisgICAqLwogICB0eXBlZGVmIHN0cnVjdCBUMV9TaXplUmVjXyogIFQxX1NpemU7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGhhbmRsZSB0byBhIFR5cGUgMSBnbHlwaCBzbG90IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAVHlwZToKKyAgICogICBUMV9HbHlwaFNsb3QKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGdseXBoIHNsb3Qgb2JqZWN0LgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgVDFfR2x5cGhTbG90UmVjXyogIFQxX0dseXBoU2xvdDsKIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFQxX0NoYXJNYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgVHlwZSAxIGNoYXJhY3RlciBtYXBwaW5nIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBUeXBlIDEgZm9ybWF0IGRvZXNuJ3QgdXNlIGEgY2hhcm1hcCBidXQgYW4gZW5jb2RpbmcgdGFibGUuICAgICAqLwotICAvKiAgICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdXAgY2hhcm1hcCBvYmplY3RzICAgICAgICAgICAgKi8KLSAgLyogICAgY29ycmVzcG9uZGluZyB0byB0aGVzZSB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgVDFfQ2hhck1hcAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgQSBoYW5kbGUgdG8gYSBUeXBlIDEgY2hhcmFjdGVyIG1hcHBpbmcgb2JqZWN0LgorICAgKgorICAgKiBATm90ZToKKyAgICogICBUaGUgVHlwZSAxIGZvcm1hdCBkb2Vzbid0IHVzZSBhIGNoYXJtYXAgYnV0IGFuIGVuY29kaW5nIHRhYmxlLgorICAgKiAgIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyB1cCBjaGFybWFwIG9iamVjdHMKKyAgICogICBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIHRhYmxlcy4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0IFQxX0NoYXJNYXBSZWNfKiAgIFQxX0NoYXJNYXA7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgSEVSRSBCRUdJTlMgVEhFIFRZUEUxIFNQRUNJRklDIFNUVUZGICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiAgICAgICAgICAgICAgICAgSEVSRSBCRUdJTlMgVEhFIFRZUEUxIFNQRUNJRklDIFNUVUZGCisgICAqCisgICAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfU2l6ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVHlwZSAxIHNpemUgcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQFR5cGU6CisgICAqICAgVDFfU2l6ZVJlYworICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgVHlwZSAxIHNpemUgcmVjb3JkLgorICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFQxX1NpemVSZWNfCiAgIHsKICAgICBGVF9TaXplUmVjICByb290OwpAQCAtMTA1LDE0ICsxMDUsMTQgQEAKICAgVDFfU2l6ZV9Jbml0KCBGVF9TaXplICBzaXplICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUMV9HbHlwaFNsb3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUeXBlIDEgZ2x5cGggc2xvdCByZWNvcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAVHlwZToKKyAgICogICBUMV9HbHlwaFNsb3RSZWMKKyAgICoKKyAgICogQERlc2NyaXB0aW9uOgorICAgKiAgIFR5cGUgMSBnbHlwaCBzbG90IHJlY29yZC4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUMV9HbHlwaFNsb3RSZWNfCiAgIHsKICAgICBGVF9HbHlwaFNsb3RSZWMgIHJvb3Q7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFwYXJzZS5jIGIvc3JjL3R5cGUxL3QxcGFyc2UuYwppbmRleCA4ZTIwMWU1Li45MjE0ODMxIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFwYXJzZS5jCisrKyBiL3NyYy90eXBlMS90MXBhcnNlLmMKQEAgLTEsMzYgKzEsMzYgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQxcGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDEgcGFyc2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQxcGFyc2UuYworICoKKyAqICAgVHlwZSAxIHBhcnNlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDE5OTYtMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgVHlwZSAxIHBhcnNlciBpcyBpbiBjaGFyZ2Ugb2YgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBncm93aW5nIHNlcXVlbmNlIG9mIG9iamVjdHMgY2FsbGVkICAqLwotICAvKiAgICBhIGBUMV9UYWJsZScgKHVzZWQgdG8gYnVpbGQgdmFyaW91cyB0YWJsZXMgbmVlZGVkIGJ5IHRoZSBsb2FkZXIpLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIG9wZW5pbmcgLnBmYiBhbmQgLnBmYSBmaWxlcyB0byBleHRyYWN0IHRoZWlyIHRvcC1sZXZlbCBhbmQgcHJpdmF0ZSAqLwotICAvKiAgICBkaWN0aW9uYXJpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAtIHJlYWQgbnVtYmVycywgYXJyYXlzICYgc3RyaW5ncyBmcm9tIGFueSBkaWN0aW9uYXJ5LiAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogU2VlIGB0MWxvYWQuYycgdG8gc2VlIGhvdyBkYXRhIGlzIGxvYWRlZCBmcm9tIHRoZSBmb250IGZpbGUuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoZSBUeXBlIDEgcGFyc2VyIGlzIGluIGNoYXJnZSBvZiB0aGUgZm9sbG93aW5nOgorICAgKgorICAgKiAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBncm93aW5nIHNlcXVlbmNlIG9mIG9iamVjdHMgY2FsbGVkCisgICAqICAgYSBgVDFfVGFibGUnICh1c2VkIHRvIGJ1aWxkIHZhcmlvdXMgdGFibGVzIG5lZWRlZCBieSB0aGUgbG9hZGVyKS4KKyAgICoKKyAgICogLSBvcGVuaW5nIC5wZmIgYW5kIC5wZmEgZmlsZXMgdG8gZXh0cmFjdCB0aGVpciB0b3AtbGV2ZWwgYW5kIHByaXZhdGUKKyAgICogICBkaWN0aW9uYXJpZXMuCisgICAqCisgICAqIC0gcmVhZCBudW1iZXJzLCBhcnJheXMgJiBzdHJpbmdzIGZyb20gYW55IGRpY3Rpb25hcnkuCisgICAqCisgICAqIFNlZSBgdDFsb2FkLmMnIHRvIHNlZSBob3cgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgZm9udCBmaWxlLgorICAgKgorICAgKi8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQzLDEyICs0MywxMiBAQAogI2luY2x1ZGUgInQxZXJyb3JzLmgiCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDFwYXJzZQogCkBAIC0xNjksMjEgKzE2OSwyMSBAQAogICAgICAgfQogICAgIH0KIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBIZXJlIGEgc2hvcnQgc3VtbWFyeSBvZiB3aGF0IGlzIGdvaW5nIG9uOiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogICBXaGVuIGNyZWF0aW5nIGEgbmV3IFR5cGUgMSBwYXJzZXIsIHdlIHRyeSB0byBsb2NhdGUgYW5kIGxvYWQgKi8KLSAgICAvKiAgIHRoZSBiYXNlIGRpY3Rpb25hcnkgaWYgdGhpcyBpcyBwb3NzaWJsZSAoaS5lLiwgZm9yIFBGQiAgICAgICAqLwotICAgIC8qICAgZmlsZXMpLiAgT3RoZXJ3aXNlLCB3ZSBsb2FkIHRoZSB3aG9sZSBmb250IGludG8gbWVtb3J5LiAgICAgICovCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgIFdoZW4gYGxvYWRpbmcnIHRoZSBiYXNlIGRpY3Rpb25hcnksIHdlIG9ubHkgc2V0dXAgcG9pbnRlcnMgICAqLwotICAgIC8qICAgaW4gdGhlIGNhc2Ugb2YgYSBtZW1vcnktYmFzZWQgc3RyZWFtLiAgT3RoZXJ3aXNlLCB3ZSAgICAgICAgICovCi0gICAgLyogICBhbGxvY2F0ZSBhbmQgbG9hZCB0aGUgYmFzZSBkaWN0aW9uYXJ5IGluIGl0LiAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgcGFyc2VyLT5pbl9wZmIgaXMgc2V0IGlmIHdlIGFyZSBpbiBhIGJpbmFyeSAoYC5wZmInKSBmb250LiAgICovCi0gICAgLyogICBwYXJzZXItPmluX21lbW9yeSBpcyBzZXQgaWYgd2UgaGF2ZSBhIG1lbW9yeSBzdHJlYW0uICAgICAgICAgKi8KLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBIZXJlIGEgc2hvcnQgc3VtbWFyeSBvZiB3aGF0IGlzIGdvaW5nIG9uOgorICAgICAqCisgICAgICogICBXaGVuIGNyZWF0aW5nIGEgbmV3IFR5cGUgMSBwYXJzZXIsIHdlIHRyeSB0byBsb2NhdGUgYW5kIGxvYWQKKyAgICAgKiAgIHRoZSBiYXNlIGRpY3Rpb25hcnkgaWYgdGhpcyBpcyBwb3NzaWJsZSAoaS5lLiwgZm9yIFBGQgorICAgICAqICAgZmlsZXMpLiAgT3RoZXJ3aXNlLCB3ZSBsb2FkIHRoZSB3aG9sZSBmb250IGludG8gbWVtb3J5LgorICAgICAqCisgICAgICogICBXaGVuIGBsb2FkaW5nJyB0aGUgYmFzZSBkaWN0aW9uYXJ5LCB3ZSBvbmx5IHNldHVwIHBvaW50ZXJzCisgICAgICogICBpbiB0aGUgY2FzZSBvZiBhIG1lbW9yeS1iYXNlZCBzdHJlYW0uICBPdGhlcndpc2UsIHdlCisgICAgICogICBhbGxvY2F0ZSBhbmQgbG9hZCB0aGUgYmFzZSBkaWN0aW9uYXJ5IGluIGl0LgorICAgICAqCisgICAgICogICBwYXJzZXItPmluX3BmYiBpcyBzZXQgaWYgd2UgYXJlIGluIGEgYmluYXJ5IChgLnBmYicpIGZvbnQuCisgICAgICogICBwYXJzZXItPmluX21lbW9yeSBpcyBzZXQgaWYgd2UgaGF2ZSBhIG1lbW9yeSBzdHJlYW0uCisgICAgICovCiAKICAgICAvKiB0cnkgdG8gY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBkaWN0aW9uYXJ5OyAgICAgKi8KICAgICAvKiBsb29rIGZvciBhIFBvc3RzY3JpcHQgYmluYXJ5IGZpbGUgdGFnLCBpLmUuLCAweDgwMDEgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MXBhcnNlLmggYi9zcmMvdHlwZTEvdDFwYXJzZS5oCmluZGV4IDRhYzgyYWUuLjU2NTlmNGEgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MXBhcnNlLmgKKysrIGIvc3JjL3R5cGUxL3QxcGFyc2UuaApAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDFwYXJzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFR5cGUgMSBwYXJzZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDFwYXJzZS5oCisgKgorICogICBUeXBlIDEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUMVBBUlNFX0hfCkBAIC0yOCwzNiArMjgsNDUgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDFfUGFyc2VyUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBQU19QYXJzZXJSZWMgaXMgYW4gb2JqZWN0IHVzZWQgdG8gcGFyc2UgYSBUeXBlIDEgZm9udHMgdmVyeSAgICAgICovCi0gIC8qICAgIHF1aWNrbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHJvb3QgICAgICAgICA6OiBUaGUgcm9vdCBwYXJzZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc3RyZWFtICAgICAgIDo6IFRoZSBjdXJyZW50IGlucHV0IHN0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBiYXNlX2RpY3QgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0b3AtbGV2ZWwgZGljdGlvbmFyeS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2VfbGVuICAgICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB0b3AgZGljdGlvbmFyeS4gICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcHJpdmF0ZV9kaWN0IDo6IEEgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LiAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwcml2YXRlX2xlbiAgOjogVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluX3BmYiAgICAgICA6OiBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgaGFuZGxpbmcgYSBQRkIgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluX21lbW9yeSAgICA6OiBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgYSBtZW1vcnktYmFzZWQgc3RyZWFtLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2luZ2xlX2Jsb2NrIDo6IEEgYm9vbGVhbi4gIEluZGljYXRlcyB0aGF0IHRoZSBwcml2YXRlIGRpY3Rpb25hcnkgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgaW4gbGlldSBvZiB0aGUgYmFzZSBkaWN0aW9uYXJ5LiAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBTdHJ1Y3Q6CisgICAqICAgVDFfUGFyc2VyUmVjCisgICAqCisgICAqIEBEZXNjcmlwdGlvbjoKKyAgICogICBBIFBTX1BhcnNlclJlYyBpcyBhbiBvYmplY3QgdXNlZCB0byBwYXJzZSBhIFR5cGUgMSBmb250cyB2ZXJ5CisgICAqICAgcXVpY2tseS4KKyAgICoKKyAgICogQEZpZWxkczoKKyAgICogICByb290IDo6CisgICAqICAgICBUaGUgcm9vdCBwYXJzZXIuCisgICAqCisgICAqICAgc3RyZWFtIDo6CisgICAqICAgICBUaGUgY3VycmVudCBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICAgYmFzZV9kaWN0IDo6CisgICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIHRvcC1sZXZlbCBkaWN0aW9uYXJ5LgorICAgKgorICAgKiAgIGJhc2VfbGVuIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSB0b3AgZGljdGlvbmFyeS4KKyAgICoKKyAgICogICBwcml2YXRlX2RpY3QgOjoKKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkaWN0aW9uYXJ5LgorICAgKgorICAgKiAgIHByaXZhdGVfbGVuIDo6CisgICAqICAgICBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBwcml2YXRlIGRpY3Rpb25hcnkuCisgICAqCisgICAqICAgaW5fcGZiIDo6CisgICAqICAgICBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgaGFuZGxpbmcgYSBQRkIKKyAgICogICAgIGZpbGUuCisgICAqCisgICAqICAgaW5fbWVtb3J5IDo6CisgICAqICAgICBBIGJvb2xlYW4uICBJbmRpY2F0ZXMgYSBtZW1vcnktYmFzZWQgc3RyZWFtLgorICAgKgorICAgKiAgIHNpbmdsZV9ibG9jayA6OgorICAgKiAgICAgQSBib29sZWFuLiAgSW5kaWNhdGVzIHRoYXQgdGhlIHByaXZhdGUgZGljdGlvbmFyeQorICAgKiAgICAgaXMgc3RvcmVkIGluIGxpZXUgb2YgdGhlIGJhc2UgZGljdGlvbmFyeS4KKyAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBUMV9QYXJzZXJSZWNfCiAgIHsKICAgICBQU19QYXJzZXJSZWMgIHJvb3Q7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDF0b2tlbnMuaCBiL3NyYy90eXBlMS90MXRva2Vucy5oCmluZGV4IDQzYTY1ZDguLjQ1ZmM1MGQgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MXRva2Vucy5oCisrKyBiL3NyYy90eXBlMS90MXRva2Vucy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0MXRva2Vucy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHlwZSAxIHRva2VuaXplciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0MXRva2Vucy5oCisgKgorICogICBUeXBlIDEgdG9rZW5pemVyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI3VuZGVmICBGVF9TVFJVQ1RVUkUKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90eXBlMS5jIGIvc3JjL3R5cGUxL3R5cGUxLmMKaW5kZXggNzJlZmY1OS4uYzJkNzkyMiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3R5cGUxLmMKKysrIGIvc3JjL3R5cGUxL3R5cGUxLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR5cGUxLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBUeXBlIDEgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR5cGUxLmMKKyAqCisgKiAgIEZyZWVUeXBlIFR5cGUgMSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZHJpdnIuYyBiL3NyYy90eXBlNDIvdDQyZHJpdnIuYwppbmRleCBmNTc5YjI3Li4xMDM2NTAzIDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMKKysrIGIvc3JjL3R5cGU0Mi90NDJkcml2ci5jCkBAIC0xLDM5ICsxLDM5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0NDJkcml2ci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGlnaC1sZXZlbCBUeXBlIDQyIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0NDJkcml2ci5jCisgKgorICogICBIaWdoLWxldmVsIFR5cGUgNDIgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogUm9iZXJ0byBBbGFtZWRhLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIFR5cGU0MiBmb250cyBhcyBkZXNjcmliZWQgaW4gdGhlICAgICAgICAgICAgICAgKi8KLSAgLyogVGVjaG5pY2FsIE5vdGUgIzUwMTIgZnJvbSBBZG9iZSwgd2l0aCB0aGVzZSBsaW1pdGF0aW9uczogICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAxKSBDSUQgRm9udHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogMikgSW5jcmVtZW50YWwgZm9udHMgbWFraW5nIHVzZSBvZiB0aGUgR2x5cGhEaXJlY3Rvcnkga2V5d29yZCAgICAgICAgICovCi0gIC8qICAgIHdpbGwgYmUgbG9hZGVkLCBidXQgdGhlIHJlbmRlcmluZyB3aWxsIGJlIHVzaW5nIHRoZSBUcnVlVHlwZSAgICAgICAqLwotICAvKiAgICB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogMykgQXMgZm9yIFR5cGUxIGZvbnRzLCBDRGV2UHJvYyBpcyBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDQpIFRoZSBNZXRyaWNzIGRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA1KSBBRk0gbWV0cmljcyBhcmUgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEluIG90aGVyIHdvcmRzLCB0aGlzIGRyaXZlciBzdXBwb3J0cyBUeXBlNDIgZm9udHMgZGVyaXZlZCBmcm9tICAgICAgICAqLwotICAvKiBUcnVlVHlwZSBmb250cyBpbiBhIG5vbi1DSUQgbWFubmVyLCBhcyBkb25lIGJ5IHVzdWFsIGNvbnZlcnNpb24gICAgICAgKi8KLSAgLyogcHJvZ3JhbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgVHlwZTQyIGZvbnRzIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICogVGVjaG5pY2FsIE5vdGUgIzUwMTIgZnJvbSBBZG9iZSwgd2l0aCB0aGVzZSBsaW1pdGF0aW9uczoKKyAgICoKKyAgICogMSkgQ0lEIEZvbnRzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKyAgICogMikgSW5jcmVtZW50YWwgZm9udHMgbWFraW5nIHVzZSBvZiB0aGUgR2x5cGhEaXJlY3Rvcnkga2V5d29yZAorICAgKiAgICB3aWxsIGJlIGxvYWRlZCwgYnV0IHRoZSByZW5kZXJpbmcgd2lsbCBiZSB1c2luZyB0aGUgVHJ1ZVR5cGUKKyAgICogICAgdGFibGVzLgorICAgKiAzKSBBcyBmb3IgVHlwZTEgZm9udHMsIENEZXZQcm9jIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAqIDQpIFRoZSBNZXRyaWNzIGRpY3Rpb25hcnkgaXMgbm90IHN1cHBvcnRlZC4KKyAgICogNSkgQUZNIG1ldHJpY3MgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAqCisgICAqIEluIG90aGVyIHdvcmRzLCB0aGlzIGRyaXZlciBzdXBwb3J0cyBUeXBlNDIgZm9udHMgZGVyaXZlZCBmcm9tCisgICAqIFRydWVUeXBlIGZvbnRzIGluIGEgbm9uLUNJRCBtYW5uZXIsIGFzIGRvbmUgYnkgdXN1YWwgY29udmVyc2lvbgorICAgKiBwcm9ncmFtcy4KKyAgICoKKyAgICovCiAKIAogI2luY2x1ZGUgInQ0MmRyaXZyLmgiCkBAIC01Miw3ICs1Miw3IEBACiAKICAgLyoKICAgICoKLSAgICogIEdMWVBIIERJQ1QgU0VSVklDRQorICAgKiBHTFlQSCBESUNUIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTk4LDcgKzk4LDcgQEAKIAogICAvKgogICAgKgotICAgKiAgUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKKyAgICogUE9TVFNDUklQVCBOQU1FIFNFUlZJQ0UKICAgICoKICAgICovCiAKQEAgLTExNyw3ICsxMTcsNyBAQAogCiAgIC8qCiAgICAqCi0gICAqICBQT1NUU0NSSVBUIElORk8gU0VSVklDRQorICAgKiBQT1NUU0NSSVBUIElORk8gU0VSVklDRQogICAgKgogICAgKi8KIApAQCAtMTczLDcgKzE3Myw3IEBACiAKICAgLyoKICAgICoKLSAgICogIFNFUlZJQ0UgTElTVAorICAgKiBTRVJWSUNFIExJU1QKICAgICoKICAgICovCiAKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZHJpdnIuaCBiL3NyYy90eXBlNDIvdDQyZHJpdnIuaAppbmRleCAzNjY3ZjNlLi5lZjUwYWQ5IDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmRyaXZyLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJkcml2ci5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0NDJkcml2ci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgSGlnaC1sZXZlbCBUeXBlIDQyIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0NDJkcml2ci5oCisgKgorICogICBIaWdoLWxldmVsIFR5cGUgNDIgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogUm9iZXJ0byBBbGFtZWRhLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpZm5kZWYgVDQyRFJJVlJfSF8KQEAgLTI2LDE0ICsyNiw4IEBACiAKIEZUX0JFR0lOX0hFQURFUgogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAidGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBQSUMgeWV0IgotI2VuZGlmCi0KLQogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9Ecml2ZXJfQ2xhc3NSZWMgKSAgdDQyX2RyaXZlcl9jbGFzczsKIAotCiBGVF9FTkRfSEVBREVSCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJlcnJvci5oIGIvc3JjL3R5cGU0Mi90NDJlcnJvci5oCmluZGV4IGUzOTc4YTcuLjk1ZjllNjkgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQyZXJyb3IuaAorKysgYi9zcmMvdHlwZTQyL3Q0MmVycm9yLmgKQEAgLTEsMjYgKzEsMjYgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQ0MmVycm9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDQyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQ0MmVycm9yLmgKKyAqCisgKiAgIFR5cGUgNDIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFR5cGUgNDIgZXJyb3IgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBUeXBlIDQyIGVycm9yIGVudW1lcmF0aW9uIGNvbnN0YW50cy4KKyAgICoKKyAgICovCiAKICNpZm5kZWYgVDQyRVJST1JfSF8KICNkZWZpbmUgVDQyRVJST1JfSF8KZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyb2Jqcy5jIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmMKaW5kZXggNjZlNWM0MC4uMDMyNWNhZCAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJvYmpzLmMKKysrIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQ0Mm9ianMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDQyIG9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQ0Mm9ianMuYworICoKKyAqICAgVHlwZSA0MiBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIFJvYmVydG8gQWxhbWVkYS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaW5jbHVkZSAidDQyb2Jqcy5oIgpAQCAtNDU3LDIwICs0NTcsMjEgQEAKICAgfQogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVDQyX0RyaXZlcl9Jbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBUeXBlIDQyIGRyaXZlciBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZHJpdmVyIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQEZ1bmN0aW9uOgorICAgKiAgIFQ0Ml9Ecml2ZXJfSW5pdAorICAgKgorICAgKiBARGVzY3JpcHRpb246CisgICAqICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBUeXBlIDQyIGRyaXZlciBvYmplY3QuCisgICAqCisgICAqIEBJbnB1dDoKKyAgICogICBkcml2ZXIgOjoKKyAgICogICAgIEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZHJpdmVyIG9iamVjdC4KKyAgICoKKyAgICogQFJldHVybjoKKyAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLgorICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIFQ0Ml9Ecml2ZXJfSW5pdCggRlRfTW9kdWxlICBtb2R1bGUgKSAgICAgICAgLyogVDQyX0RyaXZlciAqLwogICB7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0Mm9ianMuaCBiL3NyYy90eXBlNDIvdDQyb2Jqcy5oCmluZGV4IDNiYWQ1MTMuLjMzMmE0M2MgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQyb2Jqcy5oCisrKyBiL3NyYy90eXBlNDIvdDQyb2Jqcy5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0NDJvYmpzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHlwZSA0MiBvYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0NDJvYmpzLmgKKyAqCisgKiAgIFR5cGUgNDIgb2JqZWN0cyBtYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBSb2JlcnRvIEFsYW1lZGEuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUNDJPQkpTX0hfCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMgYi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMKaW5kZXggNDgxM2QxZi4uZWRkMjdhOCAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJwYXJzZS5jCisrKyBiL3NyYy90eXBlNDIvdDQycGFyc2UuYwpAQCAtMSwxOSArMSwxOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdDQycGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFR5cGUgNDIgZm9udCBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdDQycGFyc2UuYworICoKKyAqICAgVHlwZSA0MiBmb250IHBhcnNlciAoYm9keSkuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogUm9iZXJ0byBBbGFtZWRhLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNpbmNsdWRlICJ0NDJwYXJzZS5oIgpAQCAtMjMsMTIgKzIzLDEyIEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdAorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZworICAgKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLgorICAgKi8KICN1bmRlZiAgRlRfQ09NUE9ORU5UCiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfdDQyCiAKQEAgLTE0OSwxOSArMTQ5LDE5IEBACiAgICAgcGFyc2VyLT5iYXNlX2RpY3QgPSBOVUxMOwogICAgIHBhcnNlci0+aW5fbWVtb3J5ID0gMDsKIAotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qIEhlcmUgYSBzaG9ydCBzdW1tYXJ5IG9mIHdoYXQgaXMgZ29pbmcgb246ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgV2hlbiBjcmVhdGluZyBhIG5ldyBUeXBlIDQyIHBhcnNlciwgd2UgdHJ5IHRvIGxvY2F0ZSBhbmQgbG9hZCAqLwotICAgIC8qICAgdGhlIGJhc2UgZGljdGlvbmFyeSwgbG9hZGluZyB0aGUgd2hvbGUgZm9udCBpbnRvIG1lbW9yeS4gICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgV2hlbiBgbG9hZGluZycgdGhlIGJhc2UgZGljdGlvbmFyeSwgd2Ugb25seSBzZXQgdXAgcG9pbnRlcnMgICAqLwotICAgIC8qICAgaW4gdGhlIGNhc2Ugb2YgYSBtZW1vcnktYmFzZWQgc3RyZWFtLiAgT3RoZXJ3aXNlLCB3ZSBhbGxvY2F0ZSAqLwotICAgIC8qICAgYW5kIGxvYWQgdGhlIGJhc2UgZGljdGlvbmFyeSBpbiBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAgcGFyc2VyLT5pbl9tZW1vcnkgaXMgc2V0IGlmIHdlIGhhdmUgYSBtZW1vcnkgc3RyZWFtLiAgICAgICAgICAqLwotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogSGVyZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCBpcyBnb2luZyBvbjoKKyAgICAgKgorICAgICAqICAgV2hlbiBjcmVhdGluZyBhIG5ldyBUeXBlIDQyIHBhcnNlciwgd2UgdHJ5IHRvIGxvY2F0ZSBhbmQgbG9hZAorICAgICAqICAgdGhlIGJhc2UgZGljdGlvbmFyeSwgbG9hZGluZyB0aGUgd2hvbGUgZm9udCBpbnRvIG1lbW9yeS4KKyAgICAgKgorICAgICAqICAgV2hlbiBgbG9hZGluZycgdGhlIGJhc2UgZGljdGlvbmFyeSwgd2Ugb25seSBzZXQgdXAgcG9pbnRlcnMKKyAgICAgKiAgIGluIHRoZSBjYXNlIG9mIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS4gIE90aGVyd2lzZSwgd2UgYWxsb2NhdGUKKyAgICAgKiAgIGFuZCBsb2FkIHRoZSBiYXNlIGRpY3Rpb25hcnkgaW4gaXQuCisgICAgICoKKyAgICAgKiAgIHBhcnNlci0+aW5fbWVtb3J5IGlzIHNldCBpZiB3ZSBoYXZlIGEgbWVtb3J5IHN0cmVhbS4KKyAgICAgKi8KIAogICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIDBMICkgfHwKICAgICAgICAgIEZUX0ZSQU1FX0VOVEVSKCAxNyApICkKQEAgLTI4NCw2ICsyODQsMTMgQEAKICAgICBtYXRyaXgtPnh5ID0gdGVtcFsyXTsKICAgICBtYXRyaXgtPnl5ID0gdGVtcFszXTsKIAorICAgIGlmICggIUZUX01hdHJpeF9DaGVjayggbWF0cml4ICkgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggInQ0Ml9wYXJzZV9mb250X21hdHJpeDogaW52YWxpZCBmb250IG1hdHJpeFxuIiApKTsKKyAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLyogbm90ZSB0aGF0IHRoZSBvZmZzZXRzIG11c3QgYmUgZXhwcmVzc2VkIGluIGludGVnZXIgZm9udCB1bml0cyAqLwogICAgIG9mZnNldC0+eCA9IHRlbXBbNF0gPj4gMTY7CiAgICAgb2Zmc2V0LT55ID0gdGVtcFs1XSA+PiAxNjsKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQycGFyc2UuaCBiL3NyYy90eXBlNDIvdDQycGFyc2UuaAppbmRleCBmMzVkMjNkLi5kOWI5YTY5IDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MnBhcnNlLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJwYXJzZS5oCkBAIC0xLDE5ICsxLDE5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICB0NDJwYXJzZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVHlwZSA0MiBmb250IHBhcnNlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0NDJwYXJzZS5oCisgKgorICogICBUeXBlIDQyIGZvbnQgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CisgKiBSb2JlcnRvIEFsYW1lZGEuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBUNDJQQVJTRV9IXwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oIGIvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oCmluZGV4IGQwYWEyZGUuLjdkMDIzMGUgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQydHlwZXMuaAorKysgYi9zcmMvdHlwZTQyL3Q0MnR5cGVzLmgKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHQ0MnR5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUeXBlIDQyIGZvbnQgZGF0YSB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHQ0MnR5cGVzLmgKKyAqCisgKiAgIFR5cGUgNDIgZm9udCBkYXRhIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAyLTIwMTggYnkKKyAqIFJvYmVydG8gQWxhbWVkYS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCiAjaWZuZGVmIFQ0MlRZUEVTX0hfCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3R5cGU0Mi5jIGIvc3JjL3R5cGU0Mi90eXBlNDIuYwppbmRleCA2YTg5Y2ZiLi4xODdjNWVkIDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3R5cGU0Mi5jCisrKyBiL3NyYy90eXBlNDIvdHlwZTQyLmMKQEAgLTEsMTkgKzEsMTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHR5cGU0Mi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBUeXBlIDQyIGRyaXZlciBjb21wb25lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR5cGU0Mi5jCisgKgorICogICBGcmVlVHlwZSBUeXBlIDQyIGRyaXZlciBjb21wb25lbnQuCisgKgorICogQ29weXJpZ2h0IDIwMDItMjAxOCBieQorICogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKKyAqIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0CisgKiBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUKKyAqIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZAorICogdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LgorICoKKyAqLwogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVApkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL2ZudGVycnMuaCBiL3NyYy93aW5mb250cy9mbnRlcnJzLmgKaW5kZXggM2E4NmFmNS4uMDhmY2ViMCAxMDA2NDQKLS0tIGEvc3JjL3dpbmZvbnRzL2ZudGVycnMuaAorKysgYi9zcmMvd2luZm9udHMvZm50ZXJycy5oCkBAIC0xLDI3ICsxLDI3IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmbnRlcnJzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgV2luIEZOVC9GT04gZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmbnRlcnJzLmgKKyAqCisgKiAgIFdpbiBGTlQvRk9OIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLgorICoKKyAqIENvcHlyaWdodCAyMDAxLTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCisgKiBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdAorICogbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlCisgKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKKyAqIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4KKyAqCisgKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBXaW5kb3dzIEZOVC9GT04gZXJyb3IgZW51bWVyYXRpb24gICAgICovCi0gIC8qIGNvbnN0YW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIFdpbmRvd3MgRk5UL0ZPTiBlcnJvciBlbnVtZXJhdGlvbgorICAgKiBjb25zdGFudHMuCisgICAqCisgICAqLwogCiAjaWZuZGVmIEZOVEVSUlNfSF8KICNkZWZpbmUgRk5URVJSU19IXwpkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL3dpbmZudC5jIGIvc3JjL3dpbmZvbnRzL3dpbmZudC5jCmluZGV4IDM2YmQzMTQuLjcwZmM4MjcgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy93aW5mbnQuYworKysgYi9zcmMvd2luZm9udHMvd2luZm50LmMKQEAgLTEsMjEgKzEsMjEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHdpbmZudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgV2luZG93cyBGTlQvRk9OIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzIEh1dyBEIE0gRGF2aWVzIGZvciBDb2Rld2VhdmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNyBEbWl0cnkgVGltb3Noa292IGZvciBDb2Rld2VhdmVycyAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogd2luZm50LmMKKyAqCisgKiAgIEZyZWVUeXBlIGZvbnQgZHJpdmVyIGZvciBXaW5kb3dzIEZOVC9GT04gZmlsZXMKKyAqCisgKiBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CisgKiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisgKiBDb3B5cmlnaHQgMjAwMyBIdXcgRCBNIERhdmllcyBmb3IgQ29kZXdlYXZlcnMKKyAqIENvcHlyaWdodCAyMDA3IERtaXRyeSBUaW1vc2hrb3YgZm9yIENvZGV3ZWF2ZXJzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfV0lORk5UX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCi0gIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLwotICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0CisgICAqIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nCisgICAqIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uCisgICAqLwogI3VuZGVmICBGVF9DT01QT05FTlQKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV93aW5mbnQKIApAQCAtMTEzMSwxMCArMTEzMSwxMCBAQAogICAgIHdpbmZudF9nZXRfaGVhZGVyICAgICAgIC8qIGdldF9oZWFkZXIgKi8KICAgfTsKIAotIC8qCi0gICogIFNFUlZJQ0UgTElTVAotICAqCi0gICovCisgIC8qCisgICAqIFNFUlZJQ0UgTElTVAorICAgKgorICAgKi8KIAogICBzdGF0aWMgY29uc3QgRlRfU2VydmljZURlc2NSZWMgIHdpbmZudF9zZXJ2aWNlc1tdID0KICAgewpkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL3dpbmZudC5oIGIvc3JjL3dpbmZvbnRzL3dpbmZudC5oCmluZGV4IDQ4ODVjOWQuLjAxNjE5MzkgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy93aW5mbnQuaAorKysgYi9zcmMvd2luZm9udHMvd2luZm50LmgKQEAgLTEsMjAgKzEsMjAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIHdpbmZudC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgV2luZG93cyBGTlQvRk9OIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3IERtaXRyeSBUaW1vc2hrb3YgZm9yIENvZGV3ZWF2ZXJzICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB3aW5mbnQuaAorICoKKyAqICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIFdpbmRvd3MgRk5UL0ZPTiBmaWxlcworICoKKyAqIENvcHlyaWdodCAxOTk2LTIwMTggYnkKKyAqIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KKyAqIENvcHlyaWdodCAyMDA3IERtaXRyeSBUaW1vc2hrb3YgZm9yIENvZGV3ZWF2ZXJzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLAorICogbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QKKyAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQorICogdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kCisgKiB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuCisgKgorICovCiAKIAogI2lmbmRlZiBXSU5GTlRfSF8KQEAgLTI4LDkgKzI4LDYgQEAKIAogRlRfQkVHSU5fSEVBREVSCiAKLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwotI2Vycm9yICJ0aGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IFBJQyB5ZXQiCi0jZW5kaWYKIAogICB0eXBlZGVmIHN0cnVjdCAgV2luTVpfSGVhZGVyUmVjXwogICB7CmRpZmYgLS1naXQgYS92bXNfbWFrZS5jb20gYi92bXNfbWFrZS5jb20KaW5kZXggNjIyMmM1ZS4uN2I4YTQ5YiAxMDA2NDQKLS0tIGEvdm1zX21ha2UuY29tCisrKyBiL3Ztc19tYWtlLmNvbQpAQCAtMzU2LDggKzM1Niw4IEBACiBDRkxBR1M9JChDT01QX0ZMQUdTKSQoREVCVUcpL2luY2x1ZGU9KFstLS5idWlsZHMudm1zXSxbLS0uaW5jbHVkZV0sWy0tLnNyYy5iYXNlXSkKIAogT0JKUz1mdGJhc2Uub2JqLGZ0aW5pdC5vYmosZnRnbHlwaC5vYmosZnRkZWJ1Zy5vYmosZnRiZGYub2JqLGZ0bW0ub2JqLFwKLSAgICAgZnR0eXBlMS5vYmosZnRmbnRmbXQub2JqLGZ0cGZyLm9iaixmdHN0cm9rZS5vYmosZnR3aW5mbnQub2JqLGZ0YmJveC5vYmosXAotICAgICBmdGJpdG1hcC5vYmosZnRsY2RmaWwub2JqLGZ0Z2FzcC5vYmoKKyAgICAgZnR0eXBlMS5vYmosZnRwZnIub2JqLGZ0c3Ryb2tlLm9iaixmdHdpbmZudC5vYmosZnRiYm94Lm9iaixcCisgICAgIGZ0Yml0bWFwLm9iaixmdGdhc3Aub2JqCiAKIGFsbCA6ICQoT0JKUykKICAgICAgICAgbGlicmFyeSBbLS0ubGliXWZyZWV0eXBlLm9sYiAkKE9CSlMpCg==