ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggMmM4MTM1My4uMGE3MTg3YyAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNSArMSw1IEBACiAKLUxpYnBuZyAxLjIuMjByYzMgLSBBdWd1c3QgMzAsIDIwMDcKK0xpYnBuZyAxLjIuMjByYzQgLSBTZXB0ZW1iZXIgMSwgMjAwNwogCiBUaGlzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyByZWxlYXNlLiAgSXQgd2lsbCBiZSByZXBsYWNlZAogd2l0aGluIGEgZmV3IHdlZWtzIGJ5IGEgcHVibGljIHZlcnNpb24gb3IgYnkgYW5vdGhlciB0ZXN0IHZlcnNpb24uCkBAIC05LDMyICs5LDMyIEBACiBTb3VyY2UgZmlsZXMgd2l0aCBMRiBsaW5lIGVuZGluZ3MgKGZvciBVbml4L0xpbnV4KSBhbmQgd2l0aCBhCiAiY29uZmlndXJlIiBzY3JpcHQKIAotICAgbGlicG5nLTEuMi4yMHJjMy50YXIuZ3oKLSAgIGxpYnBuZy0xLjIuMjByYzMudGFyLmJ6MgorICAgbGlicG5nLTEuMi4yMHJjNC50YXIuZ3oKKyAgIGxpYnBuZy0xLjIuMjByYzQudGFyLmJ6MgogCiBTb3VyY2UgZmlsZXMgd2l0aCBMRiBsaW5lIGVuZGluZ3MgKGZvciBVbml4L0xpbnV4KSB3aXRob3V0IHRoZQogImNvbmZpZ3VyZSIgc2NyaXB0CiAKLSAgIGxpYnBuZy0xLjIuMjByYzMtbm8tY29uZmlnLnRhci5negotICAgbGlicG5nLTEuMi4yMHJjMy1uby1jb25maWcudGFyLmJ6MgorICAgbGlicG5nLTEuMi4yMHJjNC1uby1jb25maWcudGFyLmd6CisgICBsaWJwbmctMS4yLjIwcmM0LW5vLWNvbmZpZy50YXIuYnoyCiAKIFNvdXJjZSBmaWxlcyB3aXRoIENSTEYgbGluZSBlbmRpbmdzIChmb3IgV2luZG93cyksIHdpdGhvdXQgdGhlCiAiY29uZmlndXJlIiBzY3JpcHQKIAotICAgbHAxMjIwcjAzLnppcAotICAgbHAxMjIwcjAzLnRhci5iejIKKyAgIGxwMTIyMHIwNC56aXAKKyAgIGxwMTIyMHIwNC50YXIuYnoyCiAKIFByb2plY3QgZmlsZXMKIAotICAgbGlicG5nLTEuMi4yMHJjMy1wcm9qZWN0LW5ldHdhcmUuemlwCi0gICBsaWJwbmctMS4yLjIwcmMzLXByb2plY3Qtd2luY2UuemlwCisgICBsaWJwbmctMS4yLjIwcmM0LXByb2plY3QtbmV0d2FyZS56aXAKKyAgIGxpYnBuZy0xLjIuMjByYzQtcHJvamVjdC13aW5jZS56aXAKIAogT3RoZXIgaW5mb3JtYXRpb246CiAKLSAgIGxpYnBuZy0xLjIuMjByYzMtUkVBRE1FLnR4dAotICAgbGlicG5nLTEuMi4yMHJjMy1LTk9XTkJVR1MudHh0Ci0gICBsaWJwbmctMS4yLjIwcmMzLUxJQ0VOU0UudHh0Ci0gICBsaWJwbmctMS4yLjIwcmMzLVkySy1jb21wbGlhbmNlLnR4dAorICAgbGlicG5nLTEuMi4yMHJjNC1SRUFETUUudHh0CisgICBsaWJwbmctMS4yLjIwcmM0LUtOT1dOQlVHUy50eHQKKyAgIGxpYnBuZy0xLjIuMjByYzQtTElDRU5TRS50eHQKKyAgIGxpYnBuZy0xLjIuMjByYzQtWTJLLWNvbXBsaWFuY2UudHh0CiAKIENoYW5nZXMgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UgKDEuMi4xOSk6CiAKQEAgLTYyLDEzICs2MiwxNiBAQAogICBSZXZpc2VkICNpZmRlZnMgdG8gZW5zdXJlIG9uZSBhbmQgb25seSBvbmUgb2YgcG5nZ2NjcmQuYywgcG5ndmNyZC5jLAogICAgIG9yIHBhcnQgb2YgcG5ncnV0aWwuYyBpcyBzZWxlY3RlZC4KIAotdmVyc2lvbiAxLjIuMjByYzMgW0F1Z3VzdCAzMCwgMjAwN10KK3ZlcnNpb24gMS4yLjIwcmMzIFtTZXB0ZW1iZXIgMSwgMjAwN10KICAgUmVtb3ZlIGEgbGl0dGxlIG1vcmUgY29kZSBpbiBwbmd3dXRpbC5jIHdoZW4gUE5HX05PX1dSSVRFX0ZJTFRFUiBpcyBzZWxlY3RlZC4KICAgQWRkZWQgL0QgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgdG8gdmlzdWFsNmMgYW5kIHZpc3VhbGM3MSBwcm9qZWN0cy4KICAgQ29tcGlsZSBwbmdfbW14X3N1cHBvcnQoKSBpbiBwbmcuYyBldmVuIHdoZW4gUE5HX05PX01NWF9DT0RFIGlzIGRlZmluZWQuCiAgIFJlc3RvcmVkIGEgInN1cGVyZmx1b3VzIiAjaWZkZWYgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIDEuMi4yMHJjMiBwbmdnY2NyZC5jLAogICAgIGJyZWFraW5nIHRoZSBwbmdfbW14X3N1cHBvcnQoKSBmdW5jdGlvbi4KIAordmVyc2lvbiAxLjIuMjByYzQgW1NlcHRlbWJlciAxLCAyMDA3XQorICBSZW1vdmVkIEludGVsIGNvbnRyaWJ1dGlvbnMgKE1NWCwgT3B0aW1pemVkIEMpLgorCiBTZW5kIGNvbW1lbnRzL2NvcnJlY3Rpb25zL2NvbW1lbmRhdGlvbnMgdG8gcG5nLW1uZy1pbXBsZW1lbnQgYXQgbGlzdHMuc2YubmV0CiAKIChzdWJzY3JpcHRpb24gcmVxdWlyZWQ7IHZpc2l0IApkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKaW5kZXggZTA5ZWViMy4uZmZiOTU0ZSAxMDA2NDQKLS0tIGEvQ0hBTkdFUworKysgYi9DSEFOR0VTCkBAIC0xOTI2LDYgKzE5MjYsOSBAQAogICBSZXN0b3JlZCBhICJzdXBlcmZsdW91cyIgI2lmZGVmIHRoYXQgd2FzIHJlbW92ZWQgZnJvbSAxLjIuMjByYzIgcG5nZ2NjcmQuYywKICAgICBicmVha2luZyB0aGUgcG5nX21teF9zdXBwb3J0KCkgZnVuY3Rpb24uCiAKK3ZlcnNpb24gMS4yLjIwcmM0IFtTZXB0ZW1iZXIgMSwgMjAwN10KKyAgUmVtb3ZlZCBJbnRlbCBjb250cmlidXRpb25zIChNTVgsIE9wdGltaXplZCBDKS4KKwogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvIHBuZy1tbmctaW1wbGVtZW50IGF0IGxpc3RzLnNmLm5ldAogKHN1YnNjcmlwdGlvbiByZXF1aXJlZDsgdmlzaXQKIGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3BuZy1tbmctaW1wbGVtZW50CmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCBlZDhiNTEzLi43NWY1OGU4IDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEsNSArMSw1IEBACiAKLUluc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3CitJbnN0YWxsaW5nIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjNCAtIFNlcHRlbWJlciAxLCAyMDA3CiAKIE9uIFVuaXgvTGludXggYW5kIHNpbWlsYXIgc3lzdGVtcywgeW91IGNhbiBzaW1wbHkgdHlwZQogCkBAIC00NCw3ICs0NCw3IEBACiBjb3JyZXNwb25kIHRvIHRoZSB2ZXJzaW9uIG9mIHpsaWIgdGhhdCdzIGluc3RhbGxlZC4KIAogWW91IGNhbiByZW5hbWUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgeW91IGRvd25sb2FkZWQgKHRoZXkKLW1pZ2h0IGJlIGNhbGxlZCAibGlicG5nLTEuMi4yMHJjMyIgb3IgImxwbmcxMDkiIGFuZCAiemxpYi0xLjIuMSIKK21pZ2h0IGJlIGNhbGxlZCAibGlicG5nLTEuMi4yMHJjNCIgb3IgImxwbmcxMDkiIGFuZCAiemxpYi0xLjIuMSIKIG9yICJ6bGliMTIxIikgc28gdGhhdCB5b3UgaGF2ZSBkaXJlY3RvcmllcyBjYWxsZWQgInpsaWIiIGFuZCAibGlicG5nIi4KIAogWW91ciBkaXJlY3Rvcnkgc3RydWN0dXJlIHNob3VsZCBsb29rIGxpa2UgdGhpczoKQEAgLTEwMSwxNSArMTAxLDkgQEAKICBDTWFrZUxpc3RzLnR4dCAgICA9PiAgImNtYWtlIiBzY3JpcHQKICBtYWtlZmlsZS5zdGQgICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgbWFrZWZpbGUuZWxmICAgICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSBzeW1ib2wgdmVyc2lvbmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgZ2NjLCBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmMzKQorICAgICAgICAgICAgICAgICAgICAgICBnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzQpCiAgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmMzKQotIG1ha2VmaWxlLmdjbW14ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjMywKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhc3NlbWJsZXIgY29kZSB0dW5lZCBmb3IgSW50ZWwgTU1YIHBsYXRmb3JtKQotIG1ha2VmaWxlLm5vbW14ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjMwotICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCB1c2UgSW50ZWwgTU1YIGFzc2VtYmxlciBjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmM0KQogIG1ha2VmaWxlLmdjYyAgICAgID0+ICBHZW5lcmljIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQogIG1ha2VmaWxlLmtuciAgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgIGFuc2kya25yIChSZXF1aXJlcyBhbnNpMmtuci5jIGZyb20KQEAgLTEzMSwxNCArMTI1LDE0IEBACiAgbWFrZWZpbGUub3BlbmJzZCAgPT4gIE9wZW5CU0QgbWFrZWZpbGUKICBtYWtlZmlsZS5zZ2kgICAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyBJUklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGliKQogIG1ha2VmaWxlLnNnZ2NjICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIChnY2MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzMpCisgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzQpCiAgbWFrZWZpbGUuc3Vub3MgICAgPT4gIFN1biBtYWtlZmlsZQogIG1ha2VmaWxlLnNvbGFyaXMgID0+ICBTb2xhcmlzIDIuWCBtYWtlZmlsZSAoZ2NjLAotICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmMzKQorICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmM0KQogIG1ha2VmaWxlLnNvbGFyaXMteDg2ID0+ICBTb2xhcmlzL2ludGVsTU1YIDIuWCBtYWtlZmlsZSAoZ2NjLAotICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmMzKQorICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmM0KQogIG1ha2VmaWxlLnNvOSAgICAgID0+ICBTb2xhcmlzIDkgbWFrZWZpbGUgKGdjYywKLSAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjMykKKyAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjNCkKICBtYWtlZmlsZS4zMnN1bnUgICA9PiAgU3VuIFVsdHJhIDMyLWJpdCBtYWtlZmlsZQogIG1ha2VmaWxlLjY0c3VudSAgID0+ICBTdW4gVWx0cmEgNjQtYml0IG1ha2VmaWxlCiAgbWFrZWZpbGUuc2NvICAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCkBAIC0xNTQsMTAgKzE0OCw3IEBACiAgbWFrZWZpbGUudGMzICAgICAgPT4gIFR1cmJvIEMgMy4wIG1ha2VmaWxlCiAgbWFrZWZpbGUuZGoyICAgICAgPT4gIERKR1BQIDIgbWFrZWZpbGUKICBtYWtlZmlsZS5tc2MgICAgICA9PiAgTWljcm9zb2Z0IEMgbWFrZWZpbGUKLSBtYWtlZmlsZS52Y2F3aW4zMiA9PiAgbWFrZWZpbGUgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIDUuMCBhbmQgbGF0ZXIgKHVzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyIGNvZGUgdHVuZWQgZm9yIEludGVsIE1NWCBwbGF0Zm9ybSkKLSBtYWtlZmlsZS52Y3dpbjMyICA9PiAgbWFrZWZpbGUgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIDQuMCBhbmQgbGF0ZXIgKGRvZXMKLSAgICAgICAgICAgICAgICAgICAgICAgbm90IHVzZSBhc3NlbWJsZXIgY29kZSkKKyBtYWtlZmlsZS52Y3dpbjMyICA9PiAgbWFrZWZpbGUgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIDQuMCBhbmQgbGF0ZXIKICBtYWtlZmlsZS5vczIgICAgICA9PiAgT1MvMiBNYWtlZmlsZSAoZ2NjIGFuZCBlbXgsIHJlcXVpcmVzIHBuZ29zMi5kZWYpCiAgcG5nb3MyLmRlZiAgICAgICAgPT4gIE9TLzIgbW9kdWxlIGRlZmluaXRpb24gZmlsZSB1c2VkIGJ5IG1ha2VmaWxlLm9zMgogIG1ha2VmaWxlLndhdGNvbSAgID0+ICBXYXRjb20gMTBhKyBNYWtlZmlsZSwgMzItYml0IGZsYXQgbWVtb3J5IG1vZGVsCmRpZmYgLS1naXQgYS9LTk9XTkJVRyBiL0tOT1dOQlVHCmluZGV4IDAyNDUxMjMuLmIxYTk0NmMgMTAwNjQ0Ci0tLSBhL0tOT1dOQlVHCisrKyBiL0tOT1dOQlVHCkBAIC0xLDUgKzEsNSBAQAogCi1Lbm93biBidWdzIGluIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjMworS25vd24gYnVncyBpbiBsaWJwbmcgdmVyc2lvbiAxLjIuMjByYzQKIAogMS4gQXByaWwgMjIsIDIwMDE6IHBuZ2djY3JkLmMgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gY3Jhc2ggb24gTmV0QlNEIHdoZW4KICAgIHJlYWRpbmcgaW50ZXJsYWNlZCBQTkcgZmlsZXMsIHdoZW4gYXNzZW1ibGVyIGNvZGUgaXMgZW5hYmxlZCBidXQgcnVubmluZwpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggOWY5YjEyMi4uMTUwMTE1MiAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC04LDcgKzgsNyBAQAogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogdGhpcyBzZW50ZW5jZS4KIAotbGlicG5nIHZlcnNpb25zIDEuMi42LCBBdWd1c3QgMTUsIDIwMDQsIHRocm91Z2ggMS4yLjIwcmMzLCBBdWd1c3QgMzAsIDIwMDcsIGFyZQorbGlicG5nIHZlcnNpb25zIDEuMi42LCBBdWd1c3QgMTUsIDIwMDQsIHRocm91Z2ggMS4yLjIwcmM0LCBTZXB0ZW1iZXIgMSwgMjAwNywgYXJlCiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTEwNiw0ICsxMDYsNCBAQAogCiBHbGVubiBSYW5kZXJzLVBlaHJzb24KIGdsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0Ci1BdWd1c3QgMzAsIDIwMDcKK1NlcHRlbWJlciAxLCAyMDA3CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGRlN2RkMzEuLjU0OWMyYzcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0zMyw3ICszMyw3IEBACiBFWFRSQV9MVExJQlJBUklFUz0gbGlicG5nLmxhCiBsaWJwbmcxMl9sYV9TT1VSQ0VTID0gcG5nLmMgcG5nc2V0LmMgcG5nZ2V0LmMgcG5ncnV0aWwuYyBwbmd0cmFucy5jIHBuZ3d1dGlsLmMgXAogCXBuZ3JlYWQuYyBwbmdyaW8uYyBwbmd3aW8uYyBwbmd3cml0ZS5jIHBuZ3J0cmFuLmMgXAotCXBuZ3d0cmFuLmMgcG5nbWVtLmMgcG5nZXJyb3IuYyBwbmdwcmVhZC5jIHBuZ2djY3JkLmMgXAorCXBuZ3d0cmFuLmMgcG5nbWVtLmMgcG5nZXJyb3IuYyBwbmdwcmVhZC5jIFwKIAlwbmcuaCBwbmdjb25mLmgKIGxpYnBuZ19sYV9TT1VSQ0VTID0gJChsaWJwbmcxMl9sYV9TT1VSQ0VTKQogCkBAIC04Myw3ICs4Myw3IEBACiAJJHtzcmNkaXJ9L2NvbnRyaWIvcG5nc3VpdGUvKiBcCiAJJHtzcmNkaXJ9L2NvbnRyaWIvdmlzdXBuZy8qIFwKIAkkKFRFU1RTKSBcCi0JZXhhbXBsZS5jIGxpYnBuZy50eHQgcG5ndmNyZC5jIAorCWV4YW1wbGUuYyBsaWJwbmcudHh0CiAKIENMRUFORklMRVM9IHBuZ291dC5wbmcgbGlicG5nMTIucGMgbGlicG5nMTItY29uZmlnIGxpYnBuZy52ZXJzIFwKIGxpYnBuZy5zeW0KZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggNDE5MTNlYi4uYTU2Mzc4YSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTg3LDggKzg3LDcgQEAKIAlsaWJwbmdfbGEtcG5ncmVhZC5sbyBsaWJwbmdfbGEtcG5ncmlvLmxvIGxpYnBuZ19sYS1wbmd3aW8ubG8gXAogCWxpYnBuZ19sYS1wbmd3cml0ZS5sbyBsaWJwbmdfbGEtcG5ncnRyYW4ubG8gXAogCWxpYnBuZ19sYS1wbmd3dHJhbi5sbyBsaWJwbmdfbGEtcG5nbWVtLmxvIFwKLQlsaWJwbmdfbGEtcG5nZXJyb3IubG8gbGlicG5nX2xhLXBuZ3ByZWFkLmxvIFwKLQlsaWJwbmdfbGEtcG5nZ2NjcmQubG8KKwlsaWJwbmdfbGEtcG5nZXJyb3IubG8gbGlicG5nX2xhLXBuZ3ByZWFkLmxvCiBhbV9saWJwbmdfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKIGxpYnBuZ19sYV9PQkpFQ1RTID0gJChhbV9saWJwbmdfbGFfT0JKRUNUUykKIGxpYnBuZzEyX2xhX0xJQkFERCA9CkBAIC05OSw3ICs5OCw3IEBACiAJbGlicG5nMTJfbGEtcG5nd2lvLmxvIGxpYnBuZzEyX2xhLXBuZ3dyaXRlLmxvIFwKIAlsaWJwbmcxMl9sYS1wbmdydHJhbi5sbyBsaWJwbmcxMl9sYS1wbmd3dHJhbi5sbyBcCiAJbGlicG5nMTJfbGEtcG5nbWVtLmxvIGxpYnBuZzEyX2xhLXBuZ2Vycm9yLmxvIFwKLQlsaWJwbmcxMl9sYS1wbmdwcmVhZC5sbyBsaWJwbmcxMl9sYS1wbmdnY2NyZC5sbworCWxpYnBuZzEyX2xhLXBuZ3ByZWFkLmxvCiBsaWJwbmcxMl9sYV9PQkpFQ1RTID0gJChhbV9saWJwbmcxMl9sYV9PQkpFQ1RTKQogYW1fcG5ndGVzdF9PQkpFQ1RTID0gcG5ndGVzdC4kKE9CSkVYVCkKIHBuZ3Rlc3RfT0JKRUNUUyA9ICQoYW1fcG5ndGVzdF9PQkpFQ1RTKQpAQCAtMTg0LDcgKzE4Myw2IEBACiBMREZMQUdTID0gQExERkxBR1NACiBMSUJPQkpTID0gQExJQk9CSlNACiBMSUJQTkdfREVGSU5FUyA9IEBMSUJQTkdfREVGSU5FU0AKLUxJQlBOR19OT19NTVggPSBATElCUE5HX05PX01NWEAKIExJQlMgPSBATElCU0AKIExJQlRPT0wgPSBATElCVE9PTEAKIExOX1MgPSBATE5fU0AKQEAgLTI4Niw3ICsyODQsNyBAQAogRVhUUkFfTFRMSUJSQVJJRVMgPSBsaWJwbmcubGEKIGxpYnBuZzEyX2xhX1NPVVJDRVMgPSBwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCiAJcG5ncmVhZC5jIHBuZ3Jpby5jIHBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5ncnRyYW4uYyBcCi0JcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMgcG5nZ2NjcmQuYyBcCisJcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMgXAogCXBuZy5oIHBuZ2NvbmYuaAogCiBsaWJwbmdfbGFfU09VUkNFUyA9ICQobGlicG5nMTJfbGFfU09VUkNFUykKQEAgLTMyMiw3ICszMjAsNyBAQAogCSR7c3JjZGlyfS9jb250cmliL3BuZ3N1aXRlLyogXAogCSR7c3JjZGlyfS9jb250cmliL3Zpc3VwbmcvKiBcCiAJJChURVNUUykgXAotCWV4YW1wbGUuYyBsaWJwbmcudHh0IHBuZ3ZjcmQuYyAKKwlleGFtcGxlLmMgbGlicG5nLnR4dAogCiBDTEVBTkZJTEVTID0gcG5nb3V0LnBuZyBsaWJwbmcxMi5wYyBsaWJwbmcxMi1jb25maWcgbGlicG5nLnZlcnMgXAogbGlicG5nLnN5bQpAQCAtNDU1LDcgKzQ1Myw2IEBACiAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJwbmcxMl9sYS1wbmcuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJwbmcxMl9sYS1wbmdlcnJvci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYnBuZzEyX2xhLXBuZ2djY3JkLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicG5nMTJfbGEtcG5nZ2V0LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicG5nMTJfbGEtcG5nbWVtLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicG5nMTJfbGEtcG5ncHJlYWQuUGxvQGFtX19xdW90ZUAKQEAgLTQ3MSw3ICs0NjgsNiBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYnBuZzEyX2xhLXBuZ3d1dGlsLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicG5nX2xhLXBuZy5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYnBuZ19sYS1wbmdlcnJvci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYnBuZ19sYS1wbmdnY2NyZC5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYnBuZ19sYS1wbmdnZXQuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJwbmdfbGEtcG5nbWVtLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlicG5nX2xhLXBuZ3ByZWFkLlBsb0BhbV9fcXVvdGVACkBAIC02MTMsMTMgKzYwOSw2IEBACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACiBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJwbmdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGlicG5nX2xhLXBuZ3ByZWFkLmxvIGB0ZXN0IC1mICdwbmdwcmVhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbmdwcmVhZC5jCiAKLWxpYnBuZ19sYS1wbmdnY2NyZC5sbzogcG5nZ2NjcmQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJwbmdfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYnBuZ19sYS1wbmdnY2NyZC5sbyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYnBuZ19sYS1wbmdnY2NyZC5UcG8iIC1jIC1vIGxpYnBuZ19sYS1wbmdnY2NyZC5sbyBgdGVzdCAtZiAncG5nZ2NjcmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcG5nZ2NjcmQuYzsgXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYnBuZ19sYS1wbmdnY2NyZC5UcG8iICIkKERFUERJUikvbGlicG5nX2xhLXBuZ2djY3JkLlBsbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWJwbmdfbGEtcG5nZ2NjcmQuVHBvIjsgZXhpdCAxOyBmaQotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncG5nZ2NjcmQuYycgb2JqZWN0PSdsaWJwbmdfbGEtcG5nZ2NjcmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYnBuZ19sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJwbmdfbGEtcG5nZ2NjcmQubG8gYHRlc3QgLWYgJ3BuZ2djY3JkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBuZ2djY3JkLmMKLQogbGlicG5nMTJfbGEtcG5nLmxvOiBwbmcuYwogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJwbmcxMl9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGlicG5nMTJfbGEtcG5nLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGlicG5nMTJfbGEtcG5nLlRwbyIgLWMgLW8gbGlicG5nMTJfbGEtcG5nLmxvIGB0ZXN0IC1mICdwbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcG5nLmM7IFwKIEBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJwbmcxMl9sYS1wbmcuVHBvIiAiJChERVBESVIpL2xpYnBuZzEyX2xhLXBuZy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGlicG5nMTJfbGEtcG5nLlRwbyI7IGV4aXQgMTsgZmkKQEAgLTcyNSwxMyArNzE0LDYgQEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYnBuZzEyX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYnBuZzEyX2xhLXBuZ3ByZWFkLmxvIGB0ZXN0IC1mICdwbmdwcmVhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbmdwcmVhZC5jCiAKLWxpYnBuZzEyX2xhLXBuZ2djY3JkLmxvOiBwbmdnY2NyZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYnBuZzEyX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJwbmcxMl9sYS1wbmdnY2NyZC5sbyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYnBuZzEyX2xhLXBuZ2djY3JkLlRwbyIgLWMgLW8gbGlicG5nMTJfbGEtcG5nZ2NjcmQubG8gYHRlc3QgLWYgJ3BuZ2djY3JkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBuZ2djY3JkLmM7IFwKLUBhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJwbmcxMl9sYS1wbmdnY2NyZC5UcG8iICIkKERFUERJUikvbGlicG5nMTJfbGEtcG5nZ2NjcmQuUGxvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYnBuZzEyX2xhLXBuZ2djY3JkLlRwbyI7IGV4aXQgMTsgZmkKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BuZ2djY3JkLmMnIG9iamVjdD0nbGlicG5nMTJfbGEtcG5nZ2NjcmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYnBuZzEyX2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYnBuZzEyX2xhLXBuZ2djY3JkLmxvIGB0ZXN0IC1mICdwbmdnY2NyZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbmdnY2NyZC5jCi0KIG1vc3RseWNsZWFuLWxpYnRvb2w6CiAJLXJtIC1mICoubG8KIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGRlYzJkNDUuLjZhZTlkYWYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi1SRUFETUUgZm9yIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjMyAtIEF1Z3VzdCAzMCwgMjAwNyAoc2hhcmVkIGxpYnJhcnkgMTIuMCkKK1JFQURNRSBmb3IgbGlicG5nIHZlcnNpb24gMS4yLjIwcmM0IC0gU2VwdGVtYmVyIDEsIDIwMDcgKHNoYXJlZCBsaWJyYXJ5IDEyLjApCiBTZWUgdGhlIG5vdGUgYWJvdXQgdmVyc2lvbiBudW1iZXJzIG5lYXIgdGhlIHRvcCBvZiBwbmcuaAogCiBTZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBpbnN0YWxsIGxpYnBuZy4KQEAgLTE5MCwxMSArMTkwLDExIEBACiAgICAgICAgZGVzY3JpcC5tbXMgICAgICA9PiAgVk1TIG1ha2VmaWxlIGZvciBNTVMgb3IgTU1LCiAgICAgICAgbWFrZWZpbGUuc3RkICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCiAgICAgICAgbWFrZWZpbGUuZWxmICAgICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIHN5bWJvbCB2ZXJzaW9uaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzQpCiAgICAgICAgbWFrZWZpbGUubGludXggICA9PiAgTGludXgvRUxGIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmM0KQogICAgICAgIG1ha2VmaWxlLmdjbW14ICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIGFzc2VtYmxlciBjb2RlIHR1bmVkIGZvciBJbnRlbCBNTVggcGxhdGZvcm0pCiAgICAgICAgbWFrZWZpbGUuZ2NjICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5rbnIgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCkBAIC0yMTYsMTIgKzIxNiwxMiBAQAogICAgICAgIG1ha2VmaWxlLm9wZW5ic2QgPT4gIE9wZW5CU0QgbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5zZ2kgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCiAgICAgICAgbWFrZWZpbGUuc2dnY2MgICA9PiAgU2lsaWNvbiBHcmFwaGljcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjNCkKICAgICAgICBtYWtlZmlsZS5zdW5vcyAgID0+ICBTdW4gbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5zb2xhcmlzID0+ICBTb2xhcmlzIDIuWCBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcxMi5zby4wLjEuMi4yMHJjNCkKICAgICAgICBtYWtlZmlsZS5zbzkgICAgID0+ICBTb2xhcmlzIDkgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZzEyLnNvLjAuMS4yLjIwcmMzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nMTIuc28uMC4xLjIuMjByYzQpCiAgICAgICAgbWFrZWZpbGUuMzJzdW51ICA9PiAgU3VuIFVsdHJhIDMyLWJpdCBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLjY0c3VudSAgPT4gIFN1biBVbHRyYSA2NC1iaXQgbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5zY28gICAgID0+ICBGb3IgU0NPIE9TcjUgIEVMRiBhbmQgVW5peHdhcmUgNyB3aXRoIE5hdGl2ZSBjYwpkaWZmIC0tZ2l0IGEvWTJLSU5GTyBiL1kyS0lORk8KaW5kZXggYWYzM2UwZS4uNTJjYjI3YiAxMDA2NDQKLS0tIGEvWTJLSU5GTworKysgYi9ZMktJTkZPCkBAIC0xLDEzICsxLDEzIEBACiAgICBZMksgY29tcGxpYW5jZSBpbiBsaWJwbmc6CiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICAgIEF1Z3VzdCAzMCwgMjAwNworICAgICAgU2VwdGVtYmVyIDEsIDIwMDcKIAogICAgICAgU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogICAgICAgYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAKICAgICAgIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLSAgICAgIHVwd2FyZCB0aHJvdWdoIDEuMi4yMHJjMyBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKKyAgICAgIHVwd2FyZCB0aHJvdWdoIDEuMi4yMHJjNCBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKICAgICAgIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiAgICAgICBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlcgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGM2MGZmNDAuLmJmYWY2MzYgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgbGlicG5nIDEuMi4yMHJjMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBsaWJwbmcgMS4yLjIwcmM0LgogIwogIyBSZXBvcnQgYnVncyB0byA8cG5nLW1uZy1pbXBsZW1lbnRAbGlzdHMuc291cmNlZm9yZ2UubmV0Pi4KICMKQEAgLTcyOCw4ICs3MjgsOCBAQAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J2xpYnBuZycKIFBBQ0tBR0VfVEFSTkFNRT0nbGlicG5nJwotUEFDS0FHRV9WRVJTSU9OPScxLjIuMjByYzMnCi1QQUNLQUdFX1NUUklORz0nbGlicG5nIDEuMi4yMHJjMycKK1BBQ0tBR0VfVkVSU0lPTj0nMS4yLjIwcmM0JworUEFDS0FHRV9TVFJJTkc9J2xpYnBuZyAxLjIuMjByYzQnCiBQQUNLQUdFX0JVR1JFUE9SVD0ncG5nLW1uZy1pbXBsZW1lbnRAbGlzdHMuc291cmNlZm9yZ2UubmV0JwogCiBhY191bmlxdWVfZmlsZT0icG5nZ2V0LmMiCkBAIC04NzYsNyArODc2LDYgQEAKIFBPV19MSUIKIExJQk9CSlMKIExJQlBOR19ERUZJTkVTCi1MSUJQTkdfTk9fTU1YCiBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUUKIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFRfRkFMU0UKIFBOR0xJQl9WRVJTSU9OCkBAIC0xNDA1LDcgKzE0MDQsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYnBuZyAxLjIuMjByYzMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbGlicG5nIDEuMi4yMHJjNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDc1LDcgKzE0NzQsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYnBuZyAxLjIuMjByYzM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJwbmcgMS4yLjIwcmM0OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE1ODUsNyArMTU4NCw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotbGlicG5nIGNvbmZpZ3VyZSAxLjIuMjByYzMKK2xpYnBuZyBjb25maWd1cmUgMS4yLjIwcmM0CiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKIAogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLApAQCAtMTU5OSw3ICsxNTk4LDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBsaWJwbmcgJGFzX21lIDEuMi4yMHJjMywgd2hpY2ggd2FzCitJdCB3YXMgY3JlYXRlZCBieSBsaWJwbmcgJGFzX21lIDEuMi4yMHJjNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACkBAIC0yMjY5LDcgKzIyNjgsNyBAQAogCiAjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCiAgUEFDS0FHRT0nbGlicG5nJwotIFZFUlNJT049JzEuMi4yMHJjMycKKyBWRVJTSU9OPScxLjIuMjByYzQnCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMjQ0MCw3ICsyNDM5LDcgQEAKIAogCiAKLVBOR0xJQl9WRVJTSU9OPTEuMi4yMHJjMworUE5HTElCX1ZFUlNJT049MS4yLjIwcmM0CiBQTkdMSUJfTUFKT1I9MQogUE5HTElCX01JTk9SPTIKIFBOR0xJQl9SRUxFQVNFPTIwCkBAIC00Nzg4LDcgKzQ3ODcsNyBAQAogICA7OwogKi0qLWlyaXg2KikKICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICcjbGluZSA0NzkxICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgZWNobyAnI2xpbmUgNDc5MCAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KQEAgLTczMDEsMTEgKzczMDAsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzMwNDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjczMDM6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzMwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6NzMwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KQEAgLTc1OTEsMTEgKzc1OTAsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzU5NDogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc1OTM6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzU5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6NzU5NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KQEAgLTc2OTUsMTEgKzc2OTQsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzY5ODogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc2OTc6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo3NzAyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTo3NzAxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC0xMDA0NCw3ICsxMDA0Myw3IEBACiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAwNDcgImNvbmZpZ3VyZSIKKyNsaW5lIDEwMDQ2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAxNDQsNyArMTAxNDMsNyBAQAogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDEwMTQ3ICJjb25maWd1cmUiCisjbGluZSAxMDE0NiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKICNpZiBIQVZFX0RMRkNOX0gKQEAgLTEyNTY0LDExICsxMjU2MywxMSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMjU2NzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyNTY2OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjEyNTcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZToxMjU3MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKICAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KQEAgLTEyNjY4LDExICsxMjY2NywxMSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMjY3MTogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyNjcwOiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI2NzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjEyNjc0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CiAgICB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCkBAIC0xNDIzMCwxMSArMTQyMjksMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQyMzM6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDIzMjogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNDIzNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTQyMzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCkBAIC0xNDMzNCwxMSArMTQzMzMsMTEgQEAKICAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKICAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKICAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQzMzc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDMzNjogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE0MzQxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZToxNDM0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAogICAgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZApAQCAtMTY1MjEsMTEgKzE2NTIwLDExIEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2NTI0OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY1MjM6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY1Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjE2NTI3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgpAQCAtMTY4MTEsMTEgKzE2ODEwLDExIEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2ODE0OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY4MTM6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCiAgICBhY19zdGF0dXM9JD8KICAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY4MTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjE2ODE3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgpAQCAtMTY5MTUsMTEgKzE2OTE0LDExIEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2OTE4OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY5MTc6ICRsdF9jb21waWxlXCIiID4mNSkKICAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNjkyMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6MTY5MjE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKICAgIHRoZW4KICAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKQEAgLTIwNzEzLDU1ICsyMDcxMiw2IEBACiAKIAogTElCUE5HX0RFRklORVM9LURQTkdfQ09ORklHVVJFX0xJQlBORwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgYXNzZW1ibGVyIGNvZGUgaW4gcG5nZ2NjcmQuYyBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCBQTkdfTk9fTU1YX0NPREUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBhc3NlbWJsZXIgY29kZSBpbiBwbmdnY2NyZC5jIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IFBOR19OT19NTVhfQ09ERS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgIiRzcmNkaXIvcG5nZ2NjcmQuYyIKLWludAotbWFpbiAoKQotewotcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KLSAgTElCUE5HX05PX01NWD0iIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci0gIExJQlBOR19OT19NTVg9LURQTkdfTk9fTU1YX0NPREUKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUE5HX0RFRklORVM9JExJQlBOR19ERUZJTkVTXCAkTElCUE5HX05PX01NWAotCiAKIAogeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlicmFyaWVzIGNhbiBiZSB2ZXJzaW9uZWQiID4mNQpAQCAtMjEyODIsNyArMjEyMzIsNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGlicG5nICRhc19tZSAxLjIuMjByYzMsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJwbmcgJGFzX21lIDEuMi4yMHJjNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCkBAIC0yMTMzNSw3ICsyMTI4NSw3IEBACiBfQUNFT0YKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCiBhY19jc192ZXJzaW9uPSJcXAotbGlicG5nIGNvbmZpZy5zdGF0dXMgMS4yLjIwcmMzCitsaWJwbmcgY29uZmlnLnN0YXR1cyAxLjIuMjByYzQKIGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSwKICAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKIApAQCAtMjE2NjMsNyArMjE2MTMsNiBAQAogUE9XX0xJQiEkUE9XX0xJQiRhY19kZWxpbQogTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQogTElCUE5HX0RFRklORVMhJExJQlBOR19ERUZJTkVTJGFjX2RlbGltCi1MSUJQTkdfTk9fTU1YISRMSUJQTkdfTk9fTU1YJGFjX2RlbGltCiBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUUhJEhBVkVfTERfVkVSU0lPTl9TQ1JJUFRfVFJVRSRhY19kZWxpbQogSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRSEkSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRSRhY19kZWxpbQogUE5HTElCX1ZFUlNJT04hJFBOR0xJQl9WRVJTSU9OJGFjX2RlbGltCkBAIC0yMTY3Niw3ICsyMTYyNSw3IEBACiBMVExJQk9CSlMhJExUTElCT0JKUyRhY19kZWxpbQogX0FDRU9GCiAKLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSAyMTsgdGhlbgorICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDIwOyB0aGVuCiAgICAgYnJlYWsKICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggYzdhOThlMi4uMjQ0OTUyYyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTgsMTIgKzE4LDEyIEBACiAKIGRubCBWZXJzaW9uIG51bWJlciBzdHVmZiBoZXJlOgogCi1BQ19JTklUKFtsaWJwbmddLCBbMS4yLjIwcmMzXSwgW3BuZy1tbmctaW1wbGVtZW50QGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCitBQ19JTklUKFtsaWJwbmddLCBbMS4yLjIwcmM0XSwgW3BuZy1tbmctaW1wbGVtZW50QGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCiBBTV9JTklUX0FVVE9NQUtFCiBkbmwgc3RvcCBjb25maWd1cmUgZnJvbSBhdXRvbWFnaWNhbGx5IHJ1bm5pbmcgYXV0b21ha2UKIEFNX01BSU5UQUlORVJfTU9ERQogCi1QTkdMSUJfVkVSU0lPTj0xLjIuMjByYzMKK1BOR0xJQl9WRVJTSU9OPTEuMi4yMHJjNAogUE5HTElCX01BSk9SPTEKIFBOR0xJQl9NSU5PUj0yCiBQTkdMSUJfUkVMRUFTRT0yMApAQCAtNTksMTggKzU5LDcgQEAKIEFDX0NIRUNLX0xJQih6LCB6bGliVmVyc2lvbiwgLCBBQ19FUlJPUihbemxpYiBub3QgaW5zdGFsbGVkXSkpCiAKIExJQlBOR19ERUZJTkVTPS1EUE5HX0NPTkZJR1VSRV9MSUJQTkcKLUFDX01TR19DSEVDS0lORygKLSAgW2lmIGFzc2VtYmxlciBjb2RlIGluIHBuZ2djY3JkLmMgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgUE5HX05PX01NWF9DT0RFXSkKLUFDX1RSWV9DT01QSUxFKAotICBbI2luY2x1ZGUgIiRzcmNkaXIvcG5nZ2NjcmQuYyJdLAotICBbcmV0dXJuIDA7XSwKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIExJQlBOR19OT19NTVg9IiIsCi0gIEFDX01TR19SRVNVTFQobm8pCi0gIExJQlBOR19OT19NTVg9LURQTkdfTk9fTU1YX0NPREUpCi1MSUJQTkdfREVGSU5FUz0kTElCUE5HX0RFRklORVNcICRMSUJQTkdfTk9fTU1YCiBBQ19TVUJTVChMSUJQTkdfREVGSU5FUykKLUFDX1NVQlNUKExJQlBOR19OT19NTVgpCiAKIEFDX01TR19DSEVDS0lORyhbaWYgbGlicmFyaWVzIGNhbiBiZSB2ZXJzaW9uZWRdKQogR0xEPWAkTEQgLS1oZWxwIDwgL2Rldi9udWxsIDI+L2Rldi9udWxsIHwgZ3JlcCB2ZXJzaW9uLXNjcmlwdGAKZGlmZiAtLWdpdCBhL2xpYnBuZy0xLjIuMjByYzMudHh0IGIvbGlicG5nLTEuMi4yMHJjNC50eHQKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gbGlicG5nLTEuMi4yMHJjMy50eHQKcmVuYW1lIHRvIGxpYnBuZy0xLjIuMjByYzQudHh0CmluZGV4IGNlMDUxMjQuLmJhNGQ5YWIgMTAwNjQ0Ci0tLSBhL2xpYnBuZy0xLjIuMjByYzMudHh0CisrKyBiL2xpYnBuZy0xLjIuMjByYzQudHh0CkBAIC0xLDYgKzEsNiBAQAogbGlicG5nLnR4dCAtIEEgZGVzY3JpcHRpb24gb24gaG93IHRvIHVzZSBhbmQgbW9kaWZ5IGxpYnBuZwogCi0gbGlicG5nIHZlcnNpb24gMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3CisgbGlicG5nIHZlcnNpb24gMS4yLjIwcmM0IC0gU2VwdGVtYmVyIDEsIDIwMDcKICBVcGRhdGVkIGFuZCBkaXN0cmlidXRlZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICA8Z2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCkBAIC04Niw5ICs4Niw3IEBACiBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdHVyZXMuICBFYWNoIHRocmVhZCBzaG91bGQgaGF2ZSBpdHMgb3duCiBwbmdfc3RydWN0IGFuZCBwbmdfaW5mbyBpbnN0YW5jZXMsIGFuZCB0aHVzIGl0cyBvd24gaW1hZ2UuCiBMaWJwbmcgZG9lcyBub3QgcHJvdGVjdCBpdHNlbGYgYWdhaW5zdCB0d28gdGhyZWFkcyB1c2luZyB0aGUKLXNhbWUgaW5zdGFuY2Ugb2YgYSBzdHJ1Y3R1cmUuICBOb3RlOiB0aHJlYWQgc2FmZXR5IG1heSBiZSBkZWZlYXRlZAotYnkgdXNlIG9mIHNvbWUgb2YgdGhlIE1NWCBhc3NlbWJsZXIgY29kZSBpbiBwbmdnY2NyZC5jLCB3aGljaCBpcyBvbmx5Ci1jb21waWxlZCB3aGVuIHRoZSB1c2VyIGRlZmluZXMgUE5HX1RIUkVBRF9VTlNBRkVfT0suCitzYW1lIGluc3RhbmNlIG9mIGEgc3RydWN0dXJlLgogCiBJSS4gU3RydWN0dXJlcwogCkBAIC0yMzU1LDE3ICsyMzUzLDEzIEBACiAKIFYuIE1vZGlmeWluZy9DdXN0b21pemluZyBsaWJwbmc6CiAKLVRoZXJlIGFyZSB0aHJlZSBpc3N1ZXMgaGVyZS4gIFRoZSBmaXJzdCBpcyBjaGFuZ2luZyBob3cgbGlicG5nIGRvZXMKK1RoZXJlIGFyZSB0d28gaXNzdWVzIGhlcmUuICBUaGUgZmlyc3QgaXMgY2hhbmdpbmcgaG93IGxpYnBuZyBkb2VzCiBzdGFuZGFyZCB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiwgaW5wdXQvb3V0cHV0LCBhbmQgZXJyb3IgaGFuZGxpbmcuCiBUaGUgc2Vjb25kIGRlYWxzIHdpdGggbW9yZSBjb21wbGljYXRlZCB0aGluZ3MgbGlrZSBhZGRpbmcgbmV3IGNodW5rcywKIGFkZGluZyBuZXcgdHJhbnNmb3JtYXRpb25zLCBhbmQgZ2VuZXJhbGx5IGNoYW5naW5nIGhvdyBsaWJwbmcgd29ya3MuCiBCb3RoIG9mIHRob3NlIGFyZSBjb21waWxlLXRpbWUgaXNzdWVzOyB0aGF0IGlzLCB0aGV5IGFyZSBnZW5lcmFsbHkKIGRldGVybWluZWQgYXQgdGhlIHRpbWUgdGhlIGNvZGUgaXMgd3JpdHRlbiwgYW5kIHRoZXJlIGlzIHJhcmVseSBhIG5lZWQKLXRvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIG1lYW5zIG9mIGNoYW5naW5nIHRoZW0uICBUaGUgdGhpcmQgaXMgYQotcnVuLXRpbWUgaXNzdWU6ICBjaG9vc2luZyBiZXR3ZWVuIGFuZC9vciB0dW5pbmcgb25lIG9yIG1vcmUgYWx0ZXJuYXRlCi12ZXJzaW9ucyBvZiBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIHJvdXRpbmVzOyBzcGVjaWZpY2FsbHksIG9wdGltaXplZAotYXNzZW1ibHktbGFuZ3VhZ2UgKGFuZCB0aGVyZWZvcmUgY29tcGlsZXItIGFuZCBwbGF0Zm9ybS1kZXBlbmRlbnQpCi12ZXJzaW9ucy4KK3RvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIG1lYW5zIG9mIGNoYW5naW5nIHRoZW0uCiAKIE1lbW9yeSBhbGxvY2F0aW9uLCBpbnB1dC9vdXRwdXQsIGFuZCBlcnJvciBoYW5kbGluZwogCkBAIC0yNzI2LDE3MiArMjcyMCw2IEBACiBoYXZpbmcgbGV2ZWwgPSAwIHdpbGwgYmUgcHJpbnRlZC4gIFRoZXJlIGFyZW4ndCBhbnkgc3VjaCBzdGF0ZW1lbnRzIGluCiB0aGlzIHZlcnNpb24gb2YgbGlicG5nLCBidXQgaWYgeW91IGluc2VydCBzb21lIHRoZXkgd2lsbCBiZSBwcmludGVkLgogCi1WSS4gIFJ1bnRpbWUgb3B0aW1pemF0aW9uCi0KLUEgbmV3IGZlYXR1cmUgaW4gbGlicG5nIDEuMi4wIGlzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHN3aXRjaCBiZXR3ZWVuCi1zdGFuZGFyZCBhbmQgb3B0aW1pemVkIHZlcnNpb25zIG9mIHNvbWUgcm91dGluZXMuICBDdXJyZW50bHkgdGhlc2UgYXJlCi1saW1pdGVkIHRvIHRocmVlIGNvbXB1dGF0aW9uYWxseSBpbnRlbnNpdmUgdGFza3Mgd2hlbiByZWFkaW5nIFBORyBmaWxlczoKLWRlY29kaW5nIHJvdyBmaWx0ZXJzLCBleHBhbmRpbmcgaW50ZXJsYWNpbmcsIGFuZCBjb21iaW5pbmcgaW50ZXJsYWNlZCBvcgotdHJhbnNwYXJlbnQgcm93IGRhdGEgd2l0aCBwcmV2aW91cyByb3cgZGF0YS4gIEN1cnJlbnRseSB0aGUgb3B0aW1pemVkCi12ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIG9ubHkgZm9yIHg4NiAoSW50ZWwsIEFNRCwgZXRjLikgcGxhdGZvcm1zIHdpdGgKLU1NWCBzdXBwb3J0LCB0aG91Z2ggdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucy4gIChGb3IgZXhhbXBsZSwKLXRoZSBub24tTU1YIGFzc2VtYmxlciBvcHRpbWl6YXRpb25zIGZvciB6bGliIG1pZ2h0IGJlY29tZSBzaW1pbGFybHkKLXJ1bnRpbWUtc2VsZWN0YWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMsIGluIHdoaWNoIGNhc2UgbGlicG5nIGNvdWxkIGJlCi1leHRlbmRlZCB0byBzdXBwb3J0IHRoZW0uICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29tcGlsZS10aW1lIGNob2ljZSBvZgotZmxvYXRpbmctcG9pbnQgdmVyc3VzIGludGVnZXIgcm91dGluZXMgZm9yIGdhbW1hIGNvcnJlY3Rpb24gbWlnaHQgYmVjb21lCi1ydW50aW1lLXNlbGVjdGFibGUuKQotCi1CZWNhdXNlIHN1Y2ggb3B0aW1pemF0aW9ucyB0ZW5kIHRvIGJlIHZlcnkgcGxhdGZvcm0tIGFuZCBjb21waWxlci1kZXBlbmRlbnQsCi1ib3RoIGluIGhvdyB0aGV5IGFyZSB3cml0dGVuIGFuZCBpbiBob3cgdGhleSBwZXJmb3JtLCB0aGUgbmV3IHJ1bnRpbWUgY29kZQotaW4gbGlicG5nIGhhcyBiZWVuIHdyaXR0ZW4gdG8gYWxsb3cgcHJvZ3JhbXMgdG8gcXVlcnksIGVuYWJsZSwgYW5kIGRpc2FibGUKLWVpdGhlciBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGFsbCBzdWNoIG9wdGltaXphdGlvbnMuICBGb3IgZXhhbXBsZSwgdG8KLWVuYWJsZSBhbGwgcG9zc2libGUgb3B0aW1pemF0aW9ucyAoYmVhcmluZyBpbiBtaW5kIHRoYXQgc29tZSAib3B0aW1pemF0aW9ucyIKLW1heSBhY3R1YWxseSBydW4gbW9yZSBzbG93bHkgaW4gcmFyZSBjYXNlcyk6Ci0KLSAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQotICAgICAgIHBuZ191aW50XzMyIG1hc2ssIGZsYWdzOwotCi0gICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKLSAgICAgICBtYXNrID0gcG5nX2dldF9hc21fZmxhZ21hc2soUE5HX1NFTEVDVF9SRUFEIHwgUE5HX1NFTEVDVF9XUklURSk7Ci0gICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgZmxhZ3MgfCBtYXNrKTsKLSAgICAjZW5kaWYKLQotVG8gZW5hYmxlIG9ubHkgb3B0aW1pemF0aW9ucyByZWxldmFudCB0byByZWFkaW5nIFBOR3MsIHVzZSBQTkdfU0VMRUNUX1JFQUQKLWJ5IGl0c2VsZiB3aGVuIGNhbGxpbmcgcG5nX2dldF9hc21fZmxhZ21hc2soKTsgc2ltaWxhcmx5IGZvciBvcHRpbWl6aW5nCi1vbmx5IHdyaXRpbmcuICBUbyBkaXNhYmxlIGFsbCBvcHRpbWl6YXRpb25zOgotCi0gICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKLSAgICAgICBmbGFncyA9IHBuZ19nZXRfYXNtX2ZsYWdzKHBuZ19wdHIpOwotICAgICAgIG1hc2sgPSBwbmdfZ2V0X2FzbV9mbGFnbWFzayhQTkdfU0VMRUNUX1JFQUQgfCBQTkdfU0VMRUNUX1dSSVRFKTsKLSAgICAgICBwbmdfc2V0X2FzbV9mbGFncyhwbmdfcHRyLCBmbGFncyAmIH5tYXNrKTsKLSAgICAjZW5kaWYKLQotVG8gZW5hYmxlIG9yIGRpc2FibGUgb25seSBNTVgtcmVsYXRlZCBmZWF0dXJlcywgdXNlIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCkKLWluIHBsYWNlIG9mIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCkuICBUaGUgbW14IHZlcnNpb24gdGFrZXMgb25lIGFkZGl0aW9uYWwKLXBhcmFtZXRlcjoKLQotICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCi0gICAgICAgaW50IHNlbGVjdGlvbiA9IFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEU7Ci0gICAgICAgaW50IGNvbXBpbGVySUQ7Ci0KLSAgICAgICBtYXNrID0gcG5nX2dldF9tbXhfZmxhZ21hc2soc2VsZWN0aW9uLCAmY29tcGlsZXJJRCk7Ci0gICAgI2VuZGlmCi0KLU9uIHJldHVybiwgY29tcGlsZXJJRCB3aWxsIGluZGljYXRlIHdoaWNoIHZlcnNpb24gb2YgdGhlIE1NWCBhc3NlbWJsZXIKLW9wdGltaXphdGlvbnMgd2FzIGNvbXBpbGVkLiAgQ3VycmVudGx5IHR3byBmbGF2b3JzIGV4aXN0OiAgTWljcm9zb2Z0Ci1WaXN1YWwgQysrIChjb21waWxlcklEID09IDEpIGFuZCBHTlUgQyAoYS5rLmEuIGdjYy9nYXMsIGNvbXBpbGVySUQgPT0gMikuCi1PbiBub24teDg2IHBsYXRmb3JtcyBvciBvbiBzeXN0ZW1zIGNvbXBpbGVkIHdpdGhvdXQgTU1YIG9wdGltaXphdGlvbnMsIGEKLXZhbHVlIG9mIC0xIGlzIHVzZWQuCi0KLU5vdGUgdGhhdCBib3RoIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCkgYW5kIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCkgcmV0dXJuCi1hbGwgdmFsaWQsIHNldHRhYmxlIG9wdGltaXphdGlvbiBiaXRzIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB0aGF0J3MKLWN1cnJlbnRseSBpbiB1c2UuICBJbiB0aGUgY2FzZSBvZiBzaGFyZWQgKGR5bmFtaWNhbGx5IGxpbmtlZCkgbGlicmFyaWVzLAotdGhpcyBtYXkgaW5jbHVkZSBvcHRpbWl6YXRpb25zIHRoYXQgZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29kZSB3YXMKLXdyaXR0ZW4gYW5kIGNvbXBpbGVkLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSwgb2YgY291cnNlLCB0byBlbmFibGUgb25seSBrbm93biwKLXNwZWNpZmljIG9wdGltaXphdGlvbnM7IGZvciBleGFtcGxlOgotCi0gICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkgJiYgXAotICAgICAgIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgIGZsYWdzID0gUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XICBcCi0gICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFICAgIFwKLSAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCICAgXAotICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCAgICBcCi0gICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRyAgIFwKLSAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEggOwotICAgICAgIHBuZ19zZXRfYXNtX2ZsYWdzKHBuZ19wdHIsIGZsYWdzKTsKLSAgICAjZW5kaWYKLQotVGhpcyBtZXRob2Qgd291bGQgZW5hYmxlIG9ubHkgdGhlIE1NWCByZWFkLW9wdGltaXphdGlvbnMgYXZhaWxhYmxlIGF0IHRoZQotdGltZSBvZiBsaWJwbmcgMS4yLjAncyByZWxlYXNlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBsYXRlciB2ZXJzaW9uIG9mCi10aGUgRExMIHdlcmUgYWN0dWFsbHkgYmVpbmcgdXNlZC4gIChBbHNvIG5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZGlkIG5vdAotZXhpc3QgaW4gdmVyc2lvbnMgb2xkZXIgdGhhbiAxLjIuMCwgc28gYW55IGF0dGVtcHQgdG8gcnVuIGEgZHluYW1pY2FsbHkKLWxpbmtlZCBhcHAgb24gc3VjaCBhbiBvbGRlciB2ZXJzaW9uIHdvdWxkIGZhaWwuKQotCi1UbyBkZXRlcm1pbmUgd2hldGhlciB0aGUgcHJvY2Vzc29yIHN1cHBvcnRzIE1NWCBpbnN0cnVjdGlvbnMgYXQgYWxsLCB1c2UKLXRoZSBwbmdfbW14X3N1cHBvcnQoKSBmdW5jdGlvbjoKLQotICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCi0gICAgICAgbW14c3VwcG9ydCA9IHBuZ19tbXhfc3VwcG9ydCgpOwotICAgICNlbmRpZgotCi1JdCByZXR1cm5zIC0xIGlmIE1NWCBzdXBwb3J0IGlzIG5vdCBjb21waWxlZCBpbnRvIGxpYnBuZywgMCBpZiBNTVggY29kZQotaXMgY29tcGlsZWQgYnV0IE1NWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBwcm9jZXNzb3IsIG9yIDEgaWYgTU1YIHN1cHBvcnQKLWlzIGZ1bGx5IGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBwbmdfbW14X3N1cHBvcnQoKSwgcG5nX2dldF9tbXhfZmxhZ21hc2soKSwKLWFuZCBwbmdfZ2V0X2FzbV9mbGFnbWFzaygpIGFsbCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhbmQgaW5pLQotdGlhbGl6aW5nIGFueSBQTkcgc3RydWN0dXJlcyAoZm9yIGV4YW1wbGUsIGFzIHBhcnQgb2YgYSB1c2FnZSBzY3JlZW4gb3IKLSJhYm91dCIgYm94KS4KLQotVGhlIGZvbGxvd2luZyBjb2RlIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgYW4gYXBwbGljYXRpb24gZnJvbSB1c2luZyB0aGUKLXRocmVhZF91bnNhZmUgZmVhdHVyZXMsIGV2ZW4gaWYgbGlicG5nIHdhcyBidWlsdCB3aXRoIFBOR19USFJFQURfVU5TQUZFX09LCi1kZWZpbmVkOgotCi0jaWYgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKSAmJiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpIFwKLSAgJiYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKLSAgICAvKiBEaXNhYmxlIHRocmVhZC11bnNhZmUgZmVhdHVyZXMgb2YgcG5nZ2NjcmQgKi8KLSAgICBpZiAocG5nX2FjY2Vzc192ZXJzaW9uX251bWJlcigpID49IDEwMjAwKQotICAgIHsKLSAgICAgIHBuZ191aW50XzMyIG1teF9kaXNhYmxlX21hc2sgPSAwOwotICAgICAgcG5nX3VpbnRfMzIgYXNtX2ZsYWdzOwotCi0gICAgICBtbXhfZGlzYWJsZV9tYXNrIHw9ICggUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCApOwotICAgICAgYXNtX2ZsYWdzID0gcG5nX2dldF9hc21fZmxhZ3MocG5nX3B0cik7Ci0gICAgICBwbmdfc2V0X2FzbV9mbGFncyhwbmdfcHRyLCBhc21fZmxhZ3MgJiB+bW14X2Rpc2FibGVfbWFzayk7Ci0gICAgfQotI2VuZGlmCi0KLUZvciBtb3JlIGV4dGVuc2l2ZSBleGFtcGxlcyBvZiBydW50aW1lIHF1ZXJ5aW5nLCBlbmFibGluZyBhbmQgZGlzYWJsaW5nCi1vZiBvcHRpbWl6ZWQgZmVhdHVyZXMsIHNlZSBjb250cmliL2dyZWdib29rL3JlYWRwbmcyLmMgaW4gdGhlIGxpYnBuZwotc291cmNlLWNvZGUgZGlzdHJpYnV0aW9uLgotCi1JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRpc2FibGUgb3IgZW5hYmxlIHNwZWNpZmljIG9wdGltaXphdGlvbiBmZWF0dXJlcwotYXQgY29tcGlsZSB0aW1lLiAgVG8gZGlzYWJsZSB0aGVtIGVudGlyZWx5LCB3aGljaCBtYXkgcmVzdWx0IGluIHNsb3dlcgotYnV0IHNtYWxsZXIgYW5kIGxlc3MgY29tcGxleCBhbmQgdHJvdWJsZXNvbWUgY29kZSwgZGVmaW5lCi0KLSAgICAgUE5HX05PX0FTU0VNQkxFUl9DT0RFCi0KLUlmIHlvdSBkbyB0aGlzLCB0aGVuIHRoZSBydW4tdGltZSBjb2RlIGZvciBzZXR0aW5nIGFuZCBxdWVyeWluZyBmbGFncwotZGVzY3JpYmVkIGFib3ZlLCBhbmQgdGhlIGFzc2VtYmxlciBjb2RlIGluIHBuZ2djY3JkLmMgb3IgcG5ndmNyZC5jIHdpbGwKLW5vdCBiZSBidWlsdC4KLQotSWYgeW91IGhhdmUgZGlzYWJsZWQgdGhlIGFzc2VtYmxlciBjb2RlLCB5b3UgY2FuIGFsc28gZGlzYWJsZSB0aGUKLW9wdGltaXplZCBDIGNvZGUsIHRvIG9idGFpbiBldmVuIHNsb3dlciBidXQgc21hbGxlciBjb2RlLCBieSBkZWZpbmluZwotCi0gICAgIFBOR19OT19PUFRJTVpFRF9DT0RFCi0KLVRvIGRpc2FibGUgb25seSB0aGUgTU1YIGFzc2VtYmxlciBjb2RlLCBkZWZpbmUKLQotICAgICBQTkdfTk9fTU1YX0NPREUKLQotVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGUgTU1YIGNvZGU6IG9uZSBmb3IgZ2NjIGNvbXBpbGVycyBhbmQgb25lIGZvcgotTVNWQyBjb21waWxlcnMuICBQbmdjb25mLmggc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoaWNoIHlvdSBhcmUKLXVzaW5nLCBhbmQgaXQgd2lsbCBzZXQgZWl0aGVyIFBOR19VU0VfUE5HR0NDUkQgb3IgUE5HX1VTRV9QTkdWQ1JEIGZvciB5b3UuCi0KLURlZmluZSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHRvIGRpc2FibGUgc3BlY2lmaWMgcGFydHMgb2YgdGhlCi1hc3NlbWJsZXIgY29kZToKLQotICAgICBQTkdfTk9fTU1YX0NPTUJJTkVfUk9XCi0gICAgIFBOR19OT19NTVhfUkVBRF9JTlRFUkxBQ0UKLSAgICAgUE5HX05PX01NWF9SRUFEX0ZJTFRFUl9ST1cKLQotSWYgdGhlIGxhdHRlciBpcyBub3QgZGlzYWJsZWQsIHlvdSBjYW4gZGlzYWJsZSBvbmUgb3IgbW9yZSBvZiB0aGUKLWluZGl2aWR1YWwgZmlsdGVyIHR5cGVzIGJ5IGRlZmluaW5nCi0KLSAgICAgUE5HX05PX01NWF9GSUxURVJfU1VCCi0gICAgIFBOR19OT19NTVhfRklMVEVSX1VQCi0gICAgIFBOR19OT19NTVhfRklMVEVSX0FWRwotICAgICBQTkdfTk9fTU1YX0ZJTFRFUl9QQUVUSAotCi1CeSBkZWZhdWx0LCBsaWJwbmcgb25seSBlbmFibGVzIHRoZSAic3ViIiBmaWx0ZXIgd2hlbiBnY2MtMy54IGlzIHVzZWQKLWJlY2F1c2UgZXhwZXJpbWVudHMgc2hvdyB0aGF0IGdjYy0zLnggcHJvZHVjZXMgYmFkIGNvZGUgZm9yIHRoZSBvdGhlcnMuCi0KLVdoZW4geW91IGRpc2FibGUgdmFyaW91cyBNTVggZmVhdHVyZXMsIGxpYnBuZyB3aWxsIHN0aWxsIGJlIGFibGUgdG8gZGVjb2RlCi1maWxlcyB3aXRoIHRob3NlIGZlYXR1cmVzLiAgSXQgd2lsbCBmYWxsIGJhY2sgdXBvbiB0aGUgb3B0aW1pemVkIEMgY29kZQotb3IgdGhlIHVub3B0aW1pemVkIEMgY29kZSB0byBkZWNvZGUgdGhlbS4KLQotCiBWSUkuICBNTkcgc3VwcG9ydAogCiBUaGUgTU5HIHNwZWNpZmljYXRpb24gKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmxpYnBuZy5vcmcvcHViL21uZykgYWxsb3dzCkBAIC0yOTY4LDEzICsyNzk2LDEzIEBACiAKIElYLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotQXVndXN0IDMwLCAyMDA3CitTZXB0ZW1iZXIgMSwgMjAwNwogCiBTaW5jZSB0aGUgUE5HIERldmVsb3BtZW50IGdyb3VwIGlzIGFuIGFkLWhvYyBib2R5LCB3ZSBjYW4ndCBtYWtlCiBhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbi4KIAogVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotdXB3YXJkIHRocm91Z2ggMS4yLjIwcmMzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4yLjIwcmM0IGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKZGlmZiAtLWdpdCBhL2xpYnBuZy4zIGIvbGlicG5nLjMKaW5kZXggZDcwNzM0MS4uZDgwZjkwYiAxMDA2NDQKLS0tIGEvbGlicG5nLjMKKysrIGIvbGlicG5nLjMKQEAgLTEsNiArMSw2IEBACi0uVEggTElCUE5HIDMgIkF1Z3VzdCAzMCwgMjAwNyIKKy5USCBMSUJQTkcgMyAiU2VwdGVtYmVyIDEsIDIwMDciCiAuU0ggTkFNRQotbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjIwcmMzCitsaWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjIuMjByYzQKIC5TSCBTWU5PUFNJUwogXGZCCiAjaW5jbHVkZSA8cG5nLmg+XGZQCkBAIC00MTAsNyArNDEwLDcgQEAKIC5TSCBMSUJQTkcuVFhUCiBsaWJwbmcudHh0IC0gQSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gdXNlIGFuZCBtb2RpZnkgbGlicG5nCiAKLSBsaWJwbmcgdmVyc2lvbiAxLjIuMjByYzMgLSBBdWd1c3QgMzAsIDIwMDcKKyBsaWJwbmcgdmVyc2lvbiAxLjIuMjByYzQgLSBTZXB0ZW1iZXIgMSwgMjAwNwogIFVwZGF0ZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogIDxnbGVubnJwIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTQ5Niw5ICs0OTYsNyBAQAogaW5zdGFuY2VzIG9mIHRoZSBzdHJ1Y3R1cmVzLiAgRWFjaCB0aHJlYWQgc2hvdWxkIGhhdmUgaXRzIG93bgogcG5nX3N0cnVjdCBhbmQgcG5nX2luZm8gaW5zdGFuY2VzLCBhbmQgdGh1cyBpdHMgb3duIGltYWdlLgogTGlicG5nIGRvZXMgbm90IHByb3RlY3QgaXRzZWxmIGFnYWluc3QgdHdvIHRocmVhZHMgdXNpbmcgdGhlCi1zYW1lIGluc3RhbmNlIG9mIGEgc3RydWN0dXJlLiAgTm90ZTogdGhyZWFkIHNhZmV0eSBtYXkgYmUgZGVmZWF0ZWQKLWJ5IHVzZSBvZiBzb21lIG9mIHRoZSBNTVggYXNzZW1ibGVyIGNvZGUgaW4gcG5nZ2NjcmQuYywgd2hpY2ggaXMgb25seQotY29tcGlsZWQgd2hlbiB0aGUgdXNlciBkZWZpbmVzIFBOR19USFJFQURfVU5TQUZFX09LLgorc2FtZSBpbnN0YW5jZSBvZiBhIHN0cnVjdHVyZS4KIAogLlNIIElJLiBTdHJ1Y3R1cmVzCiAKQEAgLTI3NjUsMTcgKzI3NjMsMTMgQEAKIAogLlNIIFYuIE1vZGlmeWluZy9DdXN0b21pemluZyBsaWJwbmc6CiAKLVRoZXJlIGFyZSB0aHJlZSBpc3N1ZXMgaGVyZS4gIFRoZSBmaXJzdCBpcyBjaGFuZ2luZyBob3cgbGlicG5nIGRvZXMKK1RoZXJlIGFyZSB0d28gaXNzdWVzIGhlcmUuICBUaGUgZmlyc3QgaXMgY2hhbmdpbmcgaG93IGxpYnBuZyBkb2VzCiBzdGFuZGFyZCB0aGluZ3MgbGlrZSBtZW1vcnkgYWxsb2NhdGlvbiwgaW5wdXQvb3V0cHV0LCBhbmQgZXJyb3IgaGFuZGxpbmcuCiBUaGUgc2Vjb25kIGRlYWxzIHdpdGggbW9yZSBjb21wbGljYXRlZCB0aGluZ3MgbGlrZSBhZGRpbmcgbmV3IGNodW5rcywKIGFkZGluZyBuZXcgdHJhbnNmb3JtYXRpb25zLCBhbmQgZ2VuZXJhbGx5IGNoYW5naW5nIGhvdyBsaWJwbmcgd29ya3MuCiBCb3RoIG9mIHRob3NlIGFyZSBjb21waWxlLXRpbWUgaXNzdWVzOyB0aGF0IGlzLCB0aGV5IGFyZSBnZW5lcmFsbHkKIGRldGVybWluZWQgYXQgdGhlIHRpbWUgdGhlIGNvZGUgaXMgd3JpdHRlbiwgYW5kIHRoZXJlIGlzIHJhcmVseSBhIG5lZWQKLXRvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIG1lYW5zIG9mIGNoYW5naW5nIHRoZW0uICBUaGUgdGhpcmQgaXMgYQotcnVuLXRpbWUgaXNzdWU6ICBjaG9vc2luZyBiZXR3ZWVuIGFuZC9vciB0dW5pbmcgb25lIG9yIG1vcmUgYWx0ZXJuYXRlCi12ZXJzaW9ucyBvZiBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIHJvdXRpbmVzOyBzcGVjaWZpY2FsbHksIG9wdGltaXplZAotYXNzZW1ibHktbGFuZ3VhZ2UgKGFuZCB0aGVyZWZvcmUgY29tcGlsZXItIGFuZCBwbGF0Zm9ybS1kZXBlbmRlbnQpCi12ZXJzaW9ucy4KK3RvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIG1lYW5zIG9mIGNoYW5naW5nIHRoZW0uCiAKIE1lbW9yeSBhbGxvY2F0aW9uLCBpbnB1dC9vdXRwdXQsIGFuZCBlcnJvciBoYW5kbGluZwogCkBAIC0zMTM2LDE3MiArMzEzMCw2IEBACiBoYXZpbmcgbGV2ZWwgPSAwIHdpbGwgYmUgcHJpbnRlZC4gIFRoZXJlIGFyZW4ndCBhbnkgc3VjaCBzdGF0ZW1lbnRzIGluCiB0aGlzIHZlcnNpb24gb2YgbGlicG5nLCBidXQgaWYgeW91IGluc2VydCBzb21lIHRoZXkgd2lsbCBiZSBwcmludGVkLgogCi0uU0ggVkkuICBSdW50aW1lIG9wdGltaXphdGlvbgotCi1BIG5ldyBmZWF0dXJlIGluIGxpYnBuZyAxLjIuMCBpcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSBzd2l0Y2ggYmV0d2Vlbgotc3RhbmRhcmQgYW5kIG9wdGltaXplZCB2ZXJzaW9ucyBvZiBzb21lIHJvdXRpbmVzLiAgQ3VycmVudGx5IHRoZXNlIGFyZQotbGltaXRlZCB0byB0aHJlZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIHRhc2tzIHdoZW4gcmVhZGluZyBQTkcgZmlsZXM6Ci1kZWNvZGluZyByb3cgZmlsdGVycywgZXhwYW5kaW5nIGludGVybGFjaW5nLCBhbmQgY29tYmluaW5nIGludGVybGFjZWQgb3IKLXRyYW5zcGFyZW50IHJvdyBkYXRhIHdpdGggcHJldmlvdXMgcm93IGRhdGEuICBDdXJyZW50bHkgdGhlIG9wdGltaXplZAotdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbmx5IGZvciB4ODYgKEludGVsLCBBTUQsIGV0Yy4pIHBsYXRmb3JtcyB3aXRoCi1NTVggc3VwcG9ydCwgdGhvdWdoIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuICAoRm9yIGV4YW1wbGUsCi10aGUgbm9uLU1NWCBhc3NlbWJsZXIgb3B0aW1pemF0aW9ucyBmb3IgemxpYiBtaWdodCBiZWNvbWUgc2ltaWxhcmx5Ci1ydW50aW1lLXNlbGVjdGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzLCBpbiB3aGljaCBjYXNlIGxpYnBuZyBjb3VsZCBiZQotZXh0ZW5kZWQgdG8gc3VwcG9ydCB0aGVtLiAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbXBpbGUtdGltZSBjaG9pY2Ugb2YKLWZsb2F0aW5nLXBvaW50IHZlcnN1cyBpbnRlZ2VyIHJvdXRpbmVzIGZvciBnYW1tYSBjb3JyZWN0aW9uIG1pZ2h0IGJlY29tZQotcnVudGltZS1zZWxlY3RhYmxlLikKLQotQmVjYXVzZSBzdWNoIG9wdGltaXphdGlvbnMgdGVuZCB0byBiZSB2ZXJ5IHBsYXRmb3JtLSBhbmQgY29tcGlsZXItZGVwZW5kZW50LAotYm90aCBpbiBob3cgdGhleSBhcmUgd3JpdHRlbiBhbmQgaW4gaG93IHRoZXkgcGVyZm9ybSwgdGhlIG5ldyBydW50aW1lIGNvZGUKLWluIGxpYnBuZyBoYXMgYmVlbiB3cml0dGVuIHRvIGFsbG93IHByb2dyYW1zIHRvIHF1ZXJ5LCBlbmFibGUsIGFuZCBkaXNhYmxlCi1laXRoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBhbGwgc3VjaCBvcHRpbWl6YXRpb25zLiAgRm9yIGV4YW1wbGUsIHRvCi1lbmFibGUgYWxsIHBvc3NpYmxlIG9wdGltaXphdGlvbnMgKGJlYXJpbmcgaW4gbWluZCB0aGF0IHNvbWUgIm9wdGltaXphdGlvbnMiCi1tYXkgYWN0dWFsbHkgcnVuIG1vcmUgc2xvd2x5IGluIHJhcmUgY2FzZXMpOgotCi0gICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKLSAgICAgICBwbmdfdWludF8zMiBtYXNrLCBmbGFnczsKLQotICAgICAgIGZsYWdzID0gcG5nX2dldF9hc21fZmxhZ3MocG5nX3B0cik7Ci0gICAgICAgbWFzayA9IHBuZ19nZXRfYXNtX2ZsYWdtYXNrKFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEUpOwotICAgICAgIHBuZ19zZXRfYXNtX2ZsYWdzKHBuZ19wdHIsIGZsYWdzIHwgbWFzayk7Ci0gICAgI2VuZGlmCi0KLVRvIGVuYWJsZSBvbmx5IG9wdGltaXphdGlvbnMgcmVsZXZhbnQgdG8gcmVhZGluZyBQTkdzLCB1c2UgUE5HX1NFTEVDVF9SRUFECi1ieSBpdHNlbGYgd2hlbiBjYWxsaW5nIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCk7IHNpbWlsYXJseSBmb3Igb3B0aW1pemluZwotb25seSB3cml0aW5nLiAgVG8gZGlzYWJsZSBhbGwgb3B0aW1pemF0aW9uczoKLQotICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCi0gICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKLSAgICAgICBtYXNrID0gcG5nX2dldF9hc21fZmxhZ21hc2soUE5HX1NFTEVDVF9SRUFEIHwgUE5HX1NFTEVDVF9XUklURSk7Ci0gICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgZmxhZ3MgJiB+bWFzayk7Ci0gICAgI2VuZGlmCi0KLVRvIGVuYWJsZSBvciBkaXNhYmxlIG9ubHkgTU1YLXJlbGF0ZWQgZmVhdHVyZXMsIHVzZSBwbmdfZ2V0X21teF9mbGFnbWFzaygpCi1pbiBwbGFjZSBvZiBwbmdfZ2V0X2FzbV9mbGFnbWFzaygpLiAgVGhlIG1teCB2ZXJzaW9uIHRha2VzIG9uZSBhZGRpdGlvbmFsCi1wYXJhbWV0ZXI6Ci0KLSAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQotICAgICAgIGludCBzZWxlY3Rpb24gPSBQTkdfU0VMRUNUX1JFQUQgfCBQTkdfU0VMRUNUX1dSSVRFOwotICAgICAgIGludCBjb21waWxlcklEOwotCi0gICAgICAgbWFzayA9IHBuZ19nZXRfbW14X2ZsYWdtYXNrKHNlbGVjdGlvbiwgJmNvbXBpbGVySUQpOwotICAgICNlbmRpZgotCi1PbiByZXR1cm4sIGNvbXBpbGVySUQgd2lsbCBpbmRpY2F0ZSB3aGljaCB2ZXJzaW9uIG9mIHRoZSBNTVggYXNzZW1ibGVyCi1vcHRpbWl6YXRpb25zIHdhcyBjb21waWxlZC4gIEN1cnJlbnRseSB0d28gZmxhdm9ycyBleGlzdDogIE1pY3Jvc29mdAotVmlzdWFsIEMrKyAoY29tcGlsZXJJRCA9PSAxKSBhbmQgR05VIEMgKGEuay5hLiBnY2MvZ2FzLCBjb21waWxlcklEID09IDIpLgotT24gbm9uLXg4NiBwbGF0Zm9ybXMgb3Igb24gc3lzdGVtcyBjb21waWxlZCB3aXRob3V0IE1NWCBvcHRpbWl6YXRpb25zLCBhCi12YWx1ZSBvZiAtMSBpcyB1c2VkLgotCi1Ob3RlIHRoYXQgYm90aCBwbmdfZ2V0X2FzbV9mbGFnbWFzaygpIGFuZCBwbmdfZ2V0X21teF9mbGFnbWFzaygpIHJldHVybgotYWxsIHZhbGlkLCBzZXR0YWJsZSBvcHRpbWl6YXRpb24gYml0cyBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdGhhdCdzCi1jdXJyZW50bHkgaW4gdXNlLiAgSW4gdGhlIGNhc2Ugb2Ygc2hhcmVkIChkeW5hbWljYWxseSBsaW5rZWQpIGxpYnJhcmllcywKLXRoaXMgbWF5IGluY2x1ZGUgb3B0aW1pemF0aW9ucyB0aGF0IGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzCi13cml0dGVuIGFuZCBjb21waWxlZC4gIEl0IGlzIGFsc28gcG9zc2libGUsIG9mIGNvdXJzZSwgdG8gZW5hYmxlIG9ubHkga25vd24sCi1zcGVjaWZpYyBvcHRpbWl6YXRpb25zOyBmb3IgZXhhbXBsZToKLQotICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApICYmIFwKLSAgICAgICBkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpICYmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKLSAgICAgICBmbGFncyA9IFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVyAgXAotICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSAgICBcCi0gICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQiAgIFwKLSAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgXAotICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcgICBcCi0gICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIIDsKLSAgICAgICBwbmdfc2V0X2FzbV9mbGFncyhwbmdfcHRyLCBmbGFncyk7Ci0gICAgI2VuZGlmCi0KLVRoaXMgbWV0aG9kIHdvdWxkIGVuYWJsZSBvbmx5IHRoZSBNTVggcmVhZC1vcHRpbWl6YXRpb25zIGF2YWlsYWJsZSBhdCB0aGUKLXRpbWUgb2YgbGlicG5nIDEuMi4wJ3MgcmVsZWFzZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgbGF0ZXIgdmVyc2lvbiBvZgotdGhlIERMTCB3ZXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuICAoQWxzbyBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRpZCBub3QKLWV4aXN0IGluIHZlcnNpb25zIG9sZGVyIHRoYW4gMS4yLjAsIHNvIGFueSBhdHRlbXB0IHRvIHJ1biBhIGR5bmFtaWNhbGx5Ci1saW5rZWQgYXBwIG9uIHN1Y2ggYW4gb2xkZXIgdmVyc2lvbiB3b3VsZCBmYWlsLikKLQotVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByb2Nlc3NvciBzdXBwb3J0cyBNTVggaW5zdHJ1Y3Rpb25zIGF0IGFsbCwgdXNlCi10aGUgcG5nX21teF9zdXBwb3J0KCkgZnVuY3Rpb246Ci0KLSAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQotICAgICAgIG1teHN1cHBvcnQgPSBwbmdfbW14X3N1cHBvcnQoKTsKLSAgICAjZW5kaWYKLQotSXQgcmV0dXJucyAtMSBpZiBNTVggc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW50byBsaWJwbmcsIDAgaWYgTU1YIGNvZGUKLWlzIGNvbXBpbGVkIGJ1dCBNTVggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcHJvY2Vzc29yLCBvciAxIGlmIE1NWCBzdXBwb3J0Ci1pcyBmdWxseSBhdmFpbGFibGUuICBOb3RlIHRoYXQgcG5nX21teF9zdXBwb3J0KCksIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCksCi1hbmQgcG5nX2dldF9hc21fZmxhZ21hc2soKSBhbGwgbWF5IGJlIGNhbGxlZCB3aXRob3V0IGFsbG9jYXRpbmcgYW5kIGluaS0KLXRpYWxpemluZyBhbnkgUE5HIHN0cnVjdHVyZXMgKGZvciBleGFtcGxlLCBhcyBwYXJ0IG9mIGEgdXNhZ2Ugc2NyZWVuIG9yCi0iYWJvdXQiIGJveCkuCi0KLVRoZSBmb2xsb3dpbmcgY29kZSBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGFuIGFwcGxpY2F0aW9uIGZyb20gdXNpbmcgdGhlCi10aHJlYWRfdW5zYWZlIGZlYXR1cmVzLCBldmVuIGlmIGxpYnBuZyB3YXMgYnVpbHQgd2l0aCBQTkdfVEhSRUFEX1VOU0FGRV9PSwotZGVmaW5lZDoKLQotI2lmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSBcCi0gICYmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCi0gICAgLyogRGlzYWJsZSB0aHJlYWQtdW5zYWZlIGZlYXR1cmVzIG9mIHBuZ2djY3JkICovCi0gICAgaWYgKHBuZ19hY2Nlc3NfdmVyc2lvbl9udW1iZXIoKSA+PSAxMDIwMCkKLSAgICB7Ci0gICAgICBwbmdfdWludF8zMiBtbXhfZGlzYWJsZV9tYXNrID0gMDsKLSAgICAgIHBuZ191aW50XzMyIGFzbV9mbGFnczsKLQotICAgICAgbW14X2Rpc2FibGVfbWFzayB8PSAoIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVyAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEggKTsKLSAgICAgIGFzbV9mbGFncyA9IHBuZ19nZXRfYXNtX2ZsYWdzKHBuZ19wdHIpOwotICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgYXNtX2ZsYWdzICYgfm1teF9kaXNhYmxlX21hc2spOwotICAgIH0KLSNlbmRpZgotCi1Gb3IgbW9yZSBleHRlbnNpdmUgZXhhbXBsZXMgb2YgcnVudGltZSBxdWVyeWluZywgZW5hYmxpbmcgYW5kIGRpc2FibGluZwotb2Ygb3B0aW1pemVkIGZlYXR1cmVzLCBzZWUgY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5jIGluIHRoZSBsaWJwbmcKLXNvdXJjZS1jb2RlIGRpc3RyaWJ1dGlvbi4KLQotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlIG9yIGVuYWJsZSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gZmVhdHVyZXMKLWF0IGNvbXBpbGUgdGltZS4gIFRvIGRpc2FibGUgdGhlbSBlbnRpcmVseSwgd2hpY2ggbWF5IHJlc3VsdCBpbiBzbG93ZXIKLWJ1dCBzbWFsbGVyIGFuZCBsZXNzIGNvbXBsZXggYW5kIHRyb3VibGVzb21lIGNvZGUsIGRlZmluZQotCi0gICAgIFBOR19OT19BU1NFTUJMRVJfQ09ERQotCi1JZiB5b3UgZG8gdGhpcywgdGhlbiB0aGUgcnVuLXRpbWUgY29kZSBmb3Igc2V0dGluZyBhbmQgcXVlcnlpbmcgZmxhZ3MKLWRlc2NyaWJlZCBhYm92ZSwgYW5kIHRoZSBhc3NlbWJsZXIgY29kZSBpbiBwbmdnY2NyZC5jIG9yIHBuZ3ZjcmQuYyB3aWxsCi1ub3QgYmUgYnVpbHQuCi0KLUlmIHlvdSBoYXZlIGRpc2FibGVkIHRoZSBhc3NlbWJsZXIgY29kZSwgeW91IGNhbiBhbHNvIGRpc2FibGUgdGhlCi1vcHRpbWl6ZWQgQyBjb2RlLCB0byBvYnRhaW4gZXZlbiBzbG93ZXIgYnV0IHNtYWxsZXIgY29kZSwgYnkgZGVmaW5pbmcKLQotICAgICBQTkdfTk9fT1BUSU1aRURfQ09ERQotCi1UbyBkaXNhYmxlIG9ubHkgdGhlIE1NWCBhc3NlbWJsZXIgY29kZSwgZGVmaW5lCi0KLSAgICAgUE5HX05PX01NWF9DT0RFCi0KLVRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgdGhlIE1NWCBjb2RlOiBvbmUgZm9yIGdjYyBjb21waWxlcnMgYW5kIG9uZSBmb3IKLU1TVkMgY29tcGlsZXJzLiAgUG5nY29uZi5oIHNob3VsZCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGljaCB5b3UgYXJlCi11c2luZywgYW5kIGl0IHdpbGwgc2V0IGVpdGhlciBQTkdfVVNFX1BOR0dDQ1JEIG9yIFBOR19VU0VfUE5HVkNSRCBmb3IgeW91LgotCi1EZWZpbmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyB0byBkaXNhYmxlIHNwZWNpZmljIHBhcnRzIG9mIHRoZQotYXNzZW1ibGVyIGNvZGU6Ci0KLSAgICAgUE5HX05PX01NWF9DT01CSU5FX1JPVwotICAgICBQTkdfTk9fTU1YX1JFQURfSU5URVJMQUNFCi0gICAgIFBOR19OT19NTVhfUkVBRF9GSUxURVJfUk9XCi0KLUlmIHRoZSBsYXR0ZXIgaXMgbm90IGRpc2FibGVkLCB5b3UgY2FuIGRpc2FibGUgb25lIG9yIG1vcmUgb2YgdGhlCi1pbmRpdmlkdWFsIGZpbHRlciB0eXBlcyBieSBkZWZpbmluZwotCi0gICAgIFBOR19OT19NTVhfRklMVEVSX1NVQgotICAgICBQTkdfTk9fTU1YX0ZJTFRFUl9VUAotICAgICBQTkdfTk9fTU1YX0ZJTFRFUl9BVkcKLSAgICAgUE5HX05PX01NWF9GSUxURVJfUEFFVEgKLQotQnkgZGVmYXVsdCwgbGlicG5nIG9ubHkgZW5hYmxlcyB0aGUgInN1YiIgZmlsdGVyIHdoZW4gZ2NjLTMueCBpcyB1c2VkCi1iZWNhdXNlIGV4cGVyaW1lbnRzIHNob3cgdGhhdCBnY2MtMy54IHByb2R1Y2VzIGJhZCBjb2RlIGZvciB0aGUgb3RoZXJzLgotCi1XaGVuIHlvdSBkaXNhYmxlIHZhcmlvdXMgTU1YIGZlYXR1cmVzLCBsaWJwbmcgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGRlY29kZQotZmlsZXMgd2l0aCB0aG9zZSBmZWF0dXJlcy4gIEl0IHdpbGwgZmFsbCBiYWNrIHVwb24gdGhlIG9wdGltaXplZCBDIGNvZGUKLW9yIHRoZSB1bm9wdGltaXplZCBDIGNvZGUgdG8gZGVjb2RlIHRoZW0uCi0KLQogLlNIIFZJSS4gIE1ORyBzdXBwb3J0CiAKIFRoZSBNTkcgc3BlY2lmaWNhdGlvbiAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubGlicG5nLm9yZy9wdWIvbW5nKSBhbGxvd3MKQEAgLTMzNzgsMTMgKzMyMDYsMTMgQEAKIAogLlNIIElYLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotQXVndXN0IDMwLCAyMDA3CitTZXB0ZW1iZXIgMSwgMjAwNwogCiBTaW5jZSB0aGUgUE5HIERldmVsb3BtZW50IGdyb3VwIGlzIGFuIGFkLWhvYyBib2R5LCB3ZSBjYW4ndCBtYWtlCiBhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbi4KIAogVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotdXB3YXJkIHRocm91Z2ggMS4yLjIwcmMzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4yLjIwcmM0IGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAKIExpYnBuZyBvbmx5IGhhcyB0aHJlZSB5ZWFyIGZpZWxkcy4gIE9uZSBpcyBhIDItYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyIHRoYXQKQEAgLTM1NzksOCArMzQwNyw4IEBACiAgMS4wLjI3ICAgICAgICAgICAgICAxMCAgICAxMDAyNyAgMTAuc28uMC4yN1suMF0KICAxLjIuMTkgICAgICAgICAgICAgIDEzICAgIDEwMjE5ICAxMi5zby4wLjE5Wy4wXQogIDEuMi4yMGJldGEwMS0wNCAgICAgMTMgICAgMTAyMjAgIDEyLnNvLjAuMjBbLjBdCi0gMS4wLjI4cmMxLTIgICAgICAgICAxMCAgICAxMDAyOCAgMTAuc28uMC4yOFsuMF0KLSAxLjIuMjByYzEtMiAgICAgICAgIDEzICAgIDEwMjIwICAxMi5zby4wLjIwWy4wXQorIDEuMC4yOHJjMS00ICAgICAgICAgMTAgICAgMTAwMjggIDEwLnNvLjAuMjhbLjBdCisgMS4yLjIwcmMxLTQgICAgICAgICAxMyAgICAxMDIyMCAgMTIuc28uMC4yMFsuMF0KICAxLjAuMjggICAgICAgICAgICAgIDEwICAgIDEwMDI4ICAxMC5zby4wLjI4Wy4wXQogIDEuMi4yMCAgICAgICAgICAgICAgMTMgICAgMTAyMjAgIDEyLnNvLjAuMjBbLjBdCiAKQEAgLTM2MzgsNyArMzQ2Niw3IEBACiAKIFRoYW5rcyB0byBGcmFuayBKLiBULiBXb2pjaWsgZm9yIGhlbHBpbmcgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbi4KIAotTGlicG5nIHZlcnNpb24gMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3OgorTGlicG5nIHZlcnNpb24gMS4yLjIwcmM0IC0gU2VwdGVtYmVyIDEsIDIwMDc6CiBJbml0aWFsbHkgY3JlYXRlZCBpbiAxOTk1IGJ5IEd1eSBFcmljIFNjaGFsbmF0LCB0aGVuIG9mIEdyb3VwIDQyLCBJbmMuCiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24gKGdsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0KS4KIApAQCAtMzY1OSw3ICszNDg3LDcgQEAKIElmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKIHRoaXMgc2VudGVuY2UuCiAKLWxpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuMi4yMHJjMywgQXVndXN0IDMwLCAyMDA3LCBhcmUKK2xpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuMi4yMHJjNCwgU2VwdGVtYmVyIDEsIDIwMDcsIGFyZQogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTM3NTgsNyArMzU4Niw3IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLUF1Z3VzdCAzMCwgMjAwNworU2VwdGVtYmVyIDEsIDIwMDcKIAogLlwiIGVuZCBvZiBtYW4gcGFnZQogCmRpZmYgLS1naXQgYS9saWJwbmdwZi4zIGIvbGlicG5ncGYuMwppbmRleCAxYWVhNWE4Li4wNmZkZGZhIDEwMDY0NAotLS0gYS9saWJwbmdwZi4zCisrKyBiL2xpYnBuZ3BmLjMKQEAgLTEsNiArMSw2IEBACi0uVEggTElCUE5HUEYgMyAiQXVndXN0IDMwLCAyMDA3IgorLlRIIExJQlBOR1BGIDMgIlNlcHRlbWJlciAxLCAyMDA3IgogLlNIIE5BTUUKLWxpYnBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIFJlZmVyZW5jZSBMaWJyYXJ5IDEuMi4yMHJjMworbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjIwcmM0CiAocHJpdmF0ZSBmdW5jdGlvbnMpCiAuU0ggU1lOT1BTSVMKIFxmQiNpbmNsdWRlIDxwbmcuaD5cZlAKZGlmZiAtLWdpdCBhL3BuZy41IGIvcG5nLjUKaW5kZXggZmFkYjg1OC4uMzE3YjdhZSAxMDA2NDQKLS0tIGEvcG5nLjUKKysrIGIvcG5nLjUKQEAgLTEsNCArMSw0IEBACi0uVEggUE5HIDUgIkF1Z3VzdCAzMCwgMjAwNyIKKy5USCBQTkcgNSAiU2VwdGVtYmVyIDEsIDIwMDciCiAuU0ggTkFNRQogcG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgZm9ybWF0CiAuU0ggREVTQ1JJUFRJT04KZGlmZiAtLWdpdCBhL3BuZy5jIGIvcG5nLmMKaW5kZXggNTRkNmY3YS4uZTZmZmNkNCAxMDA2NDQKLS0tIGEvcG5nLmMKKysrIGIvcG5nLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlICJwbmcuaCIKIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMl8yMHJjMyBZb3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8yMHJjMzsKK3R5cGVkZWYgdmVyc2lvbl8xXzJfMjByYzQgWW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzJfMjByYzQ7CiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIEMgZmlsZXMuICBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIHZlcnNpb24KICAqIHN0cmluZyBkZWZpbmVkIGluIHBuZy5oLiAgKi8KQEAgLTY3LDExICs2Nyw2IEBACiAvKiBvZmZzZXQgdG8gbmV4dCBpbnRlcmxhY2UgYmxvY2sgaW4gdGhlIHkgZGlyZWN0aW9uICovCiBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfeWluY1tdID0gezgsIDgsIDgsIDQsIDQsIDIsIDJ9OwogCi0vKiB3aWR0aCBvZiBpbnRlcmxhY2UgYmxvY2sgKHVzZWQgaW4gYXNzZW1ibGVyIHJvdXRpbmVzIG9ubHkpICovCi0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpIHx8IGRlZmluZWQoUE5HX09QVElNSVpFRF9DT0RFX1NVUFBPUlRFRCkKLVBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OwotI2VuZGlmCi0KIC8qIEhlaWdodCBvZiBpbnRlcmxhY2UgYmxvY2suICBUaGlzIGlzIG5vdCBjdXJyZW50bHkgdXNlZCAtIGlmIHlvdSBuZWVkCiAgKiBpdCwgdW5jb21tZW50IGl0IGhlcmUgYW5kIGluIHBuZy5oCiBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaGVpZ2h0W10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CkBAIC02OTgsNyArNjkzLDcgQEAKIHBuZ19nZXRfY29weXJpZ2h0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CiAgICBwbmdfcHRyID0gcG5nX3B0cjsgIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgcG5nX3B0ciAqLwotICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3XG5cCisgICByZXR1cm4gKChwbmdfY2hhcnApICJcbiBsaWJwbmcgdmVyc2lvbiAxLjIuMjByYzQgLSBTZXB0ZW1iZXIgMSwgMjAwN1xuXAogICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uXG5cCiAgICBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5NyBBbmRyZWFzIERpbGdlclxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuXG4iKTsKQEAgLTgyNSw1NyArODIwLDE4IEBACiB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19pbml0X21teF9mbGFncyAocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKLSAgICBpZihwbmdfcHRyID09IE5VTEwpIHJldHVybjsKLSAgICBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkID0gMDsKLSAgICBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkID0gMDsKLQotIyAgaWYgKGRlZmluZWQoUE5HX1VTRV9QTkdWQ1JEKSB8fCBkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpKQotCi0gICAgcG5nX3B0ci0+YXNtX2ZsYWdzIHw9IFBOR19BU01fRkxBR19NTVhfU1VQUE9SVF9DT01QSUxFRDsKLQotICAgIGlmIChwbmdfbW14X3N1cHBvcnQoKSA+IDApIHsKLSAgICAgICAgcG5nX3B0ci0+YXNtX2ZsYWdzIHw9IFBOR19BU01fRkxBR19NTVhfU1VQUE9SVF9JTl9DUFUKLSMgICAgaWZkZWYgUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVwotIyAgICBlbmRpZgotIyAgICBpZmRlZiBQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRQotIyAgICBlbmRpZgotIyAgICBpZm5kZWYgUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotIyAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCA7Ci0KLSAgICAgICAgcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCA9IFBOR19NTVhfUk9XQllURVNfVEhSRVNIT0xEX0RFRkFVTFQ7Ci0gICAgICAgIHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQgPSBQTkdfTU1YX0JJVERFUFRIX1RIUkVTSE9MRF9ERUZBVUxUOwotIyAgICBlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBuZ19wdHItPmFzbV9mbGFncyAmPSB+KCBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfTU1YX1JFQURfRkxBR1MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19NTVhfV1JJVEVfRkxBR1MgKTsKLSAgICB9Ci0KLSMgIGVsc2UgLyogIShQTkdWQ1JEIHx8IFBOR0dDQ1JEKSAqLwotCi0gICAgLyogY2xlYXIgYWxsIE1NWCBmbGFnczsgbm8gc3VwcG9ydCBpcyBjb21waWxlZCBpbiAqLwotICAgIHBuZ19wdHItPmFzbV9mbGFncyAmPSB+KCBQTkdfTU1YX0ZMQUdTICk7Ci0KLSMgIGVuZGlmIC8qID8oUE5HVkNSRCB8fCBQTkdHQ0NSRCkgKi8KKyAgIC8qIG9ic29sZXRlLCB0byBiZSByZW1vdmVkIGZyb20gbGlicG5nLTEuNC4wICovCiB9CiAKICNlbmRpZiAvKiAhKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICovCiAKIC8qIHRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGxpYnBuZyAxLjIuMCAqLwotI2lmICFkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpICYmICFkZWZpbmVkKFBOR19VU0VfUE5HVkNSRCkKIGludCBQTkdBUEkKIHBuZ19tbXhfc3VwcG9ydCh2b2lkKQogeworICAgLyogb2Jzb2xldGUsIHRvIGJlIHJlbW92ZWQgZnJvbSBsaWJwbmctMS40LjAgKi8KICAgICByZXR1cm4gLTE7CiB9Ci0jZW5kaWYKICNlbmRpZiAvKiBQTkdfMV8wX1ggKi8KICNlbmRpZiAvKiBQTkdfUkVBRF9TVVBQT1JURUQgJiYgUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCAqLwogCmRpZmYgLS1naXQgYS9wbmcuaCBiL3BuZy5oCmluZGV4IGEyNmE3MjUuLmE0YWE4ZDAgMTAwNjQ0Ci0tLSBhL3BuZy5oCisrKyBiL3BuZy5oCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmcuaCAtIGhlYWRlciBmaWxlIGZvciBQTkcgcmVmZXJlbmNlIGxpYnJhcnkKICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjIuMjByYzMgLSBBdWd1c3QgMzAsIDIwMDcKKyAqIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjNCAtIFNlcHRlbWJlciAxLCAyMDA3CiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQogICogKFZlcnNpb24gMC44OCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuKQpAQCAtOSw3ICs5LDcgQEAKICAqIEF1dGhvcnMgYW5kIG1haW50YWluZXJzOgogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjcxLCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTY6IEd1eSBTY2hhbG5hdAogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjg5YywgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3OiBBbmRyZWFzIERpbGdlcgotICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3OiBHbGVubgorICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4yLjIwcmM0IC0gU2VwdGVtYmVyIDEsIDIwMDc6IEdsZW5uCiAgKiAgU2VlIGFsc28gIkNvbnRyaWJ1dGluZyBBdXRob3JzIiwgYmVsb3cuCiAgKgogICogTm90ZSBhYm91dCBsaWJwbmcgdmVyc2lvbiBudW1iZXJzOgpAQCAtMTU2LDggKzE1Niw4IEBACiAgKiAgICAxLjAuMjcgICAgICAgICAgICAgICAgICAxMCAgICAxMDAyNyAgMTAuc28uMC4yN1suMF0KICAqICAgIDEuMi4xOSAgICAgICAgICAgICAgICAgIDEzICAgIDEwMjE5ICAxMi5zby4wLjE5Wy4wXQogICogICAgMS4yLjIwYmV0YTAxLTA0ICAgICAgICAgMTMgICAgMTAyMjAgIDEyLnNvLjAuMjBbLjBdCi0gKiAgICAxLjAuMjhyYzEtMiAgICAgICAgICAgICAxMCAgICAxMDAyOCAgMTAuc28uMC4yOFsuMF0KLSAqICAgIDEuMi4yMHJjMS0yICAgICAgICAgICAgIDEzICAgIDEwMjIwICAxMi5zby4wLjIwWy4wXQorICogICAgMS4wLjI4cmMxLTQgICAgICAgICAgICAgMTAgICAgMTAwMjggIDEwLnNvLjAuMjhbLjBdCisgKiAgICAxLjIuMjByYzEtNCAgICAgICAgICAgICAxMyAgICAxMDIyMCAgMTIuc28uMC4yMFsuMF0KICAqICAgIDEuMC4yOCAgICAgICAgICAgICAgICAgIDEwICAgIDEwMDI4ICAxMC5zby4wLjI4Wy4wXQogICogICAgMS4yLjIwICAgICAgICAgICAgICAgICAgMTMgICAgMTAyMjAgIDEyLnNvLjAuMjBbLjBdCiAgKgpAQCAtMTg5LDcgKzE4OSw3IEBACiAgKiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiAgKiB0aGlzIHNlbnRlbmNlLgogICoKLSAqIGxpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuMi4yMHJjMywgQXVndXN0IDMwLCAyMDA3LCBhcmUKKyAqIGxpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuMi4yMHJjNCwgU2VwdGVtYmVyIDEsIDIwMDcsIGFyZQogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCiAgKiBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4yLjUKICAqIHdpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgpAQCAtMzAxLDEzICszMDEsMTMgQEAKICAqIFkySyBjb21wbGlhbmNlIGluIGxpYnBuZzoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCi0gKiAgICBBdWd1c3QgMzAsIDIwMDcKKyAqICAgIFNlcHRlbWJlciAxLCAyMDA3CiAgKgogICogICAgU2luY2UgdGhlIFBORyBEZXZlbG9wbWVudCBncm91cCBpcyBhbiBhZC1ob2MgYm9keSwgd2UgY2FuJ3QgbWFrZQogICogICAgYW4gb2ZmaWNpYWwgZGVjbGFyYXRpb24uCiAgKgogICogICAgVGhpcyBpcyB5b3VyIHVub2ZmaWNpYWwgYXNzdXJhbmNlIHRoYXQgbGlicG5nIGZyb20gdmVyc2lvbiAwLjcxIGFuZAotICogICAgdXB3YXJkIHRocm91Z2ggMS4yLjIwcmMzIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgorICogICAgdXB3YXJkIHRocm91Z2ggMS4yLjIwcmM0IGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogICogICAgdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAgKgogICogICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKQEAgLTM2Myw5ICszNjMsOSBAQAogICovCiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHBuZy5oIC0gdGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZlcnNpb24gaW4gcG5nLmMgKi8KLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU1RSSU5HICIxLjIuMjByYzMiCisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4yLjIwcmM0IgogI2RlZmluZSBQTkdfSEVBREVSX1ZFUlNJT05fU1RSSU5HIFwKLSAgICIgbGlicG5nIHZlcnNpb24gMS4yLjIwcmMzIC0gQXVndXN0IDMwLCAyMDA3XG4iCisgICAiIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjNCAtIFNlcHRlbWJlciAxLCAyMDA3XG4iCiAKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU09OVU0gICAwCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX0RMTE5VTSAgMTMKQEAgLTM3Nyw3ICszNzcsNyBAQAogLyogVGhpcyBzaG91bGQgbWF0Y2ggdGhlIG51bWVyaWMgcGFydCBvZiB0aGUgZmluYWwgY29tcG9uZW50IG9mCiAgKiBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIG9taXR0aW5nIGFueSBsZWFkaW5nIHplcm86ICovCiAKLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDMKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDQKIAogLyogUmVsZWFzZSBTdGF0dXMgKi8KICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9BTFBIQSAgICAxCkBAIC01MDQsOSArNTA0LDYgQEAKIFBOR19FWFBPUlRfVkFSIChQTkdfQ09OU1QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX3lpbmNbN107CiBQTkdfRVhQT1JUX1ZBUiAoUE5HX0NPTlNUIGludCBGQVJEQVRBKSBwbmdfcGFzc19tYXNrWzddOwogUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfZHNwX21hc2tbN107Ci0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpIHx8IGRlZmluZWQoUE5HX09QVElNSVpFRF9DT0RFX1NVUFBPUlRFRCkKLVBOR19FWFBPUlRfVkFSIChQTkdfQ09OU1QgaW50IEZBUkRBVEEpIHBuZ19wYXNzX3dpZHRoWzddOwotI2VuZGlmCiAvKiBUaGlzIGlzbid0IGN1cnJlbnRseSB1c2VkLiAgSWYgeW91IG5lZWQgaXQsIHNlZSBwbmcuYyBmb3IgbW9yZSBkZXRhaWxzLgogUE5HX0VYUE9SVF9WQVIgKFBOR19DT05TVCBpbnQgRkFSREFUQSkgcG5nX3Bhc3NfaGVpZ2h0WzddOwogKi8KQEAgLTEyNzksOCArMTI3Niw3IEBACiAgICAgIHBuZ19zaXplX3QgY3VycmVudF90ZXh0X2xlZnQ7ICAgLyogaG93IG11Y2ggdGV4dCBsZWZ0IHRvIHJlYWQgaW4gaW5wdXQgKi8KICAgICAgcG5nX2NoYXJwIGN1cnJlbnRfdGV4dDsgICAgICAgICAvKiBjdXJyZW50IHRleHQgY2h1bmsgYnVmZmVyICovCiAgICAgIHBuZ19jaGFycCBjdXJyZW50X3RleHRfcHRyOyAgICAgLyogY3VycmVudCBsb2NhdGlvbiBpbiBjdXJyZW50X3RleHQgKi8KLSMgIGVuZGlmIC8qIFBOR19QUk9HUkVTU0lWRV9SRUFEX1NVUFBPUlRFRCAmJiBQTkdfVEVYVF9TVVBQT1JURUQgKi8KLQorIyAgZW5kaWYgLyogUE5HX1RFWFRfU1VQUE9SVEVEICovCiAjZW5kaWYgLyogUE5HX1BST0dSRVNTSVZFX1JFQURfU1VQUE9SVEVEICovCiAKICNpZiBkZWZpbmVkKF9fVFVSQk9DX18pICYmICFkZWZpbmVkKF9XaW5kb3dzKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykKQEAgLTE0MTYsNyArMTQxMiw3IEBACiAvKiBUaGlzIHRyaWdnZXJzIGEgY29tcGlsZXIgZXJyb3IgaW4gcG5nLmMsIGlmIHBuZy5jIGFuZCBwbmcuaAogICogZG8gbm90IGFncmVlIHVwb24gdGhlIHZlcnNpb24gbnVtYmVyLgogICovCi10eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8yXzIwcmMzOwordHlwZWRlZiBwbmdfc3RydWN0cCB2ZXJzaW9uXzFfMl8yMHJjNDsKIAogdHlwZWRlZiBwbmdfc3RydWN0IEZBUiAqIEZBUiAqIHBuZ19zdHJ1Y3RwcDsKIApkaWZmIC0tZ2l0IGEvcG5nY29uZi5oIGIvcG5nY29uZi5oCmluZGV4IGQ1ZWY1ZTMuLjAxZDc1NzggMTAwNjQ0Ci0tLSBhL3BuZ2NvbmYuaAorKysgYi9wbmdjb25mLmgKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ2NvbmYuaCAtIG1hY2hpbmUgY29uZmlndXJhYmxlIGZpbGUgZm9yIGxpYnBuZwogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMi4yMHJjMyAtIEF1Z3VzdCAzMCwgMjAwNworICogbGlicG5nIHZlcnNpb24gMS4yLjIwcmM0IC0gU2VwdGVtYmVyIDEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTYwMCwxMCArNjAwLDEwIEBACiAjZW5kaWYgLyogUE5HX1JFQURfVFJBTlNGT1JNU19TVVBQT1JURUQgKi8KIAogI2lmICFkZWZpbmVkKFBOR19OT19QUk9HUkVTU0lWRV9SRUFEKSAmJiBcCi0gIWRlZmluZWQoUE5HX1BST0dSRVNTSVZFX1JFQURfTk9UX1NVUFBPUlRFRCkgLyogaWYgeW91IGRvbid0IGRvIHByb2dyZXNzaXZlICovCi0jICBkZWZpbmUgUE5HX1BST0dSRVNTSVZFX1JFQURfU1VQUE9SVEVEICAgIC8qIHJlYWRpbmcuICBUaGlzIGlzIG5vdCB0YWxraW5nICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhYm91dCBpbnRlcmxhY2luZyBjYXBhYmlsaXR5ISAgWW91J2xsICovCi0gICAgICAgICAgICAgLyogc3RpbGwgaGF2ZSBpbnRlcmxhY2luZyB1bmxlc3MgeW91IGNoYW5nZSB0aGUgZm9sbG93aW5nIGxpbmU6ICovCisgIWRlZmluZWQoUE5HX1BST0dSRVNTSVZFX1JFQURfU1VQUE9SVEVEKSAvKiBpZiB5b3UgZG9uJ3QgZG8gcHJvZ3Jlc3NpdmUgICAqLworIyAgZGVmaW5lIFBOR19QUk9HUkVTU0lWRV9SRUFEX1NVUFBPUlRFRCAgLyogcmVhZGluZy4gIFRoaXMgaXMgbm90IHRhbGtpbmcgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhYm91dCBpbnRlcmxhY2luZyBjYXBhYmlsaXR5ISAgWW91J2xsICovCisgICAgICAgICAgIC8qIHN0aWxsIGhhdmUgaW50ZXJsYWNpbmcgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlIGZvbGxvd2luZyBsaW5lOiAqLwogCiAjZGVmaW5lIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCAvKiByZXF1aXJlZCBpbiBQTkctY29tcGxpYW50IGRlY29kZXJzICovCiAKQEAgLTcyNywxNSArNzI3LDggQEAKICNlbmRpZgogCiAvKiBQTkdfQVNTRU1CTEVSX0NPREUgd2FzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB2ZXJzaW9uIDEuMi4wIAotICogZXZlbiB3aGVuIFBOR19VU0VfUE5HVkNSRCBvciBQTkdfVVNFX1BOR0dDQ1JEIGlzIG5vdCBkZWZpbmVkLgotICoKLSAqIFBOR19OT19BU1NFTUJMRVJfQ09ERSBkaXNhYmxlcyB1c2Ugb2YgYWxsIGFzc2VtYmxlciBjb2RlLAotICogYW5kIHJlbW92ZXMgc2V2ZXJhbCBmdW5jdGlvbnMgZnJvbSB0aGUgQVBJLgotICoKLSAqIFBOR19OT19NTVhfQ09ERSBkaXNhYmxlcyB0aGUgdXNlIG9mIE1NWCBjb2RlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIEFQSS4KLSAqIFdoZW4gTU1YIGNvZGUgaXMgb2ZmLCB0aGVuIG9wdGltaXplZCBDIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhcmUgdXNlZCwKLSAqIGlmIFBOR19OT19PUFRJTUlaRURfQ09ERSBpcyBub3QgZW5hYmxlZC4gIFRoaXMgd2FzIGFkZGVkIGluIHZlcnNpb24KLSAqIDEuMi4xOS4KKyAqIGFuZCByZW1vdmVkIGZyb20gdmVyc2lvbiAxLjIuMjAuICBUaGUgZm9sbG93aW5nIHdpbGwgYmUgcmVtb3ZlZAorICogZnJvbSBsaWJwbmctMS40LjAKICovCiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1NVUFBPUlRFRCkgJiYgIWRlZmluZWQoUE5HX05PX09QVElNSVpFRF9DT0RFKQpAQCAtNzYyLDYgKzc1NSwxMiBAQAogIyAgICBlbmRpZgogIyAgZW5kaWYKIAorIyAgaWYgKGRlZmluZWQoX19NV0VSS1NfXykgJiYgKChfX01XRVJLU19fIDwgMHgwOTAwKSB8fCBtYWNpbnRvc2gpKQorIyAgICBpZiAhZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiAhZGVmaW5lZChQTkdfTk9fTU1YX0NPREUpCisjICAgICAgZGVmaW5lIFBOR19OT19NTVhfQ09ERQorIyAgICBlbmRpZgorIyAgZW5kaWYKKwogIyAgaWYgIWRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgJiYgIWRlZmluZWQoUE5HX05PX01NWF9DT0RFKQogIyAgICBkZWZpbmUgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAogIyAgZW5kaWYKQEAgLTc3NCwxNCArNzczLDExIEBACiAjICBpZiAhZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKSAmJiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICYmIFwKICAgICAgIWRlZmluZWQoUE5HX1VTRV9QTkdWQ1JEKQogIyAgICBkZWZpbmUgUE5HX1VTRV9QTkdHQ0NSRAotICAgICAvKiBJZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0aHJlYWQgc2FmZXR5IGFuZCB5b3UgYXJlIGNvbXBpbGluZwotICAgICAgICB3aXRoIFBOR19VU0VfUE5HQ0NSRCBmb3IgYW4gTU1YIGFwcGxpY2F0aW9uLCB5b3UgY2FuIGRlZmluZSB0aGlzIGZvcgotICAgICAgICBmYXN0ZXIgZXhlY3V0aW9uLiAgU2VlIHBuZ2djY3JkLmMuCiAjICAgIGRlZmluZSBQTkdfVEhSRUFEX1VOU0FGRV9PSwotICAgICAqLwogIyAgZW5kaWYKIAogI2VuZGlmCisvKiBlbmQgb2Ygb2Jzb2xldGUgY29kZSB0byBiZSByZW1vdmVkIGZyb20gbGlicG5nLTEuNC4wICovCiAKICNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAjaWYgIWRlZmluZWQoUE5HX05PX1VTRVJfTUVNKSAmJiAhZGVmaW5lZChQTkdfVVNFUl9NRU1fU1VQUE9SVEVEKQpAQCAtMTQ4OSw1MyArMTQ4NSw2IEBACiAjICBkZWZpbmUgUE5HX1pCVUZfU0laRSA2NTUzNkwKICNlbmRpZgogCi0jaWZkZWYgUE5HX1JFQURfU1VQUE9SVEVECi0vKiBQcmlvciB0byBsaWJwbmctMS4wLjksIHRoaXMgYmxvY2sgd2FzIGluIHBuZ2FzbXJkLmggKi8KLSNpZiBkZWZpbmVkKFBOR19JTlRFUk5BTCkKLQotI2lmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgfHwgZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpCi0gIC8qIFBsYXRmb3JtIG11c3QgYmUgUGVudGl1bS4gIE1ha2VmaWxlIG11c3QgYXNzZW1ibGUgYW5kIGxvYWQKLSAgICogcG5nZ2NjcmQuYyBvciAgcG5ndmNyZC5jLiBNTVggd2lsbCBiZSBkZXRlY3RlZCBhdCBydW4gdGltZSBhbmQKLSAgICogdXNlZCBpZiBwcmVzZW50LgotICAgKi8KLSMgIGlmbmRlZiBQTkdfTk9fTU1YX0NPTUJJTkVfUk9XCi0jICAgIGRlZmluZSBQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cKLSMgIGVuZGlmCi0jICBpZm5kZWYgUE5HX05PX01NWF9SRUFEX0lOVEVSTEFDRQotIyAgICBkZWZpbmUgUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFCi0jICBlbmRpZgotIyAgaWZuZGVmIFBOR19OT19NTVhfUkVBRF9GSUxURVJfUk9XCi0jICAgIGRlZmluZSBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XCi0jICAgIGlmbmRlZiBQTkdfTk9fTU1YX0ZJTFRFUl9TVUIKLSMgICAgICBkZWZpbmUgUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVECi0jICAgIGVuZGlmCi0jICAgIGlmbmRlZiBQTkdfTk9fTU1YX0ZJTFRFUl9VUAotIyAgICAgIGRlZmluZSBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAotIyAgICBlbmRpZgotIyAgICBpZm5kZWYgUE5HX05PX01NWF9GSUxURVJfQVZHCi0jICAgICAgZGVmaW5lIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAotIyAgICBlbmRpZgotIyAgICBpZm5kZWYgUE5HX05PX01NWF9GSUxURVJfUEFFVEgKLSMgICAgICBkZWZpbmUgUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0gIC8qIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCB0aHJlc2hvbGRzIGJlZm9yZSB0aGUgTU1YIGNvZGUga2lja3MgaW47IGlmIGVpdGhlcgotICAgKiByb3dieXRlcyBvciBiaXRkZXB0aCBpcyBiZWxvdyB0aGUgdGhyZXNob2xkLCBwbGFpbiBDIGNvZGUgaXMgdXNlZC4gIFRoZXNlCi0gICAqIGNhbiBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdmlhIHRoZSBwbmdfc2V0X21teF90aHJlc2hvbGRzKCkgY2FsbCBpbgotICAgKiBsaWJwbmcgMS4yLjAgYW5kIGxhdGVyLiAgVGhlIHZhbHVlcyBiZWxvdyB3ZXJlIGNob3NlbiBieSBJbnRlbC4KLSAgICovCi0jICBpZm5kZWYgUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVAotIyAgICBkZWZpbmUgUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVCAgMTI4ICAvKiAgPj0gICovCi0jICBlbmRpZgotIyAgaWZuZGVmIFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQKLSMgICAgZGVmaW5lIFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQgIDkgICAgLyogID49ICAqLyAgIAotIyAgZW5kaWYKLSNlbmRpZiAvKiBQTkdfVVNFX1BOR0dDQ1JEIHx8IFBOR19VU0VfUE5HVkNSRCAqLwotLyogLSBzZWUgcG5ndmNyZC5jIG9yIHBuZ2djY3JkLmMgZm9yIGluZm8gYWJvdXQgd2hhdCBpcyBjdXJyZW50bHkgZW5hYmxlZCAqLwotCi0jZW5kaWYgLyogUE5HX0lOVEVSTkFMICovCi0jZW5kaWYgLyogUE5HX1JFQURfU1VQUE9SVEVEICovCi0KIC8qIEFkZGVkIGF0IGxpYnBuZy0xLjIuOCAqLwogI2VuZGlmIC8qIFBOR19WRVJTSU9OX0lORk9fT05MWSAqLwogCmRpZmYgLS1naXQgYS9wbmdlcnJvci5jIGIvcG5nZXJyb3IuYwppbmRleCA5M2NlNDdiLi4yZDAzYzU2IDEwMDY0NAotLS0gYS9wbmdlcnJvci5jCisrKyBiL3BuZ2Vycm9yLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ2Vycm9yLmMgLSBzdHViIGZ1bmN0aW9ucyBmb3IgaS9vIGFuZCBtZW1vcnkgYWxsb2NhdGlvbgogICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjIwIEF1Z3VzdCAzMCwgMjAwNworICogTGFzdCBjaGFuZ2VkIGluIGxpYnBuZyAxLjIuMjAgU2VwdGVtYmVyIDEsIDIwMDcKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ2djY3JkLmMgYi9wbmdnY2NyZC5jCmluZGV4IDM3ZjNmMzMuLjcwMDdhZDkgMTAwNjQ0Ci0tLSBhL3BuZ2djY3JkLmMKKysrIGIvcG5nZ2NjcmQuYwpAQCAtMSw2MDQyICsxIEBACi0KLS8qIHBuZ2djY3JkLmMgLSBtaXhlZCBDL2Fzc2VtYmxlciB2ZXJzaW9uIG9mIHV0aWxpdGllcyB0byByZWFkIGEgUE5HIGZpbGUKLSAqCi0gKiBGb3IgSW50ZWwvQU1EIHg4NiBvciB4ODYtNjQgQ1BVIChQZW50aXVtLU1NWCBvciBsYXRlcikgYW5kIEdOVSBDIGNvbXBpbGVyLgotICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEF1Z3VzdCAxOSwgMjAwNwotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggSW50ZWwgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAyLDIwMDcgR3JlZyBSb2Vsb2ZzCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KLSAqCi0gKiBCYXNlZCBvbiBNU1ZDIGNvZGUgY29udHJpYnV0ZWQgYnkgTmlyYXYgQ2hoYXRyYXBhdGksIEludGVsIENvcnAuLCAxOTk4LgotICogSW50ZXJmYWNlIHRvIGxpYnBuZyBjb250cmlidXRlZCBieSBHaWxsZXMgVm9sbGFudCwgMTk5OS4KLSAqIEdOVSBDIHBvcnQgYnkgR3JlZyBSb2Vsb2ZzLCAxOTk5LTIwMDEuCi0gKgotICogUmVmZXJlbmNlczoKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZHJnL3BlbnRpdW1JSS9hcHBub3Rlcy85MTYvOTE2Lmh0bQotICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTIzLzkyMy5odG0KLSAqICAgICAgIFtJbnRlbCdzIHBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIHRoZSBNTVggdnMuIG5vbi1NTVggY29kZTsKLSAqICAgICAgICBtb3ZlZC9kZWxldGVkIGFzIG9mIDIwMDYsIGJ1dCB0ZXh0IGFuZCBzb21lIGdyYXBocyBzdGlsbAotICogICAgICAgIGF2YWlsYWJsZSB2aWEgV2F5QmFjayBNYWNoaW5lIGF0IGFyY2hpdmUub3JnXQotICoKLSAqICAgICBodHRwOi8vd3d3LmliaWJsaW8ub3JnL2dmZXJnL2xkcC9HQ0MtSW5saW5lLUFzc2VtYmx5LUhPV1RPLmh0bWwKLSAqICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKLSAqICAgICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvRXh0ZW5kZWQtQXNtLmh0bWwKLSAqICAgICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCi0gKiAgICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL0Z1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbAotICogICAgIEFNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFsLCB2b2x1bWVzIDEgYW5kIDUKLSAqICAgICAgIFtodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vUHJvY2Vzc29ycy9UZWNobmljYWxSZXNvdXJjZXMvMCwsMzBfMTgyXzczOV83MDQ0LDAwLmh0bWxdCi0gKiAgICAgSW50ZWwgNjQgYW5kIElBLTMyIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbHMKLSAqICAgICAgIFtodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscy9dCi0gKgotICogcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfKigpIHdlcmUgY29udmVydGVkIGluIHBsYWNlIHdpdGggaW50ZWwyZ2FzIDEuMy4xOgotICoKLSAqICAgICBpbnRlbDJnYXMgLW1kSSBwbmdnY2NyZC5jLnBhcnRpYWxseS1tc3ZjIC1vIHBuZ2djY3JkLmMKLSAqCi0gKiBhbmQgdGhlbiBjbGVhbmVkIHVwIGJ5IGhhbmQuICBTZWUgaHR0cDovL2hlcm1lcy50ZXJtaW5hbC5hdC9pbnRlbDJnYXMvIC4KLSAqCi0gKiBOT1RFOiAgQSBzdWZmaWNpZW50bHkgcmVjZW50IHZlcnNpb24gb2YgR05VIGFzIChvciBhcy5leGUgdW5kZXIgRE9TL1dpbmRvd3MpCi0gKiBpcyByZXF1aXJlZCB0byBhc3NlbWJsZSB0aGUgbmV3ZXIgYXNtIGluc3RydWN0aW9ucyBzdWNoIGFzIG1vdnEuICAoVmVyc2lvbgotICogMi41LjJsLjE1IGlzIGRlZmluaXRlbHkgdG9vIG9sZC4pICBTZWUgZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9iaW51dGlscy8gLgotICovCi0KLS8qCi0gKiBQT1JUSU5HIE5PVEVTIEFORCBDSEFOR0VMT0cgKG1vc3RseSBieSBHcmVnIFJvZWxvZnMpCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiAxOTk5MTAwNjoKLSAqICAtIGZpeGVkIHNpZ24gZXJyb3IgaW4gcG9zdC1NTVggY2xlYW51cCBjb2RlICgxNi0gJiAzMi1iaXQgY2FzZXMpCi0gKgotICogMTk5OTEwMDc6Ci0gKiAgLSBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgKHBvc3NpYmxlIG9yIGRlZmluaXRlKToKLSAqICAgICB4IFtET05FXSB3cml0ZSBNTVggY29kZSBmb3IgNjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDgpIFtub3QgdGVzdGVkXQotICogICAgIC0gd3JpdGUgTU1YIGNvZGUgZm9yIDQ4LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA2KQotICogICAgIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6Ci0gKiAgICAgICAgd2h5IHN1YnRyYWN0IDggZnJvbSB3aWR0aF9tbXggaW4gdGhlIHBhc3MgNC81IGNhc2U/Ci0gKiAgICAgICAgKG9ubHkgd2lkdGhfbW14IGNhc2UpIChuZWFyIGxpbmUgMjMzNSkKLSAqICAgICB4IFtET05FXSByZXBsYWNlIHBpeGVsX2J5dGVzIHdpdGhpbiBlYWNoIGJsb2NrIHdpdGggdGhlIHRydWUKLSAqICAgICAgICBjb25zdGFudCB2YWx1ZSAob3IgYXJlIGNvbXBpbGVycyBzbWFydCBlbm91Z2ggdG8gZG8gdGhhdD8pCi0gKiAgICAgLSByZXdyaXRlIGFsbCBNTVggaW50ZXJsYWNpbmcgY29kZSBzbyBpdCdzIGFsaWduZWQgd2l0aAotICogICAgICAgIHRoZSAqYmVnaW5uaW5nKiBvZiB0aGUgcm93IGJ1ZmZlciwgbm90IHRoZSBlbmQuICBUaGlzCi0gKiAgICAgICAgd291bGQgbm90IG9ubHkgYWxsb3cgb25lIHRvIGVsaW1pbmF0ZSBoYWxmIG9mIHRoZSBtZW1vcnkKLSAqICAgICAgICB3cml0ZXMgZm9yIG9kZCBwYXNzZXMgKHRoYXQgaXMsIHBhc3MgPT0gb2RkKSwgaXQgbWF5IGFsc28KLSAqICAgICAgICBlbGltaW5hdGUgc29tZSB1bmFsaWduZWQtZGF0YS1hY2Nlc3MgZXhjZXB0aW9ucyAoYXNzdW1pbmcKLSAqICAgICAgICB0aGVyZSdzIGEgcGVuYWx0eSBmb3Igbm90IGFsaWduaW5nIDY0LWJpdCBhY2Nlc3NlcyBvbgotICogICAgICAgIDY0LWJpdCBib3VuZGFyaWVzKS4gIFRoZSBvbmx5IGNhdGNoIGlzIHRoYXQgdGhlICJsZWZ0b3ZlciIKLSAqICAgICAgICBwaXhlbChzKSBhdCB0aGUgZW5kIG9mIHRoZSByb3cgd291bGQgaGF2ZSB0byBiZSBzYXZlZCwKLSAqICAgICAgICBidXQgdGhlcmUgYXJlIGVub3VnaCB1bnVzZWQgTU1YIHJlZ2lzdGVycyBpbiBldmVyeSBjYXNlLAotICogICAgICAgIHNvIHRoaXMgaXMgbm90IGEgcHJvYmxlbS4gIEEgZnVydGhlciBiZW5lZml0IGlzIHRoYXQgdGhlCi0gKiAgICAgICAgcG9zdC1NTVggY2xlYW51cCBjb2RlIChDIGNvZGUpIGluIGF0IGxlYXN0IHNvbWUgb2YgdGhlCi0gKiAgICAgICAgY2FzZXMgY291bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGFzc2VtYmxlciBibG9jay4KLSAqICB4IFtET05FXSB0aGUgInYzIHYyIHYxIHYwIHY3IHY2IHY1IHY0IiBjb21tZW50cyBhcmUgY29uZnVzaW5nLAotICogICAgIGluY29uc2lzdGVudCwgYW5kIGRvbid0IG1hdGNoIHRoZSBNTVggUHJvZ3JhbW1lcidzIFJlZmVyZW5jZQotICogICAgIE1hbnVhbCBjb252ZW50aW9ucyBhbnl3YXkuICBUaGV5IHNob3VsZCBiZSBjaGFuZ2VkIHRvCi0gKiAgICAgImI3IGI2IGI1IGI0IGIzIGIyIGIxIGIwLCIgd2hlcmUgYjAgaW5kaWNhdGVzIHRoZSBieXRlIHRoYXQKLSAqICAgICB3YXMgbG93ZXN0IGluIG1lbW9yeSAoaS5lLiwgY29ycmVzcG9uZGluZyB0byBhIGxlZnQgcGl4ZWwpCi0gKiAgICAgYW5kIGI3IGlzIHRoZSBieXRlIHRoYXQgd2FzIGhpZ2hlc3QgKGkuZS4sIGEgcmlnaHQgcGl4ZWwpLgotICoKLSAqIDE5OTkxMDE2OgotICogIC0gQnJlbm5hbidzIEd1aWRlIG5vdHdpdGhzdGFuZGluZywgZ2NjIHVuZGVyIExpbnV4IGRvZXMgKm5vdCoKLSAqICAgICB3YW50IGdsb2JhbHMgcHJlZml4ZWQgYnkgdW5kZXJzY29yZXMgd2hlbiByZWZlcmVuY2luZyB0aGVtLS0KLSAqICAgICBpLmUuLCBpZiB0aGUgdmFyaWFibGUgaXMgY29uc3Q0LCB0aGVuIHJlZmVyIHRvIGl0IGFzIGNvbnN0NCwKLSAqICAgICBub3QgX2NvbnN0NC4gIFRoaXMgc2VlbXMgdG8gYmUgYSBkamdwcC1zcGVjaWZpYyByZXF1aXJlbWVudC4KLSAqICAgICBBbHNvLCBzdWNoIHZhcmlhYmxlcyBhcHBhcmVudGx5ICptdXN0KiBiZSBkZWNsYXJlZCBvdXRzaWRlCi0gKiAgICAgb2YgZnVuY3Rpb25zOyBuZWl0aGVyIHN0YXRpYyBub3IgYXV0b21hdGljIHZhcmlhYmxlcyB3b3JrIGlmCi0gKiAgICAgZGVmaW5lZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgc2luZ2xlIGZ1bmN0aW9uLCBidXQgYm90aAotICogICAgIHN0YXRpYyBhbmQgdHJ1bHkgZ2xvYmFsIChtdWx0aS1tb2R1bGUpIHZhcmlhYmxlcyB3b3JrIGZpbmUuCi0gKgotICogMTk5OTEwMTc6Ci0gKiAgLSByZXBsYWNlZCBwaXhlbF9ieXRlcyBpbiBlYWNoIHBuZ19tZW1jcHkoKSBjYWxsIHdpdGggY29uc3RhbnQgdmFsdWUgZm9yCi0gKiAgICAgaW5saW5pbmcgKHBuZ19kb19yZWFkX2ludGVybGFjZSgpICJub24tTU1YL21vZGlmaWVkIEMgY29kZSIgYmxvY2spCi0gKgotICogMTk5OTEwMjM6Ci0gKiAgLSBmaXhlZCBwbmdfY29tYmluZV9yb3coKSBub24tTU1YIHJlcGxpY2F0aW9uIGJ1ZyAob2RkIHBhc3NlcyBvbmx5PykKLSAqICAtIHN3aXRjaGVkIGZyb20gc3RyaW5nLWNvbmNhdGVuYXRpb24td2l0aC1tYWNyb3MgdG8gY2xlYW5lciBtZXRob2Qgb2YKLSAqICAgICByZW5hbWluZyBnbG9iYWwgdmFyaWFibGVzIGZvciBkamdwcC0taS5lLiwgYWx3YXlzIHVzZSBwcmVmaXhlcyBpbgotICogICAgIGlubGluZWQgYXNzZW1ibGVyIGNvZGUgKD09IHN0cmluZ3MpIGFuZCBjb25kaXRpb25hbGx5IHJlbmFtZSB0aGUKLSAqICAgICB2YXJpYWJsZXMsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gIEhlbmNlIF9jb25zdDQsIF9tYXNrOF8wLCBldGMuCi0gKgotICogMTk5OTEwMjQ6Ci0gKiAgLSBmaXhlZCBtbXhzdXBwb3J0KCkvcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgZmlyc3Qtcm93IGJ1ZwotICogICAgIFRoaXMgb25lIHdhcyBzZXZlcmVseSB3ZWlyZDogIGV2ZW4gdGhvdWdoIG1teHN1cHBvcnQoKSBkb2Vzbid0IHRvdWNoCi0gKiAgICAgZWJ4ICh3aGVyZSAicm93IiBwb2ludGVyIHdhcyBzdG9yZWQpLCBpdCBuZXZlcnRoZWxlc3MgbWFuYWdlZCB0byB6ZXJvCi0gKiAgICAgdGhlIHJlZ2lzdGVyIChldmVuIGluIHN0YXRpYy9ub24tZlBJQyBjb2RlLS1zZWUgYmVsb3cpLCB3aGljaCBpbiB0dXJuCi0gKiAgICAgY2F1c2VkIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIHRvIHJldHVybiBwcmVtYXR1cmVseSBvbiB0aGUgZmlyc3Qgcm93IG9mCi0gKiAgICAgaW50ZXJsYWNlZCBpbWFnZXMgKGkuZS4sIHdpdGhvdXQgZXhwYW5kaW5nIHRoZSBpbnRlcmxhY2VkIHBpeGVscykuCi0gKiAgICAgSW5zcGVjdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgZGlkbid0IHR1cm4gdXAgYW55IGNsdWVzLAotICogICAgIGFsdGhvdWdoIGl0IGRpZCBwb2ludCBhdCBhIG1pbm9yIG9wdGltaXphdGlvbiAoaS5lLiwgZ2V0IHJpZCBvZgotICogICAgIG1teF9zdXBwb3J0ZWRfbG9jYWwgdmFyaWFibGUgYW5kIGp1c3QgdXNlIGVheCkuICBQb3NzaWJseSB0aGUgQ1BVSUQKLSAqICAgICBpbnN0cnVjdGlvbiBpcyBtb3JlIGRlc3RydWN0aXZlIHRoYW4gaXQgbG9va3M/ICAoTm90IHlldCBjaGVja2VkLikKLSAqICAtICJpbmZvIGdjYyIgd2FzIG5leHQgdG8gdXNlbGVzcywgc28gY29tcGFyZWQgZlBJQyBhbmQgbm9uLWZQSUMgYXNzZW1ibHkKLSAqICAgICBsaXN0aW5ncy4uLiAgQXBwYXJlbnRseSByZWdpc3RlciBzcGlsbGFnZSBoYXMgdG8gZG8gd2l0aCBlYngsIHNpbmNlCi0gKiAgICAgaXQncyB1c2VkIHRvIGluZGV4IHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgQ29tbWVudGluZyBpdCBvdXQgb2YgdGhlCi0gKiAgICAgaW5wdXQtcmVnIGxpc3RzIGluIHBuZ19jb21iaW5lX3JvdygpIGVsaW1pbmF0ZWQgY29tcGlsZXIgYmFyZmFnZSwgc28KLSAqICAgICBpZmRlZidkIHdpdGggX19QSUNfXyBtYWNybzogIGlmIGRlZmluZWQsIHVzZSBhIGdsb2JhbCBmb3IgdW5tYXNrCi0gKgotICogMTk5OTExMDc6Ci0gKiAgLSB2ZXJpZmllZCBDUFVJRCBjbG9iYmVyYWdlOiAgMTItY2hhciBzdHJpbmcgY29uc3RhbnQgKCJHZW51aW5lSW50ZWwiLAotICogICAgICJBdXRoZW50aWNBTUQiLCBldGMuKSBwbGFjZWQgaW4gZWJ4OmVjeDplZHguICBTdGlsbCBuZWVkIHRvIHBvbGlzaC4KLSAqCi0gKiAxOTk5MTEyMDoKLSAqICAtIG1hZGUgImRpZmYiIHZhcmlhYmxlIChub3cgIl9kaWYiKSBnbG9iYWwgdG8gc2ltcGxpZnkgY29udmVyc2lvbiBvZgotICogICAgIGZpbHRlcmluZyByb3V0aW5lcyAocnVubmluZyBvdXQgb2YgcmVncywgc2lnaCkuICAiZGlmZiIgaXMgc3RpbGwgdXNlZAotICogICAgIGluIGludGVybGFjaW5nIHJvdXRpbmVzLCBob3dldmVyLgotICogIC0gZml4ZWQgdXAgYm90aCB2ZXJzaW9ucyBvZiBtbXhzdXBwb3J0KCkgKE9SSUdfVEhBVF9VU0VEX1RPX0NMT0JCRVJfRUJYCi0gKiAgICAgbWFjcm8gZGV0ZXJtaW5lcyB3aGljaCBpcyB1c2VkKTsgb3JpZ2luYWwgbm90IHlldCB0ZXN0ZWQuCi0gKgotICogMjAwMDAyMTM6Ci0gKiAgLSB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYywgYmUgc3VyZSB0byB1c2UgIC1mb21pdC1mcmFtZS1wb2ludGVyCi0gKgotICogMjAwMDAzMTk6Ci0gKiAgLSBmaXhlZCBhIHJlZ2lzdGVyLW5hbWUgdHlwbyBpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSwgZGVmYXVsdCAoTU1YKSBjYXNlLAotICogICAgIHBhc3MgPT0gNCBvciA1LCB0aGF0IGNhdXNlZCB2aXNpYmxlIGNvcnJ1cHRpb24gb2YgaW50ZXJsYWNlZCBpbWFnZXMKLSAqCi0gKiAyMDAwMDYyMzoKLSAqICAtIFZhcmlvdXMgcHJvYmxlbXMgd2VyZSByZXBvcnRlZCB3aXRoIGdjYyAyLjk1LjIgaW4gdGhlIEN5Z3dpbiBlbnZpcm9ubWVudCwKLSAqICAgICBtYW55IG9mIHRoZSBmb3JtICJmb3JiaWRkZW4gcmVnaXN0ZXIgMCAoYXgpIHdhcyBzcGlsbGVkIGZvciBjbGFzcyBBUkVHLiIKLSAqICAgICBUaGlzIGlzIGV4cGxhaW5lZCBhdCBodHRwOi8vZ2NjLmdudS5vcmcvZm9tX3NlcnYvY2FjaGUvMjMuaHRtbCwgYW5kCi0gKiAgICAgQ2h1Y2sgV2lsc29uIHN1cHBsaWVkIGEgcGF0Y2ggaW52b2x2aW5nIGR1bW15IG91dHB1dCByZWdpc3RlcnMuICBTZWUKLSAqICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L2J1Z3MvP2Z1bmM9ZGV0YWlsYnVnJmJ1Z19pZD0xMDg3NDEmZ3JvdXBfaWQ9NTYyNAotICogICAgIGZvciB0aGUgb3JpZ2luYWwgKGFub255bW91cykgU291cmNlRm9yZ2UgYnVnIHJlcG9ydC4KLSAqCi0gKiAyMDAwMDcwNjoKLSAqICAtIENodWNrIFdpbHNvbiBwYXNzZWQgYWxvbmcgdGhlc2UgcmVtYWluaW5nIGdjYyAyLjk1LjIgZXJyb3JzOgotICogICAgICAgcG5nZ2NjcmQuYzogSW4gZnVuY3Rpb24gYHBuZ19jb21iaW5lX3Jvdyc6Ci0gKiAgICAgICBwbmdnY2NyZC5jOjUyNTogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCi0gKiAgICAgICBwbmdnY2NyZC5jOjY2OTogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCi0gKiAgICAgICBwbmdnY2NyZC5jOjgyODogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCi0gKiAgICAgICBwbmdnY2NyZC5jOjk5NDogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCi0gKiAgICAgICBwbmdnY2NyZC5jOjExNzc6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwotICogICAgIFRoZXkgYXJlIGFsbCB0aGUgc2FtZSBwcm9ibGVtIGFuZCBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSB1c2luZyB0aGUKLSAqICAgICBnbG9iYWwgX3VubWFzayB2YXJpYWJsZSB1bmNvbmRpdGlvbmFsbHksIG5vdCBqdXN0IGluIHRoZSAtZlBJQyBjYXNlLgotICogICAgIFJlcG9ydGVkbHkgZWFybGllciB2ZXJzaW9ucyBvZiBnY2MgYWxzbyBoYXZlIHRoZSBwcm9ibGVtIHdpdGggbW9yZSB0aGFuCi0gKiAgICAgMTAgb3BlcmFuZHM7IHRoZXkganVzdCBkb24ndCByZXBvcnQgaXQuICBNdWNoIHN0cmFuZ2VuZXNzIGVuc3VlcywgZXRjLgotICoKLSAqIDIwMDAwNzI5OgotICogIC0gZW5hYmxlZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpIChzaG9ydGVzdCByZW1haW5pbmcgdW5jb252ZXJ0ZWQKLSAqICAgICBNTVggcm91dGluZSk7IGJlZ2FuIGNvbnZlcnRpbmcgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKLSAqICAtIHRvIGZpbmlzaCByZW1haW5pbmcgc2VjdGlvbnM6Ci0gKiAgICAgLSBjbGVhbiB1cCBpbmRlbnRhdGlvbiBhbmQgY29tbWVudHMKLSAqICAgICAtIHByZWxvYWQgbG9jYWwgdmFyaWFibGVzCi0gKiAgICAgLSBhZGQgb3V0cHV0IGFuZCBpbnB1dCByZWdzIChvcmRlciBvZiBmb3JtZXIgZGV0ZXJtaW5lcyBudW1lcmljYWwKLSAqICAgICAgICBtYXBwaW5nIG9mIGxhdHRlcikKLSAqICAgICAtIGF2b2lkIGFsbCB1c2FnZSBvZiBlYnggKGluY2x1ZGluZyBieCwgYmgsIGJsKSByZWdpc3RlciBbMjAwMDA4MjNdCi0gKiAgICAgLSByZW1vdmUgIiQiIGZyb20gYWRkcmVzc2luZyBvZiBTaGlmdCBhbmQgTWFzayB2YXJpYWJsZXMgWzIwMDAwODIzXQotICoKLSAqIDIwMDAwNzMxOgotICogIC0gZ2xvYmFsIHVuaW9uIHZhcnMgY2F1c2luZyBzZWdmYXVsdHMgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCk/Ci0gKgotICogMjAwMDA4MjI6Ci0gKiAgLSBBUkdILCBzdHVwaWQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgc2VnZmF1bHQgb25seSBoYXBwZW5zIHdpdGgKLSAqICAgICBzaGFyZWQtbGlicmFyeSAoLWZQSUMpIHZlcnNpb24hICBDb2RlIHdvcmtzIGp1c3QgZmluZSBhcyBwYXJ0IG9mIHN0YXRpYwotICogICAgIGxpYnJhcnkuICBTaG91bGQgaGF2ZSB0ZXN0ZWQgdGhhdCBzb29uZXIuCi0gKiAgICAgZWJ4IGlzIGdldHRpbmcgY2xvYmJlcmVkIGFnYWluIChleHBsaWNpdGx5IHRoaXMgdGltZSk7IG5lZWQgdG8gc2F2ZSBpdAotICogICAgIG9uIHN0YWNrIG9yIHJld3JpdGUgYXNtIGNvZGUgdG8gYXZvaWQgdXNpbmcgaXQgYWx0b2dldGhlci4gIEJsYXJnaCEKLSAqCi0gKiAyMDAwMDgyMzoKLSAqICAtIGZpcnN0IHNlY3Rpb24gd2FzIHRyaWNraWVzdDsgYWxsIHJlbWFpbmluZyBzZWN0aW9ucyBoYXZlIGVieCAtPiBlZHggbm93LgotICogICAgICgtZlBJQyB3b3JrcyBhZ2Fpbi4pICBBbHNvIGFkZGVkIG1pc3NpbmcgdW5kZXJzY29yZXMgdG8gdmFyaW91cyBTaGlmdCoKLSAqICAgICBhbmQgKk1hc2sqIGdsb2JhbHMgYW5kIGdvdCByaWQgb2YgbGVhZGluZyAiJCIgc2lnbnMuCi0gKgotICogMjAwMDA4MjY6Ci0gKiAgLSBhZGRlZCB2aXN1YWwgc2VwYXJhdG9ycyB0byBoZWxwIG5hdmlnYXRlIG1pY3Jvc2NvcGljIHByaW50ZWQgY29waWVzCi0gKiAgICAgKGh0dHA6Ly9wb2JveC5jb20vfm5ld3QvY29kZS9ncHItbGF0ZXN0LnppcCwgbW9kZSAxMCk7IHN0YXJ0ZWQgd29ya2luZwotICogICAgIG9uIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpCi0gKgotICogMjAwMDA4Mjg6Ci0gKiAgLSBmaW5pc2hlZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKTogIG9ubHkgUGFldGggbGVmdCEgKDkzMCBsaW5lcy4uLikKLSAqICAgICBXaGF0IHRoZSBoZWxsLCBkaWQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSwgdG9vLiAgQ29tbWVudHMgbm90Ci0gKiAgICAgY2xlYW5lZCB1cC9zaG9ydGVuZWQgaW4gZWl0aGVyIHJvdXRpbmUsIGJ1dCBmdW5jdGlvbmFsaXR5IGlzIGNvbXBsZXRlCi0gKiAgICAgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgZmluZS4KLSAqCi0gKiAyMDAwMDgyOToKLSAqICAtIGFoaGgsIGZpZ3VyZWQgb3V0IGxhc3QoPykgYml0IG9mIGdjYy9nYXMgYXNtLWZ1OiAgaWYgcmVnaXN0ZXIgaXMgbGlzdGVkCi0gKiAgICAgYXMgYW4gaW5wdXQgcmVnICh3aXRoIGR1bW15IG91dHB1dCB2YXJpYWJsZXMsIGV0Yy4pLCB0aGVuIGl0ICpjYW5ub3QqCi0gKiAgICAgYWxzbyBhcHBlYXIgaW4gdGhlIGNsb2JiZXIgbGlzdCBvciBnY2MgMi45NS4yIHdpbGwgYmFyZi4gIFRoZSBzb2x1dGlvbgotICogICAgIGlzIHNpbXBsZSBlbm91Z2guLi4KLSAqCi0gKiAyMDAwMDkxNDoKLSAqICAtIGJ1ZyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKTogIDE2LWJpdCBncmF5c2NhbGUgbm90IGhhbmRsZWQKLSAqICAgICBjb3JyZWN0bHkgKGJ1dCA0OC1iaXQgUkdCIGp1c3QgZmluZSkKLSAqCi0gKiAyMDAwMDkxNjoKLSAqICAtIGZpeGVkIGJ1ZyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSwgYnBwID09IDIgY2FzZTsgdGhyZWUgZXJyb3JzOgotICogICAgIC0gIl9TaGlmdEJwcC51c2UgPSAyNDsiICAgICAgc2hvdWxkIGhhdmUgYmVlbiAgICJfU2hpZnRCcHAudXNlID0gMTY7IgotICogICAgIC0gIl9TaGlmdFJlbS51c2UgPSA0MDsiICAgICAgc2hvdWxkIGhhdmUgYmVlbiAgICJfU2hpZnRSZW0udXNlID0gNDg7IgotICogICAgIC0gInBzbGxxIF9TaGlmdFJlbSwgJSVtbTIiICAgc2hvdWxkIGhhdmUgYmVlbiAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0yIgotICoKLSAqIDIwMDEwMTAxOgotICogIC0gYWRkZWQgbmV3IHBuZ19pbml0X21teF9mbGFncygpIGZ1bmN0aW9uIChoZXJlIG9ubHkgYmVjYXVzZSBpdCBuZWVkcyB0bwotICogICAgIGNhbGwgbW14c3VwcG9ydCgpLCB3aGljaCBzaG91bGQgcHJvYmFibHkgYmVjb21lIGdsb2JhbCBwbmdfbW14c3VwcG9ydCgpKTsKLSAqICAgICBtb2RpZmllZCBvdGhlciBNTVggcm91dGluZXMgdG8gcnVuIGNvbmRpdGlvbmFsbHkgKHBuZ19wdHItPmFzbV9mbGFncykKLSAqCi0gKiAyMDAxMDEwMzoKLSAqICAtIHJlbmFtZWQgbW14c3VwcG9ydCgpIHRvIHBuZ19tbXhfc3VwcG9ydCgpLCB3aXRoIGF1dG8tc2V0IG9mIG1teF9zdXBwb3J0ZWQsCi0gKiAgICAgYW5kIG1hZGUgaXQgcHVibGljOyBtb3ZlZCBwbmdfaW5pdF9tbXhfZmxhZ3MoKSB0byBwbmcuYyBhcyBpbnRlcm5hbCBmdW5jCi0gKgotICogMjAwMTAxMDQ6Ci0gKiAgLSByZW1vdmVkIGRlcGVuZGVuY3kgb24gcG5nX3JlYWRfZmlsdGVyX3Jvd19jKCkgKEMgY29kZSBhbHJlYWR5IGR1cGxpY2F0ZWQKLSAqICAgICB3aXRoaW4gTU1YIHZlcnNpb24gb2YgcG5nX3JlYWRfZmlsdGVyX3JvdygpKSBzbyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCi0gKiAgICAgY29tcGlsZSBpdCBpbnRvIHBuZ3J1dGlsLm8KLSAqCi0gKiAyMDAxMDMxMDoKLSAqICAtIGZpeGVkIGJ1ZmZlci1vdmVycnVuIGJ1ZyBpbiBwbmdfY29tYmluZV9yb3coKSBDIGNvZGUgKG5vbi1NTVgpCi0gKgotICogMjAwMTA4MDg6Ci0gKiAgLSBhZGRlZCBQTkdfVEhSRUFEX1VOU0FGRV9PSyBhcm91bmQgY29kZSB1c2luZyBnbG9iYWwgdmFyaWFibGVzIFtHUi1QXQotICoKLSAqIDIwMDExMTI0OgotICogIC0gZml4ZWQgbWlzc2luZyBzYXZlIG9mIEVmbGFnIGluIHBuZ19tbXhfc3VwcG9ydCgpIFtNYXhpbSBTb2JvbGV2XQotICoKLSAqIDIwMDIwMzA0OgotICogIC0gZWxpbWluYXRlZCBpbmNvcnJlY3QgdXNlIG9mIHdpZHRoX21teCBpbiBwaXhlbF9ieXRlcyA9PSA4IGNhc2UKLSAqCi0gKiAyMDAyMDQwNzoKLSAqICAtIGZpeGVkIGluc3VmZmljaWVudCBwcmVzZXJ2YXRpb24gb2YgZWJ4IHJlZ2lzdGVyIFtTYW1pIEZhcmluXQotICoKLSAqIDIwMDQwNzI0OgotICogIC0gbW9yZSB0aW5rZXJpbmcgd2l0aCBjbG9iYmVyIGxpc3QgYXQgbGluZXMgNDUyOSBhbmQgNTAzMyB0byBnZXQgaXQgdG8KLSAqICAgICBjb21waWxlIHdpdGggZ2NjIDMuNCBbR1ItUF0KLSAqCi0gKiAyMDA0MDgwOToKLSAqICAtIGFkZGVkICJyaW0iIGRlZmluaXRpb25zIGZvciBDT05TVDQgYW5kIENPTlNUNiBbR1ItUF0KLSAqCi0gKiAyMDA2MDMwMzoKLSAqICAtIGFkZGVkICJPUzIiIHRvIGxpc3Qgb2Ygc3lzdGVtcyB0aGF0IGRvbid0IG5lZWQgbGVhZGluZyB1bmRlcnNjb3JlcyBbR1ItUF0KLSAqCi0gKiAyMDA2MDMyMDoKLSAqICAtIG1hZGUgUElDLWNvbXBsaWFudCBbQ2hyaXN0aWFuIEFpY2hpbmdlcl0KLSAqCi0gKiAyMDA3MDMxMzoKLSAqICAtIGZpbmFsbHkgYXBwbGllZCBHaXVzZXBwZSBHaGli8idzIDY0LWJpdCBwYXRjaCBvZiAyMDA2MDgwMyAoY29tcGxldGVseQotICogICAgIG92ZXJsb29rZWQgRHlsYW4gQWxleCBTaW1vbidzIHNpbWlsYXIgcGF0Y2ggb2YgMjAwNjA0MTQsIG9vcHMuLi4pCi0gKgotICogMjAwNzA1MjQ6Ci0gKiAgLSBmaXhlZCBsaW5rIGZhaWx1cmUgY2F1c2VkIGJ5IGFzbS1vbmx5IHZhcmlhYmxlcyBiZWluZyBvcHRpbWl6ZWQgb3V0Ci0gKiAgICAgKGlkZW50aWZpZWQgYnkgRGltaXRyaSBvZiBUcm9sbHRlY2gpIHdpdGggX19hdHRyaWJ1dGVfXygodXNlZCkpLCB3aGljaAotICogICAgIGFsc28gZ2V0cyByaWQgb2Ygd2FybmluZ3MgPT4gbnVrZWQgdWdseSBwbmdfc3F1ZWxjaF93YXJuaW5ncygpIGhhY2sKLSAqICAtIGRyb3BwZWQgcmVkdW5kYW50IGlmZGVmCi0gKiAgLSBtb3ZlZCBwbmdfbW14X3N1cHBvcnQoKSBiYWNrIHVwIHdoZXJlIG9yaWdpbmFsbHkgaW50ZW5kZWQgKGFzIGluCi0gKiAgICAgcG5ndmNyZC5jKSwgdXNpbmcgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBpbiBleHRyYSBwcm90b3R5cGUKLSAqCi0gKiAyMDA3MDUyNzoKLSAqICAtIHJldmlzZWQgcG5nX2NvbWJpbmVfcm93KCkgdG8gcmV1c2UgbWFzayBpbiBsaWV1IG9mIGV4dGVybmFsIF91bm1hc2sKLSAqICAtIG1vdmVkIDMyLWJpdCAoUkdCQSkgY2FzZSB0byB0b3Agb2YgcG5nX2NvbWJpbmVfcm93KCk6ICBtb3N0IGNvbW1vbgotICogIC0ganVzdCBhYm91dCByZWFkeSB0byBnaXZlIHVwIG9uIHg4Ni02NCAtZlBJQyBtb2RlOyBjYW4ndCBldmVuIGFjY2VzcyAxNgotICogICAgIF9tYXNrKl8qIGNvbnN0YW50cyB3aXRob3V0IHRyaWdnZXJpbmcgbGluayBlcnJvciBvbiBzaGFyZWQgbGlicmFyeToKLSAqICAgICAgIC91c3IvYmluL2xkOiBwbmdnY2NyZC5waWMubzogcmVsb2NhdGlvbiBSX1g4Nl82NF8zMlMgYWdhaW5zdCBgYSBsb2NhbAotICogICAgICAgICBzeW1ib2wnIGNhbiBub3QgYmUgdXNlZCB3aGVuIG1ha2luZyBhIHNoYXJlZCBvYmplY3Q7IHJlY29tcGlsZSB3aXRoCi0gKiAgICAgICAgIC1mUElDCi0gKiAgICAgICBwbmdnY2NyZC5waWMubzogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlCi0gKiAgICAgICAoIm9iamR1bXAgLXggcG5nZ2NjcmQucGljLm8gfCBncmVwIHJvZGF0YSIgdG8gdmVyaWZ5KQotICogICAgIFttaWdodCBiZSBhYmxlIHRvIHdvcmsgYXJvdW5kIGJ5IGRvaW5nIHdpdGhpbiBhc3NlbWJseSBjb2RlIHdoYXRldmVyCi0gKiAgICAgLWZQSUMgZG9lcywgYnV0IGdpdmVuIHByb2JsZW1zIHRvIGRhdGUsIHNlZW1zIGxpa2UgbG9uZyBzaG90Li4uXQotICogICAgIFtyZWxldmFudCBpZmRlZnM6ICBfX3g4Nl82NF9fICYmIF9fUElDX18gPT4gQyBjb2RlIG9ubHldCi0gKiAgLSBjaGFuZ2VkICNpZiAwIHRvICNpZmRlZiBQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQgaW4gY2FzZSBnY2MgZXZlcgotICogICAgIHN1cHBvcnRzIE1NWCByZWdzICglbW0wLCBldGMuKSBpbiBjbG9iYmVyIGxpc3QgKG5vdCBzdXBwb3J0ZWQgYnkgZ2NjCi0gKiAgICAgMi43LjIuMywgMi45MS42NiAoZWdjcyAxLjEuMiksIDMueCwgb3IgNC4xLjIpCi0gKgotICogMjAwNzA2MDM6Ci0gKiAgLSByZXZpc2VkIHBuZ19jb21iaW5lX3JvdygpIHRvIHVzZSBAR09UUENSRUwoJSVyaXApIGFkZHJlc3Npbmcgb24gX2M2NAotICogICAgIHN0cnVjdCBvZiBfbWFzaypfKiBjb25zdGFudHMgZm9yIHg4Ni02NCAtZlBJQzsgc2VlIHNhbS56b3kub3JnIGxpbmsKLSAqICAgICBhYm92ZSBmb3IgZGV0YWlscwotICogIC0gbW92ZWQgX2NvbnN0NCBhbmQgX2NvbnN0NiBpbnRvIF9jNjQgc3RydWN0LCByZW5hbWVkIHRvIF9hbWFzazVfM18wIGFuZAotICogICAgIF9hbWFzazdfMV8wLCByZXNwZWN0aXZlbHkKLSAqICAtIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIHVzZSBfYzY0Ll9tYXNrKl8qIHZhcnMgd2l0aGluIGFzbSBjb2RlLCBzbyBzdGlsbAotICogICAgIG5lZWQgc2luZ2xlIHZhcmlhYmxlcyBmb3Igbm9uLXg4Ni02NC8tZlBJQyBoYWxmIDotKAotICogIC0gcmVwbGFjZWQgdmFyaW91cyBfX1BJQ19fIGlmZGVmcyB3aXRoICpfR09UX2VieCBtYWNyb3MKLSAqICAtIG1vdmVkIF9MQkNhcnJ5TWFzayBhbmQgX0hCQ2xlYXJNYXNrIGludG8gX2M2NCBzdHJ1Y3QKLSAqICAtIGNvbmRpdGlvbmFsbHkgcmVwbGFjZWQgX3AqdGVtcCB2YXJpYWJsZXMgd2l0aCAlcjExZC0lcjEzZCAodmlhIHAqX1RFTVAKLSAqICAgICBhbmQgQ0xPQkJFUl9yMSpkIG1hY3JvcykKLSAqCi0gKiAyMDA3MDYwNDoKLSAqICAtIHJlcGxhY2VkIGFsbCBfQWN0aXZlTWFzayBhbmQgX0FjdGl2ZU1hc2tFbmQgd2l0aCBuZXcgX2FtYXNrKl8qXyogY29uc3RzCi0gKiAgICAgKF9hbWFzayBuYW1pbmcgY29udmVudGlvbjogIG51bWJlcnMgb2YgMDAtYnl0ZXMsIGZmLWJ5dGVzLCAwMC1ieXRlcykKLSAqICAgIC0gX0FjdGl2ZU1hc2sgICAgIC8vICgxMCkgLy8gYXZnL3BhZXRoL3N1YjsgcmVhZC1vbmx5OyBjb25zdHM7IG1vdnEvcGFuZAotICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBhdmcpICAgICAgX2FtYXNrNV8zXzAKLSAqICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZkxMIChicHAgNCwgNiwgYXZnKSAgIF9hbWFzazBfOF8wCi0gKiAgICAgICAweDAwMDAwMDAwMDAwMGZmZmZMTCAoYnBwIDIsIGF2ZykgICAgICBfYW1hc2s2XzJfMAotICogICAgICAgMHgwMDAwMDAwMDAwZmZmZmZmTEwgKGJwcCAzLCBwYWV0aCkgICAgX2FtYXNrNV8zXzAKLSAqICAgICAgIDB4MDAwMDAwMDBmZmZmZmZmZkxMIChicHAgNiwgcGFldGgpICAgIF9hbWFzazRfNF8wCi0gKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDQsIHBhZXRoKSAgICBfYW1hc2s0XzRfMAotICogICAgICAgMHgwMDAwMDAwMGZmZmZmZmZmTEwgKGJwcCA4LCBwYWV0aCkgICAgX2FtYXNrNF80XzAKLSAqICAgICAgIDB4MDAwMGZmZmZmZjAwMDAwMExMIChicHAgMywgc3ViKSAgICAgIF9hbWFzazJfM18zCi0gKiAgICAgICAweDAwMDAwMDAwZmZmZjAwMDBMTCAoYnBwIDIsIHN1YikgICAgICBfYW1hc2s0XzJfMgotICogICAgLSBfQWN0aXZlTWFza0VuZCAgLy8gKDEpICAvLyBwYWV0aCBvbmx5OyByZWFkLW9ubHk7IGNvbnN0OyBwYW5kCi0gKiAgICAgICAweGZmZmYwMDAwMDAwMDAwMDBMTCAoYnBwIDMsIHBhZXRoKSAgICBfYW1hc2swXzJfNgotICogIC0gY2hhbmdlZCBhbGwgIiNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIGxhdGVyIC8vICYmIGRlZmluZWQoX19QSUNfXykiCi0gKiAgICAgbGluZXMgdG8gIiNpZmRlZiBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCIgZm9yIGVhc2llci9zYWZlciB0ZXN0aW5nCi0gKgotICogMjAwNzA2MDU6Ci0gKiAgLSBtZXJnZWQgUE5HX3g4Nl82NF9VU0VfR09UUENSRUwsIG5vbi1QTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCBjb2RlIHZpYQotICogICAgICpNQVNLKiBhbmQgTE9BRC9SRVNUT1JFIG1hY3JvcwotICoKLSAqIDIwMDcwNjA3OgotICogIC0gcmVwbGFjZWQgYWxsIGNvbnN0YW50IGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKLSAqICAgICAoc3RpbGwgaGF2ZSB0d28gc2hhcmVkIGNhc2VzIGluIGF2Zywgc3ViIHJvdXRpbmVzKQotICoKLSAqIDIwMDcwNjA5OgotICogIC0gcmVwbGFjZWQgcmVtYWluaW5nIGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKLSAqICAgICAoc3BsaXQgc3ViIGFuZCBhdmcgNC82LWJwcCBjYXNlcyBpbnRvIHNlcGFyYXRlIGJsb2NrcykKLSAqICAtIGZpeGVkIHBhZXRoIGJ1ZyBkdWUgdG8gY2xvYmJlcmVkIHIxMS9yMTIvcjEzIHJlZ3MKLSAqCi0gKiAyMDA3MDYxMDoKLSAqICAtIG1hZGUgZ2xvYmFsICJfZGlmIiB2YXJpYWJsZSAoYXZnL3BhZXRoL3N1YiByb3V0aW5lcykgbG9jYWwgYWdhaW4gKG5vdwotICogICAgICJkaWZmIi0tc2VlIDE5OTkxMTIwIGVudHJ5IGFib3ZlKSwgdXNpbmcgcmVnaXN0ZXIgY29uc3RyYWludHMKLSAqICAtIG5vdGUgdGhhdCAlZWJwIGluIGNsb2JiZXIgbGlzdCBkb2Vzbid0IGFjdHVhbGx5IHdvcmssIGF0IGxlYXN0IGZvciAzMi1iaXQKLSAqICAgICB2ZXJzaW9uIGFuZCBnY2MgNC4xLjI7IG11c3Qgc2F2ZSBhbmQgcmVzdG9yZSBtYW51YWxseS4gIChTZWVtcyB0byB3b3JrCi0gKiAgICAgT0sgZm9yIDY0LWJpdCB2ZXJzaW9uIGFuZCBnY2MgMy40LjMsIGJ1dCBnY2MgbWF5IG5vdCBiZSB1c2luZyBlYnAvcmJwCi0gKiAgICAgaW4gdGhhdCBjYXNlLikKLSAqICAtIHN0YXJ0ZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKLSAqCi0gKiAyMDA3MDYxMjoKLSAqICAtIGNvbnRpbnVlZCByZXBsYWNpbmcgZGlyZWN0IF9NTVhMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cwotICoKLSAqIDIwMDcwNjEzOgotICogIC0gZmluaXNoZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHM7Ci0gKiAgICAgc3dpdGNoZWQgdG8gbG9jYWwgdmFyaWFibGUgKGFuZCByZW5hbWVkIGJhY2sgdG8gTU1YTGVuZ3RoKQotICoKLSAqIDIwMDcwNjE0OgotICogIC0gZml4ZWQgc3ViIGJwcCA9IDEgYnVnCi0gKiAgLSBzdGFydGVkIHJlcGxhY2luZyBkaXJlY3QgX0Z1bGxMZW5ndGggYWNjZXNzZXMgd2l0aCByZWdpc3RlciBjb25zdHJhaW50cwotICoKLSAqIDIwMDcwNjE1OgotICogIC0gZml4ZWQgNjQtYml0IHBhZXRoIGJwcCAzIGNyYXNoIGJ1ZyAobWlzcGxhY2VkIExPQURfR09UX3JicCkKLSAqICAtIGZpeGVkIDY0LWJpdCBwYWV0aCBicHAgMS8yIGFuZCBjbGVhbnVwLWJsb2NrIGNyYXNoIGJ1Z3MgKG1pc3BsYWNlZAotICogICAgIFJFU1RPUkVfcjExX3IxMl9yMTMpCi0gKiAgLSBzbGlnaHRseSBvcHRpbWl6ZWQgYXZnL3BhZXRoIGNsZWFudXAgYmxvY2tzIGFuZCBwYWV0aCBicHAgMS8yIGJsb2NrCi0gKiAgICAgKHNhdmUvcmVzdG9yZSBlYnggb25seSBpZiBuZWVkZWQpCi0gKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCi0gKgotICogMjAwNzA2MTY6Ci0gKiAgLSBmaW5pc2hlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKLSAqICAgICAoKnVnbHkqIGNvbmRpdGlvbmFsIGNsb2JiZXItc2VwYXJhdG9yIG1hY3JvcyBmb3IgYXZnIGFuZCBwYWV0aCwgc2lnaCkKLSAqCi0gKiAyMDA3MDYxODoKLSAqICAtIGZpeGVkIG1pc3BsYWNlZCBQTkdfVEhSRUFEX1VOU0FGRV9PSyBlbmRpZiAod2FzIG1pc3NpbmcgTE9BRF9HT1RfcmJwLwotICogICAgIFJFU1RPUkVfcmJwIGluIDMyLWJpdCB0aHJlYWQtc2FmZSBjYXNlKQotICogIC0gY2hhbmdlZCBhbGwgImlmZGVmICoiIHRvICJpZiBkZWZpbmVkKCopIiBbR1ItUF0KLSAqCi0gKiAyMDA3MDYxOToKLSAqICAtIHJlYXJyYW5nZWQgbW9zdCBiaXRkZXB0aC1yZWxhdGVkIGNhc2Ugc3RhdGVtZW50cyB0byBwdXQgbW9zdCBmcmVxdWVudAotICogICAgIGNhc2VzIGF0IHRvcCAoMjQtYml0LCAzMi1iaXQsIDgtYml0LCByZXN0KQotICoKLSAqIDIwMDcwNjIzOgotICogIC0gY2xlYW5lZCB1cCBwbmdfZGVidWcoKSB3YXJuaW5ncy9mb3JtYXR0aW5nCi0gKiAgLSByZW1vdmVkIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgaWZkZWZzIGFuZCBhZGRlZCBvdXRlciBfX0dOVUNfXyBpZmRlZgotICogICAgIChtb2R1bGUgbm8gbG9uZ2VyIHVzZWQgYnkgbm9uLXg4Ni9ub24tR0NDIGJ1aWxkcyBhcyBvZiBsaWJwbmcgMS4yLjE5KQotICogIC0gcmVtb3ZlZCBzaW5nbGUgbGlicG5nLTEuMi54IFBOR19ERUJVRyBkZXBlbmRlbmN5IG9uIDEuMC54IHBuZ19zdHJ1Y3QKLSAqICAgICBtZW1iZXIgKHJvd19idWZfc2l6ZSkKLSAqICAtIHJlYXJyYW5nZWQgcGFzcy1yZWxhdGVkIGlmLWJsb2NrcyBpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSB0byBwdXQgbW9zdAotICogICAgIGZyZXF1ZW50IGNhc2VzICg0LCA1KSBhdCB0b3AgW0dSLVAgc3VnZ2VzdGlvbl0KLSAqCi0gKiAyMDA3MDYyNC0yOToKLSAqICAtIGZpeGVkIDY0LWJpdCBjcmFzaCBidWc6ICBwb2ludGVycyAtPiByc2kvcmRpLCBub3QgZXNpL2VkaSAoc3dpdGNoZWQgdG8KLSAqICAgICAlMC8lMS8lMi8lMy8lNCBub3RhdGlvbjsgZWxpbWluYXRlZCBzaXplIHN1ZmZpeGVzIGZyb20gcmVsZXZhbnQgYWRkLwotICogICAgIGluYy9zdWIvbW92IGluc3RydWN0aW9uczsgY2hhbmdlZCBkdW1teSB2YXJzIHRvIHBvaW50ZXJzKQotICogICAgIC0gcG5nX2NvbWJpbmVfcm93KCkKLSAqICAgICAtIHBuZ19kb19yZWFkX2ludGVybGFjZSgpCi0gKiAgICAgLSBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKQotICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKQotICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkKLSAqICAgICAtIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKCkKLSAqICAtIE5PVEU6ICB0aGlzIGZpeCBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBtb2RpZnlpbmcgYSAzMi1iaXQgcmVnIChlLmcuLAotICogICAgICUlZWJ4KSBjbGVhcnMgdGhlIHRvcCBoYWxmIG9mIGl0cyBjb3JyZXNwb25kaW5nIDY0LWJpdCByZWcgKCUlcmJ4KSwgc28KLSAqICAgICBpdCdzIHNhZmUgdG8gbWl4IDMyLWJpdCBvcGVyYXRpb25zIHdpdGggNjQtYml0IGJhc2UvaW5kZXggYWRkcmVzc2luZwotICogICAgIChzZWUgbmV3IFBTSS9QQVgvUEJYL1BEWC9QQlAvZXRjLiAicG9pbnRlci1yZWdpc3RlciIgbWFjcm9zKTsgYXBwbGllcwotICogICAgIGFsc28gdG8gY2xvYmJlciBsaXN0cwotICoKLSAqIDIwMDcwNjMwOgotICogIC0gY2xlYW5lZCB1cCBmb3JtYXR0aW5nLCBtYWNyb3MsIG1pbm9yIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIDgtYnBwCi0gKiAgICAgcmVnaXN0ZXItdXNhZ2UgaW5lZmZpY2llbmN5Ci0gKiAgLSBmaXhlZCAzMi1iaXQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgYnVnICh3YXMgdXNpbmcgcG9pbnRlciBzaXplIGZvcgotICogICAgIDY0LWJpdCBkdW1teSB2YWx1ZXMpCi0gKgotICogMjAwNzA3MDM6Ci0gKiAgLSBhZGRlZCBjaGVjayBmb3IgKG1hbnVhbCkgUElDIG1hY3JvIHRvIGZpeCBPcGVuQlNEIGNyYXNoIGJ1ZwotICoKLSAqIDIwMDcwNzE3OgotICogIC0gZml4ZWQgNDgtYml0IHBuZ19jb21iaW5lX3JvdygpIGJ1ZyAod2FzIGFjdGluZyBsaWtlIDMyLWJpdCk6ICBjb3B5IDYKLSAqICAgICBieXRlcyBwZXIgcGl4ZWwsIG5vdCA0LCBhbmQgdXNlIHN0cmlkZSBvZiA2LCBub3QgNCwgaW4gdGhlIHNlY29uZCBsb29wCi0gKiAgICAgb2YgaW50ZXJsYWNlIHByb2Nlc3Npbmcgb2YgNDgtYml0IHBpeGVscyBbR1ItUF0KLSAqCi0gKiAyMDA3MDcyMjoKLSAqICAtIGZpeGVkIDY0LWJpdCBwbmdfdWludF8zMiBidWcgd2l0aCBNTVhMZW5ndGgvRnVsbExlbmd0aCB0ZW1wIHZhcnMKLSAqCi0gKiBbc3RpbGwgYnJva2VuOiAgdG9wcyBvZiBhbGwgcm93LWZpbHRlciBibG9ja3MgKGlucHV0L291dHB1dCBjb25zdHJhaW50cyk7Ci0gKiAgc2hvd3MgdXAgb24gNjQtYml0IGR5bmFtaWMgKC1mUElDKSB2ZXJzaW9uIHdpdGggLU8yLCBlc3BlY2lhbGx5IGlmIGRlYnVnLQotICogIHByaW50ZnMgZW5hYmxlZCwgYnV0IGF0IHJpZ2h0IGVkZ2Ugb2Ygb2RkLXdpZHRoIGltYWdlcyBldmVuIGlmIGRpc2FibGVkXQotICoKLSAqCi0gKiBTVElMTCBUTyBETzoKLSAqICAtIGZpeCBmaW5hbCB0aHJlYWQtdW5zYWZlIGNvZGUgdXNpbmcgc3RhY2sgdmFycyBhbmQgcG9pbnRlcj8gKHBhZXRoIHRvcCwKLSAqICAgICBkZWZhdWx0LCBib3R0b20gb25seTogIGRlZmF1bHQsIGJvdHRvbSBhbHJlYWR5IDUgcmVnIGNvbnN0cmFpbnRzOyBjb3VsZAotICogICAgIHJlcGxhY2UgYnBwIHdpdGggcG9pbnRlciBhbmQgZ3JvdXAgYnBwL3BhdGVtcC9wYnRlbXAvcGN0ZW1wIGluIGFycmF5KQotICogIC0gZml4IGVicC9uby1yZWctY29uc3RyYWludCBpbmVmZmljaWVuY3kgKGF2Zy9wYWV0aC9zdWIgdG9wKQotICogIC0gdGVzdCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSA2NC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gOCkKLSAqICAtIHdyaXRlIE1NWCBjb2RlIGZvciA0OC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gNikKLSAqICAtIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggMjQtYml0IGNhc2UgKHBpeGVsX2J5dGVzID09IDMpOgotICogICAgIHdoeSBzdWJ0cmFjdCA4IGZyb20gd2lkdGhfbW14IGluIHRoZSBwYXNzIDQvNSBjYXNlPyAgZHVlIHRvCi0gKiAgICAgb2RkIG51bWJlciBvZiBieXRlcz8gKG9ubHkgd2lkdGhfbW14IGNhc2UpIChuZWFyIGxpbmUgMjMzNSkKLSAqICAtIHJld3JpdGUgYWxsIE1NWCBpbnRlcmxhY2luZyBjb2RlIHNvIGl0J3MgYWxpZ25lZCB3aXRoIGJlZ2lubmluZwotICogICAgIG9mIHRoZSByb3cgYnVmZmVyLCBub3QgdGhlIGVuZCAoc2VlIDE5OTkxMDA3IGZvciBkZXRhaWxzKQotICogIC0gYWRkIGVycm9yIG1lc3NhZ2VzIHRvIGFueSByZW1haW5pbmcgYm9ndXMgZGVmYXVsdCBjYXNlcwotICogIC0gZW5hYmxlIHBpeGVsX2RlcHRoID09IDggY2FzZXMgaW4gcG5nX3JlYWRfZmlsdGVyX3JvdygpPyAodGVzdCBzcGVlZCkKLSAqICAtIHRyeSA9ciwgZXRjLiwgYXMgcmVnIGNvbnN0cmFpbnRzPyAgKHdvdWxkIGdjYyB1c2UgNjQtYml0IG9uZXMgb24geDg2LTY0PykKLSAqICAtIG5lZWQgZnVsbCwgbm9uLWdyYXBoaWNhbCwgQ1JDLWJhc2VkIHRlc3Qgc3VpdGUuLi4gIG1heWJlIGF1dG9nZW5lcmF0ZQotICogICAgIHJhbmRvbSBkYXRhIG9mIHZhcmlvdXMgaGVpZ2h0L3dpZHRoL2RlcHRoLCBjb21wdXRlIENSQ3MsIHdyaXRlIChDCi0gKiAgICAgZnVuY3MpLCByZWFkIChhc20vTU1YKSwgcmVjb21wdXRlIENSQ3MsIGFuZCBjb21wYXJlPwotICogIC0gd3JpdGUgdHJ1ZSB4ODYtNjQgdmVyc2lvbiB1c2luZyAxMjgtYml0ICJtZWRpYSBpbnN0cnVjdGlvbnMiLCAleG1tMC0xNSwKLSAqICAgICBhbmQgZXh0cmEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycwotICovCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotCi0jZGVmaW5lIFBOR19JTlRFUk5BTAotI2luY2x1ZGUgInBuZy5oIgotCi0KLS8qIGZvciBzb21lIGluZXhwbGljYWJsZSByZWFzb24sIGdjYyAzLjMuNSBvbiBPcGVuQlNEIChhbmQgZWxzZXdoZXJlPykgZG9lcwotICogKm5vdCogZGVmaW5lIF9fUElDX18gd2hlbiB0aGUgLWZQSUMgb3B0aW9uIGlzIHVzZWQsIHNvIHdlIGhhdmUgdG8gcmVseSBvbgotICogbWFrZWZpbGVzIGFuZCB3aGF0bm90IHRvIGRlZmluZSB0aGUgUElDIG1hY3JvIGV4cGxpY2l0bHkgKi8KLSNpZiBkZWZpbmVkKFBJQykgJiYgIWRlZmluZWQoX19QSUNfXykgICAvLyAodGhpcyBjYW4vc2hvdWxkIG1vdmUgdG8gcG5nY29uZi5oKQotIyAgZGVmaW5lIF9fUElDX18KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSAmJiBcCi0gICAgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKSAmJiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0KLS8qIGlmIHlvdSB3YW50L25lZWQgZnVsbCB0aHJlYWQtc2FmZXR5IG9uIHg4Ni02NCBldmVuIHdoZW4gbGlua2luZyBzdGF0aWNhbGx5LAotICogY29tbWVudCBvdXQgdGhlICImJiBkZWZpbmVkKF9fUElDX18pIiBwYXJ0IGhlcmU6ICovCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fUElDX18pCi0jICBkZWZpbmUgUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgICAgICAgICAgICAvLyBHT1RQQ1JFTCA9PiBmdWxsIHRocmVhZC1zYWZldHkKLSMgIGRlZmluZSBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQgIC8vIHdvcmtzIGFzIG9mIGdjYyAzLjQuMyAuLi4KLSNlbmRpZgotCi1pbnQgUE5HQVBJIHBuZ19tbXhfc3VwcG9ydCh2b2lkKTsKLQotI2lmIGRlZmluZWQoUE5HX1VTRV9MT0NBTF9BUlJBWVMpCi1zdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3N0YXJ0WzddID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9Owotc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19pbmNbN10gICA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKLXN0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfd2lkdGhbN10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07Ci0jZW5kaWYKLQotLyogZGpncHAsIFdpbjMyLCBDeWd3aW4sIGFuZCBPUzIgYWRkIHRoZWlyIG93biB1bmRlcnNjb3JlcyB0byBnbG9iYWwgdmFyaWFibGVzLAotICogc28gZGVmaW5lIHRoZW0gd2l0aG91dDogKi8KLSNpZiBkZWZpbmVkKF9fREpHUFBfXykgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLSMgIGRlZmluZSBfbW14X3N1cHBvcnRlZCAgbW14X3N1cHBvcnRlZAotIyAgZGVmaW5lIF9tYXNrOF8wICAgICAgICBtYXNrOF8wCi0jICBkZWZpbmUgX21hc2sxNl8xICAgICAgIG1hc2sxNl8xCi0jICBkZWZpbmUgX21hc2sxNl8wICAgICAgIG1hc2sxNl8wCi0jICBkZWZpbmUgX21hc2syNF8yICAgICAgIG1hc2syNF8yCi0jICBkZWZpbmUgX21hc2syNF8xICAgICAgIG1hc2syNF8xCi0jICBkZWZpbmUgX21hc2syNF8wICAgICAgIG1hc2syNF8wCi0jICBkZWZpbmUgX21hc2szMl8zICAgICAgIG1hc2szMl8zCi0jICBkZWZpbmUgX21hc2szMl8yICAgICAgIG1hc2szMl8yCi0jICBkZWZpbmUgX21hc2szMl8xICAgICAgIG1hc2szMl8xCi0jICBkZWZpbmUgX21hc2szMl8wICAgICAgIG1hc2szMl8wCi0jICBkZWZpbmUgX21hc2s0OF81ICAgICAgIG1hc2s0OF81Ci0jICBkZWZpbmUgX21hc2s0OF80ICAgICAgIG1hc2s0OF80Ci0jICBkZWZpbmUgX21hc2s0OF8zICAgICAgIG1hc2s0OF8zCi0jICBkZWZpbmUgX21hc2s0OF8yICAgICAgIG1hc2s0OF8yCi0jICBkZWZpbmUgX21hc2s0OF8xICAgICAgIG1hc2s0OF8xCi0jICBkZWZpbmUgX21hc2s0OF8wICAgICAgIG1hc2s0OF8wCi0jICBkZWZpbmUgX2FtYXNrNV8zXzAgICAgIGFtYXNrNV8zXzAKLSMgIGRlZmluZSBfYW1hc2s3XzFfMCAgICAgYW1hc2s3XzFfMAotIyAgZGVmaW5lIF9MQkNhcnJ5TWFzayAgICBMQkNhcnJ5TWFzawotIyAgZGVmaW5lIF9IQkNsZWFyTWFzayAgICBIQkNsZWFyTWFzawotIyAgZGVmaW5lIF9hbWFzazBfOF8wICAgICBhbWFzazBfOF8wCi0jICBkZWZpbmUgX2FtYXNrNl8yXzAgICAgIGFtYXNrNl8yXzAKLSMgIGRlZmluZSBfYW1hc2s0XzRfMCAgICAgYW1hc2s0XzRfMAotIyAgZGVmaW5lIF9hbWFzazBfMl82ICAgICBhbWFzazBfMl82Ci0jICBkZWZpbmUgX2FtYXNrMl8zXzMgICAgIGFtYXNrMl8zXzMKLSMgIGRlZmluZSBfYW1hc2s0XzJfMiAgICAgYW1hc2s0XzJfMgotIyAgaWYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKLSMgICAgZGVmaW5lIF9wYXRlbXAgICAgICAgcGF0ZW1wCi0jICAgIGRlZmluZSBfcGJ0ZW1wICAgICAgIHBidGVtcAotIyAgICBkZWZpbmUgX3BjdGVtcCAgICAgICBwY3RlbXAKLSMgIGVuZGlmCi0jZW5kaWYgLy8gZGpncHAsIFdpbjMyLCBDeWd3aW4sIE9TMgotCi0KLS8qIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBpbiB0aGUgaW5saW5lZCBNTVggYXNzZW1ibHkgY29kZS4gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgIHVsbDsKLQotI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpCi1zdGF0aWMgUE5HX0NPTlNUIHN0cnVjdCB7Ci0gICAgLy91bGwgX21hc2tfYXJyYXlbMjZdOwotCi0gICAgLy8gcG5nX2NvbWJpbmVfcm93KCkgY29uc3RhbnRzOgotICAgIHVsbCBfbWFzazhfMDsKLSAgICB1bGwgX21hc2sxNl8wLCBfbWFzazE2XzE7Ci0gICAgdWxsIF9tYXNrMjRfMCwgX21hc2syNF8xLCBfbWFzazI0XzI7Ci0gICAgdWxsIF9tYXNrMzJfMCwgX21hc2szMl8xLCBfbWFzazMyXzIsIF9tYXNrMzJfMzsKLSAgICB1bGwgX21hc2s0OF8wLCBfbWFzazQ4XzEsIF9tYXNrNDhfMiwgX21hc2s0OF8zLCBfbWFzazQ4XzQsIF9tYXNrNDhfNTsKLQotICAgIC8vIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGNvbnN0YW50czoKLSAgICB1bGwgX2FtYXNrNV8zXzAsIF9hbWFzazdfMV8wOyAgLy8gd2FzIF9jb25zdDQgYW5kIF9jb25zdDYsIHJlc3BlY3RpdmVseQotCi0gICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkgY29uc3RhbnRzIChhbHNvIHVzZXMgX2FtYXNrNV8zXzApOgotICAgIHVsbCBfTEJDYXJyeU1hc2ssIF9IQkNsZWFyTWFzazsKLSAgICB1bGwgX2FtYXNrMF84XzAsIF9hbWFzazZfMl8wOyAgLy8gd2FzIEFjdGl2ZU1hc2sgZm9yIGJwcCA0LzYgYW5kIDIgY2FzZXMKLQotICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzIChhbHNvIHVzZXMgX2FtYXNrNV8zXzApOgotICAgIHVsbCBfYW1hc2s0XzRfMCwgX2FtYXNrMF8yXzY7ICAvLyB3YXMgQWN0aXZlTWFza3ssRW5kfSBmb3IgYnBwIDYvNC84IGFuZCAzCi0KLSAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKSBjb25zdGFudHM6Ci0gICAgdWxsIF9hbWFzazJfM18zLCBfYW1hc2s0XzJfMjsgIC8vIHdhcyBBY3RpdmVNYXNrIGZvciBicHAgMyBhbmQgMiBjYXNlcwotCi19IF9jNjQgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gewotCi0gICAgLy8gcG5nX2NvbWJpbmVfcm93KCkgY29uc3RhbnRzOgotICAgIDB4MDEwMjA0MDgxMDIwNDA4MExMLCAvLyBfbWFzazhfMCAgICAgIG9mZnNldCAwCi0KLSAgICAweDEwMTAyMDIwNDA0MDgwODBMTCwgLy8gX21hc2sxNl8wICAgICBvZmZzZXQgOAotICAgIDB4MDEwMTAyMDIwNDA0MDgwOExMLCAvLyBfbWFzazE2XzEgICAgIG9mZnNldCAxNgotCi0gICAgMHgyMDIwNDA0MDQwODA4MDgwTEwsIC8vIF9tYXNrMjRfMCAgICAgb2Zmc2V0IDI0Ci0gICAgMHgwNDA4MDgwODEwMTAxMDIwTEwsIC8vIF9tYXNrMjRfMSAgICAgb2Zmc2V0IDMyCi0gICAgMHgwMTAxMDEwMjAyMDIwNDA0TEwsIC8vIF9tYXNrMjRfMiAgICAgb2Zmc2V0IDQwCi0KLSAgICAweDQwNDA0MDQwODA4MDgwODBMTCwgLy8gX21hc2szMl8wICAgICBvZmZzZXQgNDgKLSAgICAweDEwMTAxMDEwMjAyMDIwMjBMTCwgLy8gX21hc2szMl8xICAgICBvZmZzZXQgNTYKLSAgICAweDA0MDQwNDA0MDgwODA4MDhMTCwgLy8gX21hc2szMl8yICAgICBvZmZzZXQgNjQKLSAgICAweDAxMDEwMTAxMDIwMjAyMDJMTCwgLy8gX21hc2szMl8zICAgICBvZmZzZXQgNzIKLQotICAgIDB4NDA0MDgwODA4MDgwODA4MExMLCAvLyBfbWFzazQ4XzAgICAgIG9mZnNldCA4MAotICAgIDB4MjAyMDIwMjA0MDQwNDA0MExMLCAvLyBfbWFzazQ4XzEgICAgIG9mZnNldCA4OAotICAgIDB4MTAxMDEwMTAxMDEwMjAyMExMLCAvLyBfbWFzazQ4XzIgICAgIG9mZnNldCA5NgotICAgIDB4MDQwNDA4MDgwODA4MDgwOExMLCAvLyBfbWFzazQ4XzMgICAgIG9mZnNldCAxMDQKLSAgICAweDAyMDIwMjAyMDQwNDA0MDRMTCwgLy8gX21hc2s0OF80ICAgICBvZmZzZXQgMTEyCi0gICAgMHgwMTAxMDEwMTAxMDEwMjAyTEwsIC8vIF9tYXNrNDhfNSAgICAgb2Zmc2V0IDEyMAotCi0gICAgLy8gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgY29uc3RhbnRzOgotICAgIDB4MDAwMDAwMDAwMEZGRkZGRkxMLCAvLyBfYW1hc2s1XzNfMCAgIG9mZnNldCAxMjggIChicHAgMywgYXZnL3BhZXRoKSBjb25zdDQKLSAgICAweDAwMDAwMDAwMDAwMDAwRkZMTCwgLy8gX2FtYXNrN18xXzAgICBvZmZzZXQgMTM2ICAgICAgICAgICAgICAgICAgICAgY29uc3Q2Ci0KLSAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6Ci0gICAgMHgwMTAxMDEwMTAxMDEwMTAxTEwsIC8vIF9MQkNhcnJ5TWFzayAgb2Zmc2V0IDE0NAotICAgIDB4N0Y3RjdGN0Y3RjdGN0Y3RkxMLCAvLyBfSEJDbGVhck1hc2sgIG9mZnNldCAxNTIKLSAgICAweEZGRkZGRkZGRkZGRkZGRkZMTCwgLy8gX2FtYXNrMF84XzAgICBvZmZzZXQgMTYwICAoYnBwIDQvNiwgYXZnKQotICAgIDB4MDAwMDAwMDAwMDAwRkZGRkxMLCAvLyBfYW1hc2s2XzJfMCAgIG9mZnNldCAxNjggIChicHAgMiwgICBhdmcpCi0KLSAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50czoKLSAgICAweDAwMDAwMDAwRkZGRkZGRkZMTCwgLy8gX2FtYXNrNF80XzAgICBvZmZzZXQgMTc2ICAoYnBwIDYvNC84LCBwYWV0aCkKLSAgICAweEZGRkYwMDAwMDAwMDAwMDBMTCwgLy8gX2FtYXNrMF8yXzYgICBvZmZzZXQgMTg0ICAoYnBwIDMsIHBhZXRoKSAgIEEuTS5FbmQKLQotICAgIC8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIGNvbnN0YW50czoKLSAgICAweDAwMDBGRkZGRkYwMDAwMDBMTCwgLy8gX2FtYXNrMl8zXzMgICBvZmZzZXQgMTkyICAoYnBwIDMsIHN1YikKLSAgICAweDAwMDAwMDAwRkZGRjAwMDBMTCwgLy8gX2FtYXNrNF8yXzIgICBvZmZzZXQgMjAwICAoYnBwIDIsIHN1YikKLQotfTsKLQotI2RlZmluZSBNQVNLOF8wICAgICAgICAiKCUlcmJwKSIKLSNkZWZpbmUgTUFTSzE2XzAgICAgICAgIjgoJSVyYnApIgotI2RlZmluZSBNQVNLMTZfMSAgICAgICAiMTYoJSVyYnApIgotI2RlZmluZSBNQVNLMjRfMCAgICAgICAiMjQoJSVyYnApIgotI2RlZmluZSBNQVNLMjRfMSAgICAgICAiMzIoJSVyYnApIgotI2RlZmluZSBNQVNLMjRfMiAgICAgICAiNDAoJSVyYnApIgotI2RlZmluZSBNQVNLMzJfMCAgICAgICAiNDgoJSVyYnApIgotI2RlZmluZSBNQVNLMzJfMSAgICAgICAiNTYoJSVyYnApIgotI2RlZmluZSBNQVNLMzJfMiAgICAgICAiNjQoJSVyYnApIgotI2RlZmluZSBNQVNLMzJfMyAgICAgICAiNzIoJSVyYnApIgotI2RlZmluZSBNQVNLNDhfMCAgICAgICAiODAoJSVyYnApIgotI2RlZmluZSBNQVNLNDhfMSAgICAgICAiODgoJSVyYnApIgotI2RlZmluZSBNQVNLNDhfMiAgICAgICAiOTYoJSVyYnApIgotI2RlZmluZSBNQVNLNDhfMyAgICAgICAiMTA0KCUlcmJwKSIKLSNkZWZpbmUgTUFTSzQ4XzQgICAgICAgIjExMiglJXJicCkiCi0jZGVmaW5lIE1BU0s0OF81ICAgICAgICIxMjAoJSVyYnApIgotI2RlZmluZSBBTUFTSzVfM18wICAgICAiMTI4KCUlcmJwKSIKLSNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIjEzNiglJXJicCkiCi0jZGVmaW5lIExCX0NBUlJZX01BU0sgICIxNDQoJSVyYnApIgotI2RlZmluZSBIQl9DTEVBUl9NQVNLICAiMTUyKCUlcmJwKSIKLSNkZWZpbmUgQU1BU0swXzhfMCAgICAgIjE2MCglJXJicCkiCi0jZGVmaW5lIEFNQVNLNl8yXzAgICAgICIxNjgoJSVyYnApIgotI2RlZmluZSBBTUFTSzRfNF8wICAgICAiMTc2KCUlcmJwKSIKLSNkZWZpbmUgQU1BU0swXzJfNiAgICAgIjE4NCglJXJicCkiCi0jZGVmaW5lIEFNQVNLMl8zXzMgICAgICIxOTIoJSVyYnApIgotI2RlZmluZSBBTUFTSzRfMl8yICAgICAiMjAwKCUlcmJwKSIKLQotI2Vsc2UgLy8gIVBOR194ODZfNjRfVVNFX0dPVFBDUkVMCi0KLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrOF8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDIwNDA4MTAyMDQwODBMTDsKLQotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2sxNl8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAyMDIwNDA0MDgwOExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2sxNl8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDIwMjA0MDQwODA4MExMOwotCi1zdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzIgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMTAxMDEwMjAyMDIwNDA0TEw7Ci1zdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA4MDgwODEwMTAxMDIwTEw7Ci1zdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgyMDIwNDA0MDQwODA4MDgwTEw7Ci0KLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMyBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDIwMjAyMDJMTDsKLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDA0MDQwNDA0MDgwODA4MDhMTDsKLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDEwMTAxMDEwMjAyMDIwMjBMTDsKLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDQwNDA0MDQwODA4MDgwODBMTDsKLQotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF81IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDEwMTAxMDIwMkxMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF80IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDIwMjAyMDIwNDA0MDQwNExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8zIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDQwNDA4MDgwODA4MDgwOExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDEwMTAxMDEwMjAyMExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MjAyMDIwMjA0MDQwNDA0MExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4NDA0MDgwODA4MDgwODA4MExMOwotCi0vLyBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBjb25zdGFudHM6Ci1zdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s1XzNfMCAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMDAwRkZGRkZGTEw7ICAvLyB3YXMgX2NvbnN0NAotc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrN18xXzAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSA9IDB4MDAwMDAwMDAwMDAwMDBGRkxMOyAgLy8gd2FzIF9jb25zdDYKLQotLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkgY29uc3RhbnRzOgotc3RhdGljIFBOR19DT05TVCB1bGwgX0xCQ2FycnlNYXNrIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDEwMTAxMDEwMUxMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX0hCQ2xlYXJNYXNrIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZkxMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMF84XzAgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4RkZGRkZGRkZGRkZGRkZGRkxMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrNl8yXzAgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMDAwMDAwMDAwRkZGRkxMOwotCi0vLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50czoKLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazRfNF8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwRkZGRkZGRkZMTDsKLXN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazBfMl82ICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweEZGRkYwMDAwMDAwMDAwMDBMTDsKLQotLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgotc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMl8zXzMgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMEZGRkZGRjAwMDAwMExMOwotc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrNF8yXzIgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMDAwMDBGRkZGMDAwMExMOwotCi0jZGVmaW5lIE1BU0s4XzAgICAgICAgICJfbWFzazhfMCIKLSNkZWZpbmUgTUFTSzE2XzAgICAgICAgIl9tYXNrMTZfMCIKLSNkZWZpbmUgTUFTSzE2XzEgICAgICAgIl9tYXNrMTZfMSIKLSNkZWZpbmUgTUFTSzI0XzAgICAgICAgIl9tYXNrMjRfMCIKLSNkZWZpbmUgTUFTSzI0XzEgICAgICAgIl9tYXNrMjRfMSIKLSNkZWZpbmUgTUFTSzI0XzIgICAgICAgIl9tYXNrMjRfMiIKLSNkZWZpbmUgTUFTSzMyXzAgICAgICAgIl9tYXNrMzJfMCIKLSNkZWZpbmUgTUFTSzMyXzEgICAgICAgIl9tYXNrMzJfMSIKLSNkZWZpbmUgTUFTSzMyXzIgICAgICAgIl9tYXNrMzJfMiIKLSNkZWZpbmUgTUFTSzMyXzMgICAgICAgIl9tYXNrMzJfMyIKLSNkZWZpbmUgTUFTSzQ4XzAgICAgICAgIl9tYXNrNDhfMCIKLSNkZWZpbmUgTUFTSzQ4XzEgICAgICAgIl9tYXNrNDhfMSIKLSNkZWZpbmUgTUFTSzQ4XzIgICAgICAgIl9tYXNrNDhfMiIKLSNkZWZpbmUgTUFTSzQ4XzMgICAgICAgIl9tYXNrNDhfMyIKLSNkZWZpbmUgTUFTSzQ4XzQgICAgICAgIl9tYXNrNDhfNCIKLSNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIl9tYXNrNDhfNSIKLSNkZWZpbmUgQU1BU0s1XzNfMCAgICAgIl9hbWFzazVfM18wIgotI2RlZmluZSBBTUFTSzdfMV8wICAgICAiX2FtYXNrN18xXzAiCi0jZGVmaW5lIExCX0NBUlJZX01BU0sgICJfTEJDYXJyeU1hc2siCi0jZGVmaW5lIEhCX0NMRUFSX01BU0sgICJfSEJDbGVhck1hc2siCi0jZGVmaW5lIEFNQVNLMF84XzAgICAgICJfYW1hc2swXzhfMCIKLSNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIl9hbWFzazZfMl8wIgotI2RlZmluZSBBTUFTSzRfNF8wICAgICAiX2FtYXNrNF80XzAiCi0jZGVmaW5lIEFNQVNLMF8yXzYgICAgICJfYW1hc2swXzJfNiIKLSNkZWZpbmUgQU1BU0syXzNfMyAgICAgIl9hbWFzazJfM18zIgotI2RlZmluZSBBTUFTSzRfMl8yICAgICAiX2FtYXNrNF8yXzIiCi0KLSNlbmRpZiAvLyA/UE5HX3g4Nl82NF9VU0VfR09UUENSRUwKLQotCi0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKSB8fCBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykKLQotLy8gdGhpcyBibG9jayBpcyBzcGVjaWZpYyB0byBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGV4Y2VwdCBmb3IKLS8vIExPQURfR09UX3JicCBhbmQgUkVTVE9SRV9yYnAsIHdoaWNoIGFyZSBhbHNvIHVzZWQgaW4gcG5nX2NvbWJpbmVfcm93KCkKLSNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKQotIyAgZGVmaW5lIHBhX1RFTVAgICAgICAgICAgICAgICAgIiUlcjExZCIKLSMgIGRlZmluZSBwYl9URU1QICAgICAgICAgICAgICAgICIlJXIxMmQiCi0jICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTNkIgotIyAgaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAvLyB3b3JrcyBhcyBvZiBnY2MgMy40LjMgLi4uCi0jICAgIGRlZmluZSBTQVZFX3IxMV9yMTJfcjEzCi0jICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzCi0jICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMyAsIiVyMTEiLCAiJXIxMiIsICIlcjEzIgotIyAgICBkZWZpbmUgQ0xPQkJFUl9yMTFfcjEyX3IxMyAgIiVyMTEiLCAiJXIxMiIsICIlcjEzIgotIyAgZWxzZSAvLyAhUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVECi0jICAgIGRlZmluZSBTQVZFX3IxMV9yMTJfcjEzICAgICAicHVzaHEgJSVyMTEgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXNocSAlJXIxMiAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2hxICUlcjEzICBcblx0IiAgLy8gIm5vcm1hbGx5IDAtZXh0ZW5kZWQiCi0jICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzICAicG9wcSAgJSVyMTMgIFxuXHQiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3BxICAlJXIxMiAgXG5cdCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHEgICUlcjExICBcblx0IgotIyAgICBkZWZpbmUgX0NMT0JCRVJfcjExX3IxMl9yMTMKLSMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMKLSMgIGVuZGlmCi0jICBkZWZpbmUgTE9BRF9HT1RfcmJwICAgICAgICAgICAicHVzaHEgJSVyYnAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAgX2M2NEBHT1RQQ1JFTCglJXJpcCksICUlcmJwICBcblx0IgotIyAgZGVmaW5lIFJFU1RPUkVfcmJwICAgICAgICAgICAgInBvcHEgICUlcmJwICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSNlbHNlIC8vIDMyLWJpdCBhbmQvb3Igbm9uLVBJQwotIyAgaWYgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKLSAgICAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgYW5kIHdvdWxkIGJlCi0gICAgIC8vICAgbG9jYWwgdmFyaWFibGVzIGlmIG5vdCBmb3IgZ2NjLWlubGluZS1hc3NlbWJseSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zCi0gICAgIC8vICAgKHNvbWUgYXBwYXJlbnRseSByZWxhdGVkIHRvIEVMRiBmb3JtYXQsIG90aGVycyB0byBDUFUgdHlwZSkuCi0gICAgIC8vCi0gICAgIC8vIFdBUk5JTkc6IFRoZWlyIHByZXNlbmNlIGRlZmVhdHMgdGhlIHRocmVhZC1zYWZldHkgb2YgbGlicG5nLgotICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BhdGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BidGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BjdGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotIyAgICBkZWZpbmUgcGFfVEVNUCAgICAgICAgICAgICAgICAiX3BhdGVtcCIKLSMgICAgZGVmaW5lIHBiX1RFTVAgICAgICAgICAgICAgICAgIl9wYnRlbXAiICAvLyB0ZW1wIHZhcmlhYmxlcyBmb3IKLSMgICAgZGVmaW5lIHBjX1RFTVAgICAgICAgICAgICAgICAgIl9wY3RlbXAiICAvLyAgUGFldGggcm91dGluZQotIyAgICBkZWZpbmUgU0FWRV9yMTFfcjEyX3IxMwotIyAgICBkZWZpbmUgUkVTVE9SRV9yMTFfcjEyX3IxMwotIyAgICBkZWZpbmUgX0NMT0JCRVJfcjExX3IxMl9yMTMgICAvLyBub3QgdXNpbmcgcmVncyA9PiBub3QgY2xvYmJlcmluZwotIyAgICBkZWZpbmUgQ0xPQkJFUl9yMTFfcjEyX3IxMwotIyAgZW5kaWYgLy8gUE5HX1RIUkVBRF9VTlNBRkVfT0sKLSMgIGRlZmluZSBMT0FEX0dPVF9yYnAKLSMgIGRlZmluZSBSRVNUT1JFX3JicAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICBkZWZpbmUgU0FWRV9lYnAKLSMgIGRlZmluZSBSRVNUT1JFX2VicAotIyAgZGVmaW5lIF9DTE9CQkVSX2VicCAgICAgICAgICwiJWVicCIKLSMgIGRlZmluZSBDTE9CQkVSX2VicCAgICAgICAgICAiJWVicCIKLSMgIGRlZmluZSBTQVZFX0Z1bGxMZW5ndGggICAgICAibW92bCAlJWVheCwgJSVyMTVkICBcblx0IgotIyAgZGVmaW5lIFJFU1RPUkVfRnVsbExlbmd0aCAgICJtb3ZsICUlcjE1ZCwgIiAgICAgLy8gbWF5IGdvIGludG8gZWF4IG9yIGVjeAotIyAgaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgotIyAgICBkZWZpbmUgU0FWRV9yMTUKLSMgICAgZGVmaW5lIFJFU1RPUkVfcjE1Ci0jICAgIGRlZmluZSBfQ0xPQkJFUl9yMTUgICAgICAgLCIlcjE1IgotIyAgZWxzZQotIyAgICBkZWZpbmUgU0FWRV9yMTUgICAgICAgICAgICJwdXNocSAlJXIxNSAgXG5cdCIKLSMgICAgZGVmaW5lIFJFU1RPUkVfcjE1ICAgICAgICAicG9wcSAgJSVyMTUgIFxuXHQiCi0jICAgIGRlZmluZSBfQ0xPQkJFUl9yMTUKLSMgIGVuZGlmCi0jICBkZWZpbmUgUEJQICAgICAgICAgICAgICAgICAgIiUlcmJwIiAgICAgICAgICAgICAvLyByZWdzIHVzZWQgZm9yIDY0LWJpdAotIyAgZGVmaW5lIFBBWCAgICAgICAgICAgICAgICAgICIlJXJheCIgICAgICAgICAgICAgLy8gIHBvaW50ZXJzIG9yIGluCi0jICBkZWZpbmUgUEJYICAgICAgICAgICAgICAgICAgIiUlcmJ4IiAgICAgICAgICAgICAvLyAgY29tYmluYXRpb24gd2l0aAotIyAgZGVmaW5lIFBDWCAgICAgICAgICAgICAgICAgICIlJXJjeCIgICAgICAgICAgICAgLy8gIDY0LWJpdCBwb2ludGVyLXJlZ3MKLSMgIGRlZmluZSBQRFggICAgICAgICAgICAgICAgICAiJSVyZHgiICAgICAgICAgICAgIC8vICAoYmFzZS9pbmRleCBwYWlycywKLSMgIGRlZmluZSBQU0kgICAgICAgICAgICAgICAgICAiJSVyc2kiICAgICAgICAgICAgIC8vICBhZGQvc3ViL21vdiBwYWlycykKLSMgIGRlZmluZSBDTEVBUl9CT1RUT01fM19CSVRTICAiYW5kICAkMHhmZmZmZmZmZmZmZmZmZmY4LCAiCi0jZWxzZQotIyAgZGVmaW5lIFNBVkVfZWJwICAgICAgICAgICAgICJwdXNobCAlJWVicCBcblx0IiAgLy8gY2xvYmJlciBsaXN0IGRvZXNuJ3Qgd29yawotIyAgZGVmaW5lIFJFU1RPUkVfZWJwICAgICAgICAgICJwb3BsICAlJWVicCBcblx0IiAgLy8gIGZvciAlZWJwIG9uIDMyLWJpdDsgbm90Ci0jICBkZWZpbmUgX0NMT0JCRVJfZWJwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgY2xlYXIgd2h5IG5vdAotIyAgZGVmaW5lIENMT0JCRVJfZWJwCi0jICBkZWZpbmUgU0FWRV9GdWxsTGVuZ3RoICAgICAgInB1c2hsICUlZWF4IFxuXHQiCi0jICBkZWZpbmUgUkVTVE9SRV9GdWxsTGVuZ3RoICAgInBvcGwgIiAgICAgICAgICAgICAvLyBlYXggKGF2Zykgb3IgZWN4IChwYWV0aCkKLSMgIGRlZmluZSBTQVZFX3IxNQotIyAgZGVmaW5lIFJFU1RPUkVfcjE1Ci0jICBkZWZpbmUgX0NMT0JCRVJfcjE1Ci0jICBkZWZpbmUgUEJQICAgICAgICAgICAgICAgICAgIiUlZWJwIiAgICAgICAgICAgICAvLyByZWdzIHVzZWQgZm9yIG9yIGluCi0jICBkZWZpbmUgUEFYICAgICAgICAgICAgICAgICAgIiUlZWF4IiAgICAgICAgICAgICAvLyAgY29tYmluYXRpb24gd2l0aAotIyAgZGVmaW5lIFBCWCAgICAgICAgICAgICAgICAgICIlJWVieCIgICAgICAgICAgICAgLy8gICJub3JtYWwsIiAzMi1iaXQKLSMgIGRlZmluZSBQQ1ggICAgICAgICAgICAgICAgICAiJSVlY3giICAgICAgICAgICAgIC8vICBwb2ludGVycwotIyAgZGVmaW5lIFBEWCAgICAgICAgICAgICAgICAgICIlJWVkeCIKLSMgIGRlZmluZSBQU0kgICAgICAgICAgICAgICAgICAiJSVlc2kiCi0jICBkZWZpbmUgQ0xFQVJfQk9UVE9NXzNfQklUUyAgImFuZCAgJDB4ZmZmZmZmZjgsICIKLSNlbmRpZgotCi0vLyBDTE9CX0NPTU1BX2VieF9lYnA6ICBuZWVkIGNvbW1hIE9OTFkgaWYgYm90aCBDTE9CQkVSX2VicCBhbmQgQ0xPQkJFUl9HT1RfZWJ4Ci0vLyAgICAgICAgICAgICAgICAgICAgICBoYXZlIHZhbHVlcywgaS5lLiwgb25seSBpZiBfX3g4Nl82NF9fIEFORCAhX19QSUNfXwotI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgIWRlZmluZWQoX19QSUNfXykKLSMgIGRlZmluZSBDTE9CX0NPTU1BX2VieF9lYnAgICAgLCAvLyBjbG9iYmVyaW5nIGJvdGggZWJwIGFuZCBlYnggPT4gbmVlZCBjb21tYQotI2Vsc2UKLSMgIGRlZmluZSBDTE9CX0NPTU1BX2VieF9lYnAKLSNlbmRpZgotCi0vLyBDTE9CX0NPTU1BX2ViWF9yMVg6ICBuZWVkIGNvbW1hIFVOTEVTUyBib3RoIENMT0JCRVJfZWJwIGFuZCBDTE9CQkVSX0dPVF9lYngKLS8vICAgICAgICAgICAgICAgICAgIGFyZSBlbXB0eSBPUiBDTE9CQkVSX3IxMV9yMTJfcjEzIGlzIGVtcHR5LS1pLmUuLCBOTyBjb21tYQotLy8gICAgICAgICAgICAgICAgICAgaWYgKCFfX3g4Nl82NF9fIEFORCBfX1BJQ19fKSBPUiAhKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMCi0vLyAgICAgICAgICAgICAgICAgICBBTkQgUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKSAgIChkb3VibGUgc2lnaC4uLikKLSNpZiAoIWRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX1BJQ19fKSkgfHwgXAotICAgICFkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBcCi0gICAgIWRlZmluZWQoUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKQotIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJYX3IxWAotI2Vsc2UKLSMgIGRlZmluZSBDTE9CX0NPTU1BX2ViWF9yMVggICAgLCAvLyBjbG9iYmVyaW5nIChlYnAgT1IgZWJ4KSBBTkQgcjExX3IxMl9yMTMKLSNlbmRpZgotCi0vLyBDTE9CX0NPTE9OX2VieF9lYnA6ICBuZWVkIGNvbG9uIHVubGVzcyBDTE9CQkVSX2VicCBhbmQgQ0xPQkJFUl9HT1RfZWJ4IGFyZQotLy8gICAgICAgICAgICAgICAgICAgICAgQk9USCBlbXB0eS0taS5lLiwgTk8gY29sb24gaWYgKCFfX3g4Nl82NF9fIEFORCBfX1BJQ19fKQotLy8gQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWDogIGlmLCBpbiBhZGRpdGlvbiwgQ0xPQkJFUl9yMTFfcjEyX3IxMyBpcyBlbXB0eSwgdGhlbgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGNvbG9uIGZvciBQYWV0aCBibG9ja3MsIGVpdGhlci0taS5lLiwgTk8gY29sb24KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIEFORAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKQotI2lmICghZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fUElDX18pKQotIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicAotIyAgaWYgIShkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAmJiBcCi0gICAgICAgIGRlZmluZWQoUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKSkKLSMgICAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicF9yMVgKLSMgIGVsc2UKLSMgICAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicF9yMVggIDogLy8gY2xvYmJlcmluZyBlYnAgT1IgZWJ4IE9SIHIxMV9yMTJfcjEzCi0jICBlbmRpZgotI2Vsc2UKLSMgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnAgICAgICAgIDogLy8gY2xvYmJlcmluZyBlYnAgT1IgZWJ4Ci0jICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgICA6IC8vIGNsb2JiZXJpbmcgZWJwIE9SIGVieCBPUiByMTFfcjEyX3IxMwotI2VuZGlmCi0KLSNlbmRpZiAvLyBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XCi0KLSNpZiBkZWZpbmVkKF9fUElDX18pICAvLyBtYWNyb3MgdG8gc2F2ZSwgcmVzdG9yZSBpbmRleCB0byBHbG9iYWwgT2Zmc2V0IFRhYmxlCi0jICBpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jICAgIGRlZmluZSBTQVZFX0dPVF9lYnggICAgICJwdXNocSAlJXJieCBcblx0IgotIyAgICBkZWZpbmUgUkVTVE9SRV9HT1RfZWJ4ICAicG9wcSAgJSVyYnggXG5cdCIKLSMgIGVsc2UKLSMgICAgZGVmaW5lIFNBVkVfR09UX2VieCAgICAgInB1c2hsICUlZWJ4IFxuXHQiCi0jICAgIGRlZmluZSBSRVNUT1JFX0dPVF9lYnggICJwb3BsICAlJWVieCBcblx0IgotIyAgZW5kaWYKLSMgIGRlZmluZSBfQ0xPQkJFUl9HT1RfZWJ4ICAgLy8gZXhwbGljaXRseSBzYXZlZCwgcmVzdG9yZWQgPT4gbm90IGNsb2JiZXJlZAotIyAgZGVmaW5lIENMT0JCRVJfR09UX2VieAotI2Vsc2UKLSMgIGRlZmluZSBTQVZFX0dPVF9lYngKLSMgIGRlZmluZSBSRVNUT1JFX0dPVF9lYngKLSMgIGRlZmluZSBfQ0xPQkJFUl9HT1RfZWJ4ICAgLCIlZWJ4IgotIyAgZGVmaW5lIENMT0JCRVJfR09UX2VieCAgICAiJWVieCIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpIHx8IGRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFKQotIyAgZGVmaW5lIEJQUDIgIDIKLSMgIGRlZmluZSBCUFAzICAzICAvLyBieXRlcyBwZXIgcGl4ZWwgKGEuay5hLiBwaXhlbF9ieXRlcykKLSMgIGRlZmluZSBCUFA0ICA0ICAvLyAoZGVmaW5lZCBvbmx5IHRvIGhlbHAgYXZvaWQgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpCi0jICBkZWZpbmUgQlBQNiAgNgotIyAgZGVmaW5lIEJQUDggIDgKLSNlbmRpZgotCi0KLQotc3RhdGljIGludCBfbW14X3N1cHBvcnRlZCA9IDI7IC8vIDA6IG5vIE1NWDsgMTogTU1YIHN1cHBvcnRlZDsgMjogbm90IHRlc3RlZAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICBQIE4gRyBfIE0gTSBYIF8gUyBVIFAgUCBPIFIgVCAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8vIEdSUiBOT1RFUzogICgxKSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyAzODYgb3IgYmV0dGVyIChwdXNoZmwvcG9wZmwpCi0vLyAgICAgICAgICAgICAoMikgYWxsIGluc3RydWN0aW9ucyBjb21waWxlIHdpdGggZ2NjIDIuNy4yLjMgYW5kIGxhdGVyCi0vLyAgICAgICAgICAgeCAoMykgdGhlIGZ1bmN0aW9uIGlzIG1vdmVkIGRvd24gaGVyZSB0byBwcmV2ZW50IGdjYyBmcm9tCi0vLyAgICAgICAgICAgeCAgICAgIGlubGluaW5nIGl0IGluIG11bHRpcGxlIHBsYWNlcyBhbmQgdGhlbiBiYXJmaW5nIGJlLQotLy8gICAgICAgICAgIHggICAgICBjYXVzZSB0aGUgIi5OT1RfU1VQUE9SVEVEIiBsYWJlbCBpcyBtdWx0aXBseSBkZWZpbmVkCi0vLyAgICAgICAgICAgICAgICAgIFtuZWVkIHRvIHJldGVzdCB3aXRoIGdjYyAyLjcuMi4zXQotCi0vLyBHUlIgMjAwNzA1MjQ6ICBUaGlzIGRlY2xhcmF0aW9uIGFwcGFyZW50bHkgaXMgY29tcGF0aWJsZSB3aXRoIGJ1dCBzdXBlcnNlZGVzCi0vLyAgIHRoZSBvbmUgaW4gcG5nLmg7IGluIGFueSBjYXNlLCB0aGUgZ2VuZXJhdGVkIG9iamVjdCBmaWxlIGlzIHNsaWdodGx5Ci0vLyAgIHNtYWxsZXIuICBJdCBpcyB1bm5lY2Vzc2FyeSB3aXRoIGdjYyA0LjEuMiwgYnV0IGdjYyAyLnggYXBwYXJlbnRseQotLy8gICByZXBsaWNhdGVkIHRoZSAiLk5PVF9TVVBQT1JURUQiIGxhYmVsIGluIGVhY2ggbG9jYXRpb24gdGhlIGZ1bmN0aW9uIHdhcwotLy8gICBpbmxpbmVkLCBsZWFkaW5nIHRvIGNvbXBpbGF0aW9uIGVycm9ycyBkdWUgdG8gdGhlICJtdWx0aXBseSBkZWZpbmVkIgotLy8gICBsYWJlbC4gIE9sZCB3b3JrYXJvdW5kIHdhcyB0byBsZWF2ZSB0aGUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzCi0vLyAgIGZpbGU7IG5ldyBvbmUgKHN0aWxsIHRlc3RpbmcpIGlzIHRvIHVzZSBhIGdjYy1zcGVjaWZpYyBmdW5jdGlvbiBhdHRyaWJ1dGUKLS8vICAgdG8gcHJldmVudCBsb2NhbCBpbmxpbmluZy4KLWludCBQTkdBUEkKLXBuZ19tbXhfc3VwcG9ydCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpOwotCi1pbnQgUE5HQVBJCi1wbmdfbW14X3N1cHBvcnQodm9pZCkKLXsKLSAgICBpbnQgcmVzdWx0OwotI2lmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgIC8vIHN1cGVyZmx1b3VzLCBidXQgd2hhdCB0aGUgaGVjawotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0gICAgICAgICJwdXNocSAlJXJieCAgICAgICAgICBcblx0IiAgLy8gcmJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCi0gICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyByY3guLi4KLSAgICAgICAgInB1c2hxICUlcmR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgcmR4IChidXQgcmN4ICYgcmR4IHNhZmUgb24gTGludXgpCi0gICAgICAgICJwdXNoZnEgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gcmF4Ci0gICAgICAgICJtb3ZxICUlcmF4LCAlJXJjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gcmN4Ci0gICAgICAgICJ4b3JsICQweDIwMDAwMCwgJSVlYXggXG5cdCIgLy8gdG9nZ2xlIElEIGJpdCBpbiBFZmxhZyAoaS5lLiwgYml0IDIxKQotICAgICAgICAicHVzaHEgJSVyYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjawotICAgICAgICAicG9wZnEgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCi0gICAgICAgICJwdXNoZnEgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wcSAlJXJheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCi0gICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wZnEgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgb3JpZ2luYWwgRWZsYWcKLSNlbHNlCi0gICAgICAgICJwdXNobCAlJWVieCAgICAgICAgICBcblx0IiAgLy8gZWJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCi0gICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc28gZG9lcyBlY3guLi4KLSAgICAgICAgInB1c2hsICUlZWR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgZWR4IChidXQgZWN4ICYgZWR4IHNhZmUgb24gTGludXgpCi0gICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrIGludG8gZWF4Ci0gICAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gZWN4Ci0gICAgICAgICJ4b3JsICQweDIwMDAwMCwgJSVlYXggXG5cdCIgLy8gdG9nZ2xlIElEIGJpdCBpbiBFZmxhZyAoaS5lLiwgYml0IDIxKQotICAgICAgICAicHVzaGwgJSVlYXggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgbW9kaWZpZWQgRWZsYWcgYmFjayB0byBzdGFjawotICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCi0gICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wbCAlJWVheCAgICAgICAgICAgXG5cdCIgIC8vIGdldCBFZmxhZyBmcm9tIHN0YWNrCi0gICAgICAgICJwdXNobCAlJWVjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjawotICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgb3JpZ2luYWwgRWZsYWcKLSNlbmRpZgotICAgICAgICAieG9ybCAlJWVjeCwgJSVlYXggICAgXG5cdCIgIC8vIGNvbXBhcmUgbmV3IEVmbGFnIHdpdGggb3JpZ2luYWwgRWZsYWcKLSAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBzYW1lLCBDUFVJRCBpbnN0ci4gaXMgbm90IHN1cHBvcnRlZAotCi0gICAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICBcblx0IiAgLy8gc2V0IGVheCB0byB6ZXJvCi0vLyAgICAgICIuYnl0ZSAgMHgwZiwgMHhhMiAgICBcblx0IiAgLy8gQ1BVSUQgaW5zdHJ1Y3Rpb24gKHR3by1ieXRlIG9wY29kZSkKLSAgICAgICAgImNwdWlkICAgICAgICAgICAgICAgIFxuXHQiICAvLyBnZXQgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBpbmZvCi0gICAgICAgICJjbXBsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gbWFrZSBzdXJlIGVheCByZXR1cm4gbm9uLXplcm8gdmFsdWUKLSAgICAgICAgImpsIDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBlYXggaXMgemVybywgTU1YIGlzIG5vdCBzdXBwb3J0ZWQKLQotICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgXG5cdCIgIC8vIHNldCBlYXggdG8gemVybyBhbmQuLi4KLSAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyAuLi5pbmNyZW1lbnQgZWF4IHRvIDEuICBUaGlzIHBhaXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgaW5zdHJ1Y3Rpb24gIm1vdiBlYXgsIDEiCi0gICAgICAgICJjcHVpZCAgICAgICAgICAgICAgICBcblx0IiAgLy8gZ2V0IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gaW5mbyBhZ2FpbgotICAgICAgICAiYW5kbCAkMHg4MDAwMDAsICUlZWR4IFxuXHQiIC8vIG1hc2sgb3V0IGFsbCBiaXRzIGJ1dCBNTVggYml0ICgyMykKLSAgICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgIFxuXHQiICAvLyAwID0gTU1YIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBub24temVybyA9IHllcywgTU1YIElTIHN1cHBvcnRlZAotCi0gICAgICAgICJtb3ZsICQxLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAxCi0gICAgICAgICJqbXAgIDFmICAgICAgICAgICAgICBcblx0IiAgLy8gRE9ORTogIGhhdmUgTU1YIHN1cHBvcnQKLQotICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIC5OT1RfU1VQUE9SVEVEOiB0YXJnZXQgbGFiZWwgZm9yIGp1bXAgaW5zdHJ1Y3Rpb25zCi0gICAgICAgICJtb3ZsICQwLCAlJWVheCAgICAgICBcblx0IiAgLy8gc2V0IHJldHVybiB2YWx1ZSB0byAwCi0gICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gLlJFVFVSTjogdGFyZ2V0IGxhYmVsIGZvciBqdW1wIGluc3RydWN0aW9ucwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKLSAgICAgICAgInBvcHEgJSVyZHggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIHJkeAotICAgICAgICAicG9wcSAlJXJjeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgcmN4Ci0gICAgICAgICJwb3BxICUlcmJ4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSByYngKLSNlbHNlCi0gICAgICAgICJwb3BsICUlZWR4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlZHgKLSAgICAgICAgInBvcGwgJSVlY3ggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVjeAotICAgICAgICAicG9wbCAlJWVieCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWJ4Ci0jZW5kaWYKLQotLy8gICAgICAicmV0ICAgICAgICAgICAgICAgICAgXG5cdCIgIC8vIERPTkU6ICBubyBNTVggc3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChmYWxsIHRocm91Z2ggdG8gc3RhbmRhcmQgQyAicmV0IikKLQotICAgICAgICA6ICI9YSIgKHJlc3VsdCkgICAgICAgICAgICAgIC8vIG91dHB1dCBsaXN0Ci0KLSAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnkgdmFyaWFibGVzIHVzZWQgb24gaW5wdXQgKG5vbmUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjbG9iYmVyIGxpc3QKLS8vICAgICAgLCAiJWVieCIsICIlZWN4IiwgIiVlZHgiICAgICAvLyBHUlI6ICB3ZSBoYW5kbGUgdGhlc2UgbWFudWFsbHkKLS8vICAgICAgLCAibWVtb3J5IiAgIC8vIGlmIHdyaXRlIHRvIGEgdmFyaWFibGUgZ2NjIHRob3VnaHQgd2FzIGluIGEgcmVnCi0vLyAgICAgICwgImNjIiAgICAgICAvLyAiY29uZGl0aW9uIGNvZGVzIiAoZmxhZyBiaXRzKQotICAgICk7Ci0gICAgX21teF9zdXBwb3J0ZWQgPSByZXN1bHQ7Ci0jZWxzZQotICAgIF9tbXhfc3VwcG9ydGVkID0gMDsKLSNlbmRpZiAvKiBQTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCi0KLSAgICByZXR1cm4gX21teF9zdXBwb3J0ZWQ7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgIFAgTiBHIF8gQyBPIE0gQiBJIE4gRSBfIFIgTyBXICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpCi0KLS8qIENvbWJpbmVzIHRoZSByb3cgcmVjZW50bHkgcmVhZCBpbiB3aXRoIHRoZSBwcmV2aW91cyByb3cuCi0gICBUaGlzIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBhbHBoYSBhbmQgdHJhbnNwYXJlbmN5IGlmIHJlcXVlc3RlZC4KLSAgIFRoaXMgcm91dGluZSBhbHNvIGhhbmRsZXMgdGhlIHR3byBtZXRob2RzIG9mIHByb2dyZXNzaXZlIGRpc3BsYXkKLSAgIG9mIGludGVybGFjZWQgaW1hZ2VzLCBkZXBlbmRpbmcgb24gdGhlIG1hc2sgdmFsdWUuCi0gICBUaGUgbWFzayB2YWx1ZSBkZXNjcmliZXMgd2hpY2ggcGl4ZWxzIGFyZSB0byBiZSBjb21iaW5lZCB3aXRoCi0gICB0aGUgcm93LiAgVGhlIHBhdHRlcm4gYWx3YXlzIHJlcGVhdHMgZXZlcnkgOCBwaXhlbHMsIHNvIGp1c3QgOAotICAgYml0cyBhcmUgbmVlZGVkLiAgQSBvbmUgaW5kaWNhdGVzIHRoZSBwaXhlbCBpcyB0byBiZSBjb21iaW5lZDsgYQotICAgemVybyBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIHNraXBwZWQuICBUaGlzIGlzIGluIGFkZGl0aW9uCi0gICB0byBhbnkgYWxwaGEgb3IgdHJhbnNwYXJlbmN5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGl4ZWwuCi0gICBJZiB5b3Ugd2FudCBhbGwgcGl4ZWxzIHRvIGJlIGNvbWJpbmVkLCBwYXNzIDB4ZmYgKDI1NSkgaW4gbWFzay4gKi8KLQotLyogVXNlIHRoaXMgcm91dGluZSBmb3IgdGhlIHg4NiBwbGF0Zm9ybSAtIGl0IHVzZXMgYSBmYXN0ZXIgTU1YIHJvdXRpbmUKLSAgIGlmIHRoZSBtYWNoaW5lIHN1cHBvcnRzIE1NWC4gKi8KLQotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfY29tYmluZV9yb3cocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIHJvdywgaW50IG1hc2spCi17Ci0gICBpbnQgZHVtbXlfdmFsdWVfYTsgICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcgZXJyb3IKLSAgIGludCBkdW1teV92YWx1ZV9jOwotICAgaW50IGR1bW15X3ZhbHVlX2Q7Ci0gICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfUzsKLSAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOwotCi0gICBwbmdfZGVidWcoMSwgImluIHBuZ19jb21iaW5lX3JvdyAocG5nZ2NjcmQuYylcbiIpOwotCi0gICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KLSAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7Ci0jZW5kaWYKLSAgICAgICBwbmdfbW14X3N1cHBvcnQoKTsKLSAgIH0KLQotICAgaWYgKG1hc2sgPT0gMHhmZikKLSAgIHsKLSAgICAgIHBuZ19kZWJ1ZygyLCJtYXNrID09IDB4ZmY6ICBkb2luZyBzaW5nbGUgcG5nX21lbWNweSgpXG4iKTsKLSAgICAgIHBuZ19tZW1jcHkocm93LCBwbmdfcHRyLT5yb3dfYnVmICsgMSwKLSAgICAgICAocG5nX3NpemVfdClQTkdfUk9XQllURVMocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgscG5nX3B0ci0+d2lkdGgpKTsKLSAgIH0KLSAgIGVsc2UgICAvKiAocG5nX2NvbWJpbmVfcm93KCkgaXMgbmV2ZXIgY2FsbGVkIHdpdGggbWFzayA9PSAwKSAqLwotICAgewotICAgICAgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkKLSAgICAgIHsKLSAgICAgICAgIGNhc2UgMjQ6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKLSAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAotCi0gICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKLSAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0syNF8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMjRfMCAtPiBtbTAKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMjRfMSAiLCAlJW1tMSBcblx0IiAvLyBfbWFzazI0XzEgLT4gbW0xCi0gICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzI0XzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2syNF8yIC0+IG1tMgotICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0yICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTIgICAgIFxuXHQiCi0KLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMjRlbmQgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDI0OiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW00ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglNCksICUlbW03ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCU0KSwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTMpLCAlJW1tNiAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMiwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTQpLCAlJW1tNyAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW00LCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDE2KCU0KSAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyNCwgJTMgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDI0IGJ5dGVzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMjQsICU0ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotCi0gICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMjQgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDI0ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMjQgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDI0OiAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDI0ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgKCUzKSwgJSVheCAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAlJWF4LCAoJTQpICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAieG9ybCAgICAgICUlZWF4LCAlJWVheCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgMiglMyksICUlYWwgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAlJWFsLCAyKCU0KSAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAic2tpcDI0OiAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMywgJTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzLCAlNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMjQgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAiZW5kMjQ6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCi0gICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAotICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci0vLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKLSAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKLSNlbmRpZgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQMyAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQMyAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFAzICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCi0gICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMyAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCi0KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKLQotICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQMzsKLSAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8qIGVuZCAyNCBicHAgKi8KLQotICAgICAgICAgLy8gZm9ybWVybHkgY2xhaW1lZCB0byBiZSBtb3N0IGNvbW1vbiBjYXNlIChjb21iaW5pbmcgMzItYml0IFJHQkEpLAotICAgICAgICAgLy8gYnV0IGFsbW9zdCBjZXJ0YWlubHkgbGVzcyBjb21tb24gdGhhbiAyNC1iaXQgUkdCIGNhc2UKLSAgICAgICAgIGNhc2UgMzI6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKLSAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAotCi0gICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKLSAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrMzJfMAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMzJfMQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8yICIsICUlbW0yIFxuXHQiIC8vIF9tYXNrMzJfMgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8zICIsICUlbW0zIFxuXHQiIC8vIF9tYXNrMzJfMwotICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0yICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTMgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0zICAgICBcblx0IgotCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUzICAgICAgIFxuXHQiIC8vIGxvYWQgc291cmNlCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRzdHB0ciwgJTQgICAgICAgXG5cdCIgLy8gbG9hZCBkZXN0Ci0KLSAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IiAvLyBsY3IKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AzMmVuZCAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgIm1haW5sb29wMzI6ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0wLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCU0KSwgJSVtbTcgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglNCkgICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTMpLCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDgoJTQpLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW01LCA4KCU0KSAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglMyksICUlbW02ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJTQpICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJTMpLCAlJW1tNyAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0zLCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMjQoJTQpLCAlJW1tNCAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNCwgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW01LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDI0KCU0KSAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzMiwgJTMgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDMyIGJ5dGVzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMzIsICU0ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgImphICAgICAgICBtYWlubG9vcDMyICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAibWFpbmxvb3AzMmVuZDogICAgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkaWZmLCAlJWVjeCAgICAgIFxuXHQiIC8vIChkaWZmIGlzIGluIGVheCkKLSAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICUlZWN4ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAianogICAgICAgIGVuZDMyICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbWFzaywgJSVlZHggICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIGxvdyBieXRlID0+IGhpZ2ggYnl0ZQotCi0gICAgICAgICAgICAgICAgInNlY29uZGxvb3AzMjogICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCi0gICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXAzMiAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCi0gICAgICAgICAgICAgICAgICAibW92bCAgICAgICglMyksICUlZWF4ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICglNCkgICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgInNraXAzMjogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQsICUzICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNCwgJTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDMyICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgImVuZDMyOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAotICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKLSAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKLSAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAotLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4Ci0gICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDQgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDQgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDQgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwotCi0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7Ci0KLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDQ7Ci0gICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgMzIgYnBwICovCi0KLSAgICAgICAgIGNhc2UgODogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKLSAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAotCi0gICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKLSAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s4XzAgIiwgJSVtbTAgIFxuXHQiIC8vIF9tYXNrOF8wIC0+IG1tMAotICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiIC8vIG5vbnplcm8gaWYga2VlcCBieXRlCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIgLy8gemVyb3MtPjFzLCB2IHZlcnNhCi0KLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxlbiA9PSAwID8KLSAgICAgICAgICAgICAgICAgICJqZSAgICAgICAgbWFpbmxvb3A4ZW5kICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgIm1haW5sb29wODogICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IiAvLyAqc3JjcHRyCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAoJTQpLCAlJW1tNiAgICAgIFxuXHQiIC8vICpkc3RwdHIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCU0KSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ4LCAlMyAgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDggYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ4LCAlNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wOCAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDhlbmQ6ICAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kOCAgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDg6ICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDggICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgKCUzKSwgJSVhbCAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAlJWFsLCAoJTQpICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAic2tpcDg6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImluYyAgICAgICAlMyAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiaW5jICAgICAgICU0ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wOCAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAiZW5kODogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCi0gICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAotICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci0vLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKLSAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW00IiwgIiVtbTYiLCAiJW1tNyIgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwotICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KLSAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBsZW47ICAvKiBHUlIgYnVnZml4ICovCi0KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKLQotICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYgLyogKkJQUDEgKi8gOwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgOCBicHAgKi8KLQotICAgICAgICAgY2FzZSAxOiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkcDsKLSAgICAgICAgICAgIGludCBzX2luYywgc19zdGFydCwgc19lbmQ7Ci0gICAgICAgICAgICBpbnQgbTsKLSAgICAgICAgICAgIGludCBzaGlmdDsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0KLSAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICBkcCA9IHJvdzsKLSAgICAgICAgICAgIG0gPSAweDgwOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgc19lbmQgPSA3OwotICAgICAgICAgICAgICAgc19pbmMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNzsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpbnQgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDE7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcCsrOwotICAgICAgICAgICAgICAgICAgZHArKzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwotCi0gICAgICAgICAgICAgICBpZiAobSA9PSAxKQotICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBtID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8qIGVuZCAxIGJwcCAqLwotCi0gICAgICAgICBjYXNlIDI6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IHNoaWZ0OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIGludCB2YWx1ZTsKLQotICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRwID0gcm93OwotICAgICAgICAgICAgbSA9IDB4ODA7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDY7Ci0gICAgICAgICAgICAgICBzX2luYyA9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OwotICAgICAgICAgICAgICAgc19lbmQgPSAwOwotICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDM7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcCsrOwotICAgICAgICAgICAgICAgICAgZHArKzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKLSAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgMiBicHAgKi8KLQotICAgICAgICAgY2FzZSA0OiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkcDsKLSAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7Ci0gICAgICAgICAgICBpbnQgbTsKLSAgICAgICAgICAgIGludCBzaGlmdDsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBpbnQgdmFsdWU7Ci0KLSAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICBkcCA9IHJvdzsKLSAgICAgICAgICAgIG0gPSAweDgwOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgc19lbmQgPSA0OwotICAgICAgICAgICAgICAgc19pbmMgPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHhmOwotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4ZjBmID4+ICg0IC0gc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcCsrOwotICAgICAgICAgICAgICAgICAgZHArKzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKLSAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgNCBicHAgKi8KLQotICAgICAgICAgY2FzZSAxNjogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotCi0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSNlbHNlCi0gICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKLSAgICAgICAgICAgICAgIGludCBkaWZmOwotCi0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLSAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAotICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0Ci0KLSAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzawotICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKLSAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgotICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKLQotICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzE2XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2sxNl8wIC0+IG1tMAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0sxNl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMTZfMSAtPiBtbTEKLSAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCi0KLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTEgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCi0KLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMTZlbmQgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDE2OiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW00ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglNCksICUlbW03ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTUgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTEsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCU0KSwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDE2LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMTYgYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQxNiwgJTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMTYgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDE2ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMTYgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDE2OiAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDE2ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgKCUzKSwgJSVheCAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdncgICAgICAlJWF4LCAoJTQpICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAic2tpcDE2OiAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMiwgJTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyLCAlNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wMTYgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAiZW5kMTY6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCi0gICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAotICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci0vLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKLSAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTQiICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICAgICAgLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDIgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDIgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQMiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDIgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwotCi0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7Ci0KLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDI7Ci0gICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgMTYgYnBwICovCi0KLSAgICAgICAgIGNhc2UgNDg6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0jZWxzZQotICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICAgICBpbnQgZGlmZjsKLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKLSAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAotCi0gICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKLSAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCi0gICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKLSAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrNDhfMCAtPiBtbTAKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfMSAiLCAlJW1tMSBcblx0IiAvLyBfbWFzazQ4XzEgLT4gbW0xCi0gICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2s0OF8yIC0+IG1tMgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8zICIsICUlbW0zIFxuXHQiIC8vIF9tYXNrNDhfMyAtPiBtbTMKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLNDhfNCAiLCAlJW1tNCBcblx0IiAvLyBfbWFzazQ4XzQgLT4gbW00Ci0gICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzQ4XzUgIiwgJSVtbTUgXG5cdCIgLy8gX21hc2s0OF81IC0+IG1tNQotICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0yICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTMgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW01ICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTIgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW00ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTUgICAgIFxuXHQiCi0KLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbGVuLCAlJWVjeCAgICAgICBcblx0IiAvLyBsb2FkIGxlbmd0aCBvZiBsaW5lCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLS8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wNDhlbmQgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDQ4OiAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW03ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTAsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglNCksICUlbW02ICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgKCU0KSAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglMyksICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMSwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgOCglNCksICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCA4KCU0KSAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglMyksICUlbW02ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTYsIDE2KCU0KSAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCUzKSwgJSVtbTcgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTMsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDI0KCU0KSwgJSVtbTYgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgMjQoJTQpICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMzIoJTMpLCAlJW1tNiAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNCwgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMzIoJTQpLCAlJW1tNyAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAzMiglNCkgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA0MCglMyksICUlbW03ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW01LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsICUlbW02ICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInBhbmRuICAgICA0MCglNCksICUlbW02ICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDQwKCU0KSAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0OCwgJTMgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDQ4IGJ5dGVzIHByb2Nlc3NlZAotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNDgsICU0ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotCi0gICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wNDggICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICJtYWlubG9vcDQ4ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kNDggICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCi0KLSAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDQ4OiAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDQ4ICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgKCUzKSwgJSVlYXggICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCU0KSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAibW92dyAgICAgIDQoJTMpLCAlJWF4ICAgICAgXG5cdCIgLy8gR1ItUCBidWdmaXggMjAwNzA3MTcKLSAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgJSVheCwgNCglNCkgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwotCi0gICAgICAgICAgICAgICAgInNraXA0ODogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDYsICUzICAgICAgICAgICBcblx0IiAvLyBHUi1QIGJ1Z2ZpeCAyMDA3MDcxNwotICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNiwgJTQgICAgICAgICAgIFxuXHQiIC8vIEdSLVAgYnVnZml4IDIwMDcwNzE3Ci0gICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDQ4ICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgImVuZDQ4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAotICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKLSAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKLSAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAotLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4Ci0gICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDYgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDYgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDYgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwotCi0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7Ci0KLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDY7Ci0gICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgNDggYnBwICovCi0KLSAgICAgICAgIGNhc2UgNjQ6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDggKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDggKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQOCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwotICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDggKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwotCi0gICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwotICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDg7Ci0gICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLyogZW5kIDY0IGJwcCAqLwotCi0gICAgICAgICBkZWZhdWx0OiAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAhPSAxLDIsNCw4LDE2LDI0LDMyLDQ4LDY0ICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECi0jaWYgZGVmaW5lZChQTkdfREVCVUcpCi0gICAgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKLSAgICAgICAgICAgICAgInBuZ19jb21iaW5lX3JvdygpIHBpeGVsX2RlcHRoKVxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgfSAvKiBlbmQgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkgKi8KLQotICAgfSAvKiBlbmQgaWYgKG5vbi10cml2aWFsIG1hc2spICovCi0KLX0gLyogZW5kIHBuZ19jb21iaW5lX3JvdygpICovCi0KLSNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cgKi8KLQotCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgIFAgTiBHIF8gRCBPIF8gUiBFIEEgRCBfIEkgTiBUIEUgUiBMIEEgQyBFICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQpCi0jaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UpCi0KLS8qIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGlzIGNhbGxlZCBhZnRlciBhbnkgMTYtYml0IHRvIDgtYml0IGNvbnZlcnNpb24KLSAqIGhhcyB0YWtlbiBwbGFjZS4gIFtHUlI6IHdoYXQgb3RoZXIgc3RlcHMgY29tZSBiZWZvcmUgYW5kL29yIGFmdGVyP10KLSAqLwotCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19kb19yZWFkX2ludGVybGFjZShwbmdfc3RydWN0cCBwbmdfcHRyKQotewotICAgcG5nX3Jvd19pbmZvcCByb3dfaW5mbyA9ICYocG5nX3B0ci0+cm93X2luZm8pOwotICAgcG5nX2J5dGVwIHJvdyA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgaW50IHBhc3MgPSBwbmdfcHRyLT5wYXNzOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgcG5nX3VpbnRfMzIgdHJhbnNmb3JtYXRpb25zID0gcG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zOwotI2VuZGlmCi0KLSAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlIChwbmdnY2NyZC5jKVxuIik7Ci0KLSAgIGlmIChfbW14X3N1cHBvcnRlZCA9PSAyKSB7Ci0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLwotICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJhc21fZmxhZ3MgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKLSNlbmRpZgotICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwotICAgfQotCi0gICBpZiAocm93ICE9IE5VTEwgJiYgcm93X2luZm8gIT0gTlVMTCkKLSAgIHsKLSAgICAgIHBuZ191aW50XzMyIGZpbmFsX3dpZHRoOwotCi0gICAgICBmaW5hbF93aWR0aCA9IHJvd19pbmZvLT53aWR0aCAqIHBuZ19wYXNzX2luY1twYXNzXTsKLQotICAgICAgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpCi0gICAgICB7Ci0gICAgICAgICBjYXNlIDE6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwotICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIHBuZ19ieXRlIHY7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAzKTsKLSAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDMpOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChpbnQpKChyb3dfaW5mby0+d2lkdGggKyA3KSAmIDcpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gKGludCkoKGZpbmFsX3dpZHRoICsgNykgJiA3KTsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwotICAgICAgICAgICAgICAgc19lbmQgPSAwOwotICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc3NoaWZ0ID0gNyAtIChpbnQpKChyb3dfaW5mby0+d2lkdGggKyA3KSAmIDcpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gNyAtIChpbnQpKChmaW5hbF93aWR0aCArIDcpICYgNyk7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNzsKLSAgICAgICAgICAgICAgIHNfaW5jID0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweDEpOwotICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4N2Y3ZiA+PiAoNyAtIGRzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgIGRwLS07Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc3NoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwLS07Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLQotICAgICAgICAgY2FzZSAyOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKLSAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKLSAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotCi0gICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMik7Ci0gICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAyKTsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKChyb3dfaW5mby0+d2lkdGggKyAzKSAmIDMpIDw8IDEpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAzKSAmIDMpIDw8IDEpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDY7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC0yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKDMgLSAoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykpIDw8IDEpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgzIC0gKChmaW5hbF93aWR0aCArIDMpICYgMykpIDw8IDEpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDY7Ci0gICAgICAgICAgICAgICBzX2luYyA9IDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcG5nX2J5dGUgdjsKLSAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweDMpOwotICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4M2YzZiA+PiAoNiAtIGRzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZHNoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgIGRwLS07Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc3NoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwLS07Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLQotICAgICAgICAgY2FzZSA0OgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKLSAgICAgICAgICAgIGludCBzc2hpZnQsIGRzaGlmdDsKLSAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotCi0gICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMSk7Ci0gICAgICAgICAgICBkcCA9IHJvdyArIChwbmdfc2l6ZV90KSgoZmluYWxfd2lkdGggLSAxKSA+PiAxKTsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKChyb3dfaW5mby0+d2lkdGggKyAxKSAmIDEpIDw8IDIpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAxKSAmIDEpIDw8IDIpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC00OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSAocG5nX3NpemVfdCkoKDEgLSAoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkpIDw8IDIpOwotICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgxIC0gKChmaW5hbF93aWR0aCArIDEpICYgMSkpIDw8IDIpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDQ7Ci0gICAgICAgICAgICAgICBzX2luYyA9IDQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcG5nX2J5dGUgdjsKLSAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICB2ID0gKHBuZ19ieXRlKSgoKnNwID4+IHNzaGlmdCkgJiAweGYpOwotICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4ZjBmID4+ICg0IC0gZHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgZHAtLTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3AtLTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICAgICAgIGRlZmF1bHQ6IC8qIDgtYml0IG9yIGxhcmdlciAodGhpcyBpcyB3aGVyZSB0aGUgcm91dGluZSBpcyBtb2RpZmllZCkgKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcHRyLCBkcDsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfc2l6ZV90IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgaW50IHdpZHRoID0gKGludClyb3dfaW5mby0+d2lkdGg7Ci0KLSAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PiAzKTsKLQotICAgICAgICAgICAgLyogcG9pbnQgc3B0ciBhdCB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgcHJlLWV4cGFuZGVkIHJvdzogKi8KLSAgICAgICAgICAgIHNwdHIgPSByb3cgKyAod2lkdGggLSAxKSAqIHBpeGVsX2J5dGVzOwotCi0gICAgICAgICAgICAvKiBwb2ludCBkcCBhdCB0aGUgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiB0aGUgZXhwYW5kZWQgcm93OiAqLwotICAgICAgICAgICAgZHAgPSByb3cgKyAoZmluYWxfd2lkdGggLSAxKSAqIHBpeGVsX2J5dGVzOwotCi0gICAgICAgICAgICAvKiBOZXcgY29kZSBieSBOaXJhdiBDaGhhdHJhcGF0aSAtIEludGVsIENvcnBvcmF0aW9uICovCi0KLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSkKLSNlbHNlCi0gICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgICAgICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKLSAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9TOwotICAgICAgICAgICAgICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7Ci0gICAgICAgICAgICAgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfYTsKLSAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9kOwotCi0gICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgLSA4OyAgIC8vIEdSUjogIGh1aD8KLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXggPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoX21teCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyA4IG9yIDkgcGl4LCAyNCBvciAyNyBieXRlcwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3B0ciBwb2ludHMgYXQgbGFzdCBwaXhlbCBpbiBwcmUtZXhwYW5kZWQgcm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkcCBwb2ludHMgYXQgbGFzdCBwaXhlbCBwb3NpdGlvbiBpbiBleHBhbmRlZCByb3cKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDksICUyICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHBuZ19wYXNzX2luY1twYXNzXSArIDEpKnBpeGVsX2J5dGVzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDNfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDQgMyAyIDEgMCB6IHogegotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCUzKSwgJSVtbTEgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQyNCwgJSVtbTIgICAgICAgIFxuXHQiIC8vIHogeiB6IHggeCA1IDQgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDQgMyAyIDEgMCAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW0zICAgICAgIFxuXHQiIC8vIHogeiB6IHggeCA1IDQgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQ4LCAlJW1tMiAgICAgICAgIFxuXHQiIC8vIHogeiB4IHggNSA0IDMgegotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMyAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHggeCA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTQpLCAlJW1tMyAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogeiA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0zLCAlJW1tMiAgICAgICAgXG5cdCIgLy8geiB6IHggeCA1IDQgMyA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNiwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICUlbW0yLCA4KCUyKSAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDEyLCAlMiAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AzX3Bhc3M0ICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCi0jaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQgYW5kIF9jb25zdDY6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jNjQuX2FtYXNrNV8zXzApLCAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiAoJl9jNjQuX2FtYXNrN18xXzApICAvLyAoMHgwMDAwMDAwMDAwMDAwMEZGTEwpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCksICAvLyBlYXggKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfYW1hc2s3XzFfMCkgICAvLyBlZHggKDB4MDAwMDAwMDAwMDAwMDBGRkxMKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIiVtbTIiLCAiJW1tMyIKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXgqQlBQMzsKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09IHdpZHRoX21teCoyKkJQUDM7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFAzOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ5LCAlMiAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcwotCi0gICAgICAgICAgICAgICAgICAgICAiLmxvb3AzX3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IHggMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglMyksICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKLSAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCB6IHogeiB6IHoKLSAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkOCwgJSVtbTEgICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeiAyIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTIsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCB6IHoKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCAyIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0KCUyKSAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiAyIDEgMCAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzMiAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCi0jaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jNjQuX2FtYXNrNV8zXzApICAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCkgICAvLyBlYXggKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMjEsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAocG5nX3Bhc3NfaW5jW3Bhc3NdIC0gMSkqcGl4ZWxfYnl0ZXMKLQotICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzMDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCB4IDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTMpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgeiB6IHogeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDgsICUlbW0xICAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHogMiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0yLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0xLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTMgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgeiB6Ci0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTQgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0wLCAlJW1tMyAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgMCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tNCwgMTYoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiB6IDAgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0zLCA4KCUyKSAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNCwgJSVtbTAgIFxuXHQiIC8vIDEgMCAyIDEgMCAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyNCwgJTIgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgImRlY2wgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzMCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCi0jaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgICAgICAgICAgIC8vIGZvcm1lcmx5IF9jb25zdDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jNjQuX2FtYXNrNV8zXzApICAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYW1hc2s1XzNfMCkgICAvLyBlYXggKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDMgKi8KLQotICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wNF9wYXNzNCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCpCUFA0IC0gQlBQNCk7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMipCUFA0IC0gQlBQNCk7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyOCwgJTIgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMTYoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAyNCglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzIsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDRfcGFzczIgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjE2IC0gNCk7ICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDYwLCAlMiAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDRfcGFzczA6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAxIDAgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMzIoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA0MCglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDQ4KCUyKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA1NiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDY0LCAlMiAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MwICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQotCi0jaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMzIgLSA0KTsgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gNCAqLwotCi0gICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAxKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAzKSA8PCAzKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDcsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTUsICUyICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA3IDYgNiA1IDUgNCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ4LCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczQgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMjsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTUsICUyICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAxIDEgMSAwIDAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraHdkICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAzIDMgMyAyIDIgMiAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczIgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqNDsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMikgPDwgMik7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLTMgcGl4ZWxzID0+IDAtMyBieXRlcwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMxLCAlMiAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczA6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0zICAgICAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDAgMCAwIDAgMCAwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMywgJSVtbTMgIFxuXHQiIC8vIDEgMSAxIDEgMSAxIDEgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraHdkICUlbW0yLCAlJW1tMiAgXG5cdCIgLy8gMyAzIDMgMyAyIDIgMiAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICBcblx0IiAvLyAzIDMgMyAzIDIgMiAyIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTIsICUlbW0yICBcblx0IiAvLyAyIDIgMiAyIDIgMiAyIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTQsICUlbW00ICBcblx0IiAvLyAzIDMgMyAzIDMgMyAzIDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0yLCAxNiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tNCwgMjQoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDQsICUlZWN4ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMV9wYXNzMCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiJW1tMyIsICIlbW00IgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09IHdpZHRoX21teCo4OwotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIEkgc2ltcGxpZmllZCB0aGlzIHBhcnQgaW4gdmVyc2lvbiAxLjAuNGUKLSAgICAgICAgICAgICAgICAgICAgICAgICogaGVyZSBhbmQgaW4gc2V2ZXJhbCBvdGhlciBpbnN0YW5jZXMgd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICogcGl4ZWxfYnl0ZXMgPT0gMSAgLS0gR1ItUAotICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgKiBPcmlnaW5hbCBjb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgKiBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgKiBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgKiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICogICAgZHAgLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICogc3B0ciAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAgICogUmVwbGFjZW1lbnQgY29kZSBpcyBpbiB0aGUgbmV4dCB0aHJlZSBsaW5lczoKLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAtLXNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAxICovCi0KLSAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDIpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNiwgJTIgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUyICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3AyX3Bhc3M0ICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQotCi0jaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCpCUFAyIC0gQlBQMik7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMipCUFAyIC0gQlBQMik7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTQsICUyICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAwIDEgMCAxIDAgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAyIDMgMiAzIDIgMyAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczIgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqMiAtIDIpOyAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjggLSAyKTsgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsMiBieXRlcwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyLCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMwLCAlMiAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDJfcGFzczA6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMCAxIDAgMSAwIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDMgMiAzIDIgMyAyIDMgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAxNiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMjQoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMl9wYXNzMCAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKLQotI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCoyIC0gMik7IC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMTYgLSAyKTsgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMiAqLwotCi0gICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFA4KQotICAgICAgICAgICAgICAgewotLy8gR1JSIFRFU1Q6ICBzaG91bGQgd29yaywgYnV0IG5lZWRzIHRlc3RpbmcgKHNwZWNpYWwgNjQtYml0IHZlcnNpb24gb2YgcnBuZzI/KQotICAgICAgICAgICAgICAgICAgLy8gR1JSIE5PVEU6ICBubyBuZWVkIHRvIGNvbWJpbmUgcGFzc2VzIGhlcmUhCi0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKLSAgICAgICAgICAgICAgICAgICAgIC8vIGRlc3QgaXMgMTYtYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQQotICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUyICAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKLQotICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTYsICUyICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDhfcGFzczQgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQotCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoKSwgICAgICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQotICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCi0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKLSAgICAgICAgICAgICAgICAgICAgIC8vIGRlc3QgaXMgMzItYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQQotICAgICAgICAgICAgICAgICAgICAgLy8gKHJlY2FsbCB0aGF0IGV4cGFuc2lvbiBpcyBfaW4gcGxhY2VfOiAgc3B0ciBhbmQgZHAKLSAgICAgICAgICAgICAgICAgICAgIC8vICBib3RoIHBvaW50IGF0IGxvY2F0aW9ucyB3aXRoaW4gc2FtZSByb3cgYnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDI0LCAlMiAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKLQotICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUyKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAyNCglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3MyICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQotCi0jaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBpcyA4LWJ5dGUgUlJHR0JCQUEKLSAgICAgICAgICAgICAgICAgICAgIC8vIGRlc3QgaXMgNjQtYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSAuLi4KLSAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ1NiwgJTIgICAgICAgICAgICBcblx0IiAvLyBzdGFydCBvZiBsYXN0IGJsb2NrCi0KLSAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczA6ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMzIoJTIpICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0MCglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQ4KCUyKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA1NiglMikgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDY0LCAlMiAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A4X3Bhc3MwICAgICAgICBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKLQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQotCi0jaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA4ICovCi0KLSAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDYpICAgLy8gd2h5IG5vIE1NWCBmb3IgdGhpcyBjYXNlPwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQNik7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDY7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDY7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA2ICovCi0KLSAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKLSNpZiBkZWZpbmVkKFBOR19ERUJVRykKLSAgICAgICAgICAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgotICAgICAgICAgICAgICAgICAgICAicG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgX21teF9zdXBwb3J0ZWQpXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IC8vIGVuZCBvZiBfbW14X3N1cHBvcnRlZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICAgICAgICAgIGVsc2UgLyogTU1YIG5vdCBzdXBwb3J0ZWQ6ICB1c2UgbW9kaWZpZWQgQyBjb2RlIC0gdGFrZXMgYWR2YW50YWdlCi0gICAgICAgICAgICAgICAgICAqICAgb2YgaW5saW5pbmcgb2YgcG5nX21lbWNweSBmb3IgYSBjb25zdGFudCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IEJQUDMpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAzKTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQMzsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMzsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA0KTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSNpZiBkZWZpbmVkKFBOR19ERUJVRykgJiYgZGVmaW5lZChQTkdfMV8wX1gpICAvLyByb3dfYnVmX3NpemUgZ29uZSBpbiAxLjIueAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwIDwgcm93IHx8IGRwKzMgPiByb3crcG5nX3B0ci0+cm93X2J1Zl9zaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkcCBvdXQgb2YgYm91bmRzOiByb3c9JTEwcCwgZHA9JTEwcCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnA9JTEwcFxuIiwgcm93LCBkcCwgcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJvd19idWZfc2l6ZT0lbHVcbiIsIHBuZ19wdHItPnJvd19idWZfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQNDsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQNDsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgLS1zcHRyOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMikKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDIpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAyOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFAyOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNikKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDYpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQNik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA2OwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA2OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQOCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDgpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA4OwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA4OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAotI2lmIGRlZmluZWQoUE5HX0RFQlVHKQotICAgICAgICAgICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCi0gICAgICAgICAgICAgICAgICAgICJwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSAhX21teF9zdXBwb3J0ZWQpXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9IC8qIGVuZCBpZiAoTU1YIG5vdCBzdXBwb3J0ZWQpICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gLyogZW5kIGRlZmF1bHQgKDgtYml0IG9yIGxhcmdlcikgKi8KLSAgICAgIH0gLyogZW5kIHN3aXRjaCAocm93X2luZm8tPnBpeGVsX2RlcHRoKSAqLwotCi0gICAgICByb3dfaW5mby0+d2lkdGggPSBmaW5hbF93aWR0aDsKLQotICAgICAgcm93X2luZm8tPnJvd2J5dGVzID0gUE5HX1JPV0JZVEVTKHJvd19pbmZvLT5waXhlbF9kZXB0aCxmaW5hbF93aWR0aCk7Ci0gICB9Ci0KLX0gLyogZW5kIHBuZ19kb19yZWFkX2ludGVybGFjZSgpICovCi0KLSNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UgKi8KLSNlbmRpZiAvKiBQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQgKi8KLQotCi0KLSNpZiBkZWZpbmVkKFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cpCi0jaWYgZGVmaW5lZChQTkdfTU1YX1JFQURfRklMVEVSX0FWR19TVVBQT1JURUQpCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBBIFYgRyAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBBdmVyYWdlIGZpbHRlciBkZWNvZGVyCi0KLXN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2Zyhwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwcmV2X3JvdykKLXsKLSAgIHVuc2lnbmVkIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsgIC8vIHBuZ191aW50XzMyIGlzIGFjdHVhbGx5IDY0LWJpdCBvbiB4ODYtNjQKLSAgIGludCBicHA7Ci0gICBpbnQgZHVtbXlfdmFsdWVfYTsKLSAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIDIgKGN4KSB3YXMgc3BpbGxlZCcgZXJyb3IKLSAgIGludCBkdW1teV92YWx1ZV9kOwotICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX1M7Ci0gICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKLSAgIGludCBkaWZmOyAvLyAgICAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotCi0gICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAotICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCi0KLSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICJhdmdfdG9wOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIFNBVkVfR09UX2VieAotICAgICAgU0FWRV9yMTUKLSAgICAgIFNBVkVfZWJwCi0gICAgICAvLyBpbml0aWFsaXplIGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotLy9wcmUgIm1vdmwgcm93LCAlNSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpOiAgcHRyIHRvIEF2Zyh4KQotICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBlYng6ICB4Ci0vL3ByZSAibW92bCBwcmV2X3JvdywgJTQgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2k6ICBwdHIgdG8gUHJpb3IoeCkKLSAgICAgICJtb3YgICU1LCAiIFBEWCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcHRyLi4uCi0vL3ByZSAic3VibCBicHAsICIgUERYICIgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQotICAgICAgInN1YiAgIiBQQ1ggIiwiIFBEWCAiICAgICAgICBcblx0IiAvLyBlZHgvcmR4OiAgcHRyIHRvIFJhdyh4LWJwcCkKLS8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgotICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotCi0gICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKLSAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArIChQcmlvcih4KS8yKQotICAgImF2Z19ybHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmIgKCU0LCIgUEJYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIGFsIHdpdGggUHJpb3IoeCkKLSAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJzaHJiICUlYWwgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIGJ5IDIKLSAgICAgICJhZGRiIC0xKCU1LCIgUEJYICIsKSwgJSVhbCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKLS8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglNSwiIFBCWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKLSAgICAgICJqYiBhdmdfcmxwICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFncwotCi0gICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQgKDMyLWJpdCBtYXNrIF93b3VsZF8gYmUgZ29vZCBlbm91Z2gKLSAgICAgIC8vIFtjb21wdXRpbmcgZGVsdGFdLCBidXQgMzItYml0IG9wcyBhcmUgemVyby1leHRlbmRlZCBvbiA2NC1iaXQsIGFyZ2gpCi0gICAgICAvLyAoaWYgc3dhcHBlZCBlZHggYW5kIGVicCwgY291bGQgZG8gOC1iaXQgb3IgMTYtYml0IG1hc2suLi5GSVhNRT8pCi0gICAgICAibW92ICAlNSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHRha2Ugc3RhcnQgb2Ygcm93Ci0gICAgICAiYWRkICAiIFBCWCAiLCIgUEJQICIgICAgICAgIFxuXHQiIC8vIGFkZCBicHAKLSAgICAgICJhZGQgICQweGYsICIgUEJQICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKLS8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCi0gICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAic3ViICAlNSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KLSAgICAgICJqeiBhdmdfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYnggYXQgYWxpZ25tZW50Ci0KLSAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKLQotICAgICAgLy8gZml4IGFsaWdubWVudAotICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgYnl0ZXMgdXAgdG8gdGhlIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgLy8gICAgUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCi0gICAiYXZnX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAoJTQsIiBQQlggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQotICAgICAgIm1vdmIgKCIgUERYICIsIiBQQlggIiwpLCAlJWFsIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCi0gICAgICAiYWRkdyAlJWN4LCAlJWF4ICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAic2hydyAlJWF4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCi0gICAgICAiYWRkYiAtMSglNSwiIFBCWCAiLCksICUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAiY21wbCAlJWVicCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGFsaWdubWVudCBib3VuZGFyeQotICAgICAgIm1vdmIgJSVhbCwgLTEoJTUsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAiamIgYXZnX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJlcGVhdCB1bnRpbCBhdCBhbGlnbm1lbnQgYm91bmRhcnkKLQotICAgImF2Z19nbzogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVheCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVheAotICAgICAgIm1vdmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBjb3B5IC0+IGVjeAotICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4Ci0gICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICJzdWJsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gc3ViIG92ZXItYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLS8vb3V0ICJtb3ZsICUlZWN4LCBNTVhMZW5ndGggICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWJwLCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZGlmZiwgYnV0IG5vIHJlZyBjb25zdHJhaW50KD8pCi0gICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVkeCBmdW5jdGlvbnMpCi0gICAgICBSRVNUT1JFX3IxNQotICAgICAgUkVTVE9SRV9HT1RfZWJ4Ci0KLS8vICJUaGVyZSBpcyBubyB3YXkgZm9yIHlvdSB0byBzcGVjaWZ5IHRoYXQgYW4gaW5wdXQgb3BlcmFuZCBpcyBtb2RpZmllZAotLy8gd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgaXQgYXMgYW4gb3V0cHV0IG9wZXJhbmQuIiAgW21ha2VzIHNlbnNlXQotCi0vLyAiVW5sZXNzIGFuIG91dHB1dCBvcGVyYW5kIGhhcyB0aGUgYCYnIGNvbnN0cmFpbnQgbW9kaWZpZXIsIEdDQyBtYXkKLS8vIGFsbG9jYXRlIGl0IGluIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIGFuIHVucmVsYXRlZCBpbnB1dCBvcGVyYW5kLCBvbiB0aGUKLS8vIGFzc3VtcHRpb24gdGhlIGlucHV0cyBhcmUgY29uc3VtZWQgYmVmb3JlIHRoZSBvdXRwdXRzIGFyZSBwcm9kdWNlZC4iCi0vLyBbdHJ5aW5nIHRvIF9mb3JjZV8gdGhpc10KLQotLy8gImA9JyAgIE1lYW5zIHRoYXQgdGhpcyBvcGVyYW5kIGlzIHdyaXRlLW9ubHkgZm9yIHRoaXMgaW5zdHJ1Y3Rpb246Ci0vLyAgICAgICAgdGhlIHByZXZpb3VzIHZhbHVlIGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgYnkgb3V0cHV0IGRhdGEuIgotLy8gICAgICAgIFtvcGVyYW5kID09IHZhcmlhYmxlIG5hbWUsIHByZXN1bWFibHldCi0KLSAgICAgIC8vIG91dHB1dCByZWdzCi0gICAgICAvLyB0aGVzZSBhcmUgb3BlcmFuZHMgMC0xIChvcmlnaW5hbGx5IDAtMyk6Ci0gICAgICA6ICI9YyIgKE1NWExlbmd0aCksICAgICAgLy8gJTAgLT4gJTAKLSAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAvLyAlMyAtPiAlMQotLy8gICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwgIC8vICUxIC0+IEdPTkUKLS8vICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAvLyAlMiAtPiBHT05FCi0KLSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgIC8vIHRoZXNlIGFyZSBvcGVyYW5kcyAyLTUgKG9yaWdpbmFsbHkgNC03KTsgdHdvIG9mIHRoZWlyIGNvbnN0cmFpbnRzIHNheQotICAgICAgLy8gdGhleSBtdXN0IGdvIGluIHNhbWUgcGxhY2VzIGFzIG9wZXJhbmRzIDAtMSAob3JpZ2luYWxseSAwLTMpIGFib3ZlOgotICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gJTQgLT4gJTIgZWN4Ci0gICAgICAgICIxIiAoRnVsbExlbmd0aCksICAvLyAlNyAtPiAlMyBlYXgKLSAgICAgICAgIlMiIChwcmV2X3JvdyksICAgIC8vICU1IC0+ICU0IGVzaS9yc2kKLSAgICAgICAgIkQiIChyb3cpICAgICAgICAgIC8vICU2IC0+ICU1IGVkaS9yZGkKLQotICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgX0NMT0JCRVJfcjE1Ci0gICAgICAgIF9DTE9CQkVSX2VicAotICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4Ci0gICApOwotCi0gICAvLyBub3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKLSAgIHN3aXRjaCAoYnBwKQotICAgewotICAgICAgY2FzZSAzOgotICAgICAgewotLy8gICAgICAgX1NoaWZ0QnBwID0gMjQ7ICAgIC8vID09IDMgKiA4Ci0vLyAgICAgICBfU2hpZnRSZW0gPSA0MDsgICAgLy8gPT0gNjQgLSAyNAotCi0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAibW92cSAiIEFNQVNLNV8zXzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrNV8zXzAgLT4gbW03Ci0vLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBbaW50ZXJsZWF2ZSBmb3IgcGFyYWxsZWwuP10KLS8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKLSAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00Ci0vLyBwcmVsb2FkICAibW92bCAgcHJldl9yb3csICUwICAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKLSAgICAgICAgICAgIFJFU1RPUkVfcmJwCi0KLSAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgIm1vdnEgIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCi0gICAgICAgICAiYXZnXzNscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIgLy8gbG9hZCBtbTAgd2l0aCBBdmcoeCkKLSAgICAgICAgICAgICJtb3ZxICAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBjb3JyZWN0IHBvc2l0aW9uIFJhdyh4LWJwcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEKLSAgICAgICAgICAgICJtb3ZxICAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgbW0xIHdpdGggUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3ZxICAlJW1tNywgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZyb3cgYnl0ZQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKLSAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBMQkNhcnJ5Ci0gICAgICAgICAgICAibW92cSAgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKLSAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHZhbGlkIG9ubHkgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFuZCAgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLSAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyAzLTUKLSAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAibW92cSAgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKLSAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHZhbGlkIG9ubHkgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFuZCAgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLQotICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5Ci0gICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBtbTYgbWFzayB0byBjb3ZlciBsYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0d28gYnl0ZXMKLSAgICAgICAgICAgICJtb3ZxICAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIG5lZWQgYmUgc2hpZnRlZCBvbmx5IG9uY2UgaGVyZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBjb3JyZWN0IHgtYnBwIG9mZnNldC4KLSAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byBSYXcoeC1icHApLzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKLSAgICAgICAgICAgICJhZGRsICAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLSAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQotICAgICAgICAgICAgIm1vdnEgICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKLSAgICAgICAgICAgIC8vIG1vdmUgdXBkYXRlZCBSYXcoeCkgdG8gdXNlIGFzIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgImNtcGwgICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCi0gICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXcoeCkgdG8gbW0yCi0gICAgICAgICAgICAiamIgYXZnXzNscCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCAzIGJwcAotCi0gICAgICBjYXNlIDQ6ICAgLy8gZm9ybWVybHkgc2hhcmVkIHdpdGggNiBicHAgY2FzZSB2aWEgX1NoaWZ0QnBwIGFuZCBfU2hpZnRSZW0sCi0gICAgICB7ICAgICAgICAgLy8gYnV0IGxvb3AgdXNlcyBhbGwgOCBNTVggcmVncywgYW5kIHBzcmxxL3BzbGxxIHJlcXVpcmUgNjQtYml0Ci0gICAgICAgICAgICAgICAgLy8gbWVtIChQSUMvLnNvIHByb2JsZW1zKSwgTU1YIHJlZyAobm9uZSBsZWZ0KSwgb3IgaW1tZWRpYXRlCi0vLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDMyIChwc2xscSkKLS8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMzIgKHBzcmxxKQotCi0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICBMT0FEX0dPVF9yYnAKLSAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00Ci0gICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQotICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLS8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICAgICAibW92cSAiIEFNQVNLMF84XzAgIiwgJSVtbTcgICAgXG5cdCIgLy8gX2FtYXNrMF84XzAgLT4gbW03Ci0gICAgICAgICAgICBSRVNUT1JFX3JicAotCi0gICAgICAgICAgICAvLyAuLi4gYW5kIGNsZWFyIGFsbCBieXRlcyBleGNlcHQgZm9yIDFzdCBhY3RpdmUgZ3JvdXAKLS8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi0gICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIHdhcyBfU2hpZnRSZW0KLS8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3ZxICAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayBmb3IgMm5kIGFjdGl2ZSBncm91cAotCi0gICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3ZSBjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKLSAgICAgICAgICJhdmdfNGxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIKLSAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTEgICBcblx0IgotICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCi0gICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCi0gICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKLSAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKLSAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCi0gICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggQWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwotICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQotICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKLSAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUENYICIsKSBcblx0IgotICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJqYiBhdmdfNGxwICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKLSAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKLQotICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAvLyBlY3gKLSAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAotCi0jaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0Ci0gICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgotI2VuZGlmCi0gICAgICAgICApOwotICAgICAgfQotICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKLQotICAgICAgY2FzZSAxOgotICAgICAgewotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLS8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5Ci0vLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGk6ICBBdmcoeCkKLS8vIHByZWxvYWQgICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gdGVzdCBpZiBvZmZzZXQgYXQgZW5kIG9mIGFycmF5Ci0gICAgICAgICAgICAiam5iIGF2Z18xZW5kICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIFNBVkVfZWJwCi0KLSAgICAgICAgICAgIC8vIGRvIEF2ZyBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpOiAgUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3YgICUxLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcG9pbnRlci4uLgotICAgICAgICAgICAgImRlYyAgIiBQQlAgIiAgICAgICAgICAgICAgICBcblx0IiAvLyBlYnAvcmJwOiAgUmF3KHgtYnBwKQotICAgICAgICAgICAgInhvcmwgJSVlZHgsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVkeCBiZWZvcmUgdXNpbmcgZGwgJiBkeAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgaW4gbG9vcCBiZWxvdwotICAgICAgICAgICAgU0FWRV9HT1RfZWJ4Ci0KLSAgICAgICAgICJhdmdfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIFJhdyh4KSA9IEF2Zyh4KSArICgoUmF3KHgtYnBwKSArIFByaW9yKHgpKS8yKQotICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdmIgKCUwLCIgUENYICIsKSwgJSVkbCAgICBcblx0IiAvLyBsb2FkIGRsIHdpdGggUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3ZiICgiIFBCUCAiLCIgUENYICIsKSwgJSVibCBcblx0IiAvLyBsb2FkIGJsIHdpdGggUmF3KHgtYnBwKQotICAgICAgICAgICAgImFkZHcgJSVkeCwgJSVieCAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImluY2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInNocncgJSVieCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgotICAgICAgICAgICAgImFkZGIgLTEoJTEsIiBQQ1ggIiwpLCAlJWJsICBcblx0IiAvLyBhZGQgQXZnKHgpOyAtMSB0byBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jIGVjeAotICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKLSAgICAgICAgICAgICJtb3ZiICUlYmwsIC0xKCUxLCIgUENYICIsKSAgXG5cdCIgLy8gd3JpdGUgYmFjayBSYXcoeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8gb2Zmc2V0IGluYyBlY3gKLSAgICAgICAgICAgICJqYiBhdmdfMWxwICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgUkVTVE9SRV9HT1RfZWJ4Ci0gICAgICAgICAgICBSRVNUT1JFX2VicAotCi0gICAgICAgICAiYXZnXzFlbmQ6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCi0KLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQotICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4Ci0gICAgICAgICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAvLyBlYXgKLQotICAgICAgICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICAgX0NMT0JCRVJfR09UX2VieAotICAgICAgICAgICAgICBfQ0xPQkJFUl9lYnAKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICByZXR1cm47ICAvLyBlbmQgMSBicHAKLQotICAgICAgY2FzZSAyOgotICAgICAgewotLy8gICAgICAgX1NoaWZ0QnBwID0gMTY7ICAgLy8gPT0gMiAqIDgKLS8vICAgICAgIF9TaGlmdFJlbSA9IDQ4OyAgIC8vID09IDY0IC0gX1NoaWZ0QnBwCi0KLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzawotICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzZfMl8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazZfMl8wIC0+IG1tNwotICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLS8vIHByZWxvYWQgICJtb3ZsICBkaWZmLCAlJWVjeCAgICAgICAgICAgICBcblx0IiAvLyBlY3g6ICB4ID0gb2Zmc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQotLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLS8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQotICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCi0gICAgICAgICAiYXZnXzJscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCi0gICAgICAgICAgICAicHNybHEgJDQ4LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKLSAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIgLy8gIChHUlIgQlVHRklYOiAgd2FzIHBzbGxxKQotICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCi0gICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCi0KLSAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0KLSAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgMiAmIDMKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0KLSAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgNCAmIDUKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0KLSAgICAgICAgICAgIC8vIGFkZCA0dGggYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgNiAmIDcKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAotICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5Ci0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCi0gICAgICAgICAgICAvLyBwcmVwIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgImpiIGF2Z18ybHAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCAyIGJwcAotCi0gICAgICBjYXNlIDY6ICAgLy8gZm9ybWVybHkgc2hhcmVkIHdpdGggNCBicHAgY2FzZSAoc2VlIGNvbW1lbnRzIHRoZXJlKQotICAgICAgewotLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyA0OCAocHNsbHEpCi0vLyAgICAgICBfU2hpZnRSZW0gPSA2NCAtIF9TaGlmdEJwcDsgIC8vIDE2IChwc3JscSkKLQotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAotICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIF9MQkNhcnJ5TWFzayAtPiBtbTUKLSAgICAgICAgICAgIC8vIHJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0vLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzBfOF8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazBfOF8wIC0+IG1tNwotICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgLy8gLi4uIGFuZCBjbGVhciBhbGwgYnl0ZXMgZXhjZXB0IGZvciAxc3QgYWN0aXZlIGdyb3VwCi0vLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTcgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQotICAgICAgICAgICAgIm1vdnEgICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBtYXNrIGZvciAybmQgYWN0aXZlIGdyb3VwCi0KLSAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQotICAgICAgICAgImF2Z182bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgotICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiCi0gICAgICAgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIGF2ZXJhZ2UKLSAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCi0gICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKLSAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwotICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCi0gICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAotICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5Ci0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCi0gICAgICAgICAgICAvLyBwcmVwIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgImpiIGF2Z182bHAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAotCi0gICAgICBjYXNlIDg6Ci0gICAgICB7Ci0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIFtpbnRlcmxlYXZlIGZvciBwYXJhbGxlbC4/XQotLy8gcHJlbG9hZCAgIm1vdmwgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQotICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLS8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQotICAgICAgICAgICAgUkVTVE9SRV9yYnAKLQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChOTyBORUVEIHRvIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQotCi0gICAgICAgICAiYXZnXzhscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQotICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgotICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2hlcmUgYm90aCBsc2IncyB3ZXJlID09IDEKLSAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcsIGVhY2ggYnl0ZQotICAgICAgICAgICAgInBhZGRiICUlbW0zLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gQXZnLCBlYWNoIGJ5dGUKLSAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNywgZWFjaCBieXRlCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnLCBlYWNoCi0gICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpIHRvIEF2ZyBmb3IgZWFjaAotICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gcmV1c2UgYXMgUmF3KHgtYnBwKQotICAgICAgICAgICAgImpiIGF2Z184bHAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAotICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIsICIlbW01IgotI2VuZGlmCi0gICAgICAgICApOwotICAgICAgfQotICAgICAgYnJlYWs7ICAvLyBlbmQgOCBicHAKLQotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLy8gYnBwICE9IDEsMiwzLDQsNiw4OiAgZG9lc24ndCBleGlzdAotICAgICAgewotICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAotI2lmIGRlZmluZWQoUE5HX0RFQlVHKQotICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCi0gICAgICAgICAgICJwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSlcbiIpOwotI2VuZGlmCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgfSAvLyBlbmQgc3dpdGNoIChicHApCi0KLSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgIC8vIE1NWCBhY2NlbGVyYXRpb24gY29tcGxldGU7IG5vdyBkbyBjbGVhbi11cAotICAgICAgLy8gY2hlY2sgaWYgYW55IHJlbWFpbmluZyBieXRlcyBsZWZ0IHRvIGRlY29kZQotLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgotLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICBcblx0IiAvLyBlYXg6ICB4ID09IG9mZnNldCBieXRlcyBhZnRlciBNTVgKLS8vcHJlICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCi0gICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQotICAgICAgImpuYiBhdmdfZW5kICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICBTQVZFX2VicAotCi0gICAgICAvLyBkbyBBdmcgZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLS8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKLSAgICAgICJtb3YgICUyLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcG9pbnRlci4uLgotLy9wcmUgInN1YmwgYnBwLCAiIFBCUCAiICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKLSAgICAgICJzdWIgICIgUENYICIsIiBQQlAgIiAgICAgICAgXG5cdCIgLy8gZWJwOiAgUmF3KHgtYnBwKQotICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeCBiZWxvdwotCi0gICAgICBTQVZFX0dPVF9lYngKLQotICAgImF2Z19scDI6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCi0gICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgY2wgd2l0aCBQcmlvcih4KQotICAgICAgIm1vdmIgKCIgUEJQICIsIiBQQVggIiwpLCAlJWJsIFxuXHQiIC8vIGxvYWQgYmwgd2l0aCBSYXcoeC1icHApCi0gICAgICAiYWRkdyAlJWN4LCAlJWJ4ICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAic2hydyAlJWJ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCi0gICAgICAiYWRkYiAtMSglMiwiIFBBWCAiLCksICUlYmwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWF4Ci0gICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGVuZCBvZiBhcnJheQotICAgICAgIm1vdmIgJSVibCwgLTEoJTIsIiBQQVggIiwpICBcblx0IiAvLyB3cml0ZSBiYWNrIFJhdyh4KSBbbW92IGRvZXMgbm90Ci0gICAgICAiamIgYXZnX2xwMiAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWF4XQotCi0gICAgICBSRVNUT1JFX0dPVF9lYngKLSAgICAgIFJFU1RPUkVfZWJwCi0KLSAgICJhdmdfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5kIE1NWDsgcHJlcCBmb3IgcG9zcy4gRlAgaW5zdHJzLgotCi0gICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKLSAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKLQotICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCi0gICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICIzIiAoTU1YTGVuZ3RoKSwgICAvLyBlYXgKLSAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAotCi0gICAgICBDTE9CX0NPTE9OX2VieF9lYnAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICBDTE9CQkVSX0dPVF9lYngKLSAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCi0gICAgICAgIENMT0JCRVJfZWJwCi0gICApOwotCi19IC8qIGVuZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSAqLwotCi0jZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVEICovCi0KLQotCi0jaWYgZGVmaW5lZChQTkdfTU1YX1JFQURfRklMVEVSX1BBRVRIX1NVUFBPUlRFRCkKLSNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFAgQSBFIFQgSCAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgUGFldGggZmlsdGVyIGRlY29kZXIKLQotc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwcmV2X3JvdykKLXsKLSAgIHVuc2lnbmVkIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsgIC8vIHBuZ191aW50XzMyIGlzIGFjdHVhbGx5IDY0LWJpdCBvbiB4ODYtNjQKLSAgIGludCBicHA7Ci0gICBpbnQgZHVtbXlfdmFsdWVfYTsKLSAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIDIgKGN4KSB3YXMgc3BpbGxlZCcgZXJyb3IKLSAgIGludCBkdW1teV92YWx1ZV9kOwotICAgcG5nX2NoYXJwIGR1bW15X3ZhbHVlX1M7Ci0gICBwbmdfY2hhcnAgZHVtbXlfdmFsdWVfRDsKLSAgIGludCBkaWZmOyAvLyAgICAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotCi0gICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAotICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCi0KLSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgIFNBVkVfR09UX2VieAotICAgICAgU0FWRV9yMTUKLSAgICAgIFNBVkVfZWJwCi0vL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLSAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeCBvZmZzZXQKLS8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQotICAgICAgInhvcmwgJSVlZHgsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBlZHg6ICB4LWJwcCBvZmZzZXQKLS8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWF4ICAgICAgXG5cdCIgLy8gYnJpbmcgaW4gdmlhIGVheC4uLgotICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotCi0gICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKLSAgICAgIC8vIE5vdGU6IHRoZSBmb3JtdWxhIHdvcmtzIG91dCB0byBiZSBhbHdheXMKLSAgICAgIC8vICAgUGFldGgoeCkgPSBSYXcoeCkgKyBQcmlvcih4KSAgICAgIHdoZXJlIHggPCBicHAKLSAgICJwYWV0aF9ybHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZiICglMiwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKLSAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKLSAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKLS8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiCi0gICAgICAiamIgcGFldGhfcmxwICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudCAobm90ZTogIGNvbXB1dGluZyBfZGVsdGFfIG9mIHR3byBwb2ludGVycywKLSAgICAgIC8vIHNvIGhlcmVhZnRlciAlJWVicCBpcyBzdWZmaWNpZW50IGV2ZW4gb24gNjQtYml0KQotICAgICAgIm1vdiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwotICAgICAgImFkZCAgIiBQQlggIiwiIFBCUCAiICAgICAgICBcblx0IiAvLyBhZGQgYnBwCi0gICAgICAiYWRkICAkMHhmLCAiIFBCUCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3KzggdG8gaW5jciBwYXN0IGFsaWdubWVudCBiZHJ5Ci0vLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQotICAgICAgQ0xFQVJfQk9UVE9NXzNfQklUUyAgUEJQICAgICJcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgInN1YiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCByb3cgcHRyIGFnYWluID0+IGVicCA9Ci0gICAgICAianogcGFldGhfZ28gICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWJ4IGF0IGFsaWdubWVudAotCi0gICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCi0KLSAgICAgIFNBVkVfcjExX3IxMl9yMTMKLQotICAgICAgLy8gZml4IGFsaWdubWVudAotICAgInBhZXRoX2xwMTogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKLSAgICAgICJtb3ZiICglMSwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZsICUlZWF4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgIm1vdmIgKCUyLCIgUERYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBhbAotICAgICAgInN1YmwgJSVlY3gsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLSBjID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICJhZGRsICIgcGFfVEVNUCAiLCAlJWVheCAgICAgXG5cdCIgLy8gcGN2ID0gcGF2ICsgcGJ2Ci0gICAgICAvLyBwYyA9IGFicyhwY3YpCi0gICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCi0gICAgICAianogcGFldGhfcGNhICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibmVnbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi0KLSAgICJwYWV0aF9wY2E6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWF4LCAiIHBjX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCi0gICAgICAvLyBwYiA9IGFicyhwYnYpCi0gICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWN4ICAgIFxuXHQiCi0gICAgICAianogcGFldGhfcGJhICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi0KLSAgICJwYWV0aF9wYmE6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCi0gICAgICAvLyBwYSA9IGFicyhwYXYpCi0gICAgICAibW92bCAiIHBhX1RFTVAgIiwgJSVlYXggICAgIFxuXHQiCi0gICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCi0gICAgICAianogcGFldGhfcGFhICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibmVnbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi0KLSAgICJwYWV0aF9wYWE6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWF4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYSBmb3IgbGF0ZXIgdXNlCi0gICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAiam5hIHBhZXRoX2FiYiAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwotICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWN4ICAgICBcblx0IgotICAgICAgImpuYSBwYWV0aF9iYmMgICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZiICglMSwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgotCi0gICAicGFldGhfYmJjOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBwYiA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4KQotICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKLSAgICAgICJqbXAgcGFldGhfcGFldGggICAgICAgICAgICAgXG5cdCIKLQotICAgInBhZXRoX2FiYjogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGEgPD0gcGI7IG5vdyB0ZXN0IGlmIHBhIDw9IHBjCi0gICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlYXggICAgIFxuXHQiCi0gICAgICAiam5hIHBhZXRoX2FiYyAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBwYSA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgIm1vdmIgKCUxLCIgUERYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAiam1wIHBhZXRoX3BhZXRoICAgICAgICAgICAgIFxuXHQiCi0KLSAgICJwYWV0aF9hYmM6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKLSAgICAgICJtb3ZiICglMiwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gY2wKLQotICAgInBhZXRoX3BhZXRoOiAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgImluY2wgJSVlZHggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKLSAgICAgICJhZGRiICUlY2wsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIKLSAgICAgICJjbXBsICUlZWJwLCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgICJqYiBwYWV0aF9scDEgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgUkVTVE9SRV9yMTFfcjEyX3IxMwotCi0gICAicGFldGhfZ286ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICBSRVNUT1JFX0Z1bGxMZW5ndGggIiUlZWN4ICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGggLT4gZWN4Ci0gICAgICAibW92bCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAic3VibCAlJWVieCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKLSAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVheCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAotICAgICAgInN1YmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLS8vb3V0ICJtb3ZsICUlZWN4LCBNTVhMZW5ndGggICAgICAgXG5cdCIKLSAgICAgICJtb3ZsICUlZWJwLCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZGlmZiwgYnV0IG5vIHJlZyBjb25zdHJhaW50KD8pCi0gICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVkeCBmdW5jdGlvbnMpCi0gICAgICBSRVNUT1JFX3IxNQotICAgICAgUkVTVE9SRV9HT1RfZWJ4Ci0KLSAgICAgIDogIj1jIiAoTU1YTGVuZ3RoKSwgICAgICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MKLSAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAiPWEiIChkaWZmKQotCi0gICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKLSAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgIC8vIGVheAotCi0gICAgICA6ICIlZWR4IiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICBfQ0xPQkJFUl9yMTFfcjEyX3IxMwotICAgICAgICBfQ0xPQkJFUl9yMTUKLSAgICAgICAgX0NMT0JCRVJfZWJwCi0gICAgICAgIF9DTE9CQkVSX0dPVF9lYngKLSAgICk7Ci0KLSAgIC8vIG5vdyBkbyB0aGUgbWF0aCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJvdwotICAgc3dpdGNoIChicHApCi0gICB7Ci0gICAgICBjYXNlIDM6Ci0gICAgICB7Ci0vLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gYnBwICogOAotLy8gICAgICAgX1NoaWZ0UmVtID0gNDA7ICAgIC8vID09IDY0IC0gX1NoaWZ0QnBwCi0KLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgIExPQURfR09UX3JicAotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0vLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiCi0gICAgICAgICAicGFldGhfM2xwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGxhc3QgMyBieXRlcyB0byAxc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwotICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQotICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyBwcmVwIGM9UHJpb3IoeC1icHApIGJ5dGVzCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKLSAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgbGFzdCAzIGJ5dGVzIHRvIDFzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGJ5dGVzCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0zICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgInBhbmQgIiBBTUFTSzVfM18wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s1XzNfMCAod2FzIF9BY3RpdmVNYXNrKQotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCi0gICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQotICAgICAgICAgICAgLy8gbm93IGRvIFBhZXRoIGZvciAybmQgc2V0IG9mIGJ5dGVzICgzLTUpCi0gICAgICAgICAgICAicHNybHEgJDI0LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDIKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQotICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPQotICAgICAgICAgICAgLy8gICAgICAgcGF2ICsgcGJ2ID0gcGJ2ICsgcGF2Ci0gICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTQsICUlbW02ICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCi0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKSBzdGVwIDEKLSAgICAgICAgICAgICJwYW5kICIgQU1BU0s1XzNfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNV8zXzAgKHdhcyBfQWN0aXZlTWFzaykKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgotICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyB0byAybmQgZ3JvdXAgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBieXRlcwotICAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQotICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTMgICAgICAgICAgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMgotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyAod2FzIF9TaGlmdEJwcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkKLSAgICAgICAgICAgIC8vIG5vdyBkbyBQYWV0aCBmb3IgM3JkLCBhbmQgZmluYWwsIHNldCBvZiBieXRlcyAoNi03KQotICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFja3Vzd2IgJSVtbTcsICUlbW0xICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgIiBBTUFTSzBfMl82ICIsICUlbW0xICBcblx0IiAvLyBfYW1hc2swXzJfNiAoX0FjdGl2ZU1hc2tFbmQpCi0gICAgICAgICAgICAicGFkZGIgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBweG9yIGRvZXMgbm90IGFmZmVjdCBmbGFncwotICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMyByZWFkeSB0byBiZSB1c2VkIGFzIFByaW9yKHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgICJqYiBwYWV0aF8zbHAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIFJFU1RPUkVfcmJwCi0KLSAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCi0KLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKLSAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKLQotI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKLSNlbmRpZgotICAgICAgICAgKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOyAgLy8gZW5kIDMgYnBwCi0KLSAgICAgIGNhc2UgNDoKLSAgICAgIHsKLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLS8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWN4ICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGE9UmF3KHgtYnBwKSBieXRlcwotICAgICAgICAgInBhZXRoXzRscDogICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gZG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKLSAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKLSAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0zICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazRfNF8wICh3YXMgX0FjdGl2ZU1hc2spCi0gICAgICAgICAgICBSRVNUT1JFX3JicAotICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAxCi0gICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQotICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgotICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGEKLSAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIHByZWRpY3RvciB3aXRoIFJhdyh4KQotICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCi0gICAgICAgICAgICAiamIgcGFldGhfNGxwICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKLSAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCi0KLSAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKLSAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKLQotI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKLSNlbmRpZgotICAgICAgICAgKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOyAgLy8gZW5kIDQgYnBwCi0KLSAgICAgIGNhc2UgMToKLSAgICAgIGNhc2UgMjoKLSAgICAgIHsKLSAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLS8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWF4ICAgICAgICAgICAgXG5cdCIgLy8gZWF4OiB4ID0gb2Zmc2V0IHRvIGFsaWduLiBiZHJ5Ci0vLyBwcmVsb2FkICAibW92bCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiam5iIHBhZXRoX2RlbmQgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIFNBVkVfZWJwCi0KLS8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotICAgICAgICAgICAgLy8gZG8gUGFldGggZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLS8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQotICAgICAgICAgICAgIm1vdmwgJSVlYXgsICUlZWJwICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKLSAgICAgICAgICAgICJzdWJsICUlZWN4LCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZWF4IC0gYnBwCi0gICAgICAgICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4Ci0KLSAgICAgICAgICAgIFNBVkVfR09UX2VieAotICAgICAgICAgICAgU0FWRV9yMTFfcjEyX3IxMwotCi0gICAgICAgICAicGFldGhfZGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBibAotICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQotICAgICAgICAgICAgIm1vdmwgJSVlYngsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCi0gICAgICAgICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGJsCi0gICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQotICAgICAgICAgICAgIm1vdmwgJSVlYngsICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgotICAgICAgICAgICAgLy8gcGMgPSBhYnMocGN2KQotICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgotICAgICAgICAgICAgImp6IHBhZXRoX2RwY2EgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAgICAgICAicGFldGhfZHBjYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocGJ2KQotICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgotICAgICAgICAgICAgImp6IHBhZXRoX2RwYmEgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm5lZ2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAgICAgICAicGFldGhfZHBiYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCAlJWVjeCwgIiBwYl9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQotICAgICAgICAgICAgLy8gcGEgPSBhYnMocGF2KQotICAgICAgICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgotICAgICAgICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgotICAgICAgICAgICAgImp6IHBhZXRoX2RwYWEgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAgICAgICAicGFldGhfZHBhYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQotICAgICAgICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgotICAgICAgICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJiICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPiBwYjsgbm93IHRlc3QgaWYgcGIgPD0gcGMKLSAgICAgICAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKLSAgICAgICAgICAgICJqbmEgcGFldGhfZGJiYyAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBiID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAgICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgInBhZXRoX2RiYmM6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKLSAgICAgICAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCi0gICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICJwYWV0aF9kYWJiOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwotICAgICAgICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgotICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJjICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICAgICAiam1wIHBhZXRoX2RwYWV0aCAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICJwYWV0aF9kYWJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKLSAgICAgICAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gY2wKLQotICAgICAgICAgInBhZXRoX2RwYWV0aDogICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImluY2wgJSVlYnAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKLSAgICAgICAgICAgICJhZGRiICUlY2wsIC0xKCUyLCIgUEFYICIsKSAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgYWdhaW5zdCBGdWxsTGVuZ3RoCi0gICAgICAgICAgICAiamIgcGFldGhfZGxwICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKLSAgICAgICAgICAgIFJFU1RPUkVfR09UX2VieAotICAgICAgICAgICAgUkVTVE9SRV9lYnAKLQotICAgICAgICAgInBhZXRoX2RlbmQ6ICAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKLSAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKLQotICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCi0gICAgICAgICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICAgICAgICIzIiAoZGlmZiksICAgICAgICAvLyBlYXgKLSAgICAgICAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAotCi0gICAgICAgICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgICBDTE9CQkVSX0dPVF9lYngKLSAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCi0gICAgICAgICAgICAgIENMT0JCRVJfZWJwCi0gICAgICAgICAgICAgIENMT0JfQ09NTUFfZWJYX3IxWAotICAgICAgICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCi0gICAgICAgICApOwotICAgICAgfQotICAgICAgcmV0dXJuOyAvLyBlbmQgMSBvciAyIGJwcCAobm8gbmVlZCB0byBnbyBmdXJ0aGVyIHdpdGggdGhpcyBvbmUpCi0KLSAgICAgIGNhc2UgNjoKLSAgICAgIHsKLS8vICAgICAgIF9BY3RpdmVNYXNrMiA9IDB4ZmZmZmZmZmYwMDAwMDAwMExMOyAgLy8gTk9UIFVTRUQgKCJfYW1hc2tfMF80XzQiKQotLy8gICAgICAgX1NoaWZ0QnBwID0gNDg7ICAgICAgIC8vIGJwcCA8PCAzID09IGJwcCAqIDgKLS8vICAgICAgIF9TaGlmdFJlbSA9IDE2OyAgICAgICAvLyA2NCAtIF9TaGlmdEJwcAotCi0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0vLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLS8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICJwYWV0aF82bHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIG11c3Qgc2hpZnQgdG8gcG9zaXRpb24gUmF3KHgtYnBwKSBkYXRhCi0gICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHdhcyBfU2hpZnRSZW0KLSAgICAgICAgICAgIC8vIGRvIGZpcnN0IHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIHJlYWQgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCi0gICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQotICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIC8vIG11c3Qgc2hpZnQgdG8gcG9zaXRpb24gUHJpb3IoeC1icHApIGRhdGEKLSAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdFJlbQotICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKLSAgICAgICAgICAgIExPQURfR09UX3JicAotICAgICAgICAgICAgInBhbmQgIiBBTUFTSzRfNF8wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s0XzRfMCAod2FzIF9BY3RpdmVNYXNrKQotICAgICAgICAgICAgUkVTVE9SRV9yYnAKLSAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0zICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMQotICAgICAgICAgICAgInBhZGRiICglMSwiIFBDWCAiLCksICUlbW03ICBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgotICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBicHAgKiA4ID0gYml0cyBwZXIgcGl4ZWwKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gNjQgLSAoYnBwICogOCkgPSByZW1haW5kZXIKLSAgICAgICAgICAgICJwb3IgJSVtbTYsICUlbW0zICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc2xscSAkNDgsICUlbW01ICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdEJwcAotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCi0gICAgICAgICAgICAicG9yICUlbW01LCAlJW1tMSAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCi0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKLSAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIG5leHQgbG9vcAotICAgICAgICAgICAgImpiIHBhZXRoXzZscCAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpL3JzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4Ci0gICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAotCi0gICAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBicHAgPT0gOAotICAgICAgewotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0vLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBvbmx5IHRpbWUgc2hvdWxkIG5lZWQgdG8gcmVhZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCi0gICAgICAgICAicGFldGhfOGxwOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBkbyBmaXJzdCBzZXQgb2YgNCBieXRlcwotICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYQotICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBiCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYwotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwotICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazRfNF8wICh3YXMgX0FjdGl2ZU1hc2spCi0gICAgICAgICAgICBSRVNUT1JFX3JicAotICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTIgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgICJwYWRkYiAoJTEsIiBQQ1ggIiwpLCAlJW1tNyAgXG5cdCIgLy8gYWRkIFBhZXRoIHByZWRpY3RvciArIFJhdyh4KQotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCi0gICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyByZWFkIGE9UmF3KHgtYnBwKSBieXRlcwotCi0gICAgICAgICAgICAvLyBkbyBzZWNvbmQgc2V0IG9mIDQgYnl0ZXMKLSAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgotICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAotICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCi0gICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCi0gICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKLSAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCi0gICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIG5leHQgbG9vcAotICAgICAgICAgICAgImpiIHBhZXRoXzhscCAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCi0gICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQotCi0gICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpL3JzaSAgICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4Ci0gICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0Ci0gICAgICB7Ci0gICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECi0jaWYgZGVmaW5lZChQTkdfREVCVUcpCi0gICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKLSAgICAgICAgICAgInBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkpXG4iKTsKLSNlbmRpZgotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgIH0gLy8gZW5kIHN3aXRjaCAoYnBwKQotCi0gICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAvLyBNTVggYWNjZWxlcmF0aW9uIGNvbXBsZXRlOyBub3cgZG8gY2xlYW4tdXAKLSAgICAgIC8vIGNoZWNrIGlmIGFueSByZW1haW5pbmcgYnl0ZXMgbGVmdCB0byBkZWNvZGUKLS8vcHJlICJtb3ZsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgXG5cdCIKLS8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgXG5cdCIKLSAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLSAgICAgICJqbmIgcGFldGhfZW5kICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgU0FWRV9lYnAKLQotLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0vL3ByZSAibW92bCBwcmV2X3JvdywgJTEgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKLSAgICAgIC8vIGRvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAibW92bCAlJWVheCwgJSVlYnAgICAgICAgICAgIFxuXHQiCi0vL3ByZSAic3VibCBicHAsICUlZWJwICAgICAgICAgICAgIFxuXHQiIC8vIChicHAgaXMgcHJlbG9hZGVkIGludG8gZWN4KQotICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBlYXggLSBicHAKLSAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggYmVsb3cKLQotICAgICAgU0FWRV9HT1RfZWJ4Ci0gICAgICBTQVZFX3IxMV9yMTJfcjEzCi0KLSAgICJwYWV0aF9scDI6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGJsCi0gICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICJzdWJsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIFNhdmUgcGF2IGZvciBsYXRlciB1c2UKLSAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYmwKLSAgICAgICJzdWJsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAibW92bCAlJWVieCwgJSVlY3ggICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC0gYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgotICAgICAgLy8gcGMgPSBhYnMocGN2KQotICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgotICAgICAgImp6IHBhZXRoX3BjYTIgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAicGFldGhfcGNhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQotICAgICAgLy8gcGIgPSBhYnMocGJ2KQotICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgotICAgICAgImp6IHBhZXRoX3BiYTIgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm5lZ2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAicGFldGhfcGJhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92bCAlJWVjeCwgIiBwYl9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQotICAgICAgLy8gcGEgPSBhYnMocGF2KQotICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgotICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVieCAgICBcblx0IgotICAgICAgImp6IHBhZXRoX3BhYTIgICAgICAgICAgICAgICBcblx0IgotICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotCi0gICAicGFldGhfcGFhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQotICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgotICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgotICAgICAgImpuYSBwYWV0aF9hYmIyICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGEgPiBwYjsgbm93IHRlc3QgaWYgcGIgPD0gcGMKLSAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKLSAgICAgICJqbmEgcGFldGhfYmJjMiAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBiID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKLQotICAgInBhZXRoX2JiYzI6ICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKLSAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCi0gICAgICAiam1wIHBhZXRoX3BhZXRoMiAgICAgICAgICAgIFxuXHQiCi0KLSAgICJwYWV0aF9hYmIyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwotICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgotICAgICAgImpuYSBwYWV0aF9hYmMyICAgICAgICAgICAgICBcblx0IgotICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgImptcCBwYWV0aF9wYWV0aDIgICAgICAgICAgICBcblx0IgotCi0gICAicGFldGhfYWJjMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCi0gICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCi0KLSAgICJwYWV0aF9wYWV0aDI6ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJpbmNsICUlZWJwICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2Ci0gICAgICAiYWRkYiAlJWNsLCAtMSglMiwiIFBBWCAiLCkgIFxuXHQiCi0gICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGFnYWluc3QgRnVsbExlbmd0aAotICAgICAgImpiIHBhZXRoX2xwMiAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICBSRVNUT1JFX3IxMV9yMTJfcjEzCi0gICAgICBSRVNUT1JFX0dPVF9lYngKLSAgICAgIFJFU1RPUkVfZWJwCi0KLSAgICJwYWV0aF9lbmQ6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5kIE1NWDsgcHJlcCBmb3IgcG9zcy4gRlAgaW5zdHJzLgotCi0gICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCi0gICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAotICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKLSAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKLQotICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCi0gICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCi0gICAgICAgICIzIiAoTU1YTGVuZ3RoKSwgICAvLyBlYXgKLSAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAotCi0gICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICBDTE9CQkVSX0dPVF9lYngKLSAgICAgICAgQ0xPQl9DT01NQV9lYnhfZWJwCi0gICAgICAgIENMT0JCRVJfZWJwCi0gICAgICAgIENMT0JfQ09NTUFfZWJYX3IxWAotICAgICAgICBDTE9CQkVSX3IxMV9yMTJfcjEzCi0gICApOwotCi19IC8qIGVuZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpICovCi0KLSNlbmRpZiAvLyBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCB8fCBQTkdfVEhSRUFEX1VOU0FGRV9PSwotI2VuZGlmIC8qIFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVEICovCi0KLQotCi0KLSNpZiBkZWZpbmVkKFBOR19NTVhfUkVBRF9GSUxURVJfU1VCX1NVUFBPUlRFRCkKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIFMgVSBCICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyBPcHRpbWl6ZWQgY29kZSBmb3IgUE5HIFN1YiBmaWx0ZXIgZGVjb2RlcgotCi1zdGF0aWMgdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdykKLXsKLSAgIHVuc2lnbmVkIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsgIC8vIHBuZ191aW50XzMyIGlzIGFjdHVhbGx5IDY0LWJpdCBvbiB4ODYtNjQKLSAgIGludCBicHA7Ci0gICBpbnQgZHVtbXlfdmFsdWVfYTsKLSAgIGludCBkdW1teV92YWx1ZV9jOwotICAgaW50IGR1bW15X3ZhbHVlX2Q7Ci0gICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKLSAgIGludCBkaWZmOyAvLyAgICAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwotCi0gICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAotICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCi0gICAgIC8vICh3aHkgZG8gd2Ugc3VidHJhY3Qgb2ZmIGJwcD8gIG5vdCBzbyBpbiBhdmcgb3IgcGFldGguLi4pCi0KLSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgIFNBVkVfcjE1Ci0gICAgICBTQVZFX2VicAotLy9wcmUgIm1vdmwgcm93LCAlMSAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0gICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0vL3ByZSAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCi0vL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KLSAgICAgIFNBVkVfRnVsbExlbmd0aCAgICAgICAgICAgICAgICAgICAgLy8gLi4uYnV0IHN0b3JlIGZvciBsYXRlciB1c2UKLQotICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgotCi0gICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQgKG5vdGU6ICBjb21wdXRpbmcgX2RlbHRhXyBvZiB0d28gcG9pbnRlcnMsCi0gICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlYnAgaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKLSAgICAgICJtb3YgICUxLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKLSAgICAgICJhZGQgICQweGYsICIgUEJQICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKLS8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCi0gICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAic3ViICAlMSwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KLSAgICAgICJqeiBzdWJfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYXggYXQgYWxpZ25tZW50Ci0KLSAgICJzdWJfbHAxOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZml4IGFsaWdubWVudAotICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCi0gICAgICAiYWRkYiAlJWNsLCAoJTEsIiBQQVggIiwpICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAiamIgc3ViX2xwMSAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICJzdWJfZ286ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgIFJFU1RPUkVfRnVsbExlbmd0aCAiJSVlY3ggICAgXG5cdCIgLy8gRnVsbExlbmd0aCAtPiBlY3gKLSAgICAgICJtb3ZsICUlZWN4LCAlJWVkeCAgICAgICAgICAgXG5cdCIKLSAgICAgICJzdWJsICUlZWF4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAotICAgICAgImFuZGwgJDB4MDAwMDAwMDcsICUlZWR4ICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA4Ci0gICAgICAic3VibCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAotLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgotICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKLSAgICAgIFJFU1RPUkVfZWJwICAgICAgICAgICAgICAgICAgICAgICAgLy8gIChjb3VsZCBzd2FwIGVicCBhbmQgZWN4IGZ1bmN0aW9ucywKLSAgICAgIFJFU1RPUkVfcjE1ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ1dCAlJWNsIGlzc3Vlcy4uLikKLQotICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgICAvLyAwICAgICAvLyBvdXRwdXQgcmVncwotICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCi0gICAgICAgICI9YSIgKGRpZmYpICAgICAgICAgICAgIC8vIDIKLQotICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAvLyBpbnB1dCByZWdzCi0gICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQotICAgICAgICAiMiIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKLQotICAgICAgOiAiJWVzaSIsICIlZWR4IiAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICAgICAgX0NMT0JCRVJfcjE1Ci0gICAgICAgIF9DTE9CQkVSX2VicAotICAgKTsKLQotICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93Ci0gICBzd2l0Y2ggKGJwcCkKLSAgIHsKLSAgICAgIGNhc2UgMzoKLSAgICAgIHsKLS8vICAgICAgIF9TaGlmdEJwcCA9IDI0OyAgICAgICAvLyA9PSAzICogOAotLy8gICAgICAgX1NoaWZ0UmVtICA9IDQwOyAgICAgIC8vID09IDY0IC0gMjQKLQotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAvLyBsb2FkIChmb3JtZXIpIF9BY3RpdmVNYXNrIGZvciAybmQgYWN0aXZlIGJ5dGUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICIgQU1BU0syXzNfMyAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazJfM18zCi0gICAgICAgICAgICBSRVNUT1JFX3JicAotCi0vLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwotLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCi0gICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTYgICAgICAgICAgICBcblx0IgotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW02ICAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTYgdG8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzcmQgYWN0aXZlIGJ5dGUgZ3JvdXAKLSAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQRFggIiwpLCAlJW1tMSAgXG5cdCIKLQotICAgICAgICAgInN1Yl8zbHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0Ci0gICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyAgYnBwIGJ5dGVzIChubyBuZWVkIGZvciBtYXNrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKLSAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAybmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKLSAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDNyZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIHVwZGF0ZWQgUmF3cyB0byBhcnJheQotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gcHJlcCAxc3QgYWRkIGF0IHRvcCBvZiBsb29wCi0gICAgICAgICAgICAiamIgc3ViXzNscCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKLSAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCi0KLSAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAotICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKLQotI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCi0gICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tNiIsICIlbW03IiAgICAvLyBjbG9iYmVyIGxpc3QKLSNlbmRpZgotICAgICAgICAgKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOyAgLy8gZW5kIDMgYnBwCi0KLSAgICAgIGNhc2UgNDogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA2IGJwcCBjYXNlIHZpYSBfU2hpZnRCcHAgYW5kIF9TaGlmdFJlbSwKLSAgICAgIHsgICAgICAgICAvLyBidXQgNjQtYml0IFBJQy8uc28gcHJvYmxlbXMgKGNvdWxkIHN0aWxsIHNoYXJlLCBtb3ZpbmcgdmFycwotICAgICAgICAgICAgICAgIC8vIGludG8gdW51c2VkIE1NWCByZWdzIHZpYSBlY3gvZWR4LCBidXQga2x1ZGd5KQotLy8gICAgICAgX1NoaWZ0QnBwID0gYnBwIDw8IDM7ICAgICAgICAvLyAzMiAocHNsbHEpCi0vLyAgICAgICBfU2hpZnRSZW0gPSA2NCAtIF9TaGlmdEJwcDsgIC8vIDMyIChwc3JscSkKLQotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLS8vIG5vdHVzZWQgICJtb3YgICUxLCAiIFBTSSAiICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKLQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgotCi0gICAgICAgICAic3ViXzRscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKLSAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgc2hpZnQgY2xlYXJzIGluYWN0aXZlIGJ5dGVzKQotICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgInBzbGxxICQzMiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgImFkZGwgJDgsICUlZWR4ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5Ci0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKLSAgICAgICAgICAgICJqYiBzdWJfNGxwICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQotICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKLQotICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4Ci0gICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAotCi0jaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAotI2VuZGlmCi0gICAgICAgICApOwotICAgICAgfQotICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKLQotICAgICAgY2FzZSAxOgotICAgICAgewotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotLy8gcHJlbG9hZCAgImNtcGwgRnVsbExlbmd0aCwgJSVlZHggICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJqbmIgc3ViXzFlbmQgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci0vLyBpcnJlbC4gICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gKGFjdHVhbGx5IGJ1ZyB3aXRoIHByZWxvYWQpCi0vLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAotCi0gICAgICAgICAic3ViXzFscDogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZiICgiIFBTSSAiLCIgUERYICIsKSwgJSVjbCBcblx0IgotICAgICAgICAgICAgImFkZGIgJSVjbCwgKCUxLCIgUERYICIsKSAgICAgIFxuXHQiCi0gICAgICAgICAgICAiaW5jbCAlJWVkeCAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHdpdGggRnVsbExlbmd0aAotICAgICAgICAgICAgImpiIHN1Yl8xbHAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICJzdWJfMWVuZDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKLSAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgotICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSAgICAvLyAzCi0KLSAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCi0gICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAotICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKLQotICAgICAgICAgICAgOiAiJWVzaSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0gICAgICAgICApOwotICAgICAgfQotICAgICAgcmV0dXJuOyAgLy8gZW5kIDEgYnBwIChieXBhc3NpbmcgY2xlYW51cCBibG9jayEpCi0KLSAgICAgIGNhc2UgMjoKLSAgICAgIHsKLS8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgICAgICAvLyA9PSAyICogOAotLy8gICAgICAgX1NoaWZ0UmVtID0gNDg7ICAgICAgIC8vID09IDY0IC0gMTYKLQotICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgTE9BRF9HT1RfcmJwCi0gICAgICAgICAgICAvLyBsb2FkIChmb3JtZXIpIF9BY3RpdmVNYXNrIGZvciAybmQgYWN0aXZlIGJ5dGUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICIgQU1BU0s0XzJfMiAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazRfMl8yCi0gICAgICAgICAgICBSRVNUT1JFX3JicAotLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgIFxuXHQiCi0vLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0gICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCi0vLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwotICAgICAgICAgICAgIm1vdnEgJSVtbTYsICUlbW01ICAgICAgICAgICAgXG5cdCIKLS8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAotICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTUgICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBtYXNrIGluIG1tNSB0byBjb3ZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDR0aCBhY3RpdmUgYnl0ZSBncm91cAotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgotCi0gICAgICAgICAic3ViXzJscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKLSAgICAgICAgICAgICJwc3JscSAkNDgsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgc2hpZnQgY2xlYXJzIGluYWN0aXZlIGJ5dGVzKQotICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCi0gICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKLSAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIC8vIGFkZCAzcmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQotICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgM3JkIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gYWRkIDR0aCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSA0dGggYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAotICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5Ci0gICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBwcmVwIDFzdCBhZGQgYXQgdG9wIG9mIGxvb3AKLSAgICAgICAgICAgICJqYiBzdWJfMmxwICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQotICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKLQotICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4Ci0gICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAotCi0jaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW01IiwgIiVtbTYiICAgIC8vIGNsb2JiZXIgbGlzdAotICAgICAgICAgICAgLCAiJW1tNyIKLSNlbmRpZgotICAgICAgICAgKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOyAgLy8gZW5kIDIgYnBwCi0KLSAgICAgIGNhc2UgNjogICAvLyBmb3JtZXJseSBzaGFyZWQgd2l0aCA0IGJwcCBjYXNlIChzZWUgY29tbWVudHMgdGhlcmUpCi0gICAgICB7Ci0vLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKLS8vICAgICAgIF9TaGlmdFJlbSA9IDY0IC0gX1NoaWZ0QnBwOyAgLy8gMTYgKHBzcmxxKQotCi0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0vLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0vLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgotLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAotCi0gICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTEgIFxuXHQiCi0KLSAgICAgICAgICJzdWJfNmxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAotICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCi0gICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5Ci0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSB1cGRhdGVkIFJhd3MgdG8gYXJyYXkKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAotICAgICAgICAgICAgImpiIHN1Yl82bHAgICAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQotICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCi0gICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDIKLSAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwotCi0gICAgICAgICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCi0gICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQotICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKLSAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgICAgICAgLy8gZWF4Ci0KLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0Ci0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAotCi0gICAgICBjYXNlIDg6Ci0gICAgICB7Ci0gICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0vLyBwcmVsb2FkICAibW92ICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0vLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgotLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAotLy8gcHJlbG9hZCAgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICAgXG5cdCIKLQotICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW03ICBcblx0IgotICAgICAgICAgICAgIm1vdmwgJSVlYXgsICUlZXNpICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiBNTVhMZW5ndGggLT4gZXNpCi0gICAgICAgICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlc2kgICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAotCi0gICAgICAgICAic3ViXzhscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDFzdCA4IGJ5dGVzCi0gICAgICAgICAgICAicGFkZGIgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgIm1vdnEgOCglMSwiIFBEWCAiLCksICUlbW0xICAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDJuZCA4IGJ5dGVzCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgKCUxLCIgUERYICIsKSAgICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDFzdCA4IGJ5dGVzCi0KLSAgICAgICAgICAgIC8vIE5vdyBtbTAgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgZm9yIHRoZSAybmQgZ3JvdXAgb2YgOCBieXRlcy4KLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSByZXBlYXRlZCBmb3IgZWFjaCBncm91cCBvZiA4IGJ5dGVzIHdpdGggdGhlIDh0aAotICAgICAgICAgICAgLy8gZ3JvdXAgYmVpbmcgdXNlZCBhcyB0aGUgUmF3KHgtYnBwKSBmb3IgdGhlIDFzdCBncm91cCBvZiB0aGUKLSAgICAgICAgICAgIC8vIG5leHQgbG9vcC4KLQotICAgICAgICAgICAgInBhZGRiICUlbW0wLCAlJW1tMSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDE2KCUxLCIgUERYICIsKSwgJSVtbTIgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAzcmQgOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTEsIiBQRFggIiwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAybmQgOCBieXRlcwotICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDI0KCUxLCIgUERYICIsKSwgJSVtbTMgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA0dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAzcmQgOCBieXRlcwotICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMyAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDMyKCUxLCIgUERYICIsKSwgJSVtbTQgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA1dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDI0KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA0dGggOCBieXRlcwotICAgICAgICAgICAgInBhZGRiICUlbW0zLCAlJW1tNCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDQwKCUxLCIgUERYICIsKSwgJSVtbTUgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA2dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDMyKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA1dGggOCBieXRlcwotICAgICAgICAgICAgInBhZGRiICUlbW00LCAlJW1tNSAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDQ4KCUxLCIgUERYICIsKSwgJSVtbTYgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA3dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTUsIDQwKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA2dGggOCBieXRlcwotICAgICAgICAgICAgInBhZGRiICUlbW01LCAlJW1tNiAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxIDU2KCUxLCIgUERYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciA4dGggOCBieXRlcwotICAgICAgICAgICAgIm1vdnEgJSVtbTYsIDQ4KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA3dGggOCBieXRlcwotICAgICAgICAgICAgImFkZGwgJDY0LCAlJWVkeCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJwYWRkYiAlJW1tNiwgJSVtbTcgICAgICAgICAgIFxuXHQiCi0gICAgICAgICAgICAiY21wbCAlJWVzaSwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjbXAgdG8gYnl0ZXMgb3ZlciBtdWx0IG9mIDY0Ci0gICAgICAgICAgICAibW92cSAlJW1tNywgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDh0aCA4IGJ5dGVzCi0gICAgICAgICAgICAiamIgc3ViXzhscCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAotICAgICAgICAgICAgImpuYiBzdWJfOGx0OCAgICAgICAgICAgICAgICAgXG5cdCIKLQotICAgICAgICAgInN1Yl84bHBBOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCi0gICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgotICAgICAgICAgICAgInBhZGRiICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKLSAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIGNvbXBhcmUgdG8gTU1YTGVuZ3RoCi0gICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyAtOCB0byBvZmZzZXQgZWFybHkgYWRkbCBlZHgKLSAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgY2FsY3VsYXRlZCBSYXcoeCkgZGF0YQotICAgICAgICAgICAgImpiIHN1Yl84bHBBICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRvIG1tNyB0byBiZSBuZXcgUmF3KHgtYnBwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGZvciBuZXh0IGxvb3AKLSAgICAgICAgICJzdWJfOGx0ODogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQotICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCi0gICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKLQotICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwotICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKLSAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgICAgICAgLy8gZWR4Ci0gICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAotCi0gICAgICAgICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQotICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKLSAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCi0jZW5kaWYKLSAgICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgIT0gMSwyLDMsNCw2LDg6ICBkb2Vzbid0IGV4aXN0Ci0gICAgICB7Ci0gICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECi0jaWYgZGVmaW5lZChQTkdfREVCVUcpCi0gICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKLSAgICAgICAgICAgInBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpKVxuIik7Ci0jZW5kaWYKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICB9IC8vIGVuZCBzd2l0Y2ggKGJwcCkKLQotICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotLy9wcmUgIm1vdmwgTU1YTGVuZ3RoLCAlJWVheCAgICAgICAgIFxuXHQiCi0vL3ByZSAibW92ICByb3csICUxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQotLy9wcmUgImNtcGwgRnVsbExlbmd0aCwgJSVlYXggICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgICAgXG5cdCIKLSAgICAgICJqbmIgc3ViX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLS8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgotICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCi0gICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKLQotICAgInN1Yl9scDI6ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAoIiBQU0kgIiwiIFBBWCAiLCksICUlY2wgXG5cdCIKLSAgICAgICJhZGRiICUlY2wsICglMSwiIFBBWCAiLCkgICAgICBcblx0IgotICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgICAgXG5cdCIgLy8gRnVsbExlbmd0aAotICAgICAgImpiIHN1Yl9scDIgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICJzdWJfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVggaW5zdHJ1Y3Rpb25zCi0KLSAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKLSAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQotICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAvLyAyCi0gICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpICAgIC8vIDMKLQotICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwotICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKLSAgICAgICAgIjIiIChNTVhMZW5ndGgpLCAgICAgICAgLy8gZWF4Ci0gICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAgICAgIC8vIGVkeAotCi0gICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKLSAgICk7Ci0KLX0gLy8gZW5kIG9mIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpCi0KLSNlbmRpZiAvKiBQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQgKi8KLQotCi0KLQotI2lmIGRlZmluZWQoUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQpCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgUCBOIEcgXyBSIEUgQSBEIF8gRiBJIEwgVCBFIFIgXyBSIE8gVyBfIE0gTSBYIF8gVSBQICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBVcCBmaWx0ZXIgZGVjb2RlcgotCi1zdGF0aWMgdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHByZXZfcm93KQotewotICAgdW5zaWduZWQgbGVuOyAgICAgICAgLy8gcG5nX3VpbnRfMzIgaXMgYWN0dWFsbHkgNjQtYml0IG9uIHg4Ni02NAotICAgaW50IGR1bW15X3ZhbHVlX2Q7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgMyAoZHgpIHdhcyBzcGlsbGVkJyBlcnJvcgotICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX1M7Ci0gICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfRDsKLQotICAgbGVuID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgotCi0gICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICBTQVZFX0dPVF9lYngKLS8vcHJlICJtb3YgIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQotLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi0KLSAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKLQotICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50IChub3RlOiAgY29tcHV0aW5nIF9kZWx0YV8gb2YgdHdvIHBvaW50ZXJzLAotICAgICAgLy8gc28gaGVyZWFmdGVyICUlZWN4IGlzIHN1ZmZpY2llbnQgZXZlbiBvbiA2NC1iaXQpCi0gICAgICAibW92ICAlMiwgIiBQQ1ggIiAgICAgICAgICAgIFxuXHQiIC8vIHRha2Ugc3RhcnQgb2Ygcm93Ci0gICAgICAiYWRkICAkMHg3LCAiIFBDWCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQotLy8gICAgImFuZGwgJDB4ZmZmZmZmZjgsICUlZWN4ICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeSAoMzItYml0ISkKLSAgICAgIENMRUFSX0JPVFRPTV8zX0JJVFMgIFBDWCAgICAiXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICJzdWIgICUyLCAiIFBDWCAiICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3Qgcm93IHB0ciBhZ2FpbiA9PiBlYnAgPQotICAgICAgImp6IHVwX2dvICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgdGFyZ2V0IHZhbHVlIG9mIGVjeCBhdCBhbGlnbm1lbnQKLQotICAgInVwX2xwMTogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBmaXggYWxpZ25tZW50Ci0gICAgICAibW92YiAoJTIsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiYWRkYiAoJTEsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvCi0gICAgICAiamIgdXBfbHAxICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgaW5jbCBlYngKLQotICAgInVwX2dvOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgotLy9wcmUgIm1vdmwgbGVuLCAlJWVkeCAgICAgICAgICAgICBcblx0IgotICAgICAgIm1vdmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IgotICAgICAgInN1YmwgJSVlYngsICUlZWR4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4Ci0gICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0Ci0gICAgICAic3VibCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHN1YiBvdmVyLWJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi0KLSAgICAgIC8vIHVucm9sbGVkIGxvb3AgLSB1c2UgYWxsIE1NWCByZWdpc3RlcnMgYW5kIGludGVybGVhdmUgdG8gcmVkdWNlCi0gICAgICAvLyBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyAobG9vcHMpIGFuZCByZWR1Y2UgcGFydGlhbCBzdGFsbHMKLSAgICJ1cF9sb29wOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxICglMSwiIFBCWCAiLCksICUlbW0xICAgXG5cdCIKLSAgICAgICJtb3ZxICglMiwiIFBCWCAiLCksICUlbW0wICAgXG5cdCIKLSAgICAgICJtb3ZxIDgoJTEsIiBQQlggIiwpLCAlJW1tMyAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDgoJTIsIiBQQlggIiwpLCAlJW1tMiAgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0wLCAoJTIsIiBQQlggIiwpICAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDE2KCUxLCIgUEJYICIsKSwgJSVtbTUgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0yLCA4KCUyLCIgUEJYICIsKSAgXG5cdCIKLSAgICAgICJtb3ZxIDE2KCUyLCIgUEJYICIsKSwgJSVtbTQgXG5cdCIKLSAgICAgICJtb3ZxIDI0KCUxLCIgUEJYICIsKSwgJSVtbTcgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDI0KCUyLCIgUEJYICIsKSwgJSVtbTYgXG5cdCIKLSAgICAgICJtb3ZxICUlbW00LCAxNiglMiwiIFBCWCAiLCkgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDMyKCUxLCIgUEJYICIsKSwgJSVtbTEgXG5cdCIKLSAgICAgICJtb3ZxICUlbW02LCAyNCglMiwiIFBCWCAiLCkgXG5cdCIKLSAgICAgICJtb3ZxIDMyKCUyLCIgUEJYICIsKSwgJSVtbTAgXG5cdCIKLSAgICAgICJtb3ZxIDQwKCUxLCIgUEJYICIsKSwgJSVtbTMgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDQwKCUyLCIgUEJYICIsKSwgJSVtbTIgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0wLCAzMiglMiwiIFBCWCAiLCkgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDQ4KCUxLCIgUEJYICIsKSwgJSVtbTUgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0yLCA0MCglMiwiIFBCWCAiLCkgXG5cdCIKLSAgICAgICJtb3ZxIDQ4KCUyLCIgUEJYICIsKSwgJSVtbTQgXG5cdCIKLSAgICAgICJtb3ZxIDU2KCUxLCIgUEJYICIsKSwgJSVtbTcgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tNSwgJSVtbTQgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxIDU2KCUyLCIgUEJYICIsKSwgJSVtbTYgXG5cdCIKLSAgICAgICJtb3ZxICUlbW00LCA0OCglMiwiIFBCWCAiLCkgXG5cdCIKLSAgICAgICJhZGRsICQ2NCwgJSVlYnggICAgICAgICAgICAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKLSAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxICUlbW02LCAtOCglMiwiIFBCWCAiLCkgXG5cdCIgLy8gKCs1Niltb3ZxIGRvZXMgbm90IGFmZmVjdCBmbGFnczsKLSAgICAgICJqYiB1cF9sb29wICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIC04IHRvIG9mZnNldCBhZGRsIGVieAotCi0gICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAotICAgICAgImp6IHVwX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAgICAiY21wbCAkOCwgJSVlZHggICAgICAgICAgICAgIFxuXHQiIC8vIHRlc3QgZm9yIGxlc3MgdGhhbiA4IGJ5dGVzCi0gICAgICAiamIgdXBfbHQ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBbYWRkZWQgYnkgbGNyZWV2ZSBhdCBuZXRpbnMubmV0XQotCi0gICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiCi0gICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICJzdWJsICUlZWR4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gZHJvcCBvdmVyLWJ5dGVzIGZyb20gbGVuZ3RoCi0gICAgICAianogdXBfbHQ4ICAgICAgICAgICAgICAgICAgIFxuXHQiCi0KLSAgICJ1cF9scEE6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gdXNlIE1NWCByZWdzIHRvIHVwZGF0ZSA4IGJ5dGVzIHNpbS4KLSAgICAgICJtb3ZxICglMSwiIFBCWCAiLCksICUlbW0xICAgXG5cdCIKLSAgICAgICJtb3ZxICglMiwiIFBCWCAiLCksICUlbW0wICAgXG5cdCIKLSAgICAgICJhZGRsICQ4LCAlJWVieCAgICAgICAgICAgICAgXG5cdCIKLSAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKLSAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKLSAgICAgICJtb3ZxICUlbW0wLCAtOCglMiwiIFBCWCAiLCkgXG5cdCIgLy8gbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC04IHRvCi0gICAgICAiamIgdXBfbHBBICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgYWRkIGVieAotICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgOAotICAgICAgImp6IHVwX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgotCi0gICAidXBfbHQ4OiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCi0gICAgICAiYWRkbCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIG1vdmUgb3ZlciBieXRlIGNvdW50IGludG8gY291bnRlcgotCi0gICAidXBfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHVzZSB4ODYgcmVncyBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAibW92YiAoJTIsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiYWRkYiAoJTEsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCi0gICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCi0gICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvCi0gICAgICAiamIgdXBfbHAyICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBvZmZzZXQgaW5jIGVieAotCi0gICAidXBfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi0gICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGNvbnZlcnNpb24gb2YgZmlsdGVyZWQgcm93IGNvbXBsZXRlCi0gICAgICBSRVNUT1JFX0dPVF9lYngKLQotICAgICAgOiAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAwICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCi0gICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgIC8vIDEKLSAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMgotCi0gICAgICA6ICIwIiAobGVuKSwgICAgICAgICAgICAgIC8vIGVkeCAgIC8vIGlucHV0IHJlZ3MKLSAgICAgICAgIjEiIChwcmV2X3JvdyksICAgICAgICAgLy8gZXNpCi0gICAgICAgICIyIiAocm93KSAgICAgICAgICAgICAgIC8vIGVkaQotCi0gICAgICA6ICIlZWF4IiwgIiVlY3giICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdCAobm8gaW5wdXQgcmVncyEpCi0gICAgICAgIF9DTE9CQkVSX0dPVF9lYngKLSNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKLSAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiCi0gICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgotI2VuZGlmCi0gICApOwotCi19IC8vIGVuZCBvZiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpCi0KLSNlbmRpZiAvKiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRCAqLwotCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qIE9wdGltaXplZCBwbmdfcmVhZF9maWx0ZXJfcm93IHJvdXRpbmVzICovCi0KLXZvaWQgLyogUFJJVkFURSAqLwotcG5nX3JlYWRfZmlsdGVyX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAKLSAgIHJvdywgcG5nX2J5dGVwIHByZXZfcm93LCBpbnQgZmlsdGVyKQotewotI2lmIGRlZmluZWQoUE5HX0RFQlVHKQotICAgY2hhciBmaWx0bmFtZVsxMF07Ci0jZW5kaWYKLQotICAgaWYgKF9tbXhfc3VwcG9ydGVkID09IDIpIHsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCi0gICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwotI2VuZGlmCi0gICAgICAgcG5nX21teF9zdXBwb3J0KCk7Ci0gICB9Ci0KLSNpZiBkZWZpbmVkKFBOR19ERUJVRykKLSAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3JlYWRfZmlsdGVyX3JvdyAocG5nZ2NjcmQuYylcbiIpOwotICAgc3dpdGNoIChmaWx0ZXIpCi0gICB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAibm9uZSIpOwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMToKLSAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJzdWItJXMiLAotI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfU1VCX1NVUFBPUlRFRAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQikgJiYKLSAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKLSAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCi0jZWxzZQotICAgICAgICAgICBfbW14X3N1cHBvcnRlZAotI2VuZGlmCi0gICAgICAgICAgID8gIk1NWCIgOgotI2VuZGlmCi0gICAgICAgICAgICJDIik7Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAyOgotICAgICAgICAgcG5nX3NucHJpbnRmKGZpbHRuYW1lLCAxMCwgInVwLSVzIiwKLSNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKSAmJgotICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgotICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKLSNlbHNlCi0gICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCi0jZW5kaWYKLSAgICAgICAgICAgPyAiTU1YIiA6Ci0jZW5kaWYKLSAgICAgICAgICAgIkMiKTsKLSAgICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDM6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAiYXZnLSVzIiwKLSNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX0FWR19TVVBQT1JURUQKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpICYmCi0gICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCi0gICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQotI2Vsc2UKLSAgICAgICAgICAgX21teF9zdXBwb3J0ZWQKLSNlbmRpZgotICAgICAgICAgICA/ICJNTVgiIDoKLSNlbmRpZgotICAgICAgICAgICAiQyIpOwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgNDoKLSAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJwYWV0aC0lcyIsCi0jaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQKLSNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIKSAmJgotICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgotICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKLSNlbHNlCi0gICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCi0jZW5kaWYKLSAgICAgICAgICAgPyAiTU1YIiA6Ci0jZW5kaWYgLyogUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgfHwgUE5HX1RIUkVBRF9VTlNBRkVfT0sgKi8KLSNlbmRpZgotICAgICAgICAgICAiQyIpOwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAidW5rbm93biIpOwotICAgICAgICAgYnJlYWs7Ci0gICB9Ci0gICBwbmdfZGVidWcyKDIsICJyb3dfbnVtYmVyPSVsZCwgJXMsICIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbHRuYW1lKTsKLSAgIC8vcG5nX2RlYnVnMSgwLCAicG5nX3B0cj0lMTBwLCAiLCBwbmdfcHRyKTsKLSAgIC8vcG5nX2RlYnVnMSgwLCAiYXNtX2ZsYWdzPTB4JTA4bHgsICIsIHBuZ19wdHItPmFzbV9mbGFncyk7Ci0gICBwbmdfZGVidWcxKDAsICJyb3c9JTEwcCwgIiwgcm93KTsKLSAgIHBuZ19kZWJ1ZzIoMCwgInBpeGRlcHRoPSVkLCBieXRlcz0lZCwgIiwgKGludClyb3dfaW5mby0+cGl4ZWxfZGVwdGgsCi0gICAgICAoaW50KSgocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMykpOwotICAgcG5nX2RlYnVnMSgwLCAicm93Ynl0ZXM9JWxkXG4iLCByb3dfaW5mby0+cm93Ynl0ZXMpOwotI2VuZGlmIC8qIFBOR19ERUJVRyAqLwotCi0gICBzd2l0Y2ggKGZpbHRlcikKLSAgIHsKLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9OT05FOgotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6Ci0jaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVECi0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQikgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKLSNlbHNlCi0gICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3cgKyBicHA7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IGJwcDsgaSA8IGlzdG9wOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKmxwKyspKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgcnArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3N1YiAqLwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9VUDoKLSNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKLSNlbHNlCi0gICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKLSAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBwcCA9IHByZXZfcm93OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqcHArKykpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfdXAgKi8KLSAgICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfQVZHOgotI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCi0jZWxzZQotICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwotICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzIC0gYnBwOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsKLSAgICAgICAgICAgICAgICAgICgoaW50KSgqcHArKykgPj4gMSkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwotICAgICAgICAgICAgICAgICAgKChpbnQpKCpwcCsrICsgKmxwKyspID4+IDEpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgcnArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX2F2ZyAqLwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9QQUVUSDoKLSNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1BBRVRIX1NVUFBPUlRFRAotI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCi0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQotI2Vsc2UKLSAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKLSNlbmRpZgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LICovCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBjcCA9IHByZXZfcm93OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGJwcDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpwcCsrKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKSAgIC8qIHVzZSBsZWZ0b3ZlciBycCxwcCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaW50IGEsIGIsIGMsIHBhLCBwYiwgcGMsIHA7Ci0KLSAgICAgICAgICAgICAgIGEgPSAqbHArKzsKLSAgICAgICAgICAgICAgIGIgPSAqcHArKzsKLSAgICAgICAgICAgICAgIGMgPSAqY3ArKzsKLQotICAgICAgICAgICAgICAgcCA9IGIgLSBjOwotICAgICAgICAgICAgICAgcGMgPSBhIC0gYzsKLQotI2lmIGRlZmluZWQoUE5HX1VTRV9BQlMpCi0gICAgICAgICAgICAgICBwYSA9IGFicyhwKTsKLSAgICAgICAgICAgICAgIHBiID0gYWJzKHBjKTsKLSAgICAgICAgICAgICAgIHBjID0gYWJzKHAgKyBwYyk7Ci0jZWxzZQotICAgICAgICAgICAgICAgcGEgPSBwIDwgMCA/IC1wIDogcDsKLSAgICAgICAgICAgICAgIHBiID0gcGMgPCAwID8gLXBjIDogcGM7Ci0gICAgICAgICAgICAgICBwYyA9IChwICsgcGMpIDwgMCA/IC0ocCArIHBjKSA6IHAgKyBwYzsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKQotICAgICAgICAgICAgICAgICAgICAgcCA9IGE7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYiA8PSBwYykKLSAgICAgICAgICAgICAgICAgICAgIHAgPSBiOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgcCA9IGM7Ci0gICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgcCA9IChwYSA8PSBwYiAmJiBwYSA8PSBwYykgPyBhIDogKHBiIDw9IHBjKSA/IGIgOiBjOwotCi0gICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgcCkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9ICAvKiBlbmQgIVVzZU1NWF9wYWV0aCAqLwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiSWdub3JpbmcgYmFkIHJvdy1maWx0ZXIgdHlwZSIpOwotICAgICAgICAgKnJvdz0wOwotICAgICAgICAgYnJlYWs7Ci0gICB9Ci19Ci0KLSNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XICovCi0KLQotI2VuZGlmIC8qIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgJiYgUE5HX1VTRV9QTkdHQ0NSRCAqLwotI2VuZGlmIC8qIF9fR05VQ19fICovCisvKiBwbmdnY2NyZC5jIHdhcyByZW1vdmVkIGZyb20gbGlicG5nLTEuMi4yMC4gKi8KZGlmZiAtLWdpdCBhL3BuZ2dldC5jIGIvcG5nZ2V0LmMKaW5kZXggNzVkMmNhMC4uOWNmMWI4NCAxMDA2NDQKLS0tIGEvcG5nZ2V0LmMKKysrIGIvcG5nZ2V0LmMKQEAgLTg0MSw2ICs4NDEsNyBAQAogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X2FzbV9mbGFncyAocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKKyAgICAvKiBvYnNvbGV0ZSwgdG8gYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZy0xLjQuMCAqLwogI2lmZGVmIFBOR19NTVhfQ09ERV9TVVBQT1JURUQKICAgICByZXR1cm4gKHBuZ191aW50XzMyKShwbmdfcHRyPyBwbmdfcHRyLT5hc21fZmxhZ3MgOiAwTCk7CiAjZWxzZQpAQCAtODUyLDk0ICs4NTMsMzYgQEAKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9hc21fZmxhZ21hc2sgKGludCBmbGFnX3NlbGVjdCkKIHsKLSNpZmRlZiBQTkdfTU1YX0NPREVfU1VQUE9SVEVECi0gICAgcG5nX3VpbnRfMzIgc2V0dGFibGVfYXNtX2ZsYWdzID0gMDsKLQotICAgIGlmIChmbGFnX3NlbGVjdCAmIFBOR19TRUxFQ1RfUkVBRCkKLSAgICAgICAgc2V0dGFibGVfYXNtX2ZsYWdzIHw9Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSAgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCAgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCA7Ci0gICAgICAgICAgLyogbm8gbm9uLU1NWCBmbGFncyB5ZXQgKi8KLQotI2lmIDAKLSAgICAvKiBHUlI6ICBubyB3cml0ZS1mbGFncyB5ZXQsIGVpdGhlciwgYnV0IHNvbWVkYXkuLi4gKi8KLSAgICBpZiAoZmxhZ19zZWxlY3QgJiBQTkdfU0VMRUNUX1dSSVRFKQotICAgICAgICBzZXR0YWJsZV9hc21fZmxhZ3MgfD0KLSAgICAgICAgICBQTkdfQVNNX0ZMQUdfTU1YX1dSSVRFXyBbd2hhdGV2ZXJdIDsKLSNlbmRpZiAvKiAwICovCi0KLSAgICByZXR1cm4gc2V0dGFibGVfYXNtX2ZsYWdzOyAgLyogX3RoZW9yZXRpY2FsbHlfIHNldHRhYmxlIGNhcGFiaWxpdGllcyBvbmx5ICovCi0jZWxzZQotICAgIHJldHVybiAoMEwpOwotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KKyAgICAvKiBvYnNvbGV0ZSwgdG8gYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZy0xLjQuMCAqLworICAgIGZsYWdfc2VsZWN0PWZsYWdfc2VsZWN0OworICAgIHJldHVybiAwTDsKIH0KIAotCiAgICAgLyogR1JSOiAgY291bGQgYWRkIHRoaXM6ICAgJiYgZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAqLwogLyogdGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gbGlicG5nIDEuMi4wICovCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfbW14X2ZsYWdtYXNrIChpbnQgZmxhZ19zZWxlY3QsIGludCAqY29tcGlsZXJJRCkKIHsKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0gICAgcG5nX3VpbnRfMzIgc2V0dGFibGVfbW14X2ZsYWdzID0gMDsKLQotICAgIGlmIChmbGFnX3NlbGVjdCAmIFBOR19TRUxFQ1RfUkVBRCkKLSAgICAgICAgc2V0dGFibGVfbW14X2ZsYWdzIHw9Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSAgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCAgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcgICB8Ci0gICAgICAgICAgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCA7Ci0jaWYgMAotICAgIC8qIEdSUjogIG5vIE1NWCB3cml0ZSBzdXBwb3J0IHlldCwgYnV0IHNvbWVkYXkuLi4gKi8KLSAgICBpZiAoZmxhZ19zZWxlY3QgJiBQTkdfU0VMRUNUX1dSSVRFKQotICAgICAgICBzZXR0YWJsZV9tbXhfZmxhZ3MgfD0KLSAgICAgICAgICBQTkdfQVNNX0ZMQUdfTU1YX1dSSVRFXyBbd2hhdGV2ZXJdIDsKLSNlbmRpZiAvKiAwICovCi0KLSAgICBpZiAoY29tcGlsZXJJRCAhPSBOVUxMKSB7Ci0jaWZkZWYgUE5HX1VTRV9QTkdWQ1JECi0gICAgICAgICpjb21waWxlcklEID0gMTsgICAgLyogTVNWQyAqLwotI2Vsc2UKLSNpZmRlZiBQTkdfVVNFX1BOR0dDQ1JECi0gICAgICAgICpjb21waWxlcklEID0gMjsgICAgLyogZ2NjL2dhcyAqLwotI2Vsc2UKLSAgICAgICAgKmNvbXBpbGVySUQgPSAtMTsgICAvKiB1bmtub3duIChpLmUuLCBubyBhc20vTU1YIGNvZGUgY29tcGlsZWQpICovCi0jZW5kaWYKLSNlbmRpZgotICAgIH0KLQotICAgIHJldHVybiBzZXR0YWJsZV9tbXhfZmxhZ3M7ICAvKiBfdGhlb3JldGljYWxseV8gc2V0dGFibGUgY2FwYWJpbGl0aWVzIG9ubHkgKi8KLSNlbHNlCi0gICAgcmV0dXJuICgwTCk7Ci0jZW5kaWYgLyogP1BOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KKyAgICAvKiBvYnNvbGV0ZSwgdG8gYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZy0xLjQuMCAqLworICAgIGZsYWdfc2VsZWN0PWZsYWdfc2VsZWN0OworICAgICpjb21waWxlcklEID0gLTE7ICAgLyogdW5rbm93biAoaS5lLiwgbm8gYXNtL01NWCBjb2RlIGNvbXBpbGVkKSAqLworICAgIHJldHVybiAwTDsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gbGlicG5nIDEuMi4wICovCiBwbmdfYnl0ZSBQTkdBUEkKIHBuZ19nZXRfbW14X2JpdGRlcHRoX3RocmVzaG9sZCAocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0gICAgcmV0dXJuIChwbmdfYnl0ZSkocG5nX3B0cj8gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCA6IDApOwotI2Vsc2UKKyAgICAvKiBvYnNvbGV0ZSwgdG8gYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZy0xLjQuMCAqLwogICAgIHJldHVybiAocG5nX3B0cj8gMDogMCk7Ci0jZW5kaWYgLyogP1BOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KIH0KIAogLyogdGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gbGlicG5nIDEuMi4wICovCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfbW14X3Jvd2J5dGVzX3RocmVzaG9sZCAocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKLSNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpCi0gICAgcmV0dXJuIChwbmdfdWludF8zMikocG5nX3B0cj8gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCA6IDBMKTsKLSNlbHNlCisgICAgLyogb2Jzb2xldGUsIHRvIGJlIHJlbW92ZWQgZnJvbSBsaWJwbmctMS40LjAgKi8KICAgICByZXR1cm4gKHBuZ19wdHI/IDBMOiAwTCk7Ci0jZW5kaWYgLyogP1BOR19NTVhfQ09ERV9TVVBQT1JURUQgKi8KIH0KICNlbmRpZiAvKiA/UE5HXzFfMF9YICovCiAjZW5kaWYgLyogP1BOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3BuZ3ByZWFkLmMgYi9wbmdwcmVhZC5jCmluZGV4IDNkOTEwYzMuLmQ1OTUyYmIgMTAwNjQ0Ci0tLSBhL3BuZ3ByZWFkLmMKKysrIGIvcG5ncHJlYWQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncHJlYWQuYyAtIHJlYWQgYSBwbmcgZmlsZSBpbiBwdXNoIG1vZGUKICAqCi0gKiBMYXN0IGNoYW5nZWQgaW4gbGlicG5nIDEuMi4yMCBBdWd1c3QgMzAsIDIwMDcKKyAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjIwIFNlcHRlbWJlciAxLCAyMDA3CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMDAxLDExICsxMDAxLDYgQEAKICAgIC8qIG9mZnNldCB0byBuZXh0IGludGVybGFjZSBibG9jayBpbiB0aGUgeSBkaXJlY3Rpb24gKi8KICAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc195aW5jW10gPSB7OCwgOCwgOCwgNCwgNCwgMiwgMn07CiAKLSAgIC8qIFdpZHRoIG9mIGludGVybGFjZSBibG9jay4gIFRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VkIC0gaWYgeW91IG5lZWQKLSAgICAqIGl0LCB1bmNvbW1lbnQgaXQgaGVyZSBhbmQgaW4gcG5nLmgKLSAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OwotICAgKi8KLQogICAgLyogSGVpZ2h0IG9mIGludGVybGFjZSBibG9jay4gIFRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VkIC0gaWYgeW91IG5lZWQKICAgICAqIGl0LCB1bmNvbW1lbnQgaXQgaGVyZSBhbmQgaW4gcG5nLmgKICAgIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19oZWlnaHRbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKZGlmZiAtLWdpdCBhL3BuZ3JlYWQuYyBiL3BuZ3JlYWQuYwppbmRleCBjMjZjZTYxLi5jOTE0MDMwIDEwMDY0NAotLS0gYS9wbmdyZWFkLmMKKysrIGIvcG5ncmVhZC5jCkBAIC01NSwxMiArNTUsNiBAQAogICAgaWYgKHBuZ19wdHIgPT0gTlVMTCkKICAgICAgIHJldHVybiAoTlVMTCk7CiAKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0jaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAotICAgcG5nX2luaXRfbW14X2ZsYWdzKHBuZ19wdHIpOyAgIC8qIDEuMi4wIGFkZGl0aW9uICovCi0jZW5kaWYKLSNlbmRpZiAvKiBQTkdfMV8wX1ggKi8KLQogICAgLyogYWRkZWQgYXQgbGlicG5nLTEuMi42ICovCiAjaWZkZWYgUE5HX1NFVF9VU0VSX0xJTUlUU19TVVBQT1JURUQKICAgIHBuZ19wdHItPnVzZXJfd2lkdGhfbWF4PVBOR19VU0VSX1dJRFRIX01BWDsKZGlmZiAtLWdpdCBhL3BuZ3J1dGlsLmMgYi9wbmdydXRpbC5jCmluZGV4IDRkYTg2MmUuLjk5YmNhMTkgMTAwNjQ0Ci0tLSBhL3BuZ3J1dGlsLmMKKysrIGIvcG5ncnV0aWwuYwpAQCAtMjI3NywxMDUxICsyMjc3LDEwIEBACiAgICB0byBhbnkgYWxwaGEgb3IgdHJhbnNwYXJlbmN5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGl4ZWwuICBJZgogICAgeW91IHdhbnQgYWxsIHBpeGVscyB0byBiZSBjb21iaW5lZCwgcGFzcyAweGZmICgyNTUpIGluIG1hc2suICAqLwogCi0vKiBPcHRpbWl6ZWQgQyB2ZXJzaW9uIG9mIHV0aWxpdGllcyB0byByZWFkIGEgUE5HIGZpbGUKLSAqCi0gKiBCYXNlZCBvbiBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE5pcmF2IENoaGF0cmFwYXRpLCBJbnRlbCBDb3JwLiwgMTk5OC4KLSAqIEludGVyZmFjZSB0byBsaWJwbmcgY29udHJpYnV0ZWQgYnkgR2lsbGVzIFZvbGxhbnQsIDE5OTkuCi0gKiBHTlUgQyBwb3J0IGJ5IEdyZWcgUm9lbG9mcywgMTk5OS0yMDAxLgotICoKLSAqLwotCi0jaWYgZGVmaW5lZChQTkdfT1BUSU1JWkVEX0NPREVfU1VQUE9SVEVEKQotI2lmICFkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgIFAgTiBHIF8gQyBPIE0gQiBJIE4gRSBfIFIgTyBXICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLSNkZWZpbmUgQlBQMiAgMgotI2RlZmluZSBCUFAzICAzIC8qIGJ5dGVzIHBlciBwaXhlbCAoYS5rLmEuIHBpeGVsX2J5dGVzKSAqLwotI2RlZmluZSBCUFA0ICA0Ci0jZGVmaW5lIEJQUDYgIDYgLyogKGRlZmluZWQgb25seSB0byBoZWxwIGF2b2lkIGN1dC1hbmQtcGFzdGUgZXJyb3JzKSAqLwotI2RlZmluZSBCUFA4ICA4Ci0KLS8qIENvbWJpbmVzIHRoZSByb3cgcmVjZW50bHkgcmVhZCBpbiB3aXRoIHRoZSBwcmV2aW91cyByb3cuCi0gICBUaGlzIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBhbHBoYSBhbmQgdHJhbnNwYXJlbmN5IGlmIHJlcXVlc3RlZC4KLSAgIFRoaXMgcm91dGluZSBhbHNvIGhhbmRsZXMgdGhlIHR3byBtZXRob2RzIG9mIHByb2dyZXNzaXZlIGRpc3BsYXkKLSAgIG9mIGludGVybGFjZWQgaW1hZ2VzLCBkZXBlbmRpbmcgb24gdGhlIG1hc2sgdmFsdWUuCi0gICBUaGUgbWFzayB2YWx1ZSBkZXNjcmliZXMgd2hpY2ggcGl4ZWxzIGFyZSB0byBiZSBjb21iaW5lZCB3aXRoCi0gICB0aGUgcm93LiAgVGhlIHBhdHRlcm4gYWx3YXlzIHJlcGVhdHMgZXZlcnkgOCBwaXhlbHMsIHNvIGp1c3QgOAotICAgYml0cyBhcmUgbmVlZGVkLiAgQSBvbmUgaW5kaWNhdGVzIHRoZSBwaXhlbCBpcyB0byBiZSBjb21iaW5lZDsgYQotICAgemVybyBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIHNraXBwZWQuICBUaGlzIGlzIGluIGFkZGl0aW9uCi0gICB0byBhbnkgYWxwaGEgb3IgdHJhbnNwYXJlbmN5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGl4ZWwuCi0gICBJZiB5b3Ugd2FudCBhbGwgcGl4ZWxzIHRvIGJlIGNvbWJpbmVkLCBwYXNzIDB4ZmYgKDI1NSkgaW4gbWFzay4gKi8KLQotLyogVXNlIHRoaXMgcm91dGluZSBmb3IgdGhlIHg4NiBwbGF0Zm9ybSAtIGl0IHVzZXMgYSBmYXN0ZXIgTU1YIHJvdXRpbmUKLSAgIGlmIHRoZSBtYWNoaW5lIHN1cHBvcnRzIE1NWC4gKi8KLQogdm9pZCAvKiBQUklWQVRFICovCiBwbmdfY29tYmluZV9yb3cocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIHJvdywgaW50IG1hc2spCiB7Ci0KLSNpZiBkZWZpbmVkKFBOR19VU0VfTE9DQUxfQVJSQVlTKQotc3RhdGljIFBOR19DT05TVCBpbnQgRkFSREFUQSBwbmdfcGFzc19zdGFydFs3XSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsKLXN0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaW5jWzddICAgPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07Ci1zdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX3dpZHRoWzddID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OwotI2VuZGlmCi0KLSAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NvbWJpbmVfcm93IChwbmdydXRpbC5jIE9QVElNSVpFRClcbiIpOwotCi0gICBpZiAobWFzayA9PSAweGZmKQotICAgewotICAgICAgcG5nX2RlYnVnKDIsIm1hc2sgPT0gMHhmZjogIGRvaW5nIHNpbmdsZSBwbmdfbWVtY3B5KClcbiIpOwotICAgICAgcG5nX21lbWNweShyb3csIHBuZ19wdHItPnJvd19idWYgKyAxLAotICAgICAgIChwbmdfc2l6ZV90KVBOR19ST1dCWVRFUyhwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCxwbmdfcHRyLT53aWR0aCkpOwotICAgfQotICAgZWxzZSAgIC8qIChwbmdfY29tYmluZV9yb3coKSBpcyBuZXZlciBjYWxsZWQgd2l0aCBtYXNrID09IDApICovCi0gICB7Ci0gICAgICBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKQotICAgICAgewotICAgICAgICAgLyogbW9zdCBjb21tb24gY2FzZTogIGNvbWJpbmluZyAyNC1iaXQgUkdCICovCi0gICAgICAgICBjYXNlIDI0OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDMgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDMgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQMyAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7IC8qIHJlZHVjZSB0byBtdWx0IG9mIDggKi8KLSAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFAzICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwotCi0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFAzOwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLyogZW5kIDI0IGJwcCAqLwotCi0gICAgICAgICBjYXNlIDMyOiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDQgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDQgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7IC8qIHJlZHVjZSB0byBtdWx0IG9mIDggKi8KLSAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFA0ICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwotCi0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA0OwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8qIGVuZCAzMiBicHAgKi8KLQotICAgICAgICAgY2FzZSA4OiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgLyogcmVkdWNlIHRvIG11bHQgb2YgOCAqLwotICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IGxlbjsgIC8qIEdSUiBidWdmaXggKi8KLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwotCi0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZiAvKiAqQlBQMSAqLyA7Ci0gICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLyogZW5kIDggYnBwICovCi0KLSAgICAgICAgIGNhc2UgMTogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3A7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHA7Ci0gICAgICAgICAgICBpbnQgc19pbmMsIHNfc3RhcnQsIHNfZW5kOwotICAgICAgICAgICAgaW50IG07Ci0gICAgICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotCi0gICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgZHAgPSByb3c7Ci0gICAgICAgICAgICBtID0gMHg4MDsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgc19lbmQgPSA3OwotICAgICAgICAgICAgICAgIHNfaW5jID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwotICAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgICBzX2luYyA9IC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKG0gJiBtYXNrKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHgxOwotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4N2Y3ZiA+PiAoNyAtIHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHZhbHVlIDw8IHNoaWZ0KTsKLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3ArKzsKLSAgICAgICAgICAgICAgICAgIGRwKys7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKLQotICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKLSAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgMSBicHAgKi8KLQotICAgICAgICAgY2FzZSAyOiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkcDsKLSAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7Ci0gICAgICAgICAgICBpbnQgbTsKLSAgICAgICAgICAgIGludCBzaGlmdDsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBpbnQgdmFsdWU7Ci0KLSAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICAgICAgICAgICBkcCA9IHJvdzsKLSAgICAgICAgICAgIG0gPSAweDgwOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgc19lbmQgPSA2OwotICAgICAgICAgICAgICAgc19pbmMgPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNjsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBuZ19wdHItPndpZHRoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHgzOwotICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4M2YzZiA+PiAoNiAtIHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHZhbHVlIDw8IHNoaWZ0KTsKLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID09IHNfZW5kKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3ArKzsKLSAgICAgICAgICAgICAgICAgIGRwKys7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIGlmIChtID09IDEpCi0gICAgICAgICAgICAgICAgICBtID0gMHg4MDsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIG0gPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLyogZW5kIDIgYnBwICovCi0KLSAgICAgICAgIGNhc2UgNDogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3A7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHA7Ci0gICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwotICAgICAgICAgICAgaW50IG07Ci0gICAgICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgZHAgPSByb3c7Ci0gICAgICAgICAgICBtID0gMHg4MDsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC00OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweGY7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwKys7Ci0gICAgICAgICAgICAgICAgICBkcCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICAgICBpZiAobSA9PSAxKQotICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBtID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8qIGVuZCA0IGJwcCAqLwotCi0gICAgICAgICBjYXNlIDE2OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDIgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDIgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQMiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdCBvZiA4ICovCi0gICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMiAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCi0KLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKLQotICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQMjsKLSAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8qIGVuZCAxNiBicHAgKi8KLQotCi0KLSAgICAgICAgIGNhc2UgNDg6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDYgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDYgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQNiAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7IC8qIHJlZHVjZSB0byBtdWx0IG9mIDggKi8KLSAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCi0gICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFA2ICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KLQotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwotCi0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFA2OwotICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgNDggYnBwICovCi0KLSAgICAgICAgIGNhc2UgNjQ6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDggKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKLSAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDggKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0gICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCi0gICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQOCAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwotICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCi0gICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdCBvZiA4ICovCi0gICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQOCAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCi0KLSAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7Ci0gICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKLQotICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKLSAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQODsKLSAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvKiBlbmQgNjQgYnBwICovCi0KLSAgICAgICAgIGRlZmF1bHQ6IC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICE9IDEsMiw0LDgsMTYsMjQsMzIsNDgsNjQgKi8KLSAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotICAgICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkludmFsaWQgcm93X2luZm8ucGl4ZWxfZGVwdGggaW4gcG5ncnV0aWwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgfSAvKiBlbmQgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkgKi8KLQotICAgfSAvKiBlbmQgaWYgKG5vbi10cml2aWFsIG1hc2spICovCi0KLX0gLyogZW5kIHBuZ19jb21iaW5lX3JvdygpICovCi0jZW5kaWYgLyogUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XICovCi0KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgUCBOIEcgXyBEIE8gXyBSIEUgQSBEIF8gSSBOIFQgRSBSIEwgQSBDIEUgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpZiBkZWZpbmVkKFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCkKLSNpZiAhZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UpCi0KLS8qIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGlzIGNhbGxlZCBhZnRlciBhbnkgMTYtYml0IHRvIDgtYml0IGNvbnZlcnNpb24KLSAqIGhhcyB0YWtlbiBwbGFjZS4gIFtHUlI6IHdoYXQgb3RoZXIgc3RlcHMgY29tZSBiZWZvcmUgYW5kL29yIGFmdGVyP10KLSAqLwotCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19kb19yZWFkX2ludGVybGFjZShwbmdfc3RydWN0cCBwbmdfcHRyKQotewotI2lmIGRlZmluZWQoUE5HX1VTRV9MT0NBTF9BUlJBWVMpCi1zdGF0aWMgUE5HX0NPTlNUIGludCBGQVJEQVRBIHBuZ19wYXNzX2luY1s3XSAgID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OwotI2VuZGlmCi0gICBwbmdfcm93X2luZm9wIHJvd19pbmZvID0gJihwbmdfcHRyLT5yb3dfaW5mbyk7Ci0gICBwbmdfYnl0ZXAgcm93ID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7Ci0gICBpbnQgcGFzcyA9IHBuZ19wdHItPnBhc3M7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICBwbmdfdWludF8zMiB0cmFuc2Zvcm1hdGlvbnMgPSBwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnM7Ci0jZW5kaWYKLSAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UgKHBuZ3J1dGlsLmMgT1BUSU1JWkVEKVxuIik7Ci0KLSAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQotICAgewotICAgICAgcG5nX3VpbnRfMzIgZmluYWxfd2lkdGg7Ci0KLSAgICAgIGZpbmFsX3dpZHRoID0gcm93X2luZm8tPndpZHRoICogcG5nX3Bhc3NfaW5jW3Bhc3NdOwotCi0gICAgICBzd2l0Y2ggKHJvd19pbmZvLT5waXhlbF9kZXB0aCkKLSAgICAgIHsKLSAgICAgICAgIGNhc2UgMToKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcCwgZHA7Ci0gICAgICAgICAgICBpbnQgc3NoaWZ0LCBkc2hpZnQ7Ci0gICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwotICAgICAgICAgICAgcG5nX2J5dGUgdjsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDMpOwotICAgICAgICAgICAgZHAgPSByb3cgKyAocG5nX3NpemVfdCkoKGZpbmFsX3dpZHRoIC0gMSkgPj4gMyk7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc3NoaWZ0ID0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAoaW50KSgoZmluYWxfd2lkdGggKyA3KSAmIDcpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDc7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSA3IC0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSA3IC0gKGludCkoKGZpbmFsX3dpZHRoICsgNykgJiA3KTsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgc19lbmQgPSA3OwotICAgICAgICAgICAgICAgc19pbmMgPSAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4MSk7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gZHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgZHAtLTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3AtLTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDI6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwotICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0KLSAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAyKTsKLSAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDIpOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykgPDwgMSk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKChmaW5hbF93aWR0aCArIDMpICYgMykgPDwgMSk7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNjsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgocm93X2luZm8tPndpZHRoICsgMykgJiAzKSkgPDwgMSk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKDMgLSAoKGZpbmFsX3dpZHRoICsgMykgJiAzKSkgPDwgMSk7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNjsKLSAgICAgICAgICAgICAgIHNfaW5jID0gMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwotICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Myk7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gZHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgZHAtLTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3AtLTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwotICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0KLSAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAxKTsKLSAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDEpOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkgPDwgMik7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKChmaW5hbF93aWR0aCArIDEpICYgMSkgPDwgMik7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgocm93X2luZm8tPndpZHRoICsgMSkgJiAxKSkgPDwgMik7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKDEgLSAoKGZpbmFsX3dpZHRoICsgMSkgJiAxKSkgPDwgMik7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gNDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwotICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Zik7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBkc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwotICAgICAgICAgICAgICAgICAgaWYgKGRzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICBkcC0tOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcC0tOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0KLSAgICAgICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotICAgICAgICAgZGVmYXVsdDogLyogOC1iaXQgb3IgbGFyZ2VyICh0aGlzIGlzIHdoZXJlIHRoZSByb3V0aW5lIGlzIG1vZGlmaWVkKSAqLwotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwdHIsIGRwOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSAoaW50KXJvd19pbmZvLT53aWR0aDsKLQotICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoID4+IDMpOwotCi0gICAgICAgICAgICAvKiBwb2ludCBzcHRyIGF0IHRoZSBsYXN0IHBpeGVsIGluIHRoZSBwcmUtZXhwYW5kZWQgcm93OiAqLwotICAgICAgICAgICAgc3B0ciA9IHJvdyArICh3aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7Ci0KLSAgICAgICAgICAgIC8qIHBvaW50IGRwIGF0IHRoZSBsYXN0IHBpeGVsIHBvc2l0aW9uIGluIHRoZSBleHBhbmRlZCByb3c6ICovCi0gICAgICAgICAgICBkcCA9IHJvdyArIChmaW5hbF93aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7Ci0KLSAgICAgICAgICAgIC8qIE1NWCBub3Qgc3VwcG9ydGVkOiAgdXNlIG1vZGlmaWVkIEMgY29kZSAtIHRha2VzIGFkdmFudGFnZQotICAgICAgICAgICAgICogICBvZiBpbmxpbmluZyBvZiBwbmdfbWVtY3B5IGZvciBhIGNvbnN0YW50ICovCi0gICAgICAgICAgICAvKiBHUlIgMTk5OTEwMDc6ICBkb2VzIGl0PyAgb3Igc2hvdWxkIHBpeGVsX2J5dGVzIGluIGVhY2gKLSAgICAgICAgICAgICAqICAgYmxvY2sgYmUgcmVwbGFjZWQgd2l0aCBpbW1lZGlhdGUgdmFsdWUgKGUuZy4sIDEpPyAqLwotICAgICAgICAgICAgLyogR1JSIDE5OTkxMDE3OiAgcmVwbGFjZWQgd2l0aCBjb25zdGFudHMgaW4gZWFjaCBjYXNlICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gMSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAtLXNwdHI7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAzKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDM7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDM7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSAyKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDI7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0jaWYgZGVmaW5lZChQTkdfREVCVUcpICYmIGRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRwIDwgcm93IHx8IGRwKzMgPiByb3crcG5nX3B0ci0+cm93X2J1Zl9zaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkcCBvdXQgb2YgYm91bmRzOiByb3c9JWQsIGRwPSVkLCBycD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCBkcCwgcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJvd19idWY9JWRcbiIscG5nX3B0ci0+cm93X2J1Zl9zaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNikKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDYpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA2OwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA2OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gOCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDgpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA4OwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA4OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSAgICAgLyogR1JSOiAgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQgKi8KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAgICB9IC8qIGVuZCBzd2l0Y2ggKHJvd19pbmZvLT5waXhlbF9kZXB0aCkgKi8KLQotICAgICAgcm93X2luZm8tPndpZHRoID0gZmluYWxfd2lkdGg7Ci0KLSAgICAgIHJvd19pbmZvLT5yb3dieXRlcyA9IFBOR19ST1dCWVRFUyhyb3dfaW5mby0+cGl4ZWxfZGVwdGgsZmluYWxfd2lkdGgpOwotICAgfQotCi19IC8qIGVuZCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSAqLwotCi0jZW5kaWYgLyogUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFICovCi0jZW5kaWYgLyogUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVEICovCi0KLQotCi0jaWYgIWRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVykKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0vKiBPcHRpbWl6ZWQgcG5nX3JlYWRfZmlsdGVyX3JvdyByb3V0aW5lcyAqLwotCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19yZWFkX2ZpbHRlcl9yb3cocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwCi0gICByb3csIHBuZ19ieXRlcCBwcmV2X3JvdywgaW50IGZpbHRlcikKLXsKLSNpZiBkZWZpbmVkKFBOR19ERUJVRykKLSAgIGNoYXIgZmlsbm1bMTBdOwotI2VuZGlmCi0KLQotI2lmIGRlZmluZWQoUE5HX0RFQlVHKQotICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93IChwbmdydXRpbC5jIE9QVElNSVpFRClcbiIpOwotICAgc3dpdGNoIChmaWx0ZXIpCi0gICB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAibm9uZSIpOwotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMToKLSAgICAgICAgIHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJzdWItJXMiLAotICAgICAgICAgICAgICJ4ODYiKTsKLSAgICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDI6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidXAtJXMiLAotICAgICAgICAgICAgICJ4ODYiKTsKLSAgICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDM6Ci0gICAgICAgICBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiYXZnLSVzIiwKLSAgICAgICAgICAgICAieDg2Iik7Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSA0OgotICAgICAgICAgcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgIlBhZXRoLSVzIiwKLSAgICAgICAgICAgICAieDg2Iik7Ci0gICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJ1bmtub3duIik7Ci0gICAgICAgICBicmVhazsKLSAgIH0KLSAgIHBuZ19kZWJ1ZzIoMCwgInJvd19udW1iZXI9JTVsZCwgJTEwcywgIiwgcG5nX3B0ci0+cm93X251bWJlciwgZmlsbm0pOwotICAgcG5nX2RlYnVnMSgwLCAicm93PTB4JTA4bHgsICIsICh1bnNpZ25lZCBsb25nKXJvdyk7Ci0gICBwbmdfZGVidWcyKDAsICJwaXhkZXB0aD0lMmQsIGJ5dGVzPSVkLCAiLCAoaW50KXJvd19pbmZvLT5waXhlbF9kZXB0aCwKLSAgICAgIChpbnQpKChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzKSk7Ci0gICBwbmdfZGVidWcxKDAsInJvd2J5dGVzPSU4bGRcbiIsIHJvd19pbmZvLT5yb3dieXRlcyk7Ci0jZW5kaWYgLyogUE5HX0RFQlVHICovCi0KLSAgIHN3aXRjaCAoZmlsdGVyKQotICAgewotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX05PTkU6Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1NVQjoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwotICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93ICsgYnBwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGxwID0gcm93OwotCi0gICAgICAgICAgICBmb3IgKGkgPSBicHA7IGkgPCBpc3RvcDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpscCsrKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzOwotICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwotICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgKytpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpwcCsrKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwotICAgICAgICAgICAgICAgICAgKChpbnQpKCpwcCsrKSA+PiAxKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArCi0gICAgICAgICAgICAgICAgICAoKGludCkoKnBwKysgKyAqbHArKykgPj4gMSkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9QQUVUSDoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBjcCA9IHByZXZfcm93OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGJwcDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpwcCsrKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKSAgIC8qIHVzZSBsZWZ0b3ZlciBycCxwcCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaW50IGEsIGIsIGMsIHBhLCBwYiwgcGMsIHA7Ci0KLSAgICAgICAgICAgICAgIGEgPSAqbHArKzsKLSAgICAgICAgICAgICAgIGIgPSAqcHArKzsKLSAgICAgICAgICAgICAgIGMgPSAqY3ArKzsKLQotICAgICAgICAgICAgICAgcCA9IGIgLSBjOwotICAgICAgICAgICAgICAgcGMgPSBhIC0gYzsKLQotI2lmIGRlZmluZWQoUE5HX1VTRV9BQlMpCi0gICAgICAgICAgICAgICBwYSA9IGFicyhwKTsKLSAgICAgICAgICAgICAgIHBiID0gYWJzKHBjKTsKLSAgICAgICAgICAgICAgIHBjID0gYWJzKHAgKyBwYyk7Ci0jZWxzZQotICAgICAgICAgICAgICAgcGEgPSBwIDwgMCA/IC1wIDogcDsKLSAgICAgICAgICAgICAgIHBiID0gcGMgPCAwID8gLXBjIDogcGM7Ci0gICAgICAgICAgICAgICBwYyA9IChwICsgcGMpIDwgMCA/IC0ocCArIHBjKSA6IHAgKyBwYzsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKQotICAgICAgICAgICAgICAgICAgICAgcCA9IGE7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYiA8PSBwYykKLSAgICAgICAgICAgICAgICAgICAgIHAgPSBiOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgcCA9IGM7Ci0gICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgcCA9IChwYSA8PSBwYiAmJiBwYSA8PSBwYykgPyBhIDogKHBiIDw9IHBjKSA/IGIgOiBjOwotCi0gICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgcCkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJZ25vcmluZyBiYWQgcm93LWZpbHRlciB0eXBlIik7Ci0gICAgICAgICAqcm93PTA7Ci0gICAgICAgICBicmVhazsKLSAgIH0KLX0KLQotI2VuZGlmIC8qIFBOR19IQVZFX01NWF9SRUFEX0ZJTFRFUl9ST1cgKi8KLSNlbmRpZiAvKiBQTkdfT1BUSU1JWkVEX0NPREVfU1VQUE9SVEVEICovCi0KLSNpZiAhZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSB8fCBcCi0gICAgIWRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgfHwgXAotICAgICghZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKSAmJiAhZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpKQotI2lmICFkZWZpbmVkKFBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQpCi0vKiBVc2UgdGhlIHVub3B0aW1pemVkIG9yaWdpbmFsIEMgY29kZS4gIFRoaXMgbWlnaHQgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlCi0gKiB2ZXJzaW9uIG9mIGxpYnBuZyBpZiB0ZXN0aW5nIHByb3ZlcyBpdCB0byBiZSB3b3J0aGxlc3MuICovCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKLXsKLSAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfY29tYmluZV9yb3cgTk9UIE9QVElNSVpFRFxuIik7CisgICBwbmdfZGVidWcoMSwiaW4gcG5nX2NvbWJpbmVfcm93XG4iKTsKICAgIGlmIChtYXNrID09IDB4ZmYpCiAgICB7CiAgICAgICBwbmdfbWVtY3B5KHJvdywgcG5nX3B0ci0+cm93X2J1ZiArIDEsCkBAIC0zNTM3LDcgKzI0OTYsNyBAQAogICAgUE5HX0NPTlNUIGludCBwbmdfcGFzc19pbmNbN10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CiAjZW5kaWYKIAotICAgcG5nX2RlYnVnKDEsImluIHBuZ19kb19yZWFkX2ludGVybGFjZSAocG5ncnV0aWwuYyBOT1QgT1BUSU1JWkVEKVxuIik7CisgICBwbmdfZGVidWcoMSwiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlXG4iKTsKICAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQogICAgewogICAgICAgcG5nX3VpbnRfMzIgZmluYWxfd2lkdGg7CkBAIC0zNzUwLDcgKzI3MDksNyBAQAogcG5nX3JlYWRfZmlsdGVyX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAogICAgcG5nX2J5dGVwIHByZXZfcm93LCBpbnQgZmlsdGVyKQogewotICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93IChOT1QgT1BUSU1JWkVEKVxuIik7CisgICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2ZpbHRlcl9yb3dcbiIpOwogICAgcG5nX2RlYnVnMigyLCJyb3cgPSAlbHUsIGZpbHRlciA9ICVkXG4iLCBwbmdfcHRyLT5yb3dfbnVtYmVyLCBmaWx0ZXIpOwogICAgc3dpdGNoIChmaWx0ZXIpCiAgICB7CkBAIC0zODY4LDkgKzI4MjcsNiBAQAogICAgICAgICAgYnJlYWs7CiAgICB9CiB9Ci0jZW5kaWYgLyogIVBOR19PUFRJTUlaRURfQ09ERV9TVVBQT1JURUQgKi8KLSNlbmRpZiAvKiAhUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCB8fCAhUE5HX01NWF9DT0RFX1NVUFBPUlRFRCB8fCAqLwotICAgICAgIC8qICghUE5HX1VTRV9QTkdHQ0NSRCAmJiAhUE5HX1VTRV9QTkdWQ1JEKSAqLwogCiB2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19yZWFkX2ZpbmlzaF9yb3cocG5nX3N0cnVjdHAgcG5nX3B0cikKQEAgLTQxNjUsOSArMzEyMSw2IEBACiAjZW5kaWYKICAgIHBuZ19wdHItPmJpZ19yb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIHJvd19ieXRlcys2NCk7CiAgICBwbmdfcHRyLT5yb3dfYnVmID0gcG5nX3B0ci0+YmlnX3Jvd19idWYrMzI7Ci0jaWYgZGVmaW5lZChQTkdfREVCVUcpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkgJiYgZGVmaW5lZChQTkdfMV8wX1gpCi0gICBwbmdfcHRyLT5yb3dfYnVmX3NpemUgPSByb3dfYnl0ZXM7Ci0jZW5kaWYKIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwogICAgaWYgKChwbmdfdWludF8zMilwbmdfcHRyLT5yb3dieXRlcyArIDEgPiAocG5nX3VpbnRfMzIpNjU1MzZMKQpkaWZmIC0tZ2l0IGEvcG5nc2V0LmMgYi9wbmdzZXQuYwppbmRleCA4ZDFjYmZjLi4yODcxMTQwIDEwMDY0NAotLS0gYS9wbmdzZXQuYworKysgYi9wbmdzZXQuYwpAQCAtMTIwMiw1MSArMTIwMiwxMyBAQAogCiAjaWZuZGVmIFBOR18xXzBfWAogI2lmZGVmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQKLS8qIHRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGxpYnBuZyAxLjIuMCBhbmQgc2hvdWxkIGFsd2F5cyBleGlzdCBieSBkZWZhdWx0ICovCisvKiBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gbGlicG5nIDEuMi4wIGFuZCBzaG91bGQgYWx3YXlzIGV4aXN0IGJ5IGRlZmF1bHQgKi8KIHZvaWQgUE5HQVBJCiBwbmdfc2V0X2FzbV9mbGFncyAocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX3VpbnRfMzIgYXNtX2ZsYWdzKQogewotI2lmZGVmIFBOR19NTVhfQ09ERV9TVVBQT1JURUQKLSAgICBwbmdfdWludF8zMiBzZXR0YWJsZV9hc21fZmxhZ3M7Ci0gICAgcG5nX3VpbnRfMzIgc2V0dGFibGVfbW14X2ZsYWdzOwotI2VuZGlmCi0gICAgaWYgKHBuZ19wdHIgPT0gTlVMTCkKLSAgICAgICByZXR1cm47Ci0jaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAotCi0gICAgc2V0dGFibGVfbW14X2ZsYWdzID0KLSNpZmRlZiBQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cKLSAgICAgICAgICAgICAgICAgICAgICAgICBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cgIHwKLSNlbmRpZgotI2lmZGVmIFBOR19IQVZFX01NWF9SRUFEX0lOVEVSTEFDRQotICAgICAgICAgICAgICAgICAgICAgICAgIFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UgICAgfAotI2VuZGlmCi0jaWZkZWYgUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVwotICAgICAgICAgICAgICAgICAgICAgICAgIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEggfAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgMDsKLQotICAgIC8qIGNvdWxkIGJlIHNvbWUgbm9uLU1NWCBvbmVzIGluIHRoZSBmdXR1cmUsIGJ1dCBub3QgY3VycmVudGx5OiAqLwotICAgIHNldHRhYmxlX2FzbV9mbGFncyA9IHNldHRhYmxlX21teF9mbGFnczsKLQotICAgIGlmICghKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfU1VQUE9SVF9DT01QSUxFRCkgfHwKLSAgICAgICAgIShwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVKSkKLSAgICB7Ci0gICAgICAgIC8qIGNsZWFyIGFsbCBNTVggZmxhZ3MgaWYgTU1YIGlzbid0IHN1cHBvcnRlZCAqLwotICAgICAgICBzZXR0YWJsZV9hc21fZmxhZ3MgJj0gfnNldHRhYmxlX21teF9mbGFnczsKLSAgICAgICAgcG5nX3B0ci0+YXNtX2ZsYWdzICY9IH5zZXR0YWJsZV9tbXhfZmxhZ3M7Ci0gICAgfQotCi0gICAgLyogd2UncmUgcmVwbGFjaW5nIHRoZSBzZXR0YWJsZSBiaXRzIHdpdGggdGhvc2UgcGFzc2VkIGluIGJ5IHRoZSB1c2VyLAotICAgICAqIHNvIGZpcnN0IHplcm8gdGhlbSBvdXQgb2YgdGhlIG1hc3RlciBjb3B5LCB0aGVuIGJpdHdpc2UtT1IgaW4gdGhlCi0gICAgICogYWxsb3dlZCBzdWJzZXQgdGhhdCB3YXMgcmVxdWVzdGVkICovCi0KLSAgICBwbmdfcHRyLT5hc21fZmxhZ3MgJj0gfnNldHRhYmxlX2FzbV9mbGFnczsgICAgICAgICAgICAgICAvKiB6ZXJvIHRoZW0gKi8KLSAgICBwbmdfcHRyLT5hc21fZmxhZ3MgfD0gKGFzbV9mbGFncyAmIHNldHRhYmxlX2FzbV9mbGFncyk7ICAvKiBzZXQgdGhlbSAqLwotI2VuZGlmIC8qID9QTkdfTU1YX0NPREVfU1VQUE9SVEVEICovCisvKiBPYnNvbGV0ZSBhcyBvZiBsaWJwbmctMS4yLjIwIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBsaWJwbmctMS40LjAgKi8KKyAgICBpZiAocG5nX3B0ciAhPSBOVUxMKQorICAgIHBuZ19wdHItPmFzbV9mbGFncyA9IDA7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGxpYnBuZyAxLjIuMCAqLwpAQCAtMTI1NSwxMiArMTIxNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSBtbXhfYml0ZGVwdGhfdGhyZXNob2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbW14X3Jvd2J5dGVzX3RocmVzaG9sZCkKIHsKKy8qIE9ic29sZXRlIGFzIG9mIGxpYnBuZy0xLjIuMjAgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZy0xLjQuMCAqLwogICAgIGlmIChwbmdfcHRyID09IE5VTEwpCiAgICAgICAgcmV0dXJuOwotI2lmZGVmIFBOR19NTVhfQ09ERV9TVVBQT1JURUQKLSAgICBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkID0gbW14X2JpdGRlcHRoX3RocmVzaG9sZDsKLSAgICBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkID0gbW14X3Jvd2J5dGVzX3RocmVzaG9sZDsKLSNlbmRpZiAvKiA/UE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwogfQogI2VuZGlmIC8qID9QTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICovCiAKZGlmZiAtLWdpdCBhL3BuZ3Rlc3QuYyBiL3BuZ3Rlc3QuYwppbmRleCBjNDZkOTE3Ny4uNzA3MzRhMyAxMDA2NDQKLS0tIGEvcG5ndGVzdC5jCisrKyBiL3BuZ3Rlc3QuYwpAQCAtMTU0OCw0ICsxNTQ4LDQgQEAKIH0KIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMl8yMHJjMyB5b3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8yMHJjMzsKK3R5cGVkZWYgdmVyc2lvbl8xXzJfMjByYzQgeW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzJfMjByYzQ7CmRpZmYgLS1naXQgYS9wbmd2Y3JkLmMgYi9wbmd2Y3JkLmMKaW5kZXggZWRkOGZmNi4uY2U0MjMzZSAxMDA2NDQKLS0tIGEvcG5ndmNyZC5jCisrKyBiL3BuZ3ZjcmQuYwpAQCAtMSwzOTE3ICsxIEBACi0KLS8qIHBuZ3ZjcmQuYyAtIG1peGVkIEMvYXNzZW1ibGVyIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQotICoKLSAqIEZvciBJbnRlbCB4ODYgQ1BVIGFuZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlcgotICoKLSAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjIwIEF1Z3VzdCAzMCwgMjAwNwotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KLSAqIENvcHlyaWdodCAoYykgMTk5OCwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250cmlidXRlZCBieSBOaXJhdiBDaGhhdHJhcGF0aSwgSW50ZWwgQ29ycG9yYXRpb24sIDE5OTgKLSAqIEludGVyZmFjZSB0byBsaWJwbmcgY29udHJpYnV0ZWQgYnkgR2lsbGVzIFZvbGxhbnQsIDE5OTkKLSAqCi0gKgotICogSW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgaW4gbGlicG5nIHZlcnNpb25zIDEuMC4zYSB0aHJvdWdoIDEuMC40ZCwKLSAqIGEgc2lnbiBlcnJvciBpbiB0aGUgcG9zdC1NTVggY2xlYW51cCBjb2RlIGZvciBlYWNoIHBpeGVsX2RlcHRoIHJlc3VsdGVkCi0gKiBpbiBiYWQgcGl4ZWxzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc29tZSByb3dzIG9mIHNvbWUgaW1hZ2VzLCBhbmQgYWxzbwotICogKGR1ZSB0byBvdXQtb2YtcmFuZ2UgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMpIGNhdXNlZCBoZWFwIGNvcnJ1cHRpb24KLSAqIHdoZW4gY29tcGlsZWQgd2l0aCBNU1ZDIDYuMC4gIFRoZSBlcnJvciB3YXMgZml4ZWQgaW4gdmVyc2lvbiAxLjAuNGUuCi0gKgotICogW3BuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2ZygpIGJwcCA9PSAyIGJ1Z2ZpeCwgR1JSIDIwMDAwOTE2XQotICoKLSAqIFtydW50aW1lIE1NWCBjb25maWd1cmF0aW9uLCBHUlIgMjAwMTAxMDJdCi0gKgotICogW0NvcHkgNiBieXRlcyBwZXIgcGl4ZWwsIG5vdCA0LCBhbmQgdXNlIHN0cmlkZSBvZiA2LCBub3QgNCwgaW4gdGhlCi0gKiAgc2Vjb25kIGxvb3Agb2YgaW50ZXJsYWNlIHByb2Nlc3Npbmcgb2YgNDgtYml0IHBpeGVscywgR1ItUCAyMDA3MDcxN10KLSAqCi0gKiBbbW92ZSBpbnN0YW5jZXMgb2YgdUFsbCB1bmlvbiBpbnRvIGxvY2FsLCBleGNlcHQgZm9yIHR3byBjb25zdGFudAotICogaW5zdGFuY2VzLCBHUi1QIDIwMDcwODA1XQotICoKLSAqIFtyZXZpc2VkIGhhbmRsaW5nIG9mIHN0YXRpYyBjb25zdGFudHMgZm9yIGVmZmljaWVuY3ksIFN0ZXZlIFNueWRlciAyMDA3MDgyMV0KLSAqLwotCi0jZGVmaW5lIFBOR19JTlRFUk5BTAotI2luY2x1ZGUgInBuZy5oIgotCi0jaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKSAmJiBcCi0gICAgZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpICYmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkKLQotI2lmZGVmIFBOR19VU0VfTE9DQUxfQVJSQVlTCi1zdGF0aWMgUE5HX0NPTlNUIGludCBwbmdfcGFzc19pbmNbN10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07Ci0jZW5kaWYKLQotc3RhdGljIGludCBtbXhfc3VwcG9ydGVkPTI7Ci0KLWludCBQTkdBUEkKLXBuZ19tbXhfc3VwcG9ydCh2b2lkKQotewotICBpbnQgbW14X3N1cHBvcnRlZF9sb2NhbCA9IDA7Ci0gIF9hc20gewotICAgIHB1c2ggZWJ4ICAgICAgICAgIC8vQ1BVSUQgd2lsbCB0cmFzaCB0aGVzZQotICAgIHB1c2ggZWN4Ci0gICAgcHVzaCBlZHgKLQotICAgIHB1c2hmZCAgICAgICAgICAgIC8vU2F2ZSBFZmxhZyB0byBzdGFjawotICAgIHBvcCBlYXggICAgICAgICAgIC8vR2V0IEVmbGFnIGZyb20gc3RhY2sgaW50byBlYXgKLSAgICBtb3YgZWN4LCBlYXggICAgICAvL01ha2UgYW5vdGhlciBjb3B5IG9mIEVmbGFnIGluIGVjeAotICAgIHhvciBlYXgsIDB4MjAwMDAwIC8vVG9nZ2xlIElEIGJpdCBpbiBFZmxhZyBbaS5lLiBiaXQoMjEpXQotICAgIHB1c2ggZWF4ICAgICAgICAgIC8vU2F2ZSBtb2RpZmllZCBFZmxhZyBiYWNrIHRvIHN0YWNrCi0KLSAgICBwb3BmZCAgICAgICAgICAgICAvL1Jlc3RvcmVkIG1vZGlmaWVkIHZhbHVlIGJhY2sgdG8gRWZsYWcgcmVnCi0gICAgcHVzaGZkICAgICAgICAgICAgLy9TYXZlIEVmbGFnIHRvIHN0YWNrCi0gICAgcG9wIGVheCAgICAgICAgICAgLy9HZXQgRWZsYWcgZnJvbSBzdGFjawotICAgIHB1c2ggZWN4ICAgICAgICAgIC8vIHNhdmUgb3JpZ2luYWwgRWZsYWcgdG8gc3RhY2sKLSAgICBwb3BmZCAgICAgICAgICAgICAvLyByZXN0b3JlIG9yaWdpbmFsIEVmbGFnCi0gICAgeG9yIGVheCwgZWN4ICAgICAgLy9Db21wYXJlIHRoZSBuZXcgRWZsYWcgd2l0aCB0aGUgb3JpZ2luYWwgRWZsYWcKLSAgICBqeiBOT1RfU1VQUE9SVEVEICAvL0lmIHRoZSBzYW1lLCBDUFVJRCBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLAotICAgICAgICAgICAgICAgICAgICAgIC8vc2tpcCBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGFuZCBqdW1wIHRvCi0gICAgICAgICAgICAgICAgICAgICAgLy9OT1RfU1VQUE9SVEVEIGxhYmVsCi0KLSAgICB4b3IgZWF4LCBlYXggICAgICAvL1NldCBlYXggdG8gemVybwotCi0gICAgX2FzbSBfZW1pdCAweDBmICAgLy9DUFVJRCBpbnN0cnVjdGlvbiAgKHR3byBieXRlcyBvcGNvZGUpCi0gICAgX2FzbSBfZW1pdCAweGEyCi0KLSAgICBjbXAgZWF4LCAxICAgICAgICAvL21ha2Ugc3VyZSBlYXggcmV0dXJuIG5vbi16ZXJvIHZhbHVlCi0gICAgamwgTk9UX1NVUFBPUlRFRCAgLy9JZiBlYXggaXMgemVybywgbW14IG5vdCBzdXBwb3J0ZWQKLQotICAgIHhvciBlYXgsIGVheCAgICAgIC8vc2V0IGVheCB0byB6ZXJvCi0gICAgaW5jIGVheCAgICAgICAgICAgLy9Ob3cgaW5jcmVtZW50IGVheCB0byAxLiAgVGhpcyBpbnN0cnVjdGlvbiBpcwotICAgICAgICAgICAgICAgICAgICAgIC8vZmFzdGVyIHRoYW4gdGhlIGluc3RydWN0aW9uICJtb3YgZWF4LCAxIgotCi0gICAgX2FzbSBfZW1pdCAweDBmICAgLy9DUFVJRCBpbnN0cnVjdGlvbgotICAgIF9hc20gX2VtaXQgMHhhMgotCi0gICAgYW5kIGVkeCwgMHgwMDgwMDAwMCAgLy9tYXNrIG91dCBhbGwgYml0cyBidXQgbW14IGJpdCgyNCkKLSAgICBjbXAgZWR4LCAwICAgICAgICAvLyAwID0gbW14IG5vdCBzdXBwb3J0ZWQKLSAgICBqeiAgTk9UX1NVUFBPUlRFRCAvLyBub24temVybyA9IFllcywgbW14IElTIHN1cHBvcnRlZAotCi0gICAgbW92ICBtbXhfc3VwcG9ydGVkX2xvY2FsLCAxICAvL3NldCByZXR1cm4gdmFsdWUgdG8gMQotCi1OT1RfU1VQUE9SVEVEOgotICAgIG1vdiAgZWF4LCBtbXhfc3VwcG9ydGVkX2xvY2FsICAvL21vdmUgcmV0dXJuIHZhbHVlIHRvIGVheAotICAgIHBvcCBlZHggICAgICAgICAgLy9DUFVJRCB0cmFzaGVkIHRoZXNlCi0gICAgcG9wIGVjeAotICAgIHBvcCBlYngKLSAgfQotCi0gIC8vbW14X3N1cHBvcnRlZF9sb2NhbD0wOyAvLyB0ZXN0IGNvZGUgZm9yIGZvcmNlIGRvbid0IHN1cHBvcnQgTU1YCi0gIC8vcHJpbnRmKCJNTVggOiAldSAoMT1NTVggc3VwcG9ydGVkKVxuIixtbXhfc3VwcG9ydGVkX2xvY2FsKTsKLQotICBtbXhfc3VwcG9ydGVkID0gbW14X3N1cHBvcnRlZF9sb2NhbDsKLSAgcmV0dXJuIG1teF9zdXBwb3J0ZWRfbG9jYWw7Ci19Ci0KLS8qIENvbWJpbmVzIHRoZSByb3cgcmVjZW50bHkgcmVhZCBpbiB3aXRoIHRoZSBwcmV2aW91cyByb3cuCi0gICBUaGlzIHJvdXRpbmUgdGFrZXMgY2FyZSBvZiBhbHBoYSBhbmQgdHJhbnNwYXJlbmN5IGlmIHJlcXVlc3RlZC4KLSAgIFRoaXMgcm91dGluZSBhbHNvIGhhbmRsZXMgdGhlIHR3byBtZXRob2RzIG9mIHByb2dyZXNzaXZlIGRpc3BsYXkKLSAgIG9mIGludGVybGFjZWQgaW1hZ2VzLCBkZXBlbmRpbmcgb24gdGhlIG1hc2sgdmFsdWUuCi0gICBUaGUgbWFzayB2YWx1ZSBkZXNjcmliZXMgd2hpY2ggcGl4ZWxzIGFyZSB0byBiZSBjb21iaW5lZCB3aXRoCi0gICB0aGUgcm93LiAgVGhlIHBhdHRlcm4gYWx3YXlzIHJlcGVhdHMgZXZlcnkgOCBwaXhlbHMsIHNvIGp1c3QgOAotICAgYml0cyBhcmUgbmVlZGVkLiAgQSBvbmUgaW5kaWNhdGVzIHRoZSBwaXhlbCBpcyB0byBiZSBjb21iaW5lZDsgYQotICAgemVybyBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIHNraXBwZWQuICBUaGlzIGlzIGluIGFkZGl0aW9uCi0gICB0byBhbnkgYWxwaGEgb3IgdHJhbnNwYXJlbmN5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGl4ZWwuICBJZgotICAgeW91IHdhbnQgYWxsIHBpeGVscyB0byBiZSBjb21iaW5lZCwgcGFzcyAweGZmICgyNTUpIGluIG1hc2suICAqLwotCi0vKiBVc2UgdGhpcyByb3V0aW5lIGZvciB4ODYgcGxhdGZvcm0gLSB1c2VzIGZhc3RlciBNTVggcm91dGluZSBpZiBtYWNoaW5lCi0gICBzdXBwb3J0cyBNTVggKi8KLQotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfY29tYmluZV9yb3cocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIHJvdywgaW50IG1hc2spCi17Ci0gICBzdGF0aWMgUE5HX0NPTlNUIGludCBvZmZzZXRfdGFibGVbN10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07Ci0KLSAgIHBuZ19kZWJ1ZygxLCJpbiBwbmdfY29tYmluZV9yb3dfYXNtXG4iKTsKLQotICAgaWYgKG1teF9zdXBwb3J0ZWQgPT0gMikgewotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KLSAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7Ci0jZW5kaWYKLSAgICAgICBwbmdfbW14X3N1cHBvcnQoKTsKLSAgIH0KLQotICAgaWYgKG1hc2sgPT0gMHhmZikKLSAgIHsKLSAgICAgIHBuZ19tZW1jcHkocm93LCBwbmdfcHRyLT5yb3dfYnVmICsgMSwKLSAgICAgICAocG5nX3NpemVfdClQTkdfUk9XQllURVMocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgsCi0gICAgICAgcG5nX3B0ci0+d2lkdGgpKTsKLSAgIH0KLSAgIC8qIEdSUjogIGFkZCAiZWxzZSBpZiAobWFzayA9PSAwKSIgY2FzZT8KLSAgICAqICAgICAgIG9yIGRvZXMgcG5nX2NvbWJpbmVfcm93KCkgbm90IGV2ZW4gZ2V0IGNhbGxlZCBpbiB0aGF0IGNhc2U/ICovCi0gICBlbHNlCi0gICB7Ci0gICAgICBzd2l0Y2ggKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoKQotICAgICAgewotICAgICAgICAgY2FzZSAyNDoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwotICAgICAgICAgICAgaW50IHVubWFzaywgZGlmZjsKLQotICAgICAgICAgICAgc3RhdGljIFBOR19DT05TVCBfX2ludDY0IGJwcDI0X21hc2syPTB4MDEwMTAxMDIwMjAyMDQwNCwgIC8vMjRicHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHAyNF9tYXNrMT0weDA0MDgwODA4MTAxMDEwMjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBwMjRfbWFzazA9MHgyMDIwNDA0MDQwODA4MDgwOwotCi0gICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLQotICAgICAgICAgICAgdW5tYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICBsZW4gICAgID0gKHBuZ19wdHItPndpZHRoKSZ+NzsKLSAgICAgICAgICAgIGRpZmYgPSAocG5nX3B0ci0+d2lkdGgpJjc7Ci0KLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSAgICAgICAgICAgICAgICAvKiAmJiBtbXhfc3VwcG9ydGVkICovICkKLSNlbHNlCi0gICAgICAgICAgICBpZiAobW14X3N1cHBvcnRlZCkKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbW92ZCAgICAgICBtbTcsIHVubWFzayAgICAgICAvL2xvYWQgYml0IHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgIHBzdWJiICAgICAgbW02LG1tNiAgICAgICAgICAgLy96ZXJvIG1tNgotICAgICAgICAgICAgICAgICAgcHVucGNrbGJ3ICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsd2QgIG1tNyxtbTcKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSAgbW03LG1tNyAgICAgICAgICAgLy9maWxsIHJlZ2lzdGVyIHdpdGggOCBtYXNrcwotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMCxicHAyNF9tYXNrMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTEsYnBwMjRfbWFzazEKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0yLGJwcDI0X21hc2syCi0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0wLG1tNwotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTEsbW03Ci0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMixtbTcKLQotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTAsbW02Ci0gICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tMSxtbTYKLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0yLG1tNgotCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVjeCxsZW4gICAgICAgICAgIC8vbG9hZCBsZW5ndGggb2YgbGluZQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlc2ksc3JjcHRyICAgICAgICAvL2xvYWQgc291cmNlCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVieCxkc3RwdHIgICAgICAgIC8vbG9hZCBkZXN0Ci0gICAgICAgICAgICAgICAgICBjbXAgICAgICAgIGVjeCwwCi0gICAgICAgICAgICAgICAgICBqeiAgICAgICAgIG1haW5sb29wMjRlbmQKLQotbWFpbmxvb3AyNDoKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW00LFtlc2ldCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNCxtbTAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LG1tMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsW2VieF0KLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW02LG1tNwotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTQsbW02Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYnhdLG1tNAotCi0KLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW01LFtlc2krOF0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW01LG1tMQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsbW0xCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixbZWJ4KzhdCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNyxtbTYKLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW01LG1tNwotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzhdLG1tNQotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixbZXNpKzE2XQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTYsbW0yCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNCxtbTIKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW03LFtlYngrMTZdCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNCxtbTcKLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW02LG1tNAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzE2XSxtbTYKLQotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksMjQgICAgICAgICAgICAvL2luYyBieSAyNCBieXRlcyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDI0Ci0gICAgICAgICAgICAgICAgICBzdWIgICAgICAgIGVjeCw4ICAgICAgICAgICAgIC8vZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotCi0gICAgICAgICAgICAgICAgICBqYSAgICAgICAgIG1haW5sb29wMjQKLQotbWFpbmxvb3AyNGVuZDoKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGRpZmYKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAKLSAgICAgICAgICAgICAgICAgIGp6ICAgICAgICAgZW5kMjQKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlZHgsbWFzawotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMjQgICAgICAgICAgICAvL21ha2UgbG93IGJ5dGUgdGhlIGhpZ2ggYnl0ZQotc2Vjb25kbG9vcDI0OgotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMSAgICAgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDI0ICAgICAgICAgICAgLy9pZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgYXgsW2VzaV0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgW2VieF0sYXgKLSAgICAgICAgICAgICAgICAgIHhvciAgICAgICAgZWF4LGVheAotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBhbCxbZXNpKzJdCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIFtlYngrMl0sYWwKLXNraXAyNDoKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZXNpLDMKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDMKLQotICAgICAgICAgICAgICAgICAgZGVjICAgICAgICBlY3gKLSAgICAgICAgICAgICAgICAgIGpueiAgICAgICAgc2Vjb25kbG9vcDI0Ci0KLWVuZDI0OgotICAgICAgICAgICAgICAgICAgZW1tcwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggbm90IHN1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpbmNyMSwgaW5pdGlhbF92YWwsIGZpbmFsX3ZhbDsKLSAgICAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGRpc3AgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0KLSAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoID4+IDMpOwotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qCi0gICAgICAgICAgICAgICAgICBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGluaXRpYWxfdmFsID0gb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgZmluYWxfdmFsID0gcG5nX3B0ci0+d2lkdGgqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbmNyMSA9IChkaXNwKSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IGluY3IxKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAqLwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLy8gZW5kIDI0IGJwcAotCi0gICAgICAgICBjYXNlIDMyOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBsZW47Ci0gICAgICAgICAgICBpbnQgdW5tYXNrLCBkaWZmOwotCi0gICAgICAgICAgICBzdGF0aWMgUE5HX0NPTlNUIF9faW50NjQgYnBwMzJfbWFzazM9MHgwMTAxMDEwMTAyMDIwMjAyLCAgLy8zMmJwcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwcDMyX21hc2syPTB4MDQwNDA0MDQwODA4MDgwOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHAzMl9tYXNrMT0weDEwMTAxMDEwMjAyMDIwMjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBwMzJfbWFzazA9MHg0MDQwNDA0MDgwODA4MDgwOwotCi0gICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLQotICAgICAgICAgICAgdW5tYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICBsZW4gICAgID0gKHBuZ19wdHItPndpZHRoKSZ+NzsKLSAgICAgICAgICAgIGRpZmYgPSAocG5nX3B0ci0+d2lkdGgpJjc7Ci0KLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKLSAgICAgICAgICAgICAgICAvKiAmJiBtbXhfc3VwcG9ydGVkICovICkKLSNlbHNlCi0gICAgICAgICAgICBpZiAobW14X3N1cHBvcnRlZCkKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbW92ZCAgICAgICBtbTcsIHVubWFzayAgICAgICAvL2xvYWQgYml0IHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgIHBzdWJiICAgICAgbW02LG1tNiAgICAgICAgICAgLy96ZXJvIG1tNgotICAgICAgICAgICAgICAgICAgcHVucGNrbGJ3ICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsd2QgIG1tNyxtbTcKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSAgbW03LG1tNyAgICAgICAgICAgLy9maWxsIHJlZ2lzdGVyIHdpdGggOCBtYXNrcwotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMCxicHAzMl9tYXNrMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTEsYnBwMzJfbWFzazEKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0yLGJwcDMyX21hc2syCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMyxicHAzMl9tYXNrMwotCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMCxtbTcKLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0xLG1tNwotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTIsbW03Ci0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMyxtbTcKLQotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTAsbW02Ci0gICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tMSxtbTYKLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0yLG1tNgotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTMsbW02Ci0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGxlbiAgICAgICAgICAgLy9sb2FkIGxlbmd0aCBvZiBsaW5lCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVzaSxzcmNwdHIgICAgICAgIC8vbG9hZCBzb3VyY2UKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWJ4LGRzdHB0ciAgICAgICAgLy9sb2FkIGRlc3QKLQotICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMCAgICAgICAgICAgICAvL2xjcgotICAgICAgICAgICAgICAgICAganogICAgICAgICBtYWlubG9vcDMyZW5kCi0KLW1haW5sb29wMzI6Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNCxbZXNpXQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTQsbW0wCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixtbTAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW03LFtlYnhdCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNixtbTcKLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW00LG1tNgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4XSxtbTQKLQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTUsW2VzaSs4XQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTUsbW0xCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxtbTEKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LFtlYngrOF0KLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW03LG1tNgotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTUsbW03Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYngrOF0sbW01Ci0KLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LFtlc2krMTZdCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNixtbTIKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW00LG1tMgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsW2VieCsxNl0KLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW00LG1tNwotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTYsbW00Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYngrMTZdLG1tNgotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxbZXNpKzI0XQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTcsbW0zCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNSxtbTMKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW00LFtlYngrMjRdCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNSxtbTQKLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW03LG1tNQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzI0XSxtbTcKLQotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksMzIgICAgICAgICAgICAvL2luYyBieSAzMiBieXRlcyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDMyCi0gICAgICAgICAgICAgICAgICBzdWIgICAgICAgIGVjeCw4ICAgICAgICAgICAgIC8vZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotCi0gICAgICAgICAgICAgICAgICBqYSAgICAgICAgIG1haW5sb29wMzIKLQotbWFpbmxvb3AzMmVuZDoKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGRpZmYKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAKLSAgICAgICAgICAgICAgICAgIGp6ICAgICAgICAgZW5kMzIKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlZHgsbWFzawotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMjQgICAgICAgICAgICAvL21ha2UgbG93IGJ5dGUgdGhlIGhpZ2ggYnl0ZQotc2Vjb25kbG9vcDMyOgotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMSAgICAgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDMyICAgICAgICAgICAgLy9pZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWF4LFtlc2ldCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIFtlYnhdLGVheAotc2tpcDMyOgotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksNAotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlYngsNAotCi0gICAgICAgICAgICAgICAgICBkZWMgICAgICAgIGVjeAotICAgICAgICAgICAgICAgICAgam56ICAgICAgICBzZWNvbmRsb29wMzIKLQotZW5kMzI6Ci0gICAgICAgICAgICAgICAgICBlbW1zCi0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG1teCBfbm90IHN1cHBvcnRlZCAtIFVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpbmNyMSwgaW5pdGlhbF92YWwsIGZpbmFsX3ZhbDsKLSAgICAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGRpc3AgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107Ci0KLSAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoID4+IDMpOwotICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qCi0gICAgICAgICAgICAgICAgICBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGluaXRpYWxfdmFsID0gb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgZmluYWxfdmFsID0gcG5nX3B0ci0+d2lkdGgqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbmNyMSA9IChkaXNwKSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IGluY3IxKQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IGluY3IxOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAqLwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0gICAgICAgLy8gZW5kIDMyIGJwcAotCi0gICAgICAgICBjYXNlIDg6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IGRpZmYsIHVubWFzazsKLQotICAgICAgICAgICAgc3RhdGljIFBOR19DT05TVCBfX2ludDY0IGJwcDA4X21hc2swPTB4MDEwMjA0MDgxMDIwNDA4MDsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQotICAgICAgICAgICAgICAgIC8qICYmIG1teF9zdXBwb3J0ZWQgKi8gKQotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLSAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgdW5tYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLy9yZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAotICAgICAgICAgICAgICAgZGlmZiA9IHBuZ19wdHItPndpZHRoICYgNzsgIC8vYW1vdW50IGxvc3QKLQotICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbW92ZCAgICAgICBtbTcsIHVubWFzayAgIC8vbG9hZCBiaXQgcGF0dGVybgotICAgICAgICAgICAgICAgICAgcHN1YmIgICAgICBtbTYsbW02ICAgICAgIC8vemVybyBtbTYKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xidyAgbW03LG1tNwotICAgICAgICAgICAgICAgICAgcHVucGNrbHdkICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgIG1tNyxtbTcgICAgICAgLy9maWxsIHJlZ2lzdGVyIHdpdGggOCBtYXNrcwotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMCxicHAwOF9tYXNrMAotCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMCxtbTcgICAgICAgLy9ub256ZXJvIGlmIGtlZXAgYnl0ZQotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTAsbW02ICAgICAgIC8vemVyb3MtPjFzLCB2IHZlcnNhCi0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGxlbiAgICAgICAvL2xvYWQgbGVuZ3RoIG9mIGxpbmUgKHBpeGVscykKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZXNpLHNyY3B0ciAgICAvL2xvYWQgc291cmNlCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVieCxkc3RwdHIgICAgLy9sb2FkIGRlc3QKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAgICAgICAgICAvL2xjcgotICAgICAgICAgICAgICAgICAgamUgICAgICAgICBtYWlubG9vcDhlbmQKLQotbWFpbmxvb3A4OgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTQsW2VzaV0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW00LG1tMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsbW0wCi0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNixbZWJ4XQotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTQsbW02Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYnhdLG1tNAotCi0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVzaSw4ICAgICAgICAgLy9pbmMgYnkgOCBieXRlcyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDgKLSAgICAgICAgICAgICAgICAgIHN1YiAgICAgICAgZWN4LDggICAgICAgICAvL2RlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKLQotICAgICAgICAgICAgICAgICAgamEgICAgICAgICBtYWlubG9vcDgKLW1haW5sb29wOGVuZDoKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsZGlmZgotICAgICAgICAgICAgICAgICAgY21wICAgICAgICBlY3gsMAotICAgICAgICAgICAgICAgICAganogICAgICAgICBlbmQ4Ci0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWR4LG1hc2sKLSAgICAgICAgICAgICAgICAgIHNhbCAgICAgICAgZWR4LDI0ICAgICAgICAvL21ha2UgbG93IGJ5dGUgdGhlIGhpZ2ggYnl0ZQotCi1zZWNvbmRsb29wODoKLSAgICAgICAgICAgICAgICAgIHNhbCAgICAgICAgZWR4LDEgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDggICAgICAgICAvL2lmIENGID0gMAotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBhbCxbZXNpXQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBbZWJ4XSxhbAotc2tpcDg6Ci0gICAgICAgICAgICAgICAgICBpbmMgICAgICAgIGVzaQotICAgICAgICAgICAgICAgICAgaW5jICAgICAgICBlYngKLQotICAgICAgICAgICAgICAgICAgZGVjICAgICAgICBlY3gKLSAgICAgICAgICAgICAgICAgIGpueiAgICAgICAgc2Vjb25kbG9vcDgKLWVuZDg6Ci0gICAgICAgICAgICAgICAgICBlbW1zCi0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIC8qIG1teCBub3Qgc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGluY3IxLCBpbml0aWFsX3ZhbCwgZmluYWxfdmFsOwotICAgICAgICAgICAgICAgcG5nX3NpemVfdCBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICAgICByZWdpc3RlciBpbnQgZGlzcCA9IHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKLQotICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggPj4gMyk7Ci0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSoKLSAgICAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgaW5pdGlhbF92YWwgPSBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBmaW5hbF92YWwgPSBwbmdfcHRyLT53aWR0aCpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGluY3IxID0gKGRpc3ApKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gaW5jcjEpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCBwaXhlbF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gaW5jcjE7Ci0gICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gaW5jcjE7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlICovCi0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfSAgICAgICAvLyBlbmQgOCBicHAKLQotICAgICAgICAgY2FzZSAxOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgaW50IHNfaW5jLCBzX3N0YXJ0LCBzX2VuZDsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IHNoaWZ0OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLQotICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRwID0gcm93OwotICAgICAgICAgICAgbSA9IDB4ODA7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgIHNfZW5kID0gNzsKLSAgICAgICAgICAgICAgICBzX2luYyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzX3N0YXJ0ID0gNzsKLSAgICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MTsKLSAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwKys7Ci0gICAgICAgICAgICAgICAgICBkcCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7Ci0KLSAgICAgICAgICAgICAgIGlmIChtID09IDEpCi0gICAgICAgICAgICAgICAgICBtID0gMHg4MDsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIG0gPj49IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLQotICAgICAgICAgY2FzZSAyOgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX2J5dGVwIHNwOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgaW50IHNoaWZ0OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIGludCB2YWx1ZTsKLQotICAgICAgICAgICAgc3AgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgIGRwID0gcm93OwotICAgICAgICAgICAgbSA9IDB4ODA7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDY7Ci0gICAgICAgICAgICAgICBzX2luYyA9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSA2OwotICAgICAgICAgICAgICAgc19lbmQgPSAwOwotICAgICAgICAgICAgICAgc19pbmMgPSAtMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweDM7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcCsrOwotICAgICAgICAgICAgICAgICAgZHArKzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKLSAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3A7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHA7Ci0gICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwotICAgICAgICAgICAgaW50IG07Ci0gICAgICAgICAgICBpbnQgc2hpZnQ7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgaW50IHZhbHVlOwotCi0gICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgZHAgPSByb3c7Ci0gICAgICAgICAgICBtID0gMHg4MDsKLSNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKLSAgICAgICAgICAgIGlmIChwbmdfcHRyLT50cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc19zdGFydCA9IDQ7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC00OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCpzcCA+PiBzaGlmdCkgJiAweGY7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBzaGlmdCkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKLSAgICAgICAgICAgICAgICAgIHNwKys7Ci0gICAgICAgICAgICAgICAgICBkcCsrOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7Ci0gICAgICAgICAgICAgICBpZiAobSA9PSAxKQotICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7Ci0gICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBtID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKLSAgICAgICAgICAgIGludCB1bm1hc2ssIGRpZmY7Ci0gICAgICAgICAgICBzdGF0aWMgUE5HX0NPTlNUIF9faW50NjQgYnBwMTZfbWFzazE9MHgwMTAxMDIwMjA0MDQwODA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwcDE2X21hc2swPTB4MTAxMDIwMjA0MDQwODA4MDsKLQotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQotICAgICAgICAgICAgICAgIC8qICYmIG1teF9zdXBwb3J0ZWQgKi8gKQotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKLQotICAgICAgICAgICAgICAgdW5tYXNrID0gfm1hc2s7Ci0gICAgICAgICAgICAgICBsZW4gICAgID0gKHBuZ19wdHItPndpZHRoKSZ+NzsKLSAgICAgICAgICAgICAgIGRpZmYgPSAocG5nX3B0ci0+d2lkdGgpJjc7Ci0gICAgICAgICAgICAgICBfYXNtCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBtb3ZkICAgICAgIG1tNywgdW5tYXNrICAgICAgIC8vbG9hZCBiaXQgcGF0dGVybgotICAgICAgICAgICAgICAgICAgcHN1YmIgICAgICBtbTYsbW02ICAgICAgICAgICAvL3plcm8gbW02Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsYncgIG1tNyxtbTcKLSAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCAgbW03LG1tNwotICAgICAgICAgICAgICAgICAgcHVucGNrbGRxICBtbTcsbW03ICAgICAgICAgICAvL2ZpbGwgcmVnaXN0ZXIgd2l0aCA4IG1hc2tzCi0KLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0wLGJwcDE2X21hc2swCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMSxicHAxNl9tYXNrMQotCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMCxtbTcKLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0xLG1tNwotCi0gICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tMCxtbTYKLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0xLG1tNgotCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVjeCxsZW4gICAgICAgICAgIC8vbG9hZCBsZW5ndGggb2YgbGluZQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlc2ksc3JjcHRyICAgICAgICAvL2xvYWQgc291cmNlCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVieCxkc3RwdHIgICAgICAgIC8vbG9hZCBkZXN0Ci0gICAgICAgICAgICAgICAgICBjbXAgICAgICAgIGVjeCwwICAgICAgICAgICAgIC8vbGNyCi0gICAgICAgICAgICAgICAgICBqeiAgICAgICAgIG1haW5sb29wMTZlbmQKLQotbWFpbmxvb3AxNjoKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW00LFtlc2ldCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNCxtbTAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LG1tMAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsW2VieF0KLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW02LG1tNwotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTQsbW02Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYnhdLG1tNAotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNSxbZXNpKzhdCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNSxtbTEKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW03LG1tMQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsW2VieCs4XQotICAgICAgICAgICAgICAgICAgcGFuZG4gICAgICBtbTcsbW02Ci0gICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNSxtbTcKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieCs4XSxtbTUKLQotICAgICAgICAgICAgICAgICAgYWRkICAgICAgICBlc2ksMTYgICAgICAgICAgICAvL2luYyBieSAxNiBieXRlcyBwcm9jZXNzZWQKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDE2Ci0gICAgICAgICAgICAgICAgICBzdWIgICAgICAgIGVjeCw4ICAgICAgICAgICAgIC8vZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAotCi0gICAgICAgICAgICAgICAgICBqYSAgICAgICAgIG1haW5sb29wMTYKLQotbWFpbmxvb3AxNmVuZDoKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWN4LGRpZmYKLSAgICAgICAgICAgICAgICAgIGNtcCAgICAgICAgZWN4LDAKLSAgICAgICAgICAgICAgICAgIGp6ICAgICAgICAgZW5kMTYKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlZHgsbWFzawotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMjQgICAgICAgICAgICAvL21ha2UgbG93IGJ5dGUgdGhlIGhpZ2ggYnl0ZQotc2Vjb25kbG9vcDE2OgotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMSAgICAgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDE2ICAgICAgICAgICAgLy9pZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgYXgsW2VzaV0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgW2VieF0sYXgKLXNraXAxNjoKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZXNpLDIKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZWJ4LDIKLQotICAgICAgICAgICAgICAgICAgZGVjICAgICAgICBlY3gKLSAgICAgICAgICAgICAgICAgIGpueiAgICAgICAgc2Vjb25kbG9vcDE2Ci1lbmQxNjoKLSAgICAgICAgICAgICAgICAgIGVtbXMKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgLyogbW14IG5vdCBzdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaW5jcjEsIGluaXRpYWxfdmFsLCBmaW5hbF92YWw7Ci0gICAgICAgICAgICAgICBwbmdfc2l6ZV90IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBkaXNwID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwotCi0gICAgICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCA+PiAzKTsKLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKgotICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbml0aWFsX3ZhbCA9IG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZpbmFsX3ZhbCA9IHBuZ19wdHItPndpZHRoKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8vIGVuZCAxNiBicHAKLQotICAgICAgICAgY2FzZSA0ODoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwotICAgICAgICAgICAgaW50IHVubWFzaywgZGlmZjsKLQotICAgICAgICAgICAgc3RhdGljIFBOR19DT05TVCBfX2ludDY0IGJwcDQ4X21hc2s1PTB4MDEwMTAxMDEwMTAxMDIwMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHA0OF9tYXNrND0weDAyMDIwMjAyMDQwNDA0MDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBwNDhfbWFzazM9MHgwNDA0MDgwODA4MDgwODA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJwcDQ4X21hc2syPTB4MTAxMDEwMTAxMDEwMjAyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicHA0OF9tYXNrMT0weDIwMjAyMDIwNDA0MDQwNDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnBwNDhfbWFzazA9MHg0MDQwODA4MDgwODA4MDgwOwotCi0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCi0gICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCi0jZWxzZQotICAgICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwotICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwotCi0gICAgICAgICAgICAgICB1bm1hc2sgPSB+bWFzazsKLSAgICAgICAgICAgICAgIGxlbiAgICAgPSAocG5nX3B0ci0+d2lkdGgpJn43OwotICAgICAgICAgICAgICAgZGlmZiA9IChwbmdfcHRyLT53aWR0aCkmNzsKLSAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIG1vdmQgICAgICAgbW03LCB1bm1hc2sgICAgICAgLy9sb2FkIGJpdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICBwc3ViYiAgICAgIG1tNixtbTYgICAgICAgICAgIC8vemVybyBtbTYKLSAgICAgICAgICAgICAgICAgIHB1bnBja2xidyAgbW03LG1tNwotICAgICAgICAgICAgICAgICAgcHVucGNrbHdkICBtbTcsbW03Ci0gICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgIG1tNyxtbTcgICAgICAgICAgIC8vZmlsbCByZWdpc3RlciB3aXRoIDggbWFza3MKLQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTAsYnBwNDhfbWFzazAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW0xLGJwcDQ4X21hc2sxCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tMixicHA0OF9tYXNrMgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTMsYnBwNDhfbWFzazMKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW00LGJwcDQ4X21hc2s0Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNSxicHA0OF9tYXNrNQotCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMCxtbTcKLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW0xLG1tNwotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTIsbW03Ci0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tMyxtbTcKLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW00LG1tNwotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTUsbW03Ci0KLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0wLG1tNgotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTEsbW02Ci0gICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tMixtbTYKLSAgICAgICAgICAgICAgICAgIHBjbXBlcWIgICAgbW0zLG1tNgotICAgICAgICAgICAgICAgICAgcGNtcGVxYiAgICBtbTQsbW02Ci0gICAgICAgICAgICAgICAgICBwY21wZXFiICAgIG1tNSxtbTYKLQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlY3gsbGVuICAgICAgICAgICAvL2xvYWQgbGVuZ3RoIG9mIGxpbmUKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZXNpLHNyY3B0ciAgICAgICAgLy9sb2FkIHNvdXJjZQotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBlYngsZHN0cHRyICAgICAgICAvL2xvYWQgZGVzdAotCi0gICAgICAgICAgICAgICAgICBjbXAgICAgICAgIGVjeCwwCi0gICAgICAgICAgICAgICAgICBqeiAgICAgICAgIG1haW5sb29wNDhlbmQKLQotbWFpbmxvb3A0ODoKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW03LFtlc2ldCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNyxtbTAKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LG1tMAotICAgICAgICAgICAgICAgICAgcGFuZG4gICAgICBtbTYsW2VieF0KLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW03LG1tNgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4XSxtbTcKLQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsW2VzaSs4XQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTYsbW0xCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxtbTEKLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW03LFtlYngrOF0KLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW02LG1tNwotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzhdLG1tNgotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixbZXNpKzE2XQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTYsbW0yCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxtbTIKLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW03LFtlYngrMTZdCi0gICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNixtbTcKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieCsxNl0sbW02Ci0KLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW03LFtlc2krMjRdCi0gICAgICAgICAgICAgICAgICBwYW5kICAgICAgIG1tNyxtbTMKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgbW02LG1tMwotICAgICAgICAgICAgICAgICAgcGFuZG4gICAgICBtbTYsW2VieCsyNF0KLSAgICAgICAgICAgICAgICAgIHBvciAgICAgICAgbW03LG1tNgotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBbZWJ4KzI0XSxtbTcKLQotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTYsW2VzaSszMl0KLSAgICAgICAgICAgICAgICAgIHBhbmQgICAgICAgbW02LG1tNAotICAgICAgICAgICAgICAgICAgbW92cSAgICAgICBtbTcsbW00Ci0gICAgICAgICAgICAgICAgICBwYW5kbiAgICAgIG1tNyxbZWJ4KzMyXQotICAgICAgICAgICAgICAgICAgcG9yICAgICAgICBtbTYsbW03Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIFtlYngrMzJdLG1tNgotCi0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNyxbZXNpKzQwXQotICAgICAgICAgICAgICAgICAgcGFuZCAgICAgICBtbTcsbW01Ci0gICAgICAgICAgICAgICAgICBtb3ZxICAgICAgIG1tNixtbTUKLSAgICAgICAgICAgICAgICAgIHBhbmRuICAgICAgbW02LFtlYngrNDBdCi0gICAgICAgICAgICAgICAgICBwb3IgICAgICAgIG1tNyxtbTYKLSAgICAgICAgICAgICAgICAgIG1vdnEgICAgICAgW2VieCs0MF0sbW03Ci0KLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZXNpLDQ4ICAgICAgICAgICAgLy9pbmMgYnkgMzIgYnl0ZXMgcHJvY2Vzc2VkCi0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVieCw0OAotICAgICAgICAgICAgICAgICAgc3ViICAgICAgICBlY3gsOCAgICAgICAgICAgICAvL2RlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKLQotICAgICAgICAgICAgICAgICAgamEgICAgICAgICBtYWlubG9vcDQ4Ci1tYWlubG9vcDQ4ZW5kOgotCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIGVjeCxkaWZmCi0gICAgICAgICAgICAgICAgICBjbXAgICAgICAgIGVjeCwwCi0gICAgICAgICAgICAgICAgICBqeiAgICAgICAgIGVuZDQ4Ci0KLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWR4LG1hc2sKLSAgICAgICAgICAgICAgICAgIHNhbCAgICAgICAgZWR4LDI0ICAgICAgICAgICAgLy9tYWtlIGxvdyBieXRlIHRoZSBoaWdoIGJ5dGUKLQotc2Vjb25kbG9vcDQ4OgotICAgICAgICAgICAgICAgICAgc2FsICAgICAgICBlZHgsMSAgICAgICAgICAgICAvL21vdmUgaGlnaCBiaXQgdG8gQ0YKLSAgICAgICAgICAgICAgICAgIGpuYyAgICAgICAgc2tpcDQ4ICAgICAgICAgICAgLy9pZiBDRiA9IDAKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgZWF4LFtlc2ldCi0gICAgICAgICAgICAgICAgICBtb3YgICAgICAgIFtlYnhdLGVheAotICAgICAgICAgICAgICAgICAgbW92ICAgICAgICBheCxbZXNpKzRdICAgICAgIC8vIFRoZXNlIDIgbGluZXMgYWRkZWQgMjAwNzA3MTcKLSAgICAgICAgICAgICAgICAgIG1vdiAgICAgICAgW2VieCs0XSxheCAgICAgICAvLyBHbGVubiBSLVAKLXNraXA0ODoKLSAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgZXNpLDYgICAgICAgICAgICAvLyBDaGFuZ2VkIDQgdG8gNiBvbiB0aGVzZSAyCi0gICAgICAgICAgICAgICAgICBhZGQgICAgICAgIGVieCw2ICAgICAgICAgICAgLy8gbGluZXMuICBHbGVubiBSLVAgMjAwNzA3MTcKLQotICAgICAgICAgICAgICAgICAgZGVjICAgICAgICBlY3gKLSAgICAgICAgICAgICAgICAgIGpueiAgICAgICAgc2Vjb25kbG9vcDQ4Ci0KLWVuZDQ4OgotICAgICAgICAgICAgICAgICAgZW1tcwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAvKiBtbXggX25vdCBzdXBwb3J0ZWQgLSBVc2UgbW9kaWZpZWQgQyByb3V0aW5lICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaW5jcjEsIGluaXRpYWxfdmFsLCBmaW5hbF92YWw7Ci0gICAgICAgICAgICAgICBwbmdfc2l6ZV90IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBkaXNwID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwotCi0gICAgICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCA+PiAzKTsKLSAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgb2Zmc2V0X3RhYmxlW3BuZ19wdHItPnBhc3NdKgotICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBpbml0aWFsX3ZhbCA9IG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgIGZpbmFsX3ZhbCA9IHBuZ19wdHItPndpZHRoKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKi8KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9ICAgICAgIC8vIGVuZCA0OCBicHAKLQotICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcHRyOwotICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwotICAgICAgICAgICAgcG5nX3NpemVfdCBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGRpc3AgPSBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107ICAvLyBnZXQgdGhlIG9mZnNldAotICAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGluY3IxLCBpbml0aWFsX3ZhbCwgZmluYWxfdmFsOwotCi0gICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCA+PiAzKTsKLSAgICAgICAgICAgIHNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSoKLSAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgZHAgPSByb3cgKyBvZmZzZXRfdGFibGVbcG5nX3B0ci0+cGFzc10qcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICBpbml0aWFsX3ZhbCA9IG9mZnNldF90YWJsZVtwbmdfcHRyLT5wYXNzXSpwaXhlbF9ieXRlczsKLSAgICAgICAgICAgIGZpbmFsX3ZhbCA9IHBuZ19wdHItPndpZHRoKnBpeGVsX2J5dGVzOwotICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgIHNwdHIgKz0gaW5jcjE7Ci0gICAgICAgICAgICAgICBkcCArPSBpbmNyMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgfSAvKiBlbmQgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkgKi8KLSAgIH0gLyogZW5kIGlmIChub24tdHJpdmlhbCBtYXNrKSAqLwotCi19IC8qIGVuZCBwbmdfY29tYmluZV9yb3coKSAqLwotCi0KLSNpZiBkZWZpbmVkKFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCkKLQotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfZG9fcmVhZF9pbnRlcmxhY2UocG5nX3N0cnVjdHAgcG5nX3B0cikKLXsKLSAgIHBuZ19yb3dfaW5mb3Agcm93X2luZm8gPSAmKHBuZ19wdHItPnJvd19pbmZvKTsKLSAgIHBuZ19ieXRlcCByb3cgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKLSAgIGludCBwYXNzID0gcG5nX3B0ci0+cGFzczsKLSAgIHBuZ191aW50XzMyIHRyYW5zZm9ybWF0aW9ucyA9IHBuZ19wdHItPnRyYW5zZm9ybWF0aW9uczsKLQotICAgcG5nX2RlYnVnKDEsImluIHBuZ19kb19yZWFkX2ludGVybGFjZVxuIik7Ci0KLSAgIGlmIChtbXhfc3VwcG9ydGVkID09IDIpIHsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCi0gICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwotI2VuZGlmCi0gICAgICAgcG5nX21teF9zdXBwb3J0KCk7Ci0gICB9Ci0KLSAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQotICAgewotICAgICAgcG5nX3VpbnRfMzIgZmluYWxfd2lkdGg7Ci0KLSAgICAgIGZpbmFsX3dpZHRoID0gcm93X2luZm8tPndpZHRoICogcG5nX3Bhc3NfaW5jW3Bhc3NdOwotCi0gICAgICBzd2l0Y2ggKHJvd19pbmZvLT5waXhlbF9kZXB0aCkKLSAgICAgIHsKLSAgICAgICAgIGNhc2UgMToKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBzcCwgZHA7Ci0gICAgICAgICAgICBpbnQgc3NoaWZ0LCBkc2hpZnQ7Ci0gICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwotICAgICAgICAgICAgcG5nX2J5dGUgdjsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgICAgc3AgPSByb3cgKyAocG5nX3NpemVfdCkoKHJvd19pbmZvLT53aWR0aCAtIDEpID4+IDMpOwotICAgICAgICAgICAgZHAgPSByb3cgKyAocG5nX3NpemVfdCkoKGZpbmFsX3dpZHRoIC0gMSkgPj4gMyk7Ci0jaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAodHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgc3NoaWZ0ID0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAoaW50KSgoZmluYWxfd2lkdGggKyA3KSAmIDcpOwotICAgICAgICAgICAgICAgc19zdGFydCA9IDc7Ci0gICAgICAgICAgICAgICBzX2VuZCA9IDA7Ci0gICAgICAgICAgICAgICBzX2luYyA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBzc2hpZnQgPSA3IC0gKGludCkoKHJvd19pbmZvLT53aWR0aCArIDcpICYgNyk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSA3IC0gKGludCkoKGZpbmFsX3dpZHRoICsgNykgJiA3KTsKLSAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgc19lbmQgPSA3OwotICAgICAgICAgICAgICAgc19pbmMgPSAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSByb3dfaW5mby0+d2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4MSk7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gZHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgZHAtLTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3AtLTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDI6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwotICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0KLSAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAyKTsKLSAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDIpOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDMpICYgMykgPDwgMSk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKChmaW5hbF93aWR0aCArIDMpICYgMykgPDwgMSk7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNjsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMyAtICgocm93X2luZm8tPndpZHRoICsgMykgJiAzKSkgPDwgMSk7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKDMgLSAoKGZpbmFsX3dpZHRoICsgMykgJiAzKSkgPDwgMSk7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNjsKLSAgICAgICAgICAgICAgIHNfaW5jID0gMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwotICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Myk7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHgzZjNmID4+ICg2IC0gZHNoaWZ0KSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKLSAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgZHAtLTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBzc2hpZnQgPSBzX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgc3AtLTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotCi0gICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwotICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwotICAgICAgICAgICAgaW50IHNfc3RhcnQsIHNfZW5kLCBzX2luYzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0KLSAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAxKTsKLSAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDEpOwotI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoKHJvd19pbmZvLT53aWR0aCArIDEpICYgMSkgPDwgMik7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKChmaW5hbF93aWR0aCArIDEpICYgMSkgPDwgMik7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gNDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gMDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gLTQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIHNzaGlmdCA9IChwbmdfc2l6ZV90KSgoMSAtICgocm93X2luZm8tPndpZHRoICsgMSkgJiAxKSkgPDwgMik7Ci0gICAgICAgICAgICAgICBkc2hpZnQgPSAocG5nX3NpemVfdCkoKDEgLSAoKGZpbmFsX3dpZHRoICsgMSkgJiAxKSkgPDwgMik7Ci0gICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgIHNfZW5kID0gNDsKLSAgICAgICAgICAgICAgIHNfaW5jID0gNDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBwbmdfYnl0ZSB2OwotICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgIHYgPSAocG5nX2J5dGUpKCgqc3AgPj4gc3NoaWZ0KSAmIDB4Zik7Ci0gICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHhmMGYgPj4gKDQgLSBkc2hpZnQpKSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodiA8PCBkc2hpZnQpOwotICAgICAgICAgICAgICAgICAgaWYgKGRzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICBkcC0tOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgaWYgKHNzaGlmdCA9PSBzX2VuZCkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICBzcC0tOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc3NoaWZ0ICs9IHNfaW5jOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0KLSAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHJvdXRpbmUgaXMgbW9kaWZpZWQKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBQTkdfQ09OU1QgX19pbnQ2NCBjb25zdDQgPSAweDAwMDAwMDAwMDBGRkZGRkY7Ci0gICAgICAgICAgICAvLyBzdGF0aWMgUE5HX0NPTlNUIF9faW50NjQgY29uc3Q1ID0gMHgwMDAwMDBGRkZGRkYwMDAwOyAgLy8gdW51c2VkLi4uCi0gICAgICAgICAgICBzdGF0aWMgUE5HX0NPTlNUIF9faW50NjQgY29uc3Q2ID0gMHgwMDAwMDAwMDAwMDAwMEZGOwotICAgICAgICAgICAgcG5nX2J5dGVwIHNwdHIsIGRwOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKLSAgICAgICAgICAgIHBuZ19zaXplX3QgcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSByb3dfaW5mby0+d2lkdGg7Ci0KLSAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PiAzKTsKLQotICAgICAgICAgICAgc3B0ciA9IHJvdyArICh3aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICBkcCA9IHJvdyArIChmaW5hbF93aWR0aCAtIDEpICogcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAvLyBOZXcgY29kZSBieSBOaXJhdiBDaGhhdHJhcGF0aSAtIEludGVsIENvcnBvcmF0aW9uCi0gICAgICAgICAgICAvLyBzaWduIGZpeCBieSBHUlIKLSAgICAgICAgICAgIC8vIE5PVEU6ICB0aGVyZSBpcyBOTyBNTVggY29kZSBmb3IgNDgtYml0IGFuZCA2NC1iaXQgaW1hZ2VzCi0KLSAgICAgICAgICAgIC8vIHVzZSBNTVggcm91dGluZSBpZiBtYWNoaW5lIHN1cHBvcnRzIGl0Ci0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFKQotICAgICAgICAgICAgICAgIC8qICYmIG1teF9zdXBwb3J0ZWQgKi8gKQotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gMykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgLSA4OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhfbW14ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDggb3IgOSBwaXgsIDI0IG9yIDI3IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgOQotbG9vcF9wYXNzNDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgOyBYIFggdjIgdjEgdjAgdjUgdjQgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW03LCBtbTAgICAgICAgOyBYIFggdjIgdjEgdjAgdjUgdjQgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW02LCBtbTAgICAgICAgOyBYIFggdjIgdjEgdjAgdjUgdjQgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMjQgICAgICAgOyB2MSB2MCB2NSB2NCB2MyAwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZCBtbTcsIGNvbnN0NCAgICA7IDAgMCAwIDAgMCB2NSB2NCB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNybHEgbW02LCAyNCAgICAgICA7IDAgMCAwIFggWCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW03ICAgICAgICA7IHYxIHYwIHY1IHY0IHYzIHY1IHY0IHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tNSwgbW02ICAgICAgIDsgMCAwIDAgWCBYIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwc2xscSBtbTYsIDggICAgICAgIDsgMCAwIFggWCB2MiB2MSB2MCAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAgICAgIDsgbW92ZSBxdWFkIHRvIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNybHEgbW01LCAxNiAgICAgICA7IDAgMCAwIDAgMCBYIFggdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmQgbW01LCBjb25zdDYgICAgOyAwIDAgMCAwIDAgMCAwIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwb3IgbW02LCBtbTUgICAgICAgIDsgMCAwIFggWCB2MiB2MSB2MCB2MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBbZWRpKzhdLCBtbTYgICA7IG1vdmUgZG91YmxlIHRvIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wX3Bhc3M0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14KjM7Ci0gICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqNjsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDM7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCA5ICAgLy8gKHBuZ19wYXNzX2luY1twYXNzXSAtIDEpKnBpeGVsX2J5dGVzCi1sb29wX3Bhc3MyOgotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBtbTAsIFtlc2ldICAgICA7IFggWCBYIFggWCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgcGFuZCBtbTAsIGNvbnN0NCAgICA7IDAgMCAwIDAgMCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICA7IDAgMCAwIDAgMCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgcHNsbHEgbW0wLCAxNiAgICAgICA7IDAgMCAwIHYyIHYxIHYwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTIsIG1tMCAgICAgICA7IDAgMCAwIHYyIHYxIHYwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgcHNsbHEgbW0wLCAyNCAgICAgICA7IHYyIHYxIHYwIDAgMCAwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgcHNybHEgbW0xLCA4ICAgICAgICA7IDAgMCAwIDAgMCAwIHYyIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3IgbW0wLCBtbTIgICAgICAgIDsgdjIgdjEgdjAgdjIgdjEgdjAgMCAwCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3IgbW0wLCBtbTEgICAgICAgIDsgdjIgdjEgdjAgdjIgdjEgdjAgdjIgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSs0XSwgbW0wICAgOyBtb3ZlIHRvIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgcHNybHEgbW0wLCAxNiAgICAgICA7IDAgMCB2MiB2MSB2MCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBbZWRpXSwgbW0wICAgICA7IG1vdmUgdG8gbWVtb3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCAzCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxMgotICAgICAgICAgICAgICAgICAgICAgICAgZGVjIGVjeAotICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3BfcGFzczIKLSAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpKSAqLwotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAyMSAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcwotbG9vcF9wYXNzMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgbW0wLCBbZXNpXSAgICAgOyBYIFggWCBYIFggdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhbmQgbW0wLCBjb25zdDQgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgOyAwIDAgMCAwIDAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMTYgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0yLCBtbTAgICAgICAgOyAwIDAgMCB2MiB2MSB2MCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMjQgICAgICAgOyB2MiB2MSB2MCAwIDAgMCAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzcmxxIG1tMSwgOCAgICAgICAgOyAwIDAgMCAwIDAgMCB2MiB2MQotICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0yICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIDAgMAotICAgICAgICAgICAgICAgICAgICAgICAgcG9yIG1tMCwgbW0xICAgICAgICA7IHYyIHYxIHYwIHYyIHYxIHYwIHYyIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMywgbW0wICAgICAgIDsgdjIgdjEgdjAgdjIgdjEgdjAgdjIgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzbGxxIG1tMCwgMTYgICAgICAgOyB2MCB2MiB2MSB2MCB2MiB2MSAwIDAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW00LCBtbTMgICAgICAgOyB2MiB2MSB2MCB2MiB2MSB2MCB2MiB2MQotICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNraGRxIG1tMywgbW0wICA7IHYwIHYyIHYxIHYwIHYyIHYxIHYwIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrMTZdICwgbW00Ci0gICAgICAgICAgICAgICAgICAgICAgICBwc3JscSBtbTAsIDMyICAgICAgIDsgMCAwIDAgMCB2MCB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzhdICwgbW0zCi0gICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTQgIDsgdjEgdjAgdjIgdjEgdjAgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDMKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMjQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc3ViIGVzaSwgMwotICAgICAgICAgICAgICAgICAgICAgICAgZGVjIGVjeAotICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3BfcGFzczAKLSAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDMgKi8KLQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMSkKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMykgPDwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDcKLWxvb3AxX3Bhc3M0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTAsIFtlc2ldICAgICA7IHYwIHYxIHYyIHYzIHY0IHY1IHY2IHY3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgIDsgdjAgdjEgdjIgdjMgdjQgdjUgdjYgdjcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xidyBtbTAsIG1tMCAgOyB2NCB2NCB2NSB2NSB2NiB2NiB2NyB2NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb3ZxIG1tMSwgbW0wICAgICA7IHYwIHYwIHYxIHYxIHYyIHYyIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toYncgbW0xLCBtbTEgIDt2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzhdLCBtbTEgICA7IG1vdmUgdG8gbWVtb3J5IHYwIHYxIHYyIGFuZCB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wICAgICA7IG1vdmUgdG8gbWVtb3J5IHY0IHY1IHY2IGFuZCB2NwotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3M0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjI7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC0tOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChwYXNzID09IDIpIHx8IChwYXNzID09IDMpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDIpIDw8IDIpOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCAzCi1sb29wMV9wYXNzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmQgbW0wLCBbZXNpXSAgICAgOyBYIFggWCBYIHYwIHYxIHYyIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsYncgbW0wLCBtbTAgIDsgdjAgdjAgdjEgdjEgdjIgdjIgdjMgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgOyB2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbHdkIG1tMCwgbW0wICA7IHYyIHYyIHYyIHYyIHYzIHYzIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tod2QgbW0xLCBtbTEgIDsgdjAgdjAgdjAgdjAgdjEgdjEgdjEgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMCAgICAgOyBtb3ZlIHRvIG1lbW9yeSB2MiBhbmQgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSs4XSwgbW0xICAgOyBtb3ZlIHRvIG1lbW9yeSB2MSAgICAgYW5kIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3MyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14KjQ7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC0tOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpIC8qICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkpICovCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAyKSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfYXNtCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZXNpLCBzcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWRpLCBkcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVjeCwgd2lkdGhfbW14Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAzMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMwotbG9vcDFfcGFzczA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZkIG1tMCwgW2VzaV0gICAgIDsgWCBYIFggWCB2MCB2MSB2MiB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICA7IFggWCBYIFggdjAgdjEgdjIgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xidyBtbTAsIG1tMCAgOyB2MCB2MCB2MSB2MSB2MiB2MiB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTIsIG1tMCAgICAgICA7IHYwIHYwIHYxIHYxIHYyIHYyIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsd2QgbW0wLCBtbTAgIDsgdjIgdjIgdjIgdjIgdjMgdjMgdjMgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0zLCBtbTAgICAgICAgOyB2MiB2MiB2MiB2MiB2MyB2MyB2MyB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbGRxIG1tMCwgbW0wICA7IHYzIHYzIHYzIHYzIHYzIHYzIHYzIHYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toZHEgbW0zLCBtbTMgIDsgdjIgdjIgdjIgdjIgdjIgdjIgdjIgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMCAgICAgOyBtb3ZlIHRvIG1lbW9yeSB2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNraHdkIG1tMiwgbW0yICA7IHYwIHYwIHYwIHYwIHYxIHYxIHYxIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkrOF0sIG1tMyAgIDsgbW92ZSB0byBtZW1vcnkgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW00LCBtbTIgICAgICAgOyB2MCB2MCB2MCB2MCB2MSB2MSB2MSB2MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVucGNrbGRxIG1tMiwgbW0yICA7IHYxIHYxIHYxIHYxIHYxIHYxIHYxIHYxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toZHEgbW00LCBtbTQgIDsgdjAgdjAgdjAgdjAgdjAgdjAgdjAgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSsxNl0sIG1tMiAgOyBtb3ZlIHRvIG1lbW9yeSB2MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzI0XSwgbW00ICA7IG1vdmUgdG8gbWVtb3J5IHYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAzMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3AxX3Bhc3MwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14Kjg7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgLyogSSBzaW1wbGlmaWVkIHRoaXMgcGFydCBpbiB2ZXJzaW9uIDEuMC40ZQotICAgICAgICAgICAgICAgICAgICAgICAgKiBoZXJlIGFuZCBpbiBzZXZlcmFsIG90aGVyIGluc3RhbmNlcyB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgKiBwaXhlbF9ieXRlcyA9PSAxICAtLSBHUi1QCi0gICAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgICAqIE9yaWdpbmFsIGNvZGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgICAgICAqIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAqIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAqIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICogICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBkcCAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgICAgICAgICogfQotICAgICAgICAgICAgICAgICAgICAgICAgKiBzcHRyIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgKiBSZXBsYWNlbWVudCBjb2RlIGlzIGluIHRoZSBuZXh0IHRocmVlIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRwLS0gPSAqc3B0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHItLTsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDEgKi8KLQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMikKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDYKLWxvb3AyX3Bhc3M0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBtbTAsIFtlc2ldICAgICAgICA7IFggWCBYIFggdjEgdjAgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCBtbTAsIG1tMCAgICAgOyB2MSB2MCB2MSB2MCB2MyB2MiB2MyB2MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCA4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWN4LCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcDJfcGFzczQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjQgLSAyKTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMTQKLWxvb3AyX3Bhc3MyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBtbTAsIFtlc2ldICAgICAgICA7IFggWCBYIFggdjEgdjAgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCBtbTAsIG1tMCAgICAgOyB2MSB2MCB2MSB2MCB2MyB2MiB2MyB2MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICA7IHYxIHYwIHYxIHYwIHYzIHYyIHYzIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICAgIDsgdjMgdjIgdjMgdjIgdjMgdjIgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgICAgOyB2MSB2MCB2MSB2MCB2MSB2MCB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA4XSwgbW0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWN4LCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcDJfcGFzczIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjggLSAyKTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpKSAqLwotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2FzbQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVzaSwgc3B0cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVkaSwgZHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlY3gsIHdpZHRoX21teAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMzAKLWxvb3AyX3Bhc3MwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZCBtbTAsIFtlc2ldICAgICAgICA7IFggWCBYIFggdjEgdjAgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2x3ZCBtbTAsIG1tMCAgICAgOyB2MSB2MCB2MSB2MCB2MyB2MiB2MyB2MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICA7IHYxIHYwIHYxIHYwIHYzIHYyIHYzIHYyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICAgIDsgdjMgdjIgdjMgdjIgdjMgdjIgdjMgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgICAgOyB2MSB2MCB2MSB2MCB2MSB2MCB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA4XSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAxNl0sIG1tMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgMjRdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDMyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWN4LCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcDJfcGFzczAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjE2IC0gMik7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAyICovCi0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDQpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsKLSAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfYXNtCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZXNpLCBzcHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWRpLCBkcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92IGVjeCwgd2lkdGhfbW14Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZXNpLCA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCAxMgotbG9vcDRfcGFzczQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMCwgW2VzaV0gICAgICA7IHYzIHYyIHYxIHYwIHY3IHY2IHY1IHY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgICA7IHYzIHYyIHYxIHYwIHY3IHY2IHY1IHY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICA7IHY3IHY2IHY1IHY0IHY3IHY2IHY1IHY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2toZHEgbW0xLCBtbTEgICA7IHYzIHYyIHYxIHYwIHYzIHYyIHYxIHYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGldLCBtbTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDhdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDE2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWN4LCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqbnogbG9vcDRfcGFzczQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNTVMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjQgLSA0KTsgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCo4IC0gNCk7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDI4Ci1sb29wNF9wYXNzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgIDsgdjMgdjIgdjEgdjAgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2xkcSBtbTAsIG1tMCAgIDsgdjcgdjYgdjUgdjQgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgIDsgdjMgdjIgdjEgdjAgdjMgdjIgdjEgdjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaV0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgOF0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpKzE2XSwgbW0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAyNF0sIG1tMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVzaSwgOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVkaSwgMzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlY3gsIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGpueiBsb29wNF9wYXNzMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1NUwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMTYgLSA0KTsgICAgICAgICAgICAvLyBzaWduIGZpeGVkCi0gICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAvKiAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpKSAqLwotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSkgOwotICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc20KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlc2ksIHNwdHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdiBlZGksIGRwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3YgZWN4LCB3aWR0aF9tbXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlZGksIDYwCi1sb29wNF9wYXNzMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgbW0wLCBbZXNpXSAgICAgICAgOyB2MyB2MiB2MSB2MCB2NyB2NiB2NSB2NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICA7IHYzIHYyIHYxIHYwIHY3IHY2IHY1IHY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwdW5wY2tsZHEgbW0wLCBtbTAgICAgIDsgdjcgdjYgdjUgdjQgdjcgdjYgdjUgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bnBja2hkcSBtbTEsIG1tMSAgICAgOyB2MyB2MiB2MSB2MCB2MyB2MiB2MSB2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpXSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyA4XSwgbW0wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZxIFtlZGkgKyAxNl0sIG1tMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgMjRdLCBtbTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSszMl0sIG1tMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92cSBbZWRpICsgNDBdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSsgNDhdLCBtbTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiBlc2ksIDgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdnEgW2VkaSArIDU2XSwgbW0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIgZWRpLCA2NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIGVjeCwgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgam56IGxvb3A0X3Bhc3MwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFTU1TCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7ICAgICAgICAgICAgLy8gc2lnbiBmaXhlZAotICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCozMiAtIDQpOyAgICAgICAgICAgIC8vIHNpZ24gZml4ZWQKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA0ICovCi0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDYpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCA2KTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNjsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gNjsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDYgKi8KLQotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIGVuZCBvZiBtbXhfc3VwcG9ydGVkICovCi0KLSAgICAgICAgICAgIGVsc2UgLyogTU1YIG5vdCBzdXBwb3J0ZWQ6ICB1c2UgbW9kaWZpZWQgQyBjb2RlIC0gdGFrZXMgYWR2YW50YWdlCi0gICAgICAgICAgICAgICAgICAqIG9mIGlubGluaW5nIG9mIG1lbWNweSBmb3IgYSBjb25zdGFudCAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IDEpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwotICAgICAgICAgICAgICAgICAgICAgc3B0ci0tOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMykKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDIpCi0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKLSAgICAgICAgICAgICAgICAgICAgIGludCBqOwotICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBwaXhlbF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBwaXhlbF9ieXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSA0KQotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gcGl4ZWxfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gNikKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwotICAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIHBpeGVsX2J5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IHBpeGVsX2J5dGVzOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBwaXhlbF9ieXRlczsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSAvKiBlbmQgb2YgTU1YIG5vdCBzdXBwb3J0ZWQgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICAgfSAvKiBlbmQgc3dpdGNoIChyb3dfaW5mby0+cGl4ZWxfZGVwdGgpICovCi0KLSAgICAgIHJvd19pbmZvLT53aWR0aCA9IGZpbmFsX3dpZHRoOwotCi0gICAgICByb3dfaW5mby0+cm93Ynl0ZXMgPSBQTkdfUk9XQllURVMocm93X2luZm8tPnBpeGVsX2RlcHRoLGZpbmFsX3dpZHRoKTsKLSAgIH0KLQotfQotCi0jZW5kaWYgLyogUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVEICovCi0KLQotLy8gVGhlc2UgZ2xvYmFsIGNvbnN0YW50cyBhcmUgZGVjbGFyZWQKLS8vIGhlcmUgdG8gZW5zdXJlIGFsaWdubWVudCBvbiA4LWJ5dGUgYm91bmRhcmllcy4KLSAgdW5pb24gdUFsbCB7Ci0gICAgIF9faW50NjQgdXNlOwotICAgICBkb3VibGUgIGRvdWJsZV9hbGlnbjsKLSAgICAgbG9uZyBsb25nIGxvbmdfbG9uZ19hbGlnbjsKLSAgfSA7Ci0gIHN0YXRpYyBQTkdfQ09OU1QgdW5pb24gdUFsbCBMQkNhcnJ5TWFzayA9IHsweDAxMDEwMTAxMDEwMTAxMDF9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJDbGVhck1hc2sgPSB7MHg3ZjdmN2Y3ZjdmN2Y3ZjdmfTsKLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBBdmVyYWdlIGZpbHRlciBkZWNvZGVyCi12b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X2F2Zyhwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwbmdfYnl0ZXAgcHJldl9yb3cpCi17Ci0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQKLSAgLy8gaGVyZSB0byBlbnN1cmUgYWxpZ25tZW50IG9uIDgtYnl0ZSBib3VuZGFyaWVzLgotICB1bmlvbiB1QWxsIEFjdGl2ZU1hc2ssIFNoaWZ0QnBwLCBTaGlmdFJlbTsKLQotICAgaW50IGJwcDsKLSAgIHBuZ191aW50XzMyIEZ1bGxMZW5ndGg7Ci0gICBwbmdfdWludF8zMiBNTVhMZW5ndGg7Ci0gICAvL3BuZ191aW50XzMyIGxlbjsKLSAgIGludCBkaWZmOwotCi0gICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgLy8gR2V0ICMgYnl0ZXMgcGVyIHBpeGVsCi0gICBGdWxsTGVuZ3RoICA9IHJvd19pbmZvLT5yb3dieXRlczsgLy8gIyBvZiBieXRlcyB0byBmaWx0ZXIKLSAgIF9hc20gewotICAgICAgICAgLy8gSW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLSAgICAgICAgIG1vdiBlZGksIHJvdyAgICAgICAgICAvLyBlZGkgPT0+IEF2Zyh4KQotICAgICAgICAgeG9yIGVieCwgZWJ4ICAgICAgICAgIC8vIGVieCA9PT4geAotICAgICAgICAgbW92IGVkeCwgZWRpCi0gICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdyAgICAgICAgICAgLy8gZXNpID09PiBQcmlvcih4KQotICAgICAgICAgc3ViIGVkeCwgYnBwICAgICAgICAgIC8vIGVkeCA9PT4gUmF3KHgtYnBwKQotCi0gICAgICAgICB4b3IgZWF4LCBlYXgKLSAgICAgICAgIC8vIENvbXB1dGUgdGhlIFJhdyB2YWx1ZSBmb3IgdGhlIGZpcnN0IGJwcCBieXRlcwotICAgICAgICAgLy8gICAgUmF3KHgpID0gQXZnKHgpICsgKFByaW9yKHgpLzIpCi1kYXZncmxwOgotICAgICAgICAgbW92IGFsLCBbZXNpICsgZWJ4XSAgIC8vIExvYWQgYWwgd2l0aCBQcmlvcih4KQotICAgICAgICAgaW5jIGVieAotICAgICAgICAgc2hyIGFsLCAxICAgICAgICAgICAgIC8vIGRpdmlkZSBieSAyCi0gICAgICAgICBhZGQgYWwsIFtlZGkrZWJ4LTFdICAgLy8gQWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKLSAgICAgICAgIGNtcCBlYngsIGJwcAotICAgICAgICAgbW92IFtlZGkrZWJ4LTFdLCBhbCAgICAvLyBXcml0ZSBiYWNrIFJhdyh4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVieAotICAgICAgICAgamIgZGF2Z3JscAotICAgICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50Ci0gICAgICAgICBtb3YgZGlmZiwgZWRpICAgICAgICAgLy8gdGFrZSBzdGFydCBvZiByb3cKLSAgICAgICAgIGFkZCBkaWZmLCBlYnggICAgICAgICAvLyBhZGQgYnBwCi0gICAgICAgICBhZGQgZGlmZiwgMHhmICAgICAgICAgLy8gYWRkIDcgKyA4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgIGFuZCBkaWZmLCAweGZmZmZmZmY4ICAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgICAgc3ViIGRpZmYsIGVkaSAgICAgICAgIC8vIHN1YnRyYWN0IGZyb20gc3RhcnQgPT0+IHZhbHVlIGVieCBhdCBhbGlnbm1lbnQKLSAgICAgICAgIGp6IGRhdmdnbwotICAgICAgICAgLy8gZml4IGFsaWdubWVudAotICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgYnl0ZXMgdXB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICAvLyAgICBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKLSAgICAgICAgIHhvciBlY3gsIGVjeAotZGF2Z2xwMToKLSAgICAgICAgIHhvciBlYXgsIGVheAotICAgICAgICAgbW92IGNsLCBbZXNpICsgZWJ4XSAgICAgICAgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCi0gICAgICAgICBtb3YgYWwsIFtlZHggKyBlYnhdICAvLyBsb2FkIGFsIHdpdGggUmF3KHgtYnBwKQotICAgICAgICAgYWRkIGF4LCBjeAotICAgICAgICAgaW5jIGVieAotICAgICAgICAgc2hyIGF4LCAxICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDIKLSAgICAgICAgIGFkZCBhbCwgW2VkaStlYngtMV0gIC8vIEFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAgICBjbXAgZWJ4LCBkaWZmICAgICAgICAgICAgICAvLyBDaGVjayBpZiBhdCBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgIG1vdiBbZWRpK2VieC0xXSwgYWwgICAgICAgIC8vIFdyaXRlIGJhY2sgUmF3KHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAgICBqYiBkYXZnbHAxICAgICAgICAgICAgICAgLy8gUmVwZWF0IHVudGlsIGF0IGFsaWdubWVudCBib3VuZGFyeQotZGF2Z2dvOgotICAgICAgICAgbW92IGVheCwgRnVsbExlbmd0aAotICAgICAgICAgbW92IGVjeCwgZWF4Ci0gICAgICAgICBzdWIgZWF4LCBlYnggICAgICAgICAgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAotICAgICAgICAgYW5kIGVheCwgMHgwMDAwMDAwNyAgIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICAgIHN1YiBlY3gsIGVheCAgICAgICAgICAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLSAgICAgICAgIG1vdiBNTVhMZW5ndGgsIGVjeAotICAgfSAvLyBlbmQgX2FzbSBibG9jawotICAgLy8gTm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93Ci0gICBzd2l0Y2ggKCBicHAgKQotICAgewotICAgICAgY2FzZSAzOgotICAgICAgewotICAgICAgICAgQWN0aXZlTWFzay51c2UgID0gMHgwMDAwMDAwMDAwZmZmZmZmOwotICAgICAgICAgU2hpZnRCcHAudXNlID0gMjQ7ICAgIC8vID09IDMgKiA4Ci0gICAgICAgICBTaGlmdFJlbS51c2UgPSA0MDsgICAgLy8gPT0gNjQgLSAyNAotICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICAvLyBSZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotICAgICAgICAgICAgbW92cSBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIG1vdiBlYngsIGRpZmYgICAgICAvLyBlYnggPT0+IHggPSBvZmZzZXQgdG8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICAgICBtb3ZxIG1tNSwgTEJDYXJyeU1hc2sKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdyAgICAgICAvLyBlZGkgPT0+IEF2Zyh4KQotICAgICAgICAgICAgbW92cSBtbTQsIEhCQ2xlYXJNYXNrCi0gICAgICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdyAgICAgICAgLy8gZXNpID09PiBQcmlvcih4KQotICAgICAgICAgICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZWRpICsgZWJ4IC0gOF0gIC8vIExvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zaXRpb24gaW4gbG9vcCBiZWxvdykKLWRhdmczbHA6Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgW2VkaSArIGVieF0gICAgICAvLyBMb2FkIG1tMCB3aXRoIEF2Zyh4KQotICAgICAgICAgICAgLy8gQWRkIChQcmV2X3Jvdy8yKSB0byBBdmVyYWdlCi0gICAgICAgICAgICBtb3ZxIG1tMywgbW01Ci0gICAgICAgICAgICBwc3JscSBtbTIsIFNoaWZ0UmVtICAgICAgLy8gQ29ycmVjdCBwb3NpdGlvbiBSYXcoeC1icHApIGRhdGEKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZXNpICsgZWJ4XSAgICAvLyBMb2FkIG1tMSB3aXRoIFByaW9yKHgpCi0gICAgICAgICAgICBtb3ZxIG1tNiwgbW03Ci0gICAgICAgICAgICBwYW5kIG1tMywgbW0xICAgICAgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCi0gICAgICAgICAgICBwc3JscSBtbTEsIDEgICAgICAgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgIG1tMSwgbW00ICAgICAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgIC8vIEFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIEF2ZXJhZ2Ugd2l0aCBMQkNhcnJ5Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0zICAgICAgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcgTEJDYXJyeXMKLSAgICAgICAgICAgIHBhbmQgbW0xLCBtbTIgICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChPbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCi0gICAgICAgICAgICBwc3JscSBtbTIsIDEgICAgICAgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTIsIG1tNCAgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMiwgbW0xICAgICAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFuZCBtbTIsIG1tNiAgICAgIC8vIExlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEgYnl0ZXMgdG8gYWRkIHRvIEF2ZwotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTIgICAgIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnIGZvciBlYWNoIEFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBieXRlCi0gICAgICAgICAgICAvLyBBZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBBdmVyYWdlIHdpdGggTEJDYXJyeQotICAgICAgICAgICAgcHNsbHEgbW02LCBTaGlmdEJwcCAgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyIGJ5dGVzIDMtNQotICAgICAgICAgICAgbW92cSBtbTIsIG1tMCAgICAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgIHBzbGxxIG1tMiwgU2hpZnRCcHAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0zICAgICAgICAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZyBMQkNhcnJ5cwotICAgICAgICAgICAgcGFuZCBtbTEsIG1tMiAgICAgIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlIHdoZXJlIGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgICAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgIG1tMiwgbW00ICAgICAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFkZGIgbW0yLCBtbTEgICAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW02ICAgICAgLy8gTGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMiBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMiAgICAgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcgZm9yIGVhY2ggQWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ5dGUKLQotICAgICAgICAgICAgLy8gQWRkIDNyZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gQXZlcmFnZSB3aXRoIExCQ2FycnkKLSAgICAgICAgICAgIHBzbGxxIG1tNiwgU2hpZnRCcHAgIC8vIHNoaWZ0IHRoZSBtbTYgbWFzayB0byBjb3ZlciB0aGUgbGFzdCB0d28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAgICAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgcHNsbHEgbW0yLCBTaGlmdEJwcCAgLy8gc2hpZnQgZGF0YSB0byBwb3NpdGlvbiBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgb25seSBuZWVkcyB0byBiZSBzaGlmdGVkIG9uY2UgaGVyZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBjb3JyZWN0IHgtYnBwIG9mZnNldC4KLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTMgICAgIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nIExCQ2FycnlzCi0gICAgICAgICAgICBwYW5kIG1tMSwgbW0yICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgcGFuZCAgbW0yLCBtbTQgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMiwgbW0xICAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW02ICAgICAvLyBMZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyIGJ5dGVzIHRvIGFkZCB0byBBdmcKLSAgICAgICAgICAgIGFkZCBlYngsIDgKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0yICAgIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnIGZvciBlYWNoIEFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotCi0gICAgICAgICAgICAvLyBOb3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieCAtIDhdLCBtbTAKLSAgICAgICAgICAgIC8vIE1vdmUgdXBkYXRlZCBSYXcoeCkgdG8gdXNlIGFzIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAvLyBtb3YgdXBkYXRlZCBSYXcoeCkgdG8gbW0yCi0gICAgICAgICAgICBqYiBkYXZnM2xwCi0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgICAgY2FzZSA2OgotICAgICAgY2FzZSA0OgotICAgICAgY2FzZSA3OgotICAgICAgY2FzZSA1OgotICAgICAgewotICAgICAgICAgQWN0aXZlTWFzay51c2UgID0gMHhmZmZmZmZmZmZmZmZmZmZmOyAgLy8gdXNlIHNoaWZ0IGJlbG93IHRvIGNsZWFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBpbmFjdGl2ZSBieXRlcwotICAgICAgICAgU2hpZnRCcHAudXNlID0gYnBwIDw8IDM7Ci0gICAgICAgICBTaGlmdFJlbS51c2UgPSA2NCAtIFNoaWZ0QnBwLnVzZTsKLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92cSBtbTQsIEhCQ2xlYXJNYXNrCi0gICAgICAgICAgICAvLyBSZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotICAgICAgICAgICAgbW92IGVieCwgZGlmZiAgICAgICAvLyBlYnggPT0+IHggPSBvZmZzZXQgdG8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICAgICAvLyBMb2FkIEFjdGl2ZU1hc2sgYW5kIGNsZWFyIGFsbCBieXRlcyBleGNlcHQgZm9yIDFzdCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIG1vdnEgbW03LCBBY3RpdmVNYXNrCi0gICAgICAgICAgICBtb3YgZWRpLCByb3cgICAgICAgICAvLyBlZGkgPT0+IEF2Zyh4KQotICAgICAgICAgICAgcHNybHEgbW03LCBTaGlmdFJlbQotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cgICAgLy8gZXNpID09PiBQcmlvcih4KQotICAgICAgICAgICAgbW92cSBtbTYsIG1tNwotICAgICAgICAgICAgbW92cSBtbTUsIExCQ2FycnlNYXNrCi0gICAgICAgICAgICBwc2xscSBtbTYsIFNoaWZ0QnBwICAvLyBDcmVhdGUgbWFzayBmb3IgMm5kIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZWRpICsgZWJ4IC0gOF0gIC8vIExvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3NpdGlvbiBpbiBsb29wIGJlbG93KQotZGF2ZzRscDoKLSAgICAgICAgICAgIG1vdnEgbW0wLCBbZWRpICsgZWJ4XQotICAgICAgICAgICAgcHNybHEgbW0yLCBTaGlmdFJlbSAgLy8gc2hpZnQgZGF0YSB0byBwb3NpdGlvbiBjb3JyZWN0bHkKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZXNpICsgZWJ4XQotICAgICAgICAgICAgLy8gQWRkIChQcmV2X3Jvdy8yKSB0byBBdmVyYWdlCi0gICAgICAgICAgICBtb3ZxIG1tMywgbW01Ci0gICAgICAgICAgICBwYW5kIG1tMywgbW0xICAgICAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKLSAgICAgICAgICAgIHBzcmxxIG1tMSwgMSAgICAgIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTEsIG1tNCAgICAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgLy8gQWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gQXZlcmFnZSB3aXRoIExCQ2FycnkKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTMgICAgIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nIExCQ2FycnlzCi0gICAgICAgICAgICBwYW5kIG1tMSwgbW0yICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgcGFuZCAgbW0yLCBtbTQgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMiwgbW0xICAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW03ICAgICAvLyBMZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxIGJ5dGVzIHRvIGFkZCB0byBBdmcKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0yICAgIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnIGZvciBlYWNoIEFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQotICAgICAgICAgICAgLy8gQWRkIDJuZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gQXZlcmFnZSB3aXRoIExCQ2FycnkKLSAgICAgICAgICAgIG1vdnEgbW0yLCBtbTAgICAgIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICBwc2xscSBtbTIsIFNoaWZ0QnBwIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0zICAgICAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZyBMQkNhcnJ5cwotICAgICAgICAgICAgcGFuZCBtbTEsIG1tMiAgICAgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUgd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChPbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCi0gICAgICAgICAgICBwc3JscSBtbTIsIDEgICAgICAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgIG1tMiwgbW00ICAgIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaCBieXRlCi0gICAgICAgICAgICBwYWRkYiBtbTIsIG1tMSAgICAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFuZCBtbTIsIG1tNiAgICAgLy8gTGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMiBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMiAgICAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZyBmb3IgZWFjaCBBY3RpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKLSAgICAgICAgICAgIGNtcCBlYngsIE1NWExlbmd0aAotICAgICAgICAgICAgLy8gTm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5Ci0gICAgICAgICAgICBtb3ZxIFtlZGkgKyBlYnggLSA4XSwgbW0wCi0gICAgICAgICAgICAvLyBQcmVwIFJhdyh4LWJwcCkgZm9yIG5leHQgbG9vcAotICAgICAgICAgICAgbW92cSBtbTIsIG1tMCAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgIGpiIGRhdmc0bHAKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOgotICAgICAgewotICAgICAgICAgQWN0aXZlTWFzay51c2UgID0gMHgwMDAwMDAwMDAwMDBmZmZmOwotICAgICAgICAgU2hpZnRCcHAudXNlID0gMTY7ICAgLy8gPT0gMiAqIDggICAgIFtCVUdGSVhdCi0gICAgICAgICBTaGlmdFJlbS51c2UgPSA0ODsgICAvLyA9PSA2NCAtIDE2ICAgW0JVR0ZJWF0KLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgLy8gTG9hZCBBY3RpdmVNYXNrCi0gICAgICAgICAgICBtb3ZxIG1tNywgQWN0aXZlTWFzawotICAgICAgICAgICAgLy8gUmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLSAgICAgICAgICAgIG1vdiBlYngsIGRpZmYgICAgIC8vIGVieCA9PT4geCA9IG9mZnNldCB0byBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgICAgIG1vdnEgbW01LCBMQkNhcnJ5TWFzawotICAgICAgICAgICAgbW92IGVkaSwgcm93ICAgICAgLy8gZWRpID09PiBBdmcoeCkKLSAgICAgICAgICAgIG1vdnEgbW00LCBIQkNsZWFyTWFzawotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cgIC8vIGVzaSA9PT4gUHJpb3IoeCkKLSAgICAgICAgICAgIC8vIFBSSU1FIHRoZSBwdW1wIChsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICBtb3ZxIG1tMiwgW2VkaSArIGVieCAtIDhdICAvLyBMb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zaXRpb24gaW4gbG9vcCBiZWxvdykKLWRhdmcybHA6Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgW2VkaSArIGVieF0KLSAgICAgICAgICAgIHBzcmxxIG1tMiwgU2hpZnRSZW0gIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5ICAgW0JVR0ZJWF0KLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZXNpICsgZWJ4XQotICAgICAgICAgICAgLy8gQWRkIChQcmV2X3Jvdy8yKSB0byBBdmVyYWdlCi0gICAgICAgICAgICBtb3ZxIG1tMywgbW01Ci0gICAgICAgICAgICBwYW5kIG1tMywgbW0xICAgICAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKLSAgICAgICAgICAgIHBzcmxxIG1tMSwgMSAgICAgIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTEsIG1tNCAgICAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2ggYnl0ZQotICAgICAgICAgICAgbW92cSBtbTYsIG1tNwotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgLy8gQWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gQXZlcmFnZSB3aXRoIExCQ2FycnkKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTMgICAgIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nIExCQ2FycnlzCi0gICAgICAgICAgICBwYW5kIG1tMSwgbW0yICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgotICAgICAgICAgICAgcGFuZCAgbW0yLCBtbTQgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMiwgbW0xICAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW02ICAgICAvLyBMZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxIGJ5dGVzIHRvIGFkZCB0byBBdmcKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0yIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCi0gICAgICAgICAgICAvLyBBZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBBdmVyYWdlIHdpdGggTEJDYXJyeQotICAgICAgICAgICAgcHNsbHEgbW02LCBTaGlmdEJwcCAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIgYnl0ZXMgMiAmIDMKLSAgICAgICAgICAgIG1vdnEgbW0yLCBtbTAgICAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKLSAgICAgICAgICAgIHBzbGxxIG1tMiwgU2hpZnRCcHAgLy8gc2hpZnQgZGF0YSB0byBwb3NpdGlvbiBjb3JyZWN0bHkKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTMgICAgICAgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcgTEJDYXJyeXMKLSAgICAgICAgICAgIHBhbmQgbW0xLCBtbTIgICAgICAgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUgd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgICAgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTIsIG1tNCAgICAgIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaCBieXRlCi0gICAgICAgICAgICBwYWRkYiBtbTIsIG1tMSAgICAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW02ICAgICAgIC8vIExlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIgYnl0ZXMgdG8gYWRkIHRvIEF2ZwotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLQotICAgICAgICAgICAgLy8gQWRkIHJkZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gQXZlcmFnZSB3aXRoIExCQ2FycnkKLSAgICAgICAgICAgIHBzbGxxIG1tNiwgU2hpZnRCcHAgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyIGJ5dGVzIDQgJiA1Ci0gICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAgIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICBwc2xscSBtbTIsIFNoaWZ0QnBwIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgb25seSBuZWVkcyB0byBiZSBzaGlmdGVkIG9uY2UgaGVyZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGNvcnJlY3QgeC1icHAgb2Zmc2V0LgotICAgICAgICAgICAgbW92cSBtbTEsIG1tMyAgICAgICAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZyBMQkNhcnJ5cwotICAgICAgICAgICAgcGFuZCBtbTEsIG1tMiAgICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAoT25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQotICAgICAgICAgICAgcHNybHEgbW0yLCAxICAgICAgICAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgIG1tMiwgbW00ICAgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMiwgbW0xICAgICAgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhbmQgbW0yLCBtbTYgICAgICAgLy8gTGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMiBieXRlcyB0byBhZGQgdG8gQXZnCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQotCi0gICAgICAgICAgICAvLyBBZGQgNHRoIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBBdmVyYWdlIHdpdGggTEJDYXJyeQotICAgICAgICAgICAgcHNsbHEgbW02LCBTaGlmdEJwcCAgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyIGJ5dGVzIDYgJiA3Ci0gICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgICAgICAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgotICAgICAgICAgICAgcHNsbHEgbW0yLCBTaGlmdEJwcCAgLy8gc2hpZnQgZGF0YSB0byBwb3NpdGlvbiBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgb25seSBuZWVkcyB0byBiZSBzaGlmdGVkIG9uY2UgaGVyZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBjb3JyZWN0IHgtYnBwIG9mZnNldC4KLSAgICAgICAgICAgIGFkZCBlYngsIDgKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTMgICAgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcgTEJDYXJyeXMKLSAgICAgICAgICAgIHBhbmQgbW0xLCBtbTIgICAgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUgd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKE9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTIsIG1tNCAgIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaCBieXRlCi0gICAgICAgICAgICBwYWRkYiBtbTIsIG1tMSAgIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKSBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW02ICAgIC8vIExlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIgYnl0ZXMgdG8gYWRkIHRvIEF2ZwotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKLQotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICAvLyBOb3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieCAtIDhdLCBtbTAKLSAgICAgICAgICAgIC8vIFByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCi0gICAgICAgICAgICBtb3ZxIG1tMiwgbW0wICAgIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCi0gICAgICAgICAgICBqYiBkYXZnMmxwCi0gICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAvLyBicHAgPT0gMQotICAgICAgewotICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICAvLyBSZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotICAgICAgICAgICAgbW92IGVieCwgZGlmZiAgICAgLy8gZWJ4ID09PiB4ID0gb2Zmc2V0IHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgICAgICAgbW92IGVkaSwgcm93ICAgICAgLy8gZWRpID09PiBBdmcoeCkKLSAgICAgICAgICAgIGNtcCBlYngsIEZ1bGxMZW5ndGggIC8vIFRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQotICAgICAgICAgICAgam5iIGRhdmcxZW5kCi0gICAgICAgICAgICAvLyBEbyBQYWV0aCBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cgICAgLy8gZXNpID09PiBQcmlvcih4KQotICAgICAgICAgICAgbW92IGVkeCwgZWRpCi0gICAgICAgICAgICB4b3IgZWN4LCBlY3ggICAgICAgICAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeCBpbiBsb29wIGJlbG93Ci0gICAgICAgICAgICBzdWIgZWR4LCBicHAgICAgICAgICAvLyBlZHggPT0+IFJhdyh4LWJwcCkKLWRhdmcxbHA6Ci0gICAgICAgICAgICAvLyBSYXcoeCkgPSBBdmcoeCkgKyAoKFJhdyh4LWJwcCkgKyBQcmlvcih4KSkvMikKLSAgICAgICAgICAgIHhvciBlYXgsIGVheAotICAgICAgICAgICAgbW92IGNsLCBbZXNpICsgZWJ4XSAgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCi0gICAgICAgICAgICBtb3YgYWwsIFtlZHggKyBlYnhdICAvLyBsb2FkIGFsIHdpdGggUmF3KHgtYnBwKQotICAgICAgICAgICAgYWRkIGF4LCBjeAotICAgICAgICAgICAgaW5jIGVieAotICAgICAgICAgICAgc2hyIGF4LCAxICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDIKLSAgICAgICAgICAgIGFkZCBhbCwgW2VkaStlYngtMV0gIC8vIEFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAgICAgICBjbXAgZWJ4LCBGdWxsTGVuZ3RoICAvLyBDaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKLSAgICAgICAgICAgIG1vdiBbZWRpK2VieC0xXSwgYWwgIC8vIFdyaXRlIGJhY2sgUmF3KHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICAgICAgICBqYiBkYXZnMWxwCi1kYXZnMWVuZDoKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSA4OiAgICAgICAgICAgICAvLyBicHAgPT0gOAotICAgICAgewotICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICAvLyBSZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAotICAgICAgICAgICAgbW92IGVieCwgZGlmZiAgICAgICAgICAgLy8gZWJ4ID09PiB4ID0gb2Zmc2V0IHRvIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgICAgICAgbW92cSBtbTUsIExCQ2FycnlNYXNrCi0gICAgICAgICAgICBtb3YgZWRpLCByb3cgICAgICAgICAgICAvLyBlZGkgPT0+IEF2Zyh4KQotICAgICAgICAgICAgbW92cSBtbTQsIEhCQ2xlYXJNYXNrCi0gICAgICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdyAgICAgICAvLyBlc2kgPT0+IFByaW9yKHgpCi0gICAgICAgICAgICAvLyBQUklNRSB0aGUgcHVtcCAobG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgbW92cSBtbTIsIFtlZGkgKyBlYnggLSA4XSAgLy8gTG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKE5PIE5FRUQgdG8gY29ycmVjdCBwb3NpdGlvbiBpbiBsb29wIGJlbG93KQotZGF2ZzhscDoKLSAgICAgICAgICAgIG1vdnEgbW0wLCBbZWRpICsgZWJ4XQotICAgICAgICAgICAgbW92cSBtbTMsIG1tNQotICAgICAgICAgICAgbW92cSBtbTEsIFtlc2kgKyBlYnhdCi0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBwYW5kIG1tMywgbW0xICAgICAgIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQotICAgICAgICAgICAgcHNybHEgbW0xLCAxICAgICAgICAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgotICAgICAgICAgICAgcGFuZCBtbTMsIG1tMiAgICAgICAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZSB3aGVyZSBib3RoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMQotICAgICAgICAgICAgcHNybHEgbW0yLCAxICAgICAgICAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgIG1tMSwgbW00ICAgICAgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0zICAgICAgLy8gYWRkIExCQ2FycnlzIHRvIEF2ZyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBwYW5kICBtbTIsIG1tNCAgICAgIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaCBieXRlCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMSAgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gQXZnIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0yICAgICAgLy8gYWRkIChSYXcvMikgdG8gQXZnIGZvciBlYWNoIGJ5dGUKLSAgICAgICAgICAgIGNtcCBlYngsIE1NWExlbmd0aAotICAgICAgICAgICAgbW92cSBbZWRpICsgZWJ4IC0gOF0sIG1tMAotICAgICAgICAgICAgbW92cSBtbTIsIG1tMCAgICAgICAvLyByZXVzZSBhcyBSYXcoeC1icHApCi0gICAgICAgICAgICBqYiBkYXZnOGxwCi0gICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAvLyBicHAgZ3JlYXRlciB0aGFuIDgKLSAgICAgIHsKLSAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICBtb3ZxIG1tNSwgTEJDYXJyeU1hc2sKLSAgICAgICAgICAgIC8vIFJlLWluaXQgYWRkcmVzcyBwb2ludGVycyBhbmQgb2Zmc2V0Ci0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmICAgICAgIC8vIGVieCA9PT4geCA9IG9mZnNldCB0byBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdyAgICAgICAgLy8gZWRpID09PiBBdmcoeCkKLSAgICAgICAgICAgIG1vdnEgbW00LCBIQkNsZWFyTWFzawotICAgICAgICAgICAgbW92IGVkeCwgZWRpCi0gICAgICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdyAgIC8vIGVzaSA9PT4gUHJpb3IoeCkKLSAgICAgICAgICAgIHN1YiBlZHgsIGJwcCAgICAgICAgLy8gZWR4ID09PiBSYXcoeC1icHApCi1kYXZnQWxwOgotICAgICAgICAgICAgbW92cSBtbTAsIFtlZGkgKyBlYnhdCi0gICAgICAgICAgICBtb3ZxIG1tMywgbW01Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgW2VzaSArIGVieF0KLSAgICAgICAgICAgIHBhbmQgbW0zLCBtbTEgICAgICAgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCi0gICAgICAgICAgICBtb3ZxIG1tMiwgW2VkeCArIGVieF0KLSAgICAgICAgICAgIHBzcmxxIG1tMSwgMSAgICAgICAgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKLSAgICAgICAgICAgIHBhbmQgbW0zLCBtbTIgICAgICAgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUgd2hlcmUgYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEKLSAgICAgICAgICAgIHBzcmxxIG1tMiwgMSAgICAgICAgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCi0gICAgICAgICAgICBwYW5kICBtbTEsIG1tNCAgICAgIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaCBieXRlCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMyAgICAgIC8vIGFkZCBMQkNhcnJ5cyB0byBBdmcgZm9yIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFuZCAgbW0yLCBtbTQgICAgICAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2ggYnl0ZQotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEgICAgICAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMiAgICAgIC8vIGFkZCAoUmF3LzIpIHRvIEF2ZyBmb3IgZWFjaCBieXRlCi0gICAgICAgICAgICBjbXAgZWJ4LCBNTVhMZW5ndGgKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieCAtIDhdLCBtbTAKLSAgICAgICAgICAgIGpiIGRhdmdBbHAKLSAgICAgICAgfSAvLyBlbmQgX2FzbSBibG9jawotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICB9ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuZCBzd2l0Y2ggKCBicHAgKQotCi0gICBfYXNtIHsKLSAgICAgICAgIC8vIE1NWCBhY2NlbGVyYXRpb24gY29tcGxldGUgbm93IGRvIGNsZWFuLXVwCi0gICAgICAgICAvLyBDaGVjayBpZiBhbnkgcmVtYWluaW5nIGJ5dGVzIGxlZnQgdG8gZGVjb2RlCi0gICAgICAgICBtb3YgZWJ4LCBNTVhMZW5ndGggICAgLy8gZWJ4ID09PiB4ID0gb2Zmc2V0IGJ5dGVzIHJlbWFpbmluZyBhZnRlciBNTVgKLSAgICAgICAgIG1vdiBlZGksIHJvdyAgICAgICAgICAvLyBlZGkgPT0+IEF2Zyh4KQotICAgICAgICAgY21wIGVieCwgRnVsbExlbmd0aCAgIC8vIFRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQotICAgICAgICAgam5iIGRhdmdlbmQKLSAgICAgICAgIC8vIERvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdyAgICAgLy8gZXNpID09PiBQcmlvcih4KQotICAgICAgICAgbW92IGVkeCwgZWRpCi0gICAgICAgICB4b3IgZWN4LCBlY3ggICAgICAgICAgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggaW4gbG9vcCBiZWxvdwotICAgICAgICAgc3ViIGVkeCwgYnBwICAgICAgICAgIC8vIGVkeCA9PT4gUmF3KHgtYnBwKQotZGF2Z2xwMjoKLSAgICAgICAgIC8vIFJhdyh4KSA9IEF2Zyh4KSArICgoUmF3KHgtYnBwKSArIFByaW9yKHgpKS8yKQotICAgICAgICAgeG9yIGVheCwgZWF4Ci0gICAgICAgICBtb3YgY2wsIFtlc2kgKyBlYnhdICAgLy8gbG9hZCBjbCB3aXRoIFByaW9yKHgpCi0gICAgICAgICBtb3YgYWwsIFtlZHggKyBlYnhdICAgLy8gbG9hZCBhbCB3aXRoIFJhdyh4LWJwcCkKLSAgICAgICAgIGFkZCBheCwgY3gKLSAgICAgICAgIGluYyBlYngKLSAgICAgICAgIHNociBheCwgMSAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDIKLSAgICAgICAgIGFkZCBhbCwgW2VkaStlYngtMV0gICAgLy8gQWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKLSAgICAgICAgIGNtcCBlYngsIEZ1bGxMZW5ndGggICAgLy8gQ2hlY2sgaWYgYXQgZW5kIG9mIGFycmF5Ci0gICAgICAgICBtb3YgW2VkaStlYngtMV0sIGFsICAgIC8vIFdyaXRlIGJhY2sgUmF3KHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVieAotICAgICAgICAgamIgZGF2Z2xwMgotZGF2Z2VuZDoKLSAgICAgICAgIGVtbXMgICAgICAgICAgICAgLy8gRW5kIE1NWCBpbnN0cnVjdGlvbnM7IHByZXAgZm9yIHBvc3NpYmxlIEZQIGluc3Rycy4KLSAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLX0KLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBQYWV0aCBmaWx0ZXIgZGVjb2Rlcgotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHByZXZfcm93KQotewotICAvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIGRlY2xhcmVkCi0gIC8vIGhlcmUgdG8gZW5zdXJlIGFsaWdubWVudCBvbiA4LWJ5dGUgYm91bmRhcmllcy4KLSAgdW5pb24gdUFsbCAgQWN0aXZlTWFzaywgQWN0aXZlTWFzazIsIEFjdGl2ZU1hc2tFbmQsIFNoaWZ0QnBwLCBTaGlmdFJlbTsKLQotICAgcG5nX3VpbnRfMzIgRnVsbExlbmd0aDsKLSAgIHBuZ191aW50XzMyIE1NWExlbmd0aDsKLSAgIC8vcG5nX3VpbnRfMzIgbGVuOwotICAgaW50IGJwcDsKLSAgIGludCBkaWZmOwotICAgLy9pbnQgcHRlbXA7Ci0gICBpbnQgcGF0ZW1wLCBwYnRlbXAsIHBjdGVtcDsKLQotICAgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7IC8vIEdldCAjIGJ5dGVzIHBlciBwaXhlbAotICAgRnVsbExlbmd0aCAgPSByb3dfaW5mby0+cm93Ynl0ZXM7IC8vICMgb2YgYnl0ZXMgdG8gZmlsdGVyCi0gICBfYXNtCi0gICB7Ci0gICAgICAgICB4b3IgZWJ4LCBlYnggICAgICAgIC8vIGVieCA9PT4geCBvZmZzZXQKLSAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgeG9yIGVkeCwgZWR4ICAgICAgICAvLyBlZHggPT0+IHgtYnBwIG9mZnNldAotICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgICAgIHhvciBlYXgsIGVheAotCi0gICAgICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKLSAgICAgICAgIC8vIE5vdGU6IHRoZSBmb3JtdWxhIHdvcmtzIG91dCB0byBiZSBhbHdheXMKLSAgICAgICAgIC8vICAgUGFldGgoeCkgPSBSYXcoeCkgKyBQcmlvcih4KSAgICAgIHdoZXJlIHggPCBicHAKLWRwdGhybHA6Ci0gICAgICAgICBtb3YgYWwsIFtlZGkgKyBlYnhdCi0gICAgICAgICBhZGQgYWwsIFtlc2kgKyBlYnhdCi0gICAgICAgICBpbmMgZWJ4Ci0gICAgICAgICBjbXAgZWJ4LCBicHAKLSAgICAgICAgIG1vdiBbZWRpICsgZWJ4IC0gMV0sIGFsCi0gICAgICAgICBqYiBkcHRocmxwCi0gICAgICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQKLSAgICAgICAgIG1vdiBkaWZmLCBlZGkgICAgICAgICAvLyB0YWtlIHN0YXJ0IG9mIHJvdwotICAgICAgICAgYWRkIGRpZmYsIGVieCAgICAgICAgIC8vIGFkZCBicHAKLSAgICAgICAgIHhvciBlY3gsIGVjeAotICAgICAgICAgYWRkIGRpZmYsIDB4ZiAgICAgICAgIC8vIGFkZCA3ICsgOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgICBhbmQgZGlmZiwgMHhmZmZmZmZmOCAgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKLSAgICAgICAgIHN1YiBkaWZmLCBlZGkgICAgICAgICAvLyBzdWJ0cmFjdCBmcm9tIHN0YXJ0ID09PiB2YWx1ZSBlYnggYXQgYWxpZ25tZW50Ci0gICAgICAgICBqeiBkcHRoZ28KLSAgICAgICAgIC8vIGZpeCBhbGlnbm1lbnQKLWRwdGhscDE6Ci0gICAgICAgICB4b3IgZWF4LCBlYXgKLSAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgIG1vdiBhbCwgW2VzaSArIGVieF0gICAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKLSAgICAgICAgIG1vdiBjbCwgW2VzaSArIGVkeF0gICAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICBzdWIgZWF4LCBlY3ggICAgICAgICAgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAgICBtb3YgcGF0ZW1wLCBlYXggICAgICAgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQotICAgICAgICAgeG9yIGVheCwgZWF4Ci0gICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICBtb3YgYWwsIFtlZGkgKyBlZHhdICAgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYWwKLSAgICAgICAgIHN1YiBlYXgsIGVjeCAgICAgICAgICAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICAgIG1vdiBlY3gsIGVheAotICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICBhZGQgZWF4LCBwYXRlbXAgICAgICAgLy8gcGN2ID0gcGF2ICsgcGJ2Ci0gICAgICAgICAvLyBwYyA9IGFicyhwY3YpCi0gICAgICAgICB0ZXN0IGVheCwgMHg4MDAwMDAwMAotICAgICAgICAganogZHB0aHBjYQotICAgICAgICAgbmVnIGVheCAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi1kcHRocGNhOgotICAgICAgICAgbW92IHBjdGVtcCwgZWF4ICAgICAgIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQotICAgICAgICAgLy8gcGIgPSBhYnMocGJ2KQotICAgICAgICAgdGVzdCBlY3gsIDB4ODAwMDAwMDAKLSAgICAgICAgIGp6IGRwdGhwYmEKLSAgICAgICAgIG5lZyBlY3ggICAgICAgICAgICAgICAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotZHB0aHBiYToKLSAgICAgICAgIG1vdiBwYnRlbXAsIGVjeCAgICAgICAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKLSAgICAgICAgIC8vIHBhID0gYWJzKHBhdikKLSAgICAgICAgIG1vdiBlYXgsIHBhdGVtcAotICAgICAgICAgdGVzdCBlYXgsIDB4ODAwMDAwMDAKLSAgICAgICAgIGp6IGRwdGhwYWEKLSAgICAgICAgIG5lZyBlYXggICAgICAgICAgICAgICAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwotZHB0aHBhYToKLSAgICAgICAgIG1vdiBwYXRlbXAsIGVheCAgICAgICAvLyBzYXZlIHBhIGZvciBsYXRlciB1c2UKLSAgICAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKLSAgICAgICAgIGNtcCBlYXgsIGVjeAotICAgICAgICAgam5hIGRwdGhhYmIKLSAgICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCi0gICAgICAgICBjbXAgZWN4LCBwY3RlbXAKLSAgICAgICAgIGpuYSBkcHRoYmJjCi0gICAgICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgICAgbW92IGNsLCBbZXNpICsgZWR4XSAgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgICAgam1wIGRwdGhwYWV0aAotZHB0aGJiYzoKLSAgICAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCi0gICAgICAgICBtb3YgY2wsIFtlc2kgKyBlYnhdICAgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGNsCi0gICAgICAgICBqbXAgZHB0aHBhZXRoCi1kcHRoYWJiOgotICAgICAgICAgLy8gcGEgPD0gcGI7IG5vdyB0ZXN0IGlmIHBhIDw9IHBjCi0gICAgICAgICBjbXAgZWF4LCBwY3RlbXAKLSAgICAgICAgIGpuYSBkcHRoYWJjCi0gICAgICAgICAvLyBwYSA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQotICAgICAgICAgbW92IGNsLCBbZXNpICsgZWR4XSAgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgICAgam1wIGRwdGhwYWV0aAotZHB0aGFiYzoKLSAgICAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKLSAgICAgICAgIG1vdiBjbCwgW2VkaSArIGVkeF0gIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCi1kcHRocGFldGg6Ci0gICAgICAgICBpbmMgZWJ4Ci0gICAgICAgICBpbmMgZWR4Ci0gICAgICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgotICAgICAgICAgYWRkIFtlZGkgKyBlYnggLSAxXSwgY2wKLSAgICAgICAgIGNtcCBlYngsIGRpZmYKLSAgICAgICAgIGpiIGRwdGhscDEKLWRwdGhnbzoKLSAgICAgICAgIG1vdiBlY3gsIEZ1bGxMZW5ndGgKLSAgICAgICAgIG1vdiBlYXgsIGVjeAotICAgICAgICAgc3ViIGVheCwgZWJ4ICAgICAgICAgIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKLSAgICAgICAgIGFuZCBlYXgsIDB4MDAwMDAwMDcgICAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA4Ci0gICAgICAgICBzdWIgZWN4LCBlYXggICAgICAgICAgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi0gICAgICAgICBtb3YgTU1YTGVuZ3RoLCBlY3gKLSAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgIC8vIE5vdyBkbyB0aGUgbWF0aCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJvdwotICAgc3dpdGNoICggYnBwICkKLSAgIHsKLSAgICAgIGNhc2UgMzoKLSAgICAgIHsKLSAgICAgICAgIEFjdGl2ZU1hc2sudXNlID0gMHgwMDAwMDAwMDAwZmZmZmZmOwotICAgICAgICAgQWN0aXZlTWFza0VuZC51c2UgPSAweGZmZmYwMDAwMDAwMDAwMDA7Ci0gICAgICAgICBTaGlmdEJwcC51c2UgPSAyNDsgICAgLy8gPT0gYnBwKDMpICogOAotICAgICAgICAgU2hpZnRSZW0udXNlID0gNDA7ICAgIC8vID09IDY0IC0gMjQKLSAgICAgICAgIF9hc20KLSAgICAgICAgIHsKLSAgICAgICAgICAgIG1vdiBlYngsIGRpZmYKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIC8vIFBSSU1FIHRoZSBwdW1wIChsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgW2VkaStlYngtOF0KLWRwdGgzbHA6Ci0gICAgICAgICAgICBwc3JscSBtbTEsIFNoaWZ0UmVtICAgICAvLyBzaGlmdCBsYXN0IDMgYnl0ZXMgdG8gMXN0IDMgYnl0ZXMKLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZXNpICsgZWJ4XSAgIC8vIGxvYWQgYj1Qcmlvcih4KQotICAgICAgICAgICAgcHVucGNrbGJ3IG1tMSwgbW0wICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQotICAgICAgICAgICAgbW92cSBtbTMsIFtlc2krZWJ4LThdICAgLy8gUHJlcCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgcHVucGNrbGJ3IG1tMiwgbW0wICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgotICAgICAgICAgICAgcHNybHEgbW0zLCBTaGlmdFJlbSAgICAgLy8gc2hpZnQgbGFzdCAzIGJ5dGVzIHRvIDFzdCAzIGJ5dGVzCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNCwgbW0yCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0zLCBtbTAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBjCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNSwgbW0xCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMwotICAgICAgICAgICAgcHhvciBtbTcsIG1tNwotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICBtb3ZxIG1tNiwgbW00Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tMwotCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW00ICAgIC8vIENyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhZGR3IG1tNiwgbW01Ci0gICAgICAgICAgICBwYW5kIG1tMCwgbW00ICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgLy8gQ3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBhbmQgbW03LCBtbTUgICAgICAgLy8gT25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW02ICAgIC8vIENyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhbmQgbW0wLCBtbTYgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgbW92cSBtbTcsIG1tNAotICAgICAgICAgICAgcHN1YncgbW02LCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgIG1vdnEgbW0wLCBtbTcKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICBwYW5kIG1tNSwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgcGFuZCBtbTIsIG1tMAotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTQKLSAgICAgICAgICAgIHBhbmRuIG1tMCwgbW0xCi0gICAgICAgICAgICBwYWRkdyBtbTcsIG1tNQotICAgICAgICAgICAgcGFkZHcgbW0wLCBtbTIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW02ICAgICAgIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFuZCBtbTMsIG1tNwotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTAKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW0zCi0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwYWNrdXN3YiBtbTcsIG1tMQotICAgICAgICAgICAgbW92cSBtbTMsIFtlc2kgKyBlYnhdICAgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgcGFuZCBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIG1vdnEgbW0yLCBtbTMgICAgICAgICAgIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKLSAgICAgICAgICAgIHBhZGRiIG1tNywgW2VkaSArIGVieF0gIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgIHB1bnBja2xidyBtbTMsIG1tMCAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieF0sIG1tNyAgIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgbW92cSBtbTEsIG1tNyAgICAgICAgICAgLy8gTm93IG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKQotICAgICAgICAgICAgLy8gTm93IGRvIFBhZXRoIGZvciAybmQgc2V0IG9mIGJ5dGVzICgzLTUpCi0gICAgICAgICAgICBwc3JscSBtbTIsIFNoaWZ0QnBwICAgICAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAyCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0xLCBtbTAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICBweG9yIG1tNywgbW03Ci0gICAgICAgICAgICBwdW5wY2tsYncgbW0yLCBtbTAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBiCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNSwgbW0xCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNCwgbW0yCi0gICAgICAgICAgICBwc3VidyBtbTUsIG1tMwotICAgICAgICAgICAgcHN1YncgbW00LCBtbTMKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9Ci0gICAgICAgICAgICAvLyAgICAgICBwYXYgKyBwYnYgPSBwYnYgKyBwYXYKLSAgICAgICAgICAgIG1vdnEgbW02LCBtbTUKLSAgICAgICAgICAgIHBhZGR3IG1tNiwgbW00Ci0KLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTUgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNCAgICAgICAvLyBDcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYW5kIG1tMCwgbW01ICAgICAgICAgIC8vIE9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgIHBhbmQgbW03LCBtbTQgICAgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcHN1YncgbW01LCBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW03Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTcKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTYgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNiAgICAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgIG1vdnEgbW03LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgICAgIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgcGFuZCBtbTUsIG1tNwotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgIHBhbmQgbW0yLCBtbTAKLSAgICAgICAgICAgIHBhbmRuIG1tNywgbW00Ci0gICAgICAgICAgICBwYW5kbiBtbTAsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTUKLSAgICAgICAgICAgIHBhZGR3IG1tMCwgbW0yCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNiAgICAgICAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZXNpICsgZWJ4XSAgLy8gbG9hZCBiPVByaW9yKHgpCi0gICAgICAgICAgICBwYW5kIG1tMywgbW03Ci0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tMAotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBhY2t1c3diIG1tNywgbW0xCi0gICAgICAgICAgICBtb3ZxIG1tMywgbW0yICAgICAgICAgICAvLyBsb2FkIGM9UHJpb3IoeC1icHApIHN0ZXAgMQotICAgICAgICAgICAgcGFuZCBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIHB1bnBja2hidyBtbTIsIG1tMCAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIHBzbGxxIG1tNywgU2hpZnRCcHAgICAgIC8vIFNoaWZ0IGJ5dGVzIHRvIDJuZCBncm91cCBvZiAzIGJ5dGVzCi0gICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgICAgICAgbW92cSBtbTQsIG1tMgotICAgICAgICAgICAgcGFkZGIgbW03LCBbZWRpICsgZWJ4XSAgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQotICAgICAgICAgICAgcHNsbHEgbW0zLCBTaGlmdEJwcCAgICAgLy8gbG9hZCBjPVByaW9yKHgtYnBwKSBzdGVwIDIKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieF0sIG1tNyAgIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgbW92cSBtbTEsIG1tNwotICAgICAgICAgICAgcHVucGNraGJ3IG1tMywgbW0wICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgcHNsbHEgbW0xLCBTaGlmdEJwcCAgICAgLy8gU2hpZnQgYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkKLSAgICAgICAgICAgIC8vIE5vdyBkbyBQYWV0aCBmb3IgM3JkLCBhbmQgZmluYWwsIHNldCBvZiBieXRlcyAoNi03KQotICAgICAgICAgICAgcHhvciBtbTcsIG1tNwotICAgICAgICAgICAgcHVucGNraGJ3IG1tMSwgbW0wICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQotICAgICAgICAgICAgcHN1YncgbW00LCBtbTMKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgIG1vdnEgbW01LCBtbTEKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgbW92cSBtbTYsIG1tNAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBhZGR3IG1tNiwgbW01Ci0KLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTQgICAgLy8gQ3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNSAgICAvLyBDcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYW5kIG1tMCwgbW00ICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBhbmQgbW03LCBtbTUgICAgICAgLy8gT25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTYgICAgLy8gQ3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNiAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgIG1vdnEgbW03LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgcGFuZCBtbTIsIG1tMAotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgIHBhbmQgbW01LCBtbTcKLSAgICAgICAgICAgIHBhbmRuIG1tMCwgbW0xCi0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tNAotICAgICAgICAgICAgcGFkZHcgbW0wLCBtbTIKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW01Ci0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNiAgICAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgIHBhbmQgbW0zLCBtbTcKLSAgICAgICAgICAgIHBhbmRuIG1tNywgbW0wCi0gICAgICAgICAgICBwYWRkdyBtbTcsIG1tMwotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFja3Vzd2IgbW0xLCBtbTcKLSAgICAgICAgICAgIC8vIFN0ZXAgZWJ4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCi0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBwYW5kIG1tMSwgQWN0aXZlTWFza0VuZAotICAgICAgICAgICAgcGFkZGIgbW0xLCBbZWRpICsgZWJ4IC0gOF0gLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQotCi0gICAgICAgICAgICBjbXAgZWJ4LCBNTVhMZW5ndGgKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAgICAgICAgICAgICAgIC8vIHB4b3IgZG9lcyBub3QgYWZmZWN0IGZsYWdzCi0gICAgICAgICAgICBtb3ZxIFtlZGkgKyBlYnggLSA4XSwgbW0xICAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMyByZWFkeSB0byBiZSB1c2VkIGFzIFByaW9yKHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgIGpiIGRwdGgzbHAKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDY6Ci0gICAgICBjYXNlIDc6Ci0gICAgICBjYXNlIDU6Ci0gICAgICB7Ci0gICAgICAgICBBY3RpdmVNYXNrLnVzZSAgPSAweDAwMDAwMDAwZmZmZmZmZmY7Ci0gICAgICAgICBBY3RpdmVNYXNrMi51c2UgPSAweGZmZmZmZmZmMDAwMDAwMDA7Ci0gICAgICAgICBTaGlmdEJwcC51c2UgPSBicHAgPDwgMzsgICAgLy8gPT0gYnBwICogOAotICAgICAgICAgU2hpZnRSZW0udXNlID0gNjQgLSBTaGlmdEJwcC51c2U7Ci0gICAgICAgICBfYXNtCi0gICAgICAgICB7Ci0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmCi0gICAgICAgICAgICBtb3YgZWRpLCByb3cKLSAgICAgICAgICAgIG1vdiBlc2ksIHByZXZfcm93Ci0gICAgICAgICAgICAvLyBQUklNRSB0aGUgcHVtcCAobG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAotICAgICAgICAgICAgbW92cSBtbTEsIFtlZGkrZWJ4LThdCi0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi1kcHRoNmxwOgotICAgICAgICAgICAgLy8gTXVzdCBzaGlmdCB0byBwb3NpdGlvbiBSYXcoeC1icHApIGRhdGEKLSAgICAgICAgICAgIHBzcmxxIG1tMSwgU2hpZnRSZW0KLSAgICAgICAgICAgIC8vIERvIGZpcnN0IHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIG1tMywgW2VzaStlYngtOF0gICAgICAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0xLCBtbTAgICAgICAvLyBVbnBhY2sgTG93IGJ5dGVzIG9mIGEKLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZXNpICsgZWJ4XSAgIC8vIGxvYWQgYj1Qcmlvcih4KQotICAgICAgICAgICAgcHVucGNrbGJ3IG1tMiwgbW0wICAgICAgLy8gVW5wYWNrIExvdyBieXRlcyBvZiBiCi0gICAgICAgICAgICAvLyBNdXN0IHNoaWZ0IHRvIHBvc2l0aW9uIFByaW9yKHgtYnBwKSBkYXRhCi0gICAgICAgICAgICBwc3JscSBtbTMsIFNoaWZ0UmVtCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNCwgbW0yCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0zLCBtbTAgICAgICAvLyBVbnBhY2sgTG93IGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgIG1vdnEgbW01LCBtbTEKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0zCi0gICAgICAgICAgICBweG9yIG1tNywgbW03Ci0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgIG1vdnEgbW02LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW0zCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW00ICAgIC8vIENyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhZGR3IG1tNiwgbW01Ci0gICAgICAgICAgICBwYW5kIG1tMCwgbW00ICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgLy8gQ3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBhbmQgbW03LCBtbTUgICAgICAgLy8gT25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW02ICAgIC8vIENyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhbmQgbW0wLCBtbTYgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgbW92cSBtbTcsIG1tNAotICAgICAgICAgICAgcHN1YncgbW02LCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgIG1vdnEgbW0wLCBtbTcKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICBwYW5kIG1tNSwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgcGFuZCBtbTIsIG1tMAotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTQKLSAgICAgICAgICAgIHBhbmRuIG1tMCwgbW0xCi0gICAgICAgICAgICBwYWRkdyBtbTcsIG1tNQotICAgICAgICAgICAgcGFkZHcgbW0wLCBtbTIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW02ICAgIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFuZCBtbTMsIG1tNwotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTAKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW0zCi0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwYWNrdXN3YiBtbTcsIG1tMQotICAgICAgICAgICAgbW92cSBtbTMsIFtlc2kgKyBlYnggLSA4XSAgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgcGFuZCBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIHBzcmxxIG1tMywgU2hpZnRSZW0KLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZXNpICsgZWJ4XSAgICAgIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKLSAgICAgICAgICAgIHBhZGRiIG1tNywgW2VkaSArIGVieF0gICAgIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgIG1vdnEgbW02LCBtbTIKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieF0sIG1tNyAgICAgIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgbW92cSBtbTEsIFtlZGkrZWJ4LThdCi0gICAgICAgICAgICBwc2xscSBtbTYsIFNoaWZ0QnBwCi0gICAgICAgICAgICBtb3ZxIG1tNSwgbW03Ci0gICAgICAgICAgICBwc3JscSBtbTEsIFNoaWZ0UmVtCi0gICAgICAgICAgICBwb3IgbW0zLCBtbTYKLSAgICAgICAgICAgIHBzbGxxIG1tNSwgU2hpZnRCcHAKLSAgICAgICAgICAgIHB1bnBja2hidyBtbTMsIG1tMCAgICAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIHBvciBtbTEsIG1tNQotICAgICAgICAgICAgLy8gRG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICBwdW5wY2toYncgbW0yLCBtbTAgICAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBiCi0gICAgICAgICAgICBwdW5wY2toYncgbW0xLCBtbTAgICAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNCwgbW0yCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNSwgbW0xCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMwotICAgICAgICAgICAgcHhvciBtbTcsIG1tNwotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICBtb3ZxIG1tNiwgbW00Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tMwotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgcGNtcGd0dyBtbTAsIG1tNCAgICAgICAvLyBDcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYWRkdyBtbTYsIG1tNQotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNCAgICAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgICAgIC8vIENyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0wCi0gICAgICAgICAgICBwYW5kIG1tNywgbW01ICAgICAgICAgIC8vIE9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0wCi0gICAgICAgICAgICBwc3VidyBtbTUsIG1tNwotICAgICAgICAgICAgcHhvciBtbTAsIG1tMAotICAgICAgICAgICAgcGNtcGd0dyBtbTAsIG1tNiAgICAgICAvLyBDcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYW5kIG1tMCwgbW02ICAgICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgIG1vdnEgbW03LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgICAgIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgcGFuZCBtbTUsIG1tNwotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgIHBhbmQgbW0yLCBtbTAKLSAgICAgICAgICAgIHBhbmRuIG1tNywgbW00Ci0gICAgICAgICAgICBwYW5kbiBtbTAsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTUKLSAgICAgICAgICAgIHBhZGR3IG1tMCwgbW0yCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNiAgICAgICAgICAgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICBweG9yIG1tMSwgbW0xCi0gICAgICAgICAgICBwYW5kIG1tMywgbW03Ci0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tMAotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIC8vIFN0ZXAgZXggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKLSAgICAgICAgICAgIGFkZCBlYngsIDgKLSAgICAgICAgICAgIHBhY2t1c3diIG1tMSwgbW03Ci0gICAgICAgICAgICBwYWRkYiBtbTEsIFtlZGkgKyBlYnggLSA4XSAgICAgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBtb3ZxIFtlZGkgKyBlYnggLSA4XSwgbW0xICAgICAgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgIGpiIGRwdGg2bHAKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDQ6Ci0gICAgICB7Ci0gICAgICAgICBBY3RpdmVNYXNrLnVzZSAgPSAweDAwMDAwMDAwZmZmZmZmZmY7Ci0gICAgICAgICBfYXNtIHsKLSAgICAgICAgICAgIG1vdiBlYngsIGRpZmYKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIC8vIFBSSU1FIHRoZSBwdW1wIChsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgW2VkaStlYngtOF0gICAgLy8gT25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCi1kcHRoNGxwOgotICAgICAgICAgICAgLy8gRG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKLSAgICAgICAgICAgIG1vdnEgbW0zLCBbZXNpK2VieC04XSAgICAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCi0gICAgICAgICAgICBwdW5wY2toYncgbW0xLCBtbTAgICAgICAgLy8gVW5wYWNrIExvdyBieXRlcyBvZiBhCi0gICAgICAgICAgICBtb3ZxIG1tMiwgW2VzaSArIGVieF0gICAgLy8gbG9hZCBiPVByaW9yKHgpCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0yLCBtbTAgICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgotICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgICAgICAgbW92cSBtbTQsIG1tMgotICAgICAgICAgICAgcHVucGNraGJ3IG1tMywgbW0wICAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgICAgIG1vdnEgbW01LCBtbTEKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0zCi0gICAgICAgICAgICBweG9yIG1tNywgbW03Ci0gICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgIG1vdnEgbW02LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW0zCi0gICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQotICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW00ICAgICAgIC8vIENyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhZGR3IG1tNiwgbW01Ci0gICAgICAgICAgICBwYW5kIG1tMCwgbW00ICAgICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBhbmQgbW03LCBtbTUgICAgICAgICAgLy8gT25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAotICAgICAgICAgICAgcHN1YncgbW00LCBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tMCwgbW02ICAgICAgIC8vIENyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBhbmQgbW0wLCBtbTYgICAgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgotICAgICAgICAgICAgbW92cSBtbTcsIG1tNAotICAgICAgICAgICAgcHN1YncgbW02LCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTUgICAgICAgLy8gcGEgPiBwYj8KLSAgICAgICAgICAgIG1vdnEgbW0wLCBtbTcKLSAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCi0gICAgICAgICAgICBwYW5kIG1tNSwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgotICAgICAgICAgICAgcGFuZCBtbTIsIG1tMAotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTQKLSAgICAgICAgICAgIHBhbmRuIG1tMCwgbW0xCi0gICAgICAgICAgICBwYWRkdyBtbTcsIG1tNQotICAgICAgICAgICAgcGFkZHcgbW0wLCBtbTIKLSAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW02ICAgICAgIC8vIHBhYiA+IHBjPwotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFuZCBtbTMsIG1tNwotICAgICAgICAgICAgcGFuZG4gbW03LCBtbTAKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW0zCi0gICAgICAgICAgICBweG9yIG1tMCwgbW0wCi0gICAgICAgICAgICBwYWNrdXN3YiBtbTcsIG1tMQotICAgICAgICAgICAgbW92cSBtbTMsIFtlc2kgKyBlYnhdICAgICAgLy8gbG9hZCBjPVByaW9yKHgtYnBwKQotICAgICAgICAgICAgcGFuZCBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIG1vdnEgbW0yLCBtbTMgICAgICAgICAgICAgIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKLSAgICAgICAgICAgIHBhZGRiIG1tNywgW2VkaSArIGVieF0gICAgIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3Igd2l0aCBSYXcoeCkKLSAgICAgICAgICAgIHB1bnBja2xidyBtbTMsIG1tMCAgICAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGMKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieF0sIG1tNyAgICAgIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgbW92cSBtbTEsIG1tNyAgICAgICAgICAgICAgLy8gTm93IG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKQotICAgICAgICAgICAgLy8gRG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCi0gICAgICAgICAgICBwdW5wY2toYncgbW0yLCBtbTAgICAgICAgICAvLyBVbnBhY2sgTG93IGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIHB1bnBja2xidyBtbTEsIG1tMCAgICAgICAgIC8vIFVucGFjayBMb3cgYnl0ZXMgb2YgYQotICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwotICAgICAgICAgICAgbW92cSBtbTQsIG1tMgotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgbW92cSBtbTUsIG1tMQotICAgICAgICAgICAgcHN1YncgbW00LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW03LCBtbTcKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgbW92cSBtbTYsIG1tNAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTMKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTQgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFkZHcgbW02LCBtbTUKLSAgICAgICAgICAgIHBhbmQgbW0wLCBtbTQgICAgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNSAgICAgICAvLyBDcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMAotICAgICAgICAgICAgcGFuZCBtbTcsIG1tNSAgICAgICAgICAvLyBPbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTYgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNiAgICAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tNwotICAgICAgICAgICAgcHN1YncgbW02LCBtbTAKLSAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCi0gICAgICAgICAgICBtb3ZxIG1tNywgbW00Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNSAgICAgICAvLyBwYSA+IHBiPwotICAgICAgICAgICAgbW92cSBtbTAsIG1tNwotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgIHBhbmQgbW01LCBtbTcKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW0wCi0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tNAotICAgICAgICAgICAgcGFuZG4gbW0wLCBtbTEKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW01Ci0gICAgICAgICAgICBwYWRkdyBtbTAsIG1tMgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTYgICAgICAgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICBweG9yIG1tMSwgbW0xCi0gICAgICAgICAgICBwYW5kIG1tMywgbW03Ci0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tMAotICAgICAgICAgICAgcHhvciBtbTEsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIC8vIFN0ZXAgZXggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKLSAgICAgICAgICAgIGFkZCBlYngsIDgKLSAgICAgICAgICAgIHBhY2t1c3diIG1tMSwgbW03Ci0gICAgICAgICAgICBwYWRkYiBtbTEsIFtlZGkgKyBlYnggLSA4XSAgICAgLy8gYWRkIFBhZXRoIHByZWRpY3RvciB3aXRoIFJhdyh4KQotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBtb3ZxIFtlZGkgKyBlYnggLSA4XSwgbW0xICAgICAgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKLSAgICAgICAgICAgIGpiIGRwdGg0bHAKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnBwID09IDgKLSAgICAgIHsKLSAgICAgICAgIEFjdGl2ZU1hc2sudXNlICA9IDB4MDAwMDAwMDBmZmZmZmZmZjsKLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92IGVieCwgZGlmZgotICAgICAgICAgICAgbW92IGVkaSwgcm93Ci0gICAgICAgICAgICBtb3YgZXNpLCBwcmV2X3JvdwotICAgICAgICAgICAgcHhvciBtbTAsIG1tMAotICAgICAgICAgICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZWRpK2VieC04XSAgICAgIC8vIE9ubHkgdGltZSBzaG91bGQgbmVlZCB0byByZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCi1kcHRoOGxwOgotICAgICAgICAgICAgLy8gRG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKLSAgICAgICAgICAgIG1vdnEgbW0zLCBbZXNpK2VieC04XSAgICAgIC8vIHJlYWQgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKLSAgICAgICAgICAgIHB1bnBja2xidyBtbTEsIG1tMCAgICAgICAgIC8vIFVucGFjayBMb3cgYnl0ZXMgb2YgYQotICAgICAgICAgICAgbW92cSBtbTIsIFtlc2kgKyBlYnhdICAgICAgLy8gbG9hZCBiPVByaW9yKHgpCi0gICAgICAgICAgICBwdW5wY2tsYncgbW0yLCBtbTAgICAgICAgICAvLyBVbnBhY2sgTG93IGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgICAgIG1vdnEgbW00LCBtbTIKLSAgICAgICAgICAgIHB1bnBja2xidyBtbTMsIG1tMCAgICAgICAgIC8vIFVucGFjayBMb3cgYnl0ZXMgb2YgYwotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgbW92cSBtbTUsIG1tMQotICAgICAgICAgICAgcHN1YncgbW00LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW03LCBtbTcKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgbW92cSBtbTYsIG1tNAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTMKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQotICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCi0gICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTQgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFkZHcgbW02LCBtbTUKLSAgICAgICAgICAgIHBhbmQgbW0wLCBtbTQgICAgICAgICAgLy8gT25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNSAgICAgICAvLyBDcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMAotICAgICAgICAgICAgcGFuZCBtbTcsIG1tNSAgICAgICAgICAvLyBPbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMAotICAgICAgICAgICAgcHN1YncgbW01LCBtbTcKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBjbXBndHcgbW0wLCBtbTYgICAgICAgLy8gQ3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNiAgICAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tNwotICAgICAgICAgICAgcHN1YncgbW02LCBtbTAKLSAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCi0gICAgICAgICAgICBtb3ZxIG1tNywgbW00Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNSAgICAgICAvLyBwYSA+IHBiPwotICAgICAgICAgICAgbW92cSBtbTAsIG1tNwotICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKLSAgICAgICAgICAgIHBhbmQgbW01LCBtbTcKLSAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCi0gICAgICAgICAgICBwYW5kIG1tMiwgbW0wCi0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tNAotICAgICAgICAgICAgcGFuZG4gbW0wLCBtbTEKLSAgICAgICAgICAgIHBhZGR3IG1tNywgbW01Ci0gICAgICAgICAgICBwYWRkdyBtbTAsIG1tMgotICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKLSAgICAgICAgICAgIHBjbXBndHcgbW03LCBtbTYgICAgICAgLy8gcGFiID4gcGM/Ci0gICAgICAgICAgICBweG9yIG1tMSwgbW0xCi0gICAgICAgICAgICBwYW5kIG1tMywgbW03Ci0gICAgICAgICAgICBwYW5kbiBtbTcsIG1tMAotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTMKLSAgICAgICAgICAgIHB4b3IgbW0wLCBtbTAKLSAgICAgICAgICAgIHBhY2t1c3diIG1tNywgbW0xCi0gICAgICAgICAgICBtb3ZxIG1tMywgW2VzaStlYngtOF0gICAgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwotICAgICAgICAgICAgcGFuZCBtbTcsIEFjdGl2ZU1hc2sKLSAgICAgICAgICAgIG1vdnEgbW0yLCBbZXNpICsgZWJ4XSAgICAvLyBsb2FkIGI9UHJpb3IoeCkKLSAgICAgICAgICAgIHBhZGRiIG1tNywgW2VkaSArIGVieF0gICAvLyBhZGQgUGFldGggcHJlZGljdG9yIHdpdGggUmF3KHgpCi0gICAgICAgICAgICBwdW5wY2toYncgbW0zLCBtbTAgICAgICAgLy8gVW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwotICAgICAgICAgICAgbW92cSBbZWRpICsgZWJ4XSwgbW03ICAgIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQotICAgICAgICAgICAgbW92cSBtbTEsIFtlZGkrZWJ4LThdICAgIC8vIHJlYWQgYT1SYXcoeC1icHApIGJ5dGVzCi0KLSAgICAgICAgICAgIC8vIERvIHNlY29uZCBzZXQgb2YgNCBieXRlcwotICAgICAgICAgICAgcHVucGNraGJ3IG1tMiwgbW0wICAgICAgIC8vIFVucGFjayBIaWdoIGJ5dGVzIG9mIGIKLSAgICAgICAgICAgIHB1bnBja2hidyBtbTEsIG1tMCAgICAgICAvLyBVbnBhY2sgSGlnaCBieXRlcyBvZiBhCi0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNCwgbW0yCi0gICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCi0gICAgICAgICAgICBtb3ZxIG1tNSwgbW0xCi0gICAgICAgICAgICBwc3VidyBtbTQsIG1tMwotICAgICAgICAgICAgcHhvciBtbTcsIG1tNwotICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICAgICBtb3ZxIG1tNiwgbW00Ci0gICAgICAgICAgICBwc3VidyBtbTUsIG1tMwotICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCi0gICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQotICAgICAgICAgICAgcGNtcGd0dyBtbTAsIG1tNCAgICAgICAvLyBDcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYWRkdyBtbTYsIG1tNQotICAgICAgICAgICAgcGFuZCBtbTAsIG1tNCAgICAgICAgICAvLyBPbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03Ci0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgICAgIC8vIENyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0wCi0gICAgICAgICAgICBwYW5kIG1tNywgbW01ICAgICAgICAgIC8vIE9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKLSAgICAgICAgICAgIHBzdWJ3IG1tNCwgbW0wCi0gICAgICAgICAgICBwc3VidyBtbTUsIG1tNwotICAgICAgICAgICAgcHhvciBtbTAsIG1tMAotICAgICAgICAgICAgcGNtcGd0dyBtbTAsIG1tNiAgICAgICAvLyBDcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCi0gICAgICAgICAgICBwYW5kIG1tMCwgbW02ICAgICAgICAgIC8vIE9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKLSAgICAgICAgICAgIHBzdWJ3IG1tNSwgbW03Ci0gICAgICAgICAgICBwc3VidyBtbTYsIG1tMAotICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKLSAgICAgICAgICAgIG1vdnEgbW03LCBtbTQKLSAgICAgICAgICAgIHBzdWJ3IG1tNiwgbW0wCi0gICAgICAgICAgICBwY21wZ3R3IG1tNywgbW01ICAgICAgIC8vIHBhID4gcGI/Ci0gICAgICAgICAgICBtb3ZxIG1tMCwgbW03Ci0gICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgotICAgICAgICAgICAgcGFuZCBtbTUsIG1tNwotICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKLSAgICAgICAgICAgIHBhbmQgbW0yLCBtbTAKLSAgICAgICAgICAgIHBhbmRuIG1tNywgbW00Ci0gICAgICAgICAgICBwYW5kbiBtbTAsIG1tMQotICAgICAgICAgICAgcGFkZHcgbW03LCBtbTUKLSAgICAgICAgICAgIHBhZGR3IG1tMCwgbW0yCi0gICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwotICAgICAgICAgICAgcGNtcGd0dyBtbTcsIG1tNiAgICAgICAvLyBwYWIgPiBwYz8KLSAgICAgICAgICAgIHB4b3IgbW0xLCBtbTEKLSAgICAgICAgICAgIHBhbmQgbW0zLCBtbTcKLSAgICAgICAgICAgIHBhbmRuIG1tNywgbW0wCi0gICAgICAgICAgICBweG9yIG1tMSwgbW0xCi0gICAgICAgICAgICBwYWRkdyBtbTcsIG1tMwotICAgICAgICAgICAgcHhvciBtbTAsIG1tMAotICAgICAgICAgICAgLy8gU3RlcCBleCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQotICAgICAgICAgICAgYWRkIGVieCwgOAotICAgICAgICAgICAgcGFja3Vzd2IgbW0xLCBtbTcKLSAgICAgICAgICAgIHBhZGRiIG1tMSwgW2VkaSArIGVieCAtIDhdICAgICAvLyBhZGQgUGFldGggcHJlZGljdG9yIHdpdGggUmF3KHgpCi0gICAgICAgICAgICBjbXAgZWJ4LCBNTVhMZW5ndGgKLSAgICAgICAgICAgIG1vdnEgW2VkaSArIGVieCAtIDhdLCBtbTEgICAgICAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCi0gICAgICAgICAgICBqYiBkcHRoOGxwCi0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvLyBicHAgPSAxCi0gICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8vIGJwcCA9IDIKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgLy8gYnBwID4gOAotICAgICAgewotICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmCi0gICAgICAgICAgICBjbXAgZWJ4LCBGdWxsTGVuZ3RoCi0gICAgICAgICAgICBqbmIgZHB0aGRlbmQKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgICAgICAgIC8vIERvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAgICAgICBtb3YgZWR4LCBlYngKLSAgICAgICAgICAgIHhvciBlY3gsIGVjeCAgICAgICAgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggaW4gbG9vcCBiZWxvdwotICAgICAgICAgICAgc3ViIGVkeCwgYnBwICAgICAgICAvLyBTZXQgZWR4ID0gZWJ4IC0gYnBwCi1kcHRoZGxwOgotICAgICAgICAgICAgeG9yIGVheCwgZWF4Ci0gICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCi0gICAgICAgICAgICBtb3YgYWwsIFtlc2kgKyBlYnhdICAgICAgICAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKLSAgICAgICAgICAgIG1vdiBjbCwgW2VzaSArIGVkeF0gICAgICAgIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICAgICAgIHN1YiBlYXgsIGVjeCAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAgICAgICBtb3YgcGF0ZW1wLCBlYXggICAgICAgICAgICAgICAgIC8vIFNhdmUgcGF2IGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIHhvciBlYXgsIGVheAotICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwotICAgICAgICAgICAgbW92IGFsLCBbZWRpICsgZWR4XSAgICAgICAgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYWwKLSAgICAgICAgICAgIHN1YiBlYXgsIGVjeCAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAgICAgICBtb3YgZWN4LCBlYXgKLSAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgotICAgICAgICAgICAgYWRkIGVheCwgcGF0ZW1wICAgICAgICAgICAgICAgICAvLyBwY3YgPSBwYXYgKyBwYnYKLSAgICAgICAgICAgIC8vIHBjID0gYWJzKHBjdikKLSAgICAgICAgICAgIHRlc3QgZWF4LCAweDgwMDAwMDAwCi0gICAgICAgICAgICBqeiBkcHRoZHBjYQotICAgICAgICAgICAgbmVnIGVheCAgICAgICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi1kcHRoZHBjYToKLSAgICAgICAgICAgIG1vdiBwY3RlbXAsIGVheCAgICAgICAgICAgICAvLyBzYXZlIHBjIGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIC8vIHBiID0gYWJzKHBidikKLSAgICAgICAgICAgIHRlc3QgZWN4LCAweDgwMDAwMDAwCi0gICAgICAgICAgICBqeiBkcHRoZHBiYQotICAgICAgICAgICAgbmVnIGVjeCAgICAgICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi1kcHRoZHBiYToKLSAgICAgICAgICAgIG1vdiBwYnRlbXAsIGVjeCAgICAgICAgICAgICAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKLSAgICAgICAgICAgIC8vIHBhID0gYWJzKHBhdikKLSAgICAgICAgICAgIG1vdiBlYXgsIHBhdGVtcAotICAgICAgICAgICAgdGVzdCBlYXgsIDB4ODAwMDAwMDAKLSAgICAgICAgICAgIGp6IGRwdGhkcGFhCi0gICAgICAgICAgICBuZWcgZWF4ICAgICAgICAgICAgICAgICAgICAgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKLWRwdGhkcGFhOgotICAgICAgICAgICAgbW92IHBhdGVtcCwgZWF4ICAgICAgICAgICAgIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQotICAgICAgICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgotICAgICAgICAgICAgY21wIGVheCwgZWN4Ci0gICAgICAgICAgICBqbmEgZHB0aGRhYmIKLSAgICAgICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCi0gICAgICAgICAgICBjbXAgZWN4LCBwY3RlbXAKLSAgICAgICAgICAgIGpuYSBkcHRoZGJiYwotICAgICAgICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICAgICAgIG1vdiBjbCwgW2VzaSArIGVkeF0gIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICAgICAgIGptcCBkcHRoZHBhZXRoCi1kcHRoZGJiYzoKLSAgICAgICAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCi0gICAgICAgICAgICBtb3YgY2wsIFtlc2kgKyBlYnhdICAgICAgICAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKLSAgICAgICAgICAgIGptcCBkcHRoZHBhZXRoCi1kcHRoZGFiYjoKLSAgICAgICAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwotICAgICAgICAgICAgY21wIGVheCwgcGN0ZW1wCi0gICAgICAgICAgICBqbmEgZHB0aGRhYmMKLSAgICAgICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAgICAgICBtb3YgY2wsIFtlc2kgKyBlZHhdICAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICAgICBqbXAgZHB0aGRwYWV0aAotZHB0aGRhYmM6Ci0gICAgICAgICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCi0gICAgICAgICAgICBtb3YgY2wsIFtlZGkgKyBlZHhdICAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAotZHB0aGRwYWV0aDoKLSAgICAgICAgICAgIGluYyBlYngKLSAgICAgICAgICAgIGluYyBlZHgKLSAgICAgICAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2Ci0gICAgICAgICAgICBhZGQgW2VkaSArIGVieCAtIDFdLCBjbAotICAgICAgICAgICAgY21wIGVieCwgRnVsbExlbmd0aAotICAgICAgICAgICAgamIgZHB0aGRscAotZHB0aGRlbmQ6Ci0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gZ28gZnVydGhlciB3aXRoIHRoaXMgb25lCi0gICB9ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuZCBzd2l0Y2ggKCBicHAgKQotICAgX2FzbQotICAgewotICAgICAgICAgLy8gTU1YIGFjY2VsZXJhdGlvbiBjb21wbGV0ZSBub3cgZG8gY2xlYW4tdXAKLSAgICAgICAgIC8vIENoZWNrIGlmIGFueSByZW1haW5pbmcgYnl0ZXMgbGVmdCB0byBkZWNvZGUKLSAgICAgICAgIG1vdiBlYngsIE1NWExlbmd0aAotICAgICAgICAgY21wIGVieCwgRnVsbExlbmd0aAotICAgICAgICAgam5iIGRwdGhlbmQKLSAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgICAgIC8vIERvIFBhZXRoIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi0gICAgICAgICBtb3YgZWR4LCBlYngKLSAgICAgICAgIHhvciBlY3gsIGVjeCAgICAgICAgIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4IGluIGxvb3AgYmVsb3cKLSAgICAgICAgIHN1YiBlZHgsIGJwcCAgICAgICAgIC8vIFNldCBlZHggPSBlYnggLSBicHAKLWRwdGhscDI6Ci0gICAgICAgICB4b3IgZWF4LCBlYXgKLSAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKLSAgICAgICAgIG1vdiBhbCwgW2VzaSArIGVieF0gIC8vIGxvYWQgUHJpb3IoeCkgaW50byBhbAotICAgICAgICAgbW92IGNsLCBbZXNpICsgZWR4XSAgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAotICAgICAgICAgc3ViIGVheCwgZWN4ICAgICAgICAgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCi0gICAgICAgICBtb3YgcGF0ZW1wLCBlYXggICAgICAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCi0gICAgICAgICB4b3IgZWF4LCBlYXgKLSAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKLSAgICAgICAgIG1vdiBhbCwgW2VkaSArIGVkeF0gIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGFsCi0gICAgICAgICBzdWIgZWF4LCBlY3ggICAgICAgICAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKLSAgICAgICAgIG1vdiBlY3gsIGVheAotICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2Ci0gICAgICAgICBhZGQgZWF4LCBwYXRlbXAgICAgICAvLyBwY3YgPSBwYXYgKyBwYnYKLSAgICAgICAgIC8vIHBjID0gYWJzKHBjdikKLSAgICAgICAgIHRlc3QgZWF4LCAweDgwMDAwMDAwCi0gICAgICAgICBqeiBkcHRocGNhMgotICAgICAgICAgbmVnIGVheCAgICAgICAgICAgICAgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKLWRwdGhwY2EyOgotICAgICAgICAgbW92IHBjdGVtcCwgZWF4ICAgICAgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCi0gICAgICAgICAvLyBwYiA9IGFicyhwYnYpCi0gICAgICAgICB0ZXN0IGVjeCwgMHg4MDAwMDAwMAotICAgICAgICAganogZHB0aHBiYTIKLSAgICAgICAgIG5lZyBlY3ggICAgICAgICAgICAgIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi1kcHRocGJhMjoKLSAgICAgICAgIG1vdiBwYnRlbXAsIGVjeCAgICAgIC8vIHNhdmUgcGIgZm9yIGxhdGVyIHVzZQotICAgICAgICAgLy8gcGEgPSBhYnMocGF2KQotICAgICAgICAgbW92IGVheCwgcGF0ZW1wCi0gICAgICAgICB0ZXN0IGVheCwgMHg4MDAwMDAwMAotICAgICAgICAganogZHB0aHBhYTIKLSAgICAgICAgIG5lZyBlYXggICAgICAgICAgICAgIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCi1kcHRocGFhMjoKLSAgICAgICAgIG1vdiBwYXRlbXAsIGVheCAgICAgIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQotICAgICAgICAgLy8gdGVzdCBpZiBwYSA8PSBwYgotICAgICAgICAgY21wIGVheCwgZWN4Ci0gICAgICAgICBqbmEgZHB0aGFiYjIKLSAgICAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCi0gICAgICAgICBjbXAgZWN4LCBwY3RlbXAKLSAgICAgICAgIGpuYSBkcHRoYmJjMgotICAgICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKLSAgICAgICAgIG1vdiBjbCwgW2VzaSArIGVkeF0gIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKLSAgICAgICAgIGptcCBkcHRocGFldGgyCi1kcHRoYmJjMjoKLSAgICAgICAgIC8vIHBiIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgpCi0gICAgICAgICBtb3YgY2wsIFtlc2kgKyBlYnhdICAgICAgICAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKLSAgICAgICAgIGptcCBkcHRocGFldGgyCi1kcHRoYWJiMjoKLSAgICAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwotICAgICAgICAgY21wIGVheCwgcGN0ZW1wCi0gICAgICAgICBqbmEgZHB0aGFiYzIKLSAgICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCi0gICAgICAgICBtb3YgY2wsIFtlc2kgKyBlZHhdICAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCi0gICAgICAgICBqbXAgZHB0aHBhZXRoMgotZHB0aGFiYzI6Ci0gICAgICAgICAvLyBwYSA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBSYXcoeC1icHApCi0gICAgICAgICBtb3YgY2wsIFtlZGkgKyBlZHhdICAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAotZHB0aHBhZXRoMjoKLSAgICAgICAgIGluYyBlYngKLSAgICAgICAgIGluYyBlZHgKLSAgICAgICAgIC8vIFJhdyh4KSA9IChQYWV0aCh4KSArIFBhZXRoX1ByZWRpY3RvciggYSwgYiwgYyApKSBtb2QgMjU2Ci0gICAgICAgICBhZGQgW2VkaSArIGVieCAtIDFdLCBjbAotICAgICAgICAgY21wIGVieCwgRnVsbExlbmd0aAotICAgICAgICAgamIgZHB0aGxwMgotZHB0aGVuZDoKLSAgICAgICAgIGVtbXMgICAgICAgICAgICAgLy8gRW5kIE1NWCBpbnN0cnVjdGlvbnM7IHByZXAgZm9yIHBvc3NpYmxlIEZQIGluc3Rycy4KLSAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLX0KLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBTdWIgZmlsdGVyIGRlY29kZXIKLXZvaWQgLyogUFJJVkFURSAqLwotcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcCByb3cpCi17Ci0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQKLSAgLy8gaGVyZSB0byBlbnN1cmUgYWxpZ25tZW50IG9uIDgtYnl0ZSBib3VuZGFyaWVzLgotICB1bmlvbiB1QWxsIEFjdGl2ZU1hc2ssIFNoaWZ0QnBwLCBTaGlmdFJlbTsKLQotICAgLy9pbnQgdGVzdDsKLSAgIGludCBicHA7Ci0gICBwbmdfdWludF8zMiBGdWxsTGVuZ3RoOwotICAgcG5nX3VpbnRfMzIgTU1YTGVuZ3RoOwotICAgaW50IGRpZmY7Ci0KLSAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAvLyBHZXQgIyBieXRlcyBwZXIgcGl4ZWwKLSAgIEZ1bGxMZW5ndGggID0gcm93X2luZm8tPnJvd2J5dGVzIC0gYnBwOyAvLyAjIG9mIGJ5dGVzIHRvIGZpbHRlcgotICAgX2FzbSB7Ci0gICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICBtb3YgZXNpLCBlZGkgICAgICAgICAgICAgICAvLyBscCA9IHJvdwotICAgICAgICBhZGQgZWRpLCBicHAgICAgICAgICAgICAgICAvLyBycCA9IHJvdyArIGJwcAotICAgICAgICB4b3IgZWF4LCBlYXgKLSAgICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50Ci0gICAgICAgIG1vdiBkaWZmLCBlZGkgICAgICAgICAgICAgICAvLyB0YWtlIHN0YXJ0IG9mIHJvdwotICAgICAgICBhZGQgZGlmZiwgMHhmICAgICAgICAgICAgICAgLy8gYWRkIDcgKyA4IHRvIGluY3IgcGFzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudCBib3VuZGFyeQotICAgICAgICB4b3IgZWJ4LCBlYngKLSAgICAgICAgYW5kIGRpZmYsIDB4ZmZmZmZmZjggICAgICAgIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5Ci0gICAgICAgIHN1YiBkaWZmLCBlZGkgICAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBmcm9tIHN0YXJ0ID09PiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBlYnggYXQgYWxpZ25tZW50Ci0gICAgICAgIGp6IGRzdWJnbwotICAgICAgICAvLyBmaXggYWxpZ25tZW50Ci1kc3VibHAxOgotICAgICAgICBtb3YgYWwsIFtlc2krZWJ4XQotICAgICAgICBhZGQgW2VkaStlYnhdLCBhbAotICAgICAgICBpbmMgZWJ4Ci0gICAgICAgIGNtcCBlYngsIGRpZmYKLSAgICAgICAgamIgZHN1YmxwMQotZHN1YmdvOgotICAgICAgICBtb3YgZWN4LCBGdWxsTGVuZ3RoCi0gICAgICAgIG1vdiBlZHgsIGVjeAotICAgICAgICBzdWIgZWR4LCBlYnggICAgICAgICAgICAgICAgICAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4Ci0gICAgICAgIGFuZCBlZHgsIDB4MDAwMDAwMDcgICAgICAgICAgIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgICAgc3ViIGVjeCwgZWR4ICAgICAgICAgICAgICAgICAgLy8gZHJvcCBvdmVyIGJ5dGVzIGZyb20gbGVuZ3RoCi0gICAgICAgIG1vdiBNTVhMZW5ndGgsIGVjeAotICAgfSAvLyBlbmQgX2FzbSBibG9jawotCi0gICAvLyBOb3cgZG8gdGhlIG1hdGggZm9yIHRoZSByZXN0IG9mIHRoZSByb3cKLSAgIHN3aXRjaCAoIGJwcCApCi0gICB7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgewotICAgICAgICAgQWN0aXZlTWFzay51c2UgID0gMHgwMDAwZmZmZmZmMDAwMDAwOwotICAgICAgICAgU2hpZnRCcHAudXNlID0gMjQ7ICAgICAgIC8vID09IDMgKiA4Ci0gICAgICAgICBTaGlmdFJlbS51c2UgID0gNDA7ICAgICAgLy8gPT0gNjQgLSAyNAotICAgICAgICAgX2FzbSB7Ci0gICAgICAgICAgICBtb3YgZWRpLCByb3cKLSAgICAgICAgICAgIG1vdnEgbW03LCBBY3RpdmVNYXNrICAvLyBMb2FkIEFjdGl2ZU1hc2sgZm9yIDJuZCBhY3RpdmUgYnl0ZSBncm91cAotICAgICAgICAgICAgbW92IGVzaSwgZWRpICAgICAgICAgICAgICAvLyBscCA9IHJvdwotICAgICAgICAgICAgYWRkIGVkaSwgYnBwICAgICAgICAgIC8vIHJwID0gcm93ICsgYnBwCi0gICAgICAgICAgICBtb3ZxIG1tNiwgbW03Ci0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmCi0gICAgICAgICAgICBwc2xscSBtbTYsIFNoaWZ0QnBwICAgLy8gTW92ZSBtYXNrIGluIG1tNiB0byBjb3ZlciAzcmQgYWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZSBncm91cAotICAgICAgICAgICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZWRpK2VieC04XQotZHN1YjNscDoKLSAgICAgICAgICAgIHBzcmxxIG1tMSwgU2hpZnRSZW0gICAvLyBTaGlmdCBkYXRhIGZvciBhZGRpbmcgMXN0IGJwcCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIGZvciBtYXNrOyBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMKLSAgICAgICAgICAgIC8vIEFkZCAxc3QgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICBtb3ZxIG1tMCwgW2VkaStlYnhdCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMQotICAgICAgICAgICAgLy8gQWRkIDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgICAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgcHNsbHEgbW0xLCBTaGlmdEJwcCAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBwYW5kIG1tMSwgbW03ICAgICAgICAgLy8gbWFzayB0byB1c2Ugb25seSAybmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMQotICAgICAgICAgICAgLy8gQWRkIDNyZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgICAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQotICAgICAgICAgICAgcHNsbHEgbW0xLCBTaGlmdEJwcCAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBwYW5kIG1tMSwgbW02ICAgICAgICAgLy8gbWFzayB0byB1c2Ugb25seSAzcmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMQotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4LThdLCBtbTAgICAgIC8vIFdyaXRlIHVwZGF0ZWQgUmF3cyBiYWNrIHRvIGFycmF5Ci0gICAgICAgICAgICAvLyBQcmVwIGZvciBkb2luZyAxc3QgYWRkIGF0IHRvcCBvZiBsb29wCi0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0wCi0gICAgICAgICAgICBqYiBkc3ViM2xwCi0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgICAgY2FzZSAxOgotICAgICAgewotICAgICAgICAgLy8gUGxhY2VkIGhlcmUganVzdCBpbiBjYXNlIHRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgdGhlCi0gICAgICAgICAvLyBub24tTU1YIGNvZGUgZm9yIHRoZSBTVUIgZmlsdGVyIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3cgYmVsb3cKLSAgICAgICAgIC8vCi0gICAgICAgICAvLyAgICAgICAgIHBuZ19ieXRlcCBycDsKLSAgICAgICAgIC8vICAgICAgICAgcG5nX2J5dGVwIGxwOwotICAgICAgICAgLy8gICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgLy8gICAgICAgICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKLSAgICAgICAgIC8vICAgICAgICAgZm9yIChpID0gKHBuZ191aW50XzMyKWJwcCwgcnAgPSByb3cgKyBicHAsIGxwID0gcm93OwotICAgICAgICAgLy8gICAgICAgICAgICBpIDwgcm93X2luZm8tPnJvd2J5dGVzOyBpKyssIHJwKyssIGxwKyspCi0gICAgICAgICAvLyAgICAgIHsKLSAgICAgICAgIC8vICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArIChpbnQpKCpscCkpICYgMHhmZik7Ci0gICAgICAgICAvLyAgICAgIH0KLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92IGVieCwgZGlmZgotICAgICAgICAgICAgbW92IGVkaSwgcm93Ci0gICAgICAgICAgICBjbXAgZWJ4LCBGdWxsTGVuZ3RoCi0gICAgICAgICAgICBqbmIgZHN1YjFlbmQKLSAgICAgICAgICAgIG1vdiBlc2ksIGVkaSAgICAgICAgICAvLyBscCA9IHJvdwotICAgICAgICAgICAgeG9yIGVheCwgZWF4Ci0gICAgICAgICAgICBhZGQgZWRpLCBicHAgICAgICAvLyBycCA9IHJvdyArIGJwcAotZHN1YjFscDoKLSAgICAgICAgICAgIG1vdiBhbCwgW2VzaStlYnhdCi0gICAgICAgICAgICBhZGQgW2VkaStlYnhdLCBhbAotICAgICAgICAgICAgaW5jIGVieAotICAgICAgICAgICAgY21wIGVieCwgRnVsbExlbmd0aAotICAgICAgICAgICAgamIgZHN1YjFscAotZHN1YjFlbmQ6Ci0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgNjoKLSAgICAgIGNhc2UgNzoKLSAgICAgIGNhc2UgNDoKLSAgICAgIGNhc2UgNToKLSAgICAgIHsKLSAgICAgICAgIFNoaWZ0QnBwLnVzZSA9IGJwcCA8PCAzOwotICAgICAgICAgU2hpZnRSZW0udXNlID0gNjQgLSBTaGlmdEJwcC51c2U7Ci0gICAgICAgICBfYXNtIHsKLSAgICAgICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICAgICAgbW92IGVieCwgZGlmZgotICAgICAgICAgICAgbW92IGVzaSwgZWRpICAgICAgICAgICAgICAgLy8gbHAgPSByb3cKLSAgICAgICAgICAgIGFkZCBlZGksIGJwcCAgICAgICAgICAgLy8gcnAgPSByb3cgKyBicHAKLSAgICAgICAgICAgIC8vIFBSSU1FIHRoZSBwdW1wIChsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgW2VkaStlYngtOF0KLWRzdWI0bHA6Ci0gICAgICAgICAgICBwc3JscSBtbTEsIFNoaWZ0UmVtIC8vIFNoaWZ0IGRhdGEgZm9yIGFkZGluZyAxc3QgYnBwIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgZm9yIG1hc2s7IHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcwotICAgICAgICAgICAgbW92cSBtbTAsIFtlZGkrZWJ4XQotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEKLSAgICAgICAgICAgIC8vIEFkZCAybmQgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgICAgIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCi0gICAgICAgICAgICBwc2xscSBtbTEsIFNoaWZ0QnBwICAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueSBtYXNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBiaXRzL2J5dGVzCi0gICAgICAgICAgICBhZGQgZWJ4LCA4Ci0gICAgICAgICAgICBwYWRkYiBtbTAsIG1tMQotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4LThdLCBtbTAKLSAgICAgICAgICAgIG1vdnEgbW0xLCBtbTAgICAgICAgICAgLy8gUHJlcCBmb3IgZG9pbmcgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAotICAgICAgICAgICAgamIgZHN1YjRscAotICAgICAgICAgfSAvLyBlbmQgX2FzbSBibG9jawotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMjoKLSAgICAgIHsKLSAgICAgICAgIEFjdGl2ZU1hc2sudXNlICA9IDB4MDAwMDAwMDBmZmZmMDAwMDsKLSAgICAgICAgIFNoaWZ0QnBwLnVzZSA9IDE2OyAgICAgICAvLyA9PSAyICogOAotICAgICAgICAgU2hpZnRSZW0udXNlID0gNDg7ICAgICAgIC8vID09IDY0IC0gMTYKLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92cSBtbTcsIEFjdGl2ZU1hc2sgIC8vIExvYWQgQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCi0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmCi0gICAgICAgICAgICBtb3ZxIG1tNiwgbW03Ci0gICAgICAgICAgICBtb3YgZWRpLCByb3cKLSAgICAgICAgICAgIHBzbGxxIG1tNiwgU2hpZnRCcHAgICAgIC8vIE1vdmUgbWFzayBpbiBtbTYgdG8gY292ZXIgM3JkIGFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ5dGUgZ3JvdXAKLSAgICAgICAgICAgIG1vdiBlc2ksIGVkaSAgICAgICAgICAgIC8vIGxwID0gcm93Ci0gICAgICAgICAgICBtb3ZxIG1tNSwgbW02Ci0gICAgICAgICAgICBhZGQgZWRpLCBicHAgICAgICAgICAgICAvLyBycCA9IHJvdyArIGJwcAotICAgICAgICAgICAgcHNsbHEgbW01LCBTaGlmdEJwcCAgICAgLy8gTW92ZSBtYXNrIGluIG1tNSB0byBjb3ZlciA0dGggYWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYnl0ZSBncm91cAotICAgICAgICAgICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZWRpK2VieC04XQotZHN1YjJscDoKLSAgICAgICAgICAgIC8vIEFkZCAxc3QgYWN0aXZlIGdyb3VwCi0gICAgICAgICAgICBwc3JscSBtbTEsIFNoaWZ0UmVtICAgICAvLyBTaGlmdCBkYXRhIGZvciBhZGRpbmcgMXN0IGJwcCBieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmVlZCBmb3IgbWFzazsgc2hpZnQgY2xlYXJzIGluYWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYnl0ZXMKLSAgICAgICAgICAgIG1vdnEgbW0wLCBbZWRpK2VieF0KLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0xCi0gICAgICAgICAgICAvLyBBZGQgMm5kIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgIHBzbGxxIG1tMSwgU2hpZnRCcHAgICAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBwYW5kIG1tMSwgbW03ICAgICAgICAgICAvLyBtYXNrIHRvIHVzZSBvbmx5IDJuZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0xCi0gICAgICAgICAgICAvLyBBZGQgM3JkIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgIHBzbGxxIG1tMSwgU2hpZnRCcHAgICAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBwYW5kIG1tMSwgbW02ICAgICAgICAgICAvLyBtYXNrIHRvIHVzZSBvbmx5IDNyZCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0xCi0gICAgICAgICAgICAvLyBBZGQgNHRoIGFjdGl2ZSBncm91cAotICAgICAgICAgICAgbW92cSBtbTEsIG1tMCAgICAgICAgICAgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKLSAgICAgICAgICAgIHBzbGxxIG1tMSwgU2hpZnRCcHAgICAgIC8vIHNoaWZ0IGRhdGEgdG8gcG9zaXRpb24gY29ycmVjdGx5Ci0gICAgICAgICAgICBwYW5kIG1tMSwgbW01ICAgICAgICAgICAvLyBtYXNrIHRvIHVzZSBvbmx5IDR0aCBhY3RpdmUgZ3JvdXAKLSAgICAgICAgICAgIGFkZCBlYngsIDgKLSAgICAgICAgICAgIHBhZGRiIG1tMCwgbW0xCi0gICAgICAgICAgICBjbXAgZWJ4LCBNTVhMZW5ndGgKLSAgICAgICAgICAgIG1vdnEgW2VkaStlYngtOF0sIG1tMCAgIC8vIFdyaXRlIHVwZGF0ZWQgUmF3cyBiYWNrIHRvIGFycmF5Ci0gICAgICAgICAgICBtb3ZxIG1tMSwgbW0wICAgICAgICAgICAvLyBQcmVwIGZvciBkb2luZyAxc3QgYWRkIGF0IHRvcCBvZiBsb29wCi0gICAgICAgICAgICBqYiBkc3ViMmxwCi0gICAgICAgICB9IC8vIGVuZCBfYXNtIGJsb2NrCi0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2UgODoKLSAgICAgIHsKLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92IGVkaSwgcm93Ci0gICAgICAgICAgICBtb3YgZWJ4LCBkaWZmCi0gICAgICAgICAgICBtb3YgZXNpLCBlZGkgICAgICAgICAgICAvLyBscCA9IHJvdwotICAgICAgICAgICAgYWRkIGVkaSwgYnBwICAgICAgICAgICAgLy8gcnAgPSByb3cgKyBicHAKLSAgICAgICAgICAgIG1vdiBlY3gsIE1NWExlbmd0aAotICAgICAgICAgICAgbW92cSBtbTcsIFtlZGkrZWJ4LThdICAgLy8gUFJJTUUgdGhlIHB1bXAgKGxvYWQgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYXcoeC1icHApIGRhdGEgc2V0Ci0gICAgICAgICAgICBhbmQgZWN4LCAweDAwMDAwMDNmICAgICAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAotZHN1YjhscDoKLSAgICAgICAgICAgIG1vdnEgbW0wLCBbZWRpK2VieF0gICAgIC8vIExvYWQgU3ViKHgpIGZvciAxc3QgOCBieXRlcwotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTcKLSAgICAgICAgICAgIG1vdnEgbW0xLCBbZWRpK2VieCs4XSAgIC8vIExvYWQgU3ViKHgpIGZvciAybmQgOCBieXRlcwotICAgICAgICAgICAgbW92cSBbZWRpK2VieF0sIG1tMCAgICAvLyBXcml0ZSBSYXcoeCkgZm9yIDFzdCA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBtbTAgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAybmQgZ3JvdXAgb2YgOCBieXRlcy4gIFRoaXMgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXBlYXRlZCBmb3IgZWFjaCBncm91cCBvZiA4IGJ5dGVzIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIDh0aCBncm91cCBiZWluZyB1c2VkIGFzIHRoZSBSYXcoeC1icHApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgMXN0IGdyb3VwIG9mIHRoZSBuZXh0IGxvb3AuCi0gICAgICAgICAgICBwYWRkYiBtbTEsIG1tMAotICAgICAgICAgICAgbW92cSBtbTIsIFtlZGkrZWJ4KzE2XSAgLy8gTG9hZCBTdWIoeCkgZm9yIDNyZCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzhdLCBtbTEgICAvLyBXcml0ZSBSYXcoeCkgZm9yIDJuZCA4IGJ5dGVzCi0gICAgICAgICAgICBwYWRkYiBtbTIsIG1tMQotICAgICAgICAgICAgbW92cSBtbTMsIFtlZGkrZWJ4KzI0XSAgLy8gTG9hZCBTdWIoeCkgZm9yIDR0aCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzE2XSwgbW0yICAvLyBXcml0ZSBSYXcoeCkgZm9yIDNyZCA4IGJ5dGVzCi0gICAgICAgICAgICBwYWRkYiBtbTMsIG1tMgotICAgICAgICAgICAgbW92cSBtbTQsIFtlZGkrZWJ4KzMyXSAgLy8gTG9hZCBTdWIoeCkgZm9yIDV0aCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzI0XSwgbW0zICAvLyBXcml0ZSBSYXcoeCkgZm9yIDR0aCA4IGJ5dGVzCi0gICAgICAgICAgICBwYWRkYiBtbTQsIG1tMwotICAgICAgICAgICAgbW92cSBtbTUsIFtlZGkrZWJ4KzQwXSAgLy8gTG9hZCBTdWIoeCkgZm9yIDZ0aCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzMyXSwgbW00ICAvLyBXcml0ZSBSYXcoeCkgZm9yIDV0aCA4IGJ5dGVzCi0gICAgICAgICAgICBwYWRkYiBtbTUsIG1tNAotICAgICAgICAgICAgbW92cSBtbTYsIFtlZGkrZWJ4KzQ4XSAgLy8gTG9hZCBTdWIoeCkgZm9yIDd0aCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzQwXSwgbW01ICAvLyBXcml0ZSBSYXcoeCkgZm9yIDZ0aCA4IGJ5dGVzCi0gICAgICAgICAgICBwYWRkYiBtbTYsIG1tNQotICAgICAgICAgICAgbW92cSBtbTcsIFtlZGkrZWJ4KzU2XSAgLy8gTG9hZCBTdWIoeCkgZm9yIDh0aCA4IGJ5dGVzCi0gICAgICAgICAgICBtb3ZxIFtlZGkrZWJ4KzQ4XSwgbW02ICAvLyBXcml0ZSBSYXcoeCkgZm9yIDd0aCA4IGJ5dGVzCi0gICAgICAgICAgICBhZGQgZWJ4LCA2NAotICAgICAgICAgICAgcGFkZGIgbW03LCBtbTYKLSAgICAgICAgICAgIGNtcCBlYngsIGVjeAotICAgICAgICAgICAgbW92cSBbZWRpK2VieC04XSwgbW03ICAgLy8gV3JpdGUgUmF3KHgpIGZvciA4dGggOCBieXRlcwotICAgICAgICAgICAgamIgZHN1YjhscAotICAgICAgICAgICAgY21wIGVieCwgTU1YTGVuZ3RoCi0gICAgICAgICAgICBqbmIgZHN1YjhsdDgKLWRzdWI4bHBBOgotICAgICAgICAgICAgbW92cSBtbTAsIFtlZGkrZWJ4XQotICAgICAgICAgICAgYWRkIGVieCwgOAotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTcKLSAgICAgICAgICAgIGNtcCBlYngsIE1NWExlbmd0aAotICAgICAgICAgICAgbW92cSBbZWRpK2VieC04XSwgbW0wICAgLy8gdXNlIC04IHRvIG9mZnNldCBlYXJseSBhZGQgdG8gZWJ4Ci0gICAgICAgICAgICBtb3ZxIG1tNywgbW0wICAgICAgICAgICAvLyBNb3ZlIGNhbGN1bGF0ZWQgUmF3KHgpIGRhdGEgdG8gbW0xIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZSB0aGUgbmV3IFJhdyh4LWJwcCkgZm9yIHRoZSBuZXh0IGxvb3AKLSAgICAgICAgICAgIGpiIGRzdWI4bHBBCi1kc3ViOGx0ODoKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvLyBicHAgZ3JlYXRlciB0aGFuIDggYnl0ZXMKLSAgICAgIHsKLSAgICAgICAgIF9hc20gewotICAgICAgICAgICAgbW92IGVieCwgZGlmZgotICAgICAgICAgICAgbW92IGVkaSwgcm93Ci0gICAgICAgICAgICBtb3YgZXNpLCBlZGkgICAgICAgICAgIC8vIGxwID0gcm93Ci0gICAgICAgICAgICBhZGQgZWRpLCBicHAgICAgICAgICAgIC8vIHJwID0gcm93ICsgYnBwCi1kc3ViQWxwOgotICAgICAgICAgICAgbW92cSBtbTAsIFtlZGkrZWJ4XQotICAgICAgICAgICAgbW92cSBtbTEsIFtlc2krZWJ4XQotICAgICAgICAgICAgYWRkIGVieCwgOAotICAgICAgICAgICAgcGFkZGIgbW0wLCBtbTEKLSAgICAgICAgICAgIGNtcCBlYngsIE1NWExlbmd0aAotICAgICAgICAgICAgbW92cSBbZWRpK2VieC04XSwgbW0wICAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtOCB0byBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGFkZCBlYngKLSAgICAgICAgICAgIGpiIGRzdWJBbHAKLSAgICAgICAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICB9IC8vIGVuZCBzd2l0Y2ggKCBicHAgKQotCi0gICBfYXNtIHsKLSAgICAgICAgbW92IGVieCwgTU1YTGVuZ3RoCi0gICAgICAgIG1vdiBlZGksIHJvdwotICAgICAgICBjbXAgZWJ4LCBGdWxsTGVuZ3RoCi0gICAgICAgIGpuYiBkc3ViZW5kCi0gICAgICAgIG1vdiBlc2ksIGVkaSAgICAgICAgICAgICAgIC8vIGxwID0gcm93Ci0gICAgICAgIHhvciBlYXgsIGVheAotICAgICAgICBhZGQgZWRpLCBicHAgICAgICAgICAgICAgICAvLyBycCA9IHJvdyArIGJwcAotZHN1YmxwMjoKLSAgICAgICAgbW92IGFsLCBbZXNpK2VieF0KLSAgICAgICAgYWRkIFtlZGkrZWJ4XSwgYWwKLSAgICAgICAgaW5jIGVieAotICAgICAgICBjbXAgZWJ4LCBGdWxsTGVuZ3RoCi0gICAgICAgIGpiIGRzdWJscDIKLWRzdWJlbmQ6Ci0gICAgICAgIGVtbXMgICAgICAgICAgICAgLy8gRW5kIE1NWCBpbnN0cnVjdGlvbnM7IHByZXAgZm9yIHBvc3NpYmxlIEZQIGluc3Rycy4KLSAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLX0KLQotLy8gT3B0aW1pemVkIGNvZGUgZm9yIFBORyBVcCBmaWx0ZXIgZGVjb2Rlcgotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LAotICAgcG5nX2J5dGVwIHByZXZfcm93KQotewotICAgcG5nX3VpbnRfMzIgbGVuOwotICAgbGVuICA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgLy8gIyBvZiBieXRlcyB0byBmaWx0ZXIKLSAgIF9hc20gewotICAgICAgbW92IGVkaSwgcm93Ci0gICAgICAvLyBnZXQgIyBvZiBieXRlcyB0byBhbGlnbm1lbnQKLSAgICAgIG1vdiBlY3gsIGVkaQotICAgICAgeG9yIGVieCwgZWJ4Ci0gICAgICBhZGQgZWN4LCAweDcKLSAgICAgIHhvciBlYXgsIGVheAotICAgICAgYW5kIGVjeCwgMHhmZmZmZmZmOAotICAgICAgbW92IGVzaSwgcHJldl9yb3cKLSAgICAgIHN1YiBlY3gsIGVkaQotICAgICAganogZHVwZ28KLSAgICAgIC8vIGZpeCBhbGlnbm1lbnQKLWR1cGxwMToKLSAgICAgIG1vdiBhbCwgW2VkaStlYnhdCi0gICAgICBhZGQgYWwsIFtlc2krZWJ4XQotICAgICAgaW5jIGVieAotICAgICAgY21wIGVieCwgZWN4Ci0gICAgICBtb3YgW2VkaSArIGVieC0xXSwgYWwgIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci0gICAgICBqYiBkdXBscDEKLWR1cGdvOgotICAgICAgbW92IGVjeCwgbGVuCi0gICAgICBtb3YgZWR4LCBlY3gKLSAgICAgIHN1YiBlZHgsIGVieCAgICAgICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKLSAgICAgIGFuZCBlZHgsIDB4MDAwMDAwM2YgICAgICAgICAgIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDY0Ci0gICAgICBzdWIgZWN4LCBlZHggICAgICAgICAgICAgICAgICAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBsZW5ndGgKLSAgICAgIC8vIFVucm9sbGVkIGxvb3AgLSB1c2UgYWxsIE1NWCByZWdpc3RlcnMgYW5kIGludGVybGVhdmUgdG8gcmVkdWNlCi0gICAgICAvLyBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyAobG9vcHMpIGFuZCByZWR1Y2UgcGFydGlhbCBzdGFsbHMKLWR1cGxvb3A6Ci0gICAgICBtb3ZxIG1tMSwgW2VzaStlYnhdCi0gICAgICBtb3ZxIG1tMCwgW2VkaStlYnhdCi0gICAgICBtb3ZxIG1tMywgW2VzaStlYngrOF0KLSAgICAgIHBhZGRiIG1tMCwgbW0xCi0gICAgICBtb3ZxIG1tMiwgW2VkaStlYngrOF0KLSAgICAgIG1vdnEgW2VkaStlYnhdLCBtbTAKLSAgICAgIHBhZGRiIG1tMiwgbW0zCi0gICAgICBtb3ZxIG1tNSwgW2VzaStlYngrMTZdCi0gICAgICBtb3ZxIFtlZGkrZWJ4KzhdLCBtbTIKLSAgICAgIG1vdnEgbW00LCBbZWRpK2VieCsxNl0KLSAgICAgIG1vdnEgbW03LCBbZXNpK2VieCsyNF0KLSAgICAgIHBhZGRiIG1tNCwgbW01Ci0gICAgICBtb3ZxIG1tNiwgW2VkaStlYngrMjRdCi0gICAgICBtb3ZxIFtlZGkrZWJ4KzE2XSwgbW00Ci0gICAgICBwYWRkYiBtbTYsIG1tNwotICAgICAgbW92cSBtbTEsIFtlc2krZWJ4KzMyXQotICAgICAgbW92cSBbZWRpK2VieCsyNF0sIG1tNgotICAgICAgbW92cSBtbTAsIFtlZGkrZWJ4KzMyXQotICAgICAgbW92cSBtbTMsIFtlc2krZWJ4KzQwXQotICAgICAgcGFkZGIgbW0wLCBtbTEKLSAgICAgIG1vdnEgbW0yLCBbZWRpK2VieCs0MF0KLSAgICAgIG1vdnEgW2VkaStlYngrMzJdLCBtbTAKLSAgICAgIHBhZGRiIG1tMiwgbW0zCi0gICAgICBtb3ZxIG1tNSwgW2VzaStlYngrNDhdCi0gICAgICBtb3ZxIFtlZGkrZWJ4KzQwXSwgbW0yCi0gICAgICBtb3ZxIG1tNCwgW2VkaStlYngrNDhdCi0gICAgICBtb3ZxIG1tNywgW2VzaStlYngrNTZdCi0gICAgICBwYWRkYiBtbTQsIG1tNQotICAgICAgbW92cSBtbTYsIFtlZGkrZWJ4KzU2XQotICAgICAgbW92cSBbZWRpK2VieCs0OF0sIG1tNAotICAgICAgYWRkIGVieCwgNjQKLSAgICAgIHBhZGRiIG1tNiwgbW03Ci0gICAgICBjbXAgZWJ4LCBlY3gKLSAgICAgIG1vdnEgW2VkaStlYngtOF0sIG1tNiAvLyAoKzU2KW1vdnEgZG9lcyBub3QgYWZmZWN0IGZsYWdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC04IHRvIG9mZnNldCBhZGQgZWJ4Ci0gICAgICBqYiBkdXBsb29wCi0KLSAgICAgIGNtcCBlZHgsIDAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgNjQKLSAgICAgIGp6IGR1cGVuZAotCi0KLSAgICAgIC8vIDIgbGluZXMgYWRkZWQgYnkgbGNyZWV2ZSBhdCBuZXRpbnMubmV0Ci0gICAgICAvLyAobWFpbCAxMSBKdWwgOTggaW4gcG5nLWltcGxlbWVudCBsaXN0KQotICAgICAgY21wIGVkeCwgOCAvL3Rlc3QgZm9yIGxlc3MgdGhhbiA4IGJ5dGVzCi0gICAgICBqYiBkdXBsdDgKLQotCi0gICAgICBhZGQgZWN4LCBlZHgKLSAgICAgIGFuZCBlZHgsIDB4MDAwMDAwMDcgICAgICAgICAgIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKLSAgICAgIHN1YiBlY3gsIGVkeCAgICAgICAgICAgICAgICAgIC8vIGRyb3Agb3ZlciBieXRlcyBmcm9tIGxlbmd0aAotICAgICAganogZHVwbHQ4Ci0gICAgICAvLyBMb29wIHVzaW5nIE1NWCByZWdpc3RlcnMgbW0wICYgbW0xIHRvIHVwZGF0ZSA4IGJ5dGVzIHNpbXVsdGFuZW91c2x5Ci1kdXBscEE6Ci0gICAgICBtb3ZxIG1tMSwgW2VzaStlYnhdCi0gICAgICBtb3ZxIG1tMCwgW2VkaStlYnhdCi0gICAgICBhZGQgZWJ4LCA4Ci0gICAgICBwYWRkYiBtbTAsIG1tMQotICAgICAgY21wIGVieCwgZWN4Ci0gICAgICBtb3ZxIFtlZGkrZWJ4LThdLCBtbTAgLy8gbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC04IHRvIG9mZnNldCBhZGQgZWJ4Ci0gICAgICBqYiBkdXBscEEKLSAgICAgIGNtcCBlZHgsIDAgICAgICAgICAgICAvLyBUZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgOAotICAgICAganogZHVwZW5kCi1kdXBsdDg6Ci0gICAgICB4b3IgZWF4LCBlYXgKLSAgICAgIGFkZCBlY3gsIGVkeCAgICAgICAgICAvLyBtb3ZlIG92ZXIgYnl0ZSBjb3VudCBpbnRvIGNvdW50ZXIKLSAgICAgIC8vIExvb3AgdXNpbmcgeDg2IHJlZ2lzdGVycyB0byB1cGRhdGUgcmVtYWluaW5nIGJ5dGVzCi1kdXBscDI6Ci0gICAgICBtb3YgYWwsIFtlZGkgKyBlYnhdCi0gICAgICBhZGQgYWwsIFtlc2kgKyBlYnhdCi0gICAgICBpbmMgZWJ4Ci0gICAgICBjbXAgZWJ4LCBlY3gKLSAgICAgIG1vdiBbZWRpICsgZWJ4LTFdLCBhbCAvLyBtb3YgZG9lcyBub3QgYWZmZWN0IGZsYWdzOyAtMSB0byBvZmZzZXQgaW5jIGVieAotICAgICAgamIgZHVwbHAyCi1kdXBlbmQ6Ci0gICAgICAvLyBDb252ZXJzaW9uIG9mIGZpbHRlcmVkIHJvdyBjb21wbGV0ZWQKLSAgICAgIGVtbXMgICAgICAgICAgLy8gRW5kIE1NWCBpbnN0cnVjdGlvbnM7IHByZXAgZm9yIHBvc3NpYmxlIEZQIGluc3Rycy4KLSAgIH0gLy8gZW5kIF9hc20gYmxvY2sKLX0KLQotCi0vLyBPcHRpbWl6ZWQgcG5nX3JlYWRfZmlsdGVyX3JvdyByb3V0aW5lcwotdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcmVhZF9maWx0ZXJfcm93KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19yb3dfaW5mb3Agcm93X2luZm8sIHBuZ19ieXRlcAotICAgcm93LCBwbmdfYnl0ZXAgcHJldl9yb3csIGludCBmaWx0ZXIpCi17Ci0jaWZkZWYgUE5HX0RFQlVHCi0gICBjaGFyIGZpbG5tWzEwXTsKLSNlbmRpZgotCi0gICBpZiAobW14X3N1cHBvcnRlZCA9PSAyKSB7Ci0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLwotICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJhc21fZmxhZ3MgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKLSNlbmRpZgotICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwotICAgfQotCi0jaWZkZWYgUE5HX0RFQlVHCi0gICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2ZpbHRlcl9yb3dcbiIpOwotICAgc3dpdGNoIChmaWx0ZXIpCi0gICB7Ci0gICAgICBjYXNlIDA6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJub25lIik7Ci0gICAgICAgICBicmVhazsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICBjYXNlIDE6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJzdWItJXMiLAotICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpPyAiTU1YIiA6ICJ4ODYiKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidXAtJXMiLAotICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCk/ICJNTVgiIDogIng4NiIpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJhdmctJXMiLAotICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpPyAiTU1YIiA6ICJ4ODYiKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0OiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiUGFldGgtJXMiLAotICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCk/ICJNTVgiOiJ4ODYiKTsKLSAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgIGNhc2UgMTogcG5nX3NucHJpbnRmKGZpbG5tLCAxMCwgInN1YiIpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJ1cCIpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6IHBuZ19zbnByaW50ZihmaWxubSwgMTAsICJhdmciKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0OiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAiUGFldGgiKTsKLSAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICBkZWZhdWx0OiBwbmdfc25wcmludGYoZmlsbm0sIDEwLCAidW5rbnciKTsKLSAgICAgICAgIGJyZWFrOwotICAgfQotICAgcG5nX2RlYnVnMigwLCJyb3c9JTVkLCAlcywgIiwgcG5nX3B0ci0+cm93X251bWJlciwgZmlsbm0pOwotICAgcG5nX2RlYnVnMigwLCAicGQ9JTJkLCBiPSVkLCAiLCAoaW50KXJvd19pbmZvLT5waXhlbF9kZXB0aCwKLSAgICAgIChpbnQpKChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzKSk7Ci0gICBwbmdfZGVidWcxKDAsImxlbj0lOGQsICIsIHJvd19pbmZvLT5yb3dieXRlcyk7Ci0jZW5kaWYgLyogUE5HX0RFQlVHICovCi0KLSAgIHN3aXRjaCAoZmlsdGVyKQotICAgewotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX05PTkU6Ci0gICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1NVQjoKLSAgICAgIHsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQotI2Vsc2UKLSAgICAgICAgIGlmIChtbXhfc3VwcG9ydGVkKQotI2VuZGlmCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIocm93X2luZm8sIHJvdyk7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdyArIGJwcDsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLQotICAgICAgICAgICAgZm9yIChpID0gYnBwOyBpIDwgaXN0b3A7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqbHArKykpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9VUDoKLSAgICAgIHsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCi0jZWxzZQotICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3VwKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlczsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBwcCA9IHByZXZfcm93OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqcHArKykpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9BVkc6Ci0gICAgICB7Ci0jaWYgIWRlZmluZWQoUE5HXzFfMF9YKQotICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRykgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKLSNlbHNlCi0gICAgICAgICBpZiAobW14X3N1cHBvcnRlZCkKLSNlbmRpZgotICAgICAgICAgewotICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwotICAgICAgICAgICAgICAgICAgKChpbnQpKCpwcCsrKSA+PiAxKSkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArCi0gICAgICAgICAgICAgICAgICAoKGludCkoKnBwKysgKyAqbHArKykgPj4gMSkpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9QQUVUSDoKLSAgICAgIHsKLSNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCi0gICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEgpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCi0jZWxzZQotICAgICAgICAgaWYgKG1teF9zdXBwb3J0ZWQpCi0jZW5kaWYKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UKLSAgICAgICAgIHsKLSAgICAgICAgICAgIHBuZ191aW50XzMyIGk7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcnAgPSByb3c7Ci0gICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKLSAgICAgICAgICAgIHBuZ19ieXRlcCBjcCA9IHByZXZfcm93OwotICAgICAgICAgICAgcG5nX3VpbnRfMzIgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7Ci0gICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcD1yb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqcHArKykpICYgMHhmZik7Ci0gICAgICAgICAgICAgICBycCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykgICAvLyB1c2UgbGVmdG92ZXIgcnAscHAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGludCBhLCBiLCBjLCBwYSwgcGIsIHBjLCBwOwotCi0gICAgICAgICAgICAgICBhID0gKmxwKys7Ci0gICAgICAgICAgICAgICBiID0gKnBwKys7Ci0gICAgICAgICAgICAgICBjID0gKmNwKys7Ci0KLSAgICAgICAgICAgICAgIHAgPSBiIC0gYzsKLSAgICAgICAgICAgICAgIHBjID0gYSAtIGM7Ci0KLSNpZmRlZiBQTkdfVVNFX0FCUwotICAgICAgICAgICAgICAgcGEgPSBhYnMocCk7Ci0gICAgICAgICAgICAgICBwYiA9IGFicyhwYyk7Ci0gICAgICAgICAgICAgICBwYyA9IGFicyhwICsgcGMpOwotI2Vsc2UKLSAgICAgICAgICAgICAgIHBhID0gcCA8IDAgPyAtcCA6IHA7Ci0gICAgICAgICAgICAgICBwYiA9IHBjIDwgMCA/IC1wYyA6IHBjOwotICAgICAgICAgICAgICAgcGMgPSAocCArIHBjKSA8IDAgPyAtKHAgKyBwYykgOiBwICsgcGM7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykKLSAgICAgICAgICAgICAgICAgICAgIHAgPSBhOwotICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGIgPD0gcGMpCi0gICAgICAgICAgICAgICAgICAgICBwID0gYjsKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIHAgPSBjOwotICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgIHAgPSAocGEgPD0gcGIgJiYgcGEgPD1wYykgPyBhIDogKHBiIDw9IHBjKSA/IGIgOiBjOwotCi0gICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgcCkgJiAweGZmKTsKLSAgICAgICAgICAgICAgIHJwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJZ25vcmluZyBiYWQgcm93IGZpbHRlciB0eXBlIik7Ci0gICAgICAgICAqcm93PTA7Ci0gICAgICAgICBicmVhazsKLSAgIH0KLX0KLQotI2VuZGlmIC8qIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgJiYgUE5HX1VTRV9QTkdWQ1JEICovCisvKiBwbmdndnJkLmMgd2FzIHJlbW92ZWQgZnJvbSBsaWJwbmctMS4yLjIwLiAqLwpkaWZmIC0tZ2l0IGEvcG5nd3JpdGUuYyBiL3BuZ3dyaXRlLmMKaW5kZXggOGQ1Yjk4YS4uYzZkZjFlZiAxMDA2NDQKLS0tIGEvcG5nd3JpdGUuYworKysgYi9wbmd3cml0ZS5jCkBAIC00NTQsMTQgKzQ1NCw2IEBACiAgICBpZiAocG5nX3B0ciA9PSBOVUxMKQogICAgICAgcmV0dXJuIChOVUxMKTsKIAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSNpZmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECi0jaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAotICAgcG5nX2luaXRfbW14X2ZsYWdzKHBuZ19wdHIpOyAgIC8qIDEuMi4wIGFkZGl0aW9uICovCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8qIFBOR18xXzBfWCAqLwotCiAgICAvKiBhZGRlZCBhdCBsaWJwbmctMS4yLjYgKi8KICNpZmRlZiBQTkdfU0VUX1VTRVJfTElNSVRTX1NVUFBPUlRFRAogICAgcG5nX3B0ci0+dXNlcl93aWR0aF9tYXg9UE5HX1VTRVJfV0lEVEhfTUFYOwpAQCAtNjcwLDE0ICs2NjIsNiBAQAogICAgcG5nX3B0ci0+dXNlcl9oZWlnaHRfbWF4PVBOR19VU0VSX0hFSUdIVF9NQVg7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKLSNpZmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECi0jaWZkZWYgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAotICAgcG5nX2luaXRfbW14X2ZsYWdzKHBuZ19wdHIpOyAgIC8qIDEuMi4wIGFkZGl0aW9uICovCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8qIFBOR18xXzBfWCAqLwotCiAjaWZkZWYgUE5HX1NFVEpNUF9TVVBQT1JURUQKICAgIC8qIHJlc3RvcmUganVtcCBidWZmZXIgKi8KICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+am1wYnVmLCB0bXBfam1wLCBwbmdfc2l6ZW9mIChqbXBfYnVmKSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL0NNYWtlTGlzdHMudHh0IGIvc2NyaXB0cy9DTWFrZUxpc3RzLnR4dAppbmRleCA0N2M1N2EyLi5iOTQ4NjA3IDEwMDY0NAotLS0gYS9zY3JpcHRzL0NNYWtlTGlzdHMudHh0CisrKyBiL3NjcmlwdHMvQ01ha2VMaXN0cy50eHQKQEAgLTYyLDggKzYyLDYgQEAKICBlbmRpZigiJEVOVnske1RFWFR9fSIgU1RSRVFVQUwgIiIpCiBlbmRpZihOT1QgV0lOMzIpCiAKLW9wdGlvbihQTkdfTU1YICJVc2UgTU1YIGFzc2VtYmxlciBjb2RlICh4ODYgb25seSkiICR7cG5nX2FzbV90bXB9KQotCiAjIFNFVCBMSUJOQU1FCiAjIG1zdmMgZG9lcyBub3QgYXBwZW5kICdsaWInIC0gZG8gaXQgaGVyZSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZQogaWYoTVNWQykKQEAgLTEwMSwyMSArOTksOCBAQAogIyBTT01FIE5FRURFRCBERUZJTklUSU9OUwogYWRkX2RlZmluaXRpb25zKC1EWkxJQl9ETEwpCiAKLWlmKFBOR19NTVgpCi0gaWYoTVNWQykKLSAgYWRkX2RlZmluaXRpb25zKC1EUE5HX05PX01PRFVMRURFRiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkKLSAgc2V0KGxpYnBuZ19zb3VyY2VzICR7bGlicG5nX3NvdXJjZXN9Ci0gICAgICAgICAgcG5ndmNyZC5jCi0gICkKLSBlbHNlKE1TVkMpCi0gIHNldChsaWJwbmdfc291cmNlcyAke2xpYnBuZ19zb3VyY2VzfQotICAgICAgICAgIHBuZ2djY3JkLmMKLSAgKQotIGVuZGlmKE1TVkMpCi1lbHNlKFBOR19NTVgpCi0gIGFkZF9kZWZpbml0aW9ucygtRExJQlBOR19OT19NTVgpCi0gIGFkZF9kZWZpbml0aW9ucygtRFBOR19OT19NTVhfQ09ERSkKLWVuZGlmKFBOR19NTVgpCithZGRfZGVmaW5pdGlvbnMoLURMSUJQTkdfTk9fTU1YKQorYWRkX2RlZmluaXRpb25zKC1EUE5HX05PX01NWF9DT0RFKQogCiBpZihQTkdfQ09OU09MRV9JT19TVVBQT1JURUQpCiAgYWRkX2RlZmluaXRpb25zKC1EUE5HX0NPTlNPTEVfSU9fU1VQUE9SVEVEKQpAQCAtMTgwLDcgKzE2NSw3IEBACiAKICMgU0VUIFVQIExJTktTCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtQTkdfTElCX05BTUV9IFBST1BFUlRJRVMKLSMgICAgVkVSU0lPTiAwLiR7UE5HTElCX1JFTEVBU0V9LjEuMi4yMHJjMworIyAgICBWRVJTSU9OIDAuJHtQTkdMSUJfUkVMRUFTRX0uMS4yLjIwcmM0CiAgICAgIFZFUlNJT04gMC4ke1BOR0xJQl9SRUxFQVNFfS4wCiAgICAgIFNPVkVSU0lPTiAwCiAgICAgIENMRUFOX0RJUkVDVF9PVVRQVVQgMSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGlicG5nLWNvbmZpZy1oZWFkLmluIGIvc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW4KaW5kZXggMDI4OTM2OS4uOGY4ZTI5YiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW4KKysrIGIvc2NyaXB0cy9saWJwbmctY29uZmlnLWhlYWQuaW4KQEAgLTgsNyArOCw3IEBACiAKICMgTW9kZWxlZCBhZnRlciBsaWJ4bWwtY29uZmlnLgogCi12ZXJzaW9uPTEuMi4yMHJjMwordmVyc2lvbj0xLjIuMjByYzQKIHByZWZpeD0iIgogbGliZGlyPSIiCiBsaWJzPSIiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYnBuZy5wYy1jb25maWd1cmUuaW4gYi9zY3JpcHRzL2xpYnBuZy5wYy1jb25maWd1cmUuaW4KaW5kZXggMDNlMDhlMi4uYWIzOWUyMCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9saWJwbmcucGMtY29uZmlndXJlLmluCisrKyBiL3NjcmlwdHMvbGlicG5nLnBjLWNvbmZpZ3VyZS5pbgpAQCAtNSw2ICs1LDYgQEAKIAogTmFtZTogbGlicG5nCiBEZXNjcmlwdGlvbjogTG9hZHMgYW5kIHNhdmVzIFBORyBmaWxlcwotVmVyc2lvbjogMS4yLjIwcmMzCitWZXJzaW9uOiAxLjIuMjByYzQKIExpYnM6IC1MJHtsaWJkaXJ9IC1scG5nMTIKIENmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBMSUJQTkdfTk9fTU1YQApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWJwbmcucGMuaW4gYi9zY3JpcHRzL2xpYnBuZy5wYy5pbgppbmRleCBkM2U2ODhkLi5kODNlMmQ4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2xpYnBuZy5wYy5pbgorKysgYi9zY3JpcHRzL2xpYnBuZy5wYy5pbgpAQCAtNSw2ICs1LDYgQEAKIAogTmFtZTogbGlicG5nCiBEZXNjcmlwdGlvbjogTG9hZHMgYW5kIHNhdmVzIFBORyBmaWxlcwotVmVyc2lvbjogMS4yLjIwcmMzCitWZXJzaW9uOiAxLjIuMjByYzQKIExpYnM6IC1MJHtsaWJkaXJ9IC1scG5nMTIKIENmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLjMyc3VudSBiL3NjcmlwdHMvbWFrZWZpbGUuMzJzdW51CmluZGV4IGZiNGRjNDUuLjEyNTU5OTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuMzJzdW51CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuMzJzdW51CkBAIC04LDcgKzgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FPWxpYnBuZzEyCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjIuMjByYzMKK1BOR01JTiA9IDEuMi4yMHJjNAogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS42NHN1bnUgYi9zY3JpcHRzL21ha2VmaWxlLjY0c3VudQppbmRleCAwYjg1NjRmLi5hZWQ2OWVkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLjY0c3VudQorKysgYi9zY3JpcHRzL21ha2VmaWxlLjY0c3VudQpAQCAtOCw3ICs4LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRT1saWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYWl4IGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKaW5kZXggMWQzMWYwZC4uZjMyMjMzZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5haXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKQEAgLTIwLDcgKzIwLDcgQEAKIAogTElCTkFNRT1saWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogcHJlZml4PS91c3IvbG9jYWwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcyBiL3NjcmlwdHMvbWFrZWZpbGUuYmVvcwppbmRleCBkNTk1MjMzLi4xNTQ0OWM0IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmJlb3MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCkBAIC04LDcgKzgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FPWxpYnBuZzEyCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjIuMjByYzMKK1BOR01JTiA9IDEuMi4yMHJjNAogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4gYi9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgppbmRleCA3MDFlNmIxLi4yODEyYWMyIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgorKysgYi9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgpAQCAtMzEsOSArMzEsNiBAQAogCiBERVNURElSPQogCi0jIFRvIGRpc2FibGUgYXNzZW1ibGVyIG9wdGltaXphdGlvbnMsIGFkZCAnLURQTkdfTk9fTU1YX0NPREUnIHRvCi0jICRDRkxBR1MuICBUbyBlbmFibGUsIGFkZCBwbmdnY2NyZC5vIHRvIHRoZSBkZXBlbmRlbmNpZXMuCi0KIENDPWdjYwogaWZkZWYgTUlOR1cKIE1JTkdXX0NDRkxBR1M9LW1uby1jeWd3aW4gLUkvdXNyL2luY2x1ZGUvbWluZ3cKQEAgLTc3LDcgKzc0LDcgQEAKIExJQk5BTUUgPSBsaWJwbmcxMgogUE5HTUFKID0gMAogQ1lHRExMID0gMTIKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIFNIQVJFRExJQj1jeWdwbmckKENZR0RMTCkuZGxsCkBAIC0xMTIsNyArMTA5LDcgQEAKIAogT0JKUyA9IHBuZy5vIHBuZ3NldC5vIHBuZ2dldC5vIHBuZ3J1dGlsLm8gcG5ndHJhbnMubyBwbmd3dXRpbC5vIFwKIAlwbmdyZWFkLm8gcG5ncmlvLm8gcG5nd2lvLm8gcG5nd3JpdGUubyBwbmdydHJhbi5vIFwKLQlwbmd3dHJhbi5vIHBuZ21lbS5vIHBuZ2Vycm9yLm8gcG5ncHJlYWQubyAjIHBuZ2djY3JkLm8KKwlwbmd3dHJhbi5vIHBuZ21lbS5vIHBuZ2Vycm9yLm8gcG5ncHJlYWQubwogCiBPQkpTRExMID0gJChPQkpTOi5vPS5waWMubykKIApAQCAtMTU2LDIwICsxNTMsNiBAQAogYWxsLXN0YXRpYzogJChTVEFUTElCKSBwbmd0ZXN0LXN0YXQkKEVYRSkKIGFsbC1zaGFyZWQ6ICQoU0hBUkVETElCKSBwbmd0ZXN0JChFWEUpCiAKLSMgcG5nZ2NjcmQubzogcG5nZ2NjcmQuYyBwbmcuaCBwbmdjb25mLmgKLSMJQGVjaG8gIiIKLSMJQGVjaG8gJyAgICBZb3UgY2FuIGlnbm9yZSB0aGUgImNvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24iJwotIwlAZWNobyAnICAgIHdhcm5pbmcgYW5kICI8dmFyaWFibGU+IGRlZmluZWQgYnV0IG5vdCB1c2VkIiB3YXJuaW5nczonCi0jCUBlY2hvICIiCi0jCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAotCi0jIHBuZ2djY3JkLnBpYy5vOglwbmdnY2NyZC5jIHBuZy5oIHBuZ2NvbmYuaAotIwlAZWNobyAiIgotIwlAZWNobyAnICAgIFlvdSBjYW4gaWdub3JlIHRoZSAiY29udHJvbCByZWFjaGVzIGVuZCBvZiBub24tdm9pZCBmdW5jdGlvbiInCi0jCUBlY2hvICcgICAgd2FybmluZyBhbmQgIjx2YXJpYWJsZT4gZGVmaW5lZCBidXQgbm90IHVzZWQiIHdhcm5pbmdzOicKLSMJQGVjaG8gIiIKLSMJJChDQykgLWMgJChDRkxBR1MpIC1EUE5HX0JVSUxEX0RMTCAtbyAkQCAkPAotCiAkKFNUQVRMSUIpOiAkKE9CSlMpCiAJYXIgcmMgJEAgJChPQkpTKQogCSQoUkFOTElCKSAkQApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5kYXJ3aW4gYi9zY3JpcHRzL21ha2VmaWxlLmRhcndpbgppbmRleCBmODRjMDcwLi4yYTI3ZDFmIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmRhcndpbgorKysgYi9zY3JpcHRzL21ha2VmaWxlLmRhcndpbgpAQCAtMTksNyArMTksNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmRlYyBiL3NjcmlwdHMvbWFrZWZpbGUuZGVjCmluZGV4IGIxODczMGYuLmE5ZDI0M2UgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZGVjCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuZGVjCkBAIC01LDcgKzUsNyBAQAogCiAjIExpYnJhcnkgbmFtZToKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiBMSUJOQU1FID0gbGlicG5nMTIKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5lbGYgYi9zY3JpcHRzL21ha2VmaWxlLmVsZgppbmRleCBkN2Y0OWJlLi40ZDhlMDRjIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmVsZgorKysgYi9zY3JpcHRzL21ha2VmaWxlLmVsZgpAQCAtMTIsNyArMTIsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmdjbW14IGIvc2NyaXB0cy9tYWtlZmlsZS5nY21teAppbmRleCBhOTliZWY1Li4xYmM1MjE1IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmdjbW14CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKQEAgLTcsOCArNyw2IEBACiAKICMgQ0FVVElPTjogRG8gbm90IHVzZSB0aGlzIG1ha2VmaWxlIHdpdGggZ2NjIHZlcnNpb25zIDIuNy4yLjIgYW5kIGVhcmxpZXIuCiAKLSMgV0FSTklORzogVGhlIGFzc2VtYmxlciBjb2RlIGluIHBuZ2djY3JkLmMgbWF5IG5vdCBiZSB0aHJlYWQgc2FmZS4KLQogIyBOT1RFOiAgV2hlbiB0ZXN0aW5nIE1NWCBwZXJmb3JtYW5jZSBvbiBhIG11bHRpdGFza2luZyBzeXN0ZW0sIG1ha2Ugc3VyZQogIyAgICAgICAgdGhlcmUgYXJlIG5vIGZsb2F0aW5nLXBvaW50IHByb2dyYW1zIChlLmcuLCBTRVRJQEhvbWUpIHJ1bm5pbmcgaW4KICMgICAgICAgIHRoZSBiYWNrZ3JvdW5kISAgQ29udGV4dCBzd2l0Y2hlcyBiZXR3ZWVuIE1NWCBhbmQgRlBVIGFyZSBleHBlbnNpdmUuCkBAIC0xNiw3ICsxNCw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKQEAgLTk4LDcgKzk2LDcgQEAKIAogT0JKUyA9IHBuZy5vIHBuZ3NldC5vIHBuZ2dldC5vIHBuZ3J1dGlsLm8gcG5ndHJhbnMubyBwbmd3dXRpbC5vIFwKIAlwbmdyZWFkLm8gcG5ncmlvLm8gcG5nd2lvLm8gcG5nd3JpdGUubyBwbmdydHJhbi5vIFwKLQlwbmd3dHJhbi5vIHBuZ21lbS5vIHBuZ2Vycm9yLm8gcG5ncHJlYWQubyBwbmdnY2NyZC5vCisJcG5nd3RyYW4ubyBwbmdtZW0ubyBwbmdlcnJvci5vIHBuZ3ByZWFkLm8KIAogT0JKU0RMTCA9ICQoT0JKUzoubz0ucGljLm8pCiAKQEAgLTEyNywxMiArMTI1LDYgQEAKIAljYXQgc2NyaXB0cy9saWJwbmctY29uZmlnLWJvZHkuaW4gKSA+IGxpYnBuZy1jb25maWcKIAljaG1vZCAreCBsaWJwbmctY29uZmlnCiAKLXBuZ2djY3JkLm86CXBuZ2djY3JkLmMgcG5nLmggcG5nY29uZi5oCi0JJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQqLmMKLQotcG5nZ2NjcmQucGljLm86CXBuZ2djY3JkLmMgcG5nLmggcG5nY29uZi5oCi0JJChDQykgLWMgJChDRkxBR1MpIC1mUElDIC1vICRAIHBuZ2djY3JkLmMKLQogJChMSUJTTyk6ICQoTElCU09NQUopCiAJJChMTl9TRikgJChMSUJTT01BSikgJChMSUJTTykKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocDY0IGIvc2NyaXB0cy9tYWtlZmlsZS5ocDY0CmluZGV4IDY0NjY2MTIuLjM4Yzg5NmMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuaHA2NAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwNjQKQEAgLTE4LDcgKzE4LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRSA9IGxpYnBuZzEyCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjIuMjByYzMKK1BOR01JTiA9IDEuMi4yMHJjNAogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYyBiL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKaW5kZXggM2NmYTNlMy4uMzQwNTNjZSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYworKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCkBAIC04LDcgKzgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmhwdXggYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKaW5kZXggNTQzYTE0ZC4uZDkyMjIyZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaHB1eApAQCAtMTgsNyArMTgsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmludGVsIGIvc2NyaXB0cy9tYWtlZmlsZS5pbnRlbAppbmRleCBhMTU1ZGRkLi5iMGI1MjNhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmludGVsCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaW50ZWwKQEAgLTM2LDcgKzM2LDcgQEAKIAogT0JKUz1wbmckKE8pIHBuZ3NldCQoTykgcG5nZ2V0JChPKSBwbmdydXRpbCQoTykgcG5ndHJhbnMkKE8pIHBuZ3d1dGlsJChPKSBcCiBwbmdtZW0kKE8pIHBuZ3ByZWFkJChPKSBwbmdyZWFkJChPKSBwbmdlcnJvciQoTykgcG5nd3JpdGUkKE8pIFwKLXBuZ3J0cmFuJChPKSBwbmd3dHJhbiQoTykgcG5ncmlvJChPKSBwbmd3aW8kKE8pIHBuZ3ZjcmQkKE8pIHBuZ2djY3JkJChPKQorcG5ncnRyYW4kKE8pIHBuZ3d0cmFuJChPKSBwbmdyaW8kKE8pIHBuZ3dpbyQoTykKIAogYWxsOiB0ZXN0CiAKQEAgLTYxLDEyICs2MSw2IEBACiBwbmdydXRpbCQoTyk6IHBuZy5oIHBuZ2NvbmYuaAogCSQoQ0MpICQoQ0ZMQUdTKSAkKi5jICQoRVJSRklMRSkKIAotcG5nZ2NjcmQkKE8pOiBwbmcuaCBwbmdjb25mLmgKLQkkKENDKSAkKENGTEFHUykgJCouYyAkKEVSUkZJTEUpCi0KLXBuZ3ZjcmQkKE8pOiBwbmcuaCBwbmdjb25mLmgKLQkkKENDKSAkKENGTEFHUykgJCouYyAkKEVSUkZJTEUpCi0KIHBuZ2Vycm9yJChPKTogcG5nLmggcG5nY29uZi5oCiAJJChDQykgJChDRkxBR1MpICQqLmMgJChFUlJGSUxFKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmxpbnV4IGIvc2NyaXB0cy9tYWtlZmlsZS5saW51eAppbmRleCA5ZWU4MWY2Li4yYzgzYzIxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUubGludXgKQEAgLTYsNyArNiw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUubWluZ3cgYi9zY3JpcHRzL21ha2VmaWxlLm1pbmd3CmluZGV4IDA5ZmFlZmQuLjQzOTYzZTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubWluZ3cKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5taW5ndwpAQCAtMzksMTAgKzM5LDYgQEAKIAogTUtESVJfUD0vYmluL21rZGlyIC1wdgogCi0KLSMgVG8gZGlzYWJsZSBhc3NlbWJsZXIgb3B0aW1pemF0aW9ucywgYWRkICctRFBOR19OT19NTVhfQ09ERScgdG8KLSMgJENGTEFHUy4gIFRvIGVuYWJsZSB0aGVtLCBhZGQgcG5nZ2NjcmQubyB0byB0aGUgZGVwZW5kZW5jaWVzLgotCiAjIFdoZXJlICJtYWtlIGluc3RhbGwiIHB1dHMgbGlicG5nKi5hLCAqcG5nKi5kbGwsIHBuZy5oLCBhbmQgcG5nY29uZi5oCiBpZm5kZWYgcHJlZml4CiBwcmVmaXg9L3VzcgpAQCAtNzgsNyArNzQsNyBAQAogTElCTkFNRSA9IGxpYnBuZzEyCiBQTkdNQUogPSAwCiBNSU5HRExMID0gMTIKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIFNIQVJFRExJQj1saWJwbmckKE1JTkdETEwpLmRsbApAQCAtMTA5LDcgKzEwNSw3IEBACiAKIE9CSlMgPSBwbmcubyBwbmdzZXQubyBwbmdnZXQubyBwbmdydXRpbC5vIHBuZ3RyYW5zLm8gcG5nd3V0aWwubyBcCiAJcG5ncmVhZC5vIHBuZ3Jpby5vIHBuZ3dpby5vIHBuZ3dyaXRlLm8gcG5ncnRyYW4ubyBcCi0JcG5nd3RyYW4ubyBwbmdtZW0ubyBwbmdlcnJvci5vIHBuZ3ByZWFkLm8gIyBwbmdnY2NyZC5vCisJcG5nd3RyYW4ubyBwbmdtZW0ubyBwbmdlcnJvci5vIHBuZ3ByZWFkLm8KIAogT0JKU0RMTCA9ICQoT0JKUzoubz0ucGljLm8pCiAKQEAgLTI4Miw3ICsyNzgsNiBAQAogcG5nd3RyYW4ubyBwbmd3dHJhbi5waWMubzoJcG5nLmggcG5nY29uZi5oIHBuZ3d0cmFuLmMKIHBuZ3d1dGlsLm8gcG5nd3V0aWwucGljLm86CXBuZy5oIHBuZ2NvbmYuaCBwbmd3dXRpbC5jCiBwbmdwcmVhZC5vIHBuZ3ByZWFkLnBpYy5vOglwbmcuaCBwbmdjb25mLmggcG5ncHJlYWQuYwotIyBwbmdnY2NyZC5vIHBuZ2djY3JkLnBpYy5vOglwbmcuaCBwbmdjb25mLmggcG5nZ2NjcmQuYwogCiBwbmd0ZXN0Lm8gcG5ndGVzdC5waWMubzoJcG5nLmggcG5nY29uZi5oIHBuZ3Rlc3QuYwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLm5lMTJic2QgYi9zY3JpcHRzL21ha2VmaWxlLm5lMTJic2QKaW5kZXggNDIyZTUxNi4uZGU5YzU2YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5uZTEyYnNkCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUubmUxMmJzZApAQCAtMTQsMTAgKzE0LDEwIEBACiAKIExJQj0JcG5nMTIKIFNITElCX01BSk9SPQkwCi1TSExJQl9NSU5PUj0JMS4yLjIwcmMzCi1TUkNTPQlwbmdnY2NyZC5jIHBuZy5jIHBuZ3NldC5jIHBuZ2dldC5jIHBuZ3J1dGlsLmMgcG5ndHJhbnMuYyBwbmd3dXRpbC5jIFwKLQkJcG5ncmVhZC5jIHBuZ3Jpby5jIHBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5ncnRyYW4uYyBcCi0JCXBuZ3d0cmFuLmMgcG5nbWVtLmMgcG5nZXJyb3IuYyBwbmdwcmVhZC5jCitTSExJQl9NSU5PUj0JMS4yLjIwcmM0CitTUkNTPQlwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCisJcG5ncmVhZC5jIHBuZ3Jpby5jIHBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5ncnRyYW4uYyBcCisJcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMKIElOQ1M9CXBuZy5oIHBuZ2NvbmYuaAogTUFOPQlsaWJwbmcuMyBsaWJwbmdwZi4zIHBuZy41CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUubmV0YnNkIGIvc2NyaXB0cy9tYWtlZmlsZS5uZXRic2QKaW5kZXggYzEyMTllMi4uMjZiZTg3ZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5uZXRic2QKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5uZXRic2QKQEAgLTE0LDEwICsxNCwxMCBAQAogCiBMSUI9CXBuZwogU0hMSUJfTUFKT1I9CTMKLVNITElCX01JTk9SPQkxLjIuMjByYzMKLVNSQ1M9CXBuZ2djY3JkLmMgcG5nLmMgcG5nc2V0LmMgcG5nZ2V0LmMgcG5ncnV0aWwuYyBwbmd0cmFucy5jIHBuZ3d1dGlsLmMgXAotCQlwbmdyZWFkLmMgcG5ncmlvLmMgcG5nd2lvLmMgcG5nd3JpdGUuYyBwbmdydHJhbi5jIFwKLQkJcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMKK1NITElCX01JTk9SPQkxLjIuMjByYzQKK1NSQ1M9CXBuZy5jIHBuZ3NldC5jIHBuZ2dldC5jIHBuZ3J1dGlsLmMgcG5ndHJhbnMuYyBwbmd3dXRpbC5jIFwKKwlwbmdyZWFkLmMgcG5ncmlvLmMgcG5nd2lvLmMgcG5nd3JpdGUuYyBwbmdydHJhbi5jIFwKKwlwbmd3dHJhbi5jIHBuZ21lbS5jIHBuZ2Vycm9yLmMgcG5ncHJlYWQuYwogSU5DUz0JcG5nLmggcG5nY29uZi5oCiBNQU49CWxpYnBuZy4zIGxpYnBuZ3BmLjMgcG5nLjUKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ub21teCBiL3NjcmlwdHMvbWFrZWZpbGUubm9tbXgKaW5kZXggYTJkODQwYi4uZTFiOGMwMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ub21teAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5vbW14CkBAIC03LDcgKzcsNyBAQAogIyBMaWJyYXJ5IG5hbWU6CiBMSUJOQU1FID0gbGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLm9wZW5ic2QgYi9zY3JpcHRzL21ha2VmaWxlLm9wZW5ic2QKaW5kZXggOWU4NWI2Zi4uOTEyNTk2MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5vcGVuYnNkCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUub3BlbmJzZApAQCAtOCwxMCArOCwxMCBAQAogTUFORElSPSAke1BSRUZJWH0vbWFuL2NhdAogCiBTSExJQl9NQUpPUj0JMAotU0hMSUJfTUlOT1I9CTEuMi4yMHJjMworU0hMSUJfTUlOT1I9CTEuMi4yMHJjNAogCiBMSUI9CXBuZwotU1JDUz0JcG5nLmMgcG5nZXJyb3IuYyBwbmdnY2NyZC5jIHBuZ2dldC5jIHBuZ21lbS5jIHBuZ3ByZWFkLmMgXAorU1JDUz0JcG5nLmMgcG5nZXJyb3IuYyBwbmdnZXQuYyBwbmdtZW0uYyBwbmdwcmVhZC5jIFwKIAlwbmdyZWFkLmMgcG5ncmlvLmMgcG5ncnRyYW4uYyBwbmdydXRpbC5jIHBuZ3NldC5jIHBuZ3RyYW5zLmMgXAogCXBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5nd3RyYW4uYyBwbmd3dXRpbC5jCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2NvIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KaW5kZXggZGFhNTY2MS4uMzgyN2Y1MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zY28KKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KQEAgLTksNyArOSw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MgYi9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCmluZGV4IDk0ZjQyOGMuLjU4ZjdlYzYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYwpAQCAtNiw3ICs2LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRT1saWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dpIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKaW5kZXggMzcxZmMzMi4uNjRhNjU5NSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKQEAgLTYsNyArNiw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUU9bGlicG5nMTIKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKICMgU2hhcmVkIGxpYnJhcnkgbmFtZXM6CmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNvOSBiL3NjcmlwdHMvbWFrZWZpbGUuc285CmluZGV4IDRkYWNlMjkuLjNiMWEyODYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc285CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc285CkBAIC04LDcgKzgsNyBAQAogCiAjIExpYnJhcnkgbmFtZToKIFBOR01BSiA9IDAKLVBOR01JTiA9IDEuMi4yMHJjMworUE5HTUlOID0gMS4yLjIwcmM0CiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiBMSUJOQU1FID0gbGlicG5nMTIKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCmluZGV4IGRhZjk2ZjguLjAxYjEwZjQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcworKysgYi9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKQEAgLTgsNyArOCw3IEBACiAjIExpYnJhcnkgbmFtZToKIExJQk5BTUUgPSBsaWJwbmcxMgogUE5HTUFKID0gMAotUE5HTUlOID0gMS4yLjIwcmMzCitQTkdNSU4gPSAxLjIuMjByYzQKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyBTaGFyZWQgbGlicmFyeSBuYW1lczoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcy14ODYgYi9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMteDg2CmluZGV4IDdhOWZjMTYuLmU0ZTJiNzQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcy14ODYKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzLXg4NgpAQCAtOCw3ICs4LDcgQEAKICMgTGlicmFyeSBuYW1lOgogTElCTkFNRSA9IGxpYnBuZzEyCiBQTkdNQUogPSAwCi1QTkdNSU4gPSAxLjIuMjByYzMKK1BOR01JTiA9IDEuMi4yMHJjNAogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiAjIFNoYXJlZCBsaWJyYXJ5IG5hbWVzOgpAQCAtNjksNyArNjksNyBAQAogCiBPQkpTID0gcG5nLm8gcG5nc2V0Lm8gcG5nZ2V0Lm8gcG5ncnV0aWwubyBwbmd0cmFucy5vIHBuZ3d1dGlsLm8gXAogCXBuZ3JlYWQubyBwbmdyaW8ubyBwbmd3aW8ubyBwbmd3cml0ZS5vIHBuZ3J0cmFuLm8gXAotCXBuZ3d0cmFuLm8gcG5nbWVtLm8gcG5nZXJyb3IubyBwbmdwcmVhZC5vIHBuZ2djY3JkLm8KKwlwbmd3dHJhbi5vIHBuZ21lbS5vIHBuZ2Vycm9yLm8gcG5ncHJlYWQubwogCiBPQkpTRExMID0gJChPQkpTOi5vPS5waWMubykKIApAQCAtMjMyLDcgKzIzMiw2IEBACiBwbmdtZW0ubyBwbmdtZW0ucGljLm86IHBuZy5oIHBuZ2NvbmYuaAogcG5nc2V0Lm8gcG5nc2V0LnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKIHBuZ2dldC5vIHBuZ2dldC5waWMubzogcG5nLmggcG5nY29uZi5oCi1wbmdnY2NyZC5vIHBuZ2djY3JkLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKIHBuZ3JlYWQubyBwbmdyZWFkLnBpYy5vOiBwbmcuaCBwbmdjb25mLmgKIHBuZ3J0cmFuLm8gcG5ncnRyYW4ucGljLm86IHBuZy5oIHBuZ2NvbmYuaAogcG5ncnV0aWwubyBwbmdydXRpbC5waWMubzogcG5nLmggcG5nY29uZi5oCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnZjYXdpbjMyIGIvc2NyaXB0cy9tYWtlZmlsZS52Y2F3aW4zMgppbmRleCA0YzJmM2NjLi45OWY1NDMwIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnZjYXdpbjMyCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUudmNhd2luMzIKQEAgLTI2LDggKzI2LDcgQEAKIE9CSlMxID0gcG5nJChPKSBwbmdlcnJvciQoTykgcG5nZ2V0JChPKSBwbmdtZW0kKE8pIHBuZ3ByZWFkJChPKQogT0JKUzIgPSBwbmdyZWFkJChPKSBwbmdyaW8kKE8pIHBuZ3J0cmFuJChPKSBwbmdydXRpbCQoTykgcG5nc2V0JChPKQogT0JKUzMgPSBwbmd0cmFucyQoTykgcG5nd2lvJChPKSBwbmd3cml0ZSQoTykgcG5nd3RyYW4kKE8pIHBuZ3d1dGlsJChPKQotT0JKUzQgPSBwbmd2Y3JkJChPKQotT0JKUyAgPSAkKE9CSlMxKSAkKE9CSlMyKSAkKE9CSlMzKSAkKE9CSlM0KQorT0JKUyAgPSAkKE9CSlMxKSAkKE9CSlMyKSAkKE9CSlMzKQogCiAjIFRhcmdldHMKIGFsbDogbGlicG5nLmxpYgpAQCAtODAsOSArNzksNiBAQAogcG5nd3V0aWwkKE8pOiBwbmcuaCBwbmdjb25mLmgKIAkkKENDKSAtYyAkKENGTEFHUykgJCouYyAkKEVSUkZJTEUpCiAKLXBuZ3ZjcmQkKE8pOiBwbmcuaCBwbmdjb25mLmgKLQkkKENDKSAtYyAkKENGTEFHUykgJCouYyAkKEVSUkZJTEUpCi0KIGxpYnBuZy5saWI6ICQoT0JKUykKIAktJChSTSkgJEAKIAkkKEFSKSAkKEFSRkxBR1MpIC1vdXQ6JEAgJChPQkpTKSAkKEVSUkZJTEUpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BuZ29zMi5kZWYgYi9zY3JpcHRzL3BuZ29zMi5kZWYKaW5kZXggZDYwNzRmMy4uNGE2YjNmMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wbmdvczIuZGVmCisrKyBiL3NjcmlwdHMvcG5nb3MyLmRlZgpAQCAtMiw3ICsyLDcgQEAKIDsgUE5HLkxJQiBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIGZvciBPUy8yCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi07IFZlcnNpb24gMS4yLjIwcmMzCis7IFZlcnNpb24gMS4yLjIwcmM0CiAKIExJQlJBUlkJCVBORwogREVTQ1JJUFRJT04JIlBORyBpbWFnZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGZvciBPUy8yIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wbmd3MzIuZGVmIGIvc2NyaXB0cy9wbmd3MzIuZGVmCmluZGV4IDA1YTk3Y2YuLmIzMWZhNzkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcG5ndzMyLmRlZgorKysgYi9zY3JpcHRzL3BuZ3czMi5kZWYKQEAgLTUsNyArNSw3IEBACiBMSUJSQVJZCiAKIEVYUE9SVFMKLTtWZXJzaW9uIDEuMi4yMHJjMworO1ZlcnNpb24gMS4yLjIwcmM0CiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMK