Transaction executed successfully
Transaction Details
Inspect execution, participants, message data, gas usage, events and raw transaction data.
Transaction hash
42CCEA220C47C158FE78338C648EB64C010F33FF162F4D4314762C810B8B60DE
Transaction overview
Execution summary
TX INDEX
0
Position in block
GAS WANTED
44,576,602
Requested gas limit
GAS USED
22,288,331
Gas consumed
FEE
44577ugnot
Transaction fee
Participants
Message
Message #1
m_addpkg
Arguments
g1ftls0ctrrj0y96sr9dq906j7gdqhg9exgcvaey
Execution log
msg:0,success:true,log:,events:[]
Events
No events emitted by this transaction.
Raw encoded transaction
CqxlCgwvdm0ubV9hZGRwa2cSm2UKKGcxZnRsczBjdHJyajB5OTZzcjlkcTkwNmo3Z2RxaGc5ZXhnY3ZhZXkS7mQKB2dyYzExNTUSH2duby5sYW5kL3AvYWtrYWRpYS9iZXRhL2dyYzExNTUaxE0KF2Jhc2ljX2dyYzExNTVfdG9rZW4uZ25vEqhNcGFja2FnZSBncmMxMTU1CgppbXBvcnQgKAoJIm1hdGgvb3ZlcmZsb3ciCgoJImduby5sYW5kL3AvbnQvYXZsL3YwIgoJImduby5sYW5kL3AvbnQvdWZtdC92MCIKKQoKdHlwZSBiYXNpY0dSQzExNTVUb2tlbiBzdHJ1Y3QgewoJdXJpICAgICAgICAgICAgICAgc3RyaW5nCgliYWxhbmNlcyAgICAgICAgICBhdmwuVHJlZSAvLyAiVG9rZW5JZDpBZGRyZXNzIiAtPiBpbnQ2NAoJb3BlcmF0b3JBcHByb3ZhbHMgYXZsLlRyZWUgLy8gIk93bmVyQWRkcmVzczpPcGVyYXRvckFkZHJlc3MiIC0+IGJvb2wKfQoKdmFyIF8gSUdSQzExNTUgPSAoKmJhc2ljR1JDMTE1NVRva2VuKShuaWwpCnZhciBfIElHUkMxMTU1UmVhZGVyID0gKCpiYXNpY0dSQzExNTVUb2tlbikobmlsKQoKLy8gUmV0dXJucyBuZXcgYmFzaWMgR1JDMTE1NSB0b2tlbgpmdW5jIE5ld0Jhc2ljR1JDMTE1NVRva2VuKHVyaSBzdHJpbmcpICpiYXNpY0dSQzExNTVUb2tlbiB7CglyZXR1cm4gJmJhc2ljR1JDMTE1NVRva2VuewoJCXVyaTogICAgICAgICAgICAgICB1cmksCgkJYmFsYW5jZXM6ICAgICAgICAgIGF2bC5UcmVle30sCgkJb3BlcmF0b3JBcHByb3ZhbHM6IGF2bC5UcmVle30sCgl9Cn0KCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBVcmkoKSBzdHJpbmcgeyByZXR1cm4gcy51cmkgfQoKLy8gQmFsYW5jZU9mIHJldHVybnMgdGhlIGlucHV0IGFkZHJlc3MncyBiYWxhbmNlIG9mIHRoZSB0b2tlbiB0eXBlIHJlcXVlc3RlZApmdW5jIChzICpiYXNpY0dSQzExNTVUb2tlbikgQmFsYW5jZU9mKGFkZHIgYWRkcmVzcywgdGlkIFRva2VuSUQpIChpbnQ2NCwgZXJyb3IpIHsKCWlmICFpc1ZhbGlkQWRkcmVzcyhhZGRyKSB7CgkJcmV0dXJuIDAsIEVyckludmFsaWRBZGRyZXNzCgl9CgoJa2V5IDo9IHN0cmluZyh0aWQpICsgIjoiICsgYWRkci5TdHJpbmcoKQoJYmFsYW5jZSA6PSBzLmJhbGFuY2VzLkdldChrZXkpCglpZiBiYWxhbmNlID09IG5pbCB7CgkJcmV0dXJuIDAsIG5pbAoJfQoKCXJldHVybiBiYWxhbmNlLihpbnQ2NCksIG5pbAp9CgovLyBCYWxhbmNlT2ZCYXRjaCByZXR1cm5zIHRoZSBiYWxhbmNlIG9mIG11bHRpcGxlIGFjY291bnQvdG9rZW4gcGFpcnMKZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIEJhbGFuY2VPZkJhdGNoKG93bmVycyBbXWFkZHJlc3MsIGJhdGNoIFtdVG9rZW5JRCkgKFtdaW50NjQsIGVycm9yKSB7CglpZiBsZW4ob3duZXJzKSAhPSBsZW4oYmF0Y2gpIHsKCQlyZXR1cm4gbmlsLCBFcnJNaXNtYXRjaExlbmd0aAoJfQoKCWJhbGFuY2VPZkJhdGNoIDo9IG1ha2UoW11pbnQ2NCwgbGVuKG93bmVycykpCgoJZm9yIGkgOj0gMDsgaSA8IGxlbihvd25lcnMpOyBpKysgewoJCWJhbGFuY2VPZkJhdGNoW2ldLCBfID0gcy5CYWxhbmNlT2Yob3duZXJzW2ldLCBiYXRjaFtpXSkKCX0KCglyZXR1cm4gYmFsYW5jZU9mQmF0Y2gsIG5pbAp9CgovLyBTZXRBcHByb3ZhbEZvckFsbCBjYW4gYXBwcm92ZSB0aGUgb3BlcmF0b3IgdG8gb3BlcmF0ZSBvbiBhbGwgdG9rZW5zCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBTZXRBcHByb3ZhbEZvckFsbChjYWxsZXIsIG9wZXJhdG9yIGFkZHJlc3MsIGFwcHJvdmVkIGJvb2wpIGVycm9yIHsKCWlmICFpc1ZhbGlkQWRkcmVzcyhjYWxsZXIpIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWlmICFpc1ZhbGlkQWRkcmVzcyhvcGVyYXRvcikgewoJCXJldHVybiBFcnJJbnZhbGlkQWRkcmVzcwoJfQoKCXJldHVybiBzLnNldEFwcHJvdmFsRm9yQWxsKGNhbGxlciwgb3BlcmF0b3IsIGFwcHJvdmVkKQp9CgovLyBJc0FwcHJvdmVkRm9yQWxsIHJldHVybnMgdHJ1ZSBpZiBvcGVyYXRvciBpcyB0aGUgb3duZXIgb3IgaXMgYXBwcm92ZWQgZm9yIGFsbCBieSB0aGUgb3duZXIuCi8vIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZQpmdW5jIChzICpiYXNpY0dSQzExNTVUb2tlbikgSXNBcHByb3ZlZEZvckFsbChvd25lciwgb3BlcmF0b3IgYWRkcmVzcykgYm9vbCB7CglpZiBvcGVyYXRvciA9PSBvd25lciB7CgkJcmV0dXJuIHRydWUKCX0KCWtleSA6PSBvd25lci5TdHJpbmcoKSArICI6IiArIG9wZXJhdG9yLlN0cmluZygpCglhcHByb3ZlZCA6PSBzLm9wZXJhdG9yQXBwcm92YWxzLkdldChrZXkpCglpZiBhcHByb3ZlZCA9PSBuaWwgewoJCXJldHVybiBmYWxzZQoJfQoKCWFiLCBvayA6PSBhcHByb3ZlZC4oYm9vbCkKCXJldHVybiBvayAmJiBhYgp9CgovLyBTYWZlbHkgdHJhbnNmZXJzIGB0b2tlbklkYCB0b2tlbiBmcm9tIGBmcm9tYCB0byBgdG9gLCBjaGVja2luZyB0aGF0Ci8vIGNvbnRyYWN0IHJlY2lwaWVudHMgYXJlIGF3YXJlIG9mIHRoZSBHUkMxMTU1IHByb3RvY29sIHRvIHByZXZlbnQKLy8gdG9rZW5zIGZyb20gYmVpbmcgZm9yZXZlciBsb2NrZWQuCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBTYWZlVHJhbnNmZXJGcm9tKGNhbGxlciwgZnJvbSwgdG8gYWRkcmVzcywgdGlkIFRva2VuSUQsIGFtb3VudCBpbnQ2NCkgZXJyb3IgewoJaWYgIWlzVmFsaWRBZGRyZXNzKGNhbGxlcikgewoJCXJldHVybiBFcnJJbnZhbGlkQWRkcmVzcwoJfQoJaWYgIXMuSXNBcHByb3ZlZEZvckFsbChmcm9tLCBjYWxsZXIpIHsKCQlyZXR1cm4gRXJyQ2FsbGVySXNOb3RPd25lck9yQXBwcm92ZWQKCX0KCgllcnIgOj0gcy5zYWZlQmF0Y2hUcmFuc2ZlckZyb20oY2FsbGVyLCBmcm9tLCB0bywgW11Ub2tlbklEe3RpZH0sIFtdaW50NjR7YW1vdW50fSkKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCglpZiAhcy5kb1NhZmVUcmFuc2ZlckFjY2VwdGFuY2VDaGVjayhjYWxsZXIsIGZyb20sIHRvLCB0aWQsIGFtb3VudCkgewoJCXJldHVybiBFcnJUcmFuc2ZlclRvUmVqZWN0ZWRPck5vbkdSQzExNTVSZWNlaXZlcgoJfQoKCWVtaXQoJlRyYW5zZmVyU2luZ2xlRXZlbnR7Y2FsbGVyLCBmcm9tLCB0bywgdGlkLCBhbW91bnR9KQoKCXJldHVybiBuaWwKfQoKLy8gU2FmZWx5IHRyYW5zZmVycyBhIGBiYXRjaGAgb2YgdG9rZW5zIGZyb20gYGZyb21gIHRvIGB0b2AsIGNoZWNraW5nIHRoYXQKLy8gY29udHJhY3QgcmVjaXBpZW50cyBhcmUgYXdhcmUgb2YgdGhlIEdSQzExNTUgcHJvdG9jb2wgdG8gcHJldmVudAovLyB0b2tlbnMgZnJvbSBiZWluZyBmb3JldmVyIGxvY2tlZC4KZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIFNhZmVCYXRjaFRyYW5zZmVyRnJvbShjYWxsZXIsIGZyb20sIHRvIGFkZHJlc3MsIGJhdGNoIFtdVG9rZW5JRCwgYW1vdW50cyBbXWludDY0KSBlcnJvciB7CglpZiAhaXNWYWxpZEFkZHJlc3MoY2FsbGVyKSB7CgkJcmV0dXJuIEVyckludmFsaWRBZGRyZXNzCgl9CglpZiAhcy5Jc0FwcHJvdmVkRm9yQWxsKGZyb20sIGNhbGxlcikgewoJCXJldHVybiBFcnJDYWxsZXJJc05vdE93bmVyT3JBcHByb3ZlZAoJfQoKCWVyciA6PSBzLnNhZmVCYXRjaFRyYW5zZmVyRnJvbShjYWxsZXIsIGZyb20sIHRvLCBiYXRjaCwgYW1vdW50cykKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCglpZiAhcy5kb1NhZmVCYXRjaFRyYW5zZmVyQWNjZXB0YW5jZUNoZWNrKGNhbGxlciwgZnJvbSwgdG8sIGJhdGNoLCBhbW91bnRzKSB7CgkJcmV0dXJuIEVyclRyYW5zZmVyVG9SZWplY3RlZE9yTm9uR1JDMTE1NVJlY2VpdmVyCgl9CgoJZW1pdCgmVHJhbnNmZXJCYXRjaEV2ZW50e2NhbGxlciwgZnJvbSwgdG8sIGJhdGNoLCBhbW91bnRzfSkKCglyZXR1cm4gbmlsCn0KCi8vIENyZWF0ZXMgYGFtb3VudGAgdG9rZW5zIG9mIHRva2VuIHR5cGUgYGlkYCwgYW5kIGFzc2lnbnMgdGhlbSB0byBgdG9gLiBBbHNvIGNoZWNrcyB0aGF0Ci8vIGNvbnRyYWN0IHJlY2lwaWVudHMgYXJlIHVzaW5nIEdSQzExNTUgcHJvdG9jb2wuCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBTYWZlTWludChjYWxsZXIsIHRvIGFkZHJlc3MsIHRpZCBUb2tlbklELCBhbW91bnQgaW50NjQpIGVycm9yIHsKCWlmICFpc1ZhbGlkQWRkcmVzcyhjYWxsZXIpIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWVyciA6PSBzLm1pbnRCYXRjaChjYWxsZXIsIHRvLCBbXVRva2VuSUR7dGlkfSwgW11pbnQ2NHthbW91bnR9KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGVycgoJfQoKCWlmICFzLmRvU2FmZVRyYW5zZmVyQWNjZXB0YW5jZUNoZWNrKGNhbGxlciwgemVyb0FkZHJlc3MsIHRvLCB0aWQsIGFtb3VudCkgewoJCXJldHVybiBFcnJUcmFuc2ZlclRvUmVqZWN0ZWRPck5vbkdSQzExNTVSZWNlaXZlcgoJfQoKCWVtaXQoJlRyYW5zZmVyU2luZ2xlRXZlbnR7Y2FsbGVyLCB6ZXJvQWRkcmVzcywgdG8sIHRpZCwgYW1vdW50fSkKCglyZXR1cm4gbmlsCn0KCi8vIEJhdGNoIHZlcnNpb24gb2YgYFNhZmVNaW50KClgLiBBbHNvIGNoZWNrcyB0aGF0Ci8vIGNvbnRyYWN0IHJlY2lwaWVudHMgYXJlIHVzaW5nIEdSQzExNTUgcHJvdG9jb2wuCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBTYWZlQmF0Y2hNaW50KGNhbGxlciwgdG8gYWRkcmVzcywgYmF0Y2ggW11Ub2tlbklELCBhbW91bnRzIFtdaW50NjQpIGVycm9yIHsKCWlmICFpc1ZhbGlkQWRkcmVzcyhjYWxsZXIpIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWVyciA6PSBzLm1pbnRCYXRjaChjYWxsZXIsIHRvLCBiYXRjaCwgYW1vdW50cykKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCglpZiAhcy5kb1NhZmVCYXRjaFRyYW5zZmVyQWNjZXB0YW5jZUNoZWNrKGNhbGxlciwgemVyb0FkZHJlc3MsIHRvLCBiYXRjaCwgYW1vdW50cykgewoJCXJldHVybiBFcnJUcmFuc2ZlclRvUmVqZWN0ZWRPck5vbkdSQzExNTVSZWNlaXZlcgoJfQoKCWVtaXQoJlRyYW5zZmVyQmF0Y2hFdmVudHtjYWxsZXIsIHplcm9BZGRyZXNzLCB0bywgYmF0Y2gsIGFtb3VudHN9KQoKCXJldHVybiBuaWwKfQoKLy8gRGVzdHJveXMgYGFtb3VudGAgdG9rZW5zIG9mIHRva2VuIHR5cGUgYGlkYCBmcm9tIGBmcm9tYC4KZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIEJ1cm4oY2FsbGVyLCBmcm9tIGFkZHJlc3MsIHRpZCBUb2tlbklELCBhbW91bnQgaW50NjQpIGVycm9yIHsKCWlmICFpc1ZhbGlkQWRkcmVzcyhjYWxsZXIpIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWVyciA6PSBzLmJ1cm5CYXRjaChjYWxsZXIsIGZyb20sIFtdVG9rZW5JRHt0aWR9LCBbXWludDY0e2Ftb3VudH0pCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZXJyCgl9CgoJZW1pdCgmVHJhbnNmZXJTaW5nbGVFdmVudHtjYWxsZXIsIGZyb20sIHplcm9BZGRyZXNzLCB0aWQsIGFtb3VudH0pCgoJcmV0dXJuIG5pbAp9CgovLyBCYXRjaCB2ZXJzaW9uIG9mIGBCdXJuKClgCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBCYXRjaEJ1cm4oY2FsbGVyLCBmcm9tIGFkZHJlc3MsIGJhdGNoIFtdVG9rZW5JRCwgYW1vdW50cyBbXWludDY0KSBlcnJvciB7CglpZiAhaXNWYWxpZEFkZHJlc3MoY2FsbGVyKSB7CgkJcmV0dXJuIEVyckludmFsaWRBZGRyZXNzCgl9CgllcnIgOj0gcy5idXJuQmF0Y2goY2FsbGVyLCBmcm9tLCBiYXRjaCwgYW1vdW50cykKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBlcnIKCX0KCgllbWl0KCZUcmFuc2ZlckJhdGNoRXZlbnR7Y2FsbGVyLCBmcm9tLCB6ZXJvQWRkcmVzcywgYmF0Y2gsIGFtb3VudHN9KQoKCXJldHVybiBuaWwKfQoKLyogSGVscGVyIG1ldGhvZHMgKi8KCi8vIEhlbHBlciBmb3IgU2V0QXBwcm92YWxGb3JBbGwoKTogYXBwcm92ZSBgb3BlcmF0b3JgIHRvIG9wZXJhdGUgb24gYWxsIG9mIGBvd25lcmAgdG9rZW5zCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBzZXRBcHByb3ZhbEZvckFsbChvd25lciwgb3BlcmF0b3IgYWRkcmVzcywgYXBwcm92ZWQgYm9vbCkgZXJyb3IgewoJaWYgb3duZXIgPT0gb3BlcmF0b3IgewoJCXJldHVybiBuaWwKCX0KCglrZXkgOj0gb3duZXIuU3RyaW5nKCkgKyAiOiIgKyBvcGVyYXRvci5TdHJpbmcoKQoJaWYgYXBwcm92ZWQgewoJCXMub3BlcmF0b3JBcHByb3ZhbHMuU2V0KGtleSwgYXBwcm92ZWQpCgl9IGVsc2UgewoJCXMub3BlcmF0b3JBcHByb3ZhbHMuUmVtb3ZlKGtleSkKCX0KCgllbWl0KCZBcHByb3ZhbEZvckFsbEV2ZW50e293bmVyLCBvcGVyYXRvciwgYXBwcm92ZWR9KQoKCXJldHVybiBuaWwKfQoKLy8gSGVscGVyIGZvciBTYWZlVHJhbnNmZXJGcm9tKCkgYW5kIFNhZmVCYXRjaFRyYW5zZmVyRnJvbSgpCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBzYWZlQmF0Y2hUcmFuc2ZlckZyb20oY2FsbGVyLCBmcm9tLCB0byBhZGRyZXNzLCBiYXRjaCBbXVRva2VuSUQsIGFtb3VudHMgW11pbnQ2NCkgZXJyb3IgewoJaWYgbGVuKGJhdGNoKSAhPSBsZW4oYW1vdW50cykgewoJCXJldHVybiBFcnJNaXNtYXRjaExlbmd0aAoJfQoJaWYgIWlzVmFsaWRBZGRyZXNzKGZyb20pIHx8ICFpc1ZhbGlkQWRkcmVzcyh0bykgewoJCXJldHVybiBFcnJJbnZhbGlkQWRkcmVzcwoJfQoJaWYgZnJvbSA9PSB0byB7CgkJcmV0dXJuIEVyckNhbm5vdFRyYW5zZmVyVG9TZWxmCgl9Cglmb3IgXywgYW1vdW50IDo9IHJhbmdlIGFtb3VudHMgewoJCWlmIGFtb3VudCA8IDAgewoJCQlyZXR1cm4gRXJySW52YWxpZEFtb3VudAoJCX0KCX0KCglzLmJlZm9yZVRva2VuVHJhbnNmZXIoY2FsbGVyLCBmcm9tLCB0bywgYmF0Y2gsIGFtb3VudHMpCgoJZm9yIGkgOj0gMDsgaSA8IGxlbihiYXRjaCk7IGkrKyB7CgkJdGlkIDo9IGJhdGNoW2ldCgkJYW1vdW50IDo9IGFtb3VudHNbaV0KCQlmcm9tQmFsYW5jZSwgZXJyIDo9IHMuQmFsYW5jZU9mKGZyb20sIHRpZCkKCQlpZiBlcnIgIT0gbmlsIHsKCQkJcmV0dXJuIGVycgoJCX0KCQlpZiBmcm9tQmFsYW5jZSA8IGFtb3VudCB7CgkJCXJldHVybiBFcnJJbnN1ZmZpY2llbnRCYWxhbmNlCgkJfQoJCXRvQmFsYW5jZSwgZXJyIDo9IHMuQmFsYW5jZU9mKHRvLCB0aWQpCgkJaWYgZXJyICE9IG5pbCB7CgkJCXJldHVybiBlcnIKCQl9CgoJCWZyb21CYWxhbmNlID0gb3ZlcmZsb3cuU3ViNjRwKGZyb21CYWxhbmNlLCBhbW91bnQpCgkJdG9CYWxhbmNlID0gb3ZlcmZsb3cuQWRkNjRwKHRvQmFsYW5jZSwgYW1vdW50KQoJCWZyb21CYWxhbmNlS2V5IDo9IHN0cmluZyh0aWQpICsgIjoiICsgZnJvbS5TdHJpbmcoKQoJCXRvQmFsYW5jZUtleSA6PSBzdHJpbmcodGlkKSArICI6IiArIHRvLlN0cmluZygpCgkJcy5iYWxhbmNlcy5TZXQoZnJvbUJhbGFuY2VLZXksIGZyb21CYWxhbmNlKQoJCXMuYmFsYW5jZXMuU2V0KHRvQmFsYW5jZUtleSwgdG9CYWxhbmNlKQoJfQoKCXMuYWZ0ZXJUb2tlblRyYW5zZmVyKGNhbGxlciwgZnJvbSwgdG8sIGJhdGNoLCBhbW91bnRzKQoKCXJldHVybiBuaWwKfQoKLy8gSGVscGVyIGZvciBTYWZlTWludCgpIGFuZCBTYWZlQmF0Y2hNaW50KCkKZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIG1pbnRCYXRjaChjYWxsZXIsIHRvIGFkZHJlc3MsIGJhdGNoIFtdVG9rZW5JRCwgYW1vdW50cyBbXWludDY0KSBlcnJvciB7CglpZiBsZW4oYmF0Y2gpICE9IGxlbihhbW91bnRzKSB7CgkJcmV0dXJuIEVyck1pc21hdGNoTGVuZ3RoCgl9CglpZiAhaXNWYWxpZEFkZHJlc3ModG8pIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWZvciBfLCBhbW91bnQgOj0gcmFuZ2UgYW1vdW50cyB7CgkJaWYgYW1vdW50IDwgMCB7CgkJCXJldHVybiBFcnJJbnZhbGlkQW1vdW50CgkJfQoJfQoKCXMuYmVmb3JlVG9rZW5UcmFuc2ZlcihjYWxsZXIsIHplcm9BZGRyZXNzLCB0bywgYmF0Y2gsIGFtb3VudHMpCgoJZm9yIGkgOj0gMDsgaSA8IGxlbihiYXRjaCk7IGkrKyB7CgkJdGlkIDo9IGJhdGNoW2ldCgkJYW1vdW50IDo9IGFtb3VudHNbaV0KCQl0b0JhbGFuY2UsIGVyciA6PSBzLkJhbGFuY2VPZih0bywgdGlkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZXJyCgkJfQoJCXRvQmFsYW5jZSA9IG92ZXJmbG93LkFkZDY0cCh0b0JhbGFuY2UsIGFtb3VudCkKCQl0b0JhbGFuY2VLZXkgOj0gc3RyaW5nKHRpZCkgKyAiOiIgKyB0by5TdHJpbmcoKQoJCXMuYmFsYW5jZXMuU2V0KHRvQmFsYW5jZUtleSwgdG9CYWxhbmNlKQoJfQoKCXMuYWZ0ZXJUb2tlblRyYW5zZmVyKGNhbGxlciwgemVyb0FkZHJlc3MsIHRvLCBiYXRjaCwgYW1vdW50cykKCglyZXR1cm4gbmlsCn0KCi8vIEhlbHBlciBmb3IgQnVybigpIGFuZCBCdXJuQmF0Y2goKQpmdW5jIChzICpiYXNpY0dSQzExNTVUb2tlbikgYnVybkJhdGNoKGNhbGxlciwgZnJvbSBhZGRyZXNzLCBiYXRjaCBbXVRva2VuSUQsIGFtb3VudHMgW11pbnQ2NCkgZXJyb3IgewoJaWYgbGVuKGJhdGNoKSAhPSBsZW4oYW1vdW50cykgewoJCXJldHVybiBFcnJNaXNtYXRjaExlbmd0aAoJfQoJaWYgIWlzVmFsaWRBZGRyZXNzKGZyb20pIHsKCQlyZXR1cm4gRXJySW52YWxpZEFkZHJlc3MKCX0KCWZvciBfLCBhbW91bnQgOj0gcmFuZ2UgYW1vdW50cyB7CgkJaWYgYW1vdW50IDwgMCB7CgkJCXJldHVybiBFcnJJbnZhbGlkQW1vdW50CgkJfQoJfQoKCXMuYmVmb3JlVG9rZW5UcmFuc2ZlcihjYWxsZXIsIGZyb20sIHplcm9BZGRyZXNzLCBiYXRjaCwgYW1vdW50cykKCglmb3IgaSA6PSAwOyBpIDwgbGVuKGJhdGNoKTsgaSsrIHsKCQl0aWQgOj0gYmF0Y2hbaV0KCQlhbW91bnQgOj0gYW1vdW50c1tpXQoJCWZyb21CYWxhbmNlLCBlcnIgOj0gcy5CYWxhbmNlT2YoZnJvbSwgdGlkKQoJCWlmIGVyciAhPSBuaWwgewoJCQlyZXR1cm4gZXJyCgkJfQoJCWlmIGZyb21CYWxhbmNlIDwgYW1vdW50IHsKCQkJcmV0dXJuIEVyckJ1cm5BbW91bnRFeGNlZWRzQmFsYW5jZQoJCX0KCQlmcm9tQmFsYW5jZSA9IG92ZXJmbG93LlN1YjY0cChmcm9tQmFsYW5jZSwgYW1vdW50KQoJCWZyb21CYWxhbmNlS2V5IDo9IHN0cmluZyh0aWQpICsgIjoiICsgZnJvbS5TdHJpbmcoKQoJCXMuYmFsYW5jZXMuU2V0KGZyb21CYWxhbmNlS2V5LCBmcm9tQmFsYW5jZSkKCX0KCglzLmFmdGVyVG9rZW5UcmFuc2ZlcihjYWxsZXIsIGZyb20sIHplcm9BZGRyZXNzLCBiYXRjaCwgYW1vdW50cykKCglyZXR1cm4gbmlsCn0KCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBzZXRVcmkobmV3VXJpIHN0cmluZykgewoJcy51cmkgPSBuZXdVcmkKCWVtaXQoJlVwZGF0ZVVSSUV2ZW50e25ld1VyaX0pCn0KCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBiZWZvcmVUb2tlblRyYW5zZmVyKG9wZXJhdG9yLCBmcm9tLCB0byBhZGRyZXNzLCBiYXRjaCBbXVRva2VuSUQsIGFtb3VudHMgW11pbnQ2NCkgewoJLy8gVE9ETzogSW1wbGVtZW50YXRpb24KfQoKZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIGFmdGVyVG9rZW5UcmFuc2ZlcihvcGVyYXRvciwgZnJvbSwgdG8gYWRkcmVzcywgYmF0Y2ggW11Ub2tlbklELCBhbW91bnRzIFtdaW50NjQpIHsKCS8vIFRPRE86IEltcGxlbWVudGF0aW9uCn0KCmZ1bmMgKHMgKmJhc2ljR1JDMTE1NVRva2VuKSBkb1NhZmVUcmFuc2ZlckFjY2VwdGFuY2VDaGVjayhvcGVyYXRvciwgZnJvbSwgdG8gYWRkcmVzcywgdGlkIFRva2VuSUQsIGFtb3VudCBpbnQ2NCkgYm9vbCB7CgkvLyBUT0RPOiBJbXBsZW1lbnRhdGlvbgoJcmV0dXJuIHRydWUKfQoKZnVuYyAocyAqYmFzaWNHUkMxMTU1VG9rZW4pIGRvU2FmZUJhdGNoVHJhbnNmZXJBY2NlcHRhbmNlQ2hlY2sob3BlcmF0b3IsIGZyb20sIHRvIGFkZHJlc3MsIGJhdGNoIFtdVG9rZW5JRCwgYW1vdW50cyBbXWludDY0KSBib29sIHsKCS8vIFRPRE86IEltcGxlbWVudGF0aW9uCglyZXR1cm4gdHJ1ZQp9CgpmdW5jIChzICpiYXNpY0dSQzExNTVUb2tlbikgUmVuZGVySG9tZSgpIChzdHIgc3RyaW5nKSB7CglzdHIgKz0gdWZtdC5TcHJpbnRmKCIjIFVSSTolc1xuIiwgcy51cmkpCgoJcmV0dXJuCn0KCmZ1bmMgKG10ICpiYXNpY0dSQzExNTVUb2tlbikgR2V0dGVyKCkgTXVsdGlUb2tlbkdldHRlciB7CglyZXR1cm4gZnVuYygpIElHUkMxMTU1UmVhZGVyIHsKCQlyZXR1cm4gbXQKCX0KfQoarwUKHGJhc2ljX2dyYzExNTVfdG9rZW5fdGVzdC5nbm8SjgVwYWNrYWdlIGdyYzExNTUKCmltcG9ydCAoCgkidGVzdGluZyIKCgkiZ25vLmxhbmQvcC9udC90ZXN0dXRpbHMvdjAiCgkiZ25vLmxhbmQvcC9udC91YXNzZXJ0L3YwIgopCgpmdW5jIFRlc3RCYXNpY0dSQzExNTVHZXR0ZXJSZXR1cm5zUmVhZGVyKGN1ciByZWFsbSwgdCAqdGVzdGluZy5UKSB7Cgl0b2tlbiA6PSBOZXdCYXNpY0dSQzExNTVUb2tlbigiaXBmczovL21ldGFkYXRhIikKCXJlYWRlciA6PSB0b2tlbi5HZXR0ZXIoKSgpCgoJdWFzc2VydC5FcXVhbCh0LCAiaXBmczovL21ldGFkYXRhIiwgcmVhZGVyLlVyaSgpKQoJYmFsYW5jZSwgZXJyIDo9IHJlYWRlci5CYWxhbmNlT2YodGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJyZWFkZXJPd25lciIpLCBUb2tlbklEKCIxIikpCgl1YXNzZXJ0LlRydWUodCwgZXJyID09IG5pbCwgInJlYWRlciBiYWxhbmNlIGxvb2t1cCBzaG91bGQgbm90IGVycm9yIikKCXVhc3NlcnQuRXF1YWwodCwgaW50NjQoMCksIGJhbGFuY2UpCgl1YXNzZXJ0LkZhbHNlKHQsIHJlYWRlci5Jc0FwcHJvdmVkRm9yQWxsKHRlc3R1dGlscy5UZXN0QWRkcmVzcygicmVhZGVyT3duZXIiKSwgdGVzdHV0aWxzLlRlc3RBZGRyZXNzKCJyZWFkZXJPcGVyYXRvciIpKSwgInJlYWRlciBzaG91bGQgZXhwb3NlIGFwcHJvdmFsIHJlYWRzIikKfQoaigYKCmVycm9ycy5nbm8S+wVwYWNrYWdlIGdyYzExNTUKCmltcG9ydCAiZXJyb3JzIgoKdmFyICgKCUVyckludmFsaWRBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgID0gZXJyb3JzLk5ldygiaW52YWxpZCBhZGRyZXNzIikKCUVyck1pc21hdGNoTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgID0gZXJyb3JzLk5ldygiYWNjb3VudHMgYW5kIGlkcyBsZW5ndGggbWlzbWF0Y2giKQoJRXJyQ2Fubm90VHJhbnNmZXJUb1NlbGYgICAgICAgICAgICAgICAgICAgPSBlcnJvcnMuTmV3KCJjYW5ub3Qgc2VuZCB0cmFuc2ZlciB0byBzZWxmIikKCUVyclRyYW5zZmVyVG9SZWplY3RlZE9yTm9uR1JDMTE1NVJlY2VpdmVyID0gZXJyb3JzLk5ldygidHJhbnNmZXIgdG8gcmVqZWN0ZWQgb3Igbm9uIEdSQzExNTVSZWNlaXZlciBpbXBsZW1lbnRlciIpCglFcnJDYWxsZXJJc05vdE93bmVyT3JBcHByb3ZlZCAgICAgICAgICAgICA9IGVycm9ycy5OZXcoImNhbGxlciBpcyBub3QgdG9rZW4gb3duZXIgb3IgYXBwcm92ZWQiKQoJRXJySW5zdWZmaWNpZW50QmFsYW5jZSAgICAgICAgICAgICAgICAgICAgPSBlcnJvcnMuTmV3KCJpbnN1ZmZpY2llbnQgYmFsYW5jZSBmb3IgdHJhbnNmZXIiKQoJRXJyQnVybkFtb3VudEV4Y2VlZHNCYWxhbmNlICAgICAgICAgICAgICAgPSBlcnJvcnMuTmV3KCJidXJuIGFtb3VudCBleGNlZWRzIGJhbGFuY2UiKQoJRXJySW52YWxpZEFtb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgPSBlcnJvcnMuTmV3KCJpbnZhbGlkIGFtb3VudCIpCikKGkYKC2dub21vZC50b21sEjdtb2R1bGUgPSAiZ25vLmxhbmQvcC9ha2thZGlhL2JldGEvZ3JjMTE1NSIKZ25vID0gIjAuOSIKGu4ICgxpZ3JjMTE1NS5nbm8S3QhwYWNrYWdlIGdyYzExNTUKCnR5cGUgSUdSQzExNTUgaW50ZXJmYWNlIHsKCVNhZmVUcmFuc2ZlckZyb20oY2FsbGVyLCBmcm9tLCB0byBhZGRyZXNzLCB0aWQgVG9rZW5JRCwgYW1vdW50IGludDY0KSBlcnJvcgoJU2FmZUJhdGNoVHJhbnNmZXJGcm9tKGNhbGxlciwgZnJvbSwgdG8gYWRkcmVzcywgYmF0Y2ggW11Ub2tlbklELCBhbW91bnRzIFtdaW50NjQpIGVycm9yCglCYWxhbmNlT2Yob3duZXIgYWRkcmVzcywgdGlkIFRva2VuSUQpIChpbnQ2NCwgZXJyb3IpCglCYWxhbmNlT2ZCYXRjaChvd25lcnMgW11hZGRyZXNzLCBiYXRjaCBbXVRva2VuSUQpIChbXWludDY0LCBlcnJvcikKCVNldEFwcHJvdmFsRm9yQWxsKGNhbGxlciwgb3BlcmF0b3IgYWRkcmVzcywgYXBwcm92ZWQgYm9vbCkgZXJyb3IKCUlzQXBwcm92ZWRGb3JBbGwob3duZXIsIG9wZXJhdG9yIGFkZHJlc3MpIGJvb2wKfQoKdHlwZSBJR1JDMTE1NVJlYWRlciBpbnRlcmZhY2UgewoJVXJpKCkgc3RyaW5nCglCYWxhbmNlT2Yob3duZXIgYWRkcmVzcywgdGlkIFRva2VuSUQpIChpbnQ2NCwgZXJyb3IpCglCYWxhbmNlT2ZCYXRjaChvd25lcnMgW11hZGRyZXNzLCBiYXRjaCBbXVRva2VuSUQpIChbXWludDY0LCBlcnJvcikKCUlzQXBwcm92ZWRGb3JBbGwob3duZXIsIG9wZXJhdG9yIGFkZHJlc3MpIGJvb2wKfQoKdHlwZSBUb2tlbklEIHN0cmluZwoKdHlwZSBUcmFuc2ZlclNpbmdsZUV2ZW50IHN0cnVjdCB7CglPcGVyYXRvciBhZGRyZXNzCglGcm9tICAgICBhZGRyZXNzCglUbyAgICAgICBhZGRyZXNzCglUb2tlbklEICBUb2tlbklECglBbW91bnQgICBpbnQ2NAp9Cgp0eXBlIFRyYW5zZmVyQmF0Y2hFdmVudCBzdHJ1Y3QgewoJT3BlcmF0b3IgYWRkcmVzcwoJRnJvbSAgICAgYWRkcmVzcwoJVG8gICAgICAgYWRkcmVzcwoJQmF0Y2ggICAgW11Ub2tlbklECglBbW91bnRzICBbXWludDY0Cn0KCnR5cGUgQXBwcm92YWxGb3JBbGxFdmVudCBzdHJ1Y3QgewoJT3duZXIgICAgYWRkcmVzcwoJT3BlcmF0b3IgYWRkcmVzcwoJQXBwcm92ZWQgYm9vbAp9Cgp0eXBlIFVwZGF0ZVVSSUV2ZW50IHN0cnVjdCB7CglVUkkgc3RyaW5nCn0KCnR5cGUgTXVsdGlUb2tlbkdldHRlciBmdW5jKCkgSUdSQzExNTVSZWFkZXIKGt4BCgh1dGlsLmdubxLRAXBhY2thZ2UgZ3JjMTE1NQoKY29uc3QgemVyb0FkZHJlc3MgYWRkcmVzcyA9ICIiCgpmdW5jIGlzVmFsaWRBZGRyZXNzKGFkZHIgYWRkcmVzcykgYm9vbCB7CglpZiAhYWRkci5Jc1ZhbGlkKCkgewoJCXJldHVybiBmYWxzZQoJfQoJcmV0dXJuIHRydWUKfQoKZnVuYyBlbWl0KGV2ZW50IGFueSkgewoJLy8gVE9ETzogc2V0dXAgYSBwdWJzdWIgc3lzdGVtIGhlcmU/Cn0KIiIKEy9nbm8uTWVtUGFja2FnZVR5cGUSCwoJTVBVc2VyQWxsEhEItL3BKhIKNDQ1Nzd1Z25vdBqoAQo6ChMvdG0uUHViS2V5U2VjcDI1NmsxEiMKIQItRS2vq8g7O+I4ZvJRzWH7jH0BzvxYjnsf41ryBRUbwxJA14eN2uQzy7sP9+En8mKApcNJvAEFVrdAEzs7IOqoheNKkNMIwHdbRYPfSPvvbnXgcm77gkwBVmFZStjb8rGqQBooZzFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFsdXV4ZQ==