Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
1DD950BBD32581F9F97FB8A510FF454D613B7FDA50D6D4FBFAB54741B13B8D07
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
30,000,000
Requested gas limit
GAS USED
20,043,295
Gas consumed
FEE
40000ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1z0c0wrmwpzpd0gq4q67hl9508dtgv4epr0z5ml
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CplZCgwvdm0ubV9hZGRwa2cSiFkKKGcxejBjMHdybXdwenBkMGdxNHE2N2hsOTUwOGR0Z3Y0ZXByMHo1bWwS21gKBmdub21pYxIiZ25vLmxhbmQvci9ueW0tdGhlZ25vbWljMDAxL2dub21pYxrSBAoKY29uZmlnLmdubxLDBHBhY2thZ2UgZ25vbWljCgovLyBHRU5FUkFURUQgYnkgc2NyaXB0cy9yZW5kZXIuc2ggZnJvbSBjb25maWcuZW52LiBEbyBub3QgZWRpdCBieSBoYW5kLgoKY29uc3QgKAoJdG9rZW5OYW1lICAgICA9ICJHbm9taWMiCgl0b2tlblN5bWJvbCAgID0gIkdOT01JQyIKCXRva2VuRGVjaW1hbHMgPSA2Cglpbml0aWFsU3VwcGx5ID0gaW50NjQoMjEwMDAwMDApCgltYXhTdXBwbHkgICAgID0gaW50NjQoMjEwMDAwMDApCikKCmNvbnN0ICgKCXRva2VuRGVzY3JpcHRpb24gPSAiRml4ZWQgc3VwcGx5IG9mIDIxIG1pbGxpb24sIGRpc3RyaWJ1dGVkIHRvIEdOT1QgaG9sZGVycyBvbiBnbm8ubGFuZC4iCgl0b2tlbkxvZ29VUkkgICAgID0gImh0dHBzOi8vZ25vbWljLnd0Zi9pY29uLTUxMi5wbmciCgl0b2tlbldlYnNpdGUgICAgID0gImh0dHBzOi8vZ25vbWljLnd0ZiIKCXRva2VuVHdpdHRlciAgICAgPSAiIgopCgovLyBFbXB0eSA9IHRoZSBvd25lciBpcyB0aGUgYWRkcmVzcyB0aGF0IHJ1bnMgdGhlIGRlcGxveS4KY29uc3Qgb3duZXJBZGRyZXNzID0gImcxejBjMHdybXdwenBkMGdxNHE2N2hsOTUwOGR0Z3Y0ZXByMHo1bWwiChpJCgtnbm9tb2QudG9tbBI6bW9kdWxlID0gImduby5sYW5kL3IvbnltLXRoZWdub21pYzAwMS9nbm9taWMiCmdubyA9ICIwLjkiChroUgoJdG9rZW4uZ25vEtpSLy8gUGFyYW1ldHJpYyBHUkMyMCByZWFsbSBmb3IgZ25vLmxhbmQuCi8vCi8vIEFsbCBjb25maWd1cmF0aW9uIChuYW1lLCBzeW1ib2wsIGRlY2ltYWxzLCBzdXBwbHksIG1ldGFkYXRhKSBsaXZlcyBpbgovLyBjb25maWcuZ25vLiBUaGlzIGZpbGUgaG9sZHMgb25seSB0aGUgbG9naWMsIHdoaWNoIGlzIG5vdCBtZWFudCB0byBiZSBlZGl0ZWQuCi8vCi8vIFRoZSByZWFsbToKLy8gICAtIGNyZWF0ZXMgYSBHUkMyMCB0b2tlbiB0aHJvdWdoIGduby5sYW5kL3AvbnQvZ3JjMjAvdjAKLy8gICAtIHJlZ2lzdGVycyBpdCB3aXRoIGduby5sYW5kL3IvbnQvZ3JjMjByZWcvdjAgKHJlcXVpcmVkIHRvIGJlIGRpc2NvdmVyYWJsZQovLyAgICAgYnkgR25vU3dhcCwgd2FsbGV0cyBhbmQgZXhwbG9yZXJzKQovLyAgIC0gbWludHMgdGhlIGluaXRpYWwgc3VwcGx5IHRvIHRoZSBkZXBsb3lpbmcgYWRkcmVzcwovLyAgIC0gZXhwb3NlcyB0aGUgR1JDMjAgbWV0aG9kcyBhcyB0b3AtbGV2ZWwgZnVuY3Rpb25zIGNhbGxhYmxlIHZpYSBNc2dDYWxsCi8vICAgLSBlbmZvcmNlcyBhIGhhcmQgY2VpbGluZyAobWF4U3VwcGx5KSBvbiBtaW50aW5nCi8vICAgLSBsZXRzIHRoZSBvd25lciBnaXZlIHVwIG1pbnRpbmcgZm9yZXZlciAoRHJvcE93bmVyc2hpcCkKcGFja2FnZSBnbm9taWMKCmltcG9ydCAoCgkiY2hhaW4vcnVudGltZSIKCSJjaGFpbi9ydW50aW1lL3Vuc2FmZSIKCSJtYXRoIgoJInN0cmNvbnYiCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9udC9ncmMyMC92MCIKCSJnbm8ubGFuZC9wL250L293bmFibGUvdjAiCgkiZ25vLmxhbmQvcC9udC91Zm10L3YwIgoJImduby5sYW5kL3IvbnQvZ3JjMjByZWcvdjAiCikKCnZhciAoCgkvLyBUb2tlbiBpcyB0aGUgcHVibGljIGhhbmRsZSBvbiB0aGUgdG9rZW46IG90aGVyIHJlYWxtcyBjYW4gcmVhZCBpdCwgYnV0CgkvLyBjYW5ub3QgbXV0YXRlIGJhbGFuY2VzICh0aGUgUHJpdmF0ZUxlZGdlciBzdGF5cyBwcml2YXRlKS4KCVRva2VuICpncmMyMC5Ub2tlbgoKCS8vIE93bmFibGUgaG9sZHMgdGhlIGFkbWluaXN0cmF0aXZlIGF1dGhvcml0eSAobWludCAvIGFkbWluaXN0cmF0aXZlIGJ1cm4pLgoJT3duYWJsZSAqb3duYWJsZS5Pd25hYmxlCgoJcHJpdmF0ZUxlZGdlciAqZ3JjMjAuUHJpdmF0ZUxlZGdlcgoJdXNlclRlbGxlciAgICBncmMyMC5UZWxsZXIKCgkvLyB1bml0ID0gMTBedG9rZW5EZWNpbWFscywgdGhlIGNvbnZlcnNpb24gZmFjdG9yIGJldHdlZW4gd2hvbGUgdW5pdHMgYW5kCgkvLyBiYXNlIHVuaXRzLgoJdW5pdCBpbnQ2NAoKCS8vIGhhcmRDYXAgPSBtYXhTdXBwbHkgKiB1bml0LCBleHByZXNzZWQgaW4gYmFzZSB1bml0cy4KCWhhcmRDYXAgaW50NjQKCgkvLyB0b3RhbE1pbnRlZCBpcyB0aGUgQ1VNVUxBVElWRSBhbW91bnQgZXZlciBtaW50ZWQsIGFuZCBuZXZlciBnb2VzIGRvd24uCgkvLwoJLy8gVGhlIGNlaWxpbmcgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgZmlndXJlIHJhdGhlciB0aGFuIGFnYWluc3QgY2lyY3VsYXRpbmcKCS8vIHN1cHBseSwgYmVjYXVzZSBCdXJuIGxvd2VycyBzdXBwbHk6IGNoZWNraW5nIHRoYXQsIGJ1cm5pbmcgd291bGQgcmVvcGVuCgkvLyBtaW50aW5nIGhlYWRyb29tIGFuZCAiMjEgbWlsbGlvbiIgd291bGQgYmVjb21lIGFuIGluc3RhbnRhbmVvdXMgbGltaXQKCS8vIGluc3RlYWQgb2YgYSBmaW5hbCBvbmUuIFdpdGggdGhlIGN1bXVsYXRpdmUgY291bnRlciBidXJuZWQgdG9rZW5zIGFyZSBnb25lCgkvLyBmb3IgZ29vZCwgd2hpY2ggaXMgd2hhdCBhIGZpeGVkIHN1cHBseSBpcyBzdXBwb3NlZCB0byBtZWFuLgoJdG90YWxNaW50ZWQgaW50NjQKCgkvLyB0b2tlbktleSBpcyB0aGUgY2Fub25pY2FsIGtleSBpbiB0aGUgR1JDMjAgcmVnaXN0cnk6ICI8cGtncGF0aD4uPFNZTUJPTD4iLgoJLy8gSXQgaXMgdGhlIGlkZW50aWZpZXIgdXNlZCBieSBHbm9Td2FwIGFuZCBmcmllbmRzLgoJdG9rZW5LZXkgc3RyaW5nCgoJZGVwbG95SGVpZ2h0IGludDY0CglyZWFsbUFkZHIgICAgYWRkcmVzcwopCgpmdW5jIGluaXQoY3VyIHJlYWxtKSB7Cgl1bml0ID0gcG93MTAodG9rZW5EZWNpbWFscykKCWhhcmRDYXAgPSBtdWxPclBhbmljKG1heFN1cHBseSwgdW5pdCkKCWluaXRpYWwgOj0gbXVsT3JQYW5pYyhpbml0aWFsU3VwcGx5LCB1bml0KQoJaWYgaW5pdGlhbCA+IGhhcmRDYXAgewoJCXBhbmljKCJ0b2tlbjogaW5pdGlhbFN1cHBseSBleGNlZWRzIG1heFN1cHBseSIpCgl9CgoJLy8gV2hvIGFkbWluaXN0ZXJzIHRoZSB0b2tlbjoKCS8vICAxLiBvd25lckFkZHJlc3MgZnJvbSBjb25maWcuZ25vLCB3aGVuIHNldCAoZS5nLiBhIG11bHRpc2lnIG9yIGEgREFPKTsKCS8vICAyLiBvdGhlcndpc2UgdGhlIHJlYWxtL3VzZXIgdGhhdCByYW4gdGhlIGFkZHBrZzsKCS8vICAzLiBvdGhlcndpc2UgdGhlIEVPQSB0aGF0IHNpZ25lZCB0aGUgZGVwbG95IHRyYW5zYWN0aW9uLgoJb3duZXIgOj0gYWRkcmVzcyhvd25lckFkZHJlc3MpCglpZiAhb3duZXIuSXNWYWxpZCgpIHsKCQlvd25lciA9IGN1ci5QcmV2aW91cygpLkFkZHJlc3MoKQoJfQoJaWYgIW93bmVyLklzVmFsaWQoKSB7CgkJb3duZXIgPSB1bnNhZmUuT3JpZ2luQ2FsbGVyKCkKCX0KCWlmICFvd25lci5Jc1ZhbGlkKCkgewoJCXBhbmljKCJ0b2tlbjogY2Fubm90IGRldGVybWluZSB0aGUgb3duZXIgYWRkcmVzcyIpCgl9CgoJVG9rZW4sIHByaXZhdGVMZWRnZXIgPSBncmMyMC5OZXdUb2tlbih0b2tlbk5hbWUsIHRva2VuU3ltYm9sLCB0b2tlbkRlY2ltYWxzLCAwLCBjdXIpCgl1c2VyVGVsbGVyID0gcHJpdmF0ZUxlZGdlci5DYWxsZXJUZWxsZXIoKQoJT3duYWJsZSA9IG93bmFibGUuTmV3V2l0aEFkZHJlc3Mob3duZXIpCgoJaWYgaW5pdGlhbCA+IDAgewoJCWlmIGVyciA6PSBwcml2YXRlTGVkZ2VyLk1pbnQob3duZXIsIGluaXRpYWwpOyBlcnIgIT0gbmlsIHsKCQkJcGFuaWMoZXJyKQoJCX0KCQl0b3RhbE1pbnRlZCA9IGluaXRpYWwKCX0KCgkvLyBSZWdpc3RyYXRpb24gaW4gdGhlIHN5c3RlbSBHUkMyMCByZWdpc3RyeS4gV2l0aG91dCB0aGlzIHN0ZXAgdGhlIHRva2VuCgkvLyBleGlzdHMgYnV0IGlzIGludmlzaWJsZSB0byBHbm9Td2FwLCB3YWxsZXRzIGFuZCBleHBsb3JlcnMuCgl0b2tlbktleSA9IGdyYzIwcmVnLlJlZ2lzdGVyKGNyb3NzKGN1ciksIFRva2VuLCAiIikKCglyZWFsbUFkZHIgPSBjdXIuQWRkcmVzcygpCglkZXBsb3lIZWlnaHQgPSBydW50aW1lLkNoYWluSGVpZ2h0KCkKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJlYWRzIChubyBzdGF0ZSBjb3N0LCBxdWVyeWFibGUgd2l0aCBgZ25va2V5IHF1ZXJ5IHZtL3FldmFsYCkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBOYW1lIHJldHVybnMgdGhlIHRva2VuIG5hbWUuCmZ1bmMgTmFtZSgpIHN0cmluZyB7IHJldHVybiBUb2tlbi5HZXROYW1lKCkgfQoKLy8gU3ltYm9sIHJldHVybnMgdGhlIHRpY2tlci4KZnVuYyBTeW1ib2woKSBzdHJpbmcgeyByZXR1cm4gVG9rZW4uR2V0U3ltYm9sKCkgfQoKLy8gRGVjaW1hbHMgcmV0dXJucyB0aGUgcHJlY2lzaW9uLgpmdW5jIERlY2ltYWxzKCkgaW50IHsgcmV0dXJuIFRva2VuLkdldERlY2ltYWxzKCkgfQoKLy8gVG90YWxTdXBwbHkgcmV0dXJucyB0aGUgY2lyY3VsYXRpbmcgc3VwcGx5IGluIGJhc2UgdW5pdHMuCmZ1bmMgVG90YWxTdXBwbHkoKSBpbnQ2NCB7IHJldHVybiBUb2tlbi5Ub3RhbFN1cHBseSgpIH0KCi8vIE1heFN1cHBseSByZXR1cm5zIHRoZSBoYXJkIGNlaWxpbmcgaW4gYmFzZSB1bml0czogaXQgY2FwcyB0aGUgY3VtdWxhdGl2ZQovLyBhbW91bnQgZXZlciBtaW50ZWQsIG5vdCB0aGUgY2lyY3VsYXRpbmcgc3VwcGx5LgpmdW5jIE1heFN1cHBseSgpIGludDY0IHsgcmV0dXJuIGhhcmRDYXAgfQoKLy8gVG90YWxNaW50ZWQgcmV0dXJucyB0aGUgY3VtdWxhdGl2ZSBhbW91bnQgZXZlciBtaW50ZWQuIEl0IG5ldmVyIGdvZXMgZG93biwKLy8gbm90IGV2ZW4gYWZ0ZXIgYSBCdXJuOiBoYXJkQ2FwIC0gVG90YWxNaW50ZWQoKSBpcyB0aGUgcmVtYWluaW5nIGhlYWRyb29tLgpmdW5jIFRvdGFsTWludGVkKCkgaW50NjQgeyByZXR1cm4gdG90YWxNaW50ZWQgfQoKLy8gQnVybmVkIHJldHVybnMgdGhlIHRvdGFsIGRlc3Ryb3llZDogY3VtdWxhdGl2ZSBtaW50ZWQgbWludXMgY2lyY3VsYXRpbmcuCmZ1bmMgQnVybmVkKCkgaW50NjQgeyByZXR1cm4gdG90YWxNaW50ZWQgLSBUb2tlbi5Ub3RhbFN1cHBseSgpIH0KCi8vIEhvbGRlcnMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHJlc3NlcyB3aXRoIGEgbm9uLXplcm8gYmFsYW5jZS4KZnVuYyBIb2xkZXJzKCkgaW50IHsgcmV0dXJuIFRva2VuLktub3duQWNjb3VudHMoKSB9CgovLyBCYWxhbmNlT2YgcmV0dXJucyB0aGUgYmFsYW5jZSBvZiBvd25lciBpbiBiYXNlIHVuaXRzLgpmdW5jIEJhbGFuY2VPZihvd25lciBhZGRyZXNzKSBpbnQ2NCB7IHJldHVybiBUb2tlbi5CYWxhbmNlT2Yob3duZXIpIH0KCi8vIEFsbG93YW5jZSByZXR1cm5zIGhvdyBtdWNoIHNwZW5kZXIgbWF5IGRyYXcgZnJvbSBvd25lci4KZnVuYyBBbGxvd2FuY2Uob3duZXIsIHNwZW5kZXIgYWRkcmVzcykgaW50NjQgeyByZXR1cm4gVG9rZW4uQWxsb3dhbmNlKG93bmVyLCBzcGVuZGVyKSB9CgovLyBUb2tlbktleSByZXR1cm5zIHRoZSB0b2tlbidzIGtleSBpbiB0aGUgR1JDMjAgcmVnaXN0cnkgKCI8cGtncGF0aD4uPFNZTUJPTD4iKSwKLy8gdG8gYmUgdXNlZCB3aXRoIHIvbnQvZ3JjMjByZWcgYW5kIHdpdGggR25vU3dhcC4KZnVuYyBUb2tlbktleSgpIHN0cmluZyB7IHJldHVybiB0b2tlbktleSB9CgovLyBSZWFsbUFkZHJlc3MgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVhbG0gaXRzZWxmOiB0aGUgYWRkcmVzcyB0byBzZW5kCi8vIGZ1bmRzIG1lYW50IGZvciB0aGUgY29udHJhY3QgKGFuIGFpcmRyb3AgYnVkZ2V0LCBmb3IgaW5zdGFuY2UpLgpmdW5jIFJlYWxtQWRkcmVzcygpIGFkZHJlc3MgeyByZXR1cm4gcmVhbG1BZGRyIH0KCi8vIE93bmVyIHJldHVybnMgdGhlIGN1cnJlbnQgYWRtaW5pc3RyYXRvciAoIiIgb25jZSBvd25lcnNoaXAgaGFzIGJlZW4gZHJvcHBlZCkuCmZ1bmMgT3duZXIoKSBhZGRyZXNzIHsgcmV0dXJuIE93bmFibGUuT3duZXIoKSB9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU3RhbmRhcmQgR1JDMjAgd3JpdGVzCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gVHJhbnNmZXIgc2VuZHMgYW1vdW50IChiYXNlIHVuaXRzKSBmcm9tIHRoZSBjYWxsZXIgdG8gdG8uCmZ1bmMgVHJhbnNmZXIoY3VyIHJlYWxtLCB0byBhZGRyZXNzLCBhbW91bnQgaW50NjQpIHsKCWNoZWNrRXJyKHVzZXJUZWxsZXIuVHJhbnNmZXIoMCwgY3VyLCB0bywgYW1vdW50KSkKfQoKLy8gQXBwcm92ZSBhdXRob3Jpc2VzIHNwZW5kZXIgdG8gZHJhdyB1cCB0byBhbW91bnQgZnJvbSB0aGUgY2FsbGVyLgpmdW5jIEFwcHJvdmUoY3VyIHJlYWxtLCBzcGVuZGVyIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgewoJY2hlY2tFcnIodXNlclRlbGxlci5BcHByb3ZlKDAsIGN1ciwgc3BlbmRlciwgYW1vdW50KSkKfQoKLy8gVHJhbnNmZXJGcm9tIG1vdmVzIGFtb3VudCBmcm9tIGZyb20gdG8gdG8sIGNvbnN1bWluZyB0aGUgY2FsbGVyJ3MgYWxsb3dhbmNlLgpmdW5jIFRyYW5zZmVyRnJvbShjdXIgcmVhbG0sIGZyb20sIHRvIGFkZHJlc3MsIGFtb3VudCBpbnQ2NCkgewoJY2hlY2tFcnIodXNlclRlbGxlci5UcmFuc2ZlckZyb20oMCwgY3VyLCBmcm9tLCB0bywgYW1vdW50KSkKfQoKLy8gQnVybiBkZXN0cm95cyBhbW91bnQgb2YgdGhlIGNhbGxlcidzIHRva2VucywgcmVkdWNpbmcgdGhlIHN1cHBseS4KZnVuYyBCdXJuKGN1ciByZWFsbSwgYW1vdW50IGludDY0KSB7CgljaGVja0Vycihwcml2YXRlTGVkZ2VyLkJ1cm4oY3VyLlByZXZpb3VzKCkuQWRkcmVzcygpLCBhbW91bnQpKQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQWRtaW5pc3RyYXRpb24KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBNaW50IGNyZWF0ZXMgYW1vdW50IChiYXNlIHVuaXRzKSBpbiBmYXZvdXIgb2YgdG8uIE93bmVyIG9ubHksIGFuZCBuZXZlcgovLyBiZXlvbmQgbWF4U3VwcGx5LiBBZnRlciBEcm9wT3duZXJzaGlwIHRoaXMgZnVuY3Rpb24gaXMgdW51c2FibGUgZm9yZXZlcjogdGhlCi8vIHN1cHBseSBiZWNvbWVzIGltbXV0YWJsZSB1cHdhcmRzLgpmdW5jIE1pbnQoY3VyIHJlYWxtLCB0byBhZGRyZXNzLCBhbW91bnQgaW50NjQpIHsKCU93bmFibGUuQXNzZXJ0T3duZWRCeShjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkpCglpZiBhbW91bnQgPD0gMCB7CgkJcGFuaWMoInRva2VuOiBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSIpCgl9CglpZiB0b3RhbE1pbnRlZCA+IGhhcmRDYXAtYW1vdW50IHsKCQlwYW5pYygidG9rZW46IG1pbnQgd291bGQgZXhjZWVkIG1heFN1cHBseSIpCgl9Cgl0b3RhbE1pbnRlZCArPSBhbW91bnQKCWNoZWNrRXJyKHByaXZhdGVMZWRnZXIuTWludCh0bywgYW1vdW50KSkKfQoKLy8gVHJhbnNmZXJPd25lcnNoaXAgaGFuZHMgYWRtaW5pc3RyYXRpb24gb3ZlciB0byBuZXdPd25lci4KZnVuYyBUcmFuc2Zlck93bmVyc2hpcChjdXIgcmVhbG0sIG5ld093bmVyIGFkZHJlc3MpIHsKCWNoZWNrRXJyKE93bmFibGUuVHJhbnNmZXJPd25lcnNoaXAoMCwgY3VyLCBuZXdPd25lcikpCn0KCi8vIERyb3BPd25lcnNoaXAgZ2l2ZXMgdXAgYWRtaW5pc3RyYXRpb24gZm9yIGdvb2Q6IG5vIGZ1dHVyZSBtaW50IHdpbGwgZXZlciBiZQovLyBwb3NzaWJsZS4gVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgdW5kb25lLgpmdW5jIERyb3BPd25lcnNoaXAoY3VyIHJlYWxtKSB7CgljaGVja0VycihPd25hYmxlLkRyb3BPd25lcnNoaXAoMCwgY3VyKSkKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJlbmRlcgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZ1bmMgUmVuZGVyKHBhdGggc3RyaW5nKSBzdHJpbmcgewoJcGFydHMgOj0gc3RyaW5ncy5TcGxpdChwYXRoLCAiLyIpCgoJc3dpdGNoIHsKCWNhc2UgcGF0aCA9PSAiIjoKCQlyZXR1cm4gcmVuZGVySG9tZSgpCgljYXNlIGxlbihwYXJ0cykgPT0gMiAmJiBwYXJ0c1swXSA9PSAiYmFsYW5jZSI6CgkJYWRkciA6PSBhZGRyZXNzKHBhcnRzWzFdKQoJCWlmICFhZGRyLklzVmFsaWQoKSB7CgkJCXJldHVybiAiaW52YWxpZCBhZGRyZXNzXG4iCgkJfQoJCXJldHVybiB1Zm10LlNwcmludGYoIiVzICVzXG4iLCBmb3JtYXQoVG9rZW4uQmFsYW5jZU9mKGFkZHIpKSwgdG9rZW5TeW1ib2wpCglkZWZhdWx0OgoJCXJldHVybiAiNDA0XG4iCgl9Cn0KCmZ1bmMgcmVuZGVySG9tZSgpIHN0cmluZyB7CglzIDo9ICIiCglpZiB0b2tlbkxvZ29VUkkgIT0gIiIgewoJCXMgKz0gdWZtdC5TcHJpbnRmKCIhWyVzXSglcylcblxuIiwgdG9rZW5TeW1ib2wsIHRva2VuTG9nb1VSSSkKCX0KCXMgKz0gdWZtdC5TcHJpbnRmKCIjICVzICgkJXMpXG5cbiIsIHRva2VuTmFtZSwgdG9rZW5TeW1ib2wpCglpZiB0b2tlbkRlc2NyaXB0aW9uICE9ICIiIHsKCQlzICs9IHRva2VuRGVzY3JpcHRpb24gKyAiXG5cbiIKCX0KCXMgKz0gInwgfCB8XG58LS0tfC0tLXxcbiIKCXMgKz0gdWZtdC5TcHJpbnRmKCJ8IFN5bWJvbCB8ICVzIHxcbiIsIHRva2VuU3ltYm9sKQoJcyArPSB1Zm10LlNwcmludGYoInwgRGVjaW1hbHMgfCAlZCB8XG4iLCB0b2tlbkRlY2ltYWxzKQoJcyArPSB1Zm10LlNwcmludGYoInwgQ2lyY3VsYXRpbmcgc3VwcGx5IHwgJXMgfFxuIiwgZm9ybWF0KFRva2VuLlRvdGFsU3VwcGx5KCkpKQoJcyArPSB1Zm10LlNwcmludGYoInwgTWF4IHN1cHBseSB8ICVzIHxcbiIsIGZvcm1hdChoYXJkQ2FwKSkKCXMgKz0gdWZtdC5TcHJpbnRmKCJ8IE1pbnRlZCBpbiB0b3RhbCB8ICVzIHxcbiIsIGZvcm1hdCh0b3RhbE1pbnRlZCkpCglzICs9IHVmbXQuU3ByaW50ZigifCBCdXJuZWQgfCAlcyB8XG4iLCBmb3JtYXQoQnVybmVkKCkpKQoJcyArPSB1Zm10LlNwcmludGYoInwgSG9sZGVycyB8ICVkIHxcbiIsIFRva2VuLktub3duQWNjb3VudHMoKSkKCXMgKz0gdWZtdC5TcHJpbnRmKCJ8IFJlZ2lzdHJ5IGtleSB8IGAlc2AgfFxuIiwgdG9rZW5LZXkpCglzICs9IHVmbXQuU3ByaW50ZigifCBNaW50IHwgJXMgfFxuIiwgbWludFN0YXR1cygpKQoJcyArPSB1Zm10LlNwcmludGYoInwgRGVwbG95ZWQgYXQgYmxvY2sgfCAlZCB8XG4iLCBkZXBsb3lIZWlnaHQpCglzICs9ICJcbiIKCWlmIHRva2VuV2Vic2l0ZSAhPSAiIiB7CgkJcyArPSB1Zm10LlNwcmludGYoIi0gV2Vic2l0ZTogJXNcbiIsIHRva2VuV2Vic2l0ZSkKCX0KCWlmIHRva2VuVHdpdHRlciAhPSAiIiB7CgkJcyArPSB1Zm10LlNwcmludGYoIi0gWDogJXNcbiIsIHRva2VuVHdpdHRlcikKCX0KCXMgKz0gIlxuTG9vayB1cCBhIGJhbGFuY2U6IGA6YmFsYW5jZS88YWRkcmVzcz5gXG4iCglyZXR1cm4gcwp9CgpmdW5jIG1pbnRTdGF0dXMoKSBzdHJpbmcgewoJaWYgIU93bmFibGUuT3duZXIoKS5Jc1ZhbGlkKCkgewoJCXJldHVybiAiKipjbG9zZWQgZm9yIGdvb2QqKiAob3duZXJzaGlwIGRyb3BwZWQpIgoJfQoJaWYgdG90YWxNaW50ZWQgPj0gaGFyZENhcCB7CgkJcmV0dXJuICIqKmV4aGF1c3RlZCoqOiB0aGUgbWludCBjZWlsaW5nIGlzIHJlYWNoZWQsIG5vIGZ1cnRoZXIgdG9rZW4gY2FuIGJlIGNyZWF0ZWQiCgl9CglyZXR1cm4gdWZtdC5TcHJpbnRmKCIlcyBsZWZ0LCBjb250cm9sbGVkIGJ5ICVzIiwKCQlmb3JtYXQoaGFyZENhcC10b3RhbE1pbnRlZCksIE93bmFibGUuT3duZXIoKS5TdHJpbmcoKSkKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEhlbHBlcnMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBmb3JtYXQgdHVybnMgYmFzZSB1bml0cyBpbnRvIGEgcmVhZGFibGUgZGVjaW1hbCBzdHJpbmcuCi8vCi8vIFRoZSBzaWduIGlzIGFwcGxpZWQgYXQgdGhlIGVuZCByYXRoZXIgdGhhbiBieSBuZWdhdGluZyB2OiBmb3IgfHZ8IDwgdW5pdCB0aGUKLy8gd2hvbGUgcGFydCBpcyAwLCBzbyB0aGUgbWludXMgd291bGQgYmUgbG9zdCAoZm9ybWF0KC01MDAwMDApIGdhdmUgIjAuNSIpLgovLyBOZWdhdGluZyB2IGRpcmVjdGx5IGlzIG5vIGdvb2QgZWl0aGVyLCBiZWNhdXNlIC1tYXRoLk1pbkludDY0IG92ZXJmbG93czsKLy8gaW5zdGVhZCB0aGUgd2hvbGUgcGFydCBhbmQgdGhlIHJlbWFpbmRlciBhcmUgbmVnYXRlZCwgYm90aCBzYWZlIGluIG1hZ25pdHVkZS4KZnVuYyBmb3JtYXQodiBpbnQ2NCkgc3RyaW5nIHsKCWlmIHVuaXQgPT0gMSB7CgkJcmV0dXJuIHN0cmNvbnYuRm9ybWF0SW50KHYsIDEwKQoJfQoJbmVnIDo9IHYgPCAwCgl3aG9sZSA6PSB2IC8gdW5pdAoJZnJhYyA6PSB2ICUgdW5pdAoJaWYgd2hvbGUgPCAwIHsKCQl3aG9sZSA9IC13aG9sZQoJfQoJaWYgZnJhYyA8IDAgewoJCWZyYWMgPSAtZnJhYwoJfQoKCWZzIDo9IHN0cmNvbnYuRm9ybWF0SW50KGZyYWMsIDEwKQoJZm9yIGxlbihmcykgPCB0b2tlbkRlY2ltYWxzIHsKCQlmcyA9ICIwIiArIGZzCgl9CglmcyA9IHN0cmluZ3MuVHJpbVJpZ2h0KGZzLCAiMCIpCgoJb3V0IDo9IHN0cmNvbnYuRm9ybWF0SW50KHdob2xlLCAxMCkKCWlmIGZzICE9ICIiIHsKCQlvdXQgKz0gIi4iICsgZnMKCX0KCWlmIG5lZyB7CgkJb3V0ID0gIi0iICsgb3V0Cgl9CglyZXR1cm4gb3V0Cn0KCmZ1bmMgcG93MTAobiBpbnQpIGludDY0IHsKCXIgOj0gaW50NjQoMSkKCWZvciBpIDo9IDA7IGkgPCBuOyBpKysgewoJCXIgKj0gMTAKCX0KCXJldHVybiByCn0KCmZ1bmMgbXVsT3JQYW5pYyhhLCBiIGludDY0KSBpbnQ2NCB7CglpZiBhIDwgMCB8fCBiIDw9IDAgewoJCXBhbmljKCJ0b2tlbjogaW52YWxpZCBzdXBwbHkgcGFyYW1ldGVycyIpCgl9CglpZiBhID4gbWF0aC5NYXhJbnQ2NC9iIHsKCQlwYW5pYygidG9rZW46IHN1cHBseSAqIDEwXmRlY2ltYWxzIGV4Y2VlZHMgaW50NjQiKQoJfQoJcmV0dXJuIGEgKiBiCn0KCmZ1bmMgY2hlY2tFcnIoZXJyIGVycm9yKSB7CglpZiBlcnIgIT0gbmlsIHsKCQlwYW5pYyhlcnIuRXJyb3IoKSkKCX0KfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwSEQiAjs4cEgo0MDAwMHVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohA6IOaqmxiy8r0XdV4axy1OxflbovXMC4iYrCmMnOl7XJEkAWp/aQTq6oMxoWkqEqLiAJrjdKGQllC0tkVmr56Y6tyn3l9EVIRPU9C0v3P/BbdPbgXBzCFnAgAcX0eglKP/qVGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl