{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "hash": "nwJGf2ijg1ZmDODH3frXT7Dpsh/XXZmf0j7LH3nv9hc=",
    "height": "374238",
    "index": 0,
    "tx_result": {
      "ResponseBase": {
        "Error": null,
        "Data": null,
        "Events": null,
        "Log": "msg:0,success:true,log:,events:[]",
        "Info": ""
      },
      "GasWanted": "65111662",
      "GasUsed": "43407775"
    },
    "tx": "CpX8AQoML3ZtLm1fYWRkcGtnEoP8AQooZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMxLG+wEKB3BlcmlvZHMSO2duby5sYW5kL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9wZXJpb2RzGmIKC2dub21vZC50b21sElNtb2R1bGUgPSAiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3BlcmlvZHMiCmdubyA9ICIwLjkiChqY+gEKC3BlcmlvZHMuZ25vEof6AS8vIFBhY2thZ2UgcGVyaW9kcyB0dXJucyBhIGN1bXVsYXRpdmUgZG91YmxlLWVudHJ5IGJvb2sgaW50byBhIHBlcmlvZCByZXBvcnQ6Ci8vIHBlci1hY2NvdW50IG1vdmVtZW50IG92ZXIgYSBkYXRlIHdpbmRvdywgdGhlIHBlcmlvZCBpbmNvbWUgc3RhdGVtZW50LCBhbmQKLy8gdGhlIGNsb3NpbmcgZW50cnkgdGhhdCBzd2VlcHMgbm9taW5hbCBhY2NvdW50cyBpbnRvIGVxdWl0eS4KLy8KLy8gW3Avam91cm5hbF0gaXMgY3VtdWxhdGl2ZSBieSBjb25zdHJ1Y3Rpb24gYW5kIHNheXMgc28uIEl0cyBDbG9zZSBpcyBhCi8vIGJhY2tkYXRpbmcgc2VhbCDigJQgaXQgcmVmdXNlcyBlbnRyaWVzIGRhdGVkIGF0IG9yIGJlZm9yZSBhIGN1dG9mZiBhbmQgZG9lcwovLyBub3Qgc3dlZXAgYW55dGhpbmcg4oCUIHNvIHJldmVudWUgYW5kIGV4cGVuc2UgYWNjdW11bGF0ZSBmcm9tIHRoZSBib29rJ3MgZmlyc3QKLy8gcG9zdGluZyBmb3JldmVyLCBhbmQgW3Avc3RhdGVtZW50c10gbmFtZXMgaXRzIHRocmVlIGZpZ3VyZXMKLy8gQ3VtdWxhdGl2ZVJldmVudWUsIEN1bXVsYXRpdmVFeHBlbnNlcyBhbmQgQ3VtdWxhdGl2ZU5ldCBmb3IgdGhhdCByZWFzb24uIEl0cwovLyBwYWNrYWdlIGRvYyBzdGF0ZXMgdGhlIGdhcCBpbiBvbmUgc2VudGVuY2U6ICJBIHBlcmlvZCBpbmNvbWUgc3RhdGVtZW50IG5lZWRzCi8vIGVudHJ5LWxldmVsIGRhdGEgYW5kIGlzIG91dCBvZiBzY29wZS4iIFRoaXMgcGFja2FnZSBpcyB0aGF0IGVudHJ5LWxldmVsCi8vIGNvbnN1bWVyLiBJdCByZWFkcyBubyBjaGFpbiwgaG9sZHMgbm8gc3RhdGUsIGFuZCB3cml0ZXMgbm90aGluZy4KLy8KLy8JdyA6PSBXaW5kb3d7RnJvbTogcTFTdGFydCwgVW50aWw6IHEyU3RhcnR9Ci8vCXJlcCwgZXJyIDo9IERlcml2ZShjaGFydCwgZW50cmllcywgdykKLy8JLy8gcmVwLkFjdGl2aXR5LCByZXAuUGVyaW9kTmV0LCByZXAuQ3Jvc3NXaW5kb3dSZXZlcnNhbHMKLy8JcG9zdCwgZXJyIDo9IHJlcC5DbG9zaW5nRW50cnkoIjMxMDAiKSAgIC8vIGEgUFJPUE9TQUwsIG5vdCBhIHdyaXRlCi8vCi8vICMgV2h5IHRoZSBjaGFydCBpcyBhIHBhcmFtZXRlcgovLwovLyBbam91cm5hbC5Qb3N0aW5nXSBpcyB7QWNjb3VudCBzdHJpbmcsIFNpZGUsIEFtb3VudCBpbnQ2NH06IGl0IGNhcnJpZXMgdGhlCi8vIGFjY291bnQncyBDT0RFIGFuZCBuZXZlciBpdHMgS2luZC4gU28gcmV2ZW51ZSBjYW5ub3QgYmUgdG9sZCBmcm9tIGV4cGVuc2UKLy8gZnJvbSBwb3N0aW5ncyBhbG9uZSwgYW5kIG5vIGluY29tZSBzdGF0ZW1lbnQgaXMgZGVyaXZhYmxlIHdpdGhvdXQgdGhlIGNoYXJ0LgovLyBUaGF0IHNpbmdsZSBmYWN0IGZpeGVzIHRoaXMgcGFja2FnZSdzIHNpZ25hdHVyZS4gT25seSBDb2RlLCBOYW1lIGFuZCBLaW5kCi8vIGFyZSByZWFkOyBEZWJpdHMgYW5kIENyZWRpdHMgYXJlIHRoZSBib29rJ3MgQ1VNVUxBVElWRSBjb2x1bW5zIGFuZCBhcmUKLy8gZGVsaWJlcmF0ZWx5IG5laXRoZXIgcmVhZCBub3IgdmFsaWRhdGVkIGhlcmUsIGJlY2F1c2UgcGVyaW9kIG1vdmVtZW50IGNvbWVzCi8vIGZyb20gdGhlIGVudHJpZXMuCi8vCi8vICMgVGhlIHdpbmRvdyBpcyBjbG9zZWQtb3BlbgovLwovLyBbV2luZG93XSBpcyBbRnJvbSwgVW50aWwpOiBGcm9tIGlzIGluY2x1ZGVkLCBVbnRpbCBpcyBub3QuIENvbnNlY3V0aXZlCi8vIHBlcmlvZHMgdGhlcmVmb3JlIFRJTEUg4oCUIFtXaW5kb3cuVGlsZXNdIGlzIHRoZSBwcmVkaWNhdGUg4oCUIHdpdGggbm8gb3ZlcmxhcAovLyBhbmQgbm8gZ2FwLCB3aGljaCBpcyB3aGF0IG1ha2VzIGEgc2VxdWVuY2Ugb2YgcGVyaW9kIHJlcG9ydHMgYWRkIHVwIHRvIHRoZQovLyBjdW11bGF0aXZlIGZpZ3VyZXMuIEEgY2xvc2VkLWNsb3NlZCB3aW5kb3cgZG91YmxlLWNvdW50cyBleGFjdGx5IG9uZQovLyB0aW1lc3RhbXAgcGVyIGJvdW5kYXJ5LCBhbmQgdGhhdCBlcnJvciBpcyBpbnZpc2libGUgaW4gYW55IHNpbmdsZSByZXBvcnQuCi8vCi8vICMgVHdvIGlucHV0cywgdHdvIG9yZGVyaW5nIGRlY2lzaW9ucywgb3Bwb3NpdGUgYW5zd2VycwovLwovLyBUaGlzIHBhY2thZ2UgaW1wb3NlcyBhbiBvcmRlcmluZyBwcmVjb25kaXRpb24gb24gb25lIGlucHV0IGFuZCByZWZ1c2VzIG9uZQovLyBvbiB0aGUgb3RoZXIsIGFuZCB0aGUgcnVsZSBzZXBhcmF0aW5nIHRoZW0gaXMgd2hhdCBqb3VybmFsIEdVQVJBTlRFRVM6Ci8vCi8vICAgLSBjaGFydCBtdXN0IGJlIHN0cmljdGx5IGFzY2VuZGluZyBieSBDb2RlIChbRXJyQ2hhcnROb3RPcmRlcmVkXSkuCi8vICAgICBbam91cm5hbC5Cb29rLkl0ZXJhdGVBY2NvdW50c10gaXMgImFzY2VuZGluZyBjb2RlIG9yZGVyIiwgc28gZXZlcnkKLy8gICAgIHByb2R1Y2VyIG1lZXRzIGl0LiBJdCBidXlzIGR1cGxpY2F0ZS1jb2RlIGRldGVjdGlvbiwgY2hhcnQtb3JkZXIgb3V0cHV0Ci8vICAgICB3aXRoIG5vIHNvcnQsIGFuZCBhIGJpbmFyeS1zZWFyY2ggY29kZSBsb29rdXAgaW5zdGVhZCBvZiBhIG1hcC4KLy8gICAtIGVudHJpZXMgbXVzdCBiZSBzdHJpY3RseSBhc2NlbmRpbmcgYnkgSUQgKFtFcnJFbnRyaWVzTm90T3JkZXJlZF0pLgovLyAgICAgW2pvdXJuYWwuQm9vay5JdGVyYXRlRW50cmllc10gYW5kIFtqb3VybmFsLkJvb2suRW50cmllc10gYm90aCBndWFyYW50ZWUKLy8gICAgIGl0LiBJdCBidXlzIGR1cGxpY2F0ZS1JRCBkZXRlY3Rpb24sIHRoZSBiaW5hcnkgc2VhcmNoIHRoYXQgcmVzb2x2ZXMKLy8gICAgIFJldmVyc2FsT2YsIGFuZCBJRCA+PSAxIGZvciBmcmVlLCAwIGJlaW5nIFJldmVyc2FsT2YncyBzZW50aW5lbC4KLy8gICAtIGVudHJpZXMgbXVzdCBOT1QgYmUgcmVxdWlyZWQgaW4gYXNjZW5kaW5nIEF0IG9yZGVyLCBhbmQgdGhpcyBwYWNrYWdlCi8vICAgICBtdXN0IG5ldmVyIHJlcXVpcmUgaXQuIEF0IGlzIGNhbGxlci1zdXBwbGllZCBhbmQgYmFja2RhdGluZyBpcyBsZWdhbAovLyAgICAgdW50aWwgQ2xvc2Ugc2VhbHMgaXQsIHNvIGpvdXJuYWwgZ3VhcmFudGVlcyBub3RoaW5nIGFib3V0IGl0LiBTdWNoIGEKLy8gICAgIHByZWNvbmRpdGlvbiB3b3VsZCBiZSBvbmUgbm8gcHJvZHVjZXIgaW4gdGhpcyBwb3J0Zm9saW8gY2FuIG1lZXQg4oCUIGEKLy8gICAgIGdhdGUgdGhhdCBjYW4gbmV2ZXIgcGFzcywgaW4gYW4gQVBJIHNpZ25hdHVyZSByYXRoZXIgdGhhbiBpbiBhIGNoZWNrZXIuCi8vCi8vICMgVGhlIHJldmVyc2FsIGNlbnN1cyBoYXMgdGhyZWUgYnVja2V0cywgYW5kIHRoZSB0aGlyZCBpcyB0aGUgcG9pbnQKLy8KLy8gQSByZXZlcnNhbCBkYXRlZCBpbnNpZGUgdGhlIHdpbmRvdyB3aG9zZSBvcmlnaW5hbCBpcyBkYXRlZCBvdXRzaWRlIGl0Ci8vIGNoYW5nZXMgd2hhdCB0aGUgcGVyaW9kIG1lYW5zOiB0aGUgd2luZG93IGNhcnJpZXMgYSBjb3JyZWN0aW9uIHRvIGFjdGl2aXR5Ci8vIGl0IG5ldmVyIGNvbnRhaW5lZC4gVGhlIGNlbnN1cyByZXBvcnRzIHRocmVlIHRoaW5ncyBhbmQgbmV2ZXIgdHdvOgovLwovLyAgIC0gW1JlcG9ydC5SZXZlcnNhbHNdIOKAlCBpbi13aW5kb3cgcmV2ZXJzYWwsIG9yaWdpbmFsIGFsc28gaW4td2luZG93OgovLyAgICAgb3JkaW5hcnksIGNsYXNzaWZpZWQuCi8vICAgLSBbUmVwb3J0LkNyb3NzV2luZG93UmV2ZXJzYWxzXSDigJQgaW4td2luZG93IHJldmVyc2FsLCBvcmlnaW5hbCBkYXRlZAovLyAgICAgb3V0c2lkZTogY2xhc3NpZmllZCwgYW5kIG1hdGVyaWFsLgovLyAgIC0gW1JlcG9ydC5VbnJlc29sdmVkUmV2ZXJzYWxzXSDigJQgaW4td2luZG93IHJldmVyc2FsIHdob3NlIG9yaWdpbmFsIGlzCi8vICAgICBBQlNFTlQgZnJvbSB0aGUgZW50cmllcyBzbGljZSwgc28gdGhlIGNsYXNzaWZpY2F0aW9uIENPVUxEIE5PVCBCRSBNQURFLgovLwovLyBDb2xsYXBzaW5nIHRoZSB0aGlyZCBpbnRvIGVpdGhlciBvZiB0aGUgZmlyc3QgdHdvIHdvdWxkIHJlYWQgImNvdWxkIG5vdAovLyBldmFsdWF0ZSIgYXMgYXNzZW50LiBJdCBpcyBhIGNlbnN1cywgbm90IGEgdmVyZGljdCDigJQgdGhlIHNhbWUgcG9zdHVyZSBhcwovLyBbc3RhdGVtZW50cy5TdGF0ZW1lbnQuQWJub3JtYWxdIOKAlCBhbmQgaXQgaXMgYSBmdW5jdGlvbiBvZiB3aGF0IHRoZSBjYWxsZXIKLy8gcGFzc2VkLCBub3Qgb2YgdGhlIGJvb2s6IHBhc3MgYSB3aW5kb3ctZmlsdGVyZWQgc2xpY2UgYW5kIGV2ZXJ5IHJldmVyc2FsCi8vIHJlYWNoaW5nIGJhY2sgYmVmb3JlIGl0IGlzIHVucmVzb2x2ZWQgYnkgY29uc3RydWN0aW9uLgovLwovLyAjIFdoYXQgdGhpcyBwYWNrYWdlIGRvZXMgbm90IGRvCi8vCi8vICAgLSAqKkl0IG5ldmVyIHdyaXRlcy4qKiBbUmVwb3J0LkNsb3NpbmdFbnRyeV0gcmV0dXJucyBwb3N0aW5ncyBmb3IgdGhlCi8vICAgICBjYWxsZXIgdG8gUG9zdC4gSXQgc3dlZXBzIFBFUklPRCBNT1ZFTUVOVCwgbm90IGN1bXVsYXRpdmUgYmFsYW5jZSwgc28KLy8gICAgIHJ1bm5pbmcgaXQgdHdpY2Ugb3ZlciBvbmUgd2luZG93IGFuZCBwb3N0aW5nIGJvdGggcmVzdWx0cwovLyAgICAgZG91YmxlLXN3ZWVwcyDigJQgYW5kIHRoaXMgcGFja2FnZSBuZXZlciBzZWVzIHRoZSBCb29rLCBzbyBpdCBjYW5ub3QKLy8gICAgIGRldGVjdCB0aGF0LiBUaGUgY2FsbGVyIG93bnMgaWRlbXBvdGVuY2UuCi8vICAgLSAqKk5vIHBhZ2luZywgbm8gTWVyZ2UuKiogW01heEVudHJpZXNdIGlzIHRoZSBoYXJkIGJvdW5kLiBNZXJnaW5nIHJlcG9ydHMKLy8gICAgIGFjcm9zcyBwYWdlcyB3b3VsZCBtYWtlIFVucmVzb2x2ZWRSZXZlcnNhbHMgYW4gYXJ0aWZhY3Qgb2YgdGhlIHBhZ2luZwovLyAgICAgcmF0aGVyIHRoYW4gb2YgdGhlIGRhdGE7IGZpeGluZyB0aGF0IG5lZWRzIGEgdHdvLXBhc3MgZGVzaWduIG92ZXIgdGhlCi8vICAgICB3aG9sZSBlbnRyeSBzZXQgYW5kIGlzIGEgZGlmZmVyZW50IHBhY2thZ2UuCi8vICAgLSAqKk5vIGNhc2gtZmxvdyBzdGF0ZW1lbnQuKiogVGhlIGluZGlyZWN0IG1ldGhvZCBuZWVkcyBhCi8vICAgICBjYXNoLXZzLWFjY3J1YWwgY2xhc3NpZmljYXRpb24gW2pvdXJuYWwuUG9zdGluZ10gZG9lcyBub3QgY2FycnkuCi8vICAgICBbUmVwb3J0LkFjdGl2aXR5XSBpcyB0aGUgYmFsYW5jZS1zaGVldCBkZWx0YSBoYWxmIGl0IHdvdWxkIG5lZWQuCi8vICAgLSAqKk5vIGF1ZGl0LioqIEV2ZXJ5IGZpZ3VyZSBpcyBkZXJpdmVkIGZyb20gd2hhdCB0aGUgY2FsbGVyIHN1cHBsaWVkLiBBCi8vICAgICBjaGFydCBmcm9tIG9uZSBib29rIGFuZCBlbnRyaWVzIGZyb20gYW5vdGhlciBwcm9kdWNlIGEgcGxhdXNpYmxlIHJlcG9ydAovLyAgICAgYW5kIG5vdGhpbmcgaGVyZSBkZXRlY3RzIGl0LgovLwovLyBbcC9qb3VybmFsXTogL3AvZzF1dDZ1c3B1aDczZTAyeWF1eHBteXQ4ZzN3d2RkYXE4dXRhZ3ZtMy9qb3VybmFsCi8vIFtwL3N0YXRlbWVudHNdOiAvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3N0YXRlbWVudHMKcGFja2FnZSBwZXJpb2RzCgppbXBvcnQgKAoJImVycm9ycyIKCgkiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL2pvdXJuYWwiCgkiZ25vLmxhbmQvcC9nMXV0NnVzcHVoNzNlMDJ5YXV4cG15dDhnM3d3ZGRhcTh1dGFndm0zL3N0YXRlbWVudHMiCikKCi8vIE1heEFjY291bnRzIGJvdW5kcyB0aGUgY2hhcnQgW0Rlcml2ZV0gd2lsbCBhY2NlcHQuIEl0IGlzCi8vIFtzdGF0ZW1lbnRzLk1heFJvd3NdIOKAlCBqb3VybmFsJ3Mgb3duIGFjY291bnQgY2FwLCByZWFjaGVkIHRocm91Z2ggdGhlCi8vIHBhY2thZ2UgdGhhdCBhbHJlYWR5IG1hZGUgdGhpcyBkZWNpc2lvbiByYXRoZXIgdGhhbiByZXN0YXRlZCDigJQgYmVjYXVzZSBhCi8vIHJvdyBzZXQgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgY2hhcnQgdGhpcyBlY29zeXN0ZW0ncyBib29ra2VlcGluZwovLyBwcmltaXRpdmUgY2FuIGhvbGQgZGlkIG5vdCBjb21lIGZyb20gYSBjaGFydC4KY29uc3QgTWF4QWNjb3VudHMgPSBzdGF0ZW1lbnRzLk1heFJvd3MKCi8vIE1heEVudHJpZXMgYm91bmRzIHRoZSBlbnRyeSBzbGljZSBbRGVyaXZlXSB3aWxsIHdhbGssIGFuZCBpdCBpcyBzZXQgZmFyCi8vIGJlbG93IFtqb3VybmFsLk1heEVudHJpZXNMaW1pdF0gb24gcHVycG9zZTogdGhlIGpvdXJuYWwgaG9sZHMgYSBtaWxsaW9uCi8vIGVudHJpZXMgYW5kIGEgbWlsbGlvbi1lbnRyeSBsb29wIGlzIG5vdCBhIHRyYW5zYWN0aW9uLgovLwovLyBXaGF0IHRoZSBib3VuZCBjb3N0cywgc3RhdGVkIHJhdGhlciB0aGFuIHdhdmVkIGF0LiBEZXJpdmUgbWFrZXMgb25lIHBhc3MKLy8gb3ZlciB0aGUgZW50cmllcyBhbmQsIHBlciBlbnRyeSwgb25lIHBhc3Mgb3ZlciBpdHMgcG9zdGluZ3MsIGVhY2ggcG9zdGluZwovLyBjb3N0aW5nIGEgYmluYXJ5IHNlYXJjaCBvdmVyIHRoZSBjaGFydC4gW2pvdXJuYWwuTWF4UG9zdGluZ3NQZXJFbnRyeV0gaXMgNjQKLy8gYW5kIGlzIHJlLWNoZWNrZWQgaGVyZSAoW0VyclRvb01hbnlQb3N0aW5nc10pIHNvIHRoZSBwcm9kdWN0IGlzIGEgUFJPVkVOCi8vIGNlaWxpbmcgYW5kIG5vdCBhbiBhc3N1bWVkIG9uZToKLy8KLy8JNDA5NiBlbnRyaWVzIHggNjQgcG9zdGluZ3MgPSAyNjIgMTQ0IHBvc3RpbmcgdmlzaXRzLCBlYWNoIGEKLy8JbG9nMigxMCAwMDApIH4gMTQtc3RlcCBzZWFyY2gKLy8KLy8gd2hpY2ggaXMgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIDEwIDAwMC1yb3cgd2FsayBbc3RhdGVtZW50cy5EZXJpdmVdCi8vIGRvY3VtZW50cy4gQSByZWFsbSB3YW50aW5nIHBlcmlvZCByZXBvcnRzIGNhcHMgaXRzIG93biBqb3VybmFsIGF0IG9yIGJlbG93Ci8vIHRoaXM7IHIvYm9va3MgYWxsb3dzIDEyOCBhY2NvdW50cyBhbmQgc2hvdWxkIGJlIHJlYWQgdGhlIHNhbWUgd2F5IOKAlCB0aGlzIGlzCi8vIHRoZSBjZWlsaW5nIGEgY2FsbGVyIG1heSBhc2sgZm9yLCBub3QgYSBzaXplIHdvcnRoIHJlYWNoaW5nLgpjb25zdCBNYXhFbnRyaWVzID0gNDA5NgoKLy8gRXJyb3JzIHJldHVybmVkIGJ5IHRoaXMgcGFja2FnZS4KdmFyICgKCS8vIEVyckludmFsaWRXaW5kb3cgaXMgYSB3aW5kb3cgZmFpbGluZyBbV2luZG93LlZhbGlkXTogRnJvbSBuZWdhdGl2ZSwgb3IKCS8vIFVudGlsIG5vdCBzdHJpY3RseSBhZnRlciBGcm9tLiBBbiBlbXB0eSB3aW5kb3cgaXMgcmVmdXNlZCByYXRoZXIgdGhhbgoJLy8gcmVwb3J0ZWQgYXMgYSBwZXJpb2Qgd2l0aCBubyBhY3Rpdml0eSwgYmVjYXVzZSB0aGUgdHdvIGFyZSBkaWZmZXJlbnQKCS8vIGNsYWltcyBhbmQgb25seSBvbmUgb2YgdGhlbSBpcyBhIHJlcG9ydC4KCUVyckludmFsaWRXaW5kb3cgPSBlcnJvcnMuTmV3KCJwZXJpb2RzOiB3aW5kb3cgbXVzdCBzYXRpc2Z5IDAgPD0gRnJvbSA8IFVudGlsIikKCgkvLyBFcnJUb29NYW55QWNjb3VudHMgaXMgYSBjaGFydCBsb25nZXIgdGhhbiBbTWF4QWNjb3VudHNdLgoJRXJyVG9vTWFueUFjY291bnRzID0gZXJyb3JzLk5ldygicGVyaW9kczogY2hhcnQgbGVuZ3RoIGV4Y2VlZHMgTWF4QWNjb3VudHMiKQoKCS8vIEVyclRvb01hbnlFbnRyaWVzIGlzIGFuIGVudHJ5IHNsaWNlIGxvbmdlciB0aGFuIFtNYXhFbnRyaWVzXS4KCUVyclRvb01hbnlFbnRyaWVzID0gZXJyb3JzLk5ldygicGVyaW9kczogZW50cnkgY291bnQgZXhjZWVkcyBNYXhFbnRyaWVzIikKCgkvLyBFcnJDaGFydE5vdE9yZGVyZWQgaXMgYSBjaGFydCBub3QgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIENvZGUgb3JkZXIuCgkvLyBqb3VybmFsJ3Mgb3duIGVudW1lcmF0b3IgaXMsIHNvIHRoaXMgYWxzbyBjYXRjaGVzIGEgZHVwbGljYXRlZCBjb2RlLgoJRXJyQ2hhcnROb3RPcmRlcmVkID0gZXJyb3JzLk5ldygicGVyaW9kczogY2hhcnQgbXVzdCBiZSBpbiBzdHJpY3RseSBhc2NlbmRpbmcgY29kZSBvcmRlciIpCgoJLy8gRXJyRW50cmllc05vdE9yZGVyZWQgaXMgYW4gZW50cnkgc2xpY2Ugbm90IGluIHN0cmljdGx5IGFzY2VuZGluZyBJRAoJLy8gb3JkZXIsIHdoaWNoIGluY2x1ZGVzIGFuIElEIG9mIHplcm8uIEJvdGggb2Ygam91cm5hbCdzIHByb2R1Y2VycyBhcmUKCS8vIG9yZGVyZWQ7IHNlZSB0aGUgcGFja2FnZSBkb2Mgb24gd2h5IEF0IGNhcnJpZXMgbm8gc3VjaCByZXF1aXJlbWVudC4KCUVyckVudHJpZXNOb3RPcmRlcmVkID0gZXJyb3JzLk5ldygicGVyaW9kczogZW50cmllcyBtdXN0IGJlIGluIHN0cmljdGx5IGFzY2VuZGluZyBJRCBvcmRlciIpCgoJLy8gRXJySW52YWxpZEtpbmQgaXMgYW4gYWNjb3VudCB3aG9zZSBLaW5kIGlzIG91dHNpZGUgam91cm5hbCdzIGZpdmUuIFRoZQoJLy8gemVybyBLaW5kIGlzIHRoZSBjYXNlIHRoYXQgbWF0dGVyczogam91cm5hbCByZXBvcnRzIGl0IGFzCgkvLyBjcmVkaXQtbm9ybWFsLCBzbyBhIHNpbGVudCBmYWxsdGhyb3VnaCB3b3VsZCBmaWxlIGl0IHJhdGhlciB0aGFuIHJlZnVzZQoJLy8gaXQuCgkvLwoJLy8gVGhlIHR3byBwcm9kdWNlcnMgYXJlIG5vdCBzeW1tZXRyaWNhbCwgYW5kIHNheWluZyBzbyBpcyB0aGUgcG9pbnQuCgkvLyBbRGVyaXZlXSByYWlzZXMgaXQgZnJvbSB0aGUgQ0hBUlQgUFJFLVBBU1MsIHdoaWNoIHByb3ZlcyBldmVyeSBLaW5kCgkvLyBbam91cm5hbC5LaW5kLlZhbGlkXSBiZWZvcmUgYW55dGhpbmcgaXMgc3VtbWVkOyBpdHMgbGF0ZXIKCS8vIFtzdGF0ZW1lbnRzLlNlY3Rpb25PZl0gYnJhbmNoIGlzIHRoZXJlZm9yZSBVTlJFQUNIQUJMRSwgYmVjYXVzZQoJLy8gU2VjdGlvbk9mJ3Mgc3dpdGNoIGNvdmVycyBleGFjdGx5IHRoZSBmaXZlIGtpbmRzIFZhbGlkIGFkbWl0cy4gVGhhdAoJLy8gYnJhbmNoIHNoaXBzIGFueXdheSwgYXMgZmFpbC1jbG9zZWQgZGVmZW5jZSBhZ2FpbnN0IHRoZSB0d28gZGVmaW5pdGlvbnMKCS8vIGRyaWZ0aW5nIGFwYXJ0IGluIGEgbGF0ZXIgdmVyc2lvbiBvZiBlaXRoZXIgcGFja2FnZSDigJQgYnV0IGl0IGlzIG5vdCBhCgkvLyBwYXRoIHRoaXMgcGFja2FnZSBjYW4gcmVhY2ggdG9kYXkgYW5kIG11c3Qgbm90IGJlIGNpdGVkIGFzIG9uZS4KCS8vIFtSZXBvcnQuQ2xvc2luZ0VudHJ5XSBpcyB0aGUgcmVhY2hhYmxlIFNlY3Rpb25PZiBjYXNlOiBpdCBpcyBoYW5kZWQgYQoJLy8gUmVwb3J0IHJhdGhlciB0aGFuIGEgY2hhcnQsIHJ1bnMgbm8gcHJlLXBhc3MsIGFuZCBzbyBhIGhhbmQtYnVpbHQgcm93CgkvLyB3aXRoIGFuIGludmFsaWQgS2luZCByZWFjaGVzIFNlY3Rpb25PZiBkaXJlY3RseS4KCUVyckludmFsaWRLaW5kID0gZXJyb3JzLk5ldygicGVyaW9kczogdW5rbm93biBhY2NvdW50IGtpbmQiKQoKCS8vIEVyckludmFsaWRQb3N0aW5nIGlzIGEgcG9zdGluZyB3aXRoIGFuIGludmFsaWQgU2lkZSBvciBhIG5vbi1wb3NpdGl2ZQoJLy8gQW1vdW50LiBqb3VybmFsIGNhbm5vdCBwcm9kdWNlIG9uZTsgYSBoYW5kLWJ1aWx0IGVudHJ5IGNhbi4KCUVyckludmFsaWRQb3N0aW5nID0gZXJyb3JzLk5ldygicGVyaW9kczogcG9zdGluZyBuZWVkcyBhIHZhbGlkIHNpZGUgYW5kIGEgcG9zaXRpdmUgYW1vdW50IikKCgkvLyBFcnJUb29NYW55UG9zdGluZ3MgaXMgYW4gZW50cnkgd2l0aCBtb3JlIHRoYW4KCS8vIFtqb3VybmFsLk1heFBvc3RpbmdzUGVyRW50cnldIHBvc3RpbmdzLiBqb3VybmFsIGNhbm5vdCBwcm9kdWNlIG9uZSwgYW5kCgkvLyByZS1jaGVja2luZyBpcyB3aGF0IG1ha2VzIFtNYXhFbnRyaWVzXSdzIGNvc3QgYm91bmQgYSBwcm92ZW4gY2VpbGluZy4KCUVyclRvb01hbnlQb3N0aW5ncyA9IGVycm9ycy5OZXcoInBlcmlvZHM6IGVudHJ5IGV4Y2VlZHMgam91cm5hbC5NYXhQb3N0aW5nc1BlckVudHJ5IikKCgkvLyBFcnJVbmtub3duQWNjb3VudCBpcyBhIHBvc3RpbmcgbmFtaW5nIGEgY29kZSBhYnNlbnQgZnJvbSB0aGUgY2hhcnQuCgkvLyBEcm9wcGluZyBpdCBzaWxlbnRseSB3b3VsZCBVTkRFUlNUQVRFIHRoZSBwZXJpb2QsIHdoaWNoIGlzIHdvcnNlIHRoYW4KCS8vIHJlZnVzaW5nIHRvIHJlcG9ydCBpdC4KCUVyclVua25vd25BY2NvdW50ID0gZXJyb3JzLk5ldygicGVyaW9kczogcG9zdGluZyBuYW1lcyBhIGNvZGUgYWJzZW50IGZyb20gdGhlIGNoYXJ0IikKCgkvLyBFcnJOZWdhdGl2ZUNvbHVtbnMgaXMgYW4gW0FjdGl2aXR5XSByb3cgd2hvc2UgRGViaXRzIG9yIENyZWRpdHMgaXMKCS8vIG5lZ2F0aXZlLiBbRGVyaXZlXSBjYW5ub3QgcHJvZHVjZSBvbmUg4oCUIGl0IGFjY3VtdWxhdGVzIHBvc2l0aXZlIHBvc3RpbmcKCS8vIGFtb3VudHMgZnJvbSB6ZXJvIOKAlCBzbyB0aGlzIGlzIG9ubHkgcmVhY2hhYmxlIHRocm91Z2ggYSBoYW5kLWJ1aWx0CgkvLyBSZXBvcnQsIGFuZCBpdCBpcyBjaGVja2VkIGZvciB0aGUgcmVhc29uIFtzdGF0ZW1lbnRzLkVyck5lZ2F0aXZlVG90YWxzXQoJLy8gaXMgY2hlY2tlZCBvdmVyIHRoZSBpZGVudGljYWwgaGF6YXJkIG9uIHRoZSBpZGVudGljYWwgdHlwZS4KCS8vCgkvLyBbQWN0aXZpdHkuTW92ZW1lbnRdIGRlbGVnYXRlcyB0byBbam91cm5hbC5BY2NvdW50LkJhbGFuY2VdLCB3aGljaAoJLy8gc3VidHJhY3RzIG9uZSBjb2x1bW4gZnJvbSB0aGUgb3RoZXIgd2l0aCBubyBjaGVjayBvZiBpdHMgb3duLiBBIHJvdwoJLy8gY2FycnlpbmcgQ3JlZGl0cyBuZWFyIG1heCBhbmQgYSBORUdBVElWRSBEZWJpdHMgdGhlcmVmb3JlIHlpZWxkcyBhCgkvLyBXUkFQUEVEIG1vdmVtZW50IGJlZm9yZSBhbnkgYXJpdGhtZXRpYyBoZXJlIHJ1bnMsIGFuZCB0aGUgd3JhcCBzdXJ2aXZlcwoJLy8gZXZlcnkgZG93bnN0cmVhbSBndWFyZDogaXQgaXMgbm9uemVybywgc28gdGhlIG0gPT0gMCBza2lwIGRvZXMgbm90CgkvLyBmaXJlLCBhbmQgaXQgaXMgbm90IG1pbkludDY0LCBzbyBtYWduaXR1ZGUgcmVwb3J0cyBzdWNjZXNzLiBUaGUgcmVzdWx0CgkvLyB3YXMgYSBjbG9zaW5nIHBvc3Rpbmcgd2l0aCBhbiBJTlZFUlRFRCBTSUdOLCBiYWxhbmNlZCwgYm90aCBzaWRlcwoJLy8gcHJlc2VudCwgd2l0aGluIHRoZSBwb3N0aW5nIGNhcCwgYW5kIGFjY2VwdGFibGUgdG8gW2pvdXJuYWwuQm9vay5Qb3N0XQoJLy8g4oCUIGEgd3JvbmcgZmlndXJlIHdpdGggbm8gZXJyb3IgYW55d2hlcmUsIHdoaWNoIGlzIHN0cmljdGx5IHdvcnNlIHRoYW4KCS8vIFtFcnJPdmVyZmxvd10gYmVjYXVzZSBub3RoaW5nIGRvd25zdHJlYW0gY2FuIHRlbGwgaXQgZnJvbSBhIHJlYWwgb25lLgoJLy8gV2l0aCBib3RoIGNvbHVtbnMgbm9uLW5lZ2F0aXZlIHRoZSBzdWJ0cmFjdGlvbiBsYW5kcyBpbgoJLy8gWy1tYXhJbnQ2NCwgbWF4SW50NjRdIGFuZCBjYW5ub3Qgd3JhcCwgd2hpY2ggaXMgdGhlIHByZWNvbmRpdGlvbiB0aGUKCS8vIGNoZWNrZWQgYXJpdGhtZXRpYyBpbiBbUmVwb3J0LkNsb3NpbmdFbnRyeV0gaXMgc3VmZmljaWVudCB1bmRlci4KCUVyck5lZ2F0aXZlQ29sdW1ucyA9IGVycm9ycy5OZXcoInBlcmlvZHM6IGFjdGl2aXR5IGNvbHVtbiB0b3RhbHMgbXVzdCBub3QgYmUgbmVnYXRpdmUiKQoKCS8vIEVyckludmFsaWRFcXVpdHlDb2RlIGlzIGFuIGVtcHR5IGVxdWl0eSBjb2RlLCBvciBvbmUgbG9uZ2VyIHRoYW4KCS8vIFtqb3VybmFsLk1heENvZGVMZW5dLgoJRXJySW52YWxpZEVxdWl0eUNvZGUgPSBlcnJvcnMuTmV3KCJwZXJpb2RzOiBlcXVpdHkgY29kZSBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgd2l0aGluIGpvdXJuYWwuTWF4Q29kZUxlbiIpCgoJLy8gRXJyRXF1aXR5Q29kZUlzTm9taW5hbCBpcyBhbiBlcXVpdHkgY29kZSBuYW1pbmcgb25lIG9mIHRoZSBub21pbmFsCgkvLyBhY2NvdW50cyBiZWluZyBzd2VwdC4gVGhlIHJlc3VsdGluZyBlbnRyeSB3b3VsZCBiYWxhbmNlIGFuZCBtZWFuCgkvLyBub3RoaW5nLiBTZWUgW1JlcG9ydC5DbG9zaW5nRW50cnldIG9uIHdoYXQgdGhpcyBjaGVjayBjYW5ub3QgY292ZXIuCglFcnJFcXVpdHlDb2RlSXNOb21pbmFsID0gZXJyb3JzLk5ldygicGVyaW9kczogZXF1aXR5IGNvZGUgbmFtZXMgYSBub21pbmFsIGFjY291bnQgYmVpbmcgY2xvc2VkIikKCgkvLyBFcnJOb3RoaW5nVG9DbG9zZSBpcyBhIHdpbmRvdyB3aXRoIG5vIG5vbWluYWwgbW92ZW1lbnQgYXQgYWxsLiBUaGUKCS8vIGFsdGVybmF0aXZlIGlzIHJldHVybmluZyBhbiBlbXB0eSBwb3N0aW5nIHNsaWNlIHRoYXQgam91cm5hbCB3b3VsZAoJLy8gcmVmdXNlIHdpdGggRXJyVG9vRmV3UG9zdGluZ3MsIHdoaWNoIG1vdmVzIHRoZSBmYWlsdXJlIG9uZSBjYWxsIGxhdGVyCgkvLyB3aGVyZSBpdCBpcyBoYXJkZXIgdG8gcmVhZC4KCUVyck5vdGhpbmdUb0Nsb3NlID0gZXJyb3JzLk5ldygicGVyaW9kczogbm8gbm9taW5hbCBtb3ZlbWVudCBpbiB0aGUgd2luZG93IikKCgkvLyBFcnJUb29NYW55Tm9taW5hbEFjY291bnRzIGlzIGEgc3dlZXAgdGhhdCB3b3VsZCBleGNlZWQKCS8vIFtqb3VybmFsLk1heFBvc3RpbmdzUGVyRW50cnldOiBhdCBtb3N0IDYzIG5vbWluYWwgYWNjb3VudHMgcGx1cyB0aGUKCS8vIGVxdWl0eSBwb3N0aW5nLgoJRXJyVG9vTWFueU5vbWluYWxBY2NvdW50cyA9IGVycm9ycy5OZXcoInBlcmlvZHM6IGNsb3NpbmcgZW50cnkgZXhjZWVkcyBqb3VybmFsLk1heFBvc3RpbmdzUGVyRW50cnkiKQoKCS8vIEVyck92ZXJmbG93IGlzIGFuIGludDY0IG92ZXJmbG93IGluIGFueSBhY2N1bXVsYXRpb24uCglFcnJPdmVyZmxvdyA9IGVycm9ycy5OZXcoInBlcmlvZHM6IGludDY0IG92ZXJmbG93IikKKQoKLy8gV2luZG93IGlzIGEgaGFsZi1vcGVuIGRhdGUgcmFuZ2UgW0Zyb20sIFVudGlsKTogRnJvbSBpcyBpbmNsdWRlZCwgVW50aWwgaXMKLy8gbm90LiBUaGUgdW5pdCBpcyB3aGF0ZXZlciB0aGUgYm9vaydzIEF0IHZhbHVlcyBhcmUg4oCUIGpvdXJuYWwgdHJlYXRzIEF0IGFzIGFuCi8vIG9wYXF1ZSBub24tbmVnYXRpdmUgaW50NjQsIHNvIGEgY2FsbGVyIGhvbGRpbmcgc2Vjb25kcyBwYXNzZXMgc2Vjb25kcyBhbmQgYQovLyBjYWxsZXIgaG9sZGluZyBibG9jayBoZWlnaHRzIHBhc3NlcyBoZWlnaHRzLiBUaGlzIHBhY2thZ2UgaW1wb3NlcyBubwovLyBjYWxlbmRhciwgd2hpY2ggaXMgd2h5IGl0IG5lZWRzIG5vbmUuCnR5cGUgV2luZG93IHN0cnVjdCB7CglGcm9tICBpbnQ2NAoJVW50aWwgaW50NjQKfQoKLy8gVmFsaWQgcmVwb3J0cyB3aGV0aGVyIHcgaXMgYSB1c2FibGUgd2luZG93OiBGcm9tIG5vbi1uZWdhdGl2ZSBhbmQgVW50aWwKLy8gc3RyaWN0bHkgYWZ0ZXIgaXQuIEFuIGVtcHR5IG9yIGludmVydGVkIHdpbmRvdyBpcyBub3QgYSBwZXJpb2QuCmZ1bmMgKHcgV2luZG93KSBWYWxpZCgpIGJvb2wgeyByZXR1cm4gdy5Gcm9tID49IDAgJiYgdy5Gcm9tIDwgdy5VbnRpbCB9CgovLyBDb250YWlucyByZXBvcnRzIHdoZXRoZXIgYXQgZmFsbHMgaW4gdy4gSGFsZi1vcGVuOiBGcm9tIGlzIGluLCBVbnRpbCBpcyBvdXQuCmZ1bmMgKHcgV2luZG93KSBDb250YWlucyhhdCBpbnQ2NCkgYm9vbCB7IHJldHVybiBhdCA+PSB3LkZyb20gJiYgYXQgPCB3LlVudGlsIH0KCi8vIFRpbGVzIHJlcG9ydHMgd2hldGhlciBuZXh0IGJlZ2lucyBleGFjdGx5IHdoZXJlIHcgZW5kcywgc28gdGhhdCB0aGUgdHdvCi8vIGNvdmVyIFt3LkZyb20sIG5leHQuVW50aWwpIHdpdGggbm8gb3ZlcmxhcCBhbmQgbm8gZ2FwLgovLwovLyBJdCBleGlzdHMgYXMgQVBJIHJhdGhlciB0aGFuIGFzIGEgY29tbWVudCBiZWNhdXNlIHRoZSB0aWxpbmcgcHJvcGVydHkgaXMKLy8gd2hhdCBtYWtlcyBhIHNlcXVlbmNlIG9mIHBlcmlvZCByZXBvcnRzIHN1bSB0byB0aGUgY3VtdWxhdGl2ZSBmaWd1cmVzLCBhbmQgYQovLyBjYWxsZXIgZ2VuZXJhdGluZyBhIHNlcXVlbmNlIHNob3VsZCBiZSBhYmxlIHRvIGFzc2VydCBpdC4KZnVuYyAodyBXaW5kb3cpIFRpbGVzKG5leHQgV2luZG93KSBib29sIHsKCXJldHVybiB3LlZhbGlkKCkgJiYgbmV4dC5WYWxpZCgpICYmIHcuVW50aWwgPT0gbmV4dC5Gcm9tCn0KCi8vIEFjdGl2aXR5IGlzIG9uZSBhY2NvdW50J3MgbW92ZW1lbnQgV0lUSElOIHRoZSB3aW5kb3cuIERlYml0cyBhbmQgQ3JlZGl0cyBhcmUKLy8gcGVyaW9kIHN1bXMsIG5vdCB0aGUgYm9vaydzIGN1bXVsYXRpdmUgY29sdW1ucywgYW5kIGJvdGggYXJlIG5vbi1uZWdhdGl2ZSBBUwovLyBQUk9EVUNFRCBCWSBbRGVyaXZlXSDigJQgcG9zdGluZ3MgY2FycnkgcG9zaXRpdmUgYW1vdW50cyBhbmQgRGVyaXZlIHJlZnVzZXMKLy8gYW55dGhpbmcgZWxzZS4KLy8KLy8gQSBSZXBvcnQgYXNzZW1ibGVkIGJ5IGhhbmQgaXMgdW5kZXIgbm8gc3VjaCBjb25zdHJhaW50LCBzbwovLyBbUmVwb3J0LkNsb3NpbmdFbnRyeV0gY2hlY2tzIGl0OiBhIG5lZ2F0aXZlIGNvbHVtbiB0aGVyZSBpcwovLyBbRXJyTmVnYXRpdmVDb2x1bW5zXS4gVGhlIGNoZWNrIGlzIG5vdCB0aWRpbmVzcy4gW01vdmVtZW50XSBkZWxlZ2F0ZXMgdG8KLy8gW2pvdXJuYWwuQWNjb3VudC5CYWxhbmNlXSwgYW4gdW5jaGVja2VkIHN1YnRyYWN0aW9uLCBzbyBhIG5lZ2F0aXZlIGNvbHVtbgovLyB3cmFwcyB0aGUgbW92ZW1lbnQgQkVGT1JFIGFueSBndWFyZCBoZXJlIHJ1bnMgYW5kIHRoZSB3cmFwIHBhc3NlcyBhbGwgb2YKLy8gdGhlbSDigJQgdGhlIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGNvbW1lbnQgY2xhaW1lZCBhIGhhbmQtYnVpbHQgUmVwb3J0J3MKLy8gb25seSBjb25zZXF1ZW5jZSB3YXMgW0Vyck92ZXJmbG93XSwgYW5kIGFuIGF1ZGl0IGRpc3Byb3ZlZCBpdCBieSBwcm9kdWNpbmcgYQovLyBzaWduLWludmVydGVkIGNsb3NpbmcgZW50cnkgdGhhdCBbam91cm5hbC5Cb29rLlBvc3RdIGFjY2VwdHMgd2l0aCBubyBlcnJvcgovLyBhdCBhbGwuIFNlZSBbRXJyTmVnYXRpdmVDb2x1bW5zXSBmb3IgdGhlIG1lY2hhbmlzbS4KLy8KLy8gW0Rlcml2ZV0gZW1pdHMgYSByb3cgb25seSBmb3IgYSBjb2RlIHRoZSB3aW5kb3cgYWN0dWFsbHkgdG91Y2hlZDogYW4gYWNjb3VudAovLyB3aXRoIG5vIG1vdmVtZW50IGlzIEFCU0VOVCwgbm90IGEgemVybyByb3cuIE92ZXIgYSBjaGFydCBvZiAxMCAwMDAgd2l0aAovLyB0aHJlZSBhY3RpdmUgYWNjb3VudHMgdGhhdCBpcyB0aHJlZSByb3dzLCBhbmQgdGhlIGFsdGVybmF0aXZlIGlzIHBheWluZwovLyBzdGF0ZW1lbnRzJyBmdWxsIE1heFJvd3MgY29zdCB0byByZXBvcnQgbm90aGluZy4KdHlwZSBBY3Rpdml0eSBzdHJ1Y3QgewoJQ29kZSAgICBzdHJpbmcKCU5hbWUgICAgc3RyaW5nCglLaW5kICAgIGpvdXJuYWwuS2luZAoJRGViaXRzICBpbnQ2NAoJQ3JlZGl0cyBpbnQ2NAp9CgovLyBNb3ZlbWVudCByZXR1cm5zIHRoZSBwZXJpb2QgbW92ZW1lbnQgaW4gdGhlIGFjY291bnQncyBOT1JNQUwgZGlyZWN0aW9uLCBzbwovLyBhIHJldmVudWUgYWNjb3VudCB0aGF0IGVhcm5lZCByZWFkcyBwb3NpdGl2ZSBhbmQgYSBjb250cmEgbW92ZW1lbnQgcmVhZHMKLy8gbmVnYXRpdmUuCi8vCi8vIEl0IGlzIGpvdXJuYWwncyBvd24gZGVmaW5pdGlvbiwgcmVhY2hlZCBieSBoYW5kaW5nIGpvdXJuYWwgdGhlIHR3byBjb2x1bW5zCi8vIHJhdGhlciB0aGFuIHJlLWRlcml2aW5nIHRoZSBub3JtYWwtYmFsYW5jZSBydWxlIGhlcmUuIE9uZSBkZWZpbml0aW9uIG9mCi8vIHdoaWNoIGtpbmRzIGFyZSBkZWJpdC1ub3JtYWwsIGluIHRoZSBwYWNrYWdlIHRoYXQgb3ducyBpdC4KLy8KLy8gSW5oZXJpdGluZyB0aGF0IGRlZmluaXRpb24gbWVhbnMgaW5oZXJpdGluZyBpdHMgYXJpdGhtZXRpYzogQmFsYW5jZQovLyBzdWJ0cmFjdHMgd2l0aG91dCBhIGNoZWNrLCBzbyBvbiBhIHJvdyB3aXRoIGEgTkVHQVRJVkUgY29sdW1uIOKAlCB3aGljaCBvbmx5IGEKLy8gaGFuZC1idWlsdCBSZXBvcnQgY2FuIGhvbGQg4oCUIHRoaXMgd3JhcHMgYW5kIHJldHVybnMgYSBwbGF1c2libGUgd3JvbmcKLy8gbnVtYmVyLiBJdCBpcyBsZWZ0IHVuY2hlY2tlZCByYXRoZXIgdGhhbiBnaXZlbiBhbiBlcnJvciByZXR1cm4sIGJlY2F1c2UgYQovLyB0d28tdmFsdWUgTW92ZW1lbnQgd291bGQgaGF2ZSB0byBiZSBoYW5kbGVkIGF0IGZvdXIgY2FsbCBzaXRlcyB0byBkZWZlbmQgb25lCi8vIGlucHV0IGNsYXNzIHRoYXQgW1JlcG9ydC5DbG9zaW5nRW50cnldIHJlZnVzZXMgb3V0cmlnaHQuIFRoZSBndWFyZCBpcyBhdCB0aGUKLy8gYm91bmRhcnk7IHNlZSBbRXJyTmVnYXRpdmVDb2x1bW5zXS4KZnVuYyAoYSBBY3Rpdml0eSkgTW92ZW1lbnQoKSBpbnQ2NCB7CglyZXR1cm4gam91cm5hbC5BY2NvdW50e0tpbmQ6IGEuS2luZCwgRGViaXRzOiBhLkRlYml0cywgQ3JlZGl0czogYS5DcmVkaXRzfS5CYWxhbmNlKCkKfQoKLy8gUmF3RGVsdGEgcmV0dXJucyBEZWJpdHMtQ3JlZGl0cyByZWdhcmRsZXNzIG9mIGtpbmQuIFN1bW1lZCBvdmVyIGV2ZXJ5IHJvdyBvZgovLyBhIHJlcG9ydCBkZXJpdmVkIGZyb20gYmFsYW5jZWQgZW50cmllcyBpdCBpcyBleGFjdGx5IHplcm8sIHdoaWNoIGlzIHdoYXQKLy8gbWFrZXMgaXQgdXNlZnVsIGZvciBhIGNvbnNpc3RlbmN5IGNoZWNrIGFuZCB3cm9uZyBmb3IgYSByZXBvcnQuCmZ1bmMgKGEgQWN0aXZpdHkpIFJhd0RlbHRhKCkgaW50NjQgeyByZXR1cm4gYS5EZWJpdHMgLSBhLkNyZWRpdHMgfQoKLy8gQ3Jvc3NSZXZlcnNhbCBpcyBhbiBpbi13aW5kb3cgcmV2ZXJzYWwgd2hvc2Ugb3JpZ2luYWwgZW50cnkgaXMgZGF0ZWQgb3V0c2lkZQovLyB0aGUgd2luZG93OiB0aGUgcGVyaW9kIGNhcnJpZXMgYSBjb3JyZWN0aW9uIHRvIGFjdGl2aXR5IGl0IG5ldmVyIGNvbnRhaW5lZC4KLy8KLy8gVG90YWwgaXMgdGhlIHJldmVyc2FsJ3MgZGViaXQgdG90YWwgKFtqb3VybmFsLkVudHJ5LlRvdGFsXSksIHdoaWNoIGlzIGl0cwovLyBtYWduaXR1ZGUgb24gYm90aCBzaWRlcyBiZWNhdXNlIGpvdXJuYWwgb25seSBhY2NlcHRzIGJhbGFuY2VkIGVudHJpZXMuCnR5cGUgQ3Jvc3NSZXZlcnNhbCBzdHJ1Y3QgewoJSUQgICAgICAgICB1aW50NjQKCVJldmVyc2FsT2YgdWludDY0CglUb3RhbCAgICAgIGludDY0Cn0KCi8vIFJlcG9ydCBpcyBvbmUgd2luZG93J3MgYWN0aXZpdHkuIEV2ZXJ5IHNsaWNlIGlzIGZyZXNobHkgYWxsb2NhdGVkIGJ5Ci8vIFtEZXJpdmVdIG9uIGV2ZXJ5IGNhbGwgYW5kIGlzIG5ldmVyIG5pbCwgc28gdGhlIGNhbGxlciBvd25zIGl0IGFuZCBhbiBlbXB0eQovLyByZXN1bHQgaXMgYW4gZW1wdHkgc2xpY2UgcmF0aGVyIHRoYW4gYSBuaWwgdG8gYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIG9uZS4KdHlwZSBSZXBvcnQgc3RydWN0IHsKCS8vIFdpbmRvdyBpcyB0aGUgd2luZG93IHRoZSBmaWd1cmVzIGFyZSBmb3IsIGVjaG9lZCBiYWNrIHNvIGEgc3RvcmVkCgkvLyByZXBvcnQgY2Fubm90IGJlIHJlYWQgd2l0aG91dCBpdC4KCVdpbmRvdyBXaW5kb3cKCgkvLyBBY3Rpdml0eSBpcyBwZXItYWNjb3VudCBwZXJpb2QgbW92ZW1lbnQsIGluIENIQVJUIG9yZGVyIOKAlCB3aGljaCB0aGUKCS8vIGNoYXJ0IHByZWNvbmRpdGlvbiBtYWtlcyBhc2NlbmRpbmcgYnkgQ29kZSDigJQgZm9yIGNvZGVzIHRoZSB3aW5kb3cKCS8vIHRvdWNoZWQuCglBY3Rpdml0eSBbXUFjdGl2aXR5CgoJLy8gRW50cmllcyBpcyBob3cgbWFueSBlbnRyaWVzIGZlbGwgaW4gdGhlIHdpbmRvdy4gWmVybyBpcyBhIGxlZ2l0aW1hdGUKCS8vIHJlcG9ydCBvZiBhIHF1aWV0IHBlcmlvZCwgbm90IGFuIGVycm9yLgoJRW50cmllcyBpbnQKCgkvLyBGaXJzdElEIGFuZCBMYXN0SUQgYXJlIHRoZSBsb3dlc3QgYW5kIGhpZ2hlc3QgSURzIElOIFRIRSBXSU5ET1csIG9yCgkvLyBib3RoIHplcm8gd2hlbiBFbnRyaWVzIGlzIHplcm8uIFRoZXkgYXJlIG1pbiBhbmQgbWF4IG92ZXIgdGhlCgkvLyBpbi13aW5kb3cgU1VCU0VUIGFuZCBub3QgdGhlIGVuZHMgb2YgdGhlIHN1cHBsaWVkIHNsaWNlOiBvdmVyIGVudHJpZXMKCS8vIDEsIDIsIDMgd2l0aCBvbmx5IDIgaW4gdGhlIHdpbmRvdywgYm90aCByZWFkIDIuCglGaXJzdElEIHVpbnQ2NAoJTGFzdElEICB1aW50NjQKCgkvLyBQZXJpb2RSZXZlbnVlIGFuZCBQZXJpb2RFeHBlbnNlcyBhcmUgdGhlIG5hdHVyYWwtc2lnbiBwZXJpb2QgdG90YWxzIG9mCgkvLyB0aGUgdHdvIG5vbWluYWwga2luZHMuIFRoZSBuYW1lcyBjYXJyeSB0aGUgd29yZCBQRVJJT0QgZm9yIHRoZSBzYW1lCgkvLyByZWFzb24gc3RhdGVtZW50cycgY2FycnkgQ1VNVUxBVElWRTogYSByZWFkZXIgd2hvIHRha2VzIG9uZSBmb3IgdGhlCgkvLyBvdGhlciBtaXNyZWFkcyBldmVyeSBmaWd1cmUuCglQZXJpb2RSZXZlbnVlICBpbnQ2NAoJUGVyaW9kRXhwZW5zZXMgaW50NjQKCgkvLyBQZXJpb2ROZXQgaXMgUGVyaW9kUmV2ZW51ZSAtIFBlcmlvZEV4cGVuc2VzOiB0aGUgcGVyaW9kIGluY29tZQoJLy8gc3RhdGVtZW50J3MgYm90dG9tIGxpbmUsIHdoaWNoIG5vIGN1bXVsYXRpdmUgcmVwb3J0IGNhbiBwcm9kdWNlLgoJUGVyaW9kTmV0IGludDY0CgoJLy8gUmV2ZXJzYWxzIGNvdW50cyBpbi13aW5kb3cgcmV2ZXJzYWxzIHdob3NlIG9yaWdpbmFsIGlzIGFsc28gaW4td2luZG93LgoJUmV2ZXJzYWxzIGludAoKCS8vIENyb3NzV2luZG93UmV2ZXJzYWxzIGxpc3RzIGluLXdpbmRvdyByZXZlcnNhbHMgd2hvc2Ugb3JpZ2luYWwgaXMgZGF0ZWQKCS8vIG91dHNpZGUgdGhlIHdpbmRvdywgaW4gdGhlIG9yZGVyIHRoZSBlbnRyaWVzIHdlcmUgd2Fsa2VkLgoJQ3Jvc3NXaW5kb3dSZXZlcnNhbHMgW11Dcm9zc1JldmVyc2FsCgoJLy8gVW5yZXNvbHZlZFJldmVyc2FscyBsaXN0cyB0aGUgSURzIG9mIGluLXdpbmRvdyByZXZlcnNhbHMgd2hvc2Ugb3JpZ2luYWwKCS8vIGlzIGFic2VudCBmcm9tIHRoZSBzdXBwbGllZCBlbnRyaWVzLCBzbyB0aGV5IGNvdWxkIGJlIGNsYXNzaWZpZWQKCS8vIG5laXRoZXIgd2F5LiBTZWUgdGhlIHBhY2thZ2UgZG9jOiB0aGlzIGlzIHRoZSBidWNrZXQgdGhhdCBtdXN0IG5vdCBiZQoJLy8gY29sbGFwc2VkLgoJVW5yZXNvbHZlZFJldmVyc2FscyBbXXVpbnQ2NAp9CgovLyBBY3Rpdml0eUluIGNvdW50cyB0aGUgcm93cyBwcmVzZW50ZWQgaW4gc2VjLgovLwovLyBUaGUgc2VjdGlvbiBpcyByZWNvbXB1dGVkIGZyb20gZWFjaCByb3cncyBLaW5kIHRocm91Z2gKLy8gW3N0YXRlbWVudHMuU2VjdGlvbk9mXSByYXRoZXIgdGhhbiBzdG9yZWQsIHNvIHRoZXJlIGlzIG9uZSBkZWZpbml0aW9uIG9mIHRoZQovLyB0aHJlZS1idWNrZXQgcGFydGl0aW9uIGFuZCBubyBzZWNvbmQgZmllbGQgdGhhdCBjb3VsZCBkaXNhZ3JlZSB3aXRoIGl0LiBBCi8vIFJlcG9ydCBidWlsdCBieSBoYW5kIGNhbiBob2xkIGEgcm93IHdpdGggYW4gaW52YWxpZCBLaW5kOyBzdWNoIGEgcm93IGlzCi8vIGNvdW50ZWQgaW4gbm8gc2VjdGlvbiwgYW5kIFtEZXJpdmVdIGNhbm5vdCBwcm9kdWNlIG9uZS4KLy8KLy8gSXQgZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIGNoZWNrIFtFcnJOZWdhdGl2ZUNvbHVtbnNdLCB1bmxpa2UKLy8gW1JlcG9ydC5DbG9zaW5nRW50cnldLCBhbmQgaGFzIG5vIGVycm9yIHJldHVybiB0byBkbyBpdCB3aXRoLiBUaGUgcmVhc29uIGlzCi8vIHRoYXQgaXQgcmVhZHMgbm8gY29sdW1uOiB0aGUgY291bnQgZGVwZW5kcyBvbiBLaW5kIGFsb25lLCBzbyBhIG5lZ2F0aXZlCi8vIGNvbHVtbiBjYW5ub3QgbWFrZSB0aGlzIGFuc3dlciB3cm9uZy4gQSBndWFyZCBhZGRlZCBoZXJlIGZvciBzeW1tZXRyeSB3b3VsZAovLyBiZSBhIGNoZWNrIHRoYXQgY2FuIG5ldmVyIGNoYW5nZSBhbiBvdXRjb21lIOKAlCB0aGUgdmFjdW91cy10cnVlIHNoYXBlIHRoaXMKLy8gcG9ydGZvbGlvIHJlZnVzZXMgZWxzZXdoZXJlIOKAlCBhbmQgdGhlIGhvbmVzdCB2ZXJzaW9uIGlzIHRoaXMgc2VudGVuY2UuCmZ1bmMgKHIgUmVwb3J0KSBBY3Rpdml0eUluKHNlYyBzdGF0ZW1lbnRzLlNlY3Rpb24pIGludCB7CgluIDo9IDAKCWZvciBfLCBhIDo9IHJhbmdlIHIuQWN0aXZpdHkgewoJCWdvdCwgZXJyIDo9IHN0YXRlbWVudHMuU2VjdGlvbk9mKGEuS2luZCkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJY29udGludWUKCQl9CgkJaWYgZ290ID09IHNlYyB7CgkJCW4rKwoJCX0KCX0KCXJldHVybiBuCn0KCi8vIERlcml2ZSBjb21wdXRlcyB0aGUgcGVyaW9kIHJlcG9ydC4KLy8KLy8gSXQgaXMgYSBwdXJlIGZ1bmN0aW9uIG9mIGl0cyB0aHJlZSBhcmd1bWVudHM6IHRoZSBzYW1lIGlucHV0cyBhbHdheXMgZ2l2ZQovLyB0aGUgc2FtZSBSZXBvcnQsIGFuZCBub3RoaW5nIGFib3V0IHRoZSBjYWxsZXIsIHRoZSBjaGFpbiBvciB0aGUgdGltZSBlbnRlcnMKLy8gaXQuIE9uIGFueSBlcnJvciB0aGUgcmV0dXJuZWQgUmVwb3J0IGlzIHRoZSB6ZXJvIHZhbHVlLCBzbyBhIGNhbGxlciB0aGF0Ci8vIGlnbm9yZXMgdGhlIGVycm9yIHJlYWRzIHplcm9zIHJhdGhlciB0aGFuIGEgaGFsZi1zdW1tZWQgcGVyaW9kLgovLwovLyBQcmVjb25kaXRpb25zLCBlYWNoIGZvciBhIHJlYXNvbiBnaXZlbiBpbiB0aGUgcGFja2FnZSBkb2M6IHcgbXVzdCBiZSB2YWxpZDsKLy8gY2hhcnQgbXVzdCBiZSBzdHJpY3RseSBhc2NlbmRpbmcgYnkgQ29kZSBhbmQgbm8gbG9uZ2VyIHRoYW4gW01heEFjY291bnRzXSwKLy8gd2l0aCBldmVyeSBLaW5kIG9uZSBvZiBqb3VybmFsJ3MgZml2ZTsgZW50cmllcyBtdXN0IGJlIHN0cmljdGx5IGFzY2VuZGluZyBieQovLyBJRCBhbmQgbm8gbG9uZ2VyIHRoYW4gW01heEVudHJpZXNdLCB3aXRoIGF0IG1vc3QKLy8gW2pvdXJuYWwuTWF4UG9zdGluZ3NQZXJFbnRyeV0gcG9zdGluZ3MgZWFjaC4KLy8KLy8gRW50cmllcyBvdXRzaWRlIHcgYXJlIHNraXBwZWQsIG5vdCByZWZ1c2VkIOKAlCBhIGNhbGxlciBwYXNzaW5nIHRoZSB3aG9sZSBib29rCi8vIGlzIHRoZSBleHBlY3RlZCBjYXNlIOKAlCBhbmQgdGhlaXIgcG9zdGluZ3MgYXJlIHRoZXJlZm9yZSBOT1QgY29udGVudC1jaGVja2VkLAovLyBiZWNhdXNlIG5vIGZpZ3VyZSBpbiB0aGUgcmVwb3J0IGRlcGVuZHMgb24gdGhlbS4gW0VyckludmFsaWRQb3N0aW5nXSBhbmQKLy8gW0VyclVua25vd25BY2NvdW50XSBhcmUgc2NvcGVkIHRvIHRoZSB3aW5kb3cgZm9yIHRoYXQgcmVhc29uOyB0aGUKLy8gcG9zdGluZ3MtcGVyLWVudHJ5IGNhcCBpcyBub3QsIHNpbmNlIGl0IGlzIHdoYXQgbWFrZXMgW01heEVudHJpZXNdJyBjb3N0Ci8vIGNlaWxpbmcgYSBib3VuZCByYXRoZXIgdGhhbiBhIGhvcGUuCmZ1bmMgRGVyaXZlKGNoYXJ0IFtdam91cm5hbC5BY2NvdW50LCBlbnRyaWVzIFtdam91cm5hbC5FbnRyeSwgdyBXaW5kb3cpIChSZXBvcnQsIGVycm9yKSB7CglpZiAhdy5WYWxpZCgpIHsKCQlyZXR1cm4gUmVwb3J0e30sIEVyckludmFsaWRXaW5kb3cKCX0KCWlmIGxlbihjaGFydCkgPiBNYXhBY2NvdW50cyB7CgkJcmV0dXJuIFJlcG9ydHt9LCBFcnJUb29NYW55QWNjb3VudHMKCX0KCWlmIGxlbihlbnRyaWVzKSA+IE1heEVudHJpZXMgewoJCXJldHVybiBSZXBvcnR7fSwgRXJyVG9vTWFueUVudHJpZXMKCX0KCgkvLyBCb3RoIHByZWNvbmRpdGlvbnMgYXJlIGVzdGFibGlzaGVkIGluIGZ1bGwgQkVGT1JFIGFueSBmaWd1cmUgaXMKCS8vIGNvbXB1dGVkLCBiZWNhdXNlIHRoZSBsb29rdXBzIGJlbG93IGFyZSBiaW5hcnkgc2VhcmNoZXMgYW5kIGEgc2VhcmNoCgkvLyBvdmVyIGEgaGFsZi12YWxpZGF0ZWQgc2xpY2UgaXMgb25seSBzb3VuZCBieSBhcmd1bWVudC4gQW4gZW1wdHkgZmlyc3QKCS8vIGNvZGUgZmFpbHMgdGhlIGFzY2VuZGluZyB0ZXN0IG9uIGl0cyBvd24sIHByZXYgc3RhcnRpbmcgYXQgIiIuCglwcmV2Q29kZSA6PSAiIgoJZm9yIF8sIGEgOj0gcmFuZ2UgY2hhcnQgewoJCWlmIGEuQ29kZSA8PSBwcmV2Q29kZSB7CgkJCXJldHVybiBSZXBvcnR7fSwgRXJyQ2hhcnROb3RPcmRlcmVkCgkJfQoJCXByZXZDb2RlID0gYS5Db2RlCgkJaWYgIWEuS2luZC5WYWxpZCgpIHsKCQkJcmV0dXJuIFJlcG9ydHt9LCBFcnJJbnZhbGlkS2luZAoJCX0KCX0KCgl2YXIgcHJldklEIHVpbnQ2NAoJZm9yIF8sIGUgOj0gcmFuZ2UgZW50cmllcyB7CgkJaWYgZS5JRCA8PSBwcmV2SUQgewoJCQlyZXR1cm4gUmVwb3J0e30sIEVyckVudHJpZXNOb3RPcmRlcmVkCgkJfQoJCXByZXZJRCA9IGUuSUQKCQkvLyBDaGVja2VkIGZvciBldmVyeSBlbnRyeSwgaW4gb3Igb3V0IG9mIHdpbmRvdywgYmVjYXVzZSB0aGlzIGlzIHRoZQoJCS8vIGJvdW5kIE1heEVudHJpZXMnIGNvc3QgY2VpbGluZyBpcyBzdGF0ZWQgYWdhaW5zdC4gVGhlIHBvc3RpbmcKCQkvLyBDT05URU5UIGNoZWNrcyBiZWxvdyBhcmUgc2NvcGVkIHRvIHRoZSB3aW5kb3cgaW5zdGVhZCwgc2luY2UgdGhleQoJCS8vIGFyZSBhYm91dCB0aGUgZmlndXJlcyByYXRoZXIgdGhhbiBhYm91dCB0aGUgY29zdC4KCQlpZiBsZW4oZS5Qb3N0aW5ncykgPiBqb3VybmFsLk1heFBvc3RpbmdzUGVyRW50cnkgewoJCQlyZXR1cm4gUmVwb3J0e30sIEVyclRvb01hbnlQb3N0aW5ncwoJCX0KCX0KCgkvLyBQZXJpb2QgY29sdW1ucywgcGFyYWxsZWwgdG8gY2hhcnQgYnkgaW5kZXguIEEgbWFwIHdvdWxkIGJlIHRoZSBvYnZpb3VzCgkvLyBzdHJ1Y3R1cmUgYW5kIG5vIC9wLyBpbiB0aGlzIHBvcnRmb2xpbyB1c2VzIG9uZTsgdGhlIGNoYXJ0IHByZWNvbmRpdGlvbgoJLy8gbWFrZXMgYSBiaW5hcnkgc2VhcmNoIGVub3VnaC4KCWRlYml0cyA6PSBtYWtlKFtdaW50NjQsIGxlbihjaGFydCkpCgljcmVkaXRzIDo9IG1ha2UoW11pbnQ2NCwgbGVuKGNoYXJ0KSkKCglyZXAgOj0gUmVwb3J0ewoJCVdpbmRvdzogICAgICAgICAgICAgICB3LAoJCUFjdGl2aXR5OiAgICAgICAgICAgICBbXUFjdGl2aXR5e30sCgkJQ3Jvc3NXaW5kb3dSZXZlcnNhbHM6IFtdQ3Jvc3NSZXZlcnNhbHt9LAoJCVVucmVzb2x2ZWRSZXZlcnNhbHM6ICBbXXVpbnQ2NHt9LAoJfQoKCWZvciBfLCBlIDo9IHJhbmdlIGVudHJpZXMgewoJCWlmICF3LkNvbnRhaW5zKGUuQXQpIHsKCQkJY29udGludWUKCQl9CgoJCWZvciBfLCBwIDo9IHJhbmdlIGUuUG9zdGluZ3MgewoJCQlpZiAhcC5TaWRlLlZhbGlkKCkgfHwgcC5BbW91bnQgPD0gMCB7CgkJCQlyZXR1cm4gUmVwb3J0e30sIEVyckludmFsaWRQb3N0aW5nCgkJCX0KCQkJYXQgOj0gaW5kZXhPZkNvZGUoY2hhcnQsIHAuQWNjb3VudCkKCQkJaWYgYXQgPCAwIHsKCQkJCXJldHVybiBSZXBvcnR7fSwgRXJyVW5rbm93bkFjY291bnQKCQkJfQoJCQl2YXIgb2sgYm9vbAoJCQlpZiBwLlNpZGUgPT0gam91cm5hbC5EZWJpdCB7CgkJCQlkZWJpdHNbYXRdLCBvayA9IGNoZWNrZWRBZGQoZGViaXRzW2F0XSwgcC5BbW91bnQpCgkJCX0gZWxzZSB7CgkJCQljcmVkaXRzW2F0XSwgb2sgPSBjaGVja2VkQWRkKGNyZWRpdHNbYXRdLCBwLkFtb3VudCkKCQkJfQoJCQlpZiAhb2sgewoJCQkJcmV0dXJuIFJlcG9ydHt9LCBFcnJPdmVyZmxvdwoJCQl9CgkJfQoKCQlpZiByZXAuRW50cmllcyA9PSAwIHx8IGUuSUQgPCByZXAuRmlyc3RJRCB7CgkJCXJlcC5GaXJzdElEID0gZS5JRAoJCX0KCQlpZiBlLklEID4gcmVwLkxhc3RJRCB7CgkJCXJlcC5MYXN0SUQgPSBlLklECgkJfQoJCXJlcC5FbnRyaWVzKysKCgkJaWYgIWUuSXNSZXZlcnNhbCgpIHsKCQkJY29udGludWUKCQl9CgkJb3JpZyA6PSBpbmRleE9mSUQoZW50cmllcywgZS5SZXZlcnNhbE9mKQoJCXN3aXRjaCB7CgkJY2FzZSBvcmlnIDwgMDoKCQkJcmVwLlVucmVzb2x2ZWRSZXZlcnNhbHMgPSBhcHBlbmQocmVwLlVucmVzb2x2ZWRSZXZlcnNhbHMsIGUuSUQpCgkJY2FzZSB3LkNvbnRhaW5zKGVudHJpZXNbb3JpZ10uQXQpOgoJCQlyZXAuUmV2ZXJzYWxzKysKCQlkZWZhdWx0OgoJCQlyZXAuQ3Jvc3NXaW5kb3dSZXZlcnNhbHMgPSBhcHBlbmQocmVwLkNyb3NzV2luZG93UmV2ZXJzYWxzLCBDcm9zc1JldmVyc2FsewoJCQkJSUQ6ICAgICAgICAgZS5JRCwKCQkJCVJldmVyc2FsT2Y6IGUuUmV2ZXJzYWxPZiwKCQkJCVRvdGFsOiAgICAgIGUuVG90YWwoKSwKCQkJfSkKCQl9Cgl9CgoJZm9yIGksIGEgOj0gcmFuZ2UgY2hhcnQgewoJCWlmIGRlYml0c1tpXSA9PSAwICYmIGNyZWRpdHNbaV0gPT0gMCB7CgkJCWNvbnRpbnVlCgkJfQoJCXJvdyA6PSBBY3Rpdml0eXsKCQkJQ29kZTogICAgYS5Db2RlLAoJCQlOYW1lOiAgICBhLk5hbWUsCgkJCUtpbmQ6ICAgIGEuS2luZCwKCQkJRGViaXRzOiAgZGViaXRzW2ldLAoJCQlDcmVkaXRzOiBjcmVkaXRzW2ldLAoJCX0KCQlyZXAuQWN0aXZpdHkgPSBhcHBlbmQocmVwLkFjdGl2aXR5LCByb3cpCgoJCXNlYywgZXJyIDo9IHN0YXRlbWVudHMuU2VjdGlvbk9mKGEuS2luZCkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJcmV0dXJuIFJlcG9ydHt9LCBFcnJJbnZhbGlkS2luZAoJCX0KCQlpZiBzZWMgIT0gc3RhdGVtZW50cy5TZWN0aW9uUGVyZm9ybWFuY2UgewoJCQljb250aW51ZQoJCX0KCQl2YXIgb2sgYm9vbAoJCWlmIGEuS2luZCA9PSBqb3VybmFsLlJldmVudWUgewoJCQlyZXAuUGVyaW9kUmV2ZW51ZSwgb2sgPSBjaGVja2VkQWRkKHJlcC5QZXJpb2RSZXZlbnVlLCByb3cuTW92ZW1lbnQoKSkKCQl9IGVsc2UgewoJCQlyZXAuUGVyaW9kRXhwZW5zZXMsIG9rID0gY2hlY2tlZEFkZChyZXAuUGVyaW9kRXhwZW5zZXMsIHJvdy5Nb3ZlbWVudCgpKQoJCX0KCQlpZiAhb2sgewoJCQlyZXR1cm4gUmVwb3J0e30sIEVyck92ZXJmbG93CgkJfQoJfQoKCW5ldCwgb2sgOj0gY2hlY2tlZFN1YihyZXAuUGVyaW9kUmV2ZW51ZSwgcmVwLlBlcmlvZEV4cGVuc2VzKQoJaWYgIW9rIHsKCQlyZXR1cm4gUmVwb3J0e30sIEVyck92ZXJmbG93Cgl9CglyZXAuUGVyaW9kTmV0ID0gbmV0CgoJcmV0dXJuIHJlcCwgbmlsCn0KCi8vIE11c3REZXJpdmUgaXMgW0Rlcml2ZV0gYW5kIHBhbmljcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvci4gSXQgaXMgZm9yIGEKLy8gcmVhbG0ncyBtdXRhdGluZyBwYXRoLCB3aGVyZSBhbiBlcnJvciByZXR1cm4gZG9lcyBub3QgcmV2ZXJ0IHRoZSB0cmFuc2FjdGlvbgovLyBhbmQgb25seSBhIHBhbmljIGRvZXMuCmZ1bmMgTXVzdERlcml2ZShjaGFydCBbXWpvdXJuYWwuQWNjb3VudCwgZW50cmllcyBbXWpvdXJuYWwuRW50cnksIHcgV2luZG93KSBSZXBvcnQgewoJcmVwLCBlcnIgOj0gRGVyaXZlKGNoYXJ0LCBlbnRyaWVzLCB3KQoJaWYgZXJyICE9IG5pbCB7CgkJcGFuaWMoZXJyKQoJfQoJcmV0dXJuIHJlcAp9CgovLyBDbG9zaW5nRW50cnkgcmV0dXJucyB0aGUgcG9zdGluZ3MgdGhhdCB6ZXJvIGV2ZXJ5IG5vbWluYWwgYWNjb3VudCdzIFBFUklPRAovLyBNT1ZFTUVOVCBhbmQgY2FycnkgdGhlIG5ldCB0byBlcXVpdHlDb2RlIOKAlCB0aGUgZW50cnkgW2pvdXJuYWwuQm9vay5DbG9zZV0KLy8gZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1ha2UsIENsb3NlIGJlaW5nIGEgYmFja2RhdGluZyBzZWFsIGFuZCBub3RoaW5nIGVsc2UuCi8vCi8vIE5vbWluYWwgbWVhbnMgW3N0YXRlbWVudHMuU2VjdGlvblBlcmZvcm1hbmNlXTogdGhlIHBhcnRpdGlvbiBpcyByZWFkIHRocm91Z2gKLy8gW3N0YXRlbWVudHMuU2VjdGlvbk9mXSByYXRoZXIgdGhhbiByZXN0YXRlZCBhcyBhIHNlY29uZCBsaXN0IG9mIGtpbmRzLgovLwovLyBUaGUgcmVzdWx0IGlzIGEgUFJPUE9TQUwuIFRoaXMgcGFja2FnZSBob2xkcyBubyBCb29rIGFuZCBwb3N0cyBub3RoaW5nLCBhbmQKLy8gdGhyZWUgY29uc2VxdWVuY2VzIGZvbGxvdyB0aGF0IGEgY2FsbGVyIG11c3Qgb3duOgovLwovLyAgIC0gSXQgc3dlZXBzIHBlcmlvZCBtb3ZlbWVudCwgbm90IGN1bXVsYXRpdmUgYmFsYW5jZS4gUG9zdGluZyBpdCB0d2ljZSBmb3IKLy8gICAgIG9uZSB3aW5kb3cgZG91YmxlLXN3ZWVwcyB0aGUgcGVyaW9kLCBhbmQgbm90aGluZyBoZXJlIGNhbiBkZXRlY3QgdGhhdC4KLy8gICAtIEEgd2luZG93IHRoZSBib29rIGhhcyBhbHJlYWR5IHNlYWxlZCBpcyBzdGlsbCByZXBvcnRhYmxlIOKAlCBDbG9zZSByZWZ1c2VzCi8vICAgICB3cml0ZXMsIG5vdCByZWFkcyDigJQgc28gdGhlc2UgcG9zdGluZ3MgbWF5IGNvbWUgYmFjawovLyAgICAgW2pvdXJuYWwuRXJyUGVyaW9kQ2xvc2VkXS4gVGhhdCBpcyBqb3VybmFsJ3MgY2FsbDsgdGhpcyBwYWNrYWdlIGNhbm5vdAovLyAgICAgc2VlIHRoZSBzZWFsIGFuZCBkb2VzIG5vdCBwcmUtZW1wdCBpdC4KLy8gICAtIGVxdWl0eUNvZGUgaXMgY2hlY2tlZCBmb3IgYmVpbmcgZW1wdHksIG92ZXItbG9uZywgb3Igb25lIG9mIHRoZSBub21pbmFsCi8vICAgICBjb2RlcyBiZWluZyBzd2VwdCAoW0VyckVxdWl0eUNvZGVJc05vbWluYWxdKS4gSXQgQ0FOTk9UIGJlIGNoZWNrZWQgZm9yCi8vICAgICBuYW1pbmcgYW4gRXF1aXR5LWtpbmQgYWNjb3VudCwgYmVjYXVzZSBSZXBvcnQgZG9lcyBub3QgcmV0YWluIHRoZSBjaGFydDoKLy8gICAgIGEgY29kZSBuYW1pbmcgYSBrbm93biBsaWFiaWxpdHkgeWllbGRzIGFuIGVudHJ5IGpvdXJuYWwgd2lsbCBhY2NlcHQgYW5kCi8vICAgICB0aGF0IGZpbGVzIG5ldCBpbmNvbWUgaW4gdGhlIHdyb25nIHBsYWNlLiBqb3VybmFsIHJlamVjdHMgYW4gdW5rbm93bgovLyAgICAgY29kZSBvbiBpdHMgb3duOyB0aGUgd3Jvbmcta2luZCBjYXNlIGlzIHRoZSBjYWxsZXIncy4KLy8KLy8gVGhlIHBvc3RpbmdzIGFsd2F5cyBiYWxhbmNlIGFuZCBhbHdheXMgY2FycnkgYm90aCBhIGRlYml0IGFuZCBhIGNyZWRpdCB3aGVuCi8vIHRoZXJlIGFyZSBhbnkgYXQgYWxsLCB3aGljaCBpcyB3aHkgYSBub24tZXJyb3IgcmV0dXJuIGlzIGFsd2F5cyBwb3N0YWJsZSBvbgovLyB0aG9zZSBncm91bmRzLiBOZXQgaW5jb21lIGlzIGNyZWRpdGVkIHRvIGVxdWl0eSBhbmQgYSBuZXQgbG9zcyBpcyBkZWJpdGVkLAovLyBlcXVpdHkgYmVpbmcgY3JlZGl0LW5vcm1hbC4gQSB3aW5kb3cgd2l0aCBubyBub21pbmFsIG1vdmVtZW50IGlzCi8vIFtFcnJOb3RoaW5nVG9DbG9zZV0gcmF0aGVyIHRoYW4gYW4gZW1wdHkgc2xpY2UuCi8vCi8vIFRoYXQgcG9zdGFiaWxpdHkgY2xhaW0gcmVzdHMgb24gYSBwcmVjb25kaXRpb24gW0Rlcml2ZV0gc3VwcGxpZXMgZm9yIGZyZWUKLy8gYW5kIGEgaGFuZC1idWlsdCBSZXBvcnQgZG9lcyBub3QsIHNvIHRoaXMgZnVuY3Rpb24gZXN0YWJsaXNoZXMgaXQgaXRzZWxmOgovLyBldmVyeSByb3cncyBjb2x1bW5zIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCBvciBbRXJyTmVnYXRpdmVDb2x1bW5zXS4gV2l0aG91dAovLyB0aGUgY2hlY2sgdGhlIGNsYWltIGlzIGZhbHNlIGluIHRoZSB3b3JzdCBhdmFpbGFibGUgd2F5IOKAlCBub3QgYW4gZXJyb3IsIGJ1dAovLyBhIGJhbGFuY2VkLCBwb3N0YWJsZSwgU0lHTi1JTlZFUlRFRCBlbnRyeS4gU2VlIFtFcnJOZWdhdGl2ZUNvbHVtbnNdLgpmdW5jIChyIFJlcG9ydCkgQ2xvc2luZ0VudHJ5KGVxdWl0eUNvZGUgc3RyaW5nKSAoW11qb3VybmFsLlBvc3RpbmcsIGVycm9yKSB7CglpZiBlcXVpdHlDb2RlID09ICIiIHx8IGxlbihlcXVpdHlDb2RlKSA+IGpvdXJuYWwuTWF4Q29kZUxlbiB7CgkJcmV0dXJuIG5pbCwgRXJySW52YWxpZEVxdWl0eUNvZGUKCX0KCglvdXQgOj0gW11qb3VybmFsLlBvc3Rpbmd7fQoJdmFyIG5ldCBpbnQ2NAoJZm9yIF8sIGEgOj0gcmFuZ2Ugci5BY3Rpdml0eSB7CgkJLy8gQmVmb3JlIHRoZSBwYXJ0aXRpb24sIG5vdCBhZnRlciBpdC4gQSBuZWdhdGl2ZSBjb2x1bW4gb24gYQoJCS8vIG5vbi1ub21pbmFsIHJvdyBjYW5ub3QgYWZmZWN0IHRoaXMgcmVzdWx0LCBzbyBjaGVja2luZyBvbmx5IHRoZQoJCS8vIG5vbWluYWwgcm93cyB3b3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgYXJpdGhtZXRpYyBhbmQgdXNlbGVzcyBhcyBhCgkJLy8gY2xhaW06IHRoZSBndWFyYW50ZWUgd29ydGggaGF2aW5nIGlzICJDbG9zaW5nRW50cnkgcmVmdXNlcyBhbnkKCQkvLyBSZXBvcnQgY2FycnlpbmcgYSBuZWdhdGl2ZSBjb2x1bW4iLCB3aGljaCBhIHJlYWRlciBjYW4gc3RhdGUgYW5kIGEKCQkvLyB0ZXN0IGNhbiBwcm92ZSwgcmF0aGVyIHRoYW4gInJlZnVzZXMgb25lIGluIHRoZSByb3dzIGl0IGhhcHBlbmVkIHRvCgkJLy8gcmVhY2giLgoJCWlmIGEuRGViaXRzIDwgMCB8fCBhLkNyZWRpdHMgPCAwIHsKCQkJcmV0dXJuIG5pbCwgRXJyTmVnYXRpdmVDb2x1bW5zCgkJfQoKCQlzZWMsIGVyciA6PSBzdGF0ZW1lbnRzLlNlY3Rpb25PZihhLktpbmQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCXJldHVybiBuaWwsIEVyckludmFsaWRLaW5kCgkJfQoJCWlmIHNlYyAhPSBzdGF0ZW1lbnRzLlNlY3Rpb25QZXJmb3JtYW5jZSB7CgkJCWNvbnRpbnVlCgkJfQoJCWlmIGEuQ29kZSA9PSBlcXVpdHlDb2RlIHsKCQkJcmV0dXJuIG5pbCwgRXJyRXF1aXR5Q29kZUlzTm9taW5hbAoJCX0KCgkJbSA6PSBhLk1vdmVtZW50KCkKCQlpZiBtID09IDAgewoJCQljb250aW51ZQoJCX0KCQkvLyBUaGlzIGJyYW5jaCBpcyBVTlJFQUNIQUJMRSBhcyB0aGUgZnVuY3Rpb24gbm93IHN0YW5kcywgYW5kIHNoaXBwaW5nCgkJLy8gaXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVyc2lnaHQuIG1hZ25pdHVkZSBvbmx5IHJlZnVzZXMKCQkvLyBtaW5JbnQ2NCwgYW5kIHdpdGggYm90aCBjb2x1bW5zIHByb3ZlbiBub24tbmVnYXRpdmUgYWJvdmUgbm8gc2luZ2xlCgkJLy8gcm93IGNhbiBwcm9kdWNlIGl0OiBDcmVkaXRzLURlYml0cyA9IG1pbkludDY0IHdvdWxkIG5lZWQgYSBEZWJpdHMgb2YKCQkvLyAyXjYzLCB3aGljaCBubyBpbnQ2NCBob2xkcy4gSXQgd2FzIHJlYWNoYWJsZSBiZWZvcmUKCQkvLyBFcnJOZWdhdGl2ZUNvbHVtbnMgZXhpc3RlZC4gSXQgc3RheXMgYmVjYXVzZSBpdCBpcyB0aGUgZmFpbC1jbG9zZWQKCQkvLyBiYWNrc3RvcCBpZiB0aGF0IGd1YXJkIGlzIGV2ZXIgd2Vha2VuZWQsIGFuZCBiZWNhdXNlIGRlbGV0aW5nIGl0CgkJLy8gd291bGQgbWFrZSB0aGlzIHRoZSBvbmx5IG1hZ25pdHVkZSBjYWxsIHNpdGUgd2l0aG91dCBvbmUuIFRoZQoJCS8vIFJFQUNIQUJMRSBvdmVyZmxvdyBpcyB0aGUgbmV0IGFjY3VtdWxhdG9yIGJlbG93LCB3aGljaCBjYW4gcmVhY2gKCQkvLyBtaW5JbnQ2NCBieSBhY2N1bXVsYXRpb247IHRoZSB0ZXN0IG5hbWVzIHdoaWNoIGRvb3IgaXQgdXNlcy4KCQlhbXQsIG9rIDo9IG1hZ25pdHVkZShtKQoJCWlmICFvayB7CgkJCXJldHVybiBuaWwsIEVyck92ZXJmbG93CgkJfQoKCQkvLyBDbG9zZSB0aGUgYWNjb3VudCBieSBwb3N0aW5nIGFnYWluc3QgaXRzIG1vdmVtZW50OiB0aGUgb3Bwb3NpdGUgb2YKCQkvLyBpdHMgbm9ybWFsIHNpZGUgd2hlbiBpdCBtb3ZlZCBub3JtYWxseSwgaXRzIG5vcm1hbCBzaWRlIHdoZW4gaXQKCQkvLyBtb3ZlZCBjb250cmEuCgkJc2lkZSA6PSBqb3VybmFsLkRlYml0CgkJaWYgYS5LaW5kLklzRGViaXROb3JtYWwoKSA9PSAobSA+IDApIHsKCQkJc2lkZSA9IGpvdXJuYWwuQ3JlZGl0CgkJfQoJCW91dCA9IGFwcGVuZChvdXQsIGpvdXJuYWwuUG9zdGluZ3tBY2NvdW50OiBhLkNvZGUsIFNpZGU6IHNpZGUsIEFtb3VudDogYW10fSkKCgkJaWYgYS5LaW5kID09IGpvdXJuYWwuUmV2ZW51ZSB7CgkJCW5ldCwgb2sgPSBjaGVja2VkQWRkKG5ldCwgbSkKCQl9IGVsc2UgewoJCQluZXQsIG9rID0gY2hlY2tlZFN1YihuZXQsIG0pCgkJfQoJCWlmICFvayB7CgkJCXJldHVybiBuaWwsIEVyck92ZXJmbG93CgkJfQoJfQoKCWlmIG5ldCAhPSAwIHsKCQlhbXQsIG9rIDo9IG1hZ25pdHVkZShuZXQpCgkJaWYgIW9rIHsKCQkJcmV0dXJuIG5pbCwgRXJyT3ZlcmZsb3cKCQl9CgkJc2lkZSA6PSBqb3VybmFsLkNyZWRpdAoJCWlmIG5ldCA8IDAgewoJCQlzaWRlID0gam91cm5hbC5EZWJpdAoJCX0KCQlvdXQgPSBhcHBlbmQob3V0LCBqb3VybmFsLlBvc3Rpbmd7QWNjb3VudDogZXF1aXR5Q29kZSwgU2lkZTogc2lkZSwgQW1vdW50OiBhbXR9KQoJfQoKCWlmIGxlbihvdXQpID09IDAgewoJCXJldHVybiBuaWwsIEVyck5vdGhpbmdUb0Nsb3NlCgl9CglpZiBsZW4ob3V0KSA+IGpvdXJuYWwuTWF4UG9zdGluZ3NQZXJFbnRyeSB7CgkJcmV0dXJuIG5pbCwgRXJyVG9vTWFueU5vbWluYWxBY2NvdW50cwoJfQoJcmV0dXJuIG91dCwgbmlsCn0KCi8vIGluZGV4T2ZDb2RlIHJldHVybnMgdGhlIGluZGV4IG9mIGNvZGUgaW4gY2hhcnQsIG9yIC0xLiBjaGFydCBpcyBzdHJpY3RseQovLyBhc2NlbmRpbmcgYnkgQ29kZSwgd2hpY2ggRGVyaXZlIGhhcyBhbHJlYWR5IGVzdGFibGlzaGVkLCBzbyB0aGlzIGlzIGEgYmluYXJ5Ci8vIHNlYXJjaC4KZnVuYyBpbmRleE9mQ29kZShjaGFydCBbXWpvdXJuYWwuQWNjb3VudCwgY29kZSBzdHJpbmcpIGludCB7CglsbywgaGkgOj0gMCwgbGVuKGNoYXJ0KS0xCglmb3IgbG8gPD0gaGkgewoJCW1pZCA6PSBsbyArIChoaS1sbykvMgoJCXN3aXRjaCB7CgkJY2FzZSBjaGFydFttaWRdLkNvZGUgPT0gY29kZToKCQkJcmV0dXJuIG1pZAoJCWNhc2UgY2hhcnRbbWlkXS5Db2RlIDwgY29kZToKCQkJbG8gPSBtaWQgKyAxCgkJZGVmYXVsdDoKCQkJaGkgPSBtaWQgLSAxCgkJfQoJfQoJcmV0dXJuIC0xCn0KCi8vIGluZGV4T2ZJRCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gSUQsIG9yIC0xLiBlbnRyaWVzCi8vIGlzIHN0cmljdGx5IGFzY2VuZGluZyBieSBJRCwgd2hpY2ggRGVyaXZlIGVzdGFibGlzaGVzIG92ZXIgdGhlIFdIT0xFIHNsaWNlCi8vIGJlZm9yZSBjb21wdXRpbmcgYW55dGhpbmcsIHNvIHRoZSBzZWFyY2ggaXMgc291bmQgYnkgcHJlY29uZGl0aW9uIHJhdGhlcgovLyB0aGFuIGJ5IGFuIGFyZ3VtZW50IGFib3V0IHdoaWNoIElEcyBhIHJldmVyc2FsIGNhbiBuYW1lLgpmdW5jIGluZGV4T2ZJRChlbnRyaWVzIFtdam91cm5hbC5FbnRyeSwgaWQgdWludDY0KSBpbnQgewoJbG8sIGhpIDo9IDAsIGxlbihlbnRyaWVzKS0xCglmb3IgbG8gPD0gaGkgewoJCW1pZCA6PSBsbyArIChoaS1sbykvMgoJCXN3aXRjaCB7CgkJY2FzZSBlbnRyaWVzW21pZF0uSUQgPT0gaWQ6CgkJCXJldHVybiBtaWQKCQljYXNlIGVudHJpZXNbbWlkXS5JRCA8IGlkOgoJCQlsbyA9IG1pZCArIDEKCQlkZWZhdWx0OgoJCQloaSA9IG1pZCAtIDEKCQl9Cgl9CglyZXR1cm4gLTEKfQoKLy8gbWluSW50NjQgaXMgdGhlIG9uZSBpbnQ2NCB3aG9zZSBuZWdhdGlvbiBpcyBub3QgYW4gaW50NjQuCmNvbnN0IG1pbkludDY0IGludDY0ID0gLTEgPDwgNjMKCi8vIG1hZ25pdHVkZSByZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB2IGFuZCByZXBvcnRzIHdoZXRoZXIgaXQgZml0LiBJdCBpcwovLyBub3QgLXY6IG5lZ2F0aW5nIFttaW5JbnQ2NF0gb3ZlcmZsb3dzIG9uIGl0cyBvd24sIHNvIHRoZSBjaGVjayBoYXMgdG8gY29tZQovLyBmaXJzdC4KZnVuYyBtYWduaXR1ZGUodiBpbnQ2NCkgKGludDY0LCBib29sKSB7CglpZiB2ID49IDAgewoJCXJldHVybiB2LCB0cnVlCgl9CglpZiB2ID09IG1pbkludDY0IHsKCQlyZXR1cm4gMCwgZmFsc2UKCX0KCXJldHVybiAtdiwgdHJ1ZQp9CgovLyBjaGVja2VkQWRkIHJldHVybnMgYStiIGFuZCByZXBvcnRzIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGRpZCBub3Qgb3ZlcmZsb3cKLy8gaW50NjQuIGpvdXJuYWwncyBhbmQgc3RhdGVtZW50cycgY29waWVzIGFyZSBib3RoIHVuZXhwb3J0ZWQsIHNvIHRoaXMgaXMgYQovLyBkZWxpYmVyYXRlIHRocmVlLWxpbmUgZHVwbGljYXRlIG9mIGEgdHJpdmlhbCBoZWxwZXIg4oCUIGEgZGlmZmVyZW50IHRoaW5nIGZyb20KLy8gYSBzZWNvbmQgY29weSBvZiB0aGUgbm9taW5hbC1hY2NvdW50IHBhcnRpdGlvbiwgd2hpY2ggaXMgd2h5Ci8vIFtzdGF0ZW1lbnRzLlNlY3Rpb25PZl0gaXMgaW1wb3J0ZWQgaW5zdGVhZCBvZiByZXN0YXRlZC4KZnVuYyBjaGVja2VkQWRkKGEsIGIgaW50NjQpIChpbnQ2NCwgYm9vbCkgewoJc3VtIDo9IGEgKyBiCglpZiAoYiA+IDAgJiYgc3VtIDwgYSkgfHwgKGIgPCAwICYmIHN1bSA+IGEpIHsKCQlyZXR1cm4gMCwgZmFsc2UKCX0KCXJldHVybiBzdW0sIHRydWUKfQoKLy8gY2hlY2tlZFN1YiByZXR1cm5zIGEtYiBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSBzdWJ0cmFjdGlvbiBkaWQgbm90IG92ZXJmbG93Ci8vIGludDY0LiBJdCBpcyBub3QgY2hlY2tlZEFkZChhLCAtYiksIGZvciBtYWduaXR1ZGUncyByZWFzb24uCmZ1bmMgY2hlY2tlZFN1YihhLCBiIGludDY0KSAoaW50NjQsIGJvb2wpIHsKCWRpZmYgOj0gYSAtIGIKCWlmIChiIDwgMCAmJiBkaWZmIDwgYSkgfHwgKGIgPiAwICYmIGRpZmYgPiBhKSB7CgkJcmV0dXJuIDAsIGZhbHNlCgl9CglyZXR1cm4gZGlmZiwgdHJ1ZQp9CiINMTAwMDAwMDB1Z25vdBISCNyZjD4SCzEzMDIyNHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAhb0MXbJJXjONC6Z4m+tKff+fEbtcENW/6uTFX9iuw6YEkDvYE23ZS9GRNb59DCcMDe4hyg8uLF43vKr1Yq3kW+PGHdVAIYVUZ+8/UZrJFusTLgANkyw4pUwOQTkOqbQLogjGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl"
  }
}