Transaction executed successfully

Transaction Details

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

Transaction hash
65360F8D83EA3DDB4DEB2D3DF68F4C43C954F7EFD5CF5FCEA3C6D9E960CA7A43

Transaction overview

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

Execution summary

TX INDEX
1
Position in block
GAS WANTED
53,520,766
Requested gas limit
GAS USED
44,600,668
Gas consumed
FEE
53521ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1q5tjjv3kkslzwf2na9y9wk7e5a8ugph8xfsk04

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

Cu/vAQoML3ZtLm1fYWRkcGtnEt3vAQooZzFxNXRqanYza2tzbHp3ZjJuYTl5OXdrN2U1YTh1Z3BoOHhmc2swNBKv7wEKBXN0b3JlEhtnbm8ubGFuZC9wL2dub3N3YXAvc3RvcmUvdjEavzsKB2RvYy5nbm8SszsvLyBQYWNrYWdlIHN0b3JlIHByb3ZpZGVzIGEgZG9tYWluLXNwZWNpZmljIGtleS12YWx1ZSBzdG9yYWdlIHN5c3RlbSB3aXRoCi8vIHBlcm1pc3Npb24tYmFzZWQgd3JpdGUgYWNjZXNzIGNvbnRyb2wgZm9yIEdubyBzbWFydCBjb250cmFjdHMuCi8vCi8vICMjIE92ZXJ2aWV3Ci8vCi8vIEVhY2ggZG9tYWluIChlLmcuLCBwb29sLCBwb3NpdGlvbiwgcm91dGVyLCBzdGFrZXIpIGNyZWF0ZXMgaXRzIG93biBLVlN0b3JlCi8vIGluc3RhbmNlIGJvdW5kIHRvIGEgdW5pcXVlIGRvbWFpbiBhZGRyZXNzLiBUaGF0IGRvbWFpbiBhZGRyZXNzIGlzIHRoZQovLyBwcmltYXJ5IGF1dGhvcml0eSBvdmVyIHRoZSBzdG9yZTogaXQgY2FuIHdyaXRlLCBtYW5hZ2UgdGhlIGF1dGhvcml6ZWQtd3JpdGVyCi8vIHNldCwgYW5kIGlzIGl0c2VsZiBpbXBsaWNpdGx5IGF1dGhvcml6ZWQgYXMgYSB3cml0ZXIuCi8vCi8vIEtleSBjb21wb25lbnRzIG9mIHRoaXMgcGFja2FnZToKLy8KLy8gIDEuICoqS1ZTdG9yZSBJbnRlcmZhY2UqKiAtIFRoZSBjb250cmFjdCBmb3IgZG9tYWluLXNwZWNpZmljIHN0b3JhZ2Ugb3BlcmF0aW9ucy4KLy8gIDIuICoqa3ZTdG9yZSBJbXBsZW1lbnRhdGlvbioqIC0gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gd2l0aCBwZXJtaXNzaW9uCi8vICAgICBtYW5hZ2VtZW50IGFuZCBkYXRhIHN0b3JhZ2UuCi8vICAzLiAqKldyaXRlLW9ubHkgUGVybWlzc2lvbiBTeXN0ZW0qKiAtIFJlYWRzIGFyZSBwdWJsaWMgd2l0aGluIHRoZSBwYWNrYWdlOwovLyAgICAgb25seSB3cml0ZXMgKFNldCwgRGVsZXRlLCBBQ0wgY2hhbmdlcykgYXJlIGdhdGVkLgovLyAgNC4gKipUeXBlLVNhZmUgR2V0dGVycyoqIC0gVHlwZWQgZ2V0dGVyIG1ldGhvZHMgd2l0aCBydW50aW1lIHR5cGUgY2FzdGluZwovLyAgICAgYW5kIHZhbGlkYXRpb24uCi8vCi8vICMjIEtleSBGZWF0dXJlcwovLwovLyAgIC0gKipEb21haW4gSXNvbGF0aW9uKio6IEVhY2ggZG9tYWluIGhhcyBpdHMgb3duIGlzb2xhdGVkIHN0b3JhZ2Ugc3BhY2UKLy8gICAgIGlkZW50aWZpZWQgYnkgaXRzIGRvbWFpbiBhZGRyZXNzLiBLZXlzIGFyZSBpbnRlcm5hbGx5IHByZWZpeGVkIHdpdGggdGhhdAovLyAgICAgYWRkcmVzcyBzbyBkb21haW5zIGNhbm5vdCBjb2xsaWRlLgovLyAgIC0gKipQZXItUmVhbG0gV3JpdGUgQUNMKio6IFRoZSBzdG9yZSBtYWludGFpbnMgYW4gZXhwbGljaXQgc2V0IG9mIHJlYWxtcwovLyAgICAgYXV0aG9yaXplZCB0byB3cml0ZS4gVGhlIGRvbWFpbiBvd25lciBpcyBpbiB0aGUgc2V0IGJ5IGRlZmF1bHQuCi8vICAgLSAqKlR5cGUtU2FmZSBPcGVyYXRpb25zKio6IFNwZWNpYWxpemVkIGdldHRlcnMgKGBHZXRJbnQ2NGAsIGBHZXRTdHJpbmdgLAovLyAgICAgYEdldEFkZHJlc3NgLCAuLi4pIHdpdGggYXV0b21hdGljIGNhc3RpbmcgYW5kIHN0cnVjdHVyZWQgZXJyb3JzLgovLyAgIC0gKipSZWFsbS1GcmFtZSBBdXRoIENoZWNrcyoqOiBFdmVyeSB3cml0ZSBjYWxsIGFjY2VwdHMgYSBgcmVhbG1gIHZhbHVlCi8vICAgICByZXByZXNlbnRpbmcgdGhlIGxpdmUgY3Jvc3NpbmcgZnJhbWU7IHRoZSBzdG9yZSB2ZXJpZmllcyB0aGF0IGZyYW1lCi8vICAgICBiZWZvcmUgY29uc3VsdGluZyB0aGUgQUNMLCBkZWZlbmRpbmcgYWdhaW5zdCByZXBsYXllZCBvciBjYXB0dXJlZAovLyAgICAgYHJlYWxtYCB2YWx1ZXMuCi8vICAgLSAqKkF1dGhvcml6ZWQgQ2FsbGVyIE1hbmFnZW1lbnQqKjogRHluYW1pYyBhZGRpdGlvbiwgdXBkYXRlLCBhbmQgcmVtb3ZhbAovLyAgICAgb2YgYXV0aG9yaXplZCBjYWxsZXJzIHdpdGggc3BlY2lmaWMgcGVybWlzc2lvbnMuCi8vCi8vICMjIFBlcm1pc3Npb24gTW9kZWwKLy8KLy8gVGhlIHBhY2thZ2UgZGVmaW5lcyBvbmUgYXNzaWduYWJsZSBwZXJtaXNzaW9uIGxldmVsOgovLwovLyAgIC0gKipXcml0ZSAoMSkqKjogQWxsb3dlZCB0byBjYWxsIGBTZXRgIGFuZCBgRGVsZXRlYC4KLy8KLy8gVGhlIHplcm8gdmFsdWUgb2YgYFBlcm1pc3Npb25gIGlzIHJlc2VydmVkIGFuZCByZWplY3RlZCBieSByZWdpc3RyYXRpb24gQVBJcy4KLy8gQ29kZSBjYWxsZXJzIG5vdCBpbiB0aGUgYXV0aG9yaXplZC1jYWxsZXIgdGFibGUgaGF2ZSBubyB3cml0ZSBhY2Nlc3MuIEN1cnJlbnQKLy8gdXNlci9FT0EgcmVhbG1zIGJ5cGFzcyB0aGUgQUNMIGZvciBTZXQgYW5kIERlbGV0ZSBhZnRlciB0aGUgbGl2ZS1mcmFtZSBjaGVjay4KLy8gUmVhZCBtZXRob2RzIGRvIG5vdCBlbmZvcmNlIGNhbGxlciBwZXJtaXNzaW9uczsgcmVhbG0tbGV2ZWwgQVBJcyBtdXN0IGdhdGUKLy8gc2Vuc2l0aXZlIHJlYWRzIHRoZW1zZWx2ZXMuIFRoZSBkb21haW4gYWRkcmVzcyAob3duZXIpIGlzIGFsd2F5cyB0cmVhdGVkIGFzCi8vIGF1dGhvcml6ZWQgYW5kIGNhbm5vdCBiZSByZW1vdmVkLgovLwovLyAjIyBSZWFsbSBUaHJlYWRpbmcKLy8KLy8gRXZlcnkgbXV0YXRpbmcgbWV0aG9kIHRha2VzIHR3byBsZWFkaW5nIHBhcmFtZXRlcnM6Ci8vCi8vCWZ1bmMgKGsgKmt2U3RvcmUpIFNldChfIGludCwgcmxtIHJlYWxtLCBrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGVycm9yCi8vCi8vIFRoZSBsZWFkaW5nIGBfIGludGAgaXMgYSBkZWxpYmVyYXRlIHNlbnRpbmVsOiBhdCB0aGUgY2FsbCBzaXRlIGl0IHNob3dzIHVwCi8vIGFzIGEgYDBgLCBtYWtpbmcgaXQgdmlzdWFsbHkgb2J2aW91cyB0aGF0IGEgYHJlYWxtYCB2YWx1ZSBpcyBiZWluZyB0aHJlYWRlZAovLyB0aHJvdWdoLiBgcmxtYCBpcyB0aGUgbGl2ZSBjcm9zc2luZyBmcmFtZSwgYW5kIGBybG0uSXNDdXJyZW50KClgIGlzIGNoZWNrZWQKLy8gZmlyc3QgaW4gZXZlcnkgbXV0YXRpbmcgbWV0aG9kIHRvIHJlamVjdCBzdGFsZSBvciBzcG9vZmVkIHRva2Vucy4KLy8KLy8gVGhlIHYxIC0+IHYyIG1hcHBpbmcgZm9yIHRoZSB0d28gcmVhbG0taWRlbnRpdHkgZXhwcmVzc2lvbnMgaXMgc3RyYWlnaHRmb3J3YXJkOgovLwovLyAgIC0gYHJ1bnRpbWUuQ3VycmVudFJlYWxtKCkuQWRkcmVzcygpYCAtPiBgcmxtLkFkZHJlc3MoKWAgKHRoZSBjdXJyZW50IHJlYWxtKQovLyAgIC0gYHJ1bnRpbWUuUHJldmlvdXNSZWFsbSgpLkFkZHJlc3MoKWAgLT4gYHJsbS5QcmV2aW91cygpLkFkZHJlc3MoKWAgKHRoZSBjYWxsZXIpCi8vCi8vIFdoaWNoIG9uZSBhIGdpdmVuIG1ldGhvZCBjaGVja3MgaXMgYSBwZXItbWV0aG9kIGRvbWFpbiBkZWNpc2lvbiwgbm90IGEgdjIKLy8gZnJhbWV3b3JrIHJ1bGUuIFRoZSBzdG9yZSBjdXJyZW50bHkgY2hlY2tzOgovLwovLyAgIC0gYFNldGAgLyBgRGVsZXRlYDogYHJsbS5BZGRyZXNzKClgICh0aGUgcmVhbG0gcGVyZm9ybWluZyB0aGUgd3JpdGUsIGkuZS4KLy8gICAgIHRoZSBkb21haW4gcmVhbG0gY2FsbGluZyBpbnRvIHRoZSBzdG9yZSkgYWdhaW5zdCB0aGUgd3JpdGUgQUNMIGZvciBjb2RlCi8vICAgICBjYWxsZXJzLiBDdXJyZW50IHVzZXIvRU9BIHJlYWxtcyAoYCFybG0uSXNDb2RlKClgKSBieXBhc3MgdGhlIEFDTCBhZnRlcgovLyAgICAgYHJsbS5Jc0N1cnJlbnQoKWAgdmFsaWRhdGlvbiwgc28gdGhleSBjYW4gcG9wdWxhdGUgb3IgZGVsZXRlIHN0YXRlLgovLyAgIC0gYEFkZEF1dGhvcml6ZWRDYWxsZXJgLCBgVXBkYXRlQXV0aG9yaXplZENhbGxlcmAsCi8vICAgICBgUmVtb3ZlQXV0aG9yaXplZENhbGxlcmA6IGBybG0uQWRkcmVzcygpYCAodGhlIGN1cnJlbnQgcmVhbG0pIGFnYWluc3QKLy8gICAgIHRoZSBkb21haW4gYWRkcmVzcy4KLy8KLy8gIyMgV29ya2Zsb3cKLy8KLy8gIDEuICoqSW5pdGlhbGl6YXRpb24qKjogQ3JlYXRlIGEgc3RvcmUgd2l0aCBgTmV3S1ZTdG9yZShkb21haW5BZGRyZXNzKWAuCi8vICAyLiAqKkRhdGEgT3BlcmF0aW9ucyoqOiBVc2UgYFNldGAgLyBgR2V0YCAoYW5kIHR5cGVkIGdldHRlcnMpIGZvciBJL08uCi8vICAzLiAqKlBlcm1pc3Npb24gTWFuYWdlbWVudCoqOiBGcm9tIHRoZSBkb21haW4gcmVhbG0sIGNhbGwKLy8gICAgIGBBZGRBdXRob3JpemVkQ2FsbGVyYCB0byBncmFudCB3cml0ZSBhY2Nlc3MgdG8gYWRkaXRpb25hbCByZWFsbXMuCi8vICA0LiAqKlR5cGUtU2FmZSBSZXRyaWV2YWwqKjogUHJlZmVyIHR5cGVkIGdldHRlcnMgKGBHZXRJbnQ2NGAsIGBHZXRTdHJpbmdgLAovLyAgICAgZXRjLikgb3ZlciByYXcgYEdldGAgd2hlbmV2ZXIgdGhlIHN0b3JlZCB0eXBlIGlzIGtub3duLgovLwovLyAjIyBFeGFtcGxlIFVzYWdlCi8vCi8vIGBgYGdubwovLyBwYWNrYWdlIGV4YW1wbGVyZWFsbQovLwovLyBpbXBvcnQgKAovLwovLwkiZ25vLmxhbmQvcC9nbm9zd2FwL3N0b3JlL3YxIgovLwovLyApCi8vCi8vCWZ1bmMgQ29uZmlndXJlKGN1ciByZWFsbSwgcm91dGVyQWRkciBhZGRyZXNzKSBlcnJvciB7Ci8vCSAgICAvLyBDcmVhdGUgYSBLVlN0b3JlIG93bmVkIGJ5IHRoZSBjdXJyZW50IChwb29sKSByZWFsbS4KLy8JICAgIGt2IDo9IHN0b3JlLk5ld0tWU3RvcmUoY3VyLkFkZHJlc3MoKSkKLy8KLy8JICAgIC8vIFBlcnNpc3Qgc29tZSB2YWx1ZXMuIGAwLCBjdXJgIHRocmVhZHMgdGhlIGxpdmUgcmVhbG0gZnJhbWUgdGhyb3VnaC4KLy8JICAgIGlmIGVyciA6PSBrdi5TZXQoMCwgY3VyLCAidG90YWxMaXF1aWRpdHkiLCB1aW50NjQoMV8wMDBfMDAwKSk7IGVyciAhPSBuaWwgewovLwkgICAgICAgIHJldHVybiBlcnIKLy8JICAgIH0KLy8JICAgIGlmIGVyciA6PSBrdi5TZXQoMCwgY3VyLCAicG9vbE5hbWUiLCAiRVRILVVTREMiKTsgZXJyICE9IG5pbCB7Ci8vCSAgICAgICAgcmV0dXJuIGVycgovLwkgICAgfQovLwovLwkgICAgLy8gR3JhbnQgd3JpdGUgYWNjZXNzIHRvIHRoZSByb3V0ZXIgcmVhbG0uCi8vCSAgICBpZiBlcnIgOj0ga3YuQWRkQXV0aG9yaXplZENhbGxlcigwLCBjdXIsIHJvdXRlckFkZHIsIHN0b3JlLldyaXRlKTsgZXJyICE9IG5pbCB7Ci8vCSAgICAgICAgcmV0dXJuIGVycgovLwkgICAgfQovLwovLwkgICAgLy8gUmVhZHMgYXJlIHB1YmxpYyAtLSBubyByZWFsbSBuZWVkZWQuCi8vCSAgICBsaXF1aWRpdHksIGVyciA6PSBrdi5HZXRVaW50NjQoInRvdGFsTGlxdWlkaXR5IikKLy8JICAgIGlmIGVyciAhPSBuaWwgewovLwkgICAgICAgIHJldHVybiBlcnIKLy8JICAgIH0KLy8JICAgIF8gPSBsaXF1aWRpdHkKLy8KLy8JICAgIHJldHVybiBuaWwKLy8JfQovLwovLyBgYGAKLy8KLy8gIyMgUGVybWlzc2lvbiBDaGVja3MgYXQgYSBHbGFuY2UKLy8KLy8gVGhlIHN0b3JlIGF1dG9tYXRpY2FsbHkgdmVyaWZpZXMgcGVybWlzc2lvbnMgZHVyaW5nIG9wZXJhdGlvbnM6Ci8vCi8vICAgLSAqKlJlYWQgT3BlcmF0aW9ucyoqIChgR2V0YCwgYEdldEludDY0YCwgYEdldFN0cmluZ2AsIC4uLik6IG5vIHBlcm1pc3Npb24KLy8gICAgIGNoZWNrOyByZWFkcyBhcmUgcHVibGljIHdpdGhpbiB0aGUgcGFja2FnZS4KLy8gICAtICoqV3JpdGUgT3BlcmF0aW9ucyoqIChgU2V0YCwgYERlbGV0ZWApOiByZXF1aXJlIHRoZSBjYWxsaW5nIHJlYWxtIC0tCi8vICAgICBgcmxtLkFkZHJlc3MoKWAgLS0gdG8gYmUgaW4gdGhlIHdyaXRlIEFDTCB3aGVuIHRoZSBjYWxsZXIgaXMgY29kZS4KLy8gICAgIEN1cnJlbnQgdXNlci9FT0EgcmVhbG1zIChgIXJsbS5Jc0NvZGUoKWApIGJ5cGFzcyB0aGUgQUNMIGFmdGVyIHRoZSBsaXZlCi8vICAgICBmcmFtZSBjaGVjay4KLy8gICAtICoqTWFuYWdlbWVudCBPcGVyYXRpb25zKiogKGBBZGRBdXRob3JpemVkQ2FsbGVyYCwKLy8gICAgIGBVcGRhdGVBdXRob3JpemVkQ2FsbGVyYCwgYFJlbW92ZUF1dGhvcml6ZWRDYWxsZXJgKTogcmVxdWlyZSB0aGUKLy8gICAgIGN1cnJlbnQgcmVhbG0gLS0gYHJsbS5BZGRyZXNzKClgIC0tIHRvIGVxdWFsIHRoZSBkb21haW4gYWRkcmVzcy4KLy8KLy8gIyMgS2V5IFByZWZpeGluZwovLwovLyBJbnRlcm5hbGx5LCBhbGwga2V5cyBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgZG9tYWluIGFkZHJlc3MgdG8ga2VlcCBkb21haW5zCi8vIGlzb2xhdGVkOgovLwovLwlTdG9yZWQga2V5OiAie2RvbWFpbkFkZHJlc3N9Ont1c2VyS2V5fSIKLy8KLy8gVGhpcyBwcmV2ZW50cyBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGRvbWFpbnMgdGhhdCBzaGFyZSBhIHJ1bnRpbWUuCi8vCi8vICMjIEVycm9ycwovLwovLyBUaGUgcGFja2FnZSBkZWZpbmVzIHNldmVyYWwgZXJyb3IgdHlwZXM6Ci8vCi8vICAgLSBgRXJyV3JpdGVQZXJtaXNzaW9uRGVuaWVkYCAtIHRoZSBjYWxsaW5nIGNvZGUgcmVhbG0gKGBybG0uQWRkcmVzcygpYCkgaXMKLy8gICAgIG5vdCBpbiB0aGUgd3JpdGUgQUNMLiBDdXJyZW50IHVzZXIvRU9BIHJlYWxtcyBieXBhc3MgdGhlIEFDTCBmb3IgU2V0IGFuZAovLyAgICAgRGVsZXRlIGFmdGVyIGBybG0uSXNDdXJyZW50KClgIHZhbGlkYXRpb24uCi8vICAgLSBgRXJyVXBkYXRlUGVybWlzc2lvbkRlbmllZGAgLSBBQ0wgY2hhbmdlIGF0dGVtcHRlZCBmcm9tIGEgY3VycmVudCByZWFsbQovLyAgICAgKGBybG0uQWRkcmVzcygpYCkgb3RoZXIgdGhhbiB0aGUgZG9tYWluIGFkZHJlc3MuCi8vICAgLSBgRXJyQXV0aG9yaXplZENhbGxlckFscmVhZHlSZWdpc3RlcmVkYCAtIEFkZGluZyBhIGNhbGxlciB0aGF0IGFscmVhZHkKLy8gICAgIGV4aXN0cy4KLy8gICAtIGBFcnJBdXRob3JpemVkQ2FsbGVyTm90Rm91bmRgIC0gVXBkYXRpbmcgb3IgcmVtb3ZpbmcgYSBjYWxsZXIgdGhhdCB3YXMKLy8gICAgIG5ldmVyIHJlZ2lzdGVyZWQuCi8vICAgLSBgRXJySW52YWxpZFBlcm1pc3Npb25gIC0gUGVybWlzc2lvbiB2YWx1ZSBvdGhlciB0aGFuIGBXcml0ZWAgd2FzIHBhc3NlZC4KLy8gICAtIGBFcnJGYWlsZWRDYXN0YCAtIFR5cGVkIGdldHRlciBzYXcgYSB2YWx1ZSB3aG9zZSBydW50aW1lIHR5cGUgZG9lcyBub3QKLy8gICAgIG1hdGNoLgovLyAgIC0gYEVyclNwb29mZWRSZWFsbWAgLSBUaGUgc3VwcGxpZWQgYHJlYWxtYCBpcyBub3QgdGhlIGxpdmUgY3Jvc3NpbmcgZnJhbWUuCi8vCi8vICMjIExpbWl0YXRpb25zIGFuZCBDb25zaWRlcmF0aW9ucwovLwovLyAgIC0gQWxsIHN0b3JlZCB2YWx1ZXMgYXJlIG9mIHR5cGUgYGFueWAsIHNvIHJldHJpZXZhbCByZXF1aXJlcyBlaXRoZXIgYQovLyAgICAgdHlwZWQgZ2V0dGVyIG9yIGEgY2FzdC4KLy8gICAtIFJlYWQgbWV0aG9kcyBhcmUgbm90IHBlcm1pc3Npb24tZ2F0ZWQuIEFkZCByZWFsbS1sZXZlbCBjaGVja3MgZm9yCi8vICAgICBzZW5zaXRpdmUgcmVhZHMuCi8vICAgLSBBQ0wgbWFuYWdlbWVudCBjYW4gb25seSBiZSBwZXJmb3JtZWQgYnkgdGhlIGRvbWFpbiByZWFsbSBpdHNlbGYuCi8vICAgLSBUaGUgZG9tYWluIGFkZHJlc3MgaXMgaW1wbGljaXRseSBhdXRob3JpemVkIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC4KLy8gICAtIEtleXMgYXJlIGF1dG9tYXRpY2FsbHkgcHJlZml4ZWQ7IGNhbGxlcnMgc2hvdWxkIG5vdCBlbmNvZGUgdGhlIGRvbWFpbgovLyAgICAgYWRkcmVzcyBpbnRvIHRoZWlyIG93biBrZXlzLgovLwovLyBQYWNrYWdlIHN0b3JlIGlzIGludGVuZGVkIGZvciB1c2UgaW4gR25vIHNtYXJ0IGNvbnRyYWN0cyB0aGF0IG5lZWQKLy8gaXNvbGF0ZWQsIHdyaXRlLWdhdGVkIHN0b3JhZ2UgZm9yIGRpc3RpbmN0IHByb3RvY29sIGNvbXBvbmVudHMuCnBhY2thZ2Ugc3RvcmUKGsIECgplcnJvcnMuZ25vErMEcGFja2FnZSBzdG9yZQoKY29uc3QgKAoJLy8gQXV0aG9yaXphdGlvbiBlcnJvcnMKCUVyckF1dGhvcml6ZWRDYWxsZXJBbHJlYWR5UmVnaXN0ZXJlZCA9ICJhdXRob3JpemVkIGNhbGxlciBhbHJlYWR5IHJlZ2lzdGVyZWQiCglFcnJBdXRob3JpemVkQ2FsbGVyTm90Rm91bmQgICAgICAgICAgPSAiYXV0aG9yaXplZCBjYWxsZXIgbm90IGZvdW5kIgoJRXJySW52YWxpZFBlcm1pc3Npb24gICAgICAgICAgICAgICAgID0gImludmFsaWQgcGVybWlzc2lvbiIKCgkvLyBEYXRhIGFjY2VzcyBlcnJvcnMKCUVycktleU5vdEZvdW5kICAgICAgICAgICAgPSAia2V5IG5vdCBmb3VuZCIKCUVycldyaXRlUGVybWlzc2lvbkRlbmllZCAgPSAid3JpdGUgcGVybWlzc2lvbiBkZW5pZWQiCglFcnJVcGRhdGVQZXJtaXNzaW9uRGVuaWVkID0gInVwZGF0ZSBwZXJtaXNzaW9uIGRlbmllZCIKCUVyckZhaWxlZENhc3QgICAgICAgICAgICAgPSAiZmFpbGVkIHRvIGNhc3QiCglFcnJTcG9vZmVkUmVhbG0gICAgICAgICAgID0gInJsbSBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjcm9zc2luZyBmcmFtZSIKKQoaQgoLZ25vbW9kLnRvbWwSM21vZHVsZSA9ICJnbm8ubGFuZC9wL2dub3N3YXAvc3RvcmUvdjEiCmdubyA9ICIwLjkiChrhZwoMa3Zfc3RvcmUuZ25vEtBncGFja2FnZSBzdG9yZQoKaW1wb3J0ICgKCSJlcnJvcnMiCgoJYnB0cmVlICJnbm8ubGFuZC9wL250L2JwdHJlZS92MCIKKQoKLy8ga3ZTdG9yZSByZXByZXNlbnRzIGEgZG9tYWluLXNwZWNpZmljIGtleS12YWx1ZSBzdG9yYWdlCi8vIEVhY2ggZG9tYWluIChwb29sLCBwb3NpdGlvbiwgZXRjLikgY3JlYXRlcyBpdHMgb3duIGt2U3RvcmUgaW5zdGFuY2UKdHlwZSBrdlN0b3JlIHN0cnVjdCB7CglkYXRhICAgICAgICAgICAgICBtYXBbc3RyaW5nXWFueSAvLyBrZXkgLT4gdmFsdWUKCWF1dGhvcml6ZWRDYWxsZXJzIG1hcFthZGRyZXNzXVBlcm1pc3Npb24KCWRvbWFpbkFkZHJlc3MgICAgIGFkZHJlc3MKfQoKLy8gTmV3S1ZTdG9yZSBjcmVhdGVzIGEgbmV3IGt2U3RvcmUgaW5zdGFuY2UgZm9yIGEgc3BlY2lmaWMgZG9tYWluLgovLyBkb21haW5BZGRyZXNzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBkb21haW4gcmVhbG0gdGhhdCBvd25zIHRoaXMgc3RvcmUuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSBkb21haW5BZGRyZXNzOiBBZGRyZXNzIG9mIHRoZSBvd25pbmcgZG9tYWluIHJlYWxtOyBpdCBpcyBpbml0aWFsbHkgZ3JhbnRlZCBXcml0ZSBwZXJtaXNzaW9uLgovLwovLyBSZXR1cm5zOgovLyAgIC0gS1ZTdG9yZTogRW1wdHkgZG9tYWluLWlzb2xhdGVkIHN0b3JlIHdob3NlIEFDTCBpbml0aWFsbHkgYXV0aG9yaXplcyBkb21haW5BZGRyZXNzIGZvciB3cml0ZXMuCmZ1bmMgTmV3S1ZTdG9yZShkb21haW5BZGRyZXNzIGFkZHJlc3MpIEtWU3RvcmUgewoJcmV0dXJuICZrdlN0b3JlewoJCWRhdGE6IG1ha2UobWFwW3N0cmluZ11hbnkpLAoJCWF1dGhvcml6ZWRDYWxsZXJzOiBtYXBbYWRkcmVzc11QZXJtaXNzaW9uewoJCQlkb21haW5BZGRyZXNzOiBXcml0ZSwKCQl9LAoJCWRvbWFpbkFkZHJlc3M6IGRvbWFpbkFkZHJlc3MsCgl9Cn0KCi8vIEdldERvbWFpbkFkZHJlc3MgcmV0dXJucyB0aGUgZG9tYWluIGFkZHJlc3MuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBhZGRyZXNzOiBBZGRyZXNzIG9mIHRoZSBkb21haW4gcmVhbG0gdGhhdCBvd25zIHRoaXMgc3RvcmUuCmZ1bmMgKGsgKmt2U3RvcmUpIEdldERvbWFpbkFkZHJlc3MoKSBhZGRyZXNzIHsKCXJldHVybiBrLmRvbWFpbkFkZHJlc3MKfQoKLy8gR2V0QWxsS2V5cyByZXR1cm5zIGFsbCBrZXlzIHN0b3JlZCBpbiB0aGlzIGt2U3RvcmUuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBbXXN0cmluZzogU3RvcmVkIGtleXMgaW5jbHVkaW5nIHRoZSBkb21haW4tYWRkcmVzcyBuYW1lc3BhY2UgcHJlZml4OyBtYXAgaXRlcmF0aW9uIG9yZGVyIGlzIHVuc3BlY2lmaWVkLgovLyAgIC0gZXJyb3I6IEFsd2F5cyBuaWwgZm9yIHRoaXMgaW4tbWVtb3J5IGltcGxlbWVudGF0aW9uLgpmdW5jIChrICprdlN0b3JlKSBHZXRBbGxLZXlzKCkgKFtdc3RyaW5nLCBlcnJvcikgewoJa2V5cyA6PSBtYWtlKFtdc3RyaW5nLCAwLCBsZW4oay5kYXRhKSkKCgkvLyBLZXlzIGFyZSBuYW1lc3BhY2UtcHJlZml4ZWQgKGRvbWFpbkFkZHJlc3M6a2V5KSBieSBkZXNpZ24KCWZvciBrZXkgOj0gcmFuZ2Ugay5kYXRhIHsKCQlrZXlzID0gYXBwZW5kKGtleXMsIGtleSkKCX0KCglyZXR1cm4ga2V5cywgbmlsCn0KCi8vIEhhcyBjaGVja3MgaWYgYSBrZXkgZXhpc3RzIGluIHRoZSBzdG9yZS4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGtleTogTG9naWNhbCBrZXkgdG8gY2hlY2s7IHRoZSBzdG9yZSBhcHBsaWVzIGl0cyBkb21haW4gbmFtZXNwYWNlIHByZWZpeCBiZWZvcmUgbG9va3VwLgovLwovLyBSZXR1cm5zOgovLyAgIC0gYm9vbDogdHJ1ZSB3aGVuIHRoZSBuYW1lc3BhY2VkIGtleSBpcyBwcmVzZW50LCBpbmNsdWRpbmcgd2hlbiBpdHMgc3RvcmVkIHZhbHVlIGlzIG5pbDsgZmFsc2Ugb3RoZXJ3aXNlLgpmdW5jIChrICprdlN0b3JlKSBIYXMoa2V5IHN0cmluZykgYm9vbCB7CglfLCBleGlzdHMgOj0gay5kYXRhW2subWFrZUtleShrZXkpXQoKCXJldHVybiBleGlzdHMKfQoKLy8gR2V0IHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleS4KLy8gUmVhZHMgYXJlIHB1YmxpYyB3aXRoaW4gdGhlIHBhY2thZ2U7IG9ubHkgd3JpdGVzIGFyZSBnYXRlZCBieSB0aGUgQUNMLgovLyBSZWFsbXMgZXhwb3Npbmcgc2Vuc2l0aXZlIHZhbHVlcyBtdXN0IGVuZm9yY2UgdGhlaXIgb3duIHJlYWQgcG9saWN5IGJlZm9yZQovLyBjYWxsaW5nIGludG8gdGhlIHN0b3JlLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0ga2V5OiBMb2dpY2FsIGtleSB3aG9zZSBuYW1lc3BhY2VkIGVudHJ5IHNob3VsZCBiZSByZXRyaWV2ZWQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBhbnk6IFN0b3JlZCB2YWx1ZSwgaW5jbHVkaW5nIGFuIGV4cGxpY2l0bHkgc3RvcmVkIG5pbCwgb3IgbmlsIHdoZW4ga2V5IGlzIGFic2VudC4KLy8gICAtIGVycm9yOiBuaWwgd2hlbiBrZXkgZXhpc3RzOyBvdGhlcndpc2UgRXJyS2V5Tm90Rm91bmQuCmZ1bmMgKGsgKmt2U3RvcmUpIEdldChrZXkgc3RyaW5nKSAoYW55LCBlcnJvcikgewoJdmFsdWUsIGV4aXN0cyA6PSBrLmRhdGFbay5tYWtlS2V5KGtleSldCglpZiAhZXhpc3RzIHsKCQlyZXR1cm4gbmlsLCBlcnJvcnMuTmV3KEVycktleU5vdEZvdW5kKQoJfQoKCXJldHVybiB2YWx1ZSwgbmlsCn0KCi8vIEdldEludDY0IHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleSBhbmQgY2FzdHMgaXQgdG8gaW50NjQuCi8vIFJldHVybnMgRXJyRmFpbGVkQ2FzdCBpZiB0aGUgdmFsdWUgaXMgbm90IG9mIHR5cGUgaW50NjQuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHdob3NlIHN0b3JlZCB2YWx1ZSBtdXN0IGhhdmUgZHluYW1pYyB0eXBlIGludDY0LgovLwovLyBSZXR1cm5zOgovLyAgIC0gaW50NjQ6IFN0b3JlZCBpbnQ2NCB2YWx1ZSwgb3IgMCB3aGVuIHRoZSBrZXkgaXMgYWJzZW50IG9yIGhhcyBhbm90aGVyIHR5cGUuCi8vICAgLSBlcnJvcjogbmlsIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSBFcnJLZXlOb3RGb3VuZCBvciBFcnJGYWlsZWRDYXN0LgpmdW5jIChrICprdlN0b3JlKSBHZXRJbnQ2NChrZXkgc3RyaW5nKSAoaW50NjQsIGVycm9yKSB7CglyZXN1bHQsIGVyciA6PSBrLkdldChrZXkpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gMCwgZXJyCgl9CgoJcmV0dXJuIGNhc3RUb0ludDY0KHJlc3VsdCkKfQoKLy8gR2V0VWludDY0IHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleSBhbmQgY2FzdHMgaXQgdG8gdWludDY0LgovLyBSZXR1cm5zIEVyckZhaWxlZENhc3QgaWYgdGhlIHZhbHVlIGlzIG5vdCBvZiB0eXBlIHVpbnQ2NC4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2Ugc3RvcmVkIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgdWludDY0LgovLwovLyBSZXR1cm5zOgovLyAgIC0gdWludDY0OiBTdG9yZWQgdWludDY0IHZhbHVlLCBvciAwIHdoZW4gdGhlIGtleSBpcyBhYnNlbnQgb3IgaGFzIGFub3RoZXIgdHlwZS4KLy8gICAtIGVycm9yOiBuaWwgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIEVycktleU5vdEZvdW5kIG9yIEVyckZhaWxlZENhc3QuCmZ1bmMgKGsgKmt2U3RvcmUpIEdldFVpbnQ2NChrZXkgc3RyaW5nKSAodWludDY0LCBlcnJvcikgewoJcmVzdWx0LCBlcnIgOj0gay5HZXQoa2V5KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIDAsIGVycgoJfQoKCXJldHVybiBjYXN0VG9VaW50NjQocmVzdWx0KQp9CgovLyBHZXRCb29sIHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleSBhbmQgY2FzdHMgaXQgdG8gYm9vbC4KLy8gUmV0dXJucyBFcnJGYWlsZWRDYXN0IGlmIHRoZSB2YWx1ZSBpcyBub3Qgb2YgdHlwZSBib29sLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0ga2V5OiBMb2dpY2FsIGtleSB3aG9zZSBzdG9yZWQgdmFsdWUgbXVzdCBoYXZlIGR5bmFtaWMgdHlwZSBib29sLgovLwovLyBSZXR1cm5zOgovLyAgIC0gYm9vbDogU3RvcmVkIGJvb2wgdmFsdWUsIG9yIGZhbHNlIHdoZW4gdGhlIGtleSBpcyBhYnNlbnQgb3IgaGFzIGFub3RoZXIgdHlwZS4KLy8gICAtIGVycm9yOiBuaWwgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIEVycktleU5vdEZvdW5kIG9yIEVyckZhaWxlZENhc3QuCmZ1bmMgKGsgKmt2U3RvcmUpIEdldEJvb2woa2V5IHN0cmluZykgKGJvb2wsIGVycm9yKSB7CglyZXN1bHQsIGVyciA6PSBrLkdldChrZXkpCglpZiBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gZmFsc2UsIGVycgoJfQoKCXJldHVybiBjYXN0VG9Cb29sKHJlc3VsdCkKfQoKLy8gR2V0U3RyaW5nIHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleSBhbmQgY2FzdHMgaXQgdG8gc3RyaW5nLgovLyBSZXR1cm5zIEVyckZhaWxlZENhc3QgaWYgdGhlIHZhbHVlIGlzIG5vdCBvZiB0eXBlIHN0cmluZy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2Ugc3RvcmVkIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgc3RyaW5nLgovLwovLyBSZXR1cm5zOgovLyAgIC0gc3RyaW5nOiBTdG9yZWQgc3RyaW5nIHZhbHVlLCBvciB0aGUgZW1wdHkgc3RyaW5nIHdoZW4gdGhlIGtleSBpcyBhYnNlbnQgb3IgaGFzIGFub3RoZXIgdHlwZS4KLy8gICAtIGVycm9yOiBuaWwgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIEVycktleU5vdEZvdW5kIG9yIEVyckZhaWxlZENhc3QuCmZ1bmMgKGsgKmt2U3RvcmUpIEdldFN0cmluZyhrZXkgc3RyaW5nKSAoc3RyaW5nLCBlcnJvcikgewoJcmVzdWx0LCBlcnIgOj0gay5HZXQoa2V5KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuICIiLCBlcnIKCX0KCglyZXR1cm4gY2FzdFRvU3RyaW5nKHJlc3VsdCkKfQoKLy8gR2V0QWRkcmVzcyByZXRyaWV2ZXMgYSB2YWx1ZSBieSBrZXkgYW5kIGNhc3RzIGl0IHRvIGFkZHJlc3MuCi8vIFJldHVybnMgRXJyRmFpbGVkQ2FzdCBpZiB0aGUgdmFsdWUgaXMgbm90IG9mIHR5cGUgYWRkcmVzcy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2Ugc3RvcmVkIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgYWRkcmVzcy4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGFkZHJlc3M6IFN0b3JlZCBhZGRyZXNzIHZhbHVlLCBvciB0aGUgZW1wdHkgYWRkcmVzcyB3aGVuIHRoZSBrZXkgaXMgYWJzZW50IG9yIGhhcyBhbm90aGVyIHR5cGUuCi8vICAgLSBlcnJvcjogbmlsIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSBFcnJLZXlOb3RGb3VuZCBvciBFcnJGYWlsZWRDYXN0LgpmdW5jIChrICprdlN0b3JlKSBHZXRBZGRyZXNzKGtleSBzdHJpbmcpIChhZGRyZXNzLCBlcnJvcikgewoJcmVzdWx0LCBlcnIgOj0gay5HZXQoa2V5KQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIGFkZHJlc3MoIiIpLCBlcnIKCX0KCglyZXR1cm4gY2FzdFRvQWRkcmVzcyhyZXN1bHQpCn0KCi8vIEdldEJQVHJlZSByZXRyaWV2ZXMgYSB2YWx1ZSBieSBrZXkgYW5kIGNhc3RzIGl0IHRvICpicHRyZWUuQlBUcmVlLgovLyBSZXR1cm5zIEVyckZhaWxlZENhc3QgaWYgdGhlIHZhbHVlIGlzIG5vdCBvZiB0eXBlICpicHRyZWUuQlBUcmVlLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0ga2V5OiBMb2dpY2FsIGtleSB3aG9zZSBzdG9yZWQgdmFsdWUgbXVzdCBoYXZlIGR5bmFtaWMgdHlwZSAqYnB0cmVlLkJQVHJlZS4KLy8KLy8gUmV0dXJuczoKLy8gICAtICpicHRyZWUuQlBUcmVlOiBTdG9yZWQgQisgdHJlZSBwb2ludGVyLCBvciBuaWwgd2hlbiB0aGUga2V5IGlzIGFic2VudCBvciBoYXMgYW5vdGhlciB0eXBlLgovLyAgIC0gZXJyb3I6IG5pbCBvbiBzdWNjZXNzOyBvdGhlcndpc2UgRXJyS2V5Tm90Rm91bmQgb3IgRXJyRmFpbGVkQ2FzdC4KZnVuYyAoayAqa3ZTdG9yZSkgR2V0QlBUcmVlKGtleSBzdHJpbmcpICgqYnB0cmVlLkJQVHJlZSwgZXJyb3IpIHsKCXJlc3VsdCwgZXJyIDo9IGsuR2V0KGtleSkKCWlmIGVyciAhPSBuaWwgewoJCXJldHVybiBuaWwsIGVycgoJfQoKCXJldHVybiBjYXN0VG9CUFRyZWUocmVzdWx0KQp9CgovLyBTZXQgc3RvcmVzIGEgdmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gXzogSW50ZXJyZWFsbS1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwLgovLyAgIC0gcmxtOiBQcm9wYWdhdGVkIGN1cnJlbnQgcmVhbG0gY29udGV4dCBmcm9tIHRoZSBkb21haW4gd3JhcHBlcjsgdGhpcyBpbXBsZW1lbnRhdGlvbiB2YWxpZGF0ZXMgcmxtLklzQ3VycmVudCgpIGFuZCB1c2VzIHJsbS5BZGRyZXNzKCkgZm9yIGNvZGUtY2FsbGVyIHdyaXRlIGF1dGhvcml6YXRpb24uCi8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHVuZGVyIHdoaWNoIHZhbHVlIGlzIHN0b3JlZDsgdGhlIHN0b3JlIGFkZHMgaXRzIGRvbWFpbiBuYW1lc3BhY2UgcHJlZml4LgovLyAgIC0gdmFsdWU6IEFyYml0cmFyeSB2YWx1ZSB0byBzdG9yZSB1bmRlciBrZXkuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBlcnJvcjogbmlsIHdoZW4gdmFsdWUgaXMgc3RvcmVkOyBvdGhlcndpc2UgRXJyU3Bvb2ZlZFJlYWxtIG9yIEVycldyaXRlUGVybWlzc2lvbkRlbmllZC4KZnVuYyAoayAqa3ZTdG9yZSkgU2V0KF8gaW50LCBybG0gcmVhbG0sIGtleSBzdHJpbmcsIHZhbHVlIGFueSkgZXJyb3IgewoJaWYgIXJsbS5Jc0N1cnJlbnQoKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJyU3Bvb2ZlZFJlYWxtKQoJfQoKCWlmIHJsbS5Jc0NvZGUoKSAmJiAhay5Jc1dyaXRlQXV0aG9yaXplZChybG0uQWRkcmVzcygpKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJyV3JpdGVQZXJtaXNzaW9uRGVuaWVkKQoJfQoKCWsuZGF0YVtrLm1ha2VLZXkoa2V5KV0gPSB2YWx1ZQoKCXJldHVybiBuaWwKfQoKLy8gRGVsZXRlIHJlbW92ZXMgYSBrZXkgZnJvbSB0aGUgc3RvcmUuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSBfOiBJbnRlcnJlYWxtLWNhbGwgZGlzY3JpbWluYXRvcjsgY2FsbGVycyBwYXNzIDAuCi8vICAgLSBybG06IFByb3BhZ2F0ZWQgY3VycmVudCByZWFsbSBjb250ZXh0IGZyb20gdGhlIGRvbWFpbiB3cmFwcGVyOyB0aGlzIGltcGxlbWVudGF0aW9uIHZhbGlkYXRlcyBybG0uSXNDdXJyZW50KCkgYW5kIHVzZXMgcmxtLkFkZHJlc3MoKSBmb3IgY29kZS1jYWxsZXIgd3JpdGUgYXV0aG9yaXphdGlvbi4KLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2UgbmFtZXNwYWNlZCBlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGVycm9yOiBuaWwgd2hlbiBrZXkgaXMgcmVtb3ZlZDsgb3RoZXJ3aXNlIEVyclNwb29mZWRSZWFsbSwgRXJyV3JpdGVQZXJtaXNzaW9uRGVuaWVkLCBvciBFcnJLZXlOb3RGb3VuZC4KZnVuYyAoayAqa3ZTdG9yZSkgRGVsZXRlKF8gaW50LCBybG0gcmVhbG0sIGtleSBzdHJpbmcpIGVycm9yIHsKCWlmICFybG0uSXNDdXJyZW50KCkgewoJCXJldHVybiBlcnJvcnMuTmV3KEVyclNwb29mZWRSZWFsbSkKCX0KCglpZiBybG0uSXNDb2RlKCkgJiYgIWsuSXNXcml0ZUF1dGhvcml6ZWQocmxtLkFkZHJlc3MoKSkgewoJCXJldHVybiBlcnJvcnMuTmV3KEVycldyaXRlUGVybWlzc2lvbkRlbmllZCkKCX0KCglpZiAhay5IYXMoa2V5KSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJyS2V5Tm90Rm91bmQpCgl9CgoJZGVsZXRlKGsuZGF0YSwgay5tYWtlS2V5KGtleSkpCgoJcmV0dXJuIG5pbAp9CgovLyBJc0RvbWFpbkFkZHJlc3MgY2hlY2tzIGlmIHRoZSBnaXZlbiBhZGRyZXNzIGlzIHRoZSBkb21haW4gYWRkcmVzcy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGFkZHI6IEFkZHJlc3MgdG8gY29tcGFyZSB3aXRoIHRoZSBzdG9yZSdzIG93bmluZyBkb21haW4gYWRkcmVzcy4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGJvb2w6IHRydWUgd2hlbiBhZGRyIGVxdWFscyB0aGUgb3duaW5nIGRvbWFpbiBhZGRyZXNzOyBmYWxzZSBvdGhlcndpc2UuCmZ1bmMgKGsgKmt2U3RvcmUpIElzRG9tYWluQWRkcmVzcyhhZGRyIGFkZHJlc3MpIGJvb2wgewoJcmV0dXJuIGsuZG9tYWluQWRkcmVzcyA9PSBhZGRyCn0KCi8vIElzV3JpdGVBdXRob3JpemVkIGNoZWNrcyBpZiB0aGUgY2FsbGVyIGhhcyB3cml0ZSBwZXJtaXNzaW9uLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gY2FsbGVyOiBBZGRyZXNzIHdob3NlIHdyaXRlIHBlcm1pc3Npb24gc2hvdWxkIGJlIGV2YWx1YXRlZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGJvb2w6IHRydWUgZm9yIHRoZSBkb21haW4gYWRkcmVzcyBvciBhIHJlZ2lzdGVyZWQgY2FsbGVyIHdpdGggV3JpdGUgcGVybWlzc2lvbjsgZmFsc2Ugb3RoZXJ3aXNlLgpmdW5jIChrICprdlN0b3JlKSBJc1dyaXRlQXV0aG9yaXplZChjYWxsZXIgYWRkcmVzcykgYm9vbCB7CglpZiBrLklzRG9tYWluQWRkcmVzcyhjYWxsZXIpIHsKCQlyZXR1cm4gdHJ1ZQoJfQoKCWlmICFrLmlzUmVnaXN0ZXJlZEF1dGhvcml6ZWRDYWxsZXIoY2FsbGVyKSB7CgkJcmV0dXJuIGZhbHNlCgl9CgoJcmV0dXJuIGsuYXV0aG9yaXplZENhbGxlcnNbY2FsbGVyXSA+PSBXcml0ZQp9CgovLyBHZXRBdXRob3JpemVkQ2FsbGVycyByZXR1cm5zIGEgY29weSBvZiB0aGUgYXV0aG9yaXplZCBjYWxsZXJzIG1hcCB3aXRoIHRoZWlyIHBlcm1pc3Npb25zLgovLyBBIGNvcHkgaXMgcmV0dXJuZWQgc28gY2FsbGVycyBjYW5ub3QgbXV0YXRlIHRoZSBBQ0wgbWFwIGRpcmVjdGx5LgovLwovLyBSZXR1cm5zOgovLyAgIC0gbWFwW2FkZHJlc3NdUGVybWlzc2lvbjogTmV3bHkgYWxsb2NhdGVkIHNuYXBzaG90IG9mIHJlZ2lzdGVyZWQgY2FsbGVyIHBlcm1pc3Npb25zLgovLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRoZSBBQ0wgbWFwIGV4aXN0czsgb3RoZXJ3aXNlIEVyckF1dGhvcml6ZWRDYWxsZXJOb3RGb3VuZC4KZnVuYyAoayAqa3ZTdG9yZSkgR2V0QXV0aG9yaXplZENhbGxlcnMoKSAobWFwW2FkZHJlc3NdUGVybWlzc2lvbiwgZXJyb3IpIHsKCWlmIGsuYXV0aG9yaXplZENhbGxlcnMgPT0gbmlsIHsKCQlyZXR1cm4gbWFrZShtYXBbYWRkcmVzc11QZXJtaXNzaW9uKSwgZXJyb3JzLk5ldyhFcnJBdXRob3JpemVkQ2FsbGVyTm90Rm91bmQpCgl9CgoJb3V0IDo9IG1ha2UobWFwW2FkZHJlc3NdUGVybWlzc2lvbiwgbGVuKGsuYXV0aG9yaXplZENhbGxlcnMpKQoJZm9yIGFkZHIsIHBlcm0gOj0gcmFuZ2Ugay5hdXRob3JpemVkQ2FsbGVycyB7CgkJb3V0W2FkZHJdID0gcGVybQoJfQoJcmV0dXJuIG91dCwgbmlsCn0KCi8vIEFkZEF1dGhvcml6ZWRDYWxsZXIgYWRkcyBhIG5ldyBhdXRob3JpemVkIGNhbGxlciB3aXRoIHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbi4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIF86IEludGVycmVhbG0tY2FsbCBkaXNjcmltaW5hdG9yOyBjYWxsZXJzIHBhc3MgMC4KLy8gICAtIHJsbTogUHJvcGFnYXRlZCBjdXJyZW50IHJlYWxtIGNvbnRleHQgZnJvbSB0aGUgZG9tYWluIHdyYXBwZXI7IHRoaXMgaW1wbGVtZW50YXRpb24gdmFsaWRhdGVzIHJsbS5Jc0N1cnJlbnQoKSBhbmQgcmVxdWlyZXMgaXRzIGFkZHJlc3MgdG8gYmUgdGhlIG93bmluZyBkb21haW4gZm9yIEFDTCB1cGRhdGVzLgovLyAgIC0gY2FsbGVyOiBBZGRyZXNzIHRvIGFkZCB0byB0aGUgd3JpdGUtYXV0aG9yaXphdGlvbiBtYXAuCi8vICAgLSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uIHRvIGFzc2lnbjsgcmVnaXN0cmF0aW9uIEFQSXMgYWNjZXB0IG9ubHkgV3JpdGUuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBlcnJvcjogbmlsIHdoZW4gY2FsbGVyIGlzIGFkZGVkOyBvdGhlcndpc2UgRXJyU3Bvb2ZlZFJlYWxtLCBFcnJVcGRhdGVQZXJtaXNzaW9uRGVuaWVkLCBFcnJBdXRob3JpemVkQ2FsbGVyQWxyZWFkeVJlZ2lzdGVyZWQsIG9yIEVyckludmFsaWRQZXJtaXNzaW9uLgpmdW5jIChrICprdlN0b3JlKSBBZGRBdXRob3JpemVkQ2FsbGVyKF8gaW50LCBybG0gcmVhbG0sIGNhbGxlciBhZGRyZXNzLCBwZXJtaXNzaW9uIFBlcm1pc3Npb24pIGVycm9yIHsKCWlmICFybG0uSXNDdXJyZW50KCkgewoJCXJldHVybiBlcnJvcnMuTmV3KEVyclNwb29mZWRSZWFsbSkKCX0KCglpZiAhay5pc1VwZGF0YWJsZUF1dGhvcml6ZWRDYWxsZXIocmxtLkFkZHJlc3MoKSkgewoJCXJldHVybiBlcnJvcnMuTmV3KEVyclVwZGF0ZVBlcm1pc3Npb25EZW5pZWQpCgl9CgoJaWYgay5pc1JlZ2lzdGVyZWRBdXRob3JpemVkQ2FsbGVyKGNhbGxlcikgewoJCXJldHVybiBlcnJvcnMuTmV3KEVyckF1dGhvcml6ZWRDYWxsZXJBbHJlYWR5UmVnaXN0ZXJlZCkKCX0KCglpZiAhaXNWYWxpZFBlcm1pc3Npb24ocGVybWlzc2lvbikgewoJCXJldHVybiBlcnJvcnMuTmV3KEVyckludmFsaWRQZXJtaXNzaW9uKQoJfQoKCWsuYXV0aG9yaXplZENhbGxlcnNbY2FsbGVyXSA9IHBlcm1pc3Npb24KCglyZXR1cm4gbmlsCn0KCi8vIFVwZGF0ZUF1dGhvcml6ZWRDYWxsZXIgdXBkYXRlcyB0aGUgcGVybWlzc2lvbiBvZiBhbiBleGlzdGluZyBhdXRob3JpemVkIGNhbGxlci4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIF86IEludGVycmVhbG0tY2FsbCBkaXNjcmltaW5hdG9yOyBjYWxsZXJzIHBhc3MgMC4KLy8gICAtIHJsbTogUHJvcGFnYXRlZCBjdXJyZW50IHJlYWxtIGNvbnRleHQgZnJvbSB0aGUgZG9tYWluIHdyYXBwZXI7IHRoaXMgaW1wbGVtZW50YXRpb24gdmFsaWRhdGVzIHJsbS5Jc0N1cnJlbnQoKSBhbmQgcmVxdWlyZXMgaXRzIGFkZHJlc3MgdG8gYmUgdGhlIG93bmluZyBkb21haW4gZm9yIEFDTCB1cGRhdGVzLgovLyAgIC0gY2FsbGVyOiBBZGRyZXNzIG9mIHRoZSBhbHJlYWR5IHJlZ2lzdGVyZWQgY2FsbGVyIHdob3NlIHBlcm1pc3Npb24gc2hvdWxkIGNoYW5nZS4KLy8gICAtIHBlcm1pc3Npb246IFJlcGxhY2VtZW50IHBlcm1pc3Npb247IHJlZ2lzdHJhdGlvbiBBUElzIGFjY2VwdCBvbmx5IFdyaXRlLgovLwovLyBSZXR1cm5zOgovLyAgIC0gZXJyb3I6IG5pbCB3aGVuIGNhbGxlcidzIHBlcm1pc3Npb24gaXMgdXBkYXRlZDsgb3RoZXJ3aXNlIEVyclNwb29mZWRSZWFsbSwgRXJyVXBkYXRlUGVybWlzc2lvbkRlbmllZCwgRXJyQXV0aG9yaXplZENhbGxlck5vdEZvdW5kLCBvciBFcnJJbnZhbGlkUGVybWlzc2lvbi4KZnVuYyAoayAqa3ZTdG9yZSkgVXBkYXRlQXV0aG9yaXplZENhbGxlcihfIGludCwgcmxtIHJlYWxtLCBjYWxsZXIgYWRkcmVzcywgcGVybWlzc2lvbiBQZXJtaXNzaW9uKSBlcnJvciB7CglpZiAhcmxtLklzQ3VycmVudCgpIHsKCQlyZXR1cm4gZXJyb3JzLk5ldyhFcnJTcG9vZmVkUmVhbG0pCgl9CgoJaWYgIWsuaXNVcGRhdGFibGVBdXRob3JpemVkQ2FsbGVyKHJsbS5BZGRyZXNzKCkpIHsKCQlyZXR1cm4gZXJyb3JzLk5ldyhFcnJVcGRhdGVQZXJtaXNzaW9uRGVuaWVkKQoJfQoKCWlmICFrLmlzUmVnaXN0ZXJlZEF1dGhvcml6ZWRDYWxsZXIoY2FsbGVyKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJyQXV0aG9yaXplZENhbGxlck5vdEZvdW5kKQoJfQoKCWlmICFpc1ZhbGlkUGVybWlzc2lvbihwZXJtaXNzaW9uKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJySW52YWxpZFBlcm1pc3Npb24pCgl9CgoJay5hdXRob3JpemVkQ2FsbGVyc1tjYWxsZXJdID0gcGVybWlzc2lvbgoKCXJldHVybiBuaWwKfQoKLy8gUmVtb3ZlQXV0aG9yaXplZENhbGxlciByZW1vdmVzIGFuIGF1dGhvcml6ZWQgY2FsbGVyLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gXzogSW50ZXJyZWFsbS1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwLgovLyAgIC0gcmxtOiBQcm9wYWdhdGVkIGN1cnJlbnQgcmVhbG0gY29udGV4dCBmcm9tIHRoZSBkb21haW4gd3JhcHBlcjsgdGhpcyBpbXBsZW1lbnRhdGlvbiB2YWxpZGF0ZXMgcmxtLklzQ3VycmVudCgpIGFuZCByZXF1aXJlcyBpdHMgYWRkcmVzcyB0byBiZSB0aGUgb3duaW5nIGRvbWFpbiBmb3IgQUNMIHVwZGF0ZXMuCi8vICAgLSBjYWxsZXI6IEFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyZWQgY2FsbGVyIHRvIHJlbW92ZS4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGVycm9yOiBuaWwgd2hlbiBjYWxsZXIgaXMgcmVtb3ZlZDsgb3RoZXJ3aXNlIEVyclNwb29mZWRSZWFsbSwgRXJyVXBkYXRlUGVybWlzc2lvbkRlbmllZCwgb3IgRXJyQXV0aG9yaXplZENhbGxlck5vdEZvdW5kLgpmdW5jIChrICprdlN0b3JlKSBSZW1vdmVBdXRob3JpemVkQ2FsbGVyKF8gaW50LCBybG0gcmVhbG0sIGNhbGxlciBhZGRyZXNzKSBlcnJvciB7CglpZiAhcmxtLklzQ3VycmVudCgpIHsKCQlyZXR1cm4gZXJyb3JzLk5ldyhFcnJTcG9vZmVkUmVhbG0pCgl9CgoJaWYgIWsuaXNVcGRhdGFibGVBdXRob3JpemVkQ2FsbGVyKHJsbS5BZGRyZXNzKCkpIHsKCQlyZXR1cm4gZXJyb3JzLk5ldyhFcnJVcGRhdGVQZXJtaXNzaW9uRGVuaWVkKQoJfQoKCWlmICFrLmlzUmVnaXN0ZXJlZEF1dGhvcml6ZWRDYWxsZXIoY2FsbGVyKSB7CgkJcmV0dXJuIGVycm9ycy5OZXcoRXJyQXV0aG9yaXplZENhbGxlck5vdEZvdW5kKQoJfQoKCWRlbGV0ZShrLmF1dGhvcml6ZWRDYWxsZXJzLCBjYWxsZXIpCgoJcmV0dXJuIG5pbAp9CgovLyBpc1JlZ2lzdGVyZWRBdXRob3JpemVkQ2FsbGVyIGNoZWNrcyBpZiBhIGNhbGxlciBpcyByZWdpc3RlcmVkCmZ1bmMgKGsgKmt2U3RvcmUpIGlzUmVnaXN0ZXJlZEF1dGhvcml6ZWRDYWxsZXIoY2FsbGVyIGFkZHJlc3MpIGJvb2wgewoJXywgZXhpc3RzIDo9IGsuYXV0aG9yaXplZENhbGxlcnNbY2FsbGVyXQoKCXJldHVybiBleGlzdHMKfQoKLy8gaXNVcGRhdGFibGVBdXRob3JpemVkQ2FsbGVyIGNoZWNrcyBpZiB0aGUgY3VycmVudCByZWFsbSBpcyB0aGUgc2FtZSBhcyB0aGUgZG9tYWluIGFkZHJlc3MKZnVuYyAoayAqa3ZTdG9yZSkgaXNVcGRhdGFibGVBdXRob3JpemVkQ2FsbGVyKGN1cnJlbnRSZWFsbUFkZHJlc3MgYWRkcmVzcykgYm9vbCB7CglyZXR1cm4gY3VycmVudFJlYWxtQWRkcmVzcyA9PSBrLmRvbWFpbkFkZHJlc3MKfQoKLy8gbWFrZUtleSBjcmVhdGVzIGEgcHJlZml4ZWQga2V5IHdpdGggdGhlIGRvbWFpbiBhZGRyZXNzIHRvIGVuc3VyZSBpc29sYXRpb24KZnVuYyAoayAqa3ZTdG9yZSkgbWFrZUtleShrZXkgc3RyaW5nKSBzdHJpbmcgewoJcmV0dXJuIHN0cmluZyhrLmRvbWFpbkFkZHJlc3MpICsgIjoiICsga2V5Cn0KCi8vIGlzVmFsaWRQZXJtaXNzaW9uIGVuc3VyZXMgb25seSBXcml0ZSBpcyBhc3NpZ25hYmxlIHZpYSByZWdpc3RyYXRpb24gQVBJcy4KLy8gVGhlIHplcm8gdmFsdWUgaXMgcmVqZWN0ZWQgc28gY2FsbGVycyBtdXN0IHNwZWxsIG91dCBhbiBleHBsaWNpdCBwZXJtaXNzaW9uLgpmdW5jIGlzVmFsaWRQZXJtaXNzaW9uKHBlcm1pc3Npb24gUGVybWlzc2lvbikgYm9vbCB7CglyZXR1cm4gcGVybWlzc2lvbiA9PSBXcml0ZQp9ChrVNgoJdHlwZXMuZ25vEsc2cGFja2FnZSBzdG9yZQoKaW1wb3J0ICgKCWJwdHJlZSAiZ25vLmxhbmQvcC9udC9icHRyZWUvdjAiCikKCnR5cGUgUGVybWlzc2lvbiB1aW50OAoKY29uc3QgKAoJXyBQZXJtaXNzaW9uID0gaW90YQoJV3JpdGUKKQoKLy8gS1ZTdG9yZSBpbnRlcmZhY2UgZm9yIGRvbWFpbi1zcGVjaWZpYyBzdG9yYWdlCi8vIEVhY2ggZG9tYWluIGNyZWF0ZXMgaXRzIG93biBpbnN0YW5jZSBvZiBLVlN0b3JlCnR5cGUgS1ZTdG9yZSBpbnRlcmZhY2UgewoJLy8gR2V0RG9tYWluQWRkcmVzcyByZXR1cm5zIHRoZSBkb21haW4gYWRkcmVzcy4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGFkZHJlc3M6IEFkZHJlc3Mgb2YgdGhlIGRvbWFpbiByZWFsbSB0aGF0IG93bnMgdGhpcyBzdG9yZS4KCUdldERvbWFpbkFkZHJlc3MoKSBhZGRyZXNzCgoJLy8gR2V0QWxsS2V5cyByZXR1cm5zIGFsbCBrZXlzIGluIHRoaXMgc3RvcmUuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBbXXN0cmluZzogS2V5cyBjdXJyZW50bHkgc3RvcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGFueSBuYW1lc3BhY2UgcHJlZml4IGl0IHVzZXMuCgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIGtleXMgYXJlIGVudW1lcmF0ZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgdGhlIGltcGxlbWVudGF0aW9uJ3MgcmV0cmlldmFsIGVycm9yLgoJR2V0QWxsS2V5cygpIChbXXN0cmluZywgZXJyb3IpCgoJLy8gSGFzIGNoZWNrcyBpZiBhIGtleSBleGlzdHMuCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHRvIHRlc3QgZm9yIHByZXNlbmNlIGluIHRoZSBzdG9yZS4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGJvb2w6IHRydWUgd2hlbiBrZXkgaGFzIGEgc3RvcmVkIGVudHJ5OyBmYWxzZSB3aGVuIG5vIGVudHJ5IGV4aXN0cy4KCUhhcyhrZXkgc3RyaW5nKSBib29sCgoJLy8gR2V0IHJldHJpZXZlcyBhIHZhbHVlIGJ5IGtleS4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2Ugc3RvcmVkIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZC4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGFueTogVmFsdWUgc3RvcmVkIHVuZGVyIGtleSwgaW5jbHVkaW5nIGFuIGV4cGxpY2l0bHkgc3RvcmVkIG5pbC4KCS8vICAgLSBlcnJvcjogbmlsIHdoZW4ga2V5IGV4aXN0czsgb3RoZXJ3aXNlIHRoZSBpbXBsZW1lbnRhdGlvbidzIG1pc3Npbmcta2V5IGVycm9yLgoJR2V0KGtleSBzdHJpbmcpIChhbnksIGVycm9yKQoKCS8vIEdldEludDY0IHJldHJpZXZlcyBhbiBpbnQ2NCB2YWx1ZSBieSBrZXkuCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHdob3NlIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgaW50NjQuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBpbnQ2NDogU3RvcmVkIGludDY0IHZhbHVlLCBvciB0aGUgaW1wbGVtZW50YXRpb24ncyB6ZXJvIHZhbHVlIHdoZW4gcmV0cmlldmFsIG9yIGNhc3RpbmcgZmFpbHMuCgkvLyAgIC0gZXJyb3I6IG5pbCBvbiBzdWNjZXNzOyBvdGhlcndpc2UgYSBtaXNzaW5nLWtleSBvciBmYWlsZWQtY2FzdCBlcnJvci4KCUdldEludDY0KGtleSBzdHJpbmcpIChpbnQ2NCwgZXJyb3IpCgoJLy8gR2V0VWludDY0IHJldHJpZXZlcyBhIHVpbnQ2NCB2YWx1ZSBieSBrZXkuCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHdob3NlIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgdWludDY0LgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gdWludDY0OiBTdG9yZWQgdWludDY0IHZhbHVlLCBvciB0aGUgaW1wbGVtZW50YXRpb24ncyB6ZXJvIHZhbHVlIHdoZW4gcmV0cmlldmFsIG9yIGNhc3RpbmcgZmFpbHMuCgkvLyAgIC0gZXJyb3I6IG5pbCBvbiBzdWNjZXNzOyBvdGhlcndpc2UgYSBtaXNzaW5nLWtleSBvciBmYWlsZWQtY2FzdCBlcnJvci4KCUdldFVpbnQ2NChrZXkgc3RyaW5nKSAodWludDY0LCBlcnJvcikKCgkvLyBHZXRCb29sIHJldHJpZXZlcyBhIGJvb2wgdmFsdWUgYnkga2V5LgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0ga2V5OiBMb2dpY2FsIGtleSB3aG9zZSB2YWx1ZSBtdXN0IGhhdmUgZHluYW1pYyB0eXBlIGJvb2wuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBib29sOiBTdG9yZWQgYm9vbCB2YWx1ZSwgb3IgZmFsc2Ugd2hlbiByZXRyaWV2YWwgb3IgY2FzdGluZyBmYWlscy4KCS8vICAgLSBlcnJvcjogbmlsIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSBhIG1pc3Npbmcta2V5IG9yIGZhaWxlZC1jYXN0IGVycm9yLgoJR2V0Qm9vbChrZXkgc3RyaW5nKSAoYm9vbCwgZXJyb3IpCgoJLy8gR2V0U3RyaW5nIHJldHJpZXZlcyBhIHN0cmluZyB2YWx1ZSBieSBrZXkuCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHdob3NlIHZhbHVlIG11c3QgaGF2ZSBkeW5hbWljIHR5cGUgc3RyaW5nLgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gc3RyaW5nOiBTdG9yZWQgc3RyaW5nIHZhbHVlLCBvciB0aGUgZW1wdHkgc3RyaW5nIHdoZW4gcmV0cmlldmFsIG9yIGNhc3RpbmcgZmFpbHMuCgkvLyAgIC0gZXJyb3I6IG5pbCBvbiBzdWNjZXNzOyBvdGhlcndpc2UgYSBtaXNzaW5nLWtleSBvciBmYWlsZWQtY2FzdCBlcnJvci4KCUdldFN0cmluZyhrZXkgc3RyaW5nKSAoc3RyaW5nLCBlcnJvcikKCgkvLyBHZXRBZGRyZXNzIHJldHJpZXZlcyBhbiBhZGRyZXNzIHZhbHVlIGJ5IGtleS4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2UgdmFsdWUgbXVzdCBoYXZlIGR5bmFtaWMgdHlwZSBhZGRyZXNzLgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gYWRkcmVzczogU3RvcmVkIGFkZHJlc3MgdmFsdWUsIG9yIHRoZSBlbXB0eSBhZGRyZXNzIHdoZW4gcmV0cmlldmFsIG9yIGNhc3RpbmcgZmFpbHMuCgkvLyAgIC0gZXJyb3I6IG5pbCBvbiBzdWNjZXNzOyBvdGhlcndpc2UgYSBtaXNzaW5nLWtleSBvciBmYWlsZWQtY2FzdCBlcnJvci4KCUdldEFkZHJlc3Moa2V5IHN0cmluZykgKGFkZHJlc3MsIGVycm9yKQoKCS8vIEdldEJQVHJlZSByZXRyaWV2ZXMgYSBCKyB0cmVlIHZhbHVlIGJ5IGtleS4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIGtleTogTG9naWNhbCBrZXkgd2hvc2UgdmFsdWUgbXVzdCBoYXZlIGR5bmFtaWMgdHlwZSAqYnB0cmVlLkJQVHJlZS4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtICpicHRyZWUuQlBUcmVlOiBTdG9yZWQgQisgdHJlZSBwb2ludGVyLCBvciBuaWwgd2hlbiByZXRyaWV2YWwgb3IgY2FzdGluZyBmYWlscy4KCS8vICAgLSBlcnJvcjogbmlsIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSBhIG1pc3Npbmcta2V5IG9yIGZhaWxlZC1jYXN0IGVycm9yLgoJR2V0QlBUcmVlKGtleSBzdHJpbmcpICgqYnB0cmVlLkJQVHJlZSwgZXJyb3IpCgoJLy8gU2V0IHN0b3JlcyBhIHZhbHVlIHdpdGggdGhlIGdpdmVuIGtleS4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIF86IEludGVycmVhbG0tY2FsbCBkaXNjcmltaW5hdG9yOyBjYWxsZXJzIHBhc3MgMC4KCS8vICAgLSBybG06IFByb3BhZ2F0ZWQgY3VycmVudCByZWFsbSBjb250ZXh0IGZyb20gdGhlIGRvbWFpbiB3cmFwcGVyOyBpbXBsZW1lbnRhdGlvbnMgdmFsaWRhdGUgaXQgYW5kIG1heSB1c2UgaXRzIGFkZHJlc3MgZm9yIHdyaXRlIGF1dGhvcml6YXRpb24uCgkvLyAgIC0ga2V5OiBMb2dpY2FsIGtleSB1bmRlciB3aGljaCB2YWx1ZSBpcyBzdG9yZWQuCgkvLyAgIC0gdmFsdWU6IEFyYml0cmFyeSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCBrZXkuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBlcnJvcjogbmlsIHdoZW4gdmFsdWUgaXMgc3RvcmVkOyBvdGhlcndpc2UgdGhlIGltcGxlbWVudGF0aW9uJ3MgcmVhbG0sIGF1dGhvcml6YXRpb24sIG9yIHN0b3JhZ2UgZXJyb3IuCglTZXQoXyBpbnQsIHJsbSByZWFsbSwga2V5IHN0cmluZywgdmFsdWUgYW55KSBlcnJvcgoKCS8vIERlbGV0ZSByZW1vdmVzIGEga2V5LgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gXzogSW50ZXJyZWFsbS1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwLgoJLy8gICAtIHJsbTogUHJvcGFnYXRlZCBjdXJyZW50IHJlYWxtIGNvbnRleHQgZnJvbSB0aGUgZG9tYWluIHdyYXBwZXI7IGltcGxlbWVudGF0aW9ucyB2YWxpZGF0ZSBpdCBhbmQgbWF5IHVzZSBpdHMgYWRkcmVzcyBmb3Igd3JpdGUgYXV0aG9yaXphdGlvbi4KCS8vICAgLSBrZXk6IExvZ2ljYWwga2V5IHdob3NlIHN0b3JlZCBlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZC4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGVycm9yOiBuaWwgd2hlbiBrZXkgaXMgcmVtb3ZlZDsgb3RoZXJ3aXNlIHRoZSBpbXBsZW1lbnRhdGlvbidzIHJlYWxtLCBhdXRob3JpemF0aW9uLCBtaXNzaW5nLWtleSwgb3Igc3RvcmFnZSBlcnJvci4KCURlbGV0ZShfIGludCwgcmxtIHJlYWxtLCBrZXkgc3RyaW5nKSBlcnJvcgoKCS8vIElzV3JpdGVBdXRob3JpemVkIGNoZWNrcyBpZiB0aGUgY2FsbGVyIGhhcyB3cml0ZSBwZXJtaXNzaW9uLgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gY2FsbGVyOiBBZGRyZXNzIHdob3NlIHdyaXRlIHBlcm1pc3Npb24gc2hvdWxkIGJlIGNoZWNrZWQuCgkvLwoJLy8gUmV0dXJuczoKCS8vICAgLSBib29sOiB0cnVlIHdoZW4gY2FsbGVyIGlzIGF1dGhvcml6ZWQgdG8gd3JpdGU7IGZhbHNlIG90aGVyd2lzZS4KCUlzV3JpdGVBdXRob3JpemVkKGNhbGxlciBhZGRyZXNzKSBib29sCgoJLy8gR2V0QXV0aG9yaXplZENhbGxlcnMgcmV0dXJucyBhbGwgYXV0aG9yaXplZCBjYWxsZXJzIGFuZCB0aGVpciBwZXJtaXNzaW9ucy4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIG1hcFthZGRyZXNzXVBlcm1pc3Npb246IENhbGxlci10by1wZXJtaXNzaW9uIG1hcHBpbmcgZXhwb3NlZCBieSB0aGUgaW1wbGVtZW50YXRpb24uCgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIHRoZSBBQ0wgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgdGhlIGltcGxlbWVudGF0aW9uJ3MgQUNMIHJldHJpZXZhbCBlcnJvci4KCUdldEF1dGhvcml6ZWRDYWxsZXJzKCkgKG1hcFthZGRyZXNzXVBlcm1pc3Npb24sIGVycm9yKQoKCS8vIEFkZEF1dGhvcml6ZWRDYWxsZXIgYWRkcyBhIG5ldyBhdXRob3JpemVkIGNhbGxlci4KCS8vCgkvLyBQYXJhbWV0ZXJzOgoJLy8gICAtIF86IEludGVycmVhbG0tY2FsbCBkaXNjcmltaW5hdG9yOyBjYWxsZXJzIHBhc3MgMC4KCS8vICAgLSBybG06IFByb3BhZ2F0ZWQgY3VycmVudCByZWFsbSBjb250ZXh0IGZyb20gdGhlIGRvbWFpbiB3cmFwcGVyOyBpbXBsZW1lbnRhdGlvbnMgdmFsaWRhdGUgaXQgYmVmb3JlIGNoYW5naW5nIEFDTCBzdGF0ZS4KCS8vICAgLSBjYWxsZXI6IEFkZHJlc3MgdG8gYWRkIHRvIHRoZSBhdXRob3JpemF0aW9uIG1hcC4KCS8vICAgLSBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uIHRvIGFzc2lnbiB0byBjYWxsZXI7IHRoZSBjb25jcmV0ZSBzdG9yZSBhY2NlcHRzIFdyaXRlLgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIGNhbGxlciBpcyBhZGRlZDsgb3RoZXJ3aXNlIHRoZSBpbXBsZW1lbnRhdGlvbidzIHJlYWxtLCBhdXRob3JpemF0aW9uLCBkdXBsaWNhdGUsIHBlcm1pc3Npb24sIG9yIHN0b3JhZ2UgZXJyb3IuCglBZGRBdXRob3JpemVkQ2FsbGVyKF8gaW50LCBybG0gcmVhbG0sIGNhbGxlciBhZGRyZXNzLCBwZXJtaXNzaW9uIFBlcm1pc3Npb24pIGVycm9yCgoJLy8gVXBkYXRlQXV0aG9yaXplZENhbGxlciB1cGRhdGVzIGFuIGV4aXN0aW5nIGNhbGxlcidzIHBlcm1pc3Npb24uCgkvLwoJLy8gUGFyYW1ldGVyczoKCS8vICAgLSBfOiBJbnRlcnJlYWxtLWNhbGwgZGlzY3JpbWluYXRvcjsgY2FsbGVycyBwYXNzIDAuCgkvLyAgIC0gcmxtOiBQcm9wYWdhdGVkIGN1cnJlbnQgcmVhbG0gY29udGV4dCBmcm9tIHRoZSBkb21haW4gd3JhcHBlcjsgaW1wbGVtZW50YXRpb25zIHZhbGlkYXRlIGl0IGJlZm9yZSBjaGFuZ2luZyBBQ0wgc3RhdGUuCgkvLyAgIC0gY2FsbGVyOiBBZGRyZXNzIG9mIHRoZSByZWdpc3RlcmVkIGNhbGxlciB0byB1cGRhdGUuCgkvLyAgIC0gcGVybWlzc2lvbjogUmVwbGFjZW1lbnQgcGVybWlzc2lvbiBmb3IgY2FsbGVyOyB0aGUgY29uY3JldGUgc3RvcmUgYWNjZXB0cyBXcml0ZS4KCS8vCgkvLyBSZXR1cm5zOgoJLy8gICAtIGVycm9yOiBuaWwgd2hlbiBjYWxsZXIncyBwZXJtaXNzaW9uIGlzIHVwZGF0ZWQ7IG90aGVyd2lzZSB0aGUgaW1wbGVtZW50YXRpb24ncyByZWFsbSwgYXV0aG9yaXphdGlvbiwgbWlzc2luZy1jYWxsZXIsIHBlcm1pc3Npb24sIG9yIHN0b3JhZ2UgZXJyb3IuCglVcGRhdGVBdXRob3JpemVkQ2FsbGVyKF8gaW50LCBybG0gcmVhbG0sIGNhbGxlciBhZGRyZXNzLCBwZXJtaXNzaW9uIFBlcm1pc3Npb24pIGVycm9yCgoJLy8gUmVtb3ZlQXV0aG9yaXplZENhbGxlciByZW1vdmVzIGFuIGF1dGhvcml6ZWQgY2FsbGVyLgoJLy8KCS8vIFBhcmFtZXRlcnM6CgkvLyAgIC0gXzogSW50ZXJyZWFsbS1jYWxsIGRpc2NyaW1pbmF0b3I7IGNhbGxlcnMgcGFzcyAwLgoJLy8gICAtIHJsbTogUHJvcGFnYXRlZCBjdXJyZW50IHJlYWxtIGNvbnRleHQgZnJvbSB0aGUgZG9tYWluIHdyYXBwZXI7IGltcGxlbWVudGF0aW9ucyB2YWxpZGF0ZSBpdCBiZWZvcmUgY2hhbmdpbmcgQUNMIHN0YXRlLgoJLy8gICAtIGNhbGxlcjogQWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXJlZCBjYWxsZXIgdG8gcmVtb3ZlLgoJLy8KCS8vIFJldHVybnM6CgkvLyAgIC0gZXJyb3I6IG5pbCB3aGVuIGNhbGxlciBpcyByZW1vdmVkOyBvdGhlcndpc2UgdGhlIGltcGxlbWVudGF0aW9uJ3MgcmVhbG0sIGF1dGhvcml6YXRpb24sIG1pc3NpbmctY2FsbGVyLCBvciBzdG9yYWdlIGVycm9yLgoJUmVtb3ZlQXV0aG9yaXplZENhbGxlcihfIGludCwgcmxtIHJlYWxtLCBjYWxsZXIgYWRkcmVzcykgZXJyb3IKfQoa3Q8KCXV0aWxzLmdubxLPD3BhY2thZ2Ugc3RvcmUKCmltcG9ydCAoCglicHRyZWUgImduby5sYW5kL3AvbnQvYnB0cmVlL3YwIgoJdWZtdCAiZ25vLmxhbmQvcC9udC91Zm10L3YwIgopCgovLyBjYXN0VG9JbnQ2NCBzYWZlbHkgY2FzdHMgYW4gYW55IHZhbHVlIHRvIGludDY0Ci8vIFJldHVybnMgRXJyRmFpbGVkQ2FzdCBpZiB0aGUgdmFsdWUgaXMgbm90IG9mIHR5cGUgaW50NjQKZnVuYyBjYXN0VG9JbnQ2NChyZXN1bHQgYW55KSAoaW50NjQsIGVycm9yKSB7Cgl2LCBvayA6PSByZXN1bHQuKGludDY0KQoJaWYgIW9rIHsKCQlyZXR1cm4gMCwgdWZtdC5FcnJvcmYoIiVzOiAlcyIsIEVyckZhaWxlZENhc3QsIHVmbXQuU3ByaW50ZigiY2FzdCAlVCB0byBpbnQ2NCIsIHJlc3VsdCkpCgl9CgoJcmV0dXJuIHYsIG5pbAp9CgovLyBjYXN0VG9VaW50NjQgc2FmZWx5IGNhc3RzIGFuIGFueSB2YWx1ZSB0byB1aW50NjQKLy8gUmV0dXJucyBFcnJGYWlsZWRDYXN0IGlmIHRoZSB2YWx1ZSBpcyBub3Qgb2YgdHlwZSB1aW50NjQKZnVuYyBjYXN0VG9VaW50NjQocmVzdWx0IGFueSkgKHVpbnQ2NCwgZXJyb3IpIHsKCXYsIG9rIDo9IHJlc3VsdC4odWludDY0KQoJaWYgIW9rIHsKCQlyZXR1cm4gMCwgdWZtdC5FcnJvcmYoIiVzOiAlcyIsIEVyckZhaWxlZENhc3QsIHVmbXQuU3ByaW50ZigiY2FzdCAlVCB0byB1aW50NjQiLCByZXN1bHQpKQoJfQoKCXJldHVybiB2LCBuaWwKfQoKLy8gY2FzdFRvQm9vbCBzYWZlbHkgY2FzdHMgYW4gYW55IHZhbHVlIHRvIGJvb2wKLy8gUmV0dXJucyBFcnJGYWlsZWRDYXN0IGlmIHRoZSB2YWx1ZSBpcyBub3Qgb2YgdHlwZSBib29sCmZ1bmMgY2FzdFRvQm9vbChyZXN1bHQgYW55KSAoYm9vbCwgZXJyb3IpIHsKCXYsIG9rIDo9IHJlc3VsdC4oYm9vbCkKCWlmICFvayB7CgkJcmV0dXJuIGZhbHNlLCB1Zm10LkVycm9yZigiJXM6ICVzIiwgRXJyRmFpbGVkQ2FzdCwgdWZtdC5TcHJpbnRmKCJjYXN0ICVUIHRvIGJvb2wiLCByZXN1bHQpKQoJfQoKCXJldHVybiB2LCBuaWwKfQoKLy8gY2FzdFRvU3RyaW5nIHNhZmVseSBjYXN0cyBhbiBhbnkgdmFsdWUgdG8gc3RyaW5nCi8vIFJldHVybnMgRXJyRmFpbGVkQ2FzdCBpZiB0aGUgdmFsdWUgaXMgbm90IG9mIHR5cGUgc3RyaW5nCmZ1bmMgY2FzdFRvU3RyaW5nKHJlc3VsdCBhbnkpIChzdHJpbmcsIGVycm9yKSB7Cgl2LCBvayA6PSByZXN1bHQuKHN0cmluZykKCWlmICFvayB7CgkJcmV0dXJuICIiLCB1Zm10LkVycm9yZigiJXM6ICVzIiwgRXJyRmFpbGVkQ2FzdCwgdWZtdC5TcHJpbnRmKCJjYXN0ICVUIHRvIHN0cmluZyIsIHJlc3VsdCkpCgl9CgoJcmV0dXJuIHYsIG5pbAp9CgovLyBjYXN0VG9CUFRyZWUgc2FmZWx5IGNhc3RzIGFuIGFueSB2YWx1ZSB0byAqYnB0cmVlLkJQVHJlZQovLyBSZXR1cm5zIEVyckZhaWxlZENhc3QgaWYgdGhlIHZhbHVlIGlzIG5vdCBvZiB0eXBlICpicHRyZWUuQlBUcmVlCmZ1bmMgY2FzdFRvQlBUcmVlKHJlc3VsdCBhbnkpICgqYnB0cmVlLkJQVHJlZSwgZXJyb3IpIHsKCXRyZWUsIG9rIDo9IHJlc3VsdC4oKmJwdHJlZS5CUFRyZWUpCglpZiAhb2sgewoJCXJldHVybiBuaWwsIHVmbXQuRXJyb3JmKCIlczogJXMiLCBFcnJGYWlsZWRDYXN0LCB1Zm10LlNwcmludGYoImNhc3QgJVQgdG8gKmJwdHJlZS5CUFRyZWUiLCByZXN1bHQpKQoJfQoKCXJldHVybiB0cmVlLCBuaWwKfQoKLy8gY2FzdFRvQWRkcmVzcyBzYWZlbHkgY2FzdHMgYW4gYW55IHZhbHVlIHRvIGFkZHJlc3MKLy8gUmV0dXJucyBFcnJGYWlsZWRDYXN0IGlmIHRoZSB2YWx1ZSBpcyBub3Qgb2YgdHlwZSBhZGRyZXNzCmZ1bmMgY2FzdFRvQWRkcmVzcyhyZXN1bHQgYW55KSAoYWRkcmVzcywgZXJyb3IpIHsKCXYsIG9rIDo9IHJlc3VsdC4oYWRkcmVzcykKCWlmICFvayB7CgkJcmV0dXJuIGFkZHJlc3MoIiIpLCB1Zm10LkVycm9yZigiJXM6ICVzIiwgRXJyRmFpbGVkQ2FzdCwgdWZtdC5TcHJpbnRmKCJjYXN0ICVUIHRvIGFkZHJlc3MiLCByZXN1bHQpKQoJfQoKCXJldHVybiB2LCBuaWwKfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwSEQj8pYUzEgo1MzUyMXVnbm90GqgBCjoKEy90bS5QdWJLZXlTZWNwMjU2azESIwohAwSc1QTD4tI6os8LnebKOB+i6fWXOKGBf9lRpSI1wrrhEkD5uudgq73v6zjHN5gXqWrd67cDh7TSXAZnM1yA4XSD7w9RA6c008KPMkdk5gr/u3SmuVeiceHp3Zq//bc7gLzSGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data