Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
2A9E54FCC8C8CEC0887FFFE019BC8C221F8FDB61A7DDFD5993D3718A0FBBB38F
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
72,962,200
Requested gas limit
GAS USED
31,091,998
Gas consumed
FEE
218886ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1manfred47kzduec920z88wfr64ylksmdcedlf510000000ugnot
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CsG4AQoML3ZtLm1fYWRkcGtnEq+4AQooZzFtYW5mcmVkNDdremR1ZWM5MjB6ODh3ZnI2NHlsa3NtZGNlZGxmNRLytwEKB2dhbGxlcnkSGmduby5sYW5kL3IvbW91bC9nYWxsZXJ5L3YwGpgeCglSRUFETUUubWQSih4jIGBnbm8ubGFuZC9yL21vdWwvZ2FsbGVyeS92MGAKCkEgY3VyYXRlZCBpbmRleCBvZiBhcnQgb24gZ25vLmxhbmQsIGluIHdoaWNoZXZlciBmb3JtIHRoZSByZWFkZXIgY2FuIGFjdHVhbGx5CmNvbnN1bWUuCgoqKkl0IHN0b3JlcyBubyBhcnQuKiogRXZlcnkgcGllY2UgbGl2ZXMgaW4gc29tZWJvZHkncyByZWFsbTsgdGhpcyBvbmUgcmVuZGVycwp0aGUgb25lcyBpdCBjYW4gaW1wb3J0IGFuZCBwb2ludHMgYXQgdGhlIG9uZXMgaXQgY2Fubm90LiBUaGVyZSBpcyBubwpwYWNrYWdlLWxldmVsIHN0YXRlIGFueXdoZXJlIGluIGl0LCBzbyB0aGVyZSBpcyBub3RoaW5nIGZvciBhIHJlZGVwbG95IHRvIHdpcGUKYW5kIG5vdGhpbmcgaXQgcGF5cyBzdG9yYWdlIGZvci4KCiMjIFJlbmRlcmVkLCBvciBsaW5rZWQsIGFuZCBpdCBzYXlzIHdoaWNoCgp8IHwgfAp8LS0tfC0tLXwKfCAqKnJlbmRlcmVkIGhlcmUqKiB8IHRoZSBzb3VyY2UgcmVhbG0gaXMgcHVibGljLCBzbyB0aGUgZ2FsbGVyeSBpbXBvcnRzIGl0IGFuZCBjYWxscyBpdCBsaXZlOiBgZ25vZmFjZWAsIGBtaWxsaXBlZGVgLCBgc2FwaW5gIHwKfCAqKmxpbmtlZCoqIHwgdGhlIHNvdXJjZSBjYW5ub3QgYmUgaW1wb3J0ZWQsIHNvIHRoZSBnYWxsZXJ5IHBvaW50cyBhdCBpdCBhbmQgc2F5cyBzbyByYXRoZXIgdGhhbiBzaG93aW5nIGFuIGVtcHR5IGJveCB8CgpgYXNjaWlhcnRgIGlzIHRoZSBob25lc3QgY2FzZTogaXQgZGVjbGFyZXMgYHByaXZhdGUgPSB0cnVlYCwgd2hpY2ggbWVhbnMgbm8gcmVhbG0KbWF5IGV2ZXIgaW1wb3J0IGl0LiBUaGF0IGlzIGEgY29uc3RyYWludCBvZiB0aGUgY2hhaW4sIG5vdCBhbiBvbWlzc2lvbiBoZXJlLCBhbmQKdGhlIHBpZWNlIHBhZ2Ugc2F5cyBleGFjdGx5IHRoYXQuCgojIyBUaGUgdGFyZ2V0IGlzIGEgcGFyYW1ldGVyCgpFdmVyeSBwYWdlIGFuc3dlcnMgdG8gYD9mbXQ9dHh0YCBhcyB3ZWxsIGFzIHRoZSBkZWZhdWx0IG1hcmtkb3duLgoKVGhlIHRleHQgdGFyZ2V0IGlzICoqbm90IG1hcmtkb3duIHdpdGggdGhlIGNoYXJhY3RlcnMgZGVsZXRlZCoqLiBJdCBpcyBhCmRpZmZlcmVudCBkb2N1bWVudCBidWlsdCBmcm9tIHRoZSBzYW1lIGNvbnRlbnQ6CgoxLiBBIGxpbmsgcHJpbnRzIGl0cyB0ZXh0IGlubGluZSBhbmQgY29sbGVjdHMgdGhlIFVSTCBpbnRvIGEgbnVtYmVyZWQgZm9vdG5vdGUKICAgYXQgdGhlIGVuZC4gTmV2ZXIgYFt0ZXh0XSh1cmwpYCwgd2hpY2ggaXMgdGhlIHNpbmdsZSB3b3JzdCB0aGluZyBtYXJrZG93bgogICBkb2VzIHRvIGEgdGVybWluYWwgcmVhZGVyLgoyLiBBIGhlYWRpbmcgaXMgdW5kZXJsaW5lZCAoYD1gIGZvciBIMSwgYC1gIGZvciBIMiksIG5vdCBwcmVmaXhlZCB3aXRoIGAjYC4KMy4gQSB0YWJsZSBnZXRzIGNvbHVtbnMgcGFkZGVkIHRvIHRoZWlyIHdpZGVzdCBjZWxsLCB1bmRlciBhIHJ1bGUuIEFuIHVucGFkZGVkCiAgIHBpcGUgdGFibGUgaXMgdGhlIG90aGVyIHRoaW5nIG5vIGFtb3VudCBvZiBjaGFyYWN0ZXItc3RyaXBwaW5nIGZpeGVzLgo0LiBBcnQgaXMgZW1pdHRlZCAqKnZlcmJhdGltKio6IG5ldmVyIHdyYXBwZWQsIG5ldmVyIGVzY2FwZWQsIG5ldmVyIGZlbmNlZC4gQQogICBjb25zdW1lciB0aGF0IGFza2VkIGZvciB0ZXh0IGFza2VkIGZvciB0aGUgcGljdHVyZSBhcyBpdCBpcy4KNS4gUHJvc2Ugd3JhcHMgYXQgNzIgcnVuZXMuIEEgd29yZCBsb25nZXIgdGhhbiB0aGF0IGlzIGxlZnQgYWxvbmUsIGJlY2F1c2UgYQogICByZWFsbSBwYXRoIGlzIHdvcnNlIGJyb2tlbiB0aGFuIHdpZGUuCgpgYGAKL3IvbW91bC9nYWxsZXJ5Oj9mbXQ9dHh0ICAgICAgICAgICAgICAgICB0aGUgaW5kZXgsIHBpcGVhYmxlCi9yL21vdWwvZ2FsbGVyeTpwaWVjZS9taWxsaXBlZGU/Zm10PXR4dCAgb25lIHBpZWNlLCBhcnQgYW5kIGFsbApgYGAKCmA/Zm10PWFuc2lgIGlzIGRlbGliZXJhdGVseSAqKmFic2VudCoqLiBDb2xvdXIgY2Fubm90IHJlYWNoIGdub3dlYjoKYHAvbnQvbWFya2Rvd24vc2FuaXRpemVgIHN0cmlwcyBjb250cm9sIGJ5dGVzIGFuZCByYXcgRVNDIGlzIGdhcmJhZ2UgaW4gSFRNTCwgc28KYSByZWFsbSBvZmZlcmluZyBpdCB3b3VsZCBoYW5kIGV2ZXJ5IHdlYiByZWFkZXIgYSBwYWdlIG9mIGVzY2FwZSBieXRlcy4gVGVybWluYWwKY29sb3VyIGlzIGBwL21vdWwvYXJ0YCdzIGBDYW52YXMuQU5TSWAsIGZvciBhIGNvbnN1bWVyIHRoYXQgYXNrZWQgZm9yIGl0IG92ZXIKc29tZXRoaW5nIG90aGVyIHRoYW4gZ25vd2ViLgoKIyMgV2hlcmUgdGhlIHRleHQgcmVuZGVyZXIgbGl2ZXMsIGFuZCB3aHkgaXQgaXMgaGVyZQoKYHRleHQuZ25vYCBob2xkcyBgZG9jYCwgYSBzbWFsbCBwbGFpbi10ZXh0IGRvY3VtZW50IGJ1aWxkZXIuIEl0IGlzIGEKKipwcm90b3R5cGUqKiwgZGVsaWJlcmF0ZWx5IGluIHRoaXMgcmVhbG0gcmF0aGVyIHRoYW4gaW4gYSBgcC9gIHBhY2thZ2UuCgpQb3J0aW5nIG9uZSByZWFsbSBpcyBub3QgZW5vdWdoIHRvIGtub3cgd2hhdCBhIHNoYXJlZCBkb2N1bWVudCBtb2RlbCBzaG91bGQgYmU7CnBvcnRpbmcgdGhlIGZpZnRoIHdpbGwgYmUuIFdoYXQgaXQgYWxyZWFkeSBwaW5zIGlzIHRoZSBsaXN0IG9mIGZpdmUgcnVsZXMgYWJvdmUsCndoaWNoIGlzIHRoZSBwYXJ0IHRoYXQgd2FzIGFjdHVhbGx5IHVua25vd24uIFdoZW4gYSBzZWNvbmQgcmVhbG0gbmVlZHMgaXQsIGl0CmdyYWR1YXRlcyB0byBgcC9tb3VsL2RvY2AgYW5kIHRoaXMgZmlsZSBiZWNvbWVzIGFuIGltcG9ydC4KCiMjIEFkZGluZyBhIHBpZWNlCgpgY2F0YWxvZygpYCBpbiBgY2F0YWxvZy5nbm9gLCBvbmUgc3RydWN0IGxpdGVyYWwuIFNldCBgRHJhd2AgdG8gYSBjbG9zdXJlIG92ZXIKdGhlIHNvdXJjZSByZWFsbSdzIGZ1bmN0aW9uIHdoZW4gdGhlIHJlYWxtIGlzIHB1YmxpYyBhbmQgdmVuZG9yZWQ7IGxlYXZlIGl0IG5pbAphbmQgdGhlIGdhbGxlcnkgd2lsbCBsaW5rIHRoZSBwaWVjZSBhbmQgc2F5IHdoeSBpdCBpcyBub3QgcmVuZGVyZWQuCgpUaGUgY2F0YWxvZyBpcyBidWlsdCBwZXIgY2FsbCByYXRoZXIgdGhhbiBoZWxkIGluIGEgcGFja2FnZS1sZXZlbCB2YXI6IGEgZnVuYwp2YWx1ZSBpcyBub3Qgc29tZXRoaW5nIHRvIHBlcnNpc3QsIGFuZCBhIHJlYWxtIHRoYXQgc3RvcmVzIG5vdGhpbmcgc2hvdWxkIG5vdCBiZQpwYXlpbmcgc3RvcmFnZSBmb3IgaXRzIG93biBpbmRleC4KCjwhLS0gQkVHSU4gR05PQ09OVFJBQ1RTIEZPT1RFUiAoZ2VuZXJhdGVkIGJ5IGBtYWtlIHJlYWRtZXNgOyBkbyBub3QgZWRpdCBiZWxvdykgLS0+CgotLS0KClBhcnQgb2YgKipbbW91bC9nbm8tY29udHJhY3RzXShodHRwczovL2dpdGh1Yi5jb20vbW91bC9nbm8tY29udHJhY3RzKSoqIOKAlCBtb3VsJ3MgdmVyc2lvbmVkIGduby5sYW5kIGNvbnRyYWN0cy4gU2VlIHRoZSByZXBvc2l0b3J5IGZvciB0aGUgZnVsbCBjYXRhbG9nLCBidWlsZC90ZXN0IHRvb2xpbmcsIGFuZCB1c2FnZS4KCioqRGVwZW5kZW5jeSBncmFwaDoqKgoKIVtnbm8ubGFuZC9yL21vdWwvZ2FsbGVyeS92MCBkZXBlbmRlbmN5IGdyYXBoXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW91bC9nbm8tY29udHJhY3RzL21haW4vX2Fzc2V0cy9nbm8ubGFuZC9yL21vdWwvZ2FsbGVyeS92MC9kZXBzLnBuZykKCj4g4pqg77iPICoqRGlzY2xhaW1lcjoqKiBwcm92aWRlZCBhcy1pcywgd2l0aG91dCB3YXJyYW50eTsgbm90IHNlY3VyaXR5LWF1ZGl0ZWQuIEZ1bGwgZGlzY2xhaW1lcjogW0RJU0NMQUlNRVJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VsL2duby1jb250cmFjdHMvYmxvYi9tYWluL0RJU0NMQUlNRVIubWQpLgoKPCEtLSBFTkQgR05PQ09OVFJBQ1RTIEZPT1RFUiAtLT4KGrEZCgtjYXRhbG9nLmdubxKhGXBhY2thZ2UgZ2FsbGVyeQoKaW1wb3J0ICgKCSJnbm8ubGFuZC9yL21vdWwvZGVtby9nbm9mYWNlL3YwIgoJImduby5sYW5kL3IvbW91bC9kZW1vL21pbGxpcGVkZS92MCIKCSJnbm8ubGFuZC9yL21vdWwvc2FwaW4vdjAiCikKCi8vIHBpZWNlIGlzIG9uZSBlbnRyeSBpbiB0aGUgaW5kZXguCi8vCi8vIFRoZSBnYWxsZXJ5IHN0b3JlcyBubyBhcnQuIEV2ZXJ5IHBpZWNlIGxpdmVzIGluIHNvbWVib2R5J3MgcmVhbG0gYW5kIHRoaXMgaXMKLy8gYSBwb2ludGVyIHRvIGl0LCB3aGljaCBpcyB3aHkgdGhlcmUgaXMgbm8gcGFja2FnZS1sZXZlbCBzdGF0ZSBhbnl3aGVyZSBpbgovLyB0aGlzIHJlYWxtIGFuZCBub3RoaW5nIGhlcmUgc3Vydml2ZXMgb3IgbmVlZHMgdG8gc3Vydml2ZSBhIHJlZGVwbG95Lgp0eXBlIHBpZWNlIHN0cnVjdCB7CglTbHVnICAgIHN0cmluZwoJVGl0bGUgICBzdHJpbmcKCUF1dGhvciAgc3RyaW5nCglPcmlnaW4gIHN0cmluZyAvLyByZWFsbSBwYXRoLCB3aXRob3V0IHRoZSBnbm8ubGFuZCBwcmVmaXgKCUxpY2Vuc2Ugc3RyaW5nCglOb3RlICAgIHN0cmluZwoKCS8vIERyYXcgcmVuZGVycyB0aGUgcGllY2UgbGl2ZSwgYnkgaW1wb3J0aW5nIGl0cyBzb3VyY2UuIEl0IGlzIG5pbCB3aGVuIHRoZQoJLy8gc291cmNlIGNhbm5vdCBiZSBpbXBvcnRlZCwgd2hpY2ggaXMgdGhlIGhvbmVzdCBoYWxmIG9mIGEgY3VyYXRlZCBpbmRleDoKCS8vIGEgcHJpdmF0ZSByZWFsbSBvciBhIHBhY2thZ2UgdGhpcyByZXBvIGhhcyBub3QgdmVuZG9yZWQgY2FuIGJlIHBvaW50ZWQKCS8vIGF0IGJ1dCBub3Qgc2hvd24uCglEcmF3IGZ1bmMoKSBzdHJpbmcKfQoKLy8gTGl2ZSByZXBvcnRzIHdoZXRoZXIgdGhpcyByZWFsbSBjYW4gcmVuZGVyIHRoZSBwaWVjZSBpdHNlbGYuCmZ1bmMgKHAgcGllY2UpIExpdmUoKSBib29sIHsgcmV0dXJuIHAuRHJhdyAhPSBuaWwgfQoKLy8gY2F0YWxvZyBpcyBidWlsdCBwZXIgY2FsbCByYXRoZXIgdGhhbiBoZWxkIGluIGEgcGFja2FnZS1sZXZlbCB2YXI6IGEgZnVuYwovLyB2YWx1ZSBpcyBub3Qgc29tZXRoaW5nIHRvIHBlcnNpc3QsIGFuZCBhIHJlYWxtIHRoYXQgc3RvcmVzIG5vdGhpbmcgc2hvdWxkCi8vIG5vdCBiZSBwYXlpbmcgc3RvcmFnZSBmb3IgaXRzIG93biBpbmRleC4KZnVuYyBjYXRhbG9nKCkgW11waWVjZSB7CglyZXR1cm4gW11waWVjZXsKCQl7CgkJCVNsdWc6ICAgICJnbm9mYWNlIiwKCQkJVGl0bGU6ICAgImdub2ZhY2UiLAoJCQlBdXRob3I6ICAibW91bCIsCgkJCU9yaWdpbjogICJyL21vdWwvZGVtby9nbm9mYWNlL3YwIiwKCQkJTGljZW5zZTogInNlZSB0aGUgc291cmNlIHJlYWxtIiwKCQkJTm90ZTogICAgIkEgZmFjZSBnZW5lcmF0ZWQgZnJvbSBhIHNlZWQuIEV2ZXJ5IHNlZWQgaXMgYSBkaWZmZXJlbnQgZmFjZSwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgc3RvcmVkLiIsCgkJCURyYXc6ICAgIGZ1bmMoKSBzdHJpbmcgeyByZXR1cm4gZ25vZmFjZS5EcmF3KDQyKSB9LAoJCX0sCgkJewoJCQlTbHVnOiAgICAibWlsbGlwZWRlIiwKCQkJVGl0bGU6ICAgIm1pbGxpcGVkZSIsCgkJCUF1dGhvcjogICJtb3VsIiwKCQkJT3JpZ2luOiAgInIvbW91bC9kZW1vL21pbGxpcGVkZS92MCIsCgkJCUxpY2Vuc2U6ICJzZWUgdGhlIHNvdXJjZSByZWFsbSIsCgkJCU5vdGU6ICAgICJBIG1pbGxpcGVkZSBvZiBhbnkgbGVuZ3RoLiBUaGUgb2xkZXN0IHBpZWNlIGhlcmUsIGFuZCBzdGlsbCB0aGUgb25lIHRoYXQgYmVzdCBleHBsYWlucyB3aHkgQVNDSUkgaXMgdGhlIGNoZWFwZXN0IHBpY3R1cmUgdGhlcmUgaXMuIiwKCQkJRHJhdzogICAgZnVuYygpIHN0cmluZyB7IHJldHVybiBtaWxsaXBlZGUuRHJhdyg4KSB9LAoJCX0sCgkJewoJCQlTbHVnOiAgICAic2FwaW4iLAoJCQlUaXRsZTogICAic2FwaW4iLAoJCQlBdXRob3I6ICAibW91bCIsCgkJCU9yaWdpbjogICJyL21vdWwvc2FwaW4vdjAiLAoJCQlMaWNlbnNlOiAic2VlIHRoZSBzb3VyY2UgcmVhbG0iLAoJCQlOb3RlOiAgICAiQSBmaXIgdHJlZSwgc2l6ZWQgb24gcmVxdWVzdC4iLAoJCQlEcmF3OiAgICBmdW5jKCkgc3RyaW5nIHsgcmV0dXJuIHNhcGluLlNhcGluKDYpIH0sCgkJfSwKCQl7CgkJCVNsdWc6ICAgICJzZXR0bGVyMjUiLAoJCQlUaXRsZTogICAiU2V0dGxlciAjMjUiLAoJCQlBdXRob3I6ICAidGhlIFNldHRsZXJzIiwKCQkJT3JpZ2luOiAgInIvZzE3a2hxcHVrZWVzNDIzN2R0bjNhc3R6YXBtcDQ2MnZqaHN6NnN0NC9zZXR0bGVycy9uZnQiLAoJCQlMaWNlbnNlOiAiQ0MwIDEuMCIsCgkJCU5vdGU6ICAgICJtb3VsJ3MsIHNvdWxib3VuZCwgbWludGVkIGF0IGJsb2NrIDQwOTI0Mi4gQSAzMngzMiBpbmRleGVkIHNwcml0ZSB3aXRoIDIwIGNvbG91cnMsIHdoaWNoIGlzIHdoYXQgbWFkZSBpdCB0aGUgdGVzdCBjYXNlIGZvciBwL21vdWwvYXJ0OiBhIGx1bWluYW5jZSByYW1wIHJlc29sdmVzIHRob3NlIDIwIHRvIDksIGFuZCBrZXlpbmcgb24gdGhlIHBhbGV0dGUgaW5kZXgga2VlcHMgYWxsIDIwLiIsCgkJfSwKCQl7CgkJCVNsdWc6ICAgICJhc2NpaWFydCIsCgkJCVRpdGxlOiAgICJhc2NpaWFydCIsCgkJCUF1dGhvcjogICJtb3VsIiwKCQkJT3JpZ2luOiAgInIvbW91bC94L2RhaWx5L2FzY2lpYXJ0L3YxIiwKCQkJTGljZW5zZTogInNlZSB0aGUgc291cmNlIHJlYWxtIiwKCQkJTm90ZTogICAgIlBhdHRlcm5zIGZyb20gc2hvcnQgZGV0ZXJtaW5pc3RpYyBhbGdvcml0aG1zLCBwbHVzIGV2ZXJ5b25lJ3MgZ2VuZXJhdGlvbnMuIERlY2xhcmVkIHByaXZhdGUgPSB0cnVlLCBzbyBpdCBjYW4gYmUgbGlua2VkIGJ1dCBuZXZlciBpbXBvcnRlZDogdGhhdCBpcyB0aGUgY29uc3RyYWludCwgbm90IGFuIG9taXNzaW9uLiIsCgkJfSwKCQl7CgkJCVNsdWc6ICAgICJwaXhlbGNhbnZhcyIsCgkJCVRpdGxlOiAgICJwaXhlbGNhbnZhcyIsCgkJCUF1dGhvcjogICJtb3VsIiwKCQkJT3JpZ2luOiAgInIvbW91bC94L2RhaWx5L3BpeGVsY2FudmFzL3YwIiwKCQkJTGljZW5zZTogInNlZSB0aGUgc291cmNlIHJlYWxtIiwKCQkJTm90ZTogICAgIkEgc2hhcmVkIGdyaWQgYW55b25lIGNhbiBwYWludCBvbmUgcGl4ZWwgb2YuIiwKCQl9LAoJfQp9CgpmdW5jIGZpbmQoc2x1ZyBzdHJpbmcpIChwaWVjZSwgYm9vbCkgewoJZm9yIF8sIHAgOj0gcmFuZ2UgY2F0YWxvZygpIHsKCQlpZiBwLlNsdWcgPT0gc2x1ZyB7CgkJCXJldHVybiBwLCB0cnVlCgkJfQoJfQoJcmV0dXJuIHBpZWNle30sIGZhbHNlCn0KGqIoCgtnYWxsZXJ5LmdubxKSKC8vIFBhY2thZ2UgZ2FsbGVyeSBpcyBhIGN1cmF0ZWQgaW5kZXggb2YgYXJ0IG9uIGduby5sYW5kLCBpbiB3aGljaGV2ZXIgZm9ybSB0aGUKLy8gcmVhZGVyIGNhbiBhY3R1YWxseSBjb25zdW1lLgovLwovLyBJdCBzdG9yZXMgbm8gYXJ0LiBFdmVyeSBwaWVjZSBsaXZlcyBpbiBzb21lYm9keSBlbHNlJ3MgcmVhbG07IHRoaXMgb25lCi8vIHJlbmRlcnMgdGhlIG9uZXMgaXQgY2FuIGltcG9ydCBhbmQgcG9pbnRzIGF0IHRoZSBvbmVzIGl0IGNhbm5vdC4KLy8KLy8gIyBUaGUgdGFyZ2V0IGlzIGEgcGFyYW1ldGVyCi8vCi8vIEV2ZXJ5IHBhZ2UgYW5zd2VycyB0byA/Zm10PXR4dCBhcyB3ZWxsIGFzIHRoZSBkZWZhdWx0IG1hcmtkb3duLiBUaGUgdGV4dAovLyB0YXJnZXQgaXMgbm90IG1hcmtkb3duIHdpdGggdGhlIGNoYXJhY3RlcnMgZGVsZXRlZDogbGlua3MgYmVjb21lIG51bWJlcmVkCi8vIGZvb3Rub3RlcywgaGVhZGluZ3MgZ2V0IHVuZGVybGluZXMgaW5zdGVhZCBvZiBhIGxlYWRpbmcgJyMnLCBhbmQgYXJ0IGlzCi8vIGVtaXR0ZWQgdmVyYmF0aW0gcmF0aGVyIHRoYW4gZmVuY2VkLiBUaGUgcmVzdWx0IGlzIG1lYW50IHRvIGJlIHBpcGVkLCBvciByZWFkCi8vIGJ5IGFueXRoaW5nIHRoYXQgaXMgbm90IGEgYnJvd3Nlci4KLy8KLy8gP2ZtdD1hbnNpIGlzIGRlbGliZXJhdGVseSBhYnNlbnQuIENvbG91ciBjYW5ub3QgcmVhY2ggZ25vd2ViLCBzbyBhIHJlYWxtIHRoYXQKLy8gb2ZmZXJlZCBpdCB3b3VsZCBiZSBoYW5kaW5nIGV2ZXJ5IHdlYiByZWFkZXIgYSBwYWdlIG9mIGVzY2FwZSBieXRlcy4gVGVybWluYWwKLy8gY29sb3VyIGlzIHAvbW91bC9hcnQncyBDYW52YXMuQU5TSSwgZm9yIGEgY29uc3VtZXIgdGhhdCBhc2tlZCBmb3IgaXQgb3ZlcgovLyBzb21ldGhpbmcgb3RoZXIgdGhhbiBnbm93ZWIuCnBhY2thZ2UgZ2FsbGVyeQoKaW1wb3J0ICgKCSJzdHJpbmdzIgoKCSJnbm8ubGFuZC9wL21vdWwvYXJ0L3YwIgoJImduby5sYW5kL3AvbW91bC9raXQvdWkvdjAiCgkiZ25vLmxhbmQvcC9tb3VsL21kL3YwIgoJImduby5sYW5kL3AvbW91bC9yZWFsbXBhdGgvdjAiCikKCi8vIHJlYWxtUGF0aCBpcyB0aGlzIHJlYWxtJ3Mgb3duIHBhdGgsIHZlcnNpb24gaW5jbHVkZWQuCi8vCi8vIGdub3dlYiBkb2VzIE5PVCByZXNvbHZlIGFuIHVudmVyc2lvbmVkIHJlYWxtIHBhdGggdG8gaXRzIGxhdGVzdCB2ZXJzaW9uOiBpdAovLyBzZXJ2ZXMgL3IvbW91bC9nYWxsZXJ5IGFzIGEgRElSRUNUT1JZIElOREVYIGFuZCBkcm9wcyB0aGUgOnBhdGggYW5kID9xdWVyeQovLyBlbnRpcmVseS4gTWVhc3VyZWQgMjAyNi0wOS0zMCBvbiBnbm9sYW5kLTEsIHdoZXJlIC9yL21vdWwvb3V0Zm10Oj9mbXQ9anNvbgovLyByZW5kZXJzIHRoZSBpbmRleCBwYWdlIHdoaWxlIC9yL21vdWwvb3V0Zm10L3YwOj9mbXQ9anNvbiByZXR1cm5zIHRoZSBKU09OLgovLyBTbyBldmVyeSBzZWxmLWxpbmsgaGFzIHRvIGNhcnJ5IHRoZSB2ZXJzaW9uLCBhbmQgc3RhdGluZyBpdCBvbmNlIGlzIHdoYXQKLy8ga2VlcHMgdGhlIG5leHQgb25lIGZyb20gYmVpbmcgd3JpdHRlbiB3aXRob3V0IGl0LiBPbmx5IHIvbW91bC9ob21lIGFuZAovLyByL21vdWwvYmxvZyBhcmUgZ2VudWluZWx5IHVudmVyc2lvbmVkIHBhdGhzLgpjb25zdCByZWFsbVBhdGggPSAiL3IvbW91bC9nYWxsZXJ5L3YwIgoKZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglyZXEgOj0gcmVhbG1wYXRoLlBhcnNlKHBhdGgpCgl0ZXh0IDo9IHJlcS5RdWVyeS5HZXQoImZtdCIpID09ICJ0eHQiCgoJaWYgc2x1ZyA6PSBzdHJpbmdzLlRyaW1QcmVmaXgocmVxLlBhdGgsICJwaWVjZS8iKTsgc2x1ZyAhPSByZXEuUGF0aCAmJiBzbHVnICE9ICIiIHsKCQlyZXR1cm4gcmVuZGVyUGllY2Uoc2x1ZywgdGV4dCkKCX0KCXJldHVybiByZW5kZXJJbmRleCh0ZXh0KQp9CgovLyBiYW5uZXIgaXMgZHJhd24gd2l0aCBwL21vdWwvYXJ0IHJhdGhlciB0aGFuIHR5cGVkIGFzIGEgc3RyaW5nIGxpdGVyYWwsCi8vIGJlY2F1c2UgYSBnYWxsZXJ5IHRoYXQgaGFuZC13cml0ZXMgaXRzIG93biBBU0NJSSB3b3VsZCBiZSBhIHBvb3IgYWR2ZXJ0IGZvcgovLyB0aGUgbGlicmFyeSBpdCBleGlzdHMgdG8gc2hvdy4KZnVuYyBiYW5uZXIoKSBzdHJpbmcgewoJYyA6PSBhcnQuTmV3Q2FudmFzKDIyLCAyKQoJYy5Xcml0ZSgwLCAwLCAibW91bCdzIGdhbGxlcnkiKQoJYy5Xcml0ZSgwLCAxLCAiYXJ0IG9uIGduby5sYW5kIikKCXJldHVybiBjLkZyYW1lKCIiLCBhcnQuUm91bmQpLlRleHQoKQp9CgpmdW5jIHJlbmRlckluZGV4KHRleHQgYm9vbCkgc3RyaW5nIHsKCWxpdmUsIGxpbmtlZCA6PSAwLCAwCglmb3IgXywgcCA6PSByYW5nZSBjYXRhbG9nKCkgewoJCWlmIHAuTGl2ZSgpIHsKCQkJbGl2ZSsrCgkJfSBlbHNlIHsKCQkJbGlua2VkKysKCQl9Cgl9CgoJaWYgdGV4dCB7CgkJdmFyIGQgZG9jCgkJZC5BcnQoYmFubmVyKCkpCgkJZC5QYXJhKCJBcnQgb24gZ25vLmxhbmQsIHJlbmRlcmVkIHJhdGhlciB0aGFuIGRlc2NyaWJlZC4gTm90aGluZyBoZXJlIGlzIHN0b3JlZCBpbiB0aGlzIHJlYWxtOiBldmVyeSBwaWVjZSBsaXZlcyB3aGVyZSBpdHMgYXV0aG9yIHB1dCBpdC4iKQoJCXJvd3MgOj0gW11bXXN0cmluZ3t9CgkJZm9yIF8sIHAgOj0gcmFuZ2UgY2F0YWxvZygpIHsKCQkJc2hvd24gOj0gImxpbmtlZCIKCQkJaWYgcC5MaXZlKCkgewoJCQkJc2hvd24gPSAicmVuZGVyZWQgaGVyZSIKCQkJfQoJCQlyb3dzID0gYXBwZW5kKHJvd3MsIFtdc3RyaW5ne3AuU2x1ZywgcC5BdXRob3IsIHAuT3JpZ2luLCBzaG93bn0pCgkJfQoJCWQuVGFibGUoW11zdHJpbmd7IlBpZWNlIiwgIkF1dGhvciIsICJXaGVyZSIsICJTaG93biJ9LCByb3dzKQoJCWQuUGFyYShwbHVyYWwobGl2ZSwgInBpZWNlIikgKyAiIHJlbmRlcmVkIGZyb20gc291cmNlLCAiICsgcGx1cmFsKGxpbmtlZCwgInBpZWNlIikgKyAiIGxpbmtlZC4iKQoJCWQuUGFyYSgiT3BlbiBvbmUgYXQgIiArIHJlYWxtUGF0aCArICI6cGllY2UvPHNsdWc+LCB3aXRoID9mbXQ9dHh0IGZvciB0aGlzIGZvcm0uIikKCQlyZXR1cm4gZC5TdHJpbmcoKQoJfQoKCW91dCA6PSBtZC5IMSgibW91bCdzIGdhbGxlcnkiKQoJb3V0ICs9IG1kLkNvZGVCbG9jayhiYW5uZXIoKSkKCW91dCArPSAiXG4iCglvdXQgKz0gIkFydCBvbiBnbm8ubGFuZCwgcmVuZGVyZWQgcmF0aGVyIHRoYW4gZGVzY3JpYmVkLiBOb3RoaW5nIGhlcmUgaXMgc3RvcmVkIGluIHRoaXMgcmVhbG06IGV2ZXJ5IHBpZWNlIGxpdmVzIHdoZXJlIGl0cyBhdXRob3IgcHV0IGl0LlxuXG4iCgoJdCA6PSB1aS5OZXdUYWJsZSgiUGllY2UiLCAiQXV0aG9yIiwgIldoZXJlIiwgIlNob3duIikKCWZvciBfLCBwIDo9IHJhbmdlIGNhdGFsb2coKSB7CgkJc2hvd24gOj0gImxpbmtlZCIKCQlpZiBwLkxpdmUoKSB7CgkJCXNob3duID0gInJlbmRlcmVkIGhlcmUiCgkJfQoJCXQuUm93KAoJCQltZC5MaW5rKHAuVGl0bGUsIHJlYWxtUGF0aCsiOnBpZWNlLyIrcC5TbHVnKSwKCQkJdWkuSW5saW5lKHAuQXV0aG9yKSwKCQkJbWQuSW5saW5lQ29kZShwLk9yaWdpbiksCgkJCXNob3duLAoJCSkKCX0KCW91dCArPSB0Lk9yRW1wdHkoIm5vdGhpbmcgaW5kZXhlZCB5ZXQiKQoJb3V0ICs9ICJcbiIgKyBtZC5JdGFsaWMocGx1cmFsKGxpdmUsICJwaWVjZSIpKyIgcmVuZGVyZWQgZnJvbSBzb3VyY2UsICIrcGx1cmFsKGxpbmtlZCwgInBpZWNlIikrIiBsaW5rZWQuIikgKyAiXG5cbiIKCW91dCArPSBtZC5JdGFsaWMoIkV2ZXJ5IHBhZ2UgaGVyZSBhbHNvIGFuc3dlcnMgdG8gYD9mbXQ9dHh0YC4iKSArICJcbiIKCXJldHVybiBvdXQKfQoKZnVuYyByZW5kZXJQaWVjZShzbHVnIHN0cmluZywgdGV4dCBib29sKSBzdHJpbmcgewoJcCwgb2sgOj0gZmluZChzbHVnKQoJaWYgIW9rIHsKCQlpZiB0ZXh0IHsKCQkJcmV0dXJuICJObyBwaWVjZSBjYWxsZWQgIiArIHNsdWcgKyAiLlxuIgoJCX0KCQlyZXR1cm4gbWQuSDEoIk5vdCBmb3VuZCIpICsgdWkuRW1wdHkoIm5vIHBpZWNlIGNhbGxlZCAiK3VpLklubGluZShzbHVnKSkKCX0KCglpZiB0ZXh0IHsKCQl2YXIgZCBkb2MKCQlkLkgxKHAuVGl0bGUpCgkJaWYgcC5MaXZlKCkgewoJCQlkLkFydChwLkRyYXcoKSkKCQl9IGVsc2UgewoJCQlkLlBhcmEoIk5vdCByZW5kZXJlZCBoZXJlOiB0aGlzIHJlYWxtIGNhbm5vdCBpbXBvcnQgdGhlIHNvdXJjZS4iKQoJCX0KCQlkLlBhcmEocC5Ob3RlKQoJCWQuRmllbGQoIkF1dGhvciIsIHAuQXV0aG9yKQoJCWQuRmllbGQoIkxpY2Vuc2UiLCBwLkxpY2Vuc2UpCgkJZC5GaWVsZCgiU291cmNlIiwgcC5PcmlnaW4pCgkJZC5MaW5rKCJ0aGUgc291cmNlIHJlYWxtIiwgImh0dHBzOi8vZ25vLmxhbmQvIitwLk9yaWdpbikKCQlyZXR1cm4gZC5TdHJpbmcoKQoJfQoKCW91dCA6PSBtZC5IMShwLlRpdGxlKQoJaWYgcC5MaXZlKCkgewoJCW91dCArPSBtZC5Db2RlQmxvY2socC5EcmF3KCkpCgl9IGVsc2UgewoJCW91dCArPSB1aS5FbXB0eSgibm90IHJlbmRlcmVkIGhlcmU6IHRoaXMgcmVhbG0gY2Fubm90IGltcG9ydCB0aGUgc291cmNlIikgKyAiXG4iCgl9CglvdXQgKz0gIlxuIiArIHVpLklubGluZShwLk5vdGUpICsgIlxuXG4iCgoJdCA6PSB1aS5OZXdUYWJsZSgiRmllbGQiLCAiVmFsdWUiKQoJdC5Sb3coIkF1dGhvciIsIHVpLkNlbGwocC5BdXRob3IpKQoJdC5Sb3coIkxpY2Vuc2UiLCB1aS5DZWxsKHAuTGljZW5zZSkpCgl0LlJvdygiU291cmNlIiwgbWQuTGluayhwLk9yaWdpbiwgIi8iK3AuT3JpZ2luKSkKCW91dCArPSB0LlN0cmluZygpCgoJb3V0ICs9ICJcbiIgKyBtZC5MaW5rKCI8IHRoZSBnYWxsZXJ5IiwgcmVhbG1QYXRoKSArICJcbiIKCXJldHVybiBvdXQKfQoKZnVuYyBwbHVyYWwobiBpbnQsIHdvcmQgc3RyaW5nKSBzdHJpbmcgewoJcyA6PSBpdG9hKG4pICsgIiAiICsgd29yZAoJaWYgbiAhPSAxIHsKCQlzICs9ICJzIgoJfQoJcmV0dXJuIHMKfQoKZnVuYyBpdG9hKHYgaW50KSBzdHJpbmcgewoJaWYgdiA9PSAwIHsKCQlyZXR1cm4gIjAiCgl9Cgl2YXIgYnVmIFsyMF1ieXRlCglpIDo9IGxlbihidWYpCglmb3IgdiA+IDAgewoJCWktLQoJCWJ1ZltpXSA9IGJ5dGUoJzAnICsgdiUxMCkKCQl2IC89IDEwCgl9CglyZXR1cm4gc3RyaW5nKGJ1ZltpOl0pCn0KGuUjChBnYWxsZXJ5X3Rlc3QuZ25vEtAjcGFja2FnZSBnYWxsZXJ5CgppbXBvcnQgKAoJInN0cmluZ3MiCgkidGVzdGluZyIKCgkiZ25vLmxhbmQvcC9udC91YXNzZXJ0L3YwIgopCgpmdW5jIFRlc3RSZW5kZXJJbmRleE1hcmtkb3duKHQgKnRlc3RpbmcuVCkgewoJb3V0IDo9IFJlbmRlcigiIikKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIiMgbW91bCdzIGdhbGxlcnkiKSwgImhlYWRpbmciKQoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMob3V0LCAiYGBgIiksICJ0aGUgYmFubmVyIGlzIGZlbmNlZCBpbiBtYXJrZG93biIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJ8IFBpZWNlIHwiKSwgImEgcmVhbCBtYXJrZG93biB0YWJsZSIpCgkvLyBUaGUgcGF0aCBpcyBzcGVsbGVkIG91dCByYXRoZXIgdGhhbiB0YWtlbiBmcm9tIHJlYWxtUGF0aDogYSB0ZXN0IHRoYXQKCS8vIHJlYWRzIHRoZSBzYW1lIGNvbnN0YW50IHRoZSBjb2RlIGRvZXMgd291bGQgcGFzcyB3aXRoIHRoZSB2ZXJzaW9uCgkvLyBkcm9wcGVkLCB3aGljaCBpcyB0aGUgZXhhY3QgcmVncmVzc2lvbiB0aGlzIHBpbnMuCglmb3IgXywgcCA6PSByYW5nZSBjYXRhbG9nKCkgewoJCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIi9yL21vdWwvZ2FsbGVyeS92MDpwaWVjZS8iK3AuU2x1ZyksIHAuU2x1ZysiIGlzIGxpbmtlZCIpCgl9Cn0KCi8vIFRoZSB0d28gdGFyZ2V0cyBhcmUgZGlmZmVyZW50IGRvY3VtZW50cywgbm90IG9uZSB3aXRoIGNoYXJhY3RlcnMgZGVsZXRlZC4KZnVuYyBUZXN0VGV4dFRhcmdldFN0cmlwc01hcmtkb3duQW5kRGVmZXJzTGlua3ModCAqdGVzdGluZy5UKSB7CglvdXQgOj0gUmVuZGVyKCJwaWVjZS9taWxsaXBlZGU/Zm10PXR4dCIpCgoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgImBgYCIpLCAibm8gY29kZSBmZW5jZXMiKQoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIioqIiksICJubyBib2xkIG1hcmtlcnMiKQoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIl0oIiksICJubyBpbmxpbmUgbGluayBzeW50YXgiKQoJdWFzc2VydC5GYWxzZSh0LCBzdHJpbmdzLkNvbnRhaW5zKG91dCwgIlxuIyIpLCAibm8gaGVhZGluZyBoYXNoZXMiKQoKCS8vIEEgaGVhZGluZyBpcyB1bmRlcmxpbmVkIGluc3RlYWQuCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJtaWxsaXBlZGVcbj09PT09PT09PSIpLCAidW5kZXJsaW5lZCBoZWFkaW5nIikKCS8vIEFuZCB0aGUgVVJMIGlzIGEgbnVtYmVyZWQgZm9vdG5vdGUsIG5vdCBpbmxpbmUgbm9pc2UuCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJ0aGUgc291cmNlIHJlYWxtIFsxXSIpLCAiaW5saW5lIG1hcmtlciIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJcbkxpbmtzOlxuICBbMV0gaHR0cHM6Ly9nbm8ubGFuZC9yL21vdWwvZGVtby9taWxsaXBlZGUvdjAiKSwgImZvb3Rub3RlIGJsb2NrIikKfQoKZnVuYyBUZXN0VGV4dFRhYmxlQ29sdW1uc0xpbmVVcCh0ICp0ZXN0aW5nLlQpIHsKCW91dCA6PSBSZW5kZXIoIj9mbXQ9dHh0IikKCXZhciBoZWFkZXIsIHJ1bGUgc3RyaW5nCglmb3IgXywgbGluZSA6PSByYW5nZSBzdHJpbmdzLlNwbGl0KG91dCwgIlxuIikgewoJCWlmIHN0cmluZ3MuSGFzUHJlZml4KGxpbmUsICIgIFBpZWNlICIpIHsKCQkJaGVhZGVyID0gbGluZQoJCX0KCQlpZiBzdHJpbmdzLkhhc1ByZWZpeChsaW5lLCAiICAtLS0iKSB7CgkJCXJ1bGUgPSBsaW5lCgkJfQoJfQoJdWFzc2VydC5UcnVlKHQsIGhlYWRlciAhPSAiIiwgImZvdW5kIHRoZSBoZWFkZXIiKQoJdWFzc2VydC5UcnVlKHQsIHJ1bGUgIT0gIiIsICJmb3VuZCB0aGUgcnVsZSIpCgoJLy8gRXZlcnkgY29sdW1uIGJvdW5kYXJ5IGluIHRoZSBydWxlIGlzIGEgcGFpciBvZiBzcGFjZXMgaW4gdGhlIGhlYWRlciBhdAoJLy8gdGhlIHNhbWUgcnVuZSBvZmZzZXQuIFRoYXQgaXMgdGhlIHByb3BlcnR5IGFuIHVucGFkZGVkIHBpcGUgdGFibGUgZG9lcwoJLy8gbm90IGhhdmUsIGFuZCB0aGUgcmVhc29uIHRoZSB0ZXh0IHRhcmdldCBoYXMgaXRzIG93biB0YWJsZSBhdCBhbGwuCgl1YXNzZXJ0LkVxdWFsKHQsIGd1dHRlcnMocnVsZSksIGd1dHRlcnMoaGVhZGVyKSwgImNvbHVtbnMgc3RhcnQgYXQgdGhlIHNhbWUgb2Zmc2V0cyIpCn0KCi8vIGd1dHRlcnMgcmV0dXJucyB0aGUgcnVuZSBvZmZzZXRzIGF0IHdoaWNoIGEgY29sdW1uIHN0YXJ0czogYSBub24tc3BhY2UKLy8gcHJlY2VkZWQgYnkgYXQgbGVhc3QgdHdvIHNwYWNlcy4gTWVhc3VyaW5nIHdoZXJlIHRoZSBQQURESU5HIHN0YXJ0cyBpbnN0ZWFkCi8vIHdvdWxkIGNvbXBhcmUgIlBpZWNlIiBhZ2FpbnN0IGVsZXZlbiBkYXNoZXMgYW5kIHJlcG9ydCBhIGRpZmZlcmVuY2UgdGhhdCBpcwovLyBub3Qgb25lLgpmdW5jIGd1dHRlcnMocyBzdHJpbmcpIHN0cmluZyB7CglyIDo9IFtdcnVuZShzKQoJb3V0IDo9ICIiCglmb3IgaSA6PSAyOyBpIDwgbGVuKHIpOyBpKysgewoJCWlmIHJbaV0gIT0gJyAnICYmIHJbaS0xXSA9PSAnICcgJiYgcltpLTJdID09ICcgJyB7CgkJCW91dCArPSBpdG9hKGkpICsgIiwiCgkJfQoJfQoJcmV0dXJuIG91dAp9CgpmdW5jIFRlc3RBcnRJc05ldmVyRXNjYXBlZE9yV3JhcHBlZCh0ICp0ZXN0aW5nLlQpIHsKCS8vIFRoZSBtaWxsaXBlZGUgaXMgYm94LWRyYXdpbmcgYW5kIHBhcmVudGhlc2VzLiBBIHRleHQgdGFyZ2V0IHRoYXQgcmFuIGl0CgkvLyB0aHJvdWdoIGFuIGVzY2FwZXIgb3IgYSB3cmFwcGVyIHdvdWxkIHJ1aW4gaXQsIGFuZCBpdCB3b3VsZCBzdGlsbCBsb29rCgkvLyBsaWtlIGEgcGljdHVyZSwgd2hpY2ggaXMgd2hhdCBtYWtlcyB0aGlzIHdvcnRoIHBpbm5pbmcuCglvdXQgOj0gUmVuZGVyKCJwaWVjZS9taWxsaXBlZGU/Zm10PXR4dCIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICLilZrilZAo4paI4paI4paIKeKVkOKVnSIpLCAiYXJ0IHN1cnZpdmVzIHZlcmJhdGltIikKCXVhc3NlcnQuRmFsc2UodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJcXCgiKSwgIm5vIGVzY2FwaW5nIikKfQoKZnVuYyBUZXN0VW5rbm93blBpZWNlKHQgKnRlc3RpbmcuVCkgewoJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoUmVuZGVyKCJwaWVjZS9ub3BlIiksICJubyBwaWVjZSBjYWxsZWQgbm9wZSIpLCAibWFya2Rvd24gNDA0IikKCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKFJlbmRlcigicGllY2Uvbm9wZT9mbXQ9dHh0IiksICJObyBwaWVjZSBjYWxsZWQgbm9wZS4iKSwgInRleHQgNDA0IikKCS8vIEFuIGVtcHR5IHNsdWcgaXMgdGhlIGluZGV4LCBub3QgYSA0MDQuCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhSZW5kZXIoInBpZWNlLyIpLCAiIyBtb3VsJ3MgZ2FsbGVyeSIpLCAiZW1wdHkgc2x1ZyBmYWxscyBiYWNrIHRvIHRoZSBpbmRleCIpCn0KCmZ1bmMgVGVzdExpbmtlZFBpZWNlc1NheVdoeVRoZXlBcmVOb3RSZW5kZXJlZCh0ICp0ZXN0aW5nLlQpIHsKCXAsIG9rIDo9IGZpbmQoImFzY2lpYXJ0IikKCXVhc3NlcnQuVHJ1ZSh0LCBvaywgImZvdW5kIikKCXVhc3NlcnQuRmFsc2UodCwgcC5MaXZlKCksICJhc2NpaWFydCBpcyBwcml2YXRlID0gdHJ1ZSwgc28gaXQgY2Fubm90IGJlIGltcG9ydGVkIikKCglvdXQgOj0gUmVuZGVyKCJwaWVjZS9hc2NpaWFydCIpCgl1YXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhvdXQsICJjYW5ub3QgaW1wb3J0IHRoZSBzb3VyY2UiKSwgInNheXMgc28gcmF0aGVyIHRoYW4gc2hvd2luZyBub3RoaW5nIikKfQoKZnVuYyBUZXN0RXZlcnlQaWVjZVJlbmRlcnModCAqdGVzdGluZy5UKSB7Cglmb3IgXywgcCA6PSByYW5nZSBjYXRhbG9nKCkgewoJCW91dCA6PSBSZW5kZXIoInBpZWNlLyIgKyBwLlNsdWcpCgkJdWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMob3V0LCBwLlRpdGxlKSwgcC5TbHVnKyIgbWFya2Rvd24iKQoJCXVhc3NlcnQuVHJ1ZSh0LCBsZW4oUmVuZGVyKCJwaWVjZS8iK3AuU2x1ZysiP2ZtdD10eHQiKSkgPiAwLCBwLlNsdWcrIiB0ZXh0IikKCX0KfQoKZnVuYyBUZXN0V3JhcEtlZXBzTG9uZ1dvcmRzSW50YWN0KHQgKnRlc3RpbmcuVCkgewoJbG9uZyA6PSAic2VlIGduby5sYW5kL3IvZzE3a2hxcHVrZWVzNDIzN2R0bjNhc3R6YXBtcDQ2MnZqaHN6NnN0NC9zZXR0bGVycy9uZnQgbm93IgoJZ290IDo9IHdyYXAobG9uZywgMjApCgkvLyBBIHBhdGggaXMgd29yc2UgYnJva2VuIHRoYW4gd2lkZSwgc28gaXQgb3ZlcmZsb3dzIHJhdGhlciB0aGFuIHNwbGl0dGluZy4KCXVhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKGdvdCwgImduby5sYW5kL3IvZzE3a2hxcHVrZWVzNDIzN2R0bjNhc3R6YXBtcDQ2MnZqaHN6NnN0NC9zZXR0bGVycy9uZnQiKSwgInVuYnJva2VuIikKCXVhc3NlcnQuRXF1YWwodCwgMywgbGVuKHN0cmluZ3MuU3BsaXQoZ290LCAiXG4iKSksICJ0aHJlZSBsaW5lcyIpCn0KGlAKC2dub21vZC50b21sEkFtb2R1bGUgPSAiZ25vLmxhbmQvci9tb3VsL2dhbGxlcnkvdjAiCmdubyA9ICIwLjkiCnByaXZhdGUgPSB0cnVlChrYEAoXcmVuZGVyX2V4YW1wbGVfdGVzdC5nbm8SvBBwYWNrYWdlIGdhbGxlcnkKCmZ1bmMgRXhhbXBsZVJlbmRlcigpIHsKCXByaW50bG4oUmVuZGVyKCI/Zm10PXR4dCIpKQoJLy8gT3V0cHV0OgoJLy8g4pWt4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pWuCgkvLyDilIJtb3VsJ3MgZ2FsbGVyeSAgICAgICAg4pSCCgkvLyDilIJhcnQgb24gZ25vLmxhbmQgICAgICAg4pSCCgkvLyDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDila8KCS8vCgkvLyBBcnQgb24gZ25vLmxhbmQsIHJlbmRlcmVkIHJhdGhlciB0aGFuIGRlc2NyaWJlZC4gTm90aGluZyBoZXJlIGlzIHN0b3JlZAoJLy8gaW4gdGhpcyByZWFsbTogZXZlcnkgcGllY2UgbGl2ZXMgd2hlcmUgaXRzIGF1dGhvciBwdXQgaXQuCgkvLwoJLy8gICBQaWVjZSAgICAgICAgQXV0aG9yICAgICAgICBXaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93bgoJLy8gICAtLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCgkvLyAgIGdub2ZhY2UgICAgICBtb3VsICAgICAgICAgIHIvbW91bC9kZW1vL2dub2ZhY2UvdjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkIGhlcmUKCS8vICAgbWlsbGlwZWRlICAgIG1vdWwgICAgICAgICAgci9tb3VsL2RlbW8vbWlsbGlwZWRlL3YwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWQgaGVyZQoJLy8gICBzYXBpbiAgICAgICAgbW91bCAgICAgICAgICByL21vdWwvc2FwaW4vdjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCBoZXJlCgkvLyAgIHNldHRsZXIyNSAgICB0aGUgU2V0dGxlcnMgIHIvZzE3a2hxcHVrZWVzNDIzN2R0bjNhc3R6YXBtcDQ2MnZqaHN6NnN0NC9zZXR0bGVycy9uZnQgIGxpbmtlZAoJLy8gICBhc2NpaWFydCAgICAgbW91bCAgICAgICAgICByL21vdWwveC9kYWlseS9hc2NpaWFydC92MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWQKCS8vICAgcGl4ZWxjYW52YXMgIG1vdWwgICAgICAgICAgci9tb3VsL3gvZGFpbHkvcGl4ZWxjYW52YXMvdjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkCgkvLwoJLy8gMyBwaWVjZXMgcmVuZGVyZWQgZnJvbSBzb3VyY2UsIDMgcGllY2VzIGxpbmtlZC4KCS8vCgkvLyBPcGVuIG9uZSBhdCAvci9tb3VsL2dhbGxlcnkvdjA6cGllY2UvPHNsdWc+LCB3aXRoID9mbXQ9dHh0IGZvciB0aGlzCgkvLyBmb3JtLgp9CgpmdW5jIEV4YW1wbGVSZW5kZXJfcGllY2UoKSB7CglwcmludGxuKFJlbmRlcigicGllY2UvbWlsbGlwZWRlP2ZtdD10eHQiKSkKCS8vIE91dHB1dDoKCS8vIG1pbGxpcGVkZQoJLy8gPT09PT09PT09CgkvLwoJLy8gICAgIOKVmuKKmSDiipnilZ0KCS8vICAg4pWa4pWQKOKWiOKWiOKWiCnilZDilZ0KCS8vICDilZrilZAo4paI4paI4paIKeKVkOKVnQoJLy8g4pWa4pWQKOKWiOKWiOKWiCnilZDilZ0KCS8vICDilZrilZAo4paI4paI4paIKeKVkOKVnQoJLy8gICDilZrilZAo4paI4paI4paIKeKVkOKVnQoJLy8gICAg4pWa4pWQKOKWiOKWiOKWiCnilZDilZ0KCS8vICAgICDilZrilZAo4paI4paI4paIKeKVkOKVnQoJLy8gICAgIOKVmuKVkCjilojilojilogp4pWQ4pWdCgkvLwoJLy8gQSBtaWxsaXBlZGUgb2YgYW55IGxlbmd0aC4gVGhlIG9sZGVzdCBwaWVjZSBoZXJlLCBhbmQgc3RpbGwgdGhlIG9uZSB0aGF0CgkvLyBiZXN0IGV4cGxhaW5zIHdoeSBBU0NJSSBpcyB0aGUgY2hlYXBlc3QgcGljdHVyZSB0aGVyZSBpcy4KCS8vICAgQXV0aG9yOiBtb3VsCgkvLyAgIExpY2Vuc2U6IHNlZSB0aGUgc291cmNlIHJlYWxtCgkvLyAgIFNvdXJjZTogci9tb3VsL2RlbW8vbWlsbGlwZWRlL3YwCgkvLyAgIHRoZSBzb3VyY2UgcmVhbG0gWzFdCgkvLwoJLy8gTGlua3M6CgkvLyAgIFsxXSBodHRwczovL2duby5sYW5kL3IvbW91bC9kZW1vL21pbGxpcGVkZS92MAp9ChrBIgoIdGV4dC5nbm8StCJwYWNrYWdlIGdhbGxlcnkKCmltcG9ydCAic3RyaW5ncyIKCi8vIGRvYyBidWlsZHMgdGhlIHBsYWluLXRleHQgdGFyZ2V0OiBhIGRvY3VtZW50IHRoYXQgcmVhZHMgd2VsbCBhcy1pcywgcmF0aGVyCi8vIHRoYW4gbWFya2Rvd24gd2l0aCB0aGUgc3ludGF4IGNoYXJhY3RlcnMgZGVsZXRlZC4KLy8KLy8gVGhpcyBpcyBhIHByb3RvdHlwZSwgZGVsaWJlcmF0ZWx5IHNtYWxsIGFuZCBkZWxpYmVyYXRlbHkgaGVyZSByYXRoZXIgdGhhbiBpbgovLyBhIHAvIHBhY2thZ2UuIFBvcnRpbmcgb25lIHJlYWxtIGlzIG5vdCBlbm91Z2ggdG8ga25vdyB3aGF0IHRoZSBzaGFyZWQKLy8gZG9jdW1lbnQgbW9kZWwgc2hvdWxkIGJlOyBwb3J0aW5nIHRoZSBmaWZ0aCB3aWxsIGJlLiBXaGF0IGl0IGFscmVhZHkgcGlucyBpcwovLyB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWFrZSB0ZXh0IGdvb2QgaW5zdGVhZCBvZiBtZXJlbHkgc3RyaXBwZWQ6Ci8vCi8vICAxLiBBIGxpbmsgcHJpbnRzIGl0cyB0ZXh0IGlubGluZSBhbmQgY29sbGVjdHMgdGhlIFVSTCBpbnRvIGEgbnVtYmVyZWQKLy8gICAgIGZvb3Rub3RlLiBOZXZlciAiW3RleHRdKHVybCkiLCB3aGljaCBpcyB0aGUgc2luZ2xlIHdvcnN0IHRoaW5nIG1hcmtkb3duCi8vICAgICBkb2VzIHRvIGEgdGVybWluYWwgcmVhZGVyLgovLyAgMi4gQSBoZWFkaW5nIGlzIHVuZGVybGluZWQsIG5vdCBwcmVmaXhlZCB3aXRoICcjJy4KLy8gIDMuIEFydCBpcyBlbWl0dGVkIHZlcmJhdGltOiBuZXZlciB3cmFwcGVkLCBuZXZlciBlc2NhcGVkLCBuZXZlciBmZW5jZWQuCi8vICA0LiBQcm9zZSBpcyB3cmFwcGVkIGF0IGEgZml4ZWQgd2lkdGg7IGFydCBhbmQgZmllbGRzIGFyZSBub3QuCnR5cGUgZG9jIHN0cnVjdCB7CgliICAgICBzdHJpbmdzLkJ1aWxkZXIKCWxpbmtzIFtdc3RyaW5nCn0KCi8vIHdpZHRoIGlzIHdoZXJlIHByb3NlIHdyYXBzLiA3MiBsZWF2ZXMgcm9vbSBmb3IgYSBxdW90aW5nIHByZWZpeCBpbiBhbiBlbWFpbAovLyBvciBhIGRpZmYgd2l0aG91dCByZS13cmFwcGluZy4KY29uc3Qgd2lkdGggPSA3MgoKZnVuYyAoZCAqZG9jKSBIMShzIHN0cmluZykgewoJZC5ibGFuaygpCglkLmIuV3JpdGVTdHJpbmcocyArICJcbiIgKyBzdHJpbmdzLlJlcGVhdCgiPSIsIHJ1bmVMZW4ocykpICsgIlxuIikKfQoKZnVuYyAoZCAqZG9jKSBIMihzIHN0cmluZykgewoJZC5ibGFuaygpCglkLmIuV3JpdGVTdHJpbmcocyArICJcbiIgKyBzdHJpbmdzLlJlcGVhdCgiLSIsIHJ1bmVMZW4ocykpICsgIlxuIikKfQoKZnVuYyAoZCAqZG9jKSBQYXJhKHMgc3RyaW5nKSB7CglpZiBzID09ICIiIHsKCQlyZXR1cm4KCX0KCWQuYmxhbmsoKQoJZC5iLldyaXRlU3RyaW5nKHdyYXAocywgd2lkdGgpICsgIlxuIikKfQoKZnVuYyAoZCAqZG9jKSBJdGVtKHMgc3RyaW5nKSB7CglkLmIuV3JpdGVTdHJpbmcoIiAgLSAiICsgcyArICJcbiIpCn0KCi8vIFRhYmxlIHdyaXRlcyBjb2x1bW5zIHBhZGRlZCB0byB0aGVpciB3aWRlc3QgY2VsbCwgdW5kZXIgYSBydWxlLiBBbiB1bnBhZGRlZAovLyBwaXBlIHRhYmxlIGlzIHRoZSBvdGhlciB0aGluZyBtYXJrZG93biBkb2VzIHRvIGEgdGVybWluYWwgcmVhZGVyIHRoYXQgbm8KLy8gYW1vdW50IG9mIGNoYXJhY3Rlci1zdHJpcHBpbmcgZml4ZXM6IHRoZSBjb2x1bW5zIHN0b3AgbGluaW5nIHVwIGFuZCB0aGUgdGFibGUKLy8gc3RvcHMgYmVpbmcgYSB0YWJsZS4KLy8KLy8gQ2VsbHMgYXJlIGxhaWQgb3V0IGJ5IHJ1bmUgY291bnQsIG5vdCBieXRlIGNvdW50LCBzbyBhIGJveC1kcmF3aW5nIGdseXBoIG9yCi8vIGFuIGFjY2VudCBkb2VzIG5vdCBzaGlmdCB0aGUgY29sdW1uLgpmdW5jIChkICpkb2MpIFRhYmxlKGhlYWRlcnMgW11zdHJpbmcsIHJvd3MgW11bXXN0cmluZykgewoJaWYgbGVuKGhlYWRlcnMpID09IDAgewoJCXJldHVybgoJfQoJdyA6PSBtYWtlKFtdaW50LCBsZW4oaGVhZGVycykpCglmb3IgaSwgaCA6PSByYW5nZSBoZWFkZXJzIHsKCQl3W2ldID0gcnVuZUxlbihoKQoJfQoJZm9yIF8sIHIgOj0gcmFuZ2Ugcm93cyB7CgkJZm9yIGksIGMgOj0gcmFuZ2UgciB7CgkJCWlmIGkgPCBsZW4odykgJiYgcnVuZUxlbihjKSA+IHdbaV0gewoJCQkJd1tpXSA9IHJ1bmVMZW4oYykKCQkJfQoJCX0KCX0KCglkLmJsYW5rKCkKCWQuYi5Xcml0ZVN0cmluZygiICAiICsgam9pblBhZGRlZChoZWFkZXJzLCB3KSArICJcbiIpCgoJcnVsZSA6PSBtYWtlKFtdc3RyaW5nLCBsZW4oaGVhZGVycykpCglmb3IgaSA6PSByYW5nZSBydWxlIHsKCQlydWxlW2ldID0gc3RyaW5ncy5SZXBlYXQoIi0iLCB3W2ldKQoJfQoJZC5iLldyaXRlU3RyaW5nKCIgICIgKyBqb2luUGFkZGVkKHJ1bGUsIHcpICsgIlxuIikKCglmb3IgXywgciA6PSByYW5nZSByb3dzIHsKCQlkLmIuV3JpdGVTdHJpbmcoIiAgIiArIGpvaW5QYWRkZWQociwgdykgKyAiXG4iKQoJfQp9CgovLyBqb2luUGFkZGVkIHBhZHMgZXZlcnkgY2VsbCBidXQgdGhlIGxhc3QsIHdoaWNoIHdvdWxkIG9ubHkgYWRkIHRyYWlsaW5nIHNwYWNlLgpmdW5jIGpvaW5QYWRkZWQoY2VsbHMgW11zdHJpbmcsIHcgW11pbnQpIHN0cmluZyB7Cgl2YXIgYiBzdHJpbmdzLkJ1aWxkZXIKCWZvciBpLCBjIDo9IHJhbmdlIGNlbGxzIHsKCQlpZiBpID4gMCB7CgkJCWIuV3JpdGVTdHJpbmcoIiAgIikKCQl9CgkJYi5Xcml0ZVN0cmluZyhjKQoJCWlmIGkgPCBsZW4oY2VsbHMpLTEgJiYgaSA8IGxlbih3KSB7CgkJCWIuV3JpdGVTdHJpbmcoc3RyaW5ncy5SZXBlYXQoIiAiLCB3W2ldLXJ1bmVMZW4oYykpKQoJCX0KCX0KCXJldHVybiBiLlN0cmluZygpCn0KCmZ1bmMgKGQgKmRvYykgRmllbGQoaywgdiBzdHJpbmcpIHsKCWQuYi5Xcml0ZVN0cmluZygiICAiICsgayArICI6ICIgKyB2ICsgIlxuIikKfQoKLy8gQXJ0IHdyaXRlcyBhIGJsb2NrIHZlcmJhdGltLiBObyBmZW5jZSwgbm8gaW5kZW50LCBubyBlc2NhcGluZzogYSBjb25zdW1lcgovLyB0aGF0IGFza2VkIGZvciB0ZXh0IGFza2VkIGZvciB0aGUgcGljdHVyZSBhcyBpdCBpcy4KZnVuYyAoZCAqZG9jKSBBcnQocyBzdHJpbmcpIHsKCWQuYmxhbmsoKQoJZC5iLldyaXRlU3RyaW5nKHMgKyAiXG4iKQp9CgovLyBMaW5rIHByaW50cyB0aGUgdGV4dCBpbmxpbmUgYW5kIGRlZmVycyB0aGUgVVJMIHRvIHRoZSBmb290bm90ZSBibG9jay4KZnVuYyAoZCAqZG9jKSBMaW5rKHRleHQsIHVybCBzdHJpbmcpIHsKCWQubGlua3MgPSBhcHBlbmQoZC5saW5rcywgdXJsKQoJZC5iLldyaXRlU3RyaW5nKCIgICIgKyB0ZXh0ICsgIiBbIiArIGl0b2EobGVuKGQubGlua3MpKSArICJdXG4iKQp9CgpmdW5jIChkICpkb2MpIFN0cmluZygpIHN0cmluZyB7CglvdXQgOj0gZC5iLlN0cmluZygpCglpZiBsZW4oZC5saW5rcykgPT0gMCB7CgkJcmV0dXJuIG91dAoJfQoJdmFyIGIgc3RyaW5ncy5CdWlsZGVyCgliLldyaXRlU3RyaW5nKG91dCkKCWIuV3JpdGVTdHJpbmcoIlxuTGlua3M6XG4iKQoJZm9yIGksIHUgOj0gcmFuZ2UgZC5saW5rcyB7CgkJYi5Xcml0ZVN0cmluZygiICBbIiArIGl0b2EoaSsxKSArICJdICIgKyB1ICsgIlxuIikKCX0KCXJldHVybiBiLlN0cmluZygpCn0KCi8vIGJsYW5rIHdyaXRlcyBhIHNlcGFyYXRpbmcgbmV3bGluZSB1bmxlc3MgdGhlIGRvY3VtZW50IGlzIGVtcHR5IG9yIGFscmVhZHkKLy8gZW5kcyBpbiBvbmUsIHNvIG5vIGJsb2NrIGhhcyB0byBrbm93IHdoYXQgY2FtZSBiZWZvcmUgaXQuCmZ1bmMgKGQgKmRvYykgYmxhbmsoKSB7CglzIDo9IGQuYi5TdHJpbmcoKQoJaWYgcyA9PSAiIiB8fCBzdHJpbmdzLkhhc1N1ZmZpeChzLCAiXG5cbiIpIHsKCQlyZXR1cm4KCX0KCWQuYi5Xcml0ZVN0cmluZygiXG4iKQp9CgovLyB3cmFwIGJyZWFrcyBvbiBzcGFjZXMgYXQgdyBydW5lcy4gQSB3b3JkIGxvbmdlciB0aGFuIHcgaXMgbGVmdCBhbG9uZSByYXRoZXIKLy8gdGhhbiBjdXQ6IGEgVVJMIG9yIGEgcmVhbG0gcGF0aCBpcyB3b3JzZSBicm9rZW4gdGhhbiB3aWRlLgpmdW5jIHdyYXAocyBzdHJpbmcsIHcgaW50KSBzdHJpbmcgewoJdmFyIG91dCBzdHJpbmdzLkJ1aWxkZXIKCWxpbmUgOj0gMAoJZm9yIGksIHdvcmQgOj0gcmFuZ2Ugc3RyaW5ncy5GaWVsZHMocykgewoJCW4gOj0gcnVuZUxlbih3b3JkKQoJCXN3aXRjaCB7CgkJY2FzZSBpID09IDA6CgkJCW91dC5Xcml0ZVN0cmluZyh3b3JkKQoJCQlsaW5lID0gbgoJCWNhc2UgbGluZSsxK24gPiB3OgoJCQlvdXQuV3JpdGVTdHJpbmcoIlxuIiArIHdvcmQpCgkJCWxpbmUgPSBuCgkJZGVmYXVsdDoKCQkJb3V0LldyaXRlU3RyaW5nKCIgIiArIHdvcmQpCgkJCWxpbmUgKz0gMSArIG4KCQl9Cgl9CglyZXR1cm4gb3V0LlN0cmluZygpCn0KCmZ1bmMgcnVuZUxlbihzIHN0cmluZykgaW50IHsKCW4gOj0gMAoJZm9yIHJhbmdlIHMgewoJCW4rKwoJfQoJcmV0dXJuIG4KfQoiDTEwMDAwMDAwdWdub3QSEgiwwspFEgsyMTg4ODZ1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQIAUko/jSwAOonEP0X+r2647UW246Nfe75rO0n/ni2DyBJAMsokSj+jGarh7Bn4+DAPksvyN7NER9OpTnDfGeIVuKA705XtuZTKj3hwTYx0wCHtZ55bF+zUO48YqrdQ3oLVNxooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==