memoscan
← all memos

Memo 0x3930a694…1f65f3 on Ethereum

data:text/plain;base64,LyogRGlzY3Vzc2lvbjoKICogLy9kaXNjb3JkLmdnLzM0d2U4YmgKICovCi8qIERlc2NyaXB0aW9uOgogKiBGYXJtaW5nIE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eQogKi8KLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuNy42OwpwcmFnbWEgYWJpY29kZXIgdjI7Cgpjb250cmFjdCBQcm9wb3NhbENvZGUgewoKICAgIHN0cmluZyBwcml2YXRlIF9tZXRhZGF0YUxpbms7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBtZXRhZGF0YUxpbmspIHsKICAgICAgICBfbWV0YWRhdGFMaW5rID0gbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhTGluaygpIHB1YmxpYyB2aWV3IHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBfbWV0YWRhdGFMaW5rOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RhcnQoYWRkcmVzcywgYWRkcmVzcykgcHVibGljIHsKICAgICAgICBJTVZEUHJveHkgcHJveHkgPSBJTVZEUHJveHkobXNnLnNlbmRlcik7CiAgICAgICAgSVN0YXRlSG9sZGVyIHN0YXRlSG9sZGVyID0gSVN0YXRlSG9sZGVyKHByb3h5LmdldFN0YXRlSG9sZGVyQWRkcmVzcygpKTsKICAgICAgICBzdGF0ZUhvbGRlci5zZXRCb29sKF90b1N0YXRlSG9sZGVyS2V5KCJmYXJtaW5nLmF1dGhvcml6ZWQiLCBfdG9TdHJpbmcoMHhmOEI5ZUU3M2FFNEIzQzFkQWY1MDRiYTI2QkIwYTJGN0EyMDUxNkQ5KSksIHRydWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uU3RvcChhZGRyZXNzKSBwdWJsaWMgewogICAgfQoKICAgIGZ1bmN0aW9uIG1hbmFnZUZhcm1pbmcoYWRkcmVzcyBzZW5kZXIsIHVpbnQyNTYsIGJvb2wgdHJhbnNmZXIsIGFkZHJlc3MgZXJjMjBUb2tlbkFkZHJlc3MsIGFkZHJlc3MgdG8sIHVpbnQyNTYgdmFsdWUsIGJvb2wgYnlNaW50KSBwdWJsaWMgewogICAgICAgIElNVkRQcm94eSBwcm94eSA9IElNVkRQcm94eShtc2cuc2VuZGVyKTsKICAgICAgICBJU3RhdGVIb2xkZXIgc3RhdGVIb2xkZXIgPSBJU3RhdGVIb2xkZXIocHJveHkuZ2V0U3RhdGVIb2xkZXJBZGRyZXNzKCkpOwogICAgICAgIHJlcXVpcmUoc3RhdGVIb2xkZXIuZ2V0Qm9vbChfdG9TdGF0ZUhvbGRlcktleSgiZmFybWluZy5hdXRob3JpemVkIiwgX3RvU3RyaW5nKHNlbmRlcikpKSwgIlVuYXV0aG9yaXplZCBhY3Rpb24iKTsKICAgICAgICBJRVJDMjAgdG9rZW4gPSBJRVJDMjAoZXJjMjBUb2tlbkFkZHJlc3MpOwogICAgICAgIGlmKHRyYW5zZmVyKSB7CiAgICAgICAgICAgIGlmKGJ5TWludCkgewogICAgICAgICAgICAgICAgdWludDI1NiBsYXN0QW1vdW50ID0gdG9rZW4uYmFsYW5jZU9mKG1zZy5zZW5kZXIpOwogICAgICAgICAgICAgICAgdG9rZW4ubWludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBwcm94eS5mbHVzaFRvV2FsbGV0KGVyYzIwVG9rZW5BZGRyZXNzLCBmYWxzZSwgMCk7CiAgICAgICAgICAgICAgICBpZihsYXN0QW1vdW50ID4gMCkgewogICAgICAgICAgICAgICAgICAgIHByb3h5LnRyYW5zZmVyKG1zZy5zZW5kZXIsIGxhc3RBbW91bnQsIGFkZHJlc3ModG9rZW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwcm94eS50cmFuc2Zlcih0bywgdmFsdWUsIGVyYzIwVG9rZW5BZGRyZXNzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZihlcmMyMFRva2VuQWRkcmVzcyA9PSBhZGRyZXNzKDApKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKHNlbmRlciwgYnlNaW50ID8gYWRkcmVzcyh0aGlzKSA6IHByb3h5LmdldE1WRFdhbGxldEFkZHJlc3MoKSwgdmFsdWUpOwogICAgICAgICAgICBpZihieU1pbnQpIHsKICAgICAgICAgICAgICAgIHRva2VuLmJ1cm4odmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF90b1N0YXRlSG9sZGVyS2V5KHN0cmluZyBtZW1vcnkgYSwgc3RyaW5nIG1lbW9yeSBiKSBwcml2YXRlIHB1cmUgcmV0dXJucyhzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIF90b0xvd2VyQ2FzZShzdHJpbmcoYWJpLmVuY29kZVBhY2tlZChhLCAiLiIsIGIpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gX3RvU3RyaW5nKGFkZHJlc3MgX2FkZHIpIHByaXZhdGUgcHVyZSByZXR1cm5zKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICBieXRlczMyIHZhbHVlID0gYnl0ZXMzMih1aW50MjU2KF9hZGRyKSk7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGFscGhhYmV0ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwoKICAgICAgICBieXRlcyBtZW1vcnkgc3RyID0gbmV3IGJ5dGVzKDQyKTsKICAgICAgICBzdHJbMF0gPSAnMCc7CiAgICAgICAgc3RyWzFdID0gJ3gnOwogICAgICAgIGZvciAodWludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgc3RyWzIraSoyXSA9IGFscGhhYmV0W3VpbnQodWludDgodmFsdWVbaSArIDEyXSA+PiA0KSldOwogICAgICAgICAgICBzdHJbMytpKjJdID0gYWxwaGFiZXRbdWludCh1aW50OCh2YWx1ZVtpICsgMTJdICYgMHgwZikpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmluZyhzdHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIF90b0xvd2VyQ2FzZShzdHJpbmcgbWVtb3J5IHN0cikgcHJpdmF0ZSBwdXJlIHJldHVybnMoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIGJ5dGVzIG1lbW9yeSBiU3RyID0gYnl0ZXMoc3RyKTsKICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBiU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJTdHJbaV0gPSBiU3RyW2ldID49IDB4NDEgJiYgYlN0cltpXSA8PSAweDVBID8gYnl0ZXMxKHVpbnQ4KGJTdHJbaV0pICsgMHgyMCkgOiBiU3RyW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RyaW5nKGJTdHIpOwogICAgfQp9CgppbnRlcmZhY2UgSU1WRFByb3h5IHsKICAgIGZ1bmN0aW9uIGdldFN0YXRlSG9sZGVyQWRkcmVzcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldE1WRFdhbGxldEFkZHJlc3MoKSBleHRlcm5hbCB2aWV3IHJldHVybnMoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2VpdmVyLCB1aW50MjU2IHZhbHVlLCBhZGRyZXNzIHRva2VuKSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGZsdXNoVG9XYWxsZXQoYWRkcmVzcyB0b2tlbkFkZHJlc3MsIGJvb2wgaXM3MjEsIHVpbnQyNTYgdG9rZW5JZCkgZXh0ZXJuYWw7Cn0KCmludGVyZmFjZSBJU3RhdGVIb2xkZXIgewogICAgZnVuY3Rpb24gc2V0VWludDI1NihzdHJpbmcgY2FsbGRhdGEgbmFtZSwgdWludDI1NiB2YWx1ZSkgZXh0ZXJuYWwgcmV0dXJucyh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGdldFVpbnQyNTYoc3RyaW5nIGNhbGxkYXRhIG5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGdldEFkZHJlc3Moc3RyaW5nIGNhbGxkYXRhIG5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyhhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIHNldEFkZHJlc3Moc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUsIGFkZHJlc3MgdmFsKSBleHRlcm5hbCByZXR1cm5zIChhZGRyZXNzKTsKICAgIGZ1bmN0aW9uIGdldEJvb2woc3RyaW5nIGNhbGxkYXRhIHZhck5hbWUpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzZXRCb29sKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lLCBib29sIHZhbCkgZXh0ZXJuYWwgcmV0dXJucyhib29sKTsKICAgIGZ1bmN0aW9uIGNsZWFyKHN0cmluZyBjYWxsZGF0YSB2YXJOYW1lKSBleHRlcm5hbCByZXR1cm5zKHN0cmluZyBtZW1vcnkgb2xkRGF0YVR5cGUsIGJ5dGVzIG1lbW9yeSBvbGRWYWwpOwp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBzYWZlQXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGRlY2ltYWxzKCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50OCk7CiAgICBmdW5jdGlvbiBtaW50KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKICAgIGZ1bmN0aW9uIGJ1cm4odWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9