ZGlmZiAtLWdpdCBhL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2NDRjNzI4ZjUxZTllMDBmYmM4OWVlNWQ2NGIwNDE3YjkzZDk5MTguc3ZuLWJhc2UgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNjQ0YzcyOGY1MWU5ZTAwZmJjODllZTVkNjRiMDQxN2I5M2Q5OTE4LnN2bi1iYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjBhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNjQ0YzcyOGY1MWU5ZTAwZmJjODllZTVkNjRiMDQxN2I5M2Q5OTE4LnN2bi1iYXNlCkBAIC0wLDAgKzEsOTY4IEBACisvKiAkSWQkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisKKworLyoqCisgKiBccGFnZSBwYWdlX3BqbWVkaWFfc2FtcGxlc192aWRfc3RyZWFtdXRpbF9jIFNhbXBsZXM6IFZpZGVvIFN0cmVhbWluZworICoKKyAqIFRoaXMgZXhhbXBsZSBtYWlubHkgZGVtb25zdHJhdGVzIGhvdyB0byBzdHJlYW0gdmlkZW8gdG8gcmVtb3RlCisgKiBwZWVyIHVzaW5nIFJUUC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGpzaXAtYXBwcy9zcmMvc2FtcGxlcy92aWRfc3RyZWFtdXRpbC5jCisgKgorICogXGluY2x1ZGVsaW5lbm8gdmlkX3N0cmVhbXV0aWwuYworICovCisKKyNpbmNsdWRlIDxwamxpYi5oPgorI2luY2x1ZGUgPHBqbGliLXV0aWwuaD4KKyNpbmNsdWRlIDxwam1lZGlhLmg+CisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy5oPgorI2luY2x1ZGUgPHBqbWVkaWEvdHJhbnNwb3J0X3NydHAuaD4KKworCisjaWYgZGVmaW5lZChQSk1FRElBX0hBU19WSURFTykgJiYgKFBKTUVESUFfSEFTX1ZJREVPICE9IDApCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgkvKiBhdG9pKCkgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAidXRpbC5oIgorCisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjID0gCisgIiB2aWRfc3RyZWFtdXRpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAiXG4iCisgIiBQVVJQT1NFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAiICBEZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHBqbWVkaWEgdmlkZW8gc3RyZWFtIGNvbXBvbmVudCB0bwkJXG4iCisgIiAgdHJhbnNtaXQvcmVjZWl2ZSBSVFAgcGFja2V0cyB0by9mcm9tIHZpZGVvIGRldmljZS9maWxlLgkJXG4iCisgIlxuIgorICJcbiIKKyAiIFVTQUdFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICIgIHZpZF9zdHJlYW11dGlsIFtvcHRpb25zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgIlxuIgorICJcbiIKKyAiIE9wdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICIgIC0tY29kZWM9Q09ERUMgICAgICAgICBTZXQgdGhlIGNvZGVjIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgIiAgLS1sb2NhbC1wb3J0PVBPUlQgICAgIFNldCBsb2NhbCBSVFAgcG9ydCAoZGVmYXVsdD00MDAwKSAgICAgICAgICAgICBcbiIKKyAiICAtLXJlbW90ZT1JUDpQT1JUICAgICAgU2V0IHRoZSByZW1vdGUgcGVlci4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCAgIFxuIgorICIgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvZ3JhbSB3aWxsIHRyYW5zbWl0IFJUUCBhdWRpbyB0byB0aGUgICAgXG4iCisgIiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBhZGRyZXNzLiAoZGVmYXVsdDogcmVjdiBvbmx5KSAgICAgICBcbiIKKyAiICAtLXBsYXktZmlsZT1BVkkgICAgICAgU2VuZCB2aWRlbyBmcm9tIHRoZSBBVkkgZmlsZSBpbnN0ZWFkIG9mIGZyb20gIFxuIgorICIgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmlkZW8gZGV2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgIiAgLS1zZW5kLXJlY3YgICAgICAgICAgIFNldCBzdHJlYW0gZGlyZWN0aW9uIHRvIGJpZGlyZWN0aW9uYWwuICAgICAgICBcbiIKKyAiICAtLXNlbmQtb25seSAgICAgICAgICAgU2V0IHN0cmVhbSBkaXJlY3Rpb24gdG8gc2VuZCBvbmx5ICAgICAgICAgICAgIFxuIgorICIgIC0tcmVjdi1vbmx5ICAgICAgICAgICBTZXQgc3RyZWFtIGRpcmVjdGlvbiB0byByZWN2IG9ubHkgKGRlZmF1bHQpICAgXG4iCisgCisgIiAgLS1zZW5kLXdpZHRoICAgICAgICAgIFZpZGVvIHdpZHRoIHRvIGJlIHNlbnQgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAiICAtLXNlbmQtaGVpZ2h0ICAgICAgICAgVmlkZW8gaGVpZ2h0IHRvIGJlIHNlbnQgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICIgICAgICAgICAgICAgICAgICAgICAgICAtLXNlbmQtd2lkdGggYW5kIC0tc2VuZC1oZWlnaHQgbm90IGFwcGxpY2FibGUgXG4iCisgIiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIHN0cmVhbWluZyAoc2VlIC0tcGxheS1maWxlKSAgICAgICAgICBcbiIKKworICIgIC0tc2VuZC1wdCAgICAgICAgICAgICBQYXlsb2FkIHR5cGUgZm9yIHNlbmRpbmcgICAgICAgICAgICAgICAgICAgICAgXG4iCisgIiAgLS1yZWN2LXB0ICAgICAgICAgICAgIFBheWxvYWQgdHlwZSBmb3IgcmVjZWl2aW5nICAgICAgICAgICAgICAgICAgICBcbiIKKworI2lmIGRlZmluZWQoUEpNRURJQV9IQVNfU1JUUCkgJiYgKFBKTUVESUFfSEFTX1NSVFAgIT0gMCkKKyAiICAtLXVzZS1zcnRwWz1OQU1FXSAgICAgRW5hYmxlIFNSVFAgd2l0aCBjcnlwdG8gc3VpdGUgTkFNRSAgICAgICAgICAgIFxuIgorICIgICAgICAgICAgICAgICAgICAgICAgICBlLmc6IEFFU19DTV8xMjhfSE1BQ19TSEExXzgwIChkZWZhdWx0KSwgICAgICAgXG4iCisgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0NNXzEyOF9ITUFDX1NIQTFfMzIgICAgICAgICAgICAgICAgICBcbiIKKyAiICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIGFsb25nIHdpdGggdGhlIFRYICYgUlgga2V5cywgIFxuIgorICIgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRlZCBvZiA2MCBoZXggZGlnaXRzIChlLmc6IEUxNDhEQS4uKSAgICAgXG4iCisgIiAgLS1zcnRwLXR4LWtleSAgICAgICAgIFNSVFAga2V5IGZvciB0cmFuc21pdGluZyAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAiICAtLXNydHAtcngta2V5ICAgICAgICAgU1JUUCBrZXkgZm9yIHJlY2VpdmluZyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI2VuZGlmCisKKyAiXG4iCis7CisKKyNkZWZpbmUgVEhJU19GSUxFCSJ2aWRfc3RyZWFtdXRpbC5jIgorCisKKy8qIElmIHNldCwgbG9jYWwgcmVuZGVyZXIgd2lsbCBiZSBjcmVhdGVkIHRvIHBsYXkgb3JpZ2luYWwgZmlsZSAqLworI2RlZmluZSBIQVNfTE9DQUxfUkVOREVSRVJfRk9SX1BMQVlfRklMRSAgICAxCisKKworLyogRGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0IGZvciB0aGUgcmVuZGVyZXIsIGJldHRlciBiZSBzZXQgdG8gbWF4aW11bQorICogYWNjZXB0YWJsZSBzaXplLgorICovCisjZGVmaW5lIERFRl9SRU5ERVJFUl9XSURUSAkJICAgIDY0MAorI2RlZmluZSBERUZfUkVOREVSRVJfSEVJR0hUCQkgICAgNDgwCisKKworLyogUHJvdG90eXBlICovCitzdGF0aWMgdm9pZCBwcmludF9zdHJlYW1fc3RhdChwam1lZGlhX3ZpZF9zdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgIGNvbnN0IHBqbWVkaWFfdmlkX2NvZGVjX3BhcmFtICpjb2RlY19wYXJhbSk7CisKKy8qIFByb3RvdHlwZSBmb3IgTElCU1JUUCB1dGlsaXR5IGluIGZpbGUgZGF0YXR5cGVzLmMgKi8KK2ludCBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyhjaGFyICpyYXcsIGNoYXIgKmhleCwgaW50IGxlbik7CisKKy8qIAorICogUmVnaXN0ZXIgYWxsIGNvZGVjcy4gCisgKi8KK3N0YXRpYyBwal9zdGF0dXNfdCBpbml0X2NvZGVjcyhwal9wb29sX2ZhY3RvcnkgKnBmKQoreworICAgIHBqX3N0YXR1c190IHN0YXR1czsKKworICAgIC8qIFRvIHN1cHByZXNzIHdhcm5pbmcgYWJvdXQgdW51c2VkIHZhciB3aGVuIGFsbCBjb2RlY3MgYXJlIGRpc2FibGVkICovCisgICAgUEpfVU5VU0VEX0FSRyhzdGF0dXMpOworCisjaWYgZGVmaW5lZChQSk1FRElBX0hBU19GRk1QRUdfVklEX0NPREVDKSAmJiBQSk1FRElBX0hBU19GRk1QRUdfVklEX0NPREVDICE9IDAKKyAgICBzdGF0dXMgPSBwam1lZGlhX2NvZGVjX2ZmbXBlZ192aWRfaW5pdChOVUxMLCBwZik7CisgICAgUEpfQVNTRVJUX1JFVFVSTihzdGF0dXMgPT0gUEpfU1VDQ0VTUywgc3RhdHVzKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFBKX1NVQ0NFU1M7Cit9CisKKy8qIAorICogUmVnaXN0ZXIgYWxsIGNvZGVjcy4gCisgKi8KK3N0YXRpYyB2b2lkIGRlaW5pdF9jb2RlY3MoKQoreworI2lmIGRlZmluZWQoUEpNRURJQV9IQVNfRkZNUEVHX1ZJRF9DT0RFQykgJiYgUEpNRURJQV9IQVNfRkZNUEVHX1ZJRF9DT0RFQyAhPSAwCisgICAgcGptZWRpYV9jb2RlY19mZm1wZWdfdmlkX2RlaW5pdCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBwal9zdGF0dXNfdCBjcmVhdGVfZmlsZV9wbGF5ZXIoIHBqX3Bvb2xfdCAqcG9vbCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZmlsZV9uYW1lLAorCQkJCSAgICAgICBwam1lZGlhX3BvcnQgKipwX3BsYXlfcG9ydCkKK3sKKyAgICBwam1lZGlhX2F2aV9zdHJlYW1zICphdmlfc3RyZWFtczsKKyAgICBwam1lZGlhX2F2aV9zdHJlYW0gKnZpZF9zdHJlYW07CisgICAgcGptZWRpYV9wb3J0ICpwbGF5X3BvcnQ7CisgICAgcGpfc3RhdHVzX3Qgc3RhdHVzOworCisgICAgc3RhdHVzID0gcGptZWRpYV9hdmlfcGxheWVyX2NyZWF0ZV9zdHJlYW1zKHBvb2wsIGZpbGVfbmFtZSwgMCwgJmF2aV9zdHJlYW1zKTsKKyAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJcmV0dXJuIHN0YXR1czsKKworICAgIHZpZF9zdHJlYW0gPSBwam1lZGlhX2F2aV9zdHJlYW1zX2dldF9zdHJlYW1fYnlfbWVkaWEoYXZpX3N0cmVhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEpNRURJQV9UWVBFX1ZJREVPKTsKKyAgICBpZiAoIXZpZF9zdHJlYW0pCisJcmV0dXJuIFBKX0VOT1RGT1VORDsKKworICAgIHBsYXlfcG9ydCA9IHBqbWVkaWFfYXZpX3N0cmVhbV9nZXRfcG9ydCh2aWRfc3RyZWFtKTsKKyAgICBwal9hc3NlcnQocGxheV9wb3J0KTsKKworICAgICpwX3BsYXlfcG9ydCA9IHBsYXlfcG9ydDsKKworICAgIHJldHVybiBQSl9TVUNDRVNTOworfQorCisvKiAKKyAqIENyZWF0ZSBzdHJlYW0gYmFzZWQgb24gdGhlIGNvZGVjLCBkaXIsIHJlbW90ZSBhZGRyZXNzLCBldGMuIAorICovCitzdGF0aWMgcGpfc3RhdHVzX3QgY3JlYXRlX3N0cmVhbSggcGpfcG9vbF90ICpwb29sLAorCQkJCSAgcGptZWRpYV9lbmRwdCAqbWVkX2VuZHB0LAorCQkJCSAgY29uc3QgcGptZWRpYV92aWRfY29kZWNfaW5mbyAqY29kZWNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwam1lZGlhX3ZpZF9jb2RlY19wYXJhbSAqY29kZWNfcGFyYW0sCisJCQkJICBwam1lZGlhX2RpciBkaXIsCisJCQkJICBwal9pbnQ4X3QgcnhfcHQsCisJCQkJICBwal9pbnQ4X3QgdHhfcHQsCisJCQkJICBwal91aW50MTZfdCBsb2NhbF9wb3J0LAorCQkJCSAgY29uc3QgcGpfc29ja2FkZHJfaW4gKnJlbV9hZGRyLAorI2lmIGRlZmluZWQoUEpNRURJQV9IQVNfU1JUUCkgJiYgKFBKTUVESUFfSEFTX1NSVFAgIT0gMCkKKwkJCQkgIHBqX2Jvb2xfdCB1c2Vfc3J0cCwKKwkJCQkgIGNvbnN0IHBqX3N0cl90ICpjcnlwdG9fc3VpdGUsCisJCQkJICBjb25zdCBwal9zdHJfdCAqc3J0cF90eF9rZXksCisJCQkJICBjb25zdCBwal9zdHJfdCAqc3J0cF9yeF9rZXksCisjZW5kaWYKKwkJCQkgIHBqbWVkaWFfdmlkX3N0cmVhbSAqKnBfc3RyZWFtICkKK3sKKyAgICBwam1lZGlhX3ZpZF9zdHJlYW1faW5mbyBpbmZvOworICAgIHBqbWVkaWFfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBOVUxMOworICAgIHBqX3N0YXR1c190IHN0YXR1czsKKyNpZiBkZWZpbmVkKFBKTUVESUFfSEFTX1NSVFApICYmIChQSk1FRElBX0hBU19TUlRQICE9IDApCisgICAgcGptZWRpYV90cmFuc3BvcnQgKnNydHBfdHAgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiBSZXNldCBzdHJlYW0gaW5mby4gKi8KKyAgICBwal9iemVybygmaW5mbywgc2l6ZW9mKGluZm8pKTsKKworICAgIC8qIEluaXRpYWxpemUgc3RyZWFtIGluZm8gZm9ybWF0cyAqLworICAgIGluZm8udHlwZSA9IFBKTUVESUFfVFlQRV9WSURFTzsKKyAgICBpbmZvLmRpciA9IGRpcjsKKyAgICBpbmZvLmNvZGVjX2luZm8gPSAqY29kZWNfaW5mbzsKKyAgICBpbmZvLnR4X3B0ID0gKHR4X3B0ID09IC0xKT8gY29kZWNfaW5mby0+cHQgOiB0eF9wdDsKKyAgICBpbmZvLnJ4X3B0ID0gKHJ4X3B0ID09IC0xKT8gY29kZWNfaW5mby0+cHQgOiByeF9wdDsKKyAgICBpbmZvLnNzcmMgPSBwal9yYW5kKCk7CisgICAgaWYgKGNvZGVjX3BhcmFtKQorICAgICAgICBpbmZvLmNvZGVjX3BhcmFtID0gY29kZWNfcGFyYW07CisgICAgCisgICAgLyogQ29weSByZW1vdGUgYWRkcmVzcyAqLworICAgIHBqX21lbWNweSgmaW5mby5yZW1fYWRkciwgcmVtX2FkZHIsIHNpemVvZihwal9zb2NrYWRkcl9pbikpOworCisgICAgLyogSWYgcmVtb3RlIGFkZHJlc3MgaXMgbm90IHNldCwgc2V0IHRvIGFuIGFyYml0cmFyeSBhZGRyZXNzCisgICAgICogKG90aGVyd2lzZSBzdHJlYW0gd2lsbCBhc3NlcnQpLgorICAgICAqLworICAgIGlmIChpbmZvLnJlbV9hZGRyLmFkZHIuc2FfZmFtaWx5ID09IDApIHsKKwljb25zdCBwal9zdHJfdCBhZGRyID0gcGpfc3RyKCIxMjcuMC4wLjEiKTsKKwlwal9zb2NrYWRkcl9pbl9pbml0KCZpbmZvLnJlbV9hZGRyLmlwdjQsICZhZGRyLCAwKTsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgbWVkaWEgdHJhbnNwb3J0ICovCisgICAgc3RhdHVzID0gcGptZWRpYV90cmFuc3BvcnRfdWRwX2NyZWF0ZShtZWRfZW5kcHQsIE5VTEwsIGxvY2FsX3BvcnQsCisJCQkJCSAgMCwgJnRyYW5zcG9ydCk7CisgICAgaWYgKHN0YXR1cyAhPSBQSl9TVUNDRVNTKQorCXJldHVybiBzdGF0dXM7CisKKyNpZiBkZWZpbmVkKFBKTUVESUFfSEFTX1NSVFApICYmIChQSk1FRElBX0hBU19TUlRQICE9IDApCisgICAgLyogQ2hlY2sgaWYgU1JUUCBlbmFibGVkICovCisgICAgaWYgKHVzZV9zcnRwKSB7CisJcGptZWRpYV9zcnRwX2NyeXB0byB0eF9wbGMsIHJ4X3BsYzsKKworCXN0YXR1cyA9IHBqbWVkaWFfdHJhbnNwb3J0X3NydHBfY3JlYXRlKG1lZF9lbmRwdCwgdHJhbnNwb3J0LCAKKwkJCQkJICAgICAgIE5VTEwsICZzcnRwX3RwKTsKKwlpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJICAgIHJldHVybiBzdGF0dXM7CisKKwlwal9iemVybygmdHhfcGxjLCBzaXplb2YocGptZWRpYV9zcnRwX2NyeXB0bykpOworCXBqX2J6ZXJvKCZyeF9wbGMsIHNpemVvZihwam1lZGlhX3NydHBfY3J5cHRvKSk7CisKKwl0eF9wbGMua2V5ID0gKnNydHBfdHhfa2V5OworCXR4X3BsYy5uYW1lID0gKmNyeXB0b19zdWl0ZTsKKwlyeF9wbGMua2V5ID0gKnNydHBfcnhfa2V5OworCXJ4X3BsYy5uYW1lID0gKmNyeXB0b19zdWl0ZTsKKwkKKwlzdGF0dXMgPSBwam1lZGlhX3RyYW5zcG9ydF9zcnRwX3N0YXJ0KHNydHBfdHAsICZ0eF9wbGMsICZyeF9wbGMpOworCWlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgcmV0dXJuIHN0YXR1czsKKworCXRyYW5zcG9ydCA9IHNydHBfdHA7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBOb3cgdGhhdCB0aGUgc3RyZWFtIGluZm8gaXMgaW5pdGlhbGl6ZWQsIHdlIGNhbiBjcmVhdGUgdGhlIAorICAgICAqIHN0cmVhbS4KKyAgICAgKi8KKworICAgIHN0YXR1cyA9IHBqbWVkaWFfdmlkX3N0cmVhbV9jcmVhdGUoIG1lZF9lbmRwdCwgcG9vbCwgJmluZm8sIAorCQkJCQl0cmFuc3BvcnQsIAorCQkJCQlOVUxMLCBwX3N0cmVhbSk7CisKKyAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpIHsKKwlhcHBfcGVycm9yKFRISVNfRklMRSwgIkVycm9yIGNyZWF0aW5nIHN0cmVhbSIsIHN0YXR1cyk7CisJcGptZWRpYV90cmFuc3BvcnRfY2xvc2UodHJhbnNwb3J0KTsKKwlyZXR1cm4gc3RhdHVzOworICAgIH0KKworCisgICAgcmV0dXJuIFBKX1NVQ0NFU1M7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3QgcGxheV9maWxlX2RhdGEKK3sKKyAgICBjb25zdCBjaGFyICpmaWxlX25hbWU7CisgICAgcGptZWRpYV9wb3J0ICpwbGF5X3BvcnQ7CisgICAgcGptZWRpYV9wb3J0ICpzdHJlYW1fcG9ydDsKKyAgICBwam1lZGlhX3ZpZF9jb2RlYyAqZGVjb2RlcjsKKyAgICBwam1lZGlhX3BvcnQgKnJlbmRlcmVyOworICAgIHZvaWQgKnJlYWRfYnVmOworICAgIHBqX3NpemVfdCByZWFkX2J1Zl9zaXplOworICAgIHZvaWQgKmRlY19idWY7CisgICAgcGpfc2l6ZV90IGRlY19idWZfc2l6ZTsKK30gcGxheV9maWxlX2RhdGE7CisKKworc3RhdGljIHZvaWQgY2xvY2tfY2IoY29uc3QgcGpfdGltZXN0YW1wICp0cywgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIHBsYXlfZmlsZV9kYXRhICpwbGF5X2ZpbGUgPSAocGxheV9maWxlX2RhdGEqKXVzZXJfZGF0YTsKKyAgICBwam1lZGlhX2ZyYW1lIHJlYWRfZnJhbWUsIHdyaXRlX2ZyYW1lOworICAgIHBqX3N0YXR1c190IHN0YXR1czsKKworICAgIFBKX1VOVVNFRF9BUkcodHMpOworCisgICAgLyogUmVhZCBmcmFtZSBmcm9tIGZpbGUgKi8KKyAgICByZWFkX2ZyYW1lLmJ1ZiA9IHBsYXlfZmlsZS0+cmVhZF9idWY7CisgICAgcmVhZF9mcmFtZS5zaXplID0gcGxheV9maWxlLT5yZWFkX2J1Zl9zaXplOworICAgIHBqbWVkaWFfcG9ydF9nZXRfZnJhbWUocGxheV9maWxlLT5wbGF5X3BvcnQsICZyZWFkX2ZyYW1lKTsKKworICAgIC8qIERlY29kZSBmcmFtZSwgaWYgbmVlZGVkICovCisgICAgaWYgKHBsYXlfZmlsZS0+ZGVjb2RlcikgeworCXBqbWVkaWFfdmlkX2NvZGVjICpkZWNvZGVyID0gcGxheV9maWxlLT5kZWNvZGVyOworCisJd3JpdGVfZnJhbWUuYnVmID0gcGxheV9maWxlLT5kZWNfYnVmOworCXdyaXRlX2ZyYW1lLnNpemUgPSBwbGF5X2ZpbGUtPmRlY19idWZfc2l6ZTsKKwlzdGF0dXMgPSBwam1lZGlhX3ZpZF9jb2RlY19kZWNvZGUoZGVjb2RlciwgMSwgJnJlYWRfZnJhbWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCl3cml0ZV9mcmFtZS5zaXplLCAKKwkJCQkJICAmd3JpdGVfZnJhbWUpOworCWlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisJd3JpdGVfZnJhbWUgPSByZWFkX2ZyYW1lOworICAgIH0KKworICAgIC8qIERpc3BsYXkgZnJhbWUgbG9jYWxseSAqLworICAgIGlmIChwbGF5X2ZpbGUtPnJlbmRlcmVyKQorCXBqbWVkaWFfcG9ydF9wdXRfZnJhbWUocGxheV9maWxlLT5yZW5kZXJlciwgJndyaXRlX2ZyYW1lKTsKKworICAgIC8qIFNlbmQgZnJhbWUgKi8KKyAgICBwam1lZGlhX3BvcnRfcHV0X2ZyYW1lKHBsYXlfZmlsZS0+c3RyZWFtX3BvcnQsICZ3cml0ZV9mcmFtZSk7Cit9CisKKworLyoKKyAqIHVzYWdlKCkKKyAqLworc3RhdGljIHZvaWQgdXNhZ2UoKQoreworICAgIHB1dHMoZGVzYyk7Cit9CisKKy8qCisgKiBtYWluKCkKKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBwal9jYWNoaW5nX3Bvb2wgY3A7CisgICAgcGptZWRpYV9lbmRwdCAqbWVkX2VuZHB0OworICAgIHBqX3Bvb2xfdCAqcG9vbDsKKyAgICBwam1lZGlhX3ZpZF9zdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisgICAgcGptZWRpYV9wb3J0ICplbmNfcG9ydCwgKmRlY19wb3J0OworICAgIHBqX3N0YXR1c190IHN0YXR1czsgCisKKyAgICBwam1lZGlhX3ZpZF9wb3J0ICpjYXB0dXJlPU5VTEwsICpyZW5kZXJlcj1OVUxMOworICAgIHBqbWVkaWFfdmlkX3BvcnRfcGFyYW0gdnBwOworCisjaWYgZGVmaW5lZChQSk1FRElBX0hBU19TUlRQKSAmJiAoUEpNRURJQV9IQVNfU1JUUCAhPSAwKQorICAgIC8qIFNSVFAgdmFyaWFibGVzICovCisgICAgcGpfYm9vbF90IHVzZV9zcnRwID0gUEpfRkFMU0U7CisgICAgY2hhciB0bXBfdHhfa2V5WzY0XTsKKyAgICBjaGFyIHRtcF9yeF9rZXlbNjRdOworICAgIHBqX3N0cl90ICBzcnRwX3R4X2tleSA9IHtOVUxMLCAwfTsKKyAgICBwal9zdHJfdCAgc3J0cF9yeF9rZXkgPSB7TlVMTCwgMH07CisgICAgcGpfc3RyX3QgIHNydHBfY3J5cHRvX3N1aXRlID0ge05VTEwsIDB9OworICAgIGludAl0bXBfa2V5X2xlbjsKKyNlbmRpZgorCisgICAgLyogRGVmYXVsdCB2YWx1ZXMgKi8KKyAgICBjb25zdCBwam1lZGlhX3ZpZF9jb2RlY19pbmZvICpjb2RlY19pbmZvOworICAgIHBqbWVkaWFfdmlkX2NvZGVjX3BhcmFtIGNvZGVjX3BhcmFtOworICAgIHBqbWVkaWFfZGlyIGRpciA9IFBKTUVESUFfRElSX0RFQ09ESU5HOworICAgIHBqX3NvY2thZGRyX2luIHJlbW90ZV9hZGRyOworICAgIHBqX3VpbnQxNl90IGxvY2FsX3BvcnQgPSA0MDAwOworICAgIGNoYXIgKmNvZGVjX2lkID0gTlVMTDsKKyAgICBwam1lZGlhX3JlY3Rfc2l6ZSB0eF9zaXplID0gezB9OworICAgIHBqX2ludDhfdCByeF9wdCA9IC0xLCB0eF9wdCA9IC0xOworCisgICAgcGxheV9maWxlX2RhdGEgcGxheV9maWxlID0geyBOVUxMIH07CisgICAgcGptZWRpYV9wb3J0ICpwbGF5X3BvcnQgPSBOVUxMOworICAgIHBqbWVkaWFfdmlkX2NvZGVjICpwbGF5X2RlY29kZXIgPSBOVUxMOworICAgIHBqbWVkaWFfY2xvY2sgKnBsYXlfY2xvY2sgPSBOVUxMOworCisgICAgZW51bSB7CisJT1BUX0NPREVDCT0gJ2MnLAorCU9QVF9MT0NBTF9QT1JUCT0gJ3AnLAorCU9QVF9SRU1PVEUJPSAncicsCisJT1BUX1BMQVlfRklMRQk9ICdmJywKKwlPUFRfU0VORF9SRUNWCT0gJ2InLAorCU9QVF9TRU5EX09OTFkJPSAncycsCisJT1BUX1JFQ1ZfT05MWQk9ICdpJywKKwlPUFRfU0VORF9XSURUSAk9ICdXJywKKwlPUFRfU0VORF9IRUlHSFQJPSAnSCcsCisJT1BUX1JFQ1ZfUFQJPSAndCcsCisJT1BUX1NFTkRfUFQJPSAnVCcsCisjaWYgZGVmaW5lZChQSk1FRElBX0hBU19TUlRQKSAmJiAoUEpNRURJQV9IQVNfU1JUUCAhPSAwKQorCU9QVF9VU0VfU1JUUAk9ICdTJywKKyNlbmRpZgorCU9QVF9TUlRQX1RYX0tFWQk9ICd4JywKKwlPUFRfU1JUUF9SWF9LRVkJPSAneScsCisJT1BUX0hFTFAJPSAnaCcsCisgICAgfTsKKworICAgIHN0cnVjdCBwal9nZXRvcHRfb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCXsgImNvZGVjIiwJICAgIDEsIDAsIE9QVF9DT0RFQyB9LAorCXsgImxvY2FsLXBvcnQiLAkgICAgMSwgMCwgT1BUX0xPQ0FMX1BPUlQgfSwKKwl7ICJyZW1vdGUiLAkgICAgMSwgMCwgT1BUX1JFTU9URSB9LAorCXsgInBsYXktZmlsZSIsCSAgICAxLCAwLCBPUFRfUExBWV9GSUxFIH0sCisJeyAic2VuZC1yZWN2IiwgICAgICAwLCAwLCBPUFRfU0VORF9SRUNWIH0sCisJeyAic2VuZC1vbmx5IiwgICAgICAwLCAwLCBPUFRfU0VORF9PTkxZIH0sCisJeyAicmVjdi1vbmx5IiwgICAgICAwLCAwLCBPUFRfUkVDVl9PTkxZIH0sCisJeyAic2VuZC13aWR0aCIsICAgICAxLCAwLCBPUFRfU0VORF9XSURUSCB9LAorCXsgInNlbmQtaGVpZ2h0IiwgICAgMSwgMCwgT1BUX1NFTkRfSEVJR0hUIH0sCisJeyAicmVjdi1wdCIsICAgICAgICAxLCAwLCBPUFRfUkVDVl9QVCB9LAorCXsgInNlbmQtcHQiLCAgICAgICAgMSwgMCwgT1BUX1NFTkRfUFQgfSwKKyNpZiBkZWZpbmVkKFBKTUVESUFfSEFTX1NSVFApICYmIChQSk1FRElBX0hBU19TUlRQICE9IDApCisJeyAidXNlLXNydHAiLAkgICAgMiwgMCwgT1BUX1VTRV9TUlRQIH0sCisJeyAic3J0cC10eC1rZXkiLCAgICAxLCAwLCBPUFRfU1JUUF9UWF9LRVkgfSwKKwl7ICJzcnRwLXJ4LWtleSIsICAgIDEsIDAsIE9QVF9TUlRQX1JYX0tFWSB9LAorI2VuZGlmCisJeyAiaGVscCIsCSAgICAwLCAwLCBPUFRfSEVMUCB9LAorCXsgTlVMTCwgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBpbnQgYzsKKyAgICBpbnQgb3B0aW9uX2luZGV4OworCisKKyAgICBwal9iemVybygmcmVtb3RlX2FkZHIsIHNpemVvZihyZW1vdGVfYWRkcikpOworCisKKyAgICAvKiBpbml0IFBKTElCIDogKi8KKyAgICBzdGF0dXMgPSBwal9pbml0KCk7CisgICAgUEpfQVNTRVJUX1JFVFVSTihzdGF0dXMgPT0gUEpfU1VDQ0VTUywgMSk7CisKKworICAgIC8qIFBhcnNlIGFyZ3VtZW50cyAqLworICAgIHBqX29wdGluZCA9IDA7CisgICAgd2hpbGUoKGM9cGpfZ2V0b3B0X2xvbmcoYXJnYyxhcmd2LCAiaCIsIGxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpIT0tMSkKKyAgICB7CisJc3dpdGNoIChjKSB7CisJY2FzZSBPUFRfQ09ERUM6CisJICAgIGNvZGVjX2lkID0gcGpfb3B0YXJnOworCSAgICBicmVhazsKKworCWNhc2UgT1BUX0xPQ0FMX1BPUlQ6CisJICAgIGxvY2FsX3BvcnQgPSAocGpfdWludDE2X3QpIGF0b2kocGpfb3B0YXJnKTsKKwkgICAgaWYgKGxvY2FsX3BvcnQgPCAxKSB7CisJCXByaW50ZigiRXJyb3I6IGludmFsaWQgbG9jYWwgcG9ydCAlc1xuIiwgcGpfb3B0YXJnKTsKKwkJcmV0dXJuIDE7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIE9QVF9SRU1PVEU6CisJICAgIHsKKwkJcGpfc3RyX3QgaXAgPSBwal9zdHIoc3RydG9rKHBqX29wdGFyZywgIjoiKSk7CisJCXBqX3VpbnQxNl90IHBvcnQgPSAocGpfdWludDE2X3QpIGF0b2koc3RydG9rKE5VTEwsICI6IikpOworCisJCXN0YXR1cyA9IHBqX3NvY2thZGRyX2luX2luaXQoJnJlbW90ZV9hZGRyLCAmaXAsIHBvcnQpOworCQlpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpIHsKKwkJICAgIGFwcF9wZXJyb3IoVEhJU19GSUxFLCAiSW52YWxpZCByZW1vdGUgYWRkcmVzcyIsIHN0YXR1cyk7CisJCSAgICByZXR1cm4gMTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBPUFRfUExBWV9GSUxFOgorCSAgICBwbGF5X2ZpbGUuZmlsZV9uYW1lID0gcGpfb3B0YXJnOworCSAgICBicmVhazsKKworCWNhc2UgT1BUX1NFTkRfUkVDVjoKKwkgICAgZGlyID0gUEpNRURJQV9ESVJfRU5DT0RJTkdfREVDT0RJTkc7CisJICAgIGJyZWFrOworCisJY2FzZSBPUFRfU0VORF9PTkxZOgorCSAgICBkaXIgPSBQSk1FRElBX0RJUl9FTkNPRElORzsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QVF9SRUNWX09OTFk6CisJICAgIGRpciA9IFBKTUVESUFfRElSX0RFQ09ESU5HOworCSAgICBicmVhazsKKworCWNhc2UgT1BUX1NFTkRfV0lEVEg6CisJICAgIHR4X3NpemUudyA9ICh1bnNpZ25lZClhdG9pKHBqX29wdGFyZyk7CisJICAgIGJyZWFrOworCisJY2FzZSBPUFRfU0VORF9IRUlHSFQ6CisJICAgIHR4X3NpemUuaCA9ICh1bnNpZ25lZClhdG9pKHBqX29wdGFyZyk7CisJICAgIGJyZWFrOworCisJY2FzZSBPUFRfUkVDVl9QVDoKKwkgICAgcnhfcHQgPSAocGpfaW50OF90KWF0b2kocGpfb3B0YXJnKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QVF9TRU5EX1BUOgorCSAgICB0eF9wdCA9IChwal9pbnQ4X3QpYXRvaShwal9vcHRhcmcpOworCSAgICBicmVhazsKKworI2lmIGRlZmluZWQoUEpNRURJQV9IQVNfU1JUUCkgJiYgKFBKTUVESUFfSEFTX1NSVFAgIT0gMCkKKwljYXNlIE9QVF9VU0VfU1JUUDoKKwkgICAgdXNlX3NydHAgPSBQSl9UUlVFOworCSAgICBpZiAocGpfb3B0YXJnKSB7CisJCXBqX3N0cnNldCgmc3J0cF9jcnlwdG9fc3VpdGUsIHBqX29wdGFyZywgc3RybGVuKHBqX29wdGFyZykpOworCSAgICB9IGVsc2UgeworCQlzcnRwX2NyeXB0b19zdWl0ZSA9IHBqX3N0cigiQUVTX0NNXzEyOF9ITUFDX1NIQTFfODAiKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgT1BUX1NSVFBfVFhfS0VZOgorCSAgICB0bXBfa2V5X2xlbiA9IGhleF9zdHJpbmdfdG9fb2N0ZXRfc3RyaW5nKHRtcF90eF9rZXksIHBqX29wdGFyZywgCisJCQkJCQkgICAgIChpbnQpc3RybGVuKHBqX29wdGFyZykpOworCSAgICBwal9zdHJzZXQoJnNydHBfdHhfa2V5LCB0bXBfdHhfa2V5LCB0bXBfa2V5X2xlbi8yKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE9QVF9TUlRQX1JYX0tFWToKKwkgICAgdG1wX2tleV9sZW4gPSBoZXhfc3RyaW5nX3RvX29jdGV0X3N0cmluZyh0bXBfcnhfa2V5LCBwal9vcHRhcmcsCisJCQkJCQkgICAgIChpbnQpc3RybGVuKHBqX29wdGFyZykpOworCSAgICBwal9zdHJzZXQoJnNydHBfcnhfa2V5LCB0bXBfcnhfa2V5LCB0bXBfa2V5X2xlbi8yKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgT1BUX0hFTFA6CisJICAgIHVzYWdlKCk7CisJICAgIHJldHVybiAxOworCisJZGVmYXVsdDoKKwkgICAgcHJpbnRmKCJJbnZhbGlkIG9wdGlvbnMgJXNcbiIsIGFyZ3ZbcGpfb3B0aW5kXSk7CisJICAgIHJldHVybiAxOworCX0KKworICAgIH0KKworCisgICAgLyogVmVyaWZ5IGFyZ3VtZW50cy4gKi8KKyAgICBpZiAoZGlyICYgUEpNRURJQV9ESVJfRU5DT0RJTkcpIHsKKwlpZiAocmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID09IDApIHsKKwkgICAgcHJpbnRmKCJFcnJvcjogcmVtb3RlIGFkZHJlc3MgbXVzdCBiZSBzZXRcbiIpOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorCisgICAgaWYgKHBsYXlfZmlsZS5maWxlX25hbWUgIT0gTlVMTCAmJiBkaXIgIT0gUEpNRURJQV9ESVJfRU5DT0RJTkcpIHsKKwlwcmludGYoIkRpcmVjdGlvbiBpcyBzZXQgdG8gLS1zZW5kLW9ubHkgYmVjYXVzZSBvZiAtLXBsYXktZmlsZVxuIik7CisJZGlyID0gUEpNRURJQV9ESVJfRU5DT0RJTkc7CisgICAgfQorCisjaWYgZGVmaW5lZChQSk1FRElBX0hBU19TUlRQKSAmJiAoUEpNRURJQV9IQVNfU1JUUCAhPSAwKQorICAgIC8qIFNSVFAgdmFsaWRhdGlvbiAqLworICAgIGlmICh1c2Vfc3J0cCkgeworCWlmICghc3J0cF90eF9rZXkuc2xlbiB8fCAhc3J0cF9yeF9rZXkuc2xlbikKKwl7CisJICAgIHByaW50ZigiRXJyb3I6IEtleSBmb3IgZWFjaCBTUlRQIHN0cmVhbSBkaXJlY3Rpb24gbXVzdCBiZSBzZXRcbiIpOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBNdXN0IGNyZWF0ZSBhIHBvb2wgZmFjdG9yeSBiZWZvcmUgd2UgY2FuIGFsbG9jYXRlIGFueSBtZW1vcnkuICovCisgICAgcGpfY2FjaGluZ19wb29sX2luaXQoJmNwLCAmcGpfcG9vbF9mYWN0b3J5X2RlZmF1bHRfcG9saWN5LCAwKTsKKworICAgIC8qIAorICAgICAqIEluaXRpYWxpemUgbWVkaWEgZW5kcG9pbnQuCisgICAgICogVGhpcyB3aWxsIGltcGxpY2l0bHkgaW5pdGlhbGl6ZSBQSk1FRElBIHRvby4KKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwam1lZGlhX2VuZHB0X2NyZWF0ZSgmY3AuZmFjdG9yeSwgTlVMTCwgMSwgJm1lZF9lbmRwdCk7CisgICAgUEpfQVNTRVJUX1JFVFVSTihzdGF0dXMgPT0gUEpfU1VDQ0VTUywgMSk7CisKKyAgICAvKiBDcmVhdGUgbWVtb3J5IHBvb2wgZm9yIGFwcGxpY2F0aW9uIHB1cnBvc2UgKi8KKyAgICBwb29sID0gcGpfcG9vbF9jcmVhdGUoICZjcC5mYWN0b3J5LAkgICAgLyogcG9vbCBmYWN0b3J5CSAgICAqLworCQkJICAgImFwcCIsCSAgICAvKiBwb29sIG5hbWUuCSAgICAqLworCQkJICAgNDAwMCwJICAgIC8qIGluaXQgc2l6ZQkgICAgKi8KKwkJCSAgIDQwMDAsCSAgICAvKiBpbmNyZW1lbnQgc2l6ZQkgICAgKi8KKwkJCSAgIE5VTEwJCSAgICAvKiBjYWxsYmFjayBvbiBlcnJvciAgICAqLworCQkJICAgKTsKKworICAgIC8qIEluaXQgdmlkZW8gZm9ybWF0IG1hbmFnZXIgKi8KKyAgICBwam1lZGlhX3ZpZGVvX2Zvcm1hdF9tZ3JfY3JlYXRlKHBvb2wsIDY0LCAwLCBOVUxMKTsKKworICAgIC8qIEluaXQgdmlkZW8gY29udmVydGVyIG1hbmFnZXIgKi8KKyAgICBwam1lZGlhX2NvbnZlcnRlcl9tZ3JfY3JlYXRlKHBvb2wsIE5VTEwpOworCisgICAgLyogSW5pdCBldmVudCBtYW5hZ2VyICovCisgICAgcGptZWRpYV9ldmVudF9tZ3JfY3JlYXRlKHBvb2wsIDAsIE5VTEwpOworCisgICAgLyogSW5pdCB2aWRlbyBjb2RlYyBtYW5hZ2VyICovCisgICAgcGptZWRpYV92aWRfY29kZWNfbWdyX2NyZWF0ZShwb29sLCBOVUxMKTsKKworICAgIC8qIEluaXQgdmlkZW8gc3Vic3lzdGVtICovCisgICAgcGptZWRpYV92aWRfZGV2X3N1YnN5c19pbml0KCZjcC5mYWN0b3J5KTsKKworICAgIC8qIFJlZ2lzdGVyIGFsbCBzdXBwb3J0ZWQgY29kZWNzICovCisgICAgc3RhdHVzID0gaW5pdF9jb2RlY3MoJmNwLmZhY3RvcnkpOworICAgIFBKX0FTU0VSVF9SRVRVUk4oc3RhdHVzID09IFBKX1NVQ0NFU1MsIDEpOworCisKKyAgICAvKiBGaW5kIHdoaWNoIGNvZGVjIHRvIHVzZS4gKi8KKyAgICBpZiAoY29kZWNfaWQpIHsKKwl1bnNpZ25lZCBjb3VudCA9IDE7CisJcGpfc3RyX3Qgc3RyX2NvZGVjX2lkID0gcGpfc3RyKGNvZGVjX2lkKTsKKworICAgICAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9jb2RlY19tZ3JfZmluZF9jb2RlY3NfYnlfaWQoTlVMTCwKKwkJCQkJCSAgICAgICAgICZzdHJfY29kZWNfaWQsICZjb3VudCwKKwkJCQkJCSAgICAgICAgICZjb2RlY19pbmZvLCBOVUxMKTsKKwlpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpIHsKKwkgICAgcHJpbnRmKCJFcnJvcjogdW5hYmxlIHRvIGZpbmQgY29kZWMgJXNcbiIsIGNvZGVjX2lkKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBwam1lZGlhX3ZpZF9jb2RlY19pbmZvIGluZm9bMV07CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gUEpfQVJSQVlfU0laRShpbmZvKTsKKworCS8qIERlZmF1bHQgdG8gZmlyc3QgY29kZWMgKi8KKwlwam1lZGlhX3ZpZF9jb2RlY19tZ3JfZW51bV9jb2RlY3MoTlVMTCwgJmNvdW50LCBpbmZvLCBOVUxMKTsKKyAgICAgICAgY29kZWNfaW5mbyA9ICZpbmZvWzBdOworICAgIH0KKworICAgIC8qIEdldCBjb2RlYyBkZWZhdWx0IHBhcmFtIGZvciBpbmZvICovCisgICAgc3RhdHVzID0gcGptZWRpYV92aWRfY29kZWNfbWdyX2dldF9kZWZhdWx0X3BhcmFtKE5VTEwsIGNvZGVjX2luZm8sIAorCQkJCSAgICAgICAgICAgICAgICAgICAgICZjb2RlY19wYXJhbSk7CisgICAgcGpfYXNzZXJ0KHN0YXR1cyA9PSBQSl9TVUNDRVNTKTsKKyAgICAKKyAgICAvKiBTZXQgb3V0Z29pbmcgdmlkZW8gc2l6ZSAqLworICAgIGlmICh0eF9zaXplLncgJiYgdHhfc2l6ZS5oKQorICAgICAgICBjb2RlY19wYXJhbS5lbmNfZm10LmRldC52aWQuc2l6ZSA9IHR4X3NpemU7CisKKyNpZiBERUZfUkVOREVSRVJfV0lEVEggJiYgREVGX1JFTkRFUkVSX0hFSUdIVAorICAgIC8qIFNldCBpbmNvbWluZyB2aWRlbyBzaXplICovCisgICAgaWYgKERFRl9SRU5ERVJFUl9XSURUSCA+IGNvZGVjX3BhcmFtLmRlY19mbXQuZGV0LnZpZC5zaXplLncpCisJY29kZWNfcGFyYW0uZGVjX2ZtdC5kZXQudmlkLnNpemUudyA9IERFRl9SRU5ERVJFUl9XSURUSDsKKyAgICBpZiAoREVGX1JFTkRFUkVSX0hFSUdIVCA+IGNvZGVjX3BhcmFtLmRlY19mbXQuZGV0LnZpZC5zaXplLmgpCisJY29kZWNfcGFyYW0uZGVjX2ZtdC5kZXQudmlkLnNpemUuaCA9IERFRl9SRU5ERVJFUl9IRUlHSFQ7CisjZW5kaWYKKworICAgIGlmIChwbGF5X2ZpbGUuZmlsZV9uYW1lKSB7CisJcGptZWRpYV92aWRlb19mb3JtYXRfZGV0YWlsICpmaWxlX3ZmZDsKKyAgICAgICAgcGptZWRpYV9jbG9ja19wYXJhbSBjbG9ja19wYXJhbTsKKyAgICAgICAgY2hhciBmbXRfbmFtZVs1XTsKKworCS8qIENyZWF0ZSBmaWxlIHBsYXllciAqLworCXN0YXR1cyA9IGNyZWF0ZV9maWxlX3BsYXllcihwb29sLCBwbGF5X2ZpbGUuZmlsZV9uYW1lLCAmcGxheV9wb3J0KTsKKwlpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJICAgIGdvdG8gb25fZXhpdDsKKworCS8qIENvbGxlY3QgZm9ybWF0IGluZm8gKi8KKwlmaWxlX3ZmZCA9IHBqbWVkaWFfZm9ybWF0X2dldF92aWRlb19mb3JtYXRfZGV0YWlsKCZwbGF5X3BvcnQtPmluZm8uZm10LAorCQkJCQkJCSAgUEpfVFJVRSk7CisJUEpfTE9HKDIsIChUSElTX0ZJTEUsICJSZWFkaW5nIHZpZGVvIHN0cmVhbSAlZHglZCAlcyBAJS4yZmZwcyIsCisJCSAgIGZpbGVfdmZkLT5zaXplLncsIGZpbGVfdmZkLT5zaXplLmgsCisJCSAgIHBqbWVkaWFfZm91cmNjX25hbWUocGxheV9wb3J0LT5pbmZvLmZtdC5pZCwgZm10X25hbWUpLAorCQkgICAoMS4wKmZpbGVfdmZkLT5mcHMubnVtL2ZpbGVfdmZkLT5mcHMuZGVudW0pKSk7CisKKwkvKiBBbGxvY2F0ZSBmaWxlIHJlYWQgYnVmZmVyICovCisJcGxheV9maWxlLnJlYWRfYnVmX3NpemUgPSBQSk1FRElBX01BWF9WSURFT19FTkNfRlJBTUVfU0laRTsKKwlwbGF5X2ZpbGUucmVhZF9idWYgPSBwal9wb29sX3phbGxvYyhwb29sLCBwbGF5X2ZpbGUucmVhZF9idWZfc2l6ZSk7CisKKwkvKiBDcmVhdGUgZGVjb2RlciwgaWYgdGhlIGZpbGUgYW5kIHRoZSBzdHJlYW0gdXNlcyBkaWZmZXJlbnQgY29kZWMgKi8KKwlpZiAoY29kZWNfaW5mby0+Zm10X2lkICE9IChwam1lZGlhX2Zvcm1hdF9pZClwbGF5X3BvcnQtPmluZm8uZm10LmlkKSB7CisJICAgIGNvbnN0IHBqbWVkaWFfdmlkZW9fZm9ybWF0X2luZm8gKmRlY192Zmk7CisJICAgIHBqbWVkaWFfdmlkZW9fYXBwbHlfZm10X3BhcmFtIGRlY192YWZwID0gezB9OworCSAgICBjb25zdCBwam1lZGlhX3ZpZF9jb2RlY19pbmZvICpjb2RlY19pbmZvMjsKKwkgICAgcGptZWRpYV92aWRfY29kZWNfcGFyYW0gY29kZWNfcGFyYW0yOworCisJICAgIC8qIEZpbmQgZGVjb2RlciAqLworCSAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9jb2RlY19tZ3JfZ2V0X2NvZGVjX2luZm8yKE5VTEwsCisJCQkJCQkJICAgcGxheV9wb3J0LT5pbmZvLmZtdC5pZCwKKwkJCQkJCQkgICAmY29kZWNfaW5mbzIpOworCSAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJCWdvdG8gb25fZXhpdDsKKworCSAgICAvKiBJbml0IGRlY29kZXIgKi8KKwkgICAgc3RhdHVzID0gcGptZWRpYV92aWRfY29kZWNfbWdyX2FsbG9jX2NvZGVjKE5VTEwsIGNvZGVjX2luZm8yLAorCQkJCQkJICAgICAgICZwbGF5X2RlY29kZXIpOworCSAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJCWdvdG8gb25fZXhpdDsKKworCSAgICBzdGF0dXMgPSBwbGF5X2RlY29kZXItPm9wLT5pbml0KHBsYXlfZGVjb2RlciwgcG9vbCk7CisJICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkJZ290byBvbl9leGl0OworCisJICAgIC8qIE9wZW4gZGVjb2RlciAqLworCSAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9jb2RlY19tZ3JfZ2V0X2RlZmF1bHRfcGFyYW0oTlVMTCwgY29kZWNfaW5mbzIsCisJCQkJCQkJICAgICAmY29kZWNfcGFyYW0yKTsKKwkgICAgaWYgKHN0YXR1cyAhPSBQSl9TVUNDRVNTKQorCQlnb3RvIG9uX2V4aXQ7CisKKwkgICAgY29kZWNfcGFyYW0yLmRpciA9IFBKTUVESUFfRElSX0RFQ09ESU5HOworCSAgICBzdGF0dXMgPSBwbGF5X2RlY29kZXItPm9wLT5vcGVuKHBsYXlfZGVjb2RlciwgJmNvZGVjX3BhcmFtMik7CisJICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkJZ290byBvbl9leGl0OworCisJICAgIC8qIEdldCBkZWNvZGVyIGZvcm1hdCBpbmZvIGFuZCBhcHBseSBwYXJhbSAqLworCSAgICBkZWNfdmZpID0gcGptZWRpYV9nZXRfdmlkZW9fZm9ybWF0X2luZm8oTlVMTCwKKwkJCQkJCSAgICBjb2RlY19pbmZvMi0+ZGVjX2ZtdF9pZFswXSk7CisJICAgIGlmICghZGVjX3ZmaSB8fCAhZGVjX3ZmaS0+YXBwbHlfZm10KSB7CisJCXN0YXR1cyA9IFBKX0VOT1RTVVA7CisJCWdvdG8gb25fZXhpdDsKKwkgICAgfQorCSAgICBkZWNfdmFmcC5zaXplID0gZmlsZV92ZmQtPnNpemU7CisJICAgICgqZGVjX3ZmaS0+YXBwbHlfZm10KShkZWNfdmZpLCAmZGVjX3ZhZnApOworCisJICAgIC8qIEFsbG9jYXRlIGJ1ZmZlciB0byByZWNlaXZlIGRlY29kZXIgb3V0cHV0ICovCisJICAgIHBsYXlfZmlsZS5kZWNfYnVmX3NpemUgPSBkZWNfdmFmcC5mcmFtZWJ5dGVzOworCSAgICBwbGF5X2ZpbGUuZGVjX2J1ZiA9IHBqX3Bvb2xfemFsbG9jKHBvb2wsIHBsYXlfZmlsZS5kZWNfYnVmX3NpemUpOworCX0KKworCS8qIENyZWF0ZSBwbGF5ZXIgY2xvY2sgKi8KKyAgICAgICAgY2xvY2tfcGFyYW0udXNlY19pbnRlcnZhbCA9IFBKTUVESUFfUFRJTUUoJmZpbGVfdmZkLT5mcHMpOworICAgICAgICBjbG9ja19wYXJhbS5jbG9ja19yYXRlID0gY29kZWNfaW5mby0+Y2xvY2tfcmF0ZTsKKwlzdGF0dXMgPSBwam1lZGlhX2Nsb2NrX2NyZWF0ZTIocG9vbCwgJmNsb2NrX3BhcmFtLAorCQkJCSAgICAgICBQSk1FRElBX0NMT0NLX05PX0hJR0hFU1RfUFJJTywKKwkJCQkgICAgICAgJmNsb2NrX2NiLCAmcGxheV9maWxlLCAmcGxheV9jbG9jayk7CisJaWYgKHN0YXR1cyAhPSBQSl9TVUNDRVNTKQorCSAgICBnb3RvIG9uX2V4aXQ7CisKKwkvKiBPdmVycmlkZSBzdHJlYW0gY29kZWMgcGFyYW0gZm9yIGVuY29kaW5nIGRpcmVjdGlvbiAqLworCWNvZGVjX3BhcmFtLmVuY19mbXQuZGV0LnZpZC5zaXplID0gZmlsZV92ZmQtPnNpemU7CisJY29kZWNfcGFyYW0uZW5jX2ZtdC5kZXQudmlkLmZwcyAgPSBmaWxlX3ZmZC0+ZnBzOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgcGptZWRpYV92aWRfcG9ydF9wYXJhbV9kZWZhdWx0KCZ2cHApOworCisgICAgICAgIC8qIFNldCBhcyBhY3RpdmUgZm9yIGFsbCB2aWRlbyBkZXZpY2VzICovCisgICAgICAgIHZwcC5hY3RpdmUgPSBQSl9UUlVFOworCisJLyogQ3JlYXRlIHZpZGVvIGRldmljZSBwb3J0LiAqLworICAgICAgICBpZiAoZGlyICYgUEpNRURJQV9ESVJfRU5DT0RJTkcpIHsKKyAgICAgICAgICAgIC8qIENyZWF0ZSBjYXB0dXJlICovCisgICAgICAgICAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9kZXZfZGVmYXVsdF9wYXJhbSgKKwkJCQkJcG9vbCwKKwkJCQkJUEpNRURJQV9WSURfREVGQVVMVF9DQVBUVVJFX0RFViwKKwkJCQkJJnZwcC52aWRwYXJhbSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJICAgICAgICBnb3RvIG9uX2V4aXQ7CisKKyAgICAgICAgICAgIHBqbWVkaWFfZm9ybWF0X2NvcHkoJnZwcC52aWRwYXJhbS5mbXQsICZjb2RlY19wYXJhbS5lbmNfZm10KTsKKwkgICAgdnBwLnZpZHBhcmFtLmZtdC5pZCA9IGNvZGVjX3BhcmFtLmRlY19mbXQuaWQ7CisgICAgICAgICAgICB2cHAudmlkcGFyYW0uZGlyID0gUEpNRURJQV9ESVJfQ0FQVFVSRTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdHVzID0gcGptZWRpYV92aWRfcG9ydF9jcmVhdGUocG9vbCwgJnZwcCwgJmNhcHR1cmUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBQSl9TVUNDRVNTKQorCSAgICAgICAgZ290byBvbl9leGl0OworICAgICAgICB9CisJCisgICAgICAgIGlmIChkaXIgJiBQSk1FRElBX0RJUl9ERUNPRElORykgeworICAgICAgICAgICAgLyogQ3JlYXRlIHJlbmRlcmVyICovCisgICAgICAgICAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9kZXZfZGVmYXVsdF9wYXJhbSgKKwkJCQkJcG9vbCwKKwkJCQkJUEpNRURJQV9WSURfREVGQVVMVF9SRU5ERVJfREVWLAorCQkJCQkmdnBwLnZpZHBhcmFtKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgICAgIGdvdG8gb25fZXhpdDsKKworICAgICAgICAgICAgcGptZWRpYV9mb3JtYXRfY29weSgmdnBwLnZpZHBhcmFtLmZtdCwgJmNvZGVjX3BhcmFtLmRlY19mbXQpOworICAgICAgICAgICAgdnBwLnZpZHBhcmFtLmRpciA9IFBKTUVESUFfRElSX1JFTkRFUjsKKyAgICAgICAgICAgIHZwcC52aWRwYXJhbS5kaXNwX3NpemUgPSB2cHAudmlkcGFyYW0uZm10LmRldC52aWQuc2l6ZTsKKwkgICAgdnBwLnZpZHBhcmFtLmZsYWdzIHw9IFBKTUVESUFfVklEX0RFVl9DQVBfT1VUUFVUX1dJTkRPV19GTEFHUzsKKwkgICAgdnBwLnZpZHBhcmFtLndpbmRvd19mbGFncyA9IFBKTUVESUFfVklEX0RFVl9XTkRfQk9SREVSIHwKKwkJCQkJUEpNRURJQV9WSURfREVWX1dORF9SRVNJWkFCTEU7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IHBqbWVkaWFfdmlkX3BvcnRfY3JlYXRlKHBvb2wsICZ2cHAsICZyZW5kZXJlcik7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJICAgICAgICBnb3RvIG9uX2V4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXQgdG8gaWdub3JlIGZtdHAgKi8KKyAgICBjb2RlY19wYXJhbS5pZ25vcmVfZm10cCA9IFBKX1RSVUU7CisKKyAgICAvKiBDcmVhdGUgc3RyZWFtIGJhc2VkIG9uIHByb2dyYW0gYXJndW1lbnRzICovCisgICAgc3RhdHVzID0gY3JlYXRlX3N0cmVhbShwb29sLCBtZWRfZW5kcHQsIGNvZGVjX2luZm8sICZjb2RlY19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciwgcnhfcHQsIHR4X3B0LCBsb2NhbF9wb3J0LCAmcmVtb3RlX2FkZHIsIAorI2lmIGRlZmluZWQoUEpNRURJQV9IQVNfU1JUUCkgJiYgKFBKTUVESUFfSEFTX1NSVFAgIT0gMCkKKwkJCSAgIHVzZV9zcnRwLCAmc3J0cF9jcnlwdG9fc3VpdGUsIAorCQkJICAgJnNydHBfdHhfa2V5LCAmc3J0cF9yeF9rZXksCisjZW5kaWYKKwkJCSAgICZzdHJlYW0pOworICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwlnb3RvIG9uX2V4aXQ7CisKKyAgICAvKiBHZXQgdGhlIHBvcnQgaW50ZXJmYWNlIG9mIHRoZSBzdHJlYW0gKi8KKyAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9zdHJlYW1fZ2V0X3BvcnQoc3RyZWFtLCBQSk1FRElBX0RJUl9FTkNPRElORywKKwkJCQkgICAgICAgICAmZW5jX3BvcnQpOworICAgIFBKX0FTU0VSVF9SRVRVUk4oc3RhdHVzID09IFBKX1NVQ0NFU1MsIDEpOworCisgICAgc3RhdHVzID0gcGptZWRpYV92aWRfc3RyZWFtX2dldF9wb3J0KHN0cmVhbSwgUEpNRURJQV9ESVJfREVDT0RJTkcsCisJCQkJICAgICAgICAgJmRlY19wb3J0KTsKKyAgICBQSl9BU1NFUlRfUkVUVVJOKHN0YXR1cyA9PSBQSl9TVUNDRVNTLCAxKTsKKworICAgIC8qIFN0YXJ0IHN0cmVhbWluZyAqLworICAgIHN0YXR1cyA9IHBqbWVkaWFfdmlkX3N0cmVhbV9zdGFydChzdHJlYW0pOworICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKyAgICAgICAgZ290byBvbl9leGl0OworCisgICAgLyogU3RhcnQgcmVuZGVyZXIgKi8KKyAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgc3RhdHVzID0gcGptZWRpYV92aWRfcG9ydF9jb25uZWN0KHJlbmRlcmVyLCBkZWNfcG9ydCwgUEpfRkFMU0UpOworICAgICAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisJICAgIGdvdG8gb25fZXhpdDsKKyAgICAgICAgc3RhdHVzID0gcGptZWRpYV92aWRfcG9ydF9zdGFydChyZW5kZXJlcik7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKyAgICAgICAgICAgIGdvdG8gb25fZXhpdDsKKyAgICB9CisKKyAgICAvKiBTdGFydCBjYXB0dXJlICovCisgICAgaWYgKGNhcHR1cmUpIHsKKyAgICAgICAgc3RhdHVzID0gcGptZWRpYV92aWRfcG9ydF9jb25uZWN0KGNhcHR1cmUsIGVuY19wb3J0LCBQSl9GQUxTRSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgZ290byBvbl9leGl0OworICAgICAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9wb3J0X3N0YXJ0KGNhcHR1cmUpOworICAgICAgICBpZiAoc3RhdHVzICE9IFBKX1NVQ0NFU1MpCisgICAgICAgICAgICBnb3RvIG9uX2V4aXQ7CisgICAgfQorCisgICAgLyogU3RhcnQgcGxheWluZyBmaWxlICovCisgICAgaWYgKHBsYXlfZmlsZS5maWxlX25hbWUpIHsKKworI2lmIEhBU19MT0NBTF9SRU5ERVJFUl9GT1JfUExBWV9GSUxFCisgICAgICAgIC8qIENyZWF0ZSBsb2NhbCByZW5kZXJlciAqLworICAgICAgICBwam1lZGlhX3ZpZF9wb3J0X3BhcmFtX2RlZmF1bHQoJnZwcCk7CisgICAgICAgIHZwcC5hY3RpdmUgPSBQSl9GQUxTRTsKKyAgICAgICAgc3RhdHVzID0gcGptZWRpYV92aWRfZGV2X2RlZmF1bHRfcGFyYW0oCisJCQkJcG9vbCwKKwkJCQlQSk1FRElBX1ZJRF9ERUZBVUxUX1JFTkRFUl9ERVYsCisJCQkJJnZwcC52aWRwYXJhbSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgZ290byBvbl9leGl0OworCisgICAgICAgIHZwcC52aWRwYXJhbS5kaXIgPSBQSk1FRElBX0RJUl9SRU5ERVI7CisgICAgICAgIHBqbWVkaWFfZm9ybWF0X2NvcHkoJnZwcC52aWRwYXJhbS5mbXQsICZjb2RlY19wYXJhbS5kZWNfZm10KTsKKwl2cHAudmlkcGFyYW0uZm10LmRldC52aWQuc2l6ZSA9IHBsYXlfcG9ydC0+aW5mby5mbXQuZGV0LnZpZC5zaXplOworCXZwcC52aWRwYXJhbS5mbXQuZGV0LnZpZC5mcHMgPSBwbGF5X3BvcnQtPmluZm8uZm10LmRldC52aWQuZnBzOworICAgICAgICB2cHAudmlkcGFyYW0uZGlzcF9zaXplID0gdnBwLnZpZHBhcmFtLmZtdC5kZXQudmlkLnNpemU7CisJdnBwLnZpZHBhcmFtLmZsYWdzIHw9IFBKTUVESUFfVklEX0RFVl9DQVBfT1VUUFVUX1dJTkRPV19GTEFHUzsKKwl2cHAudmlkcGFyYW0ud2luZG93X2ZsYWdzID0gUEpNRURJQV9WSURfREVWX1dORF9CT1JERVIgfAorCQkJCSAgICBQSk1FRElBX1ZJRF9ERVZfV05EX1JFU0laQUJMRTsKKworCXN0YXR1cyA9IHBqbWVkaWFfdmlkX3BvcnRfY3JlYXRlKHBvb2wsICZ2cHAsICZyZW5kZXJlcik7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgZ290byBvbl9leGl0OworICAgICAgICBzdGF0dXMgPSBwam1lZGlhX3ZpZF9wb3J0X3N0YXJ0KHJlbmRlcmVyKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQSl9TVUNDRVNTKQorICAgICAgICAgICAgZ290byBvbl9leGl0OworI2VuZGlmCisKKwkvKiBJbml0IHBsYXkgZmlsZSBkYXRhICovCisJcGxheV9maWxlLnBsYXlfcG9ydCA9IHBsYXlfcG9ydDsKKwlwbGF5X2ZpbGUuc3RyZWFtX3BvcnQgPSBlbmNfcG9ydDsKKwlwbGF5X2ZpbGUuZGVjb2RlciA9IHBsYXlfZGVjb2RlcjsKKwlpZiAocmVuZGVyZXIpIHsKKwkgICAgcGxheV9maWxlLnJlbmRlcmVyID0gcGptZWRpYV92aWRfcG9ydF9nZXRfcGFzc2l2ZV9wb3J0KHJlbmRlcmVyKTsKKwl9CisKKwlzdGF0dXMgPSBwam1lZGlhX2Nsb2NrX3N0YXJ0KHBsYXlfY2xvY2spOworCWlmIChzdGF0dXMgIT0gUEpfU1VDQ0VTUykKKwkgICAgZ290byBvbl9leGl0OworICAgIH0KKworICAgIC8qIERvbmUgKi8KKworICAgIGlmIChkaXIgPT0gUEpNRURJQV9ESVJfREVDT0RJTkcpCisJcHJpbnRmKCJTdHJlYW0gaXMgYWN0aXZlLCBkaXIgaXMgcmVjdi1vbmx5LCBsb2NhbCBwb3J0IGlzICVkXG4iLAorCSAgICAgICBsb2NhbF9wb3J0KTsKKyAgICBlbHNlIGlmIChkaXIgPT0gUEpNRURJQV9ESVJfRU5DT0RJTkcpCisJcHJpbnRmKCJTdHJlYW0gaXMgYWN0aXZlLCBkaXIgaXMgc2VuZC1vbmx5LCBzZW5kaW5nIHRvICVzOiVkXG4iLAorCSAgICAgICBwal9pbmV0X250b2EocmVtb3RlX2FkZHIuc2luX2FkZHIpLAorCSAgICAgICBwal9udG9ocyhyZW1vdGVfYWRkci5zaW5fcG9ydCkpOworICAgIGVsc2UKKwlwcmludGYoIlN0cmVhbSBpcyBhY3RpdmUsIHNlbmQvcmVjdiwgbG9jYWwgcG9ydCBpcyAlZCwgIgorCSAgICAgICAic2VuZGluZyB0byAlczolZFxuIiwKKwkgICAgICAgbG9jYWxfcG9ydCwKKwkgICAgICAgcGpfaW5ldF9udG9hKHJlbW90ZV9hZGRyLnNpbl9hZGRyKSwKKwkgICAgICAgcGpfbnRvaHMocmVtb3RlX2FkZHIuc2luX3BvcnQpKTsKKworICAgIGlmIChkaXIgJiBQSk1FRElBX0RJUl9FTkNPRElORykKKwlQSl9MT0coMiwgKFRISVNfRklMRSwgIlNlbmRpbmcgJWR4JWQgJS4qcyBAJS4yZmZwcyIsCisJCSAgIGNvZGVjX3BhcmFtLmVuY19mbXQuZGV0LnZpZC5zaXplLncsCisJCSAgIGNvZGVjX3BhcmFtLmVuY19mbXQuZGV0LnZpZC5zaXplLmgsCisJCSAgIGNvZGVjX2luZm8tPmVuY29kaW5nX25hbWUuc2xlbiwKKwkJICAgY29kZWNfaW5mby0+ZW5jb2RpbmdfbmFtZS5wdHIsCisJCSAgICgxLjAqY29kZWNfcGFyYW0uZW5jX2ZtdC5kZXQudmlkLmZwcy5udW0vCisJCSAgICBjb2RlY19wYXJhbS5lbmNfZm10LmRldC52aWQuZnBzLmRlbnVtKSkpOworCisgICAgZm9yICg7OykgeworCWNoYXIgdG1wWzEwXTsKKworCXB1dHMoIiIpOworCXB1dHMoIkNvbW1hbmRzOiIpOworCXB1dHMoIiAgcSAgICAgUXVpdCIpOworCXB1dHMoIiIpOworCisJcHJpbnRmKCJDb21tYW5kOiAiKTsgZmZsdXNoKHN0ZG91dCk7CisKKwlpZiAoZmdldHModG1wLCBzaXplb2YodG1wKSwgc3RkaW4pID09IE5VTEwpIHsKKwkgICAgcHV0cygiRU9GIHdoaWxlIHJlYWRpbmcgc3RkaW4sIHdpbGwgcXVpdCBub3cuLiIpOworCSAgICBicmVhazsKKwl9CisKKwlpZiAodG1wWzBdID09ICdxJykKKwkgICAgYnJlYWs7CisKKyAgICB9CisKKworCisgICAgLyogU3RhcnQgZGVpbml0aWFsaXphdGlvbjogKi8KK29uX2V4aXQ6CisKKyAgICAvKiBTdG9wIHZpZGVvIGRldmljZXMgKi8KKyAgICBpZiAoY2FwdHVyZSkKKyAgICAgICAgcGptZWRpYV92aWRfcG9ydF9zdG9wKGNhcHR1cmUpOworICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgcGptZWRpYV92aWRfcG9ydF9zdG9wKHJlbmRlcmVyKTsKKworICAgIC8qIFN0b3AgYW5kIGRlc3Ryb3kgZmlsZSBjbG9jayAqLworICAgIGlmIChwbGF5X2Nsb2NrKSB7CisJcGptZWRpYV9jbG9ja19zdG9wKHBsYXlfY2xvY2spOworCXBqbWVkaWFfY2xvY2tfZGVzdHJveShwbGF5X2Nsb2NrKTsKKyAgICB9CisKKyAgICAvKiBEZXN0cm95IGZpbGUgcmVhZGVyL3BsYXllciAqLworICAgIGlmIChwbGF5X3BvcnQpCisJcGptZWRpYV9wb3J0X2Rlc3Ryb3kocGxheV9wb3J0KTsKKworICAgIC8qIERlc3Ryb3kgZmlsZSBkZWNvZGVyICovCisgICAgaWYgKHBsYXlfZGVjb2RlcikgeworCXBsYXlfZGVjb2Rlci0+b3AtPmNsb3NlKHBsYXlfZGVjb2Rlcik7CisJcGptZWRpYV92aWRfY29kZWNfbWdyX2RlYWxsb2NfY29kZWMoTlVMTCwgcGxheV9kZWNvZGVyKTsKKyAgICB9CisKKyAgICAvKiBEZXN0cm95IHZpZGVvIGRldmljZXMgKi8KKyAgICBpZiAoY2FwdHVyZSkKKwlwam1lZGlhX3ZpZF9wb3J0X2Rlc3Ryb3koY2FwdHVyZSk7CisgICAgaWYgKHJlbmRlcmVyKQorCXBqbWVkaWFfdmlkX3BvcnRfZGVzdHJveShyZW5kZXJlcik7CisKKyAgICAvKiBEZXN0cm95IHN0cmVhbSAqLworICAgIGlmIChzdHJlYW0pIHsKKwlwam1lZGlhX3RyYW5zcG9ydCAqdHA7CisKKwl0cCA9IHBqbWVkaWFfdmlkX3N0cmVhbV9nZXRfdHJhbnNwb3J0KHN0cmVhbSk7CisJcGptZWRpYV92aWRfc3RyZWFtX2Rlc3Ryb3koc3RyZWFtKTsKKwkKKwlwam1lZGlhX3RyYW5zcG9ydF9jbG9zZSh0cCk7CisgICAgfQorCisgICAgLyogRGVpbml0IGNvZGVjcyAqLworICAgIGRlaW5pdF9jb2RlY3MoKTsKKworICAgIC8qIFNodXRkb3duIHZpZGVvIHN1YnN5c3RlbSAqLworICAgIHBqbWVkaWFfdmlkX2Rldl9zdWJzeXNfc2h1dGRvd24oKTsKKworICAgIC8qIERlc3Ryb3kgZXZlbnQgbWFuYWdlciAqLworICAgIHBqbWVkaWFfZXZlbnRfbWdyX2Rlc3Ryb3koTlVMTCk7CisKKyAgICAvKiBSZWxlYXNlIGFwcGxpY2F0aW9uIHBvb2wgKi8KKyAgICBwal9wb29sX3JlbGVhc2UoIHBvb2wgKTsKKworICAgIC8qIERlc3Ryb3kgbWVkaWEgZW5kcG9pbnQuICovCisgICAgcGptZWRpYV9lbmRwdF9kZXN0cm95KCBtZWRfZW5kcHQgKTsKKworICAgIC8qIERlc3Ryb3kgcG9vbCBmYWN0b3J5ICovCisgICAgcGpfY2FjaGluZ19wb29sX2Rlc3Ryb3koICZjcCApOworCisgICAgLyogU2h1dGRvd24gUEpMSUIgKi8KKyAgICBwal9zaHV0ZG93bigpOworCisgICAgcmV0dXJuIChzdGF0dXMgPT0gUEpfU1VDQ0VTUykgPyAwIDogMTsKK30KKworCisjZWxzZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFBKX1VOVVNFRF9BUkcoYXJnYyk7CisgICAgUEpfVU5VU0VEX0FSRyhhcmd2KTsKKyAgICBwdXRzKCJFcnJvcjogdGhpcyBzYW1wbGUgcmVxdWlyZXMgdmlkZW8gY2FwYWJpbGl0eSAoUEpNRURJQV9IQVNfVklERU8gPT0gMSkiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKyNlbmRpZiAvKiBQSk1FRElBX0hBU19WSURFTyAqLwpkaWZmIC0tZ2l0IGEvam5pL3BqcHJvamVjdC1hbmRyb2lkLy5zdm4vcHJpc3RpbmUvMjYvMjY1MTIyYzAxZDRkZWRhMzA4ZDhmM2I0MWQ1YzcxYzZjYjNlNDI5Mi5zdm4tYmFzZSBiL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2NTEyMmMwMWQ0ZGVkYTMwOGQ4ZjNiNDFkNWM3MWM2Y2IzZTQyOTIuc3ZuLWJhc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlMGFlNwotLS0gL2Rldi9udWxsCisrKyBiL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2NTEyMmMwMWQ0ZGVkYTMwOGQ4ZjNiNDFkNWM3MWM2Y2IzZTQyOTIuc3ZuLWJhc2UKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uLy4uLy4uL3BvcnRhdWRpby9pbmNsdWRlL3BhX2xpbnV4X2Fsc2EuaCIKZGlmZiAtLWdpdCBhL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2Njk4NzNmODkxMTEzYThmNDU1MDZlODI1ZDAyMTUzMDZlOTU0MDUuc3ZuLWJhc2UgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNjY5ODczZjg5MTExM2E4ZjQ1NTA2ZTgyNWQwMjE1MzA2ZTk1NDA1LnN2bi1iYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZmUxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNjY5ODczZjg5MTExM2E4ZjQ1NTA2ZTgyNWQwMjE1MzA2ZTk1NDA1LnN2bi1iYXNlCkBAIC0wLDAgKzEsMjAgQEAKKyMgVG8gZW5hYmxlIFByb0d1YXJkIGluIHlvdXIgcHJvamVjdCwgZWRpdCBwcm9qZWN0LnByb3BlcnRpZXMKKyMgdG8gZGVmaW5lIHRoZSBwcm9ndWFyZC5jb25maWcgcHJvcGVydHkgYXMgZGVzY3JpYmVkIGluIHRoYXQgZmlsZS4KKyMKKyMgQWRkIHByb2plY3Qgc3BlY2lmaWMgUHJvR3VhcmQgcnVsZXMgaGVyZS4KKyMgQnkgZGVmYXVsdCwgdGhlIGZsYWdzIGluIHRoaXMgZmlsZSBhcmUgYXBwZW5kZWQgdG8gZmxhZ3Mgc3BlY2lmaWVkCisjIGluICR7c2RrLmRpcn0vdG9vbHMvcHJvZ3VhcmQvcHJvZ3VhcmQtYW5kcm9pZC50eHQKKyMgWW91IGNhbiBlZGl0IHRoZSBpbmNsdWRlIHBhdGggYW5kIG9yZGVyIGJ5IGNoYW5naW5nIHRoZSBQcm9HdWFyZAorIyBpbmNsdWRlIHByb3BlcnR5IGluIHByb2plY3QucHJvcGVydGllcy4KKyMKKyMgRm9yIG1vcmUgZGV0YWlscywgc2VlCisjICAgaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9ndWlkZS9kZXZlbG9waW5nL3Rvb2xzL3Byb2d1YXJkLmh0bWwKKworIyBBZGQgYW55IHByb2plY3Qgc3BlY2lmaWMga2VlcCBvcHRpb25zIGhlcmU6CisKKyMgSWYgeW91ciBwcm9qZWN0IHVzZXMgV2ViVmlldyB3aXRoIEpTLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZworIyBhbmQgc3BlY2lmeSB0aGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgdG8gdGhlIEphdmFTY3JpcHQgaW50ZXJmYWNlCisjIGNsYXNzOgorIy1rZWVwY2xhc3NtZW1iZXJzIGNsYXNzIGZxY24ub2YuamF2YXNjcmlwdC5pbnRlcmZhY2UuZm9yLndlYnZpZXcgeworIyAgIHB1YmxpYyAqOworI30KZGlmZiAtLWdpdCBhL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2YmNjNzM2Njk1ZTQ3MTk2ZTE3Nzg2Y2RiMDA3NmRkZTM2NzFjMWYuc3ZuLWJhc2UgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNmJjYzczNjY5NWU0NzE5NmUxNzc4NmNkYjAwNzZkZGUzNjcxYzFmLnN2bi1iYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTVhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNmJjYzczNjY5NWU0NzE5NmUxNzc4NmNkYjAwNzZkZGUzNjcxYzFmLnN2bi1iYXNlCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogeGZtLmMKKyAqCisgKiBDcnlwdG8gdHJhbnNmb3JtIGltcGxlbWVudGF0aW9uCisgKgorICogRGF2aWQgQS4gTWNHcmV3CisgKiBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKi8KKworI2luY2x1ZGUgImNyeXB0b2FsZy5oIgorI2luY2x1ZGUgImFlc19jYmMuaCIKKyNpbmNsdWRlICJobWFjLmgiCisjaW5jbHVkZSAiY3J5cHRvX2tlcm5lbC5oIiAgIC8qIGZvciBjcnlwdG9fZ2V0X3JhbmRvbSgpICovCisKKyNkZWZpbmUgS0VZX0xFTiAgICAgMTYKKyNkZWZpbmUgRU5DX0tFWV9MRU4gMTYKKyNkZWZpbmUgTUFDX0tFWV9MRU4gMTYKKyNkZWZpbmUgSVZfTEVOICAgICAgMTYKKyNkZWZpbmUgVEFHX0xFTiAgICAgMTIKKyNkZWZpbmUgTUFYX0VYUEFORCAgMjcKKworZXJyX3N0YXR1c190CithZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZnVuYyh2b2lkICprZXksICAgICAgICAgICAgCisJCQkgICAgICB2b2lkICpjbGVhciwgICAgICAgICAgCisJCQkgICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgICAgIAorCQkJICAgICAgdm9pZCAqaXYsICAgICAgICAgICAgIAorCQkJICAgICAgdm9pZCAqb3BhcXVlLCAgICAgICAgIAorCQkJICAgICAgdW5zaWduZWQgKm9wYXF1ZV9sZW4sIAorCQkJICAgICAgdm9pZCAqYXV0aF90YWcpIHsKKyAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OworICBobWFjX2N0eF90IGhtYWNfY3R4OworICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOworICBlcnJfc3RhdHVzX3Qgc3RhdHVzOworCisgIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKyAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgICAKKyAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLworCisgIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKKyAgICAKKyAgICAvKgorICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAorICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKKyAgICAgKi8KKyAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOworCisgIH0gZWxzZSB7CisKKyAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KKyAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisgICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworCisgICAgLyogcGVyZm9ybSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiAqLworCisgICAgLyogc2V0IGFlcyBrZXkgKi8KKyAgICBzdGF0dXMgPSBhZXNfY2JjX2NvbnRleHRfaW5pdCgmYWVzX2N0eCwga2V5LCBkaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIHNldCBpdiAqLworICAgIHN0YXR1cyA9IGNyeXB0b19nZXRfcmFuZG9tKGl2LCBJVl9MRU4pOyAgCisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsgCisgICAgc3RhdHVzID0gYWVzX2NiY19zZXRfaXYoJmFlc19jdHgsIGl2KTsKKyAgICAKKyAgICAvKiBlbmNyeXB0IHRoZSBvcGFxdWUgZGF0YSAgKi8KKyAgICBzdGF0dXMgPSBhZXNfY2JjX25pc3RfZW5jcnlwdCgmYWVzX2N0eCwgb3BhcXVlLCBvcGFxdWVfbGVuKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgLyogYXV0aGVudGljYXRlIGNsZWFyIGFuZCBvcGFxdWUgZGF0YSAqLworICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIG1hY19rZXksIE1BQ19LRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19zdGFydCgmaG1hY19jdHgpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX3VwZGF0ZSgmaG1hY19jdHgsIGNsZWFyLCBjbGVhcl9sZW4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCBvcGFxdWUsICpvcGFxdWVfbGVuLCBUQUdfTEVOLCBhdXRoX3RhZyk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICB9CisKKyAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Cit9CisKK2Vycl9zdGF0dXNfdAorYWVzXzEyOF9jYmNfaG1hY19zaGExXzk2X2ludih2b2lkICprZXksICAgICAgICAgICAgCisJCQkgICAgIHZvaWQgKmNsZWFyLCAgICAgICAgICAKKwkJCSAgICAgdW5zaWduZWQgY2xlYXJfbGVuLCAgICAgICAKKwkJCSAgICAgdm9pZCAqaXYsICAgICAgICAgICAgIAorCQkJICAgICB2b2lkICpvcGFxdWUsICAgICAgICAgCisJCQkgICAgIHVuc2lnbmVkICpvcGFxdWVfbGVuLCAKKwkJCSAgICAgdm9pZCAqYXV0aF90YWcpIHsKKyAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OworICBobWFjX2N0eF90IGhtYWNfY3R4OworICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIHRtcF90YWdbVEFHX0xFTl07CisgIHVuc2lnbmVkIGNoYXIgKnRhZyA9IGF1dGhfdGFnOworICBlcnJfc3RhdHVzX3Qgc3RhdHVzOworICBpbnQgaTsKKyAgCisgIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKyAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgICAKKyAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLworCisgIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKKyAgICAKKyAgICAvKgorICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAorICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKKyAgICAgKi8KKyAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOworCisgIH0gZWxzZSB7CisKKyAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KKyAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisgICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIHBlcmZvcm0gZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24gKi8KKworICAgIC8qIHNldCBhZXMga2V5ICovCisgICAgc3RhdHVzID0gYWVzX2NiY19jb250ZXh0X2luaXQoJmFlc19jdHgsIGtleSwgZGlyZWN0aW9uX2RlY3J5cHQpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBzZXQgaXYgKi8KKyAgICBzdGF0dXMgPSByYW5kX3NvdXJjZV9nZXRfb2N0ZXRfc3RyaW5nKGl2LCBJVl9MRU4pOyAgCisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsgCisgICAgc3RhdHVzID0gYWVzX2NiY19zZXRfaXYoJmFlc19jdHgsIGl2KTsKKyAgICAKKyAgICAvKiBlbmNyeXB0IHRoZSBvcGFxdWUgZGF0YSAgKi8KKyAgICBzdGF0dXMgPSBhZXNfY2JjX25pc3RfZGVjcnlwdCgmYWVzX2N0eCwgb3BhcXVlLCBvcGFxdWVfbGVuKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgLyogYXV0aGVudGljYXRlIGNsZWFyIGFuZCBvcGFxdWUgZGF0YSAqLworICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIG1hY19rZXksIE1BQ19LRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19zdGFydCgmaG1hY19jdHgpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX3VwZGF0ZSgmaG1hY19jdHgsIGNsZWFyLCBjbGVhcl9sZW4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCBvcGFxdWUsICpvcGFxdWVfbGVuLCBUQUdfTEVOLCB0bXBfdGFnKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgLyogY29tcGFyZSB0aGUgY29tcHV0ZWQgdGFnIHdpdGggdGhlIG9uZSBwcm92aWRlZCBhcyBpbnB1dCAqLworICAgIGZvciAoaT0wOyBpIDwgVEFHX0xFTjsgaSsrKQorICAgICAgaWYgKHRtcF90YWdbaV0gIT0gdGFnW2ldKSAKKwlyZXR1cm4gZXJyX3N0YXR1c19hdXRoX2ZhaWw7IAorCisgIH0KKworICByZXR1cm4gZXJyX3N0YXR1c19vazsKK30KKworCisjZGVmaW5lIEVOQyAxCisNCisvLyBlVkM0IGRlY2xhcmVzIERFQlVHDQorI3VuZGVmIERFQlVHDQorCisjZGVmaW5lIERFQlVHIDAKKworZXJyX3N0YXR1c190CithZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZW5jKHZvaWQgKmtleSwgICAgICAgICAgICAKKwkJCSAgICAgY29uc3Qgdm9pZCAqY2xlYXIsICAgICAgICAgIAorCQkJICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgICAgIAorCQkJICAgICB2b2lkICppdiwgICAgICAgICAgICAgCisJCQkgICAgIHZvaWQgKm9wYXF1ZSwgICAgICAgICAKKwkJCSAgICAgdW5zaWduZWQgKm9wYXF1ZV9sZW4pIHsKKyAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OworICBobWFjX2N0eF90IGhtYWNfY3R4OworICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyICphdXRoX3RhZzsKKyAgZXJyX3N0YXR1c190IHN0YXR1czsKKworICAvKiBjaGVjayBpZiB3ZSdyZSBkb2luZyBhdXRoZW50aWNhdGlvbiBvbmx5ICovCisgIGlmICgoaXYgPT0gTlVMTCkgJiYgKG9wYXF1ZSA9PSBOVUxMKSAmJiAob3BhcXVlX2xlbiA9PSBOVUxMKSkgeworICAgICAgCisgICAgICAvKiBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKworICB9IGVsc2UgaWYgKChpdiA9PSBOVUxMKSB8fCAob3BhcXVlID09IE5VTEwpIHx8IChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgCisgICAgLyoKKyAgICAgKiBiYWQgcGFyYW1ldGVyIC0gd2UgZXhwZWN0IGVpdGhlciBhbGwgdGhyZWUgcG9pbnRlcnMgdG8gYmUgTlVMTCwKKyAgICAgKiBvciBub25lIG9mIHRob3NlIHBvaW50ZXJzIHRvIGJlIE5VTEwgCisgICAgICovCisgICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKKworICB9IGVsc2UgeworCisjaWYgREVCVUcKKyAgICBwcmludGYoIkVOQyB1c2luZyBrZXkgJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGtleSwgS0VZX0xFTikpOworI2VuZGlmCisKKyAgICAvKiBkZXJpdmUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24ga2V5cyBmcm9tIHRoZSBpbnB1dCBrZXkgKi8KKyAgICBzdGF0dXMgPSBobWFjX2luaXQoJmhtYWNfY3R4LCBrZXksIEtFWV9MRU4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisgICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgIkVOQyIsIDMsIEVOQ19LRVlfTEVOLCBlbmNfa2V5KTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJNQUMiLCAzLCBNQUNfS0VZX0xFTiwgbWFjX2tleSk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworCisgICAgLyogcGVyZm9ybSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiAqLworCisgICAgLyogc2V0IGFlcyBrZXkgKi8KKyAgICBzdGF0dXMgPSBhZXNfY2JjX2NvbnRleHRfaW5pdCgmYWVzX2N0eCwga2V5LCBkaXJlY3Rpb25fZW5jcnlwdCk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIHNldCBpdiAqLworICAgIHN0YXR1cyA9IHJhbmRfc291cmNlX2dldF9vY3RldF9zdHJpbmcoaXYsIElWX0xFTik7ICAKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOyAKKyAgICBzdGF0dXMgPSBhZXNfY2JjX3NldF9pdigmYWVzX2N0eCwgaXYpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyNpZiBERUJVRworICAgIHByaW50ZigicGxhaW50ZXh0IGxlbjogICVkXG4iLCAqb3BhcXVlX2xlbik7CisgICAgcHJpbnRmKCJpdjogICAgICAgICAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaXYsIElWX0xFTikpOworICAgIHByaW50ZigicGxhaW50ZXh0OiAgJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKG9wYXF1ZSwgKm9wYXF1ZV9sZW4pKTsKKyNlbmRpZgorCisjaWYgRU5DICAgIAorICAgIC8qIGVuY3J5cHQgdGhlIG9wYXF1ZSBkYXRhICAqLworICAgIHN0YXR1cyA9IGFlc19jYmNfbmlzdF9lbmNyeXB0KCZhZXNfY3R4LCBvcGFxdWUsIG9wYXF1ZV9sZW4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisjZW5kaWYKKworI2lmIERFQlVHCisgICAgcHJpbnRmKCJjaXBoZXJ0ZXh0IGxlbjogJWRcbiIsICpvcGFxdWVfbGVuKTsKKyAgICBwcmludGYoImNpcGhlcnRleHQ6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogYXV0aGVudGljYXRlIGNsZWFyIGFuZCBvcGFxdWUgZGF0YSwgdGhlbiB3cml0ZSB0aGUKKyAgICAgKiBhdXRoZW50aWNhdGlvbiB0YWcgdG8gdGhlIGxvY2F0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUKKyAgICAgKiBjaXBoZXJ0ZXh0CisgICAgICovCisgICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwgbWFjX2tleSwgTUFDX0tFWV9MRU4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX3N0YXJ0KCZobWFjX2N0eCk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICAgIHN0YXR1cyA9IGhtYWNfdXBkYXRlKCZobWFjX2N0eCwgY2xlYXIsIGNsZWFyX2xlbik7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKyNpZiBERUJVRworICAgIHByaW50ZigiaG1hYyBpbnB1dDogJXNcbiIsIAorCSAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGNsZWFyLCBjbGVhcl9sZW4pKTsKKyNlbmRpZgorICAgIGF1dGhfdGFnID0gKHVuc2lnbmVkIGNoYXIgKilvcGFxdWU7CisgICAgYXV0aF90YWcgKz0gKm9wYXF1ZV9sZW47ICAgIAorICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsIG9wYXF1ZSwgKm9wYXF1ZV9sZW4sIFRBR19MRU4sIGF1dGhfdGFnKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworI2lmIERFQlVHCisgICAgcHJpbnRmKCJobWFjIGlucHV0OiAlc1xuIiwgCisJICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOworI2VuZGlmCisgICAgLyogYnVtcCB1cCB0aGUgb3BhcXVlX2xlbiB0byByZWZsZWN0IHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgKi8KKyAgICAqb3BhcXVlX2xlbiArPSBUQUdfTEVOOworCisjaWYgREVCVUcKKyAgICBwcmludGYoInByb3QgZGF0YSBsZW46ICAlZFxuIiwgKm9wYXF1ZV9sZW4pOworICAgIHByaW50ZigicHJvdCBkYXRhOiAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOworI2VuZGlmCisgIH0KKworICByZXR1cm4gZXJyX3N0YXR1c19vazsKK30KKworZXJyX3N0YXR1c190CithZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZGVjKHZvaWQgKmtleSwgICAgICAgICAgICAKKwkJCSAgICAgY29uc3Qgdm9pZCAqY2xlYXIsICAgICAgICAgIAorCQkJICAgICB1bnNpZ25lZCBjbGVhcl9sZW4sICAgICAgIAorCQkJICAgICB2b2lkICppdiwgICAgICAgICAgICAgCisJCQkgICAgIHZvaWQgKm9wYXF1ZSwgICAgICAgICAKKwkJCSAgICAgdW5zaWduZWQgKm9wYXF1ZV9sZW4pIHsKKyAgYWVzX2NiY19jdHhfdCBhZXNfY3R4OworICBobWFjX2N0eF90IGhtYWNfY3R4OworICB1bnNpZ25lZCBjaGFyIGVuY19rZXlbRU5DX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIG1hY19rZXlbTUFDX0tFWV9MRU5dOworICB1bnNpZ25lZCBjaGFyIHRtcF90YWdbVEFHX0xFTl07CisgIHVuc2lnbmVkIGNoYXIgKmF1dGhfdGFnOworICB1bnNpZ25lZCBjaXBoZXJ0ZXh0X2xlbjsKKyAgZXJyX3N0YXR1c190IHN0YXR1czsKKyAgaW50IGk7CisgIAorICAvKiBjaGVjayBpZiB3ZSdyZSBkb2luZyBhdXRoZW50aWNhdGlvbiBvbmx5ICovCisgIGlmICgoaXYgPT0gTlVMTCkgJiYgKG9wYXF1ZSA9PSBOVUxMKSAmJiAob3BhcXVlX2xlbiA9PSBOVUxMKSkgeworICAgICAgCisgICAgICAvKiBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKworICB9IGVsc2UgaWYgKChpdiA9PSBOVUxMKSB8fCAob3BhcXVlID09IE5VTEwpIHx8IChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgCisgICAgLyoKKyAgICAgKiBiYWQgcGFyYW1ldGVyIC0gd2UgZXhwZWN0IGVpdGhlciBhbGwgdGhyZWUgcG9pbnRlcnMgdG8gYmUgTlVMTCwKKyAgICAgKiBvciBub25lIG9mIHRob3NlIHBvaW50ZXJzIHRvIGJlIE5VTEwgCisgICAgICovCisgICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKKworICB9IGVsc2UgeworI2lmIERFQlVHCisgICAgcHJpbnRmKCJERUMgdXNpbmcga2V5ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIEtFWV9MRU4pKTsKKyNlbmRpZgorCisgICAgLyogZGVyaXZlIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGtleXMgZnJvbSB0aGUgaW5wdXQga2V5ICovCisgICAgc3RhdHVzID0gaG1hY19pbml0KCZobWFjX2N0eCwga2V5LCBLRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworICAgIHN0YXR1cyA9IGhtYWNfY29tcHV0ZSgmaG1hY19jdHgsICJFTkMiLCAzLCBFTkNfS0VZX0xFTiwgZW5jX2tleSk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIGtleSwgS0VZX0xFTik7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKyAgICBzdGF0dXMgPSBobWFjX2NvbXB1dGUoJmhtYWNfY3R4LCAiTUFDIiwgMywgTUFDX0tFWV9MRU4sIG1hY19rZXkpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyNpZiBERUJVRworICAgIHByaW50ZigicHJvdCBkYXRhIGxlbjogICVkXG4iLCAqb3BhcXVlX2xlbik7CisgICAgcHJpbnRmKCJwcm90IGRhdGE6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisjZW5kaWYKKworICAgIC8qIAorICAgICAqIHNldCB0aGUgcHJvdGVjdGVkIGRhdGEgbGVuZ3RoIHRvIHRoYXQgb2YgdGhlIGNpcGhlcnRleHQsIGJ5CisgICAgICogc3VidHJhY3Rpbmcgb3V0IHRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyAKKyAgICAgKi8KKyAgICBjaXBoZXJ0ZXh0X2xlbiA9ICpvcGFxdWVfbGVuIC0gVEFHX0xFTjsKKworI2lmIERFQlVHCisgICAgcHJpbnRmKCJjaXBoZXJ0ZXh0IGxlbjogJWRcbiIsIGNpcGhlcnRleHRfbGVuKTsKKyNlbmRpZiAgICAKKyAgICAvKiB2ZXJpZnkgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyAqLworCisgICAgLyogCisgICAgICogY29tcHV0ZSB0aGUgYXV0aGVudGljYXRpb24gdGFnIGZvciB0aGUgY2xlYXIgYW5kIG9wYXF1ZSBkYXRhLAorICAgICAqIGFuZCB3cml0ZSBpdCB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbgorICAgICAqLworICAgIHN0YXR1cyA9IGhtYWNfaW5pdCgmaG1hY19jdHgsIG1hY19rZXksIE1BQ19LRVlfTEVOKTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gaG1hY19zdGFydCgmaG1hY19jdHgpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBobWFjX3VwZGF0ZSgmaG1hY19jdHgsIGNsZWFyLCBjbGVhcl9sZW4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisKKyNpZiBERUJVRworICAgIHByaW50ZigiaG1hYyBpbnB1dDogJXNcbiIsIAorCSAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGNsZWFyLCBjbGVhcl9sZW4pKTsKKyNlbmRpZgorCisgICAgc3RhdHVzID0gaG1hY19jb21wdXRlKCZobWFjX2N0eCwgb3BhcXVlLCBjaXBoZXJ0ZXh0X2xlbiwgVEFHX0xFTiwgdG1wX3RhZyk7CisgICAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1czsKKworI2lmIERFQlVHCisgICAgcHJpbnRmKCJobWFjIGlucHV0OiAlc1xuIiwgCisJICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCBjaXBoZXJ0ZXh0X2xlbikpOworI2VuZGlmCisKKyAgICAvKiAKKyAgICAgKiBjb21wYXJlIHRoZSBjb21wdXRlZCB0YWcgd2l0aCB0aGUgb25lIHByb3ZpZGVkIGFzIGlucHV0ICh3aGljaAorICAgICAqIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGNpcGhlcnRleHQpCisgICAgICovCisgICAgYXV0aF90YWcgPSAodW5zaWduZWQgY2hhciAqKW9wYXF1ZTsKKyAgICBhdXRoX3RhZyArPSBjaXBoZXJ0ZXh0X2xlbjsgIAorI2lmIERFQlVHCisgICAgcHJpbnRmKCJhdXRoX3RhZzogJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGF1dGhfdGFnLCBUQUdfTEVOKSk7CisgICAgcHJpbnRmKCJ0bXBfdGFnOiAgJXNcbiIsIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKHRtcF90YWcsIFRBR19MRU4pKTsKKyNlbmRpZgorICAgIGZvciAoaT0wOyBpIDwgVEFHX0xFTjsgaSsrKSB7CisgICAgICBpZiAodG1wX3RhZ1tpXSAhPSBhdXRoX3RhZ1tpXSkgCisJcmV0dXJuIGVycl9zdGF0dXNfYXV0aF9mYWlsOyAKKyAgICB9CisKKyAgICAvKiBidW1wIGRvd24gdGhlIG9wYXF1ZV9sZW4gdG8gcmVmbGVjdCB0aGUgYXV0aGVudGljYXRpb24gdGFnICovCisgICAgKm9wYXF1ZV9sZW4gLT0gVEFHX0xFTjsKKworICAgIC8qIGRlY3J5cHQgdGhlIGNvbmZpZGVudGlhbCBkYXRhICovCisgICAgc3RhdHVzID0gYWVzX2NiY19jb250ZXh0X2luaXQoJmFlc19jdHgsIGtleSwgZGlyZWN0aW9uX2RlY3J5cHQpOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisgICAgc3RhdHVzID0gYWVzX2NiY19zZXRfaXYoJmFlc19jdHgsIGl2KTsKKyAgICBpZiAoc3RhdHVzKSByZXR1cm4gc3RhdHVzOworCisjaWYgREVCVUcKKyAgICBwcmludGYoImNpcGhlcnRleHQ6ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisgICAgcHJpbnRmKCJpdjogICAgICAgICAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaXYsIElWX0xFTikpOworI2VuZGlmCisKKyNpZiBFTkMKKyAgICBzdGF0dXMgPSBhZXNfY2JjX25pc3RfZGVjcnlwdCgmYWVzX2N0eCwgb3BhcXVlLCAmY2lwaGVydGV4dF9sZW4pOworICAgIGlmIChzdGF0dXMpIHJldHVybiBzdGF0dXM7CisjZW5kaWYKKworI2lmIERFQlVHCisgICAgcHJpbnRmKCJwbGFpbnRleHQgbGVuOiAgJWRcbiIsIGNpcGhlcnRleHRfbGVuKTsKKyAgICBwcmludGYoInBsYWludGV4dDogICVzXG4iLCAKKwkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsIGNpcGhlcnRleHRfbGVuKSk7CisjZW5kaWYKKworICAgIC8qIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIHBsYWludGV4dCAgKi8KKyAgICAqb3BhcXVlX2xlbiA9IGNpcGhlcnRleHRfbGVuOworICB9CisKKyAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Cit9CisKK2NyeXB0b2FsZ19jdHhfdCBjcnlwdG9hbGdfY3R4ID0geworICBhZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZW5jLAorICBhZXNfMTI4X2NiY19obWFjX3NoYTFfOTZfZGVjLAorICBLRVlfTEVOLAorICBJVl9MRU4sCisgIFRBR19MRU4sCisgIE1BWF9FWFBBTkQsCit9OworCitjcnlwdG9hbGdfdCBjcnlwdG9hbGcgPSAmY3J5cHRvYWxnX2N0eDsKKworI2RlZmluZSBOVUxMX1RBR19MRU4gMTIKKworZXJyX3N0YXR1c190CitudWxsX2VuYyh2b2lkICprZXksICAgICAgICAgICAgCisJIGNvbnN0IHZvaWQgKmNsZWFyLCAgICAgICAgICAKKwkgdW5zaWduZWQgY2xlYXJfbGVuLCAgICAgICAKKwkgdm9pZCAqaXYsICAgICAgICAgICAgIAorCSB2b2lkICpvcGFxdWUsICAgICAgICAgCisJIHVuc2lnbmVkICpvcGFxdWVfbGVuKSB7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICphdXRoX3RhZzsKKyAgdW5zaWduZWQgY2hhciAqaW5pdF92ZWMgPSBpdjsKKworICAvKiBjaGVjayBpZiB3ZSdyZSBkb2luZyBhdXRoZW50aWNhdGlvbiBvbmx5ICovCisgIGlmICgoaXYgPT0gTlVMTCkgJiYgKG9wYXF1ZSA9PSBOVUxMKSAmJiAob3BhcXVlX2xlbiA9PSBOVUxMKSkgeworICAgICAgCisgICAgICAvKiBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKworICB9IGVsc2UgaWYgKChpdiA9PSBOVUxMKSB8fCAob3BhcXVlID09IE5VTEwpIHx8IChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgCisgICAgLyoKKyAgICAgKiBiYWQgcGFyYW1ldGVyIC0gd2UgZXhwZWN0IGVpdGhlciBhbGwgdGhyZWUgcG9pbnRlcnMgdG8gYmUgTlVMTCwKKyAgICAgKiBvciBub25lIG9mIHRob3NlIHBvaW50ZXJzIHRvIGJlIE5VTEwgCisgICAgICovCisgICAgcmV0dXJuIGVycl9zdGF0dXNfZmFpbDsKKworICB9IGVsc2UgeworCisjaWYgREVCVUcKKyAgICBwcmludGYoIk5VTEwgRU5DIHVzaW5nIGtleSAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoa2V5LCBLRVlfTEVOKSk7CisgICAgcHJpbnRmKCJOVUxMX1RBR19MRU46ICAlZFxuIiwgTlVMTF9UQUdfTEVOKTsKKyAgICBwcmludGYoInBsYWludGV4dCBsZW46ICAlZFxuIiwgKm9wYXF1ZV9sZW4pOworI2VuZGlmCisgICAgZm9yIChpPTA7IGkgPCBJVl9MRU47IGkrKykKKyAgICAgIGluaXRfdmVjW2ldID0gaSArIChpICogMTYpOworI2lmIERFQlVHCisgICAgcHJpbnRmKCJpdjogICAgICAgICAgICAgICAgJXNcbiIsIAorCSAgIG9jdGV0X3N0cmluZ19oZXhfc3RyaW5nKGl2LCBJVl9MRU4pKTsKKyAgICBwcmludGYoInBsYWludGV4dDogICAgICAgICAlc1xuIiwgCisJICAgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcob3BhcXVlLCAqb3BhcXVlX2xlbikpOworI2VuZGlmCisgICAgYXV0aF90YWcgPSBvcGFxdWU7CisgICAgYXV0aF90YWcgKz0gKm9wYXF1ZV9sZW47CisgICAgZm9yIChpPTA7IGkgPCBOVUxMX1RBR19MRU47IGkrKykKKyAgICAgIGF1dGhfdGFnW2ldID0gaSArIChpICogMTYpOworICAgICpvcGFxdWVfbGVuICs9IE5VTExfVEFHX0xFTjsKKyNpZiBERUJVRworICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGEgbGVuOiAlZFxuIiwgKm9wYXF1ZV9sZW4pOworICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGE6ICAgICVzXG4iLCAKKwkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisjZW5kaWYKKworICB9CisKKyAgcmV0dXJuIGVycl9zdGF0dXNfb2s7Cit9CisKK2Vycl9zdGF0dXNfdAorbnVsbF9kZWModm9pZCAqa2V5LCAgICAgICAgICAgIAorCSBjb25zdCB2b2lkICpjbGVhciwgICAgICAgICAgCisJIHVuc2lnbmVkIGNsZWFyX2xlbiwgICAgICAgCisJIHZvaWQgKml2LCAgICAgICAgICAgICAKKwkgdm9pZCAqb3BhcXVlLCAgICAgICAgIAorCSB1bnNpZ25lZCAqb3BhcXVlX2xlbikgeworICB1bnNpZ25lZCBjaGFyICphdXRoX3RhZzsKKyAgCisgIC8qIGNoZWNrIGlmIHdlJ3JlIGRvaW5nIGF1dGhlbnRpY2F0aW9uIG9ubHkgKi8KKyAgaWYgKChpdiA9PSBOVUxMKSAmJiAob3BhcXVlID09IE5VTEwpICYmIChvcGFxdWVfbGVuID09IE5VTEwpKSB7CisgICAgICAKKyAgICAgIC8qIHBlcmZvcm0gYXV0aGVudGljYXRpb24gb25seSAqLworCisgIH0gZWxzZSBpZiAoKGl2ID09IE5VTEwpIHx8IChvcGFxdWUgPT0gTlVMTCkgfHwgKG9wYXF1ZV9sZW4gPT0gTlVMTCkpIHsKKyAgICAKKyAgICAvKgorICAgICAqIGJhZCBwYXJhbWV0ZXIgLSB3ZSBleHBlY3QgZWl0aGVyIGFsbCB0aHJlZSBwb2ludGVycyB0byBiZSBOVUxMLAorICAgICAqIG9yIG5vbmUgb2YgdGhvc2UgcG9pbnRlcnMgdG8gYmUgTlVMTCAKKyAgICAgKi8KKyAgICByZXR1cm4gZXJyX3N0YXR1c19mYWlsOworCisgIH0gZWxzZSB7CisKKyNpZiBERUJVRworICAgIHByaW50ZigiTlVMTCBERUMgdXNpbmcga2V5ICVzXG4iLCBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhrZXksIEtFWV9MRU4pKTsKKworICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGEgbGVuOiAlZFxuIiwgKm9wYXF1ZV9sZW4pOworICAgIHByaW50ZigicHJvdGVjdGVkIGRhdGE6ICAgICVzXG4iLCAKKwkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisjZW5kaWYKKyAgICBhdXRoX3RhZyA9IG9wYXF1ZTsKKyAgICBhdXRoX3RhZyArPSAoKm9wYXF1ZV9sZW4gLSBOVUxMX1RBR19MRU4pOworI2lmIERFQlVHCisgICAgcHJpbnRmKCJpdjogICAgICAgICAlc1xuIiwgb2N0ZXRfc3RyaW5nX2hleF9zdHJpbmcoaXYsIElWX0xFTikpOworI2VuZGlmCisgICAgKm9wYXF1ZV9sZW4gLT0gTlVMTF9UQUdfTEVOOworI2lmIERFQlVHCisgICAgcHJpbnRmKCJwbGFpbnRleHQgbGVuOiAgJWRcbiIsICpvcGFxdWVfbGVuKTsKKyAgICBwcmludGYoInBsYWludGV4dDogICVzXG4iLCAKKwkgICBvY3RldF9zdHJpbmdfaGV4X3N0cmluZyhvcGFxdWUsICpvcGFxdWVfbGVuKSk7CisjZW5kaWYKKyAgfQorCisgIHJldHVybiBlcnJfc3RhdHVzX29rOworfQorCitjcnlwdG9hbGdfY3R4X3QgbnVsbF9jcnlwdG9hbGdfY3R4ID0geworICBudWxsX2VuYywKKyAgbnVsbF9kZWMsCisgIEtFWV9MRU4sCisgIElWX0xFTiwKKyAgTlVMTF9UQUdfTEVOLAorICBNQVhfRVhQQU5ELAorfTsKKworY3J5cHRvYWxnX3QgbnVsbF9jcnlwdG9hbGcgPSAmbnVsbF9jcnlwdG9hbGdfY3R4OworCitpbnQKK2NyeXB0b2FsZ19nZXRfaWQoY3J5cHRvYWxnX3QgYykgeworICBpZiAoYyA9PSBjcnlwdG9hbGcpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitjcnlwdG9hbGdfdCAKK2NyeXB0b2FsZ19maW5kX2J5X2lkKGludCBpZCkgeworICBzd2l0Y2goaWQpIHsKKyAgY2FzZSAxOgorICAgIHJldHVybiBjcnlwdG9hbGc7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNmMxZmQ5YWFiMzZkNWYxNzY0M2Y5OTEwNWRmZDVkYzRhOTgxMjU5LnN2bi1iYXNlIGIvam5pL3BqcHJvamVjdC1hbmRyb2lkLy5zdm4vcHJpc3RpbmUvMjYvMjZjMWZkOWFhYjM2ZDVmMTc2NDNmOTkxMDVkZmQ1ZGM0YTk4MTI1OS5zdm4tYmFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZiZTgyCi0tLSAvZGV2L251bGwKKysrIGIvam5pL3BqcHJvamVjdC1hbmRyb2lkLy5zdm4vcHJpc3RpbmUvMjYvMjZjMWZkOWFhYjM2ZDVmMTc2NDNmOTkxMDVkZmQ1ZGM0YTk4MTI1OS5zdm4tYmFzZQpAQCAtMCwwICsxLDE2MSBAQAorTWljcm9zb2Z0IGVNYmVkZGVkIFZpc3VhbCBUb29scyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNC4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJwamxpYl91dGlsX3dpbmNlIj0iLi5cLi5cLi5ccGpsaWItdXRpbFxidWlsZFx3aW5jZS1ldmM0XHBqbGliX3V0aWxfd2luY2UudmNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAicGpsaWJfd2luY2UiPSIuLlwuLlwuLlxwamxpYlxidWlsZFx3aW5jZS1ldmM0XHBqbGliX3dpbmNlLnZjcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInBqbWVkaWFfY29kZWNfd2luY2UiPSIuLlwuLlwuLlxwam1lZGlhXGJ1aWxkXHdpbmNlLWV2YzRccGptZWRpYV9jb2RlY193aW5jZS52Y3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJwam1lZGlhX3dpbmNlIj0iLi5cLi5cLi5ccGptZWRpYVxidWlsZFx3aW5jZS1ldmM0XHBqbWVkaWFfd2luY2UudmNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAicGpuYXRoX3dpbmNlIj0iLi5cLi5cLi5ccGpuYXRoXGJ1aWxkXHdpbmNlLWV2YzRccGpuYXRoX3dpbmNlLnZjcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInBqc2lwX2NvcmVfd2luY2UiPSIuXHBqc2lwX2NvcmVfd2luY2UudmNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAicGpzaXBfc2ltcGxlX3dpbmNlIj0iLlxwanNpcF9zaW1wbGVfd2luY2UudmNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAicGpzaXBfdWFfd2luY2UiPSIuXHBqc2lwX3VhX3dpbmNlLnZjcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInBqc3VhX2xpYl93aW5jZSI9Ii5ccGpzdWFfbGliX3dpbmNlLnZjcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInRlc3RfcGpzaXBfd2luY2UiPSIuXHRlc3RfcGpzaXBfd2luY2UudmNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBwamxpYl91dGlsX3dpbmNlDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgcGpsaWJfd2luY2UNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBwanNpcF9jb3JlX3dpbmNlDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgcGpzaXBfc2ltcGxlX3dpbmNlDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgcGpzaXBfdWFfd2luY2UNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBwanN1YV9saWJfd2luY2UNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBwam5hdGhfd2luY2UNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBwam1lZGlhX3dpbmNlDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorR2xvYmFsOg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08Mz4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQpkaWZmIC0tZ2l0IGEvam5pL3BqcHJvamVjdC1hbmRyb2lkLy5zdm4vcHJpc3RpbmUvMjYvMjZkZWM3NmZlYWJmMTI0NzY2MDllOTRiYzA4Y2VjNjhjZmQ2NmVkNC5zdm4tYmFzZSBiL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2ZGVjNzZmZWFiZjEyNDc2NjA5ZTk0YmMwOGNlYzY4Y2ZkNjZlZDQuc3ZuLWJhc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZTUyZAotLS0gL2Rldi9udWxsCisrKyBiL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2ZGVjNzZmZWFiZjEyNDc2NjA5ZTk0YmMwOGNlYzY4Y2ZkNjZlZDQuc3ZuLWJhc2UKQEAgLTAsMCArMSw4NTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqICAgSVRVLVQgRy43MjIuMSAoMjAwNS0wNSkgLSBGaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBmb3IgbWFpbiBib2R5IGFuZCBBbm5leCBDCisqKiAgID4gU29mdHdhcmUgUmVsZWFzZSAyLjEgKDIwMDgtMDYpCisqKiAgICAgKFNpbXBsZSByZXBhY2thZ2luZzsgbm8gY2hhbmdlIGZyb20gMjAwNS0wNSBSZWxlYXNlIDIuMCBjb2RlKQorKioKKyoqICAgqSAyMDA0IFBvbHljb20sIEluYy4KKyoqCisqKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBGaWxlbmFtZTogICAgZGN0NF9zLmggICAgCisKKyAgUHVycG9zZTogICAgIENvbnRhaW5zIHRhYmxlcyB1c2VkIGJ5IGRjdDRfcy5jCisJCQorICBEZXNpZ24gTm90ZXM6CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgSW5jbHVkZSBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIFdvcmQxNiBjb3NpbmU7CisgICAgV29yZDE2IG1pbnVzX3NpbmU7Cit9IGNvc19tc2luX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhlIGRjdF9jb3JlX3MgdGFibGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZm9sbG93aW5nIGNvZGUKKworICAgICAgZm9yKGk9MDtpPDEwOysraSkKKyAgICAgIHsKKyAgICAgICAgICBmb3Ioaz0wO2s8MTA7KytrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGN0X2NvcmVfc1tpXVtrXT0oc2hvcnQpIChGVE9JKCgoLjkqMzI3NjguKSpjb3MoMy4xNDE1OTI2KihrKzAuNSkqKGkrMC41KS8xMC4pKSkpOworICAgICAgICAgIH0KKyAgICAgIH0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1dvcmQxNiBkY3RfY29yZV9zWzEwXVsxMF0gPSB7Cit7IDI5NDAwLCAgIDI4Njc2LCAgIDI3MjQ2LCAgIDI1MTQ1LCAgIDIyNDI1LCAgIDE5MTUzLCAgIDE1NDA5LCAgIDExMjg2LCAgICA2ODg1LCAgMjMxNCB9LAoreyAyODY3NiwgICAyMjQyNSwgICAxMTI4NiwgICAtMjMxNCwgIC0xNTQwOSwgIC0yNTE0NSwgIC0yOTQwMCwgIC0yNzI0NiwgIC0xOTE1MywgIC02ODg1IH0sCit7IDI3MjQ2LCAgIDExMjg2LCAgLTExMjg2LCAgLTI3MjQ2LCAgLTI3MjQ2LCAgLTExMjg2LCAgIDExMjg2LCAgIDI3MjQ2LCAgIDI3MjQ2LCAgMTEyODYgfSwKK3sgMjUxNDUsICAgLTIzMTQsICAtMjcyNDYsICAtMjI0MjUsICAgIDY4ODUsICAgMjg2NzYsICAgMTkxNTMsICAtMTEyODYsICAtMjk0MDAsICAtMTU0MDkgfSwKK3sgMjI0MjUsICAtMTU0MDksICAtMjcyNDYsICAgIDY4ODUsICAgMjk0MDAsICAgIDIzMTQsICAtMjg2NzYsICAtMTEyODYsICAgMjUxNDUsICAxOTE1MyB9LAoreyAxOTE1MywgIC0yNTE0NSwgIC0xMTI4NiwgICAyODY3NiwgICAgMjMxNCwgIC0yOTQwMCwgICAgNjg4NSwgICAyNzI0NiwgIC0xNTQwOSwgIC0yMjQyNSB9LAoreyAxNTQwOSwgIC0yOTQwMCwgICAxMTI4NiwgICAxOTE1MywgIC0yODY3NiwgICAgNjg4NSwgICAyMjQyNSwgIC0yNzI0NiwgICAgMjMxNCwgIDI1MTQ1IH0sCit7IDExMjg2LCAgLTI3MjQ2LCAgIDI3MjQ2LCAgLTExMjg2LCAgLTExMjg2LCAgIDI3MjQ2LCAgLTI3MjQ2LCAgIDExMjg2LCAgIDExMjg2LCAgLTI3MjQ2IH0sCit7ICA2ODg1LCAgLTE5MTUzLCAgIDI3MjQ2LCAgLTI5NDAwLCAgIDI1MTQ1LCAgLTE1NDA5LCAgICAyMzE0LCAgIDExMjg2LCAgLTIyNDI1LCAgMjg2NzYgfSwKK3sgIDIzMTQsICAgLTY4ODUsICAgMTEyODYsICAtMTU0MDksICAgMTkxNTMsICAtMjI0MjUsICAgMjUxNDUsICAtMjcyNDYsICAgMjg2NzYsICAtMjk0MDAgfQorfTsgICAgCisKK1dvcmQxNiBzeW5fYmlhc183a2h6W0RDVF9MRU5HVEhdID0geworIC00LCAgNCwgLTUsIC0yLCAgMCwgLTQsICA2LCAgMiwgLTIsIC00LAorIC0zLCAgMywgIDAsICAwLCAtMiwgIDQsICAwLCAgMCwgIDMsIC02LAorICA4LCAgNSwgIDQsICA1LCAtOCwgIDAsIC0yLCAgMCwgIDAsIC0zLAorICAzLCAgMCwgIDAsICAwLCAgMSwgLTEsIC0yLCAgMCwgIDAsICAyLAorIC0yLCAtNSwgLTIsICAzLCAgMiwgLTEsIC0xLCAtNiwgIDMsICAxLAorIC03LCAgNCwgIDQsICAwLCAgMSwgIDQsICAxLCAgMCwgIDEsIC01LAorIC0xLCAgMSwgLTYsICAwLCAtMSwgLTEsICAzLCAgMCwgLTIsICAxLAorICAyLCAtNCwgIDAsICA5LCAgMCwgLTMsICAxLCAgMSwgIDEsICAwLAorIC0zLCAtMiwgLTEsIC00LCAtMiwgIDAsICA1LCAgMiwgLTMsICA1LAorICAwLCAtMiwgIDQsICA0LCAgMCwgLTYsIC00LCAgMiwgIDAsICAwLAorICAwLCAtMSwgLTEsIC0yLCAgMCwgIDYsICAxLCAgMCwgIDAsIC0xLAorICAwLCAtNCwgLTEsICAwLCAtNCwgIDEsIC0xLCAtNSwgIDAsICAxLAorICAyLCAgNCwgIDAsIC04LCAtNCwgIDAsIC0yLCAtMiwgIDIsICA1LAorIC0zLCAtMSwgIDEsIC00LCAgMCwgIDAsICAwLCAtMSwgLTMsICAwLAorIC01LCAtNCwgIDAsIC0yLCAgMCwgIDcsICAxLCAgMCwgIDUsIC0yLAorIC0xLCAgMiwgIDIsIC0yLCAgMywgIDcsIC0zLCAgNCwgIDEsIC00LAorICAwLCAgMCwgIDMsIC03LCAtNSwgIDAsICAwLCAgNCwgIDAsIC0yLAorIC0xLCAgMCwgLTUsICAwLCAgMiwgIDAsIDExLCAgNSwgLTEsICAwLAorICAyLCAgMiwgLTIsIC0yLCAgNSwgIDQsIC0zLCAgMSwgIDAsIC0yLAorICAxLCAgMywgIDIsICAwLCAgMSwgIDAsICAwLCAgMCwgIDUsICA2LAorIC0yLCAtMSwgIDAsICAyLCAgMywgIDIsICAwLCAtMywgIDQsICA1LAorICAwLCAtMSwgIDAsICAzLCAgMSwgLTIsIC0zLCAtMiwgLTEsICAyLAorIC0xLCAtMSwgLTIsIC03LCAgNCwgIDYsIC01LCAtNiwgLTMsIC00LAorICAwLCAgMiwgLTUsIC0yLCAgMywgIDAsICAwLCAgMCwgIDIsIC0yLAorIC00LCAgMywgIDMsICAxLCAgMCwgIDAsICA0LCAtMSwgIDgsIDEzLAorICAxLCAgMiwgIDAsICAyLCAgMCwgLTEsICA0LCAtMywgIDEsICAwLAorIC0xLCAgMywgIDAsICAwLCAtNSwgIDAsICA2LCAgMiwgIDQsICA1LAorICAyLCAtMSwgLTEsICAzLCAgNiwgIDEsICAxLCAgMiwgLTQsICAwLAorIC0xLCAtNiwgLTIsIC0yLCAgMiwgIDEsICAyLCAgNiwgIDIsICAwLAorIC0yLCAtMiwgIDAsIC0xLCAgMiwgIDAsICAwLCAgMywgLTIsICAxLAorICAzLCAgMSwgIDIsIC0xLCAtMiwgIDIsICAyLCAtNCwgIDAsICAwLAorIC0zLCAgMCwgLTQsIC0zLCAgNiwgIDcsICAyLCAgMiwgIDAsIC0zfTsKKworV29yZDE2IGRpdGhlcltEQ1RfTEVOR1RIXT0geworICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsICAwLCAgMSwgIDEsICAxLAorICAxLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLAorICAwLCAgMSwgIDEsICAxLCAgMCwgIDEsICAxLCAgMCwgIDAsICAwLAorICAxLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDEsICAwLAorICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLAorICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMSwgIDAsICAwLAorICAwLCAgMCwgIDEsICAwLCAgMCwgIDAsICAxLCAgMCwgIDAsICAxLAorICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLAorICAxLCAgMCwgIDAsICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLAorICAwLCAgMCwgIDEsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLAorICAxLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLAorICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAxLAorICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLAorICAwLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLAorICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLAorICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMCwgIDAsICAxLAorICAwLCAgMCwgIDAsICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsICAxLAorICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLAorICAxLCAgMCwgIDAsICAxLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLAorICAxLCAgMSwgIDEsICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLAorICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLAorICAwLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLAorICAxLCAgMSwgIDEsICAwLCAgMSwgIDEsICAxLCAgMCwgIDEsICAwLAorICAxLCAgMSwgIDAsICAwLCAgMSwgIDAsICAwLCAgMSwgIDAsICAxLAorICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLAorICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLAorICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsICAwLCAgMCwgIDAsICAxLAorICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsICAwLCAgMSwgIDAsICAxLAorICAxLCAgMCwgIDEsICAxLCAgMCwgIDAsICAxLCAgMSwgIDAsICAxLAorICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLAorICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsICAwfTsKKworV29yZDE2IG1heF9kaXRoZXJbTUFYX0RDVF9MRU5HVEhdPSB7CisgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAxLCAgMCwgIDEsCisgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDAsICAwLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsCisgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsCisgIDEsICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDAsCisgIDAsICAwLCAgMSwgIDEsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsCisgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsCisgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMSwgIDEsCisgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsCisgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsCisgIDEsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDAsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMCwgIDEsCisgIDEsICAwLCAgMCwgIDAsICAxLCAgMSwgIDAsICAxLCAgMCwgIDEsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMCwgIDEsCisgIDEsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwLCAgMSwgIDEsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsCisgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDAsCisgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMCwgIDEsCisgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsCisgIDAsICAwLCAgMSwgIDEsICAxLCAgMCwgIDEsICAxLCAgMSwgIDAsCisgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsCisgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDEsCisgIDAsICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsCisgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDEsCisgIDAsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsCisgIDEsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsCisgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsCisgIDAsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsCisgIDEsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAwLCAgMCwgIDAsCisgIDAsICAxLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLCAgMSwgIDEsCisgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDEsCisgIDEsICAxLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsCisgIDEsICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsICAwLCAgMCwgIDEsCisgIDAsICAxLCAgMCwgIDAsICAwLCAgMSwgIDEsICAwLCAgMCwgIDEsCisgIDAsICAwLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsCisgIDEsICAxLCAgMCwgIDEsICAwLCAgMCwgIDEsICAxLCAgMCwgIDAsCisgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMCwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsCisgIDAsICAxLCAgMSwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsCisgIDAsICAwLCAgMSwgIDAsICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDAsICAwLCAgMCwgIDEsICAxLCAgMCwgIDAsICAxLCAgMCwgIDEsCisgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsCisgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMCwgIDEsCisgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsCisgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDEsICAwLCAgMCwgIDEsICAwLCAgMCwgIDEsICAxLCAgMCwgIDEsCisgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLCAgMSwgIDEsCisgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMCwgIDAsCisgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAwLCAgMCwgIDEsCisgIDEsICAwLCAgMSwgIDAsICAwLCAgMSwgIDEsICAxLCAgMCwgIDEsCisgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsCisgIDAsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMSwgIDAsCisgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoZSBzX2Nvc19taW4gdGFibGVzIHdlcmUgZ2VuZXJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgY29kZToKKyAgICAgIGRvdWJsZQkJYW5nbGUsIHNjYWxlOworICAgICAgaW50CQkgICAgaW5kZXg7CisKKyAgICAgIGZvciAoaW5kZXggPSAwO2luZGV4IDwgbGVuZ3RoO2luZGV4KyspIAorICAgICAgeworICAgICAgICAgIGFuZ2xlID0gc2NhbGUgKiAoKGRvdWJsZSlpbmRleCArIDAuNSk7CisgICAgICAgICAgdGFibGVbaW5kZXhdLmNvc2luZSAgICAgPSAoc2hvcnQpIChGVE9JKCgxODQyNykqIGNvcyhhbmdsZSkpKTsKKyAgICAgICAgICB0YWJsZVtpbmRleF0ubWludXNfc2luZSA9IChzaG9ydCkgKEZUT0koKDE4NDI3KSooLXNpbihhbmdsZSkpKSk7CisgICAgICB9CisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2Nvc19tc2luX3QJc19jb3NfbXNpbl8yW0RDVF9MRU5HVEhfRElWXzMyXSA9IHsKKyAgICB7ICAxODQxMyAgICwgICAtNzIzICAgfSAsIAorICAgIHsgIDE4Mjk5ICAgLCAgIC0yMTY2ICAgfSAsIAorICAgIHsgIDE4MDczICAgLCAgIC0zNTk1ICAgfSAsIAorICAgIHsgIDE3NzM1ICAgLCAgIC01MDAyICAgfSAsIAorICAgIHsgIDE3Mjg4ICAgLCAgIC02Mzc4ICAgfSAsIAorICAgIHsgIDE2NzM0ICAgLCAgIC03NzE1ICAgfSAsIAorICAgIHsgIDE2MDc3ICAgLCAgIC05MDA0ICAgfSAsIAorICAgIHsgIDE1MzIxICAgLCAgIC0xMDIzNyAgIH0gLCAKKyAgICB7ICAxNDQ3MSAgICwgICAtMTE0MDggICB9ICwgCisgICAgeyAgMTM1MzEgICAsICAgLTEyNTA4ICAgfSAKKyAgICB9OworY29zX21zaW5fdAlzX2Nvc19tc2luXzRbRENUX0xFTkdUSF9ESVZfMTZdID0geworICAgIHsgIDE4NDIzICAgLCAgIC0zNjIgICB9ICwgCisgICAgeyAgMTgzOTUgICAsICAgLTEwODUgICB9ICwgCisgICAgeyAgMTgzMzggICAsICAgLTE4MDYgICB9ICwgCisgICAgeyAgMTgyNTMgICAsICAgLTI1MjUgICB9ICwgCisgICAgeyAgMTgxNDAgICAsICAgLTMyMzkgICB9ICwgCisgICAgeyAgMTc5OTkgICAsICAgLTM5NDkgICB9ICwgCisgICAgeyAgMTc4MzAgICAsICAgLTQ2NTMgICB9ICwgCisgICAgeyAgMTc2MzQgICAsICAgLTUzNDkgICB9ICwgCisgICAgeyAgMTc0MTAgICAsICAgLTYwMzcgICB9ICwgCisgICAgeyAgMTcxNTkgICAsICAgLTY3MTYgICB9ICwgCisgICAgeyAgMTY4ODMgICAsICAgLTczODUgICB9ICwgCisgICAgeyAgMTY1ODAgICAsICAgLTgwNDIgICB9ICwgCisgICAgeyAgMTYyNTEgICAsICAgLTg2ODYgICB9ICwgCisgICAgeyAgMTU4OTggICAsICAgLTkzMTggICB9ICwgCisgICAgeyAgMTU1MjAgICAsICAgLTk5MzUgICB9ICwgCisgICAgeyAgMTUxMTggICAsICAgLTEwNTM2ICAgfSAsIAorICAgIHsgIDE0NjkyICAgLCAgIC0xMTEyMiAgIH0gLCAKKyAgICB7ICAxNDI0NCAgICwgICAtMTE2OTAgICB9ICwgCisgICAgeyAgMTM3NzQgICAsICAgLTEyMjQwICAgfSAsIAorICAgIHsgIDEzMjgzICAgLCAgIC0xMjc3MiAgIH0gCisgICAgfTsKK2Nvc19tc2luX3QJc19jb3NfbXNpbl84W0RDVF9MRU5HVEhfRElWXzhdID0geworICAgIHsgIDE4NDI2ICAgLCAgIC0xODEgICB9ICwgCisgICAgeyAgMTg0MTkgICAsICAgLTU0MyAgIH0gLCAKKyAgICB7ICAxODQwNSAgICwgICAtOTA0ICAgfSAsIAorICAgIHsgIDE4Mzg0ICAgLCAgIC0xMjY1ICAgfSAsIAorICAgIHsgIDE4MzU1ICAgLCAgIC0xNjI2ICAgfSAsIAorICAgIHsgIDE4MzIwICAgLCAgIC0xOTg2ICAgfSAsIAorICAgIHsgIDE4Mjc3ICAgLCAgIC0yMzQ1ICAgfSAsIAorICAgIHsgIDE4MjI4ICAgLCAgIC0yNzA0ICAgfSAsIAorICAgIHsgIDE4MTcxICAgLCAgIC0zMDYxICAgfSAsIAorICAgIHsgIDE4MTA3ICAgLCAgIC0zNDE3ICAgfSAsIAorICAgIHsgIDE4MDM3ICAgLCAgIC0zNzcyICAgfSAsIAorICAgIHsgIDE3OTU5ICAgLCAgIC00MTI2ICAgfSAsIAorICAgIHsgIDE3ODc1ICAgLCAgIC00NDc3ICAgfSAsIAorICAgIHsgIDE3NzgzICAgLCAgIC00ODI3ICAgfSAsIAorICAgIHsgIDE3Njg1ICAgLCAgIC01MTc2ICAgfSAsIAorICAgIHsgIDE3NTgwICAgLCAgIC01NTIyICAgfSAsIAorICAgIHsgIDE3NDY4ICAgLCAgIC01ODY2ICAgfSAsIAorICAgIHsgIDE3MzUwICAgLCAgIC02MjA4ICAgfSAsIAorICAgIHsgIDE3MjI1ICAgLCAgIC02NTQ3ICAgfSAsIAorICAgIHsgIDE3MDkzICAgLCAgIC02ODg0ICAgfSAsIAorICAgIHsgIDE2OTU0ICAgLCAgIC03MjE5ICAgfSAsIAorICAgIHsgIDE2ODA5ICAgLCAgIC03NTUwICAgfSAsIAorICAgIHsgIDE2NjU4ICAgLCAgIC03ODc5ICAgfSAsIAorICAgIHsgIDE2NTAwICAgLCAgIC04MjA0ICAgfSAsIAorICAgIHsgIDE2MzM2ICAgLCAgIC04NTI2ICAgfSAsIAorICAgIHsgIDE2MTY1ICAgLCAgIC04ODQ2ICAgfSAsIAorICAgIHsgIDE1OTg4ICAgLCAgIC05MTYxICAgfSAsIAorICAgIHsgIDE1ODA1ICAgLCAgIC05NDczICAgfSAsIAorICAgIHsgIDE1NjE2ICAgLCAgIC05NzgyICAgfSAsIAorICAgIHsgIDE1NDIxICAgLCAgIC0xMDA4NyAgIH0gLCAKKyAgICB7ICAxNTIyMCAgICwgICAtMTAzODcgICB9ICwgCisgICAgeyAgMTUwMTMgICAsICAgLTEwNjg0ICAgfSAsIAorICAgIHsgIDE0ODAxICAgLCAgIC0xMDk3NyAgIH0gLCAKKyAgICB7ICAxNDU4MiAgICwgICAtMTEyNjUgICB9ICwgCisgICAgeyAgMTQzNTggICAsICAgLTExNTUwICAgfSAsIAorICAgIHsgIDE0MTI5ICAgLCAgIC0xMTgyOSAgIH0gLCAKKyAgICB7ICAxMzg5NCAgICwgICAtMTIxMDQgICB9ICwgCisgICAgeyAgMTM2NTQgICAsICAgLTEyMzc1ICAgfSAsIAorICAgIHsgIDEzNDA4ICAgLCAgIC0xMjY0MSAgIH0gLCAKKyAgICB7ICAxMzE1NyAgICwgICAtMTI5MDEgICB9IAorICAgIH07Citjb3NfbXNpbl90CXNfY29zX21zaW5fMTZbRENUX0xFTkdUSF9ESVZfNF0gPSB7CisgICAgeyAgMTg0MjcgICAsICAgLTkwICAgfSAsIAorICAgIHsgIDE4NDI1ICAgLCAgIC0yNzEgICB9ICwgCisgICAgeyAgMTg0MjEgICAsICAgLTQ1MiAgIH0gLCAKKyAgICB7ICAxODQxNiAgICwgICAtNjMzICAgfSAsIAorICAgIHsgIDE4NDA5ICAgLCAgIC04MTQgICB9ICwgCisgICAgeyAgMTg0MDAgICAsICAgLTk5NSAgIH0gLCAKKyAgICB7ICAxODM4OSAgICwgICAtMTE3NSAgIH0gLCAKKyAgICB7ICAxODM3NyAgICwgICAtMTM1NiAgIH0gLCAKKyAgICB7ICAxODM2MyAgICwgICAtMTUzNiAgIH0gLCAKKyAgICB7ICAxODM0NyAgICwgICAtMTcxNiAgIH0gLCAKKyAgICB7ICAxODMyOSAgICwgICAtMTg5NiAgIH0gLCAKKyAgICB7ICAxODMxMCAgICwgICAtMjA3NiAgIH0gLCAKKyAgICB7ICAxODI4OCAgICwgICAtMjI1NiAgIH0gLCAKKyAgICB7ICAxODI2NSAgICwgICAtMjQzNSAgIH0gLCAKKyAgICB7ICAxODI0MSAgICwgICAtMjYxNCAgIH0gLCAKKyAgICB7ICAxODIxNCAgICwgICAtMjc5MyAgIH0gLCAKKyAgICB7ICAxODE4NiAgICwgICAtMjk3MiAgIH0gLCAKKyAgICB7ICAxODE1NiAgICwgICAtMzE1MCAgIH0gLCAKKyAgICB7ICAxODEyNCAgICwgICAtMzMyOCAgIH0gLCAKKyAgICB7ICAxODA5MCAgICwgICAtMzUwNiAgIH0gLCAKKyAgICB7ICAxODA1NSAgICwgICAtMzY4NCAgIH0gLCAKKyAgICB7ICAxODAxOCAgICwgICAtMzg2MSAgIH0gLCAKKyAgICB7ICAxNzk3OSAgICwgICAtNDAzNyAgIH0gLCAKKyAgICB7ICAxNzkzOSAgICwgICAtNDIxNCAgIH0gLCAKKyAgICB7ICAxNzg5NyAgICwgICAtNDM5MCAgIH0gLCAKKyAgICB7ICAxNzg1MyAgICwgICAtNDU2NSAgIH0gLCAKKyAgICB7ICAxNzgwNyAgICwgICAtNDc0MCAgIH0gLCAKKyAgICB7ICAxNzc2MCAgICwgICAtNDkxNSAgIH0gLCAKKyAgICB7ICAxNzcxMCAgICwgICAtNTA4OSAgIH0gLCAKKyAgICB7ICAxNzY2MCAgICwgICAtNTI2MiAgIH0gLCAKKyAgICB7ICAxNzYwNyAgICwgICAtNTQzNiAgIH0gLCAKKyAgICB7ICAxNzU1MyAgICwgICAtNTYwOCAgIH0gLCAKKyAgICB7ICAxNzQ5NyAgICwgICAtNTc4MCAgIH0gLCAKKyAgICB7ICAxNzQzOSAgICwgICAtNTk1MiAgIH0gLCAKKyAgICB7ICAxNzM4MCAgICwgICAtNjEyMyAgIH0gLCAKKyAgICB7ICAxNzMxOSAgICwgICAtNjI5MyAgIH0gLCAKKyAgICB7ICAxNzI1NyAgICwgICAtNjQ2MyAgIH0gLCAKKyAgICB7ICAxNzE5MiAgICwgICAtNjYzMiAgIH0gLCAKKyAgICB7ICAxNzEyNiAgICwgICAtNjgwMCAgIH0gLCAKKyAgICB7ICAxNzA1OSAgICwgICAtNjk2OCAgIH0gLCAKKyAgICB7ICAxNjk5MCAgICwgICAtNzEzNSAgIH0gLCAKKyAgICB7ICAxNjkxOSAgICwgICAtNzMwMiAgIH0gLCAKKyAgICB7ICAxNjg0NiAgICwgICAtNzQ2NyAgIH0gLCAKKyAgICB7ICAxNjc3MiAgICwgICAtNzYzMiAgIH0gLCAKKyAgICB7ICAxNjY5NiAgICwgICAtNzc5NyAgIH0gLCAKKyAgICB7ICAxNjYxOSAgICwgICAtNzk2MCAgIH0gLCAKKyAgICB7ICAxNjU0MCAgICwgICAtODEyMyAgIH0gLCAKKyAgICB7ICAxNjQ1OSAgICwgICAtODI4NSAgIH0gLCAKKyAgICB7ICAxNjM3NyAgICwgICAtODQ0NiAgIH0gLCAKKyAgICB7ICAxNjI5NCAgICwgICAtODYwNyAgIH0gLCAKKyAgICB7ICAxNjIwOCAgICwgICAtODc2NiAgIH0gLCAKKyAgICB7ICAxNjEyMSAgICwgICAtODkyNSAgIH0gLCAKKyAgICB7ICAxNjAzMyAgICwgICAtOTA4MyAgIH0gLCAKKyAgICB7ICAxNTk0MyAgICwgICAtOTI0MCAgIH0gLCAKKyAgICB7ICAxNTg1MiAgICwgICAtOTM5NiAgIH0gLCAKKyAgICB7ICAxNTc1OSAgICwgICAtOTU1MSAgIH0gLCAKKyAgICB7ICAxNTY2NCAgICwgICAtOTcwNSAgIH0gLCAKKyAgICB7ICAxNTU2OCAgICwgICAtOTg1OCAgIH0gLCAKKyAgICB7ICAxNTQ3MSAgICwgICAtMTAwMTEgICB9ICwgCisgICAgeyAgMTUzNzIgICAsICAgLTEwMTYyICAgfSAsIAorICAgIHsgIDE1MjcxICAgLCAgIC0xMDMxMyAgIH0gLCAKKyAgICB7ICAxNTE2OSAgICwgICAtMTA0NjIgICB9ICwgCisgICAgeyAgMTUwNjYgICAsICAgLTEwNjEwICAgfSAsIAorICAgIHsgIDE0OTYxICAgLCAgIC0xMDc1OCAgIH0gLCAKKyAgICB7ICAxNDg1NCAgICwgICAtMTA5MDQgICB9ICwgCisgICAgeyAgMTQ3NDcgICAsICAgLTExMDQ5ICAgfSAsIAorICAgIHsgIDE0NjM3ICAgLCAgIC0xMTE5NCAgIH0gLCAKKyAgICB7ICAxNDUyNyAgICwgICAtMTEzMzcgICB9ICwgCisgICAgeyAgMTQ0MTUgICAsICAgLTExNDc5ICAgfSAsIAorICAgIHsgIDE0MzAxICAgLCAgIC0xMTYyMCAgIH0gLCAKKyAgICB7ICAxNDE4NyAgICwgICAtMTE3NjAgICB9ICwgCisgICAgeyAgMTQwNzEgICAsICAgLTExODk4ICAgfSAsIAorICAgIHsgIDEzOTUzICAgLCAgIC0xMjAzNiAgIH0gLCAKKyAgICB7ICAxMzgzNCAgICwgICAtMTIxNzIgICB9ICwgCisgICAgeyAgMTM3MTQgICAsICAgLTEyMzA4ICAgfSAsIAorICAgIHsgIDEzNTkzICAgLCAgIC0xMjQ0MiAgIH0gLCAKKyAgICB7ICAxMzQ3MCAgICwgICAtMTI1NzUgICB9ICwgCisgICAgeyAgMTMzNDYgICAsICAgLTEyNzA2ICAgfSAsIAorICAgIHsgIDEzMjIwICAgLCAgIC0xMjgzNyAgIH0gLCAKKyAgICB7ICAxMzA5NCAgICwgICAtMTI5NjYgICB9IAorICAgIH07Citjb3NfbXNpbl90CXNfY29zX21zaW5fMzJbRENUX0xFTkdUSF9ESVZfMl0gPSB7CisgICAgeyAgMTg0MjcgICAsICAgLTQ1ICAgfSAsIAorICAgIHsgIDE4NDI3ICAgLCAgIC0xMzYgICB9ICwgCisgICAgeyAgMTg0MjYgICAsICAgLTIyNiAgIH0gLCAKKyAgICB7ICAxODQyNCAgICwgICAtMzE3ICAgfSAsIAorICAgIHsgIDE4NDIzICAgLCAgIC00MDcgICB9ICwgCisgICAgeyAgMTg0MjAgICAsICAgLTQ5NyAgIH0gLCAKKyAgICB7ICAxODQxOCAgICwgICAtNTg4ICAgfSAsIAorICAgIHsgIDE4NDE1ICAgLCAgIC02NzggICB9ICwgCisgICAgeyAgMTg0MTEgICAsICAgLTc2OSAgIH0gLCAKKyAgICB7ICAxODQwNyAgICwgICAtODU5ICAgfSAsIAorICAgIHsgIDE4NDAzICAgLCAgIC05NDkgICB9ICwgCisgICAgeyAgMTgzOTggICAsICAgLTEwNDAgICB9ICwgCisgICAgeyAgMTgzOTIgICAsICAgLTExMzAgICB9ICwgCisgICAgeyAgMTgzODcgICAsICAgLTEyMjAgICB9ICwgCisgICAgeyAgMTgzODAgICAsICAgLTEzMTAgICB9ICwgCisgICAgeyAgMTgzNzQgICAsICAgLTE0MDEgICB9ICwgCisgICAgeyAgMTgzNjcgICAsICAgLTE0OTEgICB9ICwgCisgICAgeyAgMTgzNTkgICAsICAgLTE1ODEgICB9ICwgCisgICAgeyAgMTgzNTEgICAsICAgLTE2NzEgICB9ICwgCisgICAgeyAgMTgzNDMgICAsICAgLTE3NjEgICB9ICwgCisgICAgeyAgMTgzMzQgICAsICAgLTE4NTEgICB9ICwgCisgICAgeyAgMTgzMjQgICAsICAgLTE5NDEgICB9ICwgCisgICAgeyAgMTgzMTUgICAsICAgLTIwMzEgICB9ICwgCisgICAgeyAgMTgzMDUgICAsICAgLTIxMjEgICB9ICwgCisgICAgeyAgMTgyOTQgICAsICAgLTIyMTEgICB9ICwgCisgICAgeyAgMTgyODMgICAsICAgLTIzMDEgICB9ICwgCisgICAgeyAgMTgyNzEgICAsICAgLTIzOTAgICB9ICwgCisgICAgeyAgMTgyNTkgICAsICAgLTI0ODAgICB9ICwgCisgICAgeyAgMTgyNDcgICAsICAgLTI1NzAgICB9ICwgCisgICAgeyAgMTgyMzQgICAsICAgLTI2NTkgICB9ICwgCisgICAgeyAgMTgyMjEgICAsICAgLTI3NDkgICB9ICwgCisgICAgeyAgMTgyMDcgICAsICAgLTI4MzggICB9ICwgCisgICAgeyAgMTgxOTMgICAsICAgLTI5MjcgICB9ICwgCisgICAgeyAgMTgxNzggICAsICAgLTMwMTcgICB9ICwgCisgICAgeyAgMTgxNjMgICAsICAgLTMxMDYgICB9ICwgCisgICAgeyAgMTgxNDggICAsICAgLTMxOTUgICB9ICwgCisgICAgeyAgMTgxMzIgICAsICAgLTMyODQgICB9ICwgCisgICAgeyAgMTgxMTYgICAsICAgLTMzNzMgICB9ICwgCisgICAgeyAgMTgwOTkgICAsICAgLTM0NjIgICB9ICwgCisgICAgeyAgMTgwODIgICAsICAgLTM1NTEgICB9ICwgCisgICAgeyAgMTgwNjQgICAsICAgLTM2MzkgICB9ICwgCisgICAgeyAgMTgwNDYgICAsICAgLTM3MjggICB9ICwgCisgICAgeyAgMTgwMjcgICAsICAgLTM4MTYgICB9ICwgCisgICAgeyAgMTgwMDkgICAsICAgLTM5MDUgICB9ICwgCisgICAgeyAgMTc5ODkgICAsICAgLTM5OTMgICB9ICwgCisgICAgeyAgMTc5NjkgICAsICAgLTQwODEgICB9ICwgCisgICAgeyAgMTc5NDkgICAsICAgLTQxNzAgICB9ICwgCisgICAgeyAgMTc5MjggICAsICAgLTQyNTggICB9ICwgCisgICAgeyAgMTc5MDcgICAsICAgLTQzNDYgICB9ICwgCisgICAgeyAgMTc4ODYgICAsICAgLTQ0MzQgICB9ICwgCisgICAgeyAgMTc4NjQgICAsICAgLTQ1MjEgICB9ICwgCisgICAgeyAgMTc4NDEgICAsICAgLTQ2MDkgICB9ICwgCisgICAgeyAgMTc4MTggICAsICAgLTQ2OTYgICB9ICwgCisgICAgeyAgMTc3OTUgICAsICAgLTQ3ODQgICB9ICwgCisgICAgeyAgMTc3NzIgICAsICAgLTQ4NzEgICB9ICwgCisgICAgeyAgMTc3NDcgICAsICAgLTQ5NTggICB9ICwgCisgICAgeyAgMTc3MjMgICAsICAgLTUwNDUgICB9ICwgCisgICAgeyAgMTc2OTggICAsICAgLTUxMzIgICB9ICwgCisgICAgeyAgMTc2NzIgICAsICAgLTUyMTkgICB9ICwgCisgICAgeyAgMTc2NDcgICAsICAgLTUzMDYgICB9ICwgCisgICAgeyAgMTc2MjAgICAsICAgLTUzOTIgICB9ICwgCisgICAgeyAgMTc1OTQgICAsICAgLTU0NzkgICB9ICwgCisgICAgeyAgMTc1NjcgICAsICAgLTU1NjUgICB9ICwgCisgICAgeyAgMTc1MzkgICAsICAgLTU2NTEgICB9ICwgCisgICAgeyAgMTc1MTEgICAsICAgLTU3MzcgICB9ICwgCisgICAgeyAgMTc0ODMgICAsICAgLTU4MjMgICB9ICwgCisgICAgeyAgMTc0NTQgICAsICAgLTU5MDkgICB9ICwgCisgICAgeyAgMTc0MjUgICAsICAgLTU5OTQgICB9ICwgCisgICAgeyAgMTczOTUgICAsICAgLTYwODAgICB9ICwgCisgICAgeyAgMTczNjUgICAsICAgLTYxNjUgICB9ICwgCisgICAgeyAgMTczMzUgICAsICAgLTYyNTAgICB9ICwgCisgICAgeyAgMTczMDQgICAsICAgLTYzMzUgICB9ICwgCisgICAgeyAgMTcyNzIgICAsICAgLTY0MjAgICB9ICwgCisgICAgeyAgMTcyNDEgICAsICAgLTY1MDUgICB9ICwgCisgICAgeyAgMTcyMDggICAsICAgLTY1OTAgICB9ICwgCisgICAgeyAgMTcxNzYgICAsICAgLTY2NzQgICB9ICwgCisgICAgeyAgMTcxNDMgICAsICAgLTY3NTggICB9ICwgCisgICAgeyAgMTcxMTAgICAsICAgLTY4NDIgICB9ICwgCisgICAgeyAgMTcwNzYgICAsICAgLTY5MjYgICB9ICwgCisgICAgeyAgMTcwNDIgICAsICAgLTcwMTAgICB9ICwgCisgICAgeyAgMTcwMDcgICAsICAgLTcwOTMgICB9ICwgCisgICAgeyAgMTY5NzIgICAsICAgLTcxNzcgICB9ICwgCisgICAgeyAgMTY5MzcgICAsICAgLTcyNjAgICB9ICwgCisgICAgeyAgMTY5MDEgICAsICAgLTczNDMgICB9ICwgCisgICAgeyAgMTY4NjQgICAsICAgLTc0MjYgICB9ICwgCisgICAgeyAgMTY4MjggICAsICAgLTc1MDkgICB9ICwgCisgICAgeyAgMTY3OTEgICAsICAgLTc1OTEgICB9ICwgCisgICAgeyAgMTY3NTMgICAsICAgLTc2NzQgICB9ICwgCisgICAgeyAgMTY3MTUgICAsICAgLTc3NTYgICB9ICwgCisgICAgeyAgMTY2NzcgICAsICAgLTc4MzggICB9ICwgCisgICAgeyAgMTY2MzggICAsICAgLTc5MTkgICB9ICwgCisgICAgeyAgMTY1OTkgICAsICAgLTgwMDEgICB9ICwgCisgICAgeyAgMTY1NjAgICAsICAgLTgwODIgICB9ICwgCisgICAgeyAgMTY1MjAgICAsICAgLTgxNjQgICB9ICwgCisgICAgeyAgMTY0ODAgICAsICAgLTgyNDUgICB9ICwgCisgICAgeyAgMTY0MzkgICAsICAgLTgzMjUgICB9ICwgCisgICAgeyAgMTYzOTggICAsICAgLTg0MDYgICB9ICwgCisgICAgeyAgMTYzNTcgICAsICAgLTg0ODYgICB9ICwgCisgICAgeyAgMTYzMTUgICAsICAgLTg1NjcgICB9ICwgCisgICAgeyAgMTYyNzIgICAsICAgLTg2NDcgICB9ICwgCisgICAgeyAgMTYyMzAgICAsICAgLTg3MjYgICB9ICwgCisgICAgeyAgMTYxODcgICAsICAgLTg4MDYgICB9ICwgCisgICAgeyAgMTYxNDMgICAsICAgLTg4ODUgICB9ICwgCisgICAgeyAgMTYxMDAgICAsICAgLTg5NjQgICB9ICwgCisgICAgeyAgMTYwNTUgICAsICAgLTkwNDMgICB9ICwgCisgICAgeyAgMTYwMTEgICAsICAgLTkxMjIgICB9ICwgCisgICAgeyAgMTU5NjYgICAsICAgLTkyMDAgICB9ICwgCisgICAgeyAgMTU5MjAgICAsICAgLTkyNzkgICB9ICwgCisgICAgeyAgMTU4NzUgICAsICAgLTkzNTcgICB9ICwgCisgICAgeyAgMTU4MjkgICAsICAgLTk0MzUgICB9ICwgCisgICAgeyAgMTU3ODIgICAsICAgLTk1MTIgICB9ICwgCisgICAgeyAgMTU3MzUgICAsICAgLTk1ODkgICB9ICwgCisgICAgeyAgMTU2ODggICAsICAgLTk2NjcgICB9ICwgCisgICAgeyAgMTU2NDAgICAsICAgLTk3NDQgICB9ICwgCisgICAgeyAgMTU1OTIgICAsICAgLTk4MjAgICB9ICwgCisgICAgeyAgMTU1NDQgICAsICAgLTk4OTcgICB9ICwgCisgICAgeyAgMTU0OTUgICAsICAgLTk5NzMgICB9ICwgCisgICAgeyAgMTU0NDYgICAsICAgLTEwMDQ5ICAgfSAsIAorICAgIHsgIDE1Mzk2ICAgLCAgIC0xMDEyNCAgIH0gLCAKKyAgICB7ICAxNTM0NyAgICwgICAtMTAyMDAgICB9ICwgCisgICAgeyAgMTUyOTYgICAsICAgLTEwMjc1ICAgfSAsIAorICAgIHsgIDE1MjQ2ICAgLCAgIC0xMDM1MCAgIH0gLCAKKyAgICB7ICAxNTE5NSAgICwgICAtMTA0MjUgICB9ICwgCisgICAgeyAgMTUxNDMgICAsICAgLTEwNDk5ICAgfSAsIAorICAgIHsgIDE1MDkyICAgLCAgIC0xMDU3MyAgIH0gLCAKKyAgICB7ICAxNTA0MCAgICwgICAtMTA2NDcgICB9ICwgCisgICAgeyAgMTQ5ODcgICAsICAgLTEwNzIxICAgfSAsIAorICAgIHsgIDE0OTM0ICAgLCAgIC0xMDc5NCAgIH0gLCAKKyAgICB7ICAxNDg4MSAgICwgICAtMTA4NjggICB9ICwgCisgICAgeyAgMTQ4MjggICAsICAgLTEwOTQxICAgfSAsIAorICAgIHsgIDE0Nzc0ICAgLCAgIC0xMTAxMyAgIH0gLCAKKyAgICB7ICAxNDcxOSAgICwgICAtMTEwODYgICB9ICwgCisgICAgeyAgMTQ2NjUgICAsICAgLTExMTU4ICAgfSAsIAorICAgIHsgIDE0NjEwICAgLCAgIC0xMTIzMCAgIH0gLCAKKyAgICB7ICAxNDU1NSAgICwgICAtMTEzMDEgICB9ICwgCisgICAgeyAgMTQ0OTkgICAsICAgLTExMzcyICAgfSAsIAorICAgIHsgIDE0NDQzICAgLCAgIC0xMTQ0NCAgIH0gLCAKKyAgICB7ICAxNDM4NyAgICwgICAtMTE1MTQgICB9ICwgCisgICAgeyAgMTQzMzAgICAsICAgLTExNTg1ICAgfSAsIAorICAgIHsgIDE0MjczICAgLCAgIC0xMTY1NSAgIH0gLCAKKyAgICB7ICAxNDIxNiAgICwgICAtMTE3MjUgICB9ICwgCisgICAgeyAgMTQxNTggICAsICAgLTExNzk1ICAgfSAsIAorICAgIHsgIDE0MTAwICAgLCAgIC0xMTg2NCAgIH0gLCAKKyAgICB7ICAxNDA0MSAgICwgICAtMTE5MzMgICB9ICwgCisgICAgeyAgMTM5ODMgICAsICAgLTEyMDAyICAgfSAsIAorICAgIHsgIDEzOTI0ICAgLCAgIC0xMjA3MCAgIH0gLCAKKyAgICB7ICAxMzg2NCAgICwgICAtMTIxMzggICB9ICwgCisgICAgeyAgMTM4MDQgICAsICAgLTEyMjA2ICAgfSAsIAorICAgIHsgIDEzNzQ0ICAgLCAgIC0xMjI3NCAgIH0gLCAKKyAgICB7ICAxMzY4NCAgICwgICAtMTIzNDEgICB9ICwgCisgICAgeyAgMTM2MjMgICAsICAgLTEyNDA4ICAgfSAsIAorICAgIHsgIDEzNTYyICAgLCAgIC0xMjQ3NSAgIH0gLCAKKyAgICB7ICAxMzUwMSAgICwgICAtMTI1NDEgICB9ICwgCisgICAgeyAgMTM0MzkgICAsICAgLTEyNjA4ICAgfSAsIAorICAgIHsgIDEzMzc3ICAgLCAgIC0xMjY3MyAgIH0gLCAKKyAgICB7ICAxMzMxNCAgICwgICAtMTI3MzkgICB9ICwgCisgICAgeyAgMTMyNTIgICAsICAgLTEyODA0ICAgfSAsIAorICAgIHsgIDEzMTg5ICAgLCAgIC0xMjg2OSAgIH0gLCAKKyAgICB7ICAxMzEyNSAgICwgICAtMTI5MzQgICB9ICwgCisgICAgeyAgMTMwNjIgICAsICAgLTEyOTk4ICAgfSAKKyAgICB9OworY29zX21zaW5fdAlzX2Nvc19tc2luXzY0W0RDVF9MRU5HVEhdID0geworezE4NDI2LAktMjF9LAorezE4NDI2LAktNjZ9LAorezE4NDI2LAktMTEwfSwKK3sxODQyNiwJLTE1NH0sCit7MTg0MjUsCS0xOTh9LAorezE4NDI1LAktMjQyfSwKK3sxODQyNCwJLTI4Nn0sCit7MTg0MjQsCS0zMzF9LAorezE4NDIzLAktMzc0fSwKK3sxODQyMSwJLTQxOX0sCit7MTg0MjEsCS00NjN9LAorezE4NDE5LAktNTA3fSwKK3sxODQxOCwJLTU1Mn0sCit7MTg0MTcsCS01OTV9LAorezE4NDE1LAktNjM5fSwKK3sxODQxNCwJLTY4NH0sCit7MTg0MTIsCS03Mjh9LAorezE4NDEwLAktNzcyfSwKK3sxODQwOCwJLTgxNn0sCit7MTg0MDYsCS04NjB9LAorezE4NDA0LAktOTA0fSwKK3sxODQwMiwJLTk0OX0sCit7MTg0MDAsCS05OTJ9LAorezE4Mzk3LAktMTAzN30sCit7MTgzOTQsCS0xMDgxfSwKK3sxODM5MiwJLTExMjV9LAorezE4Mzg5LAktMTE2OX0sCit7MTgzODcsCS0xMjEzfSwKK3sxODM4NCwJLTEyNTd9LAorezE4MzgwLAktMTMwMX0sCit7MTgzNzgsCS0xMzQ1fSwKK3sxODM3NCwJLTEzODl9LAorezE4MzcxLAktMTQzM30sCit7MTgzNjcsCS0xNDc3fSwKK3sxODM2NCwJLTE1MjF9LAorezE4MzYwLAktMTU2Nn0sCit7MTgzNTYsCS0xNjA5fSwKK3sxODM1MiwJLTE2NTN9LAorezE4MzQ4LAktMTY5N30sCit7MTgzNDQsCS0xNzQyfSwKK3sxODMzOSwJLTE3ODV9LAorezE4MzM1LAktMTgyOX0sCit7MTgzMzEsCS0xODczfSwKK3sxODMyNiwJLTE5MTd9LAorezE4MzIyLAktMTk2MX0sCit7MTgzMTcsCS0yMDA1fSwKK3sxODMxMiwJLTIwNDl9LAorezE4MzA3LAktMjA5Mn0sCit7MTgzMDIsCS0yMTM3fSwKK3sxODI5NywJLTIxODB9LAorezE4MjkyLAktMjIyNH0sCit7MTgyODYsCS0yMjY4fSwKK3sxODI4MSwJLTIzMTJ9LAorezE4Mjc1LAktMjM1Nn0sCit7MTgyNzAsCS0yMzk5fSwKK3sxODI2NCwJLTI0NDN9LAorezE4MjU4LAktMjQ4N30sCit7MTgyNTIsCS0yNTMxfSwKK3sxODI0NiwJLTI1NzR9LAorezE4MjQwLAktMjYxOH0sCit7MTgyMzMsCS0yNjYyfSwKK3sxODIyNywJLTI3MDZ9LAorezE4MjIwLAktMjc0OX0sCit7MTgyMTQsCS0yNzkzfSwKK3sxODIwNywJLTI4MzZ9LAorezE4MjAwLAktMjg4MH0sCit7MTgxOTMsCS0yOTI0fSwKK3sxODE4NiwJLTI5Njd9LAorezE4MTc5LAktMzAxMX0sCit7MTgxNzIsCS0zMDU1fSwKK3sxODE2NCwJLTMwOTh9LAorezE4MTU3LAktMzE0Mn0sCit7MTgxNDksCS0zMTg1fSwKK3sxODE0MSwJLTMyMjl9LAorezE4MTM0LAktMzI3Mn0sCit7MTgxMjYsCS0zMzE2fSwKK3sxODExOCwJLTMzNTl9LAorezE4MTA5LAktMzQwM30sCit7MTgxMDEsCS0zNDQ2fSwKK3sxODA5NCwJLTM0ODl9LAorezE4MDg1LAktMzUzM30sCit7MTgwNzYsCS0zNTc2fSwKK3sxODA2OCwJLTM2MTl9LAorezE4MDU5LAktMzY2M30sCit7MTgwNTAsCS0zNzA2fSwKK3sxODA0MSwJLTM3NDl9LAorezE4MDMyLAktMzc5Mn0sCit7MTgwMjMsCS0zODM2fSwKK3sxODAxNCwJLTM4Nzl9LAorezE4MDA1LAktMzkyMn0sCit7MTc5OTUsCS0zOTY1fSwKK3sxNzk4NiwJLTQwMDh9LAorezE3OTc1LAktNDA1MX0sCit7MTc5NjYsCS00MDk0fSwKK3sxNzk1NiwJLTQxMzh9LAorezE3OTQ2LAktNDE4MH0sCit7MTc5MzYsCS00MjI0fSwKK3sxNzkyNiwJLTQyNjZ9LAorezE3OTE2LAktNDMwOX0sCit7MTc5MDUsCS00MzUzfSwKK3sxNzg5NSwJLTQzOTV9LAorezE3ODg0LAktNDQzOH0sCit7MTc4NzQsCS00NDgxfSwKK3sxNzg2MywJLTQ1MjR9LAorezE3ODUyLAktNDU2N30sCit7MTc4NDEsCS00NjA5fSwKK3sxNzgzMCwJLTQ2NTJ9LAorezE3ODE5LAktNDY5NX0sCit7MTc4MDcsCS00NzM4fSwKK3sxNzc5NiwJLTQ3ODB9LAorezE3Nzg0LAktNDgyM30sCit7MTc3NzIsCS00ODY1fSwKK3sxNzc2MSwJLTQ5MDh9LAorezE3NzQ5LAktNDk1MX0sCit7MTc3MzgsCS00OTkzfSwKK3sxNzcyNSwJLTUwMzZ9LAorezE3NzEzLAktNTA3OH0sCit7MTc3MDEsCS01MTIxfSwKK3sxNzY4OSwJLTUxNjN9LAorezE3Njc2LAktNTIwNX0sCit7MTc2NjQsCS01MjQ4fSwKK3sxNzY1MSwJLTUyOTB9LAorezE3NjM4LAktNTMzM30sCit7MTc2MjYsCS01Mzc1fSwKK3sxNzYxMywJLTU0MTd9LAorezE3NTk5LAktNTQ1OX0sCit7MTc1ODYsCS01NTAxfSwKK3sxNzU3MywJLTU1NDR9LAorezE3NTYwLAktNTU4Nn0sCit7MTc1NDYsCS01NjI3fSwKK3sxNzUzMywJLTU2NzB9LAorezE3NTE5LAktNTcxMn0sCit7MTc1MDUsCS01NzUzfSwKK3sxNzQ5MiwJLTU3OTV9LAorezE3NDc4LAktNTgzN30sCit7MTc0NjQsCS01ODc5fSwKK3sxNzQ1MCwJLTU5MjF9LAorezE3NDM1LAktNTk2M30sCit7MTc0MjEsCS02MDA1fSwKK3sxNzQwNiwJLTYwNDZ9LAorezE3MzkyLAktNjA4OH0sCit7MTczNzcsCS02MTMwfSwKK3sxNzM2MywJLTYxNzJ9LAorezE3MzQ4LAktNjIxM30sCit7MTczMzMsCS02MjU0fSwKK3sxNzMxOCwJLTYyOTZ9LAorezE3MzAzLAktNjMzOH0sCit7MTcyODgsCS02Mzc5fSwKK3sxNzI3MiwJLTY0MjB9LAorezE3MjU3LAktNjQ2Mn0sCit7MTcyNDEsCS02NTAzfSwKK3sxNzIyNSwJLTY1NDV9LAorezE3MjEwLAktNjU4Nn0sCit7MTcxOTQsCS02NjI3fSwKK3sxNzE3OCwJLTY2Njh9LAorezE3MTYyLAktNjcwOX0sCit7MTcxNDUsCS02NzUwfSwKK3sxNzEzMCwJLTY3OTF9LAorezE3MTEzLAktNjgzMn0sCit7MTcwOTcsCS02ODc0fSwKK3sxNzA4MCwJLTY5MTV9LAorezE3MDY0LAktNjk1Nn0sCit7MTcwNDcsCS02OTk2fSwKK3sxNzAzMCwJLTcwMzd9LAorezE3MDEzLAktNzA3OH0sCit7MTY5OTYsCS03MTE5fSwKK3sxNjk3OSwJLTcxNTl9LAorezE2OTYyLAktNzIwMH0sCit7MTY5NDUsCS03MjQxfSwKK3sxNjkyNywJLTcyODF9LAorezE2OTEwLAktNzMyMn0sCit7MTY4OTIsCS03MzYyfSwKK3sxNjg3NCwJLTc0MDN9LAorezE2ODU2LAktNzQ0NH0sCit7MTY4MzgsCS03NDg0fSwKK3sxNjgyMSwJLTc1MjR9LAorezE2ODAyLAktNzU2NH0sCit7MTY3ODQsCS03NjA1fSwKK3sxNjc2NiwJLTc2NDV9LAorezE2NzQ4LAktNzY4NX0sCit7MTY3MjksCS03NzI1fSwKK3sxNjcxMSwJLTc3NjV9LAorezE2NjkyLAktNzgwNX0sCit7MTY2NzQsCS03ODQ1fSwKK3sxNjY1NCwJLTc4ODV9LAorezE2NjM1LAktNzkyNX0sCit7MTY2MTYsCS03OTY0fSwKK3sxNjU5NywJLTgwMDR9LAorezE2NTc4LAktODA0NH0sCit7MTY1NTksCS04MDg0fSwKK3sxNjUzOSwJLTgxMjR9LAorezE2NTIwLAktODE2NH0sCit7MTY1MDAsCS04MjAzfSwKK3sxNjQ4MCwJLTgyNDJ9LAorezE2NDYxLAktODI4Mn0sCit7MTY0NDEsCS04MzIyfSwKK3sxNjQyMSwJLTgzNjF9LAorezE2NDAxLAktODQwMH0sCit7MTYzODAsCS04NDQwfSwKK3sxNjM2MCwJLTg0Nzl9LAorezE2MzQwLAktODUxOH0sCit7MTYzMTksCS04NTU3fSwKK3sxNjI5OSwJLTg1OTd9LAorezE2Mjc4LAktODYzNX0sCit7MTYyNTcsCS04Njc0fSwKK3sxNjIzNywJLTg3MTN9LAorezE2MjE1LAktODc1Mn0sCit7MTYxOTUsCS04NzkxfSwKK3sxNjE3MywJLTg4Mjl9LAorezE2MTUyLAktODg2OH0sCit7MTYxMzEsCS04OTA3fSwKK3sxNjExMCwJLTg5NDZ9LAorezE2MDg4LAktODk4NX0sCit7MTYwNjcsCS05MDIzfSwKK3sxNjA0NSwJLTkwNjF9LAorezE2MDIzLAktOTEwMH0sCit7MTYwMDEsCS05MTM4fSwKK3sxNTk3OSwJLTkxNzZ9LAorezE1OTU3LAktOTIxNX0sCit7MTU5MzUsCS05MjUzfSwKK3sxNTkxMywJLTkyOTF9LAorezE1ODkxLAktOTMyOX0sCit7MTU4NjgsCS05MzY3fSwKK3sxNTg0NiwJLTk0MDV9LAorezE1ODIzLAktOTQ0M30sCit7MTU4MDAsCS05NDgxfSwKK3sxNTc3OCwJLTk1MTl9LAorezE1NzU1LAktOTU1N30sCit7MTU3MzIsCS05NTk1fSwKK3sxNTcwOSwJLTk2MzJ9LAorezE1Njg2LAktOTY3MH0sCit7MTU2NjIsCS05NzA4fSwKK3sxNTYzOSwJLTk3NDV9LAorezE1NjE1LAktOTc4Mn0sCit7MTU1OTIsCS05ODIwfSwKK3sxNTU2OSwJLTk4NTd9LAorezE1NTQ0LAktOTg5NH0sCit7MTU1MjEsCS05OTMyfSwKK3sxNTQ5NywJLTk5Njl9LAorezE1NDczLAktMTAwMDZ9LAorezE1NDQ5LAktMTAwNDN9LAorezE1NDI1LAktMTAwODB9LAorezE1NDAxLAktMTAxMTd9LAorezE1Mzc3LAktMTAxNTR9LAorezE1MzUyLAktMTAxOTF9LAorezE1MzI3LAktMTAyMjd9LAorezE1MzAzLAktMTAyNjR9LAorezE1Mjc4LAktMTAzMDF9LAorezE1MjU0LAktMTAzMzd9LAorezE1MjI5LAktMTAzNzR9LAorezE1MjA0LAktMTA0MTF9LAorezE1MTgwLAktMTA0NDd9LAorezE1MTU0LAktMTA0ODN9LAorezE1MTI5LAktMTA1MTl9LAorezE1MTA0LAktMTA1NTZ9LAorezE1MDc4LAktMTA1OTJ9LAorezE1MDUzLAktMTA2Mjh9LAorezE1MDI3LAktMTA2NjR9LAorezE1MDAyLAktMTA3MDB9LAorezE0OTc2LAktMTA3MzZ9LAorezE0OTUwLAktMTA3NzJ9LAorezE0OTI0LAktMTA4MDh9LAorezE0ODk4LAktMTA4NDR9LAorezE0ODcyLAktMTA4Nzl9LAorezE0ODQ2LAktMTA5MTV9LAorezE0ODIwLAktMTA5NTB9LAorezE0Nzk0LAktMTA5ODV9LAorezE0NzY3LAktMTEwMjF9LAorezE0NzQxLAktMTEwNTZ9LAorezE0NzE0LAktMTEwOTJ9LAorezE0Njg3LAktMTExMjd9LAorezE0NjYxLAktMTExNjJ9LAorezE0NjM1LAktMTExOTd9LAorezE0NjA3LAktMTEyMzJ9LAorezE0NTgxLAktMTEyNjd9LAorezE0NTU0LAktMTEzMDJ9LAorezE0NTI2LAktMTEzMzd9LAorezE0NDk5LAktMTEzNzJ9LAorezE0NDcyLAktMTE0MDd9LAorezE0NDQ0LAktMTE0NDF9LAorezE0NDE3LAktMTE0NzZ9LAorezE0Mzg5LAktMTE1MTF9LAorezE0MzYyLAktMTE1NDV9LAorezE0MzM0LAktMTE1Nzl9LAorezE0MzA2LAktMTE2MTR9LAorezE0Mjc4LAktMTE2NDh9LAorezE0MjUxLAktMTE2ODJ9LAorezE0MjIyLAktMTE3MTZ9LAorezE0MTk0LAktMTE3NTB9LAorezE0MTY2LAktMTE3ODR9LAorezE0MTM3LAktMTE4MTh9LAorezE0MTA5LAktMTE4NTJ9LAorezE0MDgxLAktMTE4ODZ9LAorezE0MDUzLAktMTE5MTl9LAorezE0MDIzLAktMTE5NTN9LAorezEzOTk1LAktMTE5ODd9LAorezEzOTY2LAktMTIwMjB9LAorezEzOTM3LAktMTIwNTR9LAorezEzOTA5LAktMTIwODd9LAorezEzODc5LAktMTIxMjB9LAorezEzODUxLAktMTIxNTN9LAorezEzODIxLAktMTIxODd9LAorezEzNzkyLAktMTIyMjB9LAorezEzNzYzLAktMTIyNTN9LAorezEzNzMzLAktMTIyODZ9LAorezEzNzA0LAktMTIzMTl9LAorezEzNjc0LAktMTIzNTF9LAorezEzNjQ1LAktMTIzODV9LAorezEzNjE1LAktMTI0MTd9LAorezEzNTg1LAktMTI0NTB9LAorezEzNTU1LAktMTI0ODJ9LAorezEzNTI1LAktMTI1MTR9LAorezEzNDk1LAktMTI1NDZ9LAorezEzNDY1LAktMTI1Nzl9LAorezEzNDM1LAktMTI2MTF9LAorezEzNDA1LAktMTI2NDR9LAorezEzMzc0LAktMTI2NzZ9LAorezEzMzQ1LAktMTI3MDh9LAorezEzMzE0LAktMTI3Mzl9LAorezEzMjgzLAktMTI3NzJ9Cit9OworCisKKworY29zX21zaW5fdAkqc19jb3NfbXNpbl90YWJsZVtdID0ge3NfY29zX21zaW5fMiwgIHNfY29zX21zaW5fNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19jb3NfbXNpbl84LCAgc19jb3NfbXNpbl8xNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19jb3NfbXNpbl8zMiwgc19jb3NfbXNpbl82NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisKZGlmZiAtLWdpdCBhL2puaS9wanByb2plY3QtYW5kcm9pZC8uc3ZuL3ByaXN0aW5lLzI2LzI2ZWQ3YmU2YTU3OWZkNjUwMjk0ZWExM2M2NWU0YjMyNDE4YmJhMTUuc3ZuLWJhc2UgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNmVkN2JlNmE1NzlmZDY1MDI5NGVhMTNjNjVlNGIzMjQxOGJiYTE1LnN2bi1iYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzY4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvLnN2bi9wcmlzdGluZS8yNi8yNmVkN2JlNmE1NzlmZDY1MDI5NGVhMTNjNjVlNGIzMjQxOGJiYTE1LnN2bi1iYXNlCkBAIC0wLDAgKzEsNzQgQEAKKy8qICRJZCQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpMSUJfVVRJTF9NRDVfSF9fCisjZGVmaW5lIF9fUEpMSUJfVVRJTF9NRDVfSF9fCisKKy8qKgorICogQGZpbGUgbWQ1LmgKKyAqIEBicmllZiBNRDUgRnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPHBqL3R5cGVzLmg+CisKK1BKX0JFR0lOX0RFQ0wKKworLyoqCisgKiBAZGVmZ3JvdXAgUEpMSUJfVVRJTF9NRDUgTUQ1CisgKiBAaW5ncm91cCBQSkxJQl9VVElMX0VOQ1JZUFRJT04KKyAqIEB7CisgKi8KKworCisvKiogTUQ1IGNvbnRleHQuICovCit0eXBlZGVmIHN0cnVjdCBwal9tZDVfY29udGV4dAoreworCXBqX3VpbnQzMl90IGJ1Zls0XTsJLyoqPCBidWYgICAgKi8KKwlwal91aW50MzJfdCBiaXRzWzJdOwkvKio8IGJpdHMgICAqLworCXBqX3VpbnQ4X3QgIGluWzY0XTsJLyoqPCBpbgkgICAgKi8KK30gcGpfbWQ1X2NvbnRleHQ7CisKKy8qKiBJbml0aWFsaXplIHRoZSBhbGdvcml0aG0uIAorICogIEBwYXJhbSBwbXMJCU1ENSBjb250ZXh0LgorICovCitQSl9ERUNMKHZvaWQpIHBqX21kNV9pbml0KHBqX21kNV9jb250ZXh0ICpwbXMpOworCisvKiogQXBwZW5kIGEgc3RyaW5nIHRvIHRoZSBtZXNzYWdlLiAKKyAqICBAcGFyYW0gcG1zCQlNRDUgY29udGV4dC4KKyAqICBAcGFyYW0gZGF0YQkJRGF0YS4KKyAqICBAcGFyYW0gbmJ5dGVzCUxlbmd0aCBvZiBkYXRhLgorICovCitQSl9ERUNMKHZvaWQpIHBqX21kNV91cGRhdGUoIHBqX21kNV9jb250ZXh0ICpwbXMsIAorCQkJICAgICBjb25zdCBwal91aW50OF90ICpkYXRhLCB1bnNpZ25lZCBuYnl0ZXMpOworCisvKiogRmluaXNoIHRoZSBtZXNzYWdlIGFuZCByZXR1cm4gdGhlIGRpZ2VzdC4gCisgKiAgQHBhcmFtIHBtcwkJTUQ1IGNvbnRleHQuCisgKiAgQHBhcmFtIGRpZ2VzdAkxNiBieXRlIGRpZ2VzdC4KKyAqLworUEpfREVDTCh2b2lkKSBwal9tZDVfZmluYWwocGpfbWQ1X2NvbnRleHQgKnBtcywgcGpfdWludDhfdCBkaWdlc3RbMTZdKTsKKworCisvKioKKyAqIEB9CisgKi8KKworUEpfRU5EX0RFQ0wKKworCisjZW5kaWYJLyogX19QSkxJQl9VVElMX01ENV9IX18gKi8K