Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
771690B0C37851E51A510ED9B15C641FCA8E69FA8314BABC899B034A084B873C
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
30,000,000
Requested gas limit
GAS USED
15,869,010
Gas consumed
FEE
30000ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g17khqpukees4237dtn3astzapmp462vjhsz6st4
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CuVdCgwvdm0ubV9hZGRwa2cS1F0KKGcxN2tocXB1a2VlczQyMzdkdG4zYXN0emFwbXA0NjJ2amhzejZzdDQSp10KBmF2YXRhchJDZ25vLmxhbmQvci9nMTdraHFwdWtlZXM0MjM3ZHRuM2FzdHphcG1wNDYydmpoc3o2c3Q0L3NldHRsZXJzL2F2YXRhchr9CQoJUkVBRE1FLm1kEu8JIyBTZXR0bGVyIGF2YXRhcnMKClRoaXMgcmVhbG0ncyBvbmUgam9iIGlzIHRvIHNob3cgb2ZmIGEgU2V0dGxlciBhcyBhIHNtYWxsIHBpY3R1cmUsIGZvciBhbnlvbmUgd2hvIGFza3MuCklmIGFuIGFjY291bnQgb3ducyBhIFNldHRsZXIsIHRoaXMgaXMgdGhlIHBsYWNlIHRoYXQgZHJhd3MgaXQuCgpUaGlzIHJlYWxtIGRvZXNuJ3Qgb3duIG9yIHN0b3JlIGFueXRoaW5nIGl0c2VsZjsgaXQganVzdCBsb29rcyB1cCBhIFNldHRsZXIgYW5kIGRyYXdzIGl0LCBvbiB0aGUgc3BvdCwKd2hlbmV2ZXIgaXQncyBhc2tlZCB0by4gS2VlcGluZyBpdCBzZXBhcmF0ZSBtZWFucyBhbnkgb3RoZXIgcmVhbG0gb3Igd2ViIGFwcCBvbiBHbm8ubGFuZCBjYW4gc2hvdyBzb21lb25lJ3MKU2V0dGxlciBuZXh0IHRvIHRoZWlyIG5hbWUsIGluIGEgZm9ydW0gcG9zdCwgYSBsZWFkZXJib2FyZCwgb3IgYSBwcm9maWxlLCB3aXRob3V0IGhhdmluZyB0byBrbm93IGFueXRoaW5nCmFib3V0IGhvdyB0aGUgYXJ0IGlzIHB1dCB0b2dldGhlci4gVGhleSBqdXN0IGFzayB0aGlzIHJlYWxtIGZvciB0aGUgcGljdHVyZS4KClRoZSBbU2V0dGxlcnMgbmZ0IHJlYWxtXSgvci9nMTdraHFwdWtlZXM0MjM3ZHRuM2FzdHphcG1wNDYydmpoc3o2c3Q0L3NldHRsZXJzL25mdCkgaXMgd2hhdCBhY3R1YWxseSBoYW5kcyBvdXQgdGhlIGdub21lcyBhbmQga2VlcHMKdHJhY2sgb2Ygd2hvIG93bnMgd2hhdC4KCiMjIFVzYWdlIEV4YW1wbGUKClRoaXMgZ2l2ZXMgeW91IGEgU2V0dGxlciBpbWFnZSBuZXh0IHRvIHRoZSBhZGRyZXNzLCByZWFkeSB0byB3cml0ZSBpbnRvIHlvdXIgb3duIE1hcmtkb3duOgoKYGBgZ28KaW1wb3J0ICJnbm8ubGFuZC9yL2cxN2tocXB1a2VlczQyMzdkdG4zYXN0emFwbXA0NjJ2amhzejZzdDQvc2V0dGxlcnMvYXZhdGFyIgoKZnVuYyBSZW5kZXJVc2VyKGFkZHIgYWRkcmVzcykgc3RyaW5nIHsKCS8vIFNpemU6IDMyeDMyIHB4LCBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kOiB0cnVlCglyZXR1cm4gYXZhdGFyLk1hcmtkb3duKGFkZHIsIDMyLCB0cnVlKSArICIgIiArIGFkZHIuU3RyaW5nKCkKfQpgYGAKCmBNYXJrZG93bmAgcmV0dXJucyBub3RoaW5nIGlmIHRoZSBhZGRyZXNzIGhhcyBubyBTZXR0bGVyLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZmlyc3QuCmBTVkdgIGFuZCBgVVJJYCB3b3JrIHRoZSBzYW1lIHdheSwgYW5kIGdpdmUgeW91IHRoZSByYXcgcGljdHVyZSBpbnN0ZWFkLCBpZiB0aGF0J3Mgd2hhdCB5b3UgbmVlZC4KGq4oCgphdmF0YXIuZ25vEp8ocGFja2FnZSBhdmF0YXIKCmltcG9ydCAoCgkiY2hhaW4iCgkiY2hhaW4vcnVudGltZSIKCSJzdHJpbmdzIgoKCSJnbm8ubGFuZC9wL2cxN2tocXB1a2VlczQyMzdkdG4zYXN0emFwbXA0NjJ2amhzejZzdDQvc2V0dGxlcnMvbmZ0L3YwIgoJImduby5sYW5kL3AvbnQvZ3JjNzIxL3YwIgoJImduby5sYW5kL3AvbnQvbWRhbGVydC92MCIKCSJnbm8ubGFuZC9wL250L293bmFibGUvdjAiCglzZXR0bGVycyAiZ25vLmxhbmQvci9nMTdraHFwdWtlZXM0MjM3ZHRuM2FzdHphcG1wNDYydmpoc3o2c3Q0L3NldHRsZXJzL25mdCIKKQoKY29uc3QgKAoJLy8gTWluU2l6ZSBpcyB0aGUgbWluaW11bSBzaXplIGFsbG93ZWQgZm9yIGFuIGF2YXRhciBpbiBwaXhlbHMuCglNaW5TaXplID0gMzIKCgkvLyBNYXhTaXplIGlzIHRoZSBtYXhpbXVtIHNpemUgYWxsb3dlZCBmb3IgYW4gYXZhdGFyIGluIHBpeGVscy4KCU1heFNpemUgPSAyMDQ4CikKCnZhciAoCgkvLyBOb3RpY2UgaXMgYSByZWFsbS13aWRlIG1lc3NhZ2UgdGhlIGFkbWluIGNhbiBwb3N0IGF0IGFueSB0aW1lLCBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLgoJLy8gSXQgbmV2ZXIgYWZmZWN0cyBTVkcsIFVSSSBvciBNYXJrZG93biwgaXQgaXMgcHVyZWx5IGluZm9ybWF0aW9uYWwuCglOb3RpY2Ugc3RyaW5nCgoJLy8gTm90aWNlVHlwZSBpcyB0aGUgc3R5bGUgTm90aWNlIGlzIHNob3duIGFzLgoJTm90aWNlVHlwZSBtZGFsZXJ0LlR5cGUKCgkvLyBSZWFsbSBwYXRoIGlzIHRoZSBwYXRoIG9mIHRoaXMgcmVhbG0uCglSZWFsbVBhdGggc3RyaW5nCgoJLy8gQWRtaW4gYWNjb3VudCBmb3IgdGhlIHJlYWxtLCBvbmx5IHZhbGlkIHRvIHBvc3Qgb3IgY2xlYXIgcmVhbG0td2lkZSBub3RpY2VzLgoJYWRtaW4gKm93bmFibGUuT3duYWJsZQoKCS8vIEdvIHNuaXBwZXQgaXMgdGhlIEdvIHVzYWdlIGV4YW1wbGUuCglnb1NuaXBwZXQgc3RyaW5nCgoJLy8gR25va2V5IHNuaXBwZXQgaXMgdGhlIGdub2tleSBleGFtcGxlLgoJZ25va2V5U25pcHBldCBzdHJpbmcKKQoKZnVuYyBpbml0KGN1ciByZWFsbSkgewoJUmVhbG1QYXRoID0gc3RyaW5ncy5UcmltUHJlZml4KGN1ci5Qa2dQYXRoKCksIHJ1bnRpbWUuQ2hhaW5Eb21haW4oKSkKCWFkbWluID0gb3duYWJsZS5OZXdXaXRoQWRkcmVzcyhjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkpCglwa2dQYXRoIDo9IHJ1bnRpbWUuQ2hhaW5Eb21haW4oKSArIFJlYWxtUGF0aAoKCWdvU25pcHBldCA9ICJpbXBvcnQgXCIiICsgcGtnUGF0aCArICJcIlxuXG4iICsKCQkiZnVuYyBSZW5kZXJVc2VyKGFkZHIgYWRkcmVzcykgc3RyaW5nIHtcblx0cmV0dXJuIGF2YXRhci5NYXJrZG93bihhZGRyLCAzMiwgdHJ1ZSkgIiArCgkJIisgXCIgXCIgKyBhZGRyLlN0cmluZygpXG59XG4iCgoJZ25va2V5U25pcHBldCA9ICJnbm9rZXkgcXVlcnkgdm0vcXJlbmRlciBcXFxuIiArCgkJIiAgLXJlbW90ZSA8cmVtb3RlPiBcXFxuIiArCgkJIiAgLWRhdGEgXCIiICsgcGtnUGF0aCArICI6c3ZnL3thZGRyZXNzfT9zaXplPTI1NlwiIFxcXG4iICsKCQkiICB8IHRhaWwgLW4gKzIgfCBzZWQgJzFzL15kYXRhOiAvLycgPiBzZXR0bGVyLnN2Z1xuIgp9CgovLyBBZG1pbiByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBhZG1pbiBhY2NvdW50LgpmdW5jIEFkbWluKCkgYWRkcmVzcyB7IHJldHVybiBhZG1pbi5Pd25lcigpIH0KCi8vIFRyYW5zZmVyQWRtaW4gbWFrZXMgYW5vdGhlciBhY2NvdW50IHRoZSBhZG1pbi4gT25seSB0aGUgYWRtaW4gY2FuIGNhbGwgaXQuCmZ1bmMgVHJhbnNmZXJBZG1pbihjdXIgcmVhbG0sIG5ld0FkbWluIGFkZHJlc3MpIHsKCWFzc2VydElzQ3VycmVudChjdXIpCglpZiBlcnIgOj0gYWRtaW4uVHJhbnNmZXJPd25lcnNoaXAoMCwgY3VyLCBuZXdBZG1pbik7IGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KfQoKLy8gU2V0Tm90aWNlIHBvc3RzIGEgcmVhbG0td2lkZSBtZXNzYWdlLCBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLgpmdW5jIFNldE5vdGljZShjdXIgcmVhbG0sIGFsZXJ0VHlwZSBtZGFsZXJ0LlR5cGUsIG1zZyBzdHJpbmcpIHsKCWFzc2VydElzQ3VycmVudChjdXIpCglhZG1pbi5Bc3NlcnRPd25lZEJ5KGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKSkKCWFzc2VydElzVmFsaWRBbGVydFR5cGUoYWxlcnRUeXBlKQoKCU5vdGljZVR5cGUgPSBhbGVydFR5cGUKCU5vdGljZSA9IG1zZwoJY2hhaW4uRW1pdCgiTm90aWNlU2V0IiwgInR5cGUiLCBzdHJpbmcoYWxlcnRUeXBlKSkKfQoKLy8gQ2xlYXJOb3RpY2UgcmVtb3ZlcyB0aGUgY3VycmVudCBub3RpY2UuCmZ1bmMgQ2xlYXJOb3RpY2UoY3VyIHJlYWxtKSB7Cglhc3NlcnRJc0N1cnJlbnQoY3VyKQoJYWRtaW4uQXNzZXJ0T3duZWRCeShjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkpCgoJTm90aWNlVHlwZSA9ICIiCglOb3RpY2UgPSAiIgoJY2hhaW4uRW1pdCgiTm90aWNlQ2xlYXJlZCIpCn0KCi8vIFNWRyByZXR1cm5zIHRoZSBTVkcgZG9jdW1lbnQgb2YgdGhlIFNldHRsZXIgb2YgYW4gYWRkcmVzcywgb3IgYW4gZW1wdHkgdGV4dCBpZiBpdCBoYXMgbm9uZS4KLy8KLy8gVGhlIHNpemUgaXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaW4gcGl4ZWxzIG9mIHRoZSBzcXVhcmUgaW1hZ2UsIGZyb20gMzIgdG8gMjA0OCAobXVsdGlwbGVzIG9mIDMyIGtlZXAKLy8gZXZlcnkgYXJ0IHBpeGVsIGFzIGEgd2hvbGUgbnVtYmVyIG9mIHNjcmVlbiBwaXhlbHMpLiBBIHNpemUgb2YgMCBvciBsZXNzIGxlYXZlcyBvdXQgdGhlIHdpZHRoIGFuZCB0aGUKLy8gaGVpZ2h0LCBzbyB0aGF0IHRoZSBpbWFnZSBzY2FsZXMgdG8gaXRzIGNvbnRhaW5lci4gSWYgdHJhbnNwYXJlbnQgaXMgdHJ1ZSwgdGhlIGltYWdlIGhhcyBubyBiYWNrZ3JvdW5kLgpmdW5jIFNWRyhhZGRyIGFkZHJlc3MsIHNpemUgaW50LCB0cmFuc3BhcmVudCBib29sKSBzdHJpbmcgewoJaWYgdGlkLCB0cmFpdHMgOj0gbG9va3VwKGFkZHIpOyB0aWQgIT0gIiIgewoJCXJldHVybiBuZnQuUmVuZGVyU1ZHKHRyYWl0cywgb3B0aW9ucyhzaXplLCB0cmFuc3BhcmVudCkpCgl9CglyZXR1cm4gIiIKfQoKLy8gVVJJIHJldHVybnMgdGhlIGltYWdlIG9mIHRoZSBTZXR0bGVyIG9mIGFuIGFkZHJlc3MgYXMgYSAiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIiBVUkksIHRoYXQgY2FuCi8vIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiBhbiBpbWFnZSBvciBhcyB0aGUgYWRkcmVzcyBvZiBhIE1hcmtkb3duIGltYWdlLCBvciBhbiBlbXB0eSB0ZXh0IGlmIGl0IGhhcyBub25lLgovLyBUaGUgc2l6ZSBhbmQgdHJhbnNwYXJlbnQgYXJlIHRoZSBzYW1lIGFzIGluIFNWRy4KZnVuYyBVUkkoYWRkciBhZGRyZXNzLCBzaXplIGludCwgdHJhbnNwYXJlbnQgYm9vbCkgc3RyaW5nIHsKCWlmIHRpZCwgdHJhaXRzIDo9IGxvb2t1cChhZGRyKTsgdGlkICE9ICIiIHsKCQlyZXR1cm4gbmZ0LlJlbmRlckRhdGFVUkkodHJhaXRzLCBvcHRpb25zKHNpemUsIHRyYW5zcGFyZW50KSkKCX0KCXJldHVybiAiIgp9CgovLyBNYXJrZG93biByZXR1cm5zIHRoZSBhdmF0YXIgb2YgYW4gYWRkcmVzcyBhcyBhIE1hcmtkb3duIGltYWdlLCBvciBhbiBlbXB0eSB0ZXh0IGlmIGl0IGhhcyBub25lOgovLwovLwkhW1NldHRsZXIgIzEyXShkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwuLi4pCi8vCi8vIFRoZSBzaXplIGFuZCB0cmFuc3BhcmVudCBhcmUgdGhlIHNhbWUgYXMgaW4gU1ZHLgpmdW5jIE1hcmtkb3duKGFkZHIgYWRkcmVzcywgc2l6ZSBpbnQsIHRyYW5zcGFyZW50IGJvb2wpIHN0cmluZyB7CglpZiB0aWQsIHRyYWl0cyA6PSBsb29rdXAoYWRkcik7IHRpZCAhPSAiIiB7CgkJdXJpIDo9IG5mdC5SZW5kZXJEYXRhVVJJKHRyYWl0cywgb3B0aW9ucyhzaXplLCB0cmFuc3BhcmVudCkpCgkJcmV0dXJuICIhW1NldHRsZXIgIyIgKyBzdHJpbmcodGlkKSArICJdKCIgKyB1cmkgKyAiKSIKCX0KCXJldHVybiAiIgp9CgovLyBsb29rdXAgcmV0dXJucyB0aGUgSUQgYW5kIHRyYWl0cyBvZiB0aGUgU2V0dGxlciBvZiBhbiBhZGRyZXNzLCBvciBhbiBlbXB0eSBJRCBhbmQgYSB6ZXJvLXZhbHVlIFRyYWl0cyBpZiBpdAovLyBoYXMgbm9uZS4KZnVuYyBsb29rdXAoYWRkciBhZGRyZXNzKSAoZ3JjNzIxLlRva2VuSUQsIG5mdC5UcmFpdHMpIHsKCXRpZCA6PSBzZXR0bGVycy5Ub2tlbk9mKGFkZHIpCglpZiB0aWQgPT0gIiIgewoJCXJldHVybiAiIiwgbmZ0LlRyYWl0c3t9Cgl9CgoJdHJhaXRzLCBlcnIgOj0gc2V0dGxlcnMuVHJhaXRzT2YodGlkKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuICIiLCBuZnQuVHJhaXRze30KCX0KCXJldHVybiB0aWQsIHRyYWl0cwp9CgovLyBvcHRpb25zIGJ1aWxkcyB0aGUgbmZ0Lk9wdGlvbnMgZm9yIGFuIGltYWdlOyBzaXplIGlzIGNsYW1wZWQgYmV0d2VlbiBNaW5TaXplIGFuZCBNYXhTaXplICgwIG9yIGxlc3MgaXMKLy8gbGVmdCBhcyAwLCBzbyB0aGUgaW1hZ2UgaGFzIG5vIGZpeGVkIHNpemUgYW5kIHNjYWxlcyB0byBpdHMgY29udGFpbmVyKSwgYW5kIHRyYW5zcGFyZW50IGNvbnRyb2xzIHdoZXRoZXIKLy8gdGhlIGJhY2tncm91bmQgaXMgZHJhd24uCmZ1bmMgb3B0aW9ucyhzaXplIGludCwgdHJhbnNwYXJlbnQgYm9vbCkgbmZ0Lk9wdGlvbnMgewoJc3dpdGNoIHsKCWNhc2Ugc2l6ZSA8PSAwOgoJCXNpemUgPSAwCgljYXNlIHNpemUgPCBNaW5TaXplOgoJCXNpemUgPSBNaW5TaXplCgljYXNlIHNpemUgPiBNYXhTaXplOgoJCXNpemUgPSBNYXhTaXplCgl9CgoJcmV0dXJuIG5mdC5PcHRpb25zewoJCVNpemU6ICAgICAgICAgc2l6ZSwKCQlOb0JhY2tncm91bmQ6IHRyYW5zcGFyZW50LAoJfQp9CgpmdW5jIGFzc2VydElzQ3VycmVudChjdXIgcmVhbG0pIHsKCWlmICFjdXIuSXNDdXJyZW50KCkgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQiKQoJfQp9CgpmdW5jIGFzc2VydElzVmFsaWRBbGVydFR5cGUodCBtZGFsZXJ0LlR5cGUpIHsKCXN3aXRjaCB0IHsKCWNhc2UgbWRhbGVydC5UeXBlQ2F1dGlvbiwgbWRhbGVydC5UeXBlSW5mbywgbWRhbGVydC5UeXBlTm90ZSwKCQltZGFsZXJ0LlR5cGVTdWNjZXNzLCBtZGFsZXJ0LlR5cGVUaXAsIG1kYWxlcnQuVHlwZVdhcm5pbmc6CgkJcmV0dXJuCgl9CglwYW5pYygiaW52YWxpZCBub3RpY2UgdHlwZSIpCn0KGmoKC2dub21vZC50b21sElttb2R1bGUgPSAiZ25vLmxhbmQvci9nMTdraHFwdWtlZXM0MjM3ZHRuM2FzdHphcG1wNDYydmpoc3o2c3Q0L3NldHRsZXJzL2F2YXRhciIKZ25vID0gIjAuOSIKGpYpCgpyZW5kZXIuZ25vEocpcGFja2FnZSBhdmF0YXIKCmltcG9ydCAoCgkic3RyY29udiIKCgkiZ25vLmxhbmQvcC9tb3VsL21kL3YwIgoJImduby5sYW5kL3AvbW91bC9tZHRhYmxlL3YwIgoJImduby5sYW5kL3AvbnQvZ3JjNzIxL3YwIgoJImduby5sYW5kL3AvbnQvbWRhbGVydC92MCIKCSJnbm8ubGFuZC9wL250L211eC92MCIKCXNldHRsZXJzICJnbm8ubGFuZC9yL2cxN2tocXB1a2VlczQyMzdkdG4zYXN0emFwbXA0NjJ2amhzejZzdDQvc2V0dGxlcnMvbmZ0IgopCgpjb25zdCAoCgkvLyBTYW1wbGUgc2l6ZSBpcyB0aGUgc2l6ZSBpbiBwaXhlbHMgb2YgdGhlIGF2YXRhcnMgaW4gdGhlIHBhZ2VzLgoJc2FtcGxlU2l6ZSA9IDQ4CgoJLy8gU2FtcGxlcyBpcyBob3cgbWFueSBhdmF0YXJzIHRoZSBob21lIHBhZ2Ugc2hvd3MuCglzYW1wbGVzID0gNgopCgovLyBSZW5kZXIgcmVuZGVycyB0aGUgcmVhbG0uCi8vCi8vIEJ5IGRlZmF1bHQgcmVuZGVycyB3aGF0IHRoaXMgcmVhbG0gaXMsIGhvdyB0byB1c2UgaXQsIGFuZCBzb21lIGF2YXRhcnMuCi8vCi8vIFBhdGhzOgovLyAgIC0gYHN2Zy97YWRkcmVzc31gOiBUaGUgU1ZHIG9mIHRoZSBTZXR0bGVyIG9mIGFuIGFkZHJlc3MuCi8vICAgLSBgbWQve2FkZHJlc3N9YDogVGhlIE1hcmtkb3duIHRoYXQgTWFya2Rvd24gcmV0dXJucyBmb3IgYW4gYWRkcmVzcywgcmVuZGVyZWQsIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycy4KZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7Cglyb3V0ZXIgOj0gbXV4Lk5ld1JvdXRlcigpCglyb3V0ZXIuTm90Rm91bmRIYW5kbGVyID0gZnVuYyhyZXMgKm11eC5SZXNwb25zZVdyaXRlciwgXyAqbXV4LlJlcXVlc3QpIHsKCQlyZXMuV3JpdGUoIlBhdGggbm90IGZvdW5kIikKCX0KCglyb3V0ZXIuSGFuZGxlRnVuYygiIiwgcmVuZGVySG9tZSkKCXJvdXRlci5IYW5kbGVGdW5jKCJzdmcve2FkZHJ9IiwgcmVuZGVyU1ZHKQoJcm91dGVyLkhhbmRsZUZ1bmMoIm1kL3thZGRyfSIsIHJlbmRlck1hcmtkb3duKQoKCXJldHVybiByb3V0ZXIuUmVuZGVyKHBhdGgpCn0KCmZ1bmMgcmVuZGVySG9tZShyZXMgKm11eC5SZXNwb25zZVdyaXRlciwgXyAqbXV4LlJlcXVlc3QpIHsKCXJlcy5Xcml0ZShtZC5IMSgiU2V0dGxlciBhdmF0YXJzIikpCgoJaWYgTm90aWNlICE9ICIiIHsKCQlyZXMuV3JpdGUobWRhbGVydC5OZXcoTm90aWNlVHlwZSwgIk1lc3NhZ2UiLCBOb3RpY2UsIGZhbHNlKS5TdHJpbmcoKSArICJcblxuIikKCX0KCglyZXMuV3JpdGUobWQuUGFyYWdyYXBoKCJUaGlzIHJlYWxtIGRyYXdzIGEgU2V0dGxlciBhcyBhIHBpY3R1cmUgZ2l2ZSBhbiBhZGRyZXNzLiIpKQoJcmVzLldyaXRlKG1kLlBhcmFncmFwaCgKCQkiSXQgZG9lc24ndCBvd24gdGhlIFNldHRsZXIsIG9yIHN0b3JlIGFueXRoaW5nIGFib3V0IGl0LCBpdCBqdXN0IGxvb2tzIG9uZSB1cCBhbmQgZHJhd3MgaXQsICIgKwoJCQkiZnJlc2gsIGV2ZXJ5IHRpbWUgaXQncyBhc2tlZC4gVGhhdCdzIG9uIHB1cnBvc2UsIGtlZXBpbmcgdGhlIGRyYXdpbmcgc2VwYXJhdGUgZnJvbSB0aGUgbWFpbiAiICsKCQkJImNvbGxlY3Rpb24gbWVhbnMgYW55IG90aGVyIHJlYWxtIG9yIHdlYiBhcHAgb24gR25vLmxhbmQsIGEgZm9ydW0sIGEgbGVhZGVyYm9hcmQsIGEgcHJvZmlsZSAiICsKCQkJInBhZ2UsIGNhbiBzaG93IGEgU2V0dGxlciBuZXh0IHRvIGFuIGFkZHJlc3Mgd2l0aG91dCBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgcGl4ZWwgYXJ0LCB0cmFpdHMsICIgKwoJCQkib3IgaG93IGFueSBvZiBpdCdzIHB1dCB0b2dldGhlci4iLAoJKSkKCglyZXMuV3JpdGUobWQuUGFyYWdyYXBoKAoJCSJUaGUgIiArIG1kLkxpbmsoIlNldHRsZXJzIG5mdCIsIHNldHRsZXJzLlJlYWxtUGF0aCkgKyAiIHJlYWxtIGlzIHN0aWxsIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBtaW50cyAiICsKCQkJInRoZSBTZXR0bGVycyBhbmQga2VlcHMgdHJhY2sgb2Ygd2hvIG93bnMgd2hhdC4iLAoJKSkKCglyZXMuV3JpdGUobWQuUGFyYWdyYXBoKCJSZWFsbSBwYXRoczoiKSkKCXBhdGhzVGFibGUgOj0gbWR0YWJsZS5UYWJsZXtIZWFkZXJzOiBbXXN0cmluZ3siUGF0aCIsICJEZXNjcmlwdGlvbiJ9fQoJcGF0aHNUYWJsZS5BcHBlbmQoW11zdHJpbmd7CgkJbWQuSW5saW5lQ29kZSgic3ZnL3thZGRyZXNzfSIpLAoJCSJUaGUgU1ZHIG9mIHRoZSBTZXR0bGVyIG9mIGFuIGFkZHJlc3MuIiwKCX0pCglwYXRoc1RhYmxlLkFwcGVuZChbXXN0cmluZ3sKCQltZC5JbmxpbmVDb2RlKCJtZC97YWRkcmVzc30iKSwKCQkiVGhlIE1hcmtkb3duIHRoYXQgTWFya2Rvd24gcmV0dXJucyBmb3IgYW4gYWRkcmVzcywgcmVuZGVyZWQsIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycy4iLAoJfSkKCXJlcy5Xcml0ZShwYXRoc1RhYmxlLlN0cmluZygpICsgIlxuIikKCglyZXMuV3JpdGUobWQuSDIoIkZyb20gYSByZWFsbSIpKQoJcmVzLldyaXRlKG1kLlBhcmFncmFwaCgKCQkiQ2FsbCBpdCBkaXJlY3RseSBmcm9tIGFub3RoZXIgcmVhbG0sIGZvciBleGFtcGxlIHRvIHNob3cgYSBTZXR0bGVyICIgKwoJCQkibmV4dCB0byBhbiBhZGRyZXNzIGluIHlvdXIgb3duICIgKyBtZC5JbmxpbmVDb2RlKCJSZW5kZXIiKSArICIgZnVuY3Rpb246IiwKCSkpCglyZXMuV3JpdGUobWQuTGFuZ3VhZ2VDb2RlQmxvY2soImdvIiwgZ29TbmlwcGV0KSkKCgl0YWJsZSA6PSBtZHRhYmxlLlRhYmxle0hlYWRlcnM6IFtdc3RyaW5neyJGdW5jdGlvbiIsICJEZXNjcmlwdGlvbiJ9fQoJdGFibGUuQXBwZW5kKFtdc3RyaW5newoJCSJNYXJrZG93bihhZGRyLCBzaXplLCB0cmFuc3BhcmVudCkiLAoJCSJUaGUgaW1hZ2UsIG9yIGFuIGVtcHR5IHRleHQgaWYgdGhlcmUgaXMgbm9uZSIsCgl9KQoJdGFibGUuQXBwZW5kKFtdc3RyaW5newoJCSJTVkcoYWRkciwgc2l6ZSwgdHJhbnNwYXJlbnQpIiwKCQkiVGhlIFNWRyBkb2N1bWVudCwgb3IgYW4gZW1wdHkgdGV4dCBpZiB0aGVyZSBpcyBub25lIiwKCX0pCgl0YWJsZS5BcHBlbmQoW11zdHJpbmd7CgkJIlVSSShhZGRyLCBzaXplLCB0cmFuc3BhcmVudCkiLAoJCSJUaGUgc2FtZSBpbWFnZSBhcyBhIGRhdGEgVVJJIiwKCX0pCglyZXMuV3JpdGUodGFibGUuU3RyaW5nKCkgKyAiXG4iKQoKCXJlcy5Xcml0ZShtZC5QYXJhZ3JhcGgoCgkJIlRoZSBzaXplIGlzIGluIHBpeGVscywgZnJvbSAzMiB0byAyMDQ4LCBhbmQgMCBsZWF2ZXMgaXQgdG8gdGhlIGNvbnRhaW5lci4gIiArCgkJCSJXaXRoIHRyYW5zcGFyZW50IHRoZSBpbWFnZSBoYXMgbm8gYmFja2dyb3VuZC4gRXZlcnkgY2FsbCBkcmF3cyB0aGUgaW1hZ2UgYWdhaW4gYW5kICIgKwoJCQkiY29zdHMgZ2FzIChhYm91dCA2IHRvIDggbWlsbGlvbiksIHNvIHVzZSBpdCBpbiBgUmVuZGVyYCBhbmQgbm90IGluIGEgdHJhbnNhY3Rpb24uIiwKCSkpCgoJcmVzLldyaXRlKG1kLkgyKCJGcm9tIGEgd2ViIGFwcCIpKQoJcmVzLldyaXRlKG1kLlBhcmFncmFwaCgKCQkiQXNrIHRoZSBub2RlIGZvciB0aGUgcGFnZSBvZiBhbiBhZGRyZXNzLCB3aXRoIGB2bS9xcmVuZGVyYCwgYW5kIHVzZSB3aGF0IGl0IHJldHVybnMgYXMgYW4gaW1hZ2U6ICIgKwoJCQltZC5JbmxpbmVDb2RlKFJlYWxtUGF0aCsiOnN2Zy97YWRkcmVzc30/c2l6ZT02NCZ0cmFuc3BhcmVudD0xIikgKwoJCQkiLiBJdCBpcyBlbXB0eSBpZiB0aGUgYWRkcmVzcyBoYXMgbm8gU2V0dGxlci4iLAoJKSkKCXJlcy5Xcml0ZShtZC5QYXJhZ3JhcGgoIldpdGggZ25va2V5LCBmcm9tIGEgdGVybWluYWwsIHNhdmUgaXQgc3RyYWlnaHQgdG8gYSBmaWxlOiIpKQoJcmVzLldyaXRlKG1kLkxhbmd1YWdlQ29kZUJsb2NrKCJzaCIsIGdub2tleVNuaXBwZXQpKQoKCWlmIG4gOj0gc2V0dGxlcnMuVG90YWxTdXBwbHkoKTsgbiA+IDAgewoJCXJlcy5Xcml0ZShtZC5IMigiTGFzdCBTZXR0bGVycyIpKQoKCQlmb3IgaWQgOj0gbjsgaWQgPiAwICYmIGlkID4gbi1zYW1wbGVzOyBpZC0tIHsKCQkJdGlkIDo9IGdyYzcyMS5Ub2tlbklEKHN0cmNvbnYuRm9ybWF0SW50KGlkLCAxMCkpCgkJCW93bmVyLCBlcnIgOj0gc2V0dGxlcnMuT3duZXJPZih0aWQpCgkJCWlmIGVyciAhPSBuaWwgewoJCQkJY29udGludWUKCQkJfQoKCQkJdG9rZW5QYXRoIDo9IHNldHRsZXJzLlJlYWxtUGF0aCArICI6dG9rZW4vIiArIHN0cmluZyh0aWQpCgkJCXRhYmxlIDo9IG1kdGFibGUuVGFibGV7SGVhZGVyczogW11zdHJpbmd7IiIsICIifX0KCQkJdGFibGUuQXBwZW5kKFtdc3RyaW5newoJCQkJTWFya2Rvd24ob3duZXIsIHNhbXBsZVNpemUsIGZhbHNlKSwKCQkJCW1kLkxpbmsob3duZXIuU3RyaW5nKCksIHRva2VuUGF0aCksCgkJCX0pCgkJCXJlcy5Xcml0ZSh0YWJsZS5TdHJpbmcoKSArICJcbiIpCgkJfQoJfQp9CgpmdW5jIHJlbmRlclNWRyhyZXMgKm11eC5SZXNwb25zZVdyaXRlciwgcmVxICptdXguUmVxdWVzdCkgewoJc3ZnIDo9IFNWRyhhZGRyZXNzKHJlcS5HZXRWYXIoImFkZHIiKSksIHNpemVQYXJhbShyZXEpLCB0cmFuc3BhcmVudFBhcmFtKHJlcSkpCglyZXMuV3JpdGUoc3ZnKQp9CgpmdW5jIHJlbmRlck1hcmtkb3duKHJlcyAqbXV4LlJlc3BvbnNlV3JpdGVyLCByZXEgKm11eC5SZXF1ZXN0KSB7CglzaXplIDo9IHNpemVQYXJhbShyZXEpCglpZiBzaXplID09IDAgewoJCXNpemUgPSBzYW1wbGVTaXplCgl9CgoJYWRkciA6PSByZXEuR2V0VmFyKCJhZGRyIikKCWlmICFhZGRyZXNzKGFkZHIpLklzVmFsaWQoKSB7CgkJcmVzLldyaXRlKG1kLlBhcmFncmFwaCgiTm90IGEgdmFsaWQgYWRkcmVzcy4iKSkKCQlyZXMuV3JpdGUobWQuUGFyYWdyYXBoKG1kLkxpbmsoIjwgSG9tZSIsIFJlYWxtUGF0aCkpKQoJCXJldHVybgoJfQoKCXJlcy5Xcml0ZShtZC5IMSgiQXZhdGFyIG9mICIgKyBtZC5JbmxpbmVDb2RlKGFkZHIpKSkKCXJlcy5Xcml0ZShtZC5QYXJhZ3JhcGgoTWFya2Rvd24oYWRkcmVzcyhhZGRyKSwgc2l6ZSwgdHJhbnNwYXJlbnRQYXJhbShyZXEpKSkpCglyZXMuV3JpdGUobWQuUGFyYWdyYXBoKG1kLkxpbmsoIjwgSG9tZSIsIFJlYWxtUGF0aCkpKQp9CgpmdW5jIHNpemVQYXJhbShyZXEgKm11eC5SZXF1ZXN0KSBpbnQgewoJc2l6ZSwgZXJyIDo9IHN0cmNvbnYuQXRvaShyZXEuUXVlcnkuR2V0KCJzaXplIikpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gMAoJfQoJcmV0dXJuIHNpemUKfQoKZnVuYyB0cmFuc3BhcmVudFBhcmFtKHJlcSAqbXV4LlJlcXVlc3QpIGJvb2wgewoJdiA6PSByZXEuUXVlcnkuR2V0KCJ0cmFuc3BhcmVudCIpCglyZXR1cm4gdiA9PSAiMSIgfHwgdiA9PSAidHJ1ZSIKfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwSEQiAjs4cEgozMDAwMHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAuD8ci37GIv0ELKrMWzCiH/jt7ujOtagyVba2xDkWF7IEkAouTqqmSEheD/k4l8+u7N/jgAdnEscaam3vGlxDHN+cWiJC/tFv2kbK+3xO6AfQkh/M4SHrNAZmudykZ0xkB1rGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl