Transaction executed successfully

Transaction Details

Inspect execution, participants, message data, gas usage, events and raw transaction data.

Transaction hash
A2536D942F3C8F5A346844891B47ED9336837180491A0A34AF7664D6BEABEB30

Transaction overview

Status
Success
Execution completed
Block
#224517
Included in block
Message Type
m_addpkg
Primary message

Execution summary

TX INDEX
0
Position in block
GAS WANTED
30,000,000
Requested gas limit
GAS USED
27,043,971
Gas consumed
FEE
30000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1leu8d2vsplhehcfkjg50mwgdpxdkt8tztu95wr

Execution log

msg:0,success:true,log:,events:[]

Events

No events emitted by this transaction.

Raw encoded transaction

Cq2YAQoML3ZtLm1fYWRkcGtnEpuYAQooZzFsZXU4ZDJ2c3BsaGVoY2Zramc1MG13Z2RweGRrdDh0enR1OTV3chLtlwEKDWJ1YmJsZXJ1bWJsZTISQWduby5sYW5kL3IvZzFsZXU4ZDJ2c3BsaGVoY2Zramc1MG13Z2RweGRrdDh0enR1OTV3ci9idWJibGVydW1ibGUyGomWAQoRYnViYmxlcnVtYmxlMi5nbm8S8pUBLy8gUGFja2FnZSBidWJibGVydW1ibGUyIGlzIHRoZSBzZWNvbmQgQnViYmxlIFJ1bWJsZSByZWFsbTogdGhlIHNhbWUgbGFzdC1iaWRkZXItCi8vIHdpbnMgY2xvY2sgYXMgdjEsIHdpdGggdGhlIG1vbmV5IHJlYXJyYW5nZWQgc28gdGhhdCBwbGF5ZXJzIHdhbnQgY29tcGFueS4KLy8KLy8gT2YgZXZlcnkgYmlkOiA1NSUgZ29lcyB0byB0aGUgcG90LCAzMCUgaXMgcGFpZCBhdCBvbmNlIHRvIHRoZSBlYXJsaWVyIGJpZGRlcnMKLy8gb2YgdGhhdCBwb29sIHByby1yYXRhIHRvIHdoYXQgdGhleSBoYXZlIHBhaWQgaW4sIDEwJSBnb2VzIHRvIHdob2V2ZXIgZmlyc3QKLy8gaW52aXRlZCB0aGUgYmlkZGVyIChmb3JldmVyLCBvbiBldmVyeSBiaWQgdGhleSBtYWtlKSwgNSUgdG8gdGhlIHBvb2wncyBjcmVhdG9yLgovLyBXaGVuIHRoZSBjbG9jayBydW5zIG91dCwgODAlIG9mIHRoZSBwb3QgZ29lcyB0byB0aGUgbGFzdCBiaWRkZXIgYW5kIDIwJSBpcwovLyBzaGFyZWQgYW1vbmcgZXZlcnlvbmUgd2hvIHBsYXllZCB1bmRlciB0aGUgd2lubmVyJ3MgZmxhZyDigJQgb3IgYWxsIG9mIGl0IHRvIHRoZQovLyB3aW5uZXIgaWYgbm9ib2R5IGVsc2UgZmxldyB0aGF0IGZsYWcuCi8vCi8vIFNvIHRoZSBwbGF5ZXIgb24gdG9wIHdhbnRzIG1vcmUgYmlkcyAoZWFjaCBvbmUgcGF5cyB0aGVtKSwgZXZlcnlvbmUgd2FudHMKLy8gdGhlaXIgaW52aXRlZXMgdG8gYmlkICgxMCUgb2YgZXZlcnl0aGluZyksIGFuZCBjb3VudHJpZXMgYXJlIHRlYW1zLgpwYWNrYWdlIGJ1YmJsZXJ1bWJsZTIKCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vYmFua2VyIgoJImNoYWluL3J1bnRpbWUvdW5zYWZlIgoJIm1hdGgiCgkic3RyY29udiIKCSJzdHJpbmdzIgoJInRpbWUiCikKCmNvbnN0ICgKCU1pbldpbmRvdyAgICBpbnQ2NCA9IDEwICAgICAgICAgICAgICAgIC8vIHNlY29uZHMKCU1heFdpbmRvdyAgICBpbnQ2NCA9IDMwICogMjQgKiAzNjAwICAgIC8vIDMwIGRheXMKCU1pbkJhc2VQcmljZSBpbnQ2NCA9IDFfMDAwICAgICAgICAgICAgIC8vIHVnbm90LCAwLjAwMSBHTk9UCglNYXhCYXNlUHJpY2UgaW50NjQgPSAxXzAwMF8wMDBfMDAwXzAwMCAvLyB1Z25vdCwgMSwwMDAsMDAwIEdOT1QKCU1heE5hbWVMZW4gICAgICAgICA9IDQwCglIaXN0b3J5TGVuICAgICAgICAgPSA1MCAgLy8gYmlkcyBrZXB0IHBlciBwb29sIGZvciB0aGUgZmVlZAoJUm9zdGVyTWF4ICAgICAgICAgID0gMjAwIC8vIGRpc3RpbmN0IGJpZGRlcnMgYSBwb29sIHBheXMgZGl2aWRlbmRzIGFuZCB0ZWFtIHNoYXJlcyB0bwoJTWF4Qm9vc3QgICAgIGludDY0ID0gMTAgIC8vIHRoZSBzaG9ydGVzdCBjbG9jayBhIGJpZCBjYW4gYnV5IGlzIHdpbmRvdy9NYXhCb29zdAoKCS8vIHdoZXJlIGV2ZXJ5IGJpZCBnb2VzLCBpbiBwZXJjZW50CglQb3RTaGFyZSAgICAgaW50NjQgPSA1NQoJRGl2U2hhcmUgICAgIGludDY0ID0gMzAgLy8gdG8gZWFybGllciBiaWRkZXJzIG9mIHRoZSBwb29sLCBwcm8tcmF0YSBieSBwYWlkLWluCglSZWZTaGFyZSAgICAgaW50NjQgPSAxMCAvLyB0byB0aGUgYmlkZGVyJ3MgaW52aXRlcgoJQ3JlYXRvclNoYXJlIGludDY0ID0gNQoJLy8gb2YgdGhlIHBvdCBhdCB0aGUgY2xvc2U6IHRoZSByZXN0IGdvZXMgdG8gdGhlIHdpbm5lcgoJVGVhbVNoYXJlIGludDY0ID0gMjAKKQoKLy8gcGtnUGF0aCBtdXN0IG1hdGNoIGdub21vZC50b21sOiB0aGUgcmVhbG0ncyBvd24gYWRkcmVzcyBkZXJpdmVzIGZyb20gaXQuCmNvbnN0IHBrZ1BhdGggPSAiZ25vLmxhbmQvci9nMWxldThkMnZzcGxoZWhjZmtqZzUwbXdnZHB4ZGt0OHR6dHU5NXdyL2J1YmJsZXJ1bWJsZTIiCgp0eXBlIEVudHJ5IHN0cnVjdCB7CglOICAgICAgaW50NjQKCUJpZGRlciBhZGRyZXNzCglGbGFnICAgc3RyaW5nCglQcmljZSAgaW50NjQgLy8gd2hhdCB3YXMgcGFpZDsgYXQgbGVhc3QgdGhlIHByaWNlIGF0IHRoZSB0aW1lCglDbG9jayAgaW50NjQgLy8gc2Vjb25kcyB0aGlzIGJpZCBoYWQgdG8gc3RhbmQKCVBvdCAgICBpbnQ2NCAvLyBwb3QgcmlnaHQgYWZ0ZXIgdGhpcyBiaWQKCUF0ICAgICB0aW1lLlRpbWUKfQoKLy8gTWVtYmVyIGlzIGEgZGlzdGluY3QgYmlkZGVyIG9mIGEgcG9vbDogdGhlIHJvc3RlciBkaXZpZGVuZHMgYW5kIHRlYW0gc2hhcmVzIGdvIHRvLgp0eXBlIE1lbWJlciBzdHJ1Y3QgewoJQWRkciAgIGFkZHJlc3MKCUZsYWcgICBzdHJpbmcKCVBhaWQgICBpbnQ2NCAvLyBncm9zcyBwYWlkIGludG8gdGhpcyBwb29sOyB0aGUgZGl2aWRlbmQgd2VpZ2h0CglFYXJuZWQgaW50NjQgLy8gZGl2aWRlbmRzIHJlY2VpdmVkIGZyb20gdGhpcyBwb29sCn0KCnR5cGUgUG9vbCBzdHJ1Y3QgewoJSUQgICAgICAgICAgaW50NjQKCU5hbWUgICAgICAgIHN0cmluZwoJQ3JlYXRvciAgICAgYWRkcmVzcwoJV2luZG93ICAgICAgaW50NjQgLy8gc2Vjb25kcyB0aGUgbGFzdCBiaWQgbXVzdCBzdGFuZCB0byB3aW4KCUJhc2VQcmljZSAgIGludDY0IC8vIHVnbm90OyB0aGUgTnRoIGJpZCBjb3N0cyBCYXNlUHJpY2XCt+KImk4KCVNlZWQgICAgICAgIGludDY0CglQb3QgICAgICAgICBpbnQ2NAoJQmlkcyAgICAgICAgaW50NjQKCUxhc3RCaWRkZXIgIGFkZHJlc3MKCUxhc3RCaWRBdCAgIHRpbWUuVGltZQoJQ2xvY2sgICAgICAgaW50NjQgLy8gc2Vjb25kcyB0aGUgY3VycmVudCB0b3AgYmlkIGhhcyB0byBzdGFuZAoJQ3JlYXRlZEF0ICAgdGltZS5UaW1lCglQYWlkICAgICAgICBib29sIC8vIHRoZSBwb3Qgd2VudCBvdXQsIG9yIHRoZSBzZWVkIGJhY2sgdG8gdGhlIGNyZWF0b3IKCUNhbmNlbGxlZCAgIGJvb2wKCURpdlBhaWQgICAgIGludDY0IC8vIGRpdmlkZW5kcyBwYWlkIG91dCBvZiB0aGlzIHBvb2wgc28gZmFyCglSZWZQYWlkICAgICBpbnQ2NAoJQ3JlYXRvclBhaWQgaW50NjQKCVdpbm5lckZsYWcgIHN0cmluZwoJVGVhbVBhaWQgICAgaW50NjQgLy8gd2hhdCB0aGUgd2lubmVyJ3MgdGVhbSByZWNlaXZlZCBhdCB0aGUgY2xvc2UKCUhpc3RvcnkgICAgIFtdRW50cnkKCVJvc3RlciAgICAgIFtdKk1lbWJlcgp9CgovLyBQbGF5ZXIgaXMgd2hhdCB0aGUgcmVhbG0gcmVtZW1iZXJzIGFib3V0IGFuIGFkZHJlc3MgYWNyb3NzIHBvb2xzLgp0eXBlIFBsYXllciBzdHJ1Y3QgewoJUmVmZXJyZXIgIGFkZHJlc3MgLy8gc2V0IGJ5IHRoZSBmaXJzdCBiaWQsIHBlcm1hbmVudAoJUmVjcnVpdHMgIGludDY0CglGbGFnICAgICAgc3RyaW5nCglCaWRzICAgICAgaW50NjQKCVBhaWQgICAgICBpbnQ2NAoJRGl2RWFybmVkIGludDY0CglSZWZFYXJuZWQgaW50NjQKCVdvbiAgICAgICBpbnQ2NCAvLyBwb3RzIGFuZCB0ZWFtIHNoYXJlcyByZWNlaXZlZAp9Cgp2YXIgKAoJcG9vbHMgICAgIFtdKlBvb2wKCXBsYXllcnMgICA9IG1hcFthZGRyZXNzXSpQbGF5ZXJ7fQoJdGVhbVBhaWQgID0gbWFwW3N0cmluZ11pbnQ2NHt9IC8vIGZsYWcgLT4gZ3Jvc3MgYmlkIHZvbHVtZSB1bmRlciBpdAoJdGVhbVdvbiAgID0gbWFwW3N0cmluZ11pbnQ2NHt9IC8vIGZsYWcgLT4gcG90cyBjbG9zZWQgdW5kZXIgaXQKCXRlYW1TaXplICA9IG1hcFtzdHJpbmddaW50NjR7fSAvLyBmbGFnIC0+IHBsYXllcnMgZmx5aW5nIGl0CglyZWFsbUFkZHIgPSBjaGFpbi5QYWNrYWdlQWRkcmVzcyhwa2dQYXRoKQopCgovLyBQcmljZSBvZiB0aGUgbmV4dCBiaWQgaW4gYSBwb29sIHdpdGggdGhlIGdpdmVuIGJhc2UgcHJpY2UgYW5kIG4gYmlkcyBzbyBmYXIuCmZ1bmMgUHJpY2UoYmFzZSwgbiBpbnQ2NCkgaW50NjQgewoJcmV0dXJuIGludDY0KG1hdGguQ2VpbChmbG9hdDY0KGJhc2UpICogbWF0aC5TcXJ0KGZsb2F0NjQobisxKSkpKQp9CgpmdW5jIChwICpQb29sKSBEZWFkbGluZSgpIHRpbWUuVGltZSB7IHJldHVybiBwLkxhc3RCaWRBdC5BZGQodGltZS5EdXJhdGlvbihwLkNsb2NrKSAqIHRpbWUuU2Vjb25kKSB9CmZ1bmMgKHAgKlBvb2wpIE92ZXIoKSBib29sICAgICAgICAgICB7IHJldHVybiBwLkJpZHMgPiAwICYmICF0aW1lLk5vdygpLkJlZm9yZShwLkRlYWRsaW5lKCkpIH0KZnVuYyAocCAqUG9vbCkgTmV4dFByaWNlKCkgaW50NjQgICAgIHsgcmV0dXJuIFByaWNlKHAuQmFzZVByaWNlLCBwLkJpZHMpIH0KCi8vIENsb2NrRm9yIGlzIHRoZSBjbG9jayBhIGJpZCBidXlzIGJ5IHBheWluZyBzZW50IGFnYWluc3QgYSBwcmljZTogdGhlIHdpbmRvdwovLyBkaXZpZGVkIGJ5IHRoZSBtdWx0aXBsZSBwYWlkLCBuZXZlciBiZWxvdyB3aW5kb3cvTWF4Qm9vc3QuCmZ1bmMgQ2xvY2tGb3Iod2luZG93LCBwcmljZSwgc2VudCBpbnQ2NCkgaW50NjQgewoJYyA6PSBpbnQ2NChmbG9hdDY0KHdpbmRvdykgKiBmbG9hdDY0KHByaWNlKSAvIGZsb2F0NjQoc2VudCkpCglpZiBjIDwgd2luZG93L01heEJvb3N0IHsKCQljID0gd2luZG93IC8gTWF4Qm9vc3QKCX0KCWlmIGMgPCAxIHsKCQljID0gMQoJfQoJcmV0dXJuIGMKfQoKLy8gQ3JlYXRlUG9vbCBvcGVucyBhIHBvb2wuIEFueSB1Z25vdCBzZW50IHdpdGggdGhlIGNhbGwgc2VlZHMgaXRzIHBvdC4gVGhlCi8vIGNyZWF0b3IgZWFybnMgQ3JlYXRvclNoYXJlIG9mIGV2ZXJ5IGJpZC4KZnVuYyBDcmVhdGVQb29sKGN1ciByZWFsbSwgbmFtZSBzdHJpbmcsIHdpbmRvdyBpbnQ2NCwgYmFzZVByaWNlIGludDY0KSBpbnQ2NCB7CgljcmVhdG9yIDo9IHVzZXJDYWxsZXIoY3VyKQoJbmFtZSA9IGNsZWFuTmFtZShuYW1lKQoJaWYgd2luZG93IDwgTWluV2luZG93IHx8IHdpbmRvdyA+IE1heFdpbmRvdyB7CgkJcGFuaWMoIndpbmRvdyBtdXN0IGJlIGJldHdlZW4gMTBzIGFuZCAzMGQiKQoJfQoJaWYgYmFzZVByaWNlIDwgTWluQmFzZVByaWNlIHx8IGJhc2VQcmljZSA+IE1heEJhc2VQcmljZSB7CgkJcGFuaWMoImJhc2UgcHJpY2UgbXVzdCBiZSBiZXR3ZWVuIDAuMDAxIGFuZCAxLDAwMCwwMDAgR05PVCIpCgl9CglzZWVkIDo9IHVnbm90U2VudCgpCglwIDo9ICZQb29sewoJCUlEOiBpbnQ2NChsZW4ocG9vbHMpKSArIDEsIE5hbWU6IG5hbWUsIENyZWF0b3I6IGNyZWF0b3IsIFdpbmRvdzogd2luZG93LAoJCUJhc2VQcmljZTogYmFzZVByaWNlLCBTZWVkOiBzZWVkLCBQb3Q6IHNlZWQsIENyZWF0ZWRBdDogdGltZS5Ob3coKSwKCX0KCXBvb2xzID0gYXBwZW5kKHBvb2xzLCBwKQoJY2hhaW4uRW1pdCgiUG9vbENyZWF0ZWQiLCAiaWQiLCBpdG9hKHAuSUQpLCAiY3JlYXRvciIsIGNyZWF0b3IuU3RyaW5nKCksICJzZWVkIiwgaXRvYShzZWVkKSkKCXJldHVybiBwLklECn0KCi8vIEJpZCBwYXlzIGF0IGxlYXN0IHRoZSBjdXJyZW50IHByaWNlIGFuZCByZXNldHMgdGhlIGNsb2NrLiByZWYgaXMgdGhlIGFkZHJlc3MKLy8gdGhhdCBpbnZpdGVkIHRoZSBiaWRkZXIgKCIiIGZvciBub25lOyBvbmx5IHRoZSBmaXJzdCBiaWQgZXZlciBzZXRzIGl0KSwgZmxhZwovLyBhIHR3by1sZXR0ZXIgY291bnRyeSB0byBwbGF5IHVuZGVyICgiIiBrZWVwcyB0aGUgbGFzdCBvbmUpLgpmdW5jIEJpZChjdXIgcmVhbG0sIGlkIGludDY0LCByZWYgc3RyaW5nLCBmbGFnIHN0cmluZykgewoJYmlkZGVyIDo9IHVzZXJDYWxsZXIoY3VyKQoJcCA6PSBwb29sKGlkKQoJaWYgcC5DYW5jZWxsZWQgewoJCXBhbmljKCJwb29sIHdhcyBjYW5jZWxsZWQiKQoJfQoJaWYgcC5PdmVyKCkgewoJCXBhbmljKCJwb29sIGlzIGNsb3NlZCIpCgl9CglpZiBwLkxhc3RCaWRkZXIgPT0gYmlkZGVyIHsKCQlwYW5pYygieW91IGFyZSBhbHJlYWR5IHRoZSBsYXN0IGJpZGRlciIpCgl9CglwcmljZSA6PSBwLk5leHRQcmljZSgpCglzZW50IDo9IHVnbm90U2VudCgpCglpZiBzZW50IDwgcHJpY2UgewoJCXBhbmljKCJzZW5kIGF0IGxlYXN0ICIgKyBpdG9hKHByaWNlKSArICJ1Z25vdCwgZ290ICIgKyBpdG9hKHNlbnQpICsgInVnbm90IikKCX0KCXBsIDo9IHBsYXllcihiaWRkZXIpCglpZiBmIDo9IGNsZWFuRmxhZyhmbGFnKTsgZiAhPSAiIiAmJiBmICE9IHBsLkZsYWcgewoJCWlmIHBsLkZsYWcgIT0gIiIgewoJCQl0ZWFtU2l6ZVtwbC5GbGFnXS0tCgkJfQoJCXBsLkZsYWcgPSBmCgkJdGVhbVNpemVbZl0rKwoJfQoJaWYgcGwuUmVmZXJyZXIgPT0gIiIgJiYgcmVmICE9ICIiIHsKCQlyIDo9IGFkZHJlc3MocmVmKQoJCWlmIHIuSXNWYWxpZCgpICYmIHIgIT0gYmlkZGVyIHsKCQkJcGwuUmVmZXJyZXIgPSByCgkJCXBsYXllcihyKS5SZWNydWl0cysrCgkJfQoJfQoKCS8vIHdoZXJlIHRoZSBtb25leSBnb2VzCglkaXYsIHJlZkN1dCwgY3JlYXRvckN1dCA6PSBzZW50KkRpdlNoYXJlLzEwMCwgc2VudCpSZWZTaGFyZS8xMDAsIHNlbnQqQ3JlYXRvclNoYXJlLzEwMAoJdG9Qb3QgOj0gc2VudCAtIGRpdiAtIHJlZkN1dCAtIGNyZWF0b3JDdXQKCWlmIGNyZWF0b3JDdXQgPiAwIHsKCQlzZW5kKGN1ciwgcC5DcmVhdG9yLCBjcmVhdG9yQ3V0KQoJCXAuQ3JlYXRvclBhaWQgKz0gY3JlYXRvckN1dAoJfQoJaWYgcGwuUmVmZXJyZXIgIT0gIiIgJiYgcmVmQ3V0ID4gMCB7CgkJc2VuZChjdXIsIHBsLlJlZmVycmVyLCByZWZDdXQpCgkJcC5SZWZQYWlkICs9IHJlZkN1dAoJCXBsYXllcihwbC5SZWZlcnJlcikuUmVmRWFybmVkICs9IHJlZkN1dAoJfSBlbHNlIHsKCQl0b1BvdCArPSByZWZDdXQKCX0KCXRvUG90ICs9IHAucGF5RGl2aWRlbmRzKGN1ciwgYmlkZGVyLCBkaXYpCglwLlBvdCArPSB0b1BvdAoKCW0gOj0gcC5tZW1iZXIoYmlkZGVyKQoJbS5QYWlkICs9IHNlbnQKCW0uRmxhZyA9IHBsLkZsYWcKCXBsLkJpZHMrKwoJcGwuUGFpZCArPSBzZW50CglpZiBwbC5GbGFnICE9ICIiIHsKCQl0ZWFtUGFpZFtwbC5GbGFnXSArPSBzZW50Cgl9CglwLkJpZHMrKwoJcC5MYXN0QmlkZGVyID0gYmlkZGVyCglwLkxhc3RCaWRBdCA9IHRpbWUuTm93KCkKCXAuQ2xvY2sgPSBDbG9ja0ZvcihwLldpbmRvdywgcHJpY2UsIHNlbnQpCglwLkhpc3RvcnkgPSBhcHBlbmQocC5IaXN0b3J5LCBFbnRyeXtOOiBwLkJpZHMsIEJpZGRlcjogYmlkZGVyLCBGbGFnOiBwbC5GbGFnLCBQcmljZTogc2VudCwgQ2xvY2s6IHAuQ2xvY2ssIFBvdDogcC5Qb3QsIEF0OiBwLkxhc3RCaWRBdH0pCglpZiBsZW4ocC5IaXN0b3J5KSA+IEhpc3RvcnlMZW4gewoJCXAuSGlzdG9yeSA9IHAuSGlzdG9yeVtsZW4ocC5IaXN0b3J5KS1IaXN0b3J5TGVuOl0KCX0KCWNoYWluLkVtaXQoIkJpZCIsICJpZCIsIGl0b2EoaWQpLCAibiIsIGl0b2EocC5CaWRzKSwgImJpZGRlciIsIGJpZGRlci5TdHJpbmcoKSwgInBhaWQiLCBpdG9hKHNlbnQpLCAicG90IiwgaXRvYShwLlBvdCksICJkaXYiLCBpdG9hKGRpdi0odG9Qb3QtKHNlbnQtZGl2LXJlZkN1dC1jcmVhdG9yQ3V0KSkpKQp9CgovLyBwYXlEaXZpZGVuZHMgc3BsaXRzIGRpdiBhbW9uZyB0aGUgcG9vbCdzIGVhcmxpZXIgYmlkZGVycywgcHJvLXJhdGEgdG8gd2hhdAovLyBlYWNoIGhhcyBwYWlkIGluLCBza2lwcGluZyB0aGUgYmlkZGVyOyB3aGF0ZXZlciBjYW5ub3QgYmUgcGxhY2VkIChubyBlYXJsaWVyCi8vIGJpZGRlcnMsIHJvdW5kaW5nKSBpcyByZXR1cm5lZCB0byBnbyBpbnRvIHRoZSBwb3QuCmZ1bmMgKHAgKlBvb2wpIHBheURpdmlkZW5kcyhjdXIgcmVhbG0sIGJpZGRlciBhZGRyZXNzLCBkaXYgaW50NjQpIGludDY0IHsKCXZhciB0b3RhbCBpbnQ2NAoJZm9yIF8sIG0gOj0gcmFuZ2UgcC5Sb3N0ZXIgewoJCWlmIG0uQWRkciAhPSBiaWRkZXIgewoJCQl0b3RhbCArPSBtLlBhaWQKCQl9Cgl9CglpZiB0b3RhbCA9PSAwIHx8IGRpdiA9PSAwIHsKCQlyZXR1cm4gZGl2Cgl9Cgl2YXIgcGFpZCBpbnQ2NAoJZm9yIF8sIG0gOj0gcmFuZ2UgcC5Sb3N0ZXIgewoJCWlmIG0uQWRkciA9PSBiaWRkZXIgewoJCQljb250aW51ZQoJCX0KCQlhbXQgOj0gZGl2ICogbS5QYWlkIC8gdG90YWwKCQlpZiBhbXQgPiAwIHsKCQkJc2VuZChjdXIsIG0uQWRkciwgYW10KQoJCQltLkVhcm5lZCArPSBhbXQKCQkJcGxheWVyKG0uQWRkcikuRGl2RWFybmVkICs9IGFtdAoJCQlwYWlkICs9IGFtdAoJCX0KCX0KCXAuRGl2UGFpZCArPSBwYWlkCglyZXR1cm4gZGl2IC0gcGFpZAp9CgovLyBtZW1iZXIgZmluZHMgb3IgYWRkcyBhIGJpZGRlciBvbiB0aGUgcm9zdGVyOyBhIGZ1bGwgcm9zdGVyIGRyb3BzIGl0cyBvbGRlc3QuCmZ1bmMgKHAgKlBvb2wpIG1lbWJlcihhIGFkZHJlc3MpICpNZW1iZXIgewoJZm9yIF8sIG0gOj0gcmFuZ2UgcC5Sb3N0ZXIgewoJCWlmIG0uQWRkciA9PSBhIHsKCQkJcmV0dXJuIG0KCQl9Cgl9CglpZiBsZW4ocC5Sb3N0ZXIpID49IFJvc3Rlck1heCB7CgkJcC5Sb3N0ZXIgPSBwLlJvc3RlclsxOl0KCX0KCW0gOj0gJk1lbWJlcntBZGRyOiBhfQoJcC5Sb3N0ZXIgPSBhcHBlbmQocC5Sb3N0ZXIsIG0pCglyZXR1cm4gbQp9CgovLyBDbGFpbSBwYXlzIG91dCBhIGZpbmlzaGVkIHBvb2w6IDgwJSB0byB0aGUgd2lubmVyLCAyMCUgc2hhcmVkIGFtb25nIHRoZQovLyByb3N0ZXIgbWVtYmVycyBmbHlpbmcgdGhlIHdpbm5lcidzIGZsYWcgKHByby1yYXRhIGJ5IHBhaWQtaW4sIHRoZSB3aW5uZXIKLy8gaW5jbHVkZWQpIOKAlCBvciBldmVyeXRoaW5nIHRvIHRoZSB3aW5uZXIgd2hlbiBub2JvZHkgZWxzZSBmbGV3IGl0LiBBbnlvbmUgbWF5IGNhbGwgaXQuCmZ1bmMgQ2xhaW0oY3VyIHJlYWxtLCBpZCBpbnQ2NCkgewoJcCA6PSBwb29sKGlkKQoJaWYgcC5DYW5jZWxsZWQgewoJCXBhbmljKCJwb29sIHdhcyBjYW5jZWxsZWQiKQoJfQoJaWYgIXAuT3ZlcigpIHsKCQlwYW5pYygiY2xvY2sgc3RpbGwgcnVubmluZyIpCgl9CglpZiBwLlBhaWQgewoJCXBhbmljKCJhbHJlYWR5IHBhaWQgb3V0IikKCX0KCXAuUGFpZCA9IHRydWUKCXdpbm5lciA6PSBwLkxhc3RCaWRkZXIKCWZsYWcgOj0gIiIKCWlmIG0gOj0gcC5maW5kKHdpbm5lcik7IG0gIT0gbmlsIHsKCQlmbGFnID0gbS5GbGFnCgl9CglwLldpbm5lckZsYWcgPSBmbGFnCgl2YXIgdGVhbSBpbnQ2NAoJdmFyIG1hdGVzIGludAoJaWYgZmxhZyAhPSAiIiB7CgkJZm9yIF8sIG0gOj0gcmFuZ2UgcC5Sb3N0ZXIgewoJCQlpZiBtLkZsYWcgPT0gZmxhZyB7CgkJCQl0ZWFtICs9IG0uUGFpZAoJCQkJbWF0ZXMrKwoJCQl9CgkJfQoJfQoJcmVzdCA6PSBwLlBvdAoJaWYgbWF0ZXMgPiAxICYmIHRlYW0gPiAwIHsKCQljdXQgOj0gcC5Qb3QgKiBUZWFtU2hhcmUgLyAxMDAKCQlmb3IgXywgbSA6PSByYW5nZSBwLlJvc3RlciB7CgkJCWlmIG0uRmxhZyAhPSBmbGFnIHsKCQkJCWNvbnRpbnVlCgkJCX0KCQkJYW10IDo9IGN1dCAqIG0uUGFpZCAvIHRlYW0KCQkJaWYgYW10ID4gMCB7CgkJCQlzZW5kKGN1ciwgbS5BZGRyLCBhbXQpCgkJCQlwbGF5ZXIobS5BZGRyKS5Xb24gKz0gYW10CgkJCQlyZXN0IC09IGFtdAoJCQkJcC5UZWFtUGFpZCArPSBhbXQKCQkJfQoJCX0KCX0KCXNlbmQoY3VyLCB3aW5uZXIsIHJlc3QpCglwbGF5ZXIod2lubmVyKS5Xb24gKz0gcmVzdAoJaWYgZmxhZyAhPSAiIiB7CgkJdGVhbVdvbltmbGFnXSArPSBwLlBvdAoJfQoJY2hhaW4uRW1pdCgiUGFpZCIsICJpZCIsIGl0b2EoaWQpLCAid2lubmVyIiwgd2lubmVyLlN0cmluZygpLCAicG90IiwgaXRvYShwLlBvdCksICJ0ZWFtIiwgaXRvYShwLlRlYW1QYWlkKSkKfQoKLy8gQ2FuY2VsIGxldHMgdGhlIGNyZWF0b3IgdGFrZSB0aGUgc2VlZCBiYWNrIGZyb20gYSBwb29sIG5vYm9keSBoYXMgYmlkIG9uLgpmdW5jIENhbmNlbChjdXIgcmVhbG0sIGlkIGludDY0KSB7CgljYWxsZXIgOj0gdXNlckNhbGxlcihjdXIpCglwIDo9IHBvb2woaWQpCglpZiBwLkNyZWF0b3IgIT0gY2FsbGVyIHsKCQlwYW5pYygib25seSB0aGUgY3JlYXRvciBjYW4gY2FuY2VsIikKCX0KCWlmIHAuQmlkcyA+IDAgewoJCXBhbmljKCJwb29sIGFscmVhZHkgaGFzIGJpZHMiKQoJfQoJaWYgcC5DYW5jZWxsZWQgewoJCXBhbmljKCJhbHJlYWR5IGNhbmNlbGxlZCIpCgl9CglwLkNhbmNlbGxlZCA9IHRydWUKCXAuUGFpZCA9IHRydWUKCWlmIHAuUG90ID4gMCB7CgkJc2VuZChjdXIsIGNhbGxlciwgcC5Qb3QpCgl9CgljaGFpbi5FbWl0KCJDYW5jZWxsZWQiLCAiaWQiLCBpdG9hKGlkKSkKfQoKZnVuYyAocCAqUG9vbCkgZmluZChhIGFkZHJlc3MpICpNZW1iZXIgewoJZm9yIF8sIG0gOj0gcmFuZ2UgcC5Sb3N0ZXIgewoJCWlmIG0uQWRkciA9PSBhIHsKCQkJcmV0dXJuIG0KCQl9Cgl9CglyZXR1cm4gbmlsCn0KCmZ1bmMgcGxheWVyKGEgYWRkcmVzcykgKlBsYXllciB7CglwbCA6PSBwbGF5ZXJzW2FdCglpZiBwbCA9PSBuaWwgewoJCXBsID0gJlBsYXllcnt9CgkJcGxheWVyc1thXSA9IHBsCgl9CglyZXR1cm4gcGwKfQoKZnVuYyBzZW5kKGN1ciByZWFsbSwgdG8gYWRkcmVzcywgdWdub3QgaW50NjQpIHsKCWJhbmtlci5OZXdCYW5rZXIoYmFua2VyLkJhbmtlclR5cGVSZWFsbVNlbmQsIGN1cikuU2VuZENvaW5zKHJlYWxtQWRkciwgdG8sIGNoYWluLkNvaW5ze3sidWdub3QiLCB1Z25vdH19KQp9CgpmdW5jIHBvb2woaWQgaW50NjQpICpQb29sIHsKCWlmIGlkIDwgMSB8fCBpZCA+IGludDY0KGxlbihwb29scykpIHsKCQlwYW5pYygibm8gc3VjaCBwb29sIikKCX0KCXJldHVybiBwb29sc1tpZC0xXQp9CgovLyB1c2VyQ2FsbGVyIGlzIHRoZSBzaWduZXIgb2YgdGhlIHRyYW5zYWN0aW9uLCByZWZ1c2luZyBjYWxscyByZWxheWVkIHRocm91Z2gKLy8gYW5vdGhlciByZWFsbSBzbyBub2JvZHkgY2FuIGJpZCBvbiBzb21lb25lIGVsc2UncyBiZWhhbGYuCmZ1bmMgdXNlckNhbGxlcihjdXIgcmVhbG0pIGFkZHJlc3MgewoJcHJldiA6PSBjdXIuUHJldmlvdXMoKQoJaWYgIXByZXYuSXNVc2VyQ2FsbCgpIHsKCQlwYW5pYygibXVzdCBiZSBhIGRpcmVjdCB1c2VyIGNhbGwiKQoJfQoJcmV0dXJuIHByZXYuQWRkcmVzcygpCn0KCmZ1bmMgdWdub3RTZW50KCkgaW50NjQgewoJc2VudCA6PSB1bnNhZmUuT3JpZ2luU2VuZCgpCglmb3IgXywgYyA6PSByYW5nZSBzZW50IHsKCQlpZiBjLkRlbm9tICE9ICJ1Z25vdCIgewoJCQlwYW5pYygib25seSB1Z25vdCBpcyBhY2NlcHRlZCIpCgkJfQoJfQoJcmV0dXJuIHNlbnQuQW1vdW50T2YoInVnbm90IikKfQoKZnVuYyBjbGVhbk5hbWUocyBzdHJpbmcpIHN0cmluZyB7CglzID0gc3RyaW5ncy5UcmltU3BhY2UocykKCWlmIHMgPT0gIiIgfHwgbGVuKHMpID4gTWF4TmFtZUxlbiB7CgkJcGFuaWMoIm5hbWUgbXVzdCBiZSAxLTQwIGNoYXJhY3RlcnMiKQoJfQoJZm9yIF8sIGMgOj0gcmFuZ2UgcyB7CgkJaWYgYyA8IDB4MjAgfHwgYyA9PSAweDdmIHsKCQkJcGFuaWMoIm5hbWUgaGFzIGNvbnRyb2wgY2hhcmFjdGVycyIpCgkJfQoJfQoJcmV0dXJuIHMKfQoKLy8gY2xlYW5GbGFnIGFjY2VwdHMgYSB0d28tbGV0dGVyIGNvdW50cnkgY29kZSwgdXBwZXItY2FzZWQ7IGFueXRoaW5nIGVsc2UgaXMgIiIuCmZ1bmMgY2xlYW5GbGFnKHMgc3RyaW5nKSBzdHJpbmcgewoJcyA9IHN0cmluZ3MuVG9VcHBlcihzdHJpbmdzLlRyaW1TcGFjZShzKSkKCWlmIGxlbihzKSAhPSAyIHx8IHNbMF0gPCAnQScgfHwgc1swXSA+ICdaJyB8fCBzWzFdIDwgJ0EnIHx8IHNbMV0gPiAnWicgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIHMKfQoKZnVuYyBpdG9hKG4gaW50NjQpIHN0cmluZyB7IHJldHVybiBzdHJjb252LkZvcm1hdEludChuLCAxMCkgfQoKZnVuYyBwYXJzZUlEKHMgc3RyaW5nKSBpbnQ2NCB7CgluLCBlcnIgOj0gc3RyY29udi5QYXJzZUludChzLCAxMCwgNjQpCglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYygiYmFkIHBvb2wgaWQiKQoJfQoJcmV0dXJuIG4KfQoKLy8gR05PVCBmb3JtYXRzIHVnbm90IGFzIEdOT1Qgd2l0aCB0aGUgdHJhaWxpbmcgemVyb3MgdHJpbW1lZC4KZnVuYyBHTk9UKHVnbm90IGludDY0KSBzdHJpbmcgewoJd2hvbGUsIGZyYWMgOj0gdWdub3QvMV8wMDBfMDAwLCB1Z25vdCUxXzAwMF8wMDAKCWlmIGZyYWMgPT0gMCB7CgkJcmV0dXJuIGl0b2Eod2hvbGUpICsgIiBHTk9UIgoJfQoJZiA6PSBzdHJjb252LkZvcm1hdEludCgxXzAwMF8wMDArZnJhYywgMTApWzE6XQoJcmV0dXJuIGl0b2Eod2hvbGUpICsgIi4iICsgc3RyaW5ncy5UcmltUmlnaHQoZiwgIjAiKSArICIgR05PVCIKfQoKZnVuYyBzaG9ydChhIGFkZHJlc3MpIHN0cmluZyB7CglzIDo9IGEuU3RyaW5nKCkKCWlmIGxlbihzKSA8IDEyIHsKCQlyZXR1cm4gcwoJfQoJcmV0dXJuIHNbOjhdICsgIuKApiIgKyBzW2xlbihzKS00Ol0KfQoKZnVuYyBkdXIoc2VjIGludDY0KSBzdHJpbmcgewoJaWYgc2VjIDw9IDAgewoJCXJldHVybiAiMHMiCgl9CglkLCBoLCBtLCBzIDo9IHNlYy84NjQwMCwgc2VjJTg2NDAwLzM2MDAsIHNlYyUzNjAwLzYwLCBzZWMlNjAKCW91dCA6PSAiIgoJaWYgZCA+IDAgewoJCW91dCArPSBpdG9hKGQpICsgImQgIgoJfQoJaWYgZCA+IDAgfHwgaCA+IDAgewoJCW91dCArPSBpdG9hKGgpICsgImggIgoJfQoJaWYgZCA+IDAgfHwgaCA+IDAgfHwgbSA+IDAgewoJCW91dCArPSBpdG9hKG0pICsgIm0gIgoJfQoJcmV0dXJuIG91dCArIGl0b2EocykgKyAicyIKfQoKLy8gLS0tIHJlbmRlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFJlbmRlciBzZXJ2ZXMgZ25vd2ViICgiIiBhbmQgIjxpZD4iKSBhbmQgdGhlIHBhZ2UgKCJqc29uIiwgImpzb24vPGlkPiIsCi8vICJtZS88YWRkcmVzcz4iLCAidGVhbXMiKS4KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglwYXRoID0gc3RyaW5ncy5UcmltKHBhdGgsICIvIikKCXN3aXRjaCB7CgljYXNlIHBhdGggPT0gImpzb24iOgoJCXJldHVybiBqc29uQWxsKCkKCWNhc2Ugc3RyaW5ncy5IYXNQcmVmaXgocGF0aCwgImpzb24vIik6CgkJcmV0dXJuIHBvb2wocGFyc2VJRChwYXRoWzU6XSkpLmpzb24odHJ1ZSkKCWNhc2Ugc3RyaW5ncy5IYXNQcmVmaXgocGF0aCwgIm1lLyIpOgoJCXJldHVybiBqc29uTWUoYWRkcmVzcyhwYXRoWzM6XSkpCgljYXNlIHBhdGggPT0gInRlYW1zIjoKCQlyZXR1cm4ganNvblRlYW1zKCkKCWNhc2UgcGF0aCA9PSAiIjoKCQlyZXR1cm4gbWFya2Rvd25BbGwoKQoJZGVmYXVsdDoKCQlyZXR1cm4gcG9vbChwYXJzZUlEKHBhdGgpKS5tYXJrZG93bigpCgl9Cn0KCmZ1bmMgdW5peCh0IHRpbWUuVGltZSkgc3RyaW5nIHsKCWlmIHQuSXNaZXJvKCkgewoJCXJldHVybiAiMCIKCX0KCXJldHVybiBpdG9hKHQuVW5peCgpKQp9CgpmdW5jIGpib29sKGIgYm9vbCkgc3RyaW5nIHsKCWlmIGIgewoJCXJldHVybiAidHJ1ZSIKCX0KCXJldHVybiAiZmFsc2UiCn0KCmZ1bmMgKHAgKlBvb2wpIGpzb24oZGV0YWlsIGJvb2wpIHN0cmluZyB7Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWIuV3JpdGVTdHJpbmcoIntcImlkXCI6IiArIGl0b2EocC5JRCkpCgliLldyaXRlU3RyaW5nKCIsXCJuYW1lXCI6IiArIHN0cmNvbnYuUXVvdGUocC5OYW1lKSkKCWIuV3JpdGVTdHJpbmcoIixcImNyZWF0b3JcIjpcIiIgKyBwLkNyZWF0b3IuU3RyaW5nKCkgKyAiXCIiKQoJYi5Xcml0ZVN0cmluZygiLFwid2luZG93XCI6IiArIGl0b2EocC5XaW5kb3cpKQoJYi5Xcml0ZVN0cmluZygiLFwiYmFzZVByaWNlXCI6IiArIGl0b2EocC5CYXNlUHJpY2UpKQoJYi5Xcml0ZVN0cmluZygiLFwic2VlZFwiOiIgKyBpdG9hKHAuU2VlZCkpCgliLldyaXRlU3RyaW5nKCIsXCJwb3RcIjoiICsgaXRvYShwLlBvdCkpCgliLldyaXRlU3RyaW5nKCIsXCJiaWRzXCI6IiArIGl0b2EocC5CaWRzKSkKCWIuV3JpdGVTdHJpbmcoIixcIm5leHRQcmljZVwiOiIgKyBpdG9hKHAuTmV4dFByaWNlKCkpKQoJYi5Xcml0ZVN0cmluZygiLFwibGFzdEJpZGRlclwiOlwiIiArIHAuTGFzdEJpZGRlci5TdHJpbmcoKSArICJcIiIpCgliLldyaXRlU3RyaW5nKCIsXCJsYXN0QmlkQXRcIjoiICsgdW5peChwLkxhc3RCaWRBdCkpCgliLldyaXRlU3RyaW5nKCIsXCJjbG9ja1wiOiIgKyBpdG9hKHAuQ2xvY2spKQoJYi5Xcml0ZVN0cmluZygiLFwiY3JlYXRlZEF0XCI6IiArIHVuaXgocC5DcmVhdGVkQXQpKQoJYi5Xcml0ZVN0cmluZygiLFwib3ZlclwiOiIgKyBqYm9vbChwLk92ZXIoKSkpCgliLldyaXRlU3RyaW5nKCIsXCJwYWlkXCI6IiArIGpib29sKHAuUGFpZCkpCgliLldyaXRlU3RyaW5nKCIsXCJjYW5jZWxsZWRcIjoiICsgamJvb2wocC5DYW5jZWxsZWQpKQoJYi5Xcml0ZVN0cmluZygiLFwiYmlkZGVyc1wiOiIgKyBpdG9hKGludDY0KGxlbihwLlJvc3RlcikpKSkKCWIuV3JpdGVTdHJpbmcoIixcImRpdlBhaWRcIjoiICsgaXRvYShwLkRpdlBhaWQpKQoJYi5Xcml0ZVN0cmluZygiLFwicmVmUGFpZFwiOiIgKyBpdG9hKHAuUmVmUGFpZCkpCgliLldyaXRlU3RyaW5nKCIsXCJjcmVhdG9yUGFpZFwiOiIgKyBpdG9hKHAuQ3JlYXRvclBhaWQpKQoJYi5Xcml0ZVN0cmluZygiLFwidGVhbVBhaWRcIjoiICsgaXRvYShwLlRlYW1QYWlkKSkKCWZsYWcgOj0gcC5XaW5uZXJGbGFnCglpZiBtIDo9IHAuZmluZChwLkxhc3RCaWRkZXIpOyBtICE9IG5pbCAmJiBmbGFnID09ICIiIHsKCQlmbGFnID0gbS5GbGFnCgl9CgliLldyaXRlU3RyaW5nKCIsXCJmbGFnXCI6XCIiICsgZmxhZyArICJcIiIpCgkvLyB3aGF0IGVhY2ggZmxhZyBoYXMgcGFpZCBpbnRvIHRoaXMgcG9vbAoJYi5Xcml0ZVN0cmluZygiLFwidGVhbXNcIjp7IikKCXNlZW4gOj0gbWFwW3N0cmluZ11pbnQ2NHt9CglvcmRlciA6PSBbXXN0cmluZ3t9Cglmb3IgXywgbSA6PSByYW5nZSBwLlJvc3RlciB7CgkJaWYgbS5GbGFnID09ICIiIHsKCQkJY29udGludWUKCQl9CgkJaWYgXywgb2sgOj0gc2VlblttLkZsYWddOyAhb2sgewoJCQlvcmRlciA9IGFwcGVuZChvcmRlciwgbS5GbGFnKQoJCX0KCQlzZWVuW20uRmxhZ10gKz0gbS5QYWlkCgl9Cglmb3IgaSwgZiA6PSByYW5nZSBvcmRlciB7CgkJaWYgaSA+IDAgewoJCQliLldyaXRlU3RyaW5nKCIsIikKCQl9CgkJYi5Xcml0ZVN0cmluZygiXCIiICsgZiArICJcIjoiICsgaXRvYShzZWVuW2ZdKSkKCX0KCWIuV3JpdGVTdHJpbmcoIn0iKQoJaWYgZGV0YWlsIHsKCQliLldyaXRlU3RyaW5nKCIsXCJoaXN0b3J5XCI6WyIpCgkJZm9yIGkgOj0gbGVuKHAuSGlzdG9yeSkgLSAxOyBpID49IDA7IGktLSB7IC8vIG5ld2VzdCBmaXJzdAoJCQloIDo9IHAuSGlzdG9yeVtpXQoJCQlpZiBpIDwgbGVuKHAuSGlzdG9yeSktMSB7CgkJCQliLldyaXRlU3RyaW5nKCIsIikKCQkJfQoJCQliLldyaXRlU3RyaW5nKCJ7XCJuXCI6IiArIGl0b2EoaC5OKSArICIsXCJiaWRkZXJcIjpcIiIgKyBoLkJpZGRlci5TdHJpbmcoKSArICJcIixcImZsYWdcIjpcIiIgKyBoLkZsYWcgKyAiXCIsXCJwcmljZVwiOiIgKyBpdG9hKGguUHJpY2UpICsgIixcImNsb2NrXCI6IiArIGl0b2EoaC5DbG9jaykgKyAiLFwicG90XCI6IiArIGl0b2EoaC5Qb3QpICsgIixcImF0XCI6IiArIHVuaXgoaC5BdCkgKyAifSIpCgkJfQoJCWIuV3JpdGVTdHJpbmcoIl0sXCJyb3N0ZXJcIjpbIikKCQlmb3IgaSwgbSA6PSByYW5nZSBwLlJvc3RlciB7CgkJCWlmIGkgPiAwIHsKCQkJCWIuV3JpdGVTdHJpbmcoIiwiKQoJCQl9CgkJCWIuV3JpdGVTdHJpbmcoIntcImFkZHJcIjpcIiIgKyBtLkFkZHIuU3RyaW5nKCkgKyAiXCIsXCJmbGFnXCI6XCIiICsgbS5GbGFnICsgIlwiLFwicGFpZFwiOiIgKyBpdG9hKG0uUGFpZCkgKyAiLFwiZWFybmVkXCI6IiArIGl0b2EobS5FYXJuZWQpICsgIn0iKQoJCX0KCQliLldyaXRlU3RyaW5nKCJdIikKCX0KCWIuV3JpdGVTdHJpbmcoIn0iKQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoKZnVuYyBqc29uQWxsKCkgc3RyaW5nIHsKCXZhciBiIHN0cmluZ3MuQnVpbGRlcgoJYi5Xcml0ZVN0cmluZygie1wibm93XCI6IiArIGl0b2EodGltZS5Ob3coKS5Vbml4KCkpICsgIixcInJlYWxtXCI6XCIiICsgcGtnUGF0aCArICJcIiIpCgliLldyaXRlU3RyaW5nKCIsXCJzcGxpdFwiOntcInBvdFwiOiIgKyBpdG9hKFBvdFNoYXJlKSArICIsXCJkaXZcIjoiICsgaXRvYShEaXZTaGFyZSkgKyAiLFwicmVmXCI6IiArIGl0b2EoUmVmU2hhcmUpICsgIixcImNyZWF0b3JcIjoiICsgaXRvYShDcmVhdG9yU2hhcmUpICsgIixcInRlYW1cIjoiICsgaXRvYShUZWFtU2hhcmUpICsgIixcInJvc3RlclwiOiIgKyBpdG9hKGludDY0KFJvc3Rlck1heCkpICsgIn0iKQoJYi5Xcml0ZVN0cmluZygiLFwicG9vbHNcIjpbIikKCWZvciBpLCBwIDo9IHJhbmdlIHBvb2xzIHsKCQlpZiBpID4gMCB7CgkJCWIuV3JpdGVTdHJpbmcoIiwiKQoJCX0KCQliLldyaXRlU3RyaW5nKHAuanNvbihmYWxzZSkpCgl9CgliLldyaXRlU3RyaW5nKCJdLFwidGVhbXNcIjoiICsganNvblRlYW1zKCkgKyAifSIpCglyZXR1cm4gYi5TdHJpbmcoKQp9CgovLyBqc29uVGVhbXMgaXMgdGhlIGNvdW50cnkgbGVhZGVyYm9hcmQ6IHBhaWQgaW4sIHdvbiwgYW5kIHBsYXllcnMgcGVyIGZsYWcuCmZ1bmMganNvblRlYW1zKCkgc3RyaW5nIHsKCXZhciBiIHN0cmluZ3MuQnVpbGRlcgoJYi5Xcml0ZVN0cmluZygieyIpCglpIDo9IDAKCWZvciBmLCBwYWlkIDo9IHJhbmdlIHRlYW1QYWlkIHsKCQlpZiBpID4gMCB7CgkJCWIuV3JpdGVTdHJpbmcoIiwiKQoJCX0KCQlpKysKCQliLldyaXRlU3RyaW5nKCJcIiIgKyBmICsgIlwiOntcInBhaWRcIjoiICsgaXRvYShwYWlkKSArICIsXCJ3b25cIjoiICsgaXRvYSh0ZWFtV29uW2ZdKSArICIsXCJwbGF5ZXJzXCI6IiArIGl0b2EodGVhbVNpemVbZl0pICsgIn0iKQoJfQoJYi5Xcml0ZVN0cmluZygifSIpCglyZXR1cm4gYi5TdHJpbmcoKQp9CgovLyBqc29uTWUgaXMgd2hhdCB0aGUgcGFnZSBzaG93cyBhIGNvbm5lY3RlZCB3YWxsZXQgYWJvdXQgaXRzZWxmLgpmdW5jIGpzb25NZShhIGFkZHJlc3MpIHN0cmluZyB7CglwbCA6PSBwbGF5ZXJzW2FdCglpZiBwbCA9PSBuaWwgewoJCXBsID0gJlBsYXllcnt9Cgl9CglyZXR1cm4gIntcImFkZHJcIjpcIiIgKyBhLlN0cmluZygpICsgIlwiLFwicmVmZXJyZXJcIjpcIiIgKyBwbC5SZWZlcnJlci5TdHJpbmcoKSArICJcIixcInJlY3J1aXRzXCI6IiArIGl0b2EocGwuUmVjcnVpdHMpICsKCQkiLFwiZmxhZ1wiOlwiIiArIHBsLkZsYWcgKyAiXCIsXCJiaWRzXCI6IiArIGl0b2EocGwuQmlkcykgKyAiLFwicGFpZFwiOiIgKyBpdG9hKHBsLlBhaWQpICsKCQkiLFwiZGl2RWFybmVkXCI6IiArIGl0b2EocGwuRGl2RWFybmVkKSArICIsXCJyZWZFYXJuZWRcIjoiICsgaXRvYShwbC5SZWZFYXJuZWQpICsgIixcIndvblwiOiIgKyBpdG9hKHBsLldvbikgKyAifSIKfQoKZnVuYyAocCAqUG9vbCkgc3RhdHVzKCkgc3RyaW5nIHsKCXN3aXRjaCB7CgljYXNlIHAuQ2FuY2VsbGVkOgoJCXJldHVybiAiY2FuY2VsbGVkIgoJY2FzZSBwLk92ZXIoKToKCQlzIDo9ICJ3b24gYnkgIiArIHNob3J0KHAuTGFzdEJpZGRlcikKCQlpZiAhcC5QYWlkIHsKCQkJcyArPSAiICh1bmNsYWltZWQpIgoJCX0KCQlyZXR1cm4gcwoJY2FzZSBwLkJpZHMgPT0gMDoKCQlyZXR1cm4gIm5vIGJpZHMgeWV0IMK3ICIgKyBkdXIocC5XaW5kb3cpICsgIiB3aW5kb3cgwrcgbmV4dCAiICsgR05PVChwLk5leHRQcmljZSgpKQoJZGVmYXVsdDoKCQlsZWZ0IDo9IHAuRGVhZGxpbmUoKS5Vbml4KCkgLSB0aW1lLk5vdygpLlVuaXgoKQoJCXMgOj0gZHVyKGxlZnQpICsgIiBsZWZ0IgoJCWlmIHAuQ2xvY2sgPCBwLldpbmRvdyB7CgkJCXMgKz0gIiBvZiBhICIgKyBkdXIocC5DbG9jaykgKyAiIGNsb2NrIgoJCX0KCQlyZXR1cm4gcyArICIgwrcgIiArIHNob3J0KHAuTGFzdEJpZGRlcikgKyAiIG9uIHRvcCDCtyBuZXh0ICIgKyBHTk9UKHAuTmV4dFByaWNlKCkpCgl9Cn0KCmZ1bmMgbWFya2Rvd25BbGwoKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKCIjIEJ1YmJsZSBSdW1ibGVcblxuIikKCWIuV3JpdGVTdHJpbmcoIkV2ZXJ5IGJpZCBnb2VzIGludG8gYSBwb29sJ3MgcG90IGFuZCByZXNldHMgaXRzIGNsb2NrOyB0aGUgTnRoIGJpZCBjb3N0cyBiYXNlwrfiiJpOLiAiKQoJYi5Xcml0ZVN0cmluZygiT2YgZXZlcnkgYmlkLCA1NSUgaXMgcG90LCAzMCUgaXMgcGFpZCBhdCBvbmNlIHRvIHRoZSBwb29sJ3MgZWFybGllciBiaWRkZXJzLCAxMCUgdG8gd2hvZXZlciBpbnZpdGVkIHlvdSwgNSUgdG8gdGhlIHBvb2wncyBjcmVhdG9yLiAiKQoJYi5Xcml0ZVN0cmluZygiV2hlbiB0aGUgY2xvY2sgcnVucyBvdXQgdGhlIGxhc3QgYmlkZGVyIHRha2VzIDgwJSBhbmQgdGhlIHBsYXllcnMgdW5kZXIgdGhlIHdpbm5lcidzIGZsYWcgc2hhcmUgMjAlLiBQbGF5IGF0IFtidWJibGVydW1ibGUubmV0XShodHRwczovL2J1YmJsZXJ1bWJsZS5uZXQpLlxuXG4iKQoJaWYgbGVuKHBvb2xzKSA9PSAwIHsKCQliLldyaXRlU3RyaW5nKCJfTm8gcG9vbHMgeWV0Ll9cbiIpCgkJcmV0dXJuIGIuU3RyaW5nKCkKCX0KCWIuV3JpdGVTdHJpbmcoIiMjIFBvb2xzXG5cbiIpCglmb3IgaSA6PSBsZW4ocG9vbHMpIC0gMTsgaSA+PSAwOyBpLS0gewoJCXAgOj0gcG9vbHNbaV0KCQliLldyaXRlU3RyaW5nKCItIFsiICsgcC5OYW1lICsgIl0oPyIgKyBpdG9hKHAuSUQpICsgIikg4oCUICoqIiArIEdOT1QocC5Qb3QpICsgIioqIMK3ICIgKyBpdG9hKHAuQmlkcykgKyAiIGJpZHMgwrcgIiArIHAuc3RhdHVzKCkgKyAiXG4iKQoJfQoJcmV0dXJuIGIuU3RyaW5nKCkKfQoKZnVuYyAocCAqUG9vbCkgbWFya2Rvd24oKSBzdHJpbmcgewoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKCIjICIgKyBwLk5hbWUgKyAiXG5cbiIpCgliLldyaXRlU3RyaW5nKCIqKiIgKyBHTk9UKHAuUG90KSArICIqKiBpbiB0aGUgcG90IMK3ICIgKyBwLnN0YXR1cygpICsgIlxuXG4iKQoJYi5Xcml0ZVN0cmluZygiT3BlbmVkIGJ5ICIgKyBzaG9ydChwLkNyZWF0b3IpICsgIiDCtyAiICsgZHVyKHAuV2luZG93KSArICIgd2luZG93IMK3IGJhc2UgIiArIEdOT1QocC5CYXNlUHJpY2UpICsgIiDCtyBzZWVkICIgKyBHTk9UKHAuU2VlZCkgKyAiIMK3ICIgKyBHTk9UKHAuRGl2UGFpZCkgKyAiIHBhaWQgdG8gZWFybGllciBiaWRkZXJzIHNvIGZhclxuXG4iKQoJaWYgbGVuKHAuSGlzdG9yeSkgPiAwIHsKCQliLldyaXRlU3RyaW5nKCIjIyBCaWRzXG5cbiIpCgkJZm9yIGkgOj0gbGVuKHAuSGlzdG9yeSkgLSAxOyBpID49IDA7IGktLSB7CgkJCWggOj0gcC5IaXN0b3J5W2ldCgkJCWIuV3JpdGVTdHJpbmcoIi0gIyIgKyBpdG9hKGguTikgKyAiICIgKyBzaG9ydChoLkJpZGRlcikgKyAiICIgKyBoLkZsYWcgKyAiIHBhaWQgIiArIEdOT1QoaC5QcmljZSkgKyAiIOKGkiBwb3QgIiArIEdOT1QoaC5Qb3QpICsgIlxuIikKCQl9Cgl9CglyZXR1cm4gYi5TdHJpbmcoKQp9ChpoCgtnbm9tb2QudG9tbBJZbW9kdWxlID0gImduby5sYW5kL3IvZzFsZXU4ZDJ2c3BsaGVoY2Zramc1MG13Z2RweGRrdDh0enR1OTV3ci9idWJibGVydW1ibGUyIgpnbm8gPSAiMC45IgoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwSEQiAjs4cEgozMDAwMHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAmMwLKzaTwnzT5WCY4eDO+5WU2b96mJUiPGXCytNewfKEkDFZDlX606cwe82tUDe0TIQp3yXKxKOMpY1jjWRMuVmTn0txEysN35wAlO8UO3i8G4yG76h6J2aNKSTkSbboME4GihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data