Contract Address Details

0x1204700000000000000000000000000000000004

Contract Name
Holding
Creator
Balance
5,000,000 EWT ( )
Tokens
Fetching tokens...
Transactions
150 Transactions
Transfers
1 Transfers
Gas Used
5,167,725
Last Balance Update
29598649
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Holding




Optimization enabled
true
Compiler version
v0.5.8+commit.23d335f2




Optimization runs
200
EVM Version
default




Verified at
2021-09-19T15:50:36.902395Z

Contract source code

pragma solidity 0.5.8;


/// @title Holding
contract Holding {
    mapping (address => Holder) public holders;
    uint256 public initialLockedUpAmount = 0;
    uint256 public constant TARGET_AMOUNT = 41198207933333333690000000;

    struct Holder {
        uint256 availableAmount;
        uint256 lockedUntilBlocktimestamp;
    }

    event FundsReleased(address indexed _releasedToAccount, uint256 _amount);

    /// @notice loads holding data and checks for sanity
    constructor()
        public
        payable
    {
        require(address(this).balance == TARGET_AMOUNT, "Balance should equal target amount.");
                                                                   
        initHoldingData();

        require(initialLockedUpAmount == TARGET_AMOUNT, "Target amount should equal actual amount");
    }

    /// @notice Rlease funds for a specific address
    /// @param holderAddress the ethereum address which should get its funds
    function releaseFunds(address payable holderAddress) 
        public 
    {
        Holder storage holder = holders[holderAddress];
        
        require(holder.availableAmount > 0, "Available amount is 0");
        // solhint-disable-next-line not-rely-on-time
        require(block.timestamp > holder.lockedUntilBlocktimestamp, "Holding period is not over");
        
        uint256 amountToTransfer = holder.availableAmount;
        holder.availableAmount = 0;
        holderAddress.transfer(amountToTransfer);
        emit FundsReleased(holderAddress, amountToTransfer);
    }

    // solhint-disable function-max-lines
    /// @notice loads holding data
    function initHoldingData()
        internal
    {
        addHolding(0x002D4606B65c033769968bCdc63881b90B0853f5, 180786666666667000000000, 1576152000);
        addHolding(0x006e371C454a2d081f3966c180Ba2C6165d87DE6, 8333333333333330000000, 1576152000);
        addHolding(0x00C2F65230815D30EaA1A4d057bCF0B72FE3cc4e, 12500000000000000000000, 1576152000);
        addHolding(0x03CccDC799d4DC37d56E3f9DBa7f9c210fa1086f, 12500000000000000000000, 1576152000);
        addHolding(0x047D955877a55Fbdac768573a9259f29B103a066, 12500000000000000000000, 1576152000);
        addHolding(0x06920Bb91F7027176Cf373996D39B539ba436D87, 500000000000000000000000, 1568268000);
        addHolding(0x06FdB93aa64F33A8fb40a36c462a3f7A074D632C, 8333333333333330000000, 1576152000);
        addHolding(0x0ad7Ba4aF33B485e6F2505c417554631a3e5643f, 12500000000000000000000, 1576152000);
        addHolding(0x0dd959deB4C458cc2aC379898Bf2c99f7A8F399B, 8333333333333330000000, 1576152000);
        addHolding(0x1153818a2EB49F0a71B27313C32814fc02E4Db50, 312280000000000000000000, 1576152000);
        addHolding(0x120470000000000000000000000000000000000a, 10000000000000000000000000, 1568268000);
        addHolding(0x15696134ebeed360dc90DC97dDD00bd07e1C11e9, 250000000000000000000000, 1576152000);
        addHolding(0x1f0c30B1aA4C468B5Beb02BaC8DF8F27617a2296, 166581333333333000000000, 1576152000);
        addHolding(0x2540dED041b6FEdC0Ff6F0CF26b891Ec97C95400, 8333333333333330000000, 1576152000);
        addHolding(0x25Ae7b45D8646580dfcAE403D29164729eB8642f, 125000000000000000000000, 1576152000);
        addHolding(0x349ebc5a6e853df121c84E999081e5992928e64F, 250000000000000000000000, 1576152000);
        addHolding(0x3885D15573E45228Dd54Cd4FDe9BfAc64d702ED4, 8333333333333330000000, 1576152000);
        addHolding(0x3A9d83766c03c465851a38DaA364ef7DEccd1ECE, 250000000000000000000000, 1576152000);
        addHolding(0x3AbAA3f24428d6028F5A7FC5b18ce9D04cCec229, 12500000000000000000000, 1576152000);
        addHolding(0x3C9f867D9b3a595987E198786FA9aB722E5C2F9b, 250000000000000000000000, 1576152000);
        addHolding(0x3f11B4ad17FdE4695CAd64E109AE92a679d87Bfc, 500000000000000000000000, 1568268000);
        addHolding(0x3F12af735238C6E2FA45eFB5b2F3FAE82Df4c922, 8333333333333330000000, 1576152000);
        addHolding(0x404Bb9c13364522133B363d5C4Adb7a88056B19d, 13333333333333300000000, 1576152000);
        addHolding(0x428aB4B019EE3a9B9863B2B4Bf1885CE6dff9a73, 12500000000000000000000, 1576152000);
        addHolding(0x47428fc08e56388372e7C81Ad4A1140d932d1096, 500000000000000000000000, 1568268000);
        addHolding(0x48Ee57fAf61c0b963113e7921e6173629e6bc443, 12500000000000000000000, 1576152000);
        addHolding(0x4d0aA1c3459BF41e3Ad4E4F40Bbf029Cb5723d83, 250000000000000000000000, 1576152000);
        addHolding(0x57f33EfaD76D4B783cf42c9e6Cb08f4425dfe96e, 12500000000000000000000, 1576152000);
        addHolding(0x5b3fb4e1d6040615F3e681bEc4C80b5d7C958071, 8333333333333330000000, 1576152000);
        addHolding(0x5fBb9c482034D287c5B3848Fc2F9272abdD5Bfa2, 16666666666666700000000, 1576152000);
        addHolding(0x656E5569BeF7781bf0Db199D32027766053501ff, 319032000000000000000000, 1576152000);
        addHolding(0x664f991cDb2ffe6b6A568edE65b0208DBCCE6f72, 125000000000000000000000, 1576152000);
        addHolding(0x69aF0912dd44dce2B2373dB4021788CbAd84Ff35, 5000000000000000000000000, 1623456000);
        addHolding(0x6a0A5dA2a48ea87C2A906C53b3373642c29a4b6C, 250000000000000000000000, 1576152000);
        addHolding(0x6cf32Cc52E220C023C2d92B1D62310F46a6E2a13, 8333333333333330000000, 1576152000);
        addHolding(0x6D516767E4068FC331BDb331fba7578BDb07a68c, 166666666666667000000000, 1576152000);
        addHolding(0x6Dd10e41A7a84FE23ab35feFa2F46C9895F87a2D, 285930000000000000000000, 1576152000);
        addHolding(0x7030892dbF9c2048E796296dDA597F145754a185, 500000000000000000000000, 1568268000);
        addHolding(0x7ed62CF71D519d3Bf293ef90829508F92F4CCCcb, 12500000000000000000000, 1576152000);
        addHolding(0x871ba4266793aD11dA537D4857dE7Ad49EaB662b, 1750000000000000000000000, 1576152000);
        addHolding(0x880E8b0ecE0171EDd0247f8d13D348d77A6b9b29, 16666666666666700000000, 1576152000);
        addHolding(0x887f2B16847248bc757b69F3c695F24Ff344dAF2, 4298536666666670000000, 1576152000);
        addHolding(0x8c994AdA51d35B8519424368807fb99C10336686, 500000000000000000000000, 1568268000);
        addHolding(0x9196e46D664CEDa55CB45a2CC5ab5Bd1b7e614E2, 12500000000000000000000, 1576152000);
        addHolding(0x943c85B13f24083Ec73815f7Ba763B7c42Ae0288, 12500000000000000000000, 1576152000);
        addHolding(0x9467B762550673F08B14423F8562048d5E369422, 12500000000000000000000, 1576152000);
        addHolding(0x949423dB1BFeE1ddEc99c9D24a12a6eA27cb3489, 8333333333333330000000, 1576152000);
        addHolding(0x96A5eb172EfdF262Ed6beaaF0E20C6Af71831Fc9, 250000000000000000000000, 1576152000);
        addHolding(0xA69DCa0814EAadC89B6dBE94c5e2110497690f6C, 16666666666666700000000, 1576152000);
        addHolding(0xA720A8EE90f5013cAe9BF7BCac1d153E42815454, 125000000000000000000000, 1576152000);
        addHolding(0xB080454F190E76eB8e719560fA8CAE50c71bceA9, 8333333333333330000000, 1576152000);
        addHolding(0xB476Ee7D610DAe7B23B671EBC7Bd6112E9772969, 12500000000000000000000, 1576152000);
        addHolding(0xb561618a3Ea959a5E363643B267C4CB8fe4B1DF7, 5000000000000000000000000, 1623456000);
        addHolding(0xb5B6D8885fbF28f843Cc7886DE242B811d695205, 8333333333333330000000, 1576152000);
        addHolding(0xb61C11B6E42d459EFAEe8995c44DB08507e468E1, 337600000000000000000000, 1576152000);
        addHolding(0xb999004B49C6b907D4278067DA5c85195DCD7Fc7, 38333333333333300000000, 1576152000);
        addHolding(0xBe4888C5b021E5F16cd254DE2D4EAF17625685C4, 250000000000000000000000, 1576152000);
        addHolding(0xc1d441a2aD43Af7b4A3d8E3200d2cEB3A973099D, 250000000000000000000000, 1576152000);
        addHolding(0xC58A20e290E858542D8e8bb07b600aeb9195fe30, 16666666666666700000000, 1576152000);
        addHolding(0xcfE7964b0b6412b013Dc019bDF3AfEf58be56593, 6424868130000000000000000, 1576152000);
        addHolding(0xd33D4F83e85c92E0B53ffe4FC0E18b0E3632C097, 8333333333333330000000, 1576152000);
        addHolding(0xD44FB8De580D34F44789408cC9335c9A9cE0cE4d, 126621000000000000000000, 1576152000);
        addHolding(0xdAcD80D8e1d4f117515CAA477eE7599cDfc76619, 12500000000000000000000, 1576152000);
        addHolding(0xDb6cc57168c07b83a00f1f8871538446068824fC, 125000000000000000000000, 1576152000);
        addHolding(0xDe6B493D368316b9078454e37DCE4968482Dfbe9, 500000000000000000000000, 1568268000);
        addHolding(0xE23c7cB60189BB2FD60625d2C2747B1e68f10776, 250000000000000000000000, 1576152000);
        addHolding(0xe6E8A111C89B05337049dE9349C7C4880a396EF1, 125000000000000000000000, 1576152000);
        addHolding(0xEbbDDf28bF3224791B0510a2AB8813f182fe4e2b, 8333333333333330000000, 1576152000);
        addHolding(0xf4e31018A926F64CB780cB9f5f027377bCfb26fC, 37500000000000000000000, 1576152000);
        addHolding(0xf8E6ecb4B0f17576525749bDF85524652cbf002E, 8333333333333330000000, 1576152000);
        addHolding(0xFD679097fE0F914642af9857e5799332Fe2Efa29, 2000000000000000000000000, 1568268000);
        addHolding(0xfD7A30D3C2bD017A458610274C275059D308b2E7, 2413543600000000000000000, 1576152000);
        addHolding(0xFfCf98C62c1BAd480aB6846717B173A72e2dD090, 125000000000000000000000, 1576152000);
        addHolding(0xFFd9b871dF6e93803C0877E98fC1722B39c00d78, 12500000000000000000000, 1576152000);
    } 
    // solhint-enable function-max-lines

    /// @notice Adds a holding entry
    /// @param holder owner of the holded funds
    /// @param amountToHold the amount that should be holded
    /// @param lockUntil the timestamp of the date until the funds should be locked up
    function addHolding(address holder, uint256 amountToHold, uint256 lockUntil) 
        internal
    {
        Holder storage selectedHolder = holders[address(holder)];

        require(
            selectedHolder.availableAmount == 0 && selectedHolder.lockedUntilBlocktimestamp == 0,
            "Holding for this address was already set."
        );

        initialLockedUpAmount += amountToHold;
        
        selectedHolder.availableAmount = amountToHold;
        selectedHolder.lockedUntilBlocktimestamp = lockUntil;
    }
}
        

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"availableAmount"},{"type":"uint256","name":"lockedUntilBlocktimestamp"}],"name":"holders","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"releaseFunds","inputs":[{"type":"address","name":"holderAddress"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"TARGET_AMOUNT","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"initialLockedUpAmount","inputs":[],"constant":true},{"type":"constructor","stateMutability":"payable","payable":true,"inputs":[]},{"type":"event","name":"FundsReleased","inputs":[{"type":"address","name":"_releasedToAccount","indexed":true},{"type":"uint256","name":"_amount","indexed":false}],"anonymous":false}]
            

Deployed ByteCode

0x608060405260006001556a22140f53c2d216263ba2803073ffffffffffffffffffffffffffffffffffffffff16311462000085576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806200150b6023913960400191505060405180910390fd5b620000956200010260201b60201c565b6a22140f53c2d216263ba28060015414620000fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180620014ba6028913960400191505060405180910390fd5b62001133565b62000136722d4606b65c033769968bcdc63881b90b0853f569264876ff9c85a7a8ee00635df22bc06200105960201b60201c565b6200016a726e371c454a2d081f3966c180ba2c6165d87de66901c3c03b52c63f027880635df22bc06200105960201b60201c565b6200019e72c2f65230815d30eaa1a4d057bcf0b72fe3cc4e6902a5a058fc295ed00000635df22bc06200105960201b60201c565b620001d37303cccdc799d4dc37d56e3f9dba7f9c210fa1086f6902a5a058fc295ed00000635df22bc06200105960201b60201c565b6200020873047d955877a55fbdac768573a9259f29b103a0666902a5a058fc295ed00000635df22bc06200105960201b60201c565b6200023d7306920bb91f7027176cf373996d39b539ba436d876969e10de76676d0800000635d79dee06200105960201b60201c565b620002727306fdb93aa64f33a8fb40a36c462a3f7a074d632c6901c3c03b52c63f027880635df22bc06200105960201b60201c565b620002a7730ad7ba4af33b485e6f2505c417554631a3e5643f6902a5a058fc295ed00000635df22bc06200105960201b60201c565b620002dc730dd959deb4c458cc2ac379898bf2c99f7a8f399b6901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000311731153818a2eb49f0a71b27313c32814fc02e4db50694220bb939da668600000635df22bc06200105960201b60201c565b6200034773120470000000000000000000000000000000000a6a084595161401484a000000635d79dee06200105960201b60201c565b6200037c7315696134ebeed360dc90dc97ddd00bd07e1c11e96934f086f3b33b68400000635df22bc06200105960201b60201c565b620003b1731f0c30b1aa4c468b5beb02bac8df8f27617a2296692346646590efbaf71200635df22bc06200105960201b60201c565b620003e6732540ded041b6fedc0ff6f0cf26b891ec97c954006901c3c03b52c63f027880635df22bc06200105960201b60201c565b6200041b7325ae7b45d8646580dfcae403d29164729eb8642f691a784379d99db4200000635df22bc06200105960201b60201c565b6200045073349ebc5a6e853df121c84e999081e5992928e64f6934f086f3b33b68400000635df22bc06200105960201b60201c565b62000485733885d15573e45228dd54cd4fde9bfac64d702ed46901c3c03b52c63f027880635df22bc06200105960201b60201c565b620004ba733a9d83766c03c465851a38daa364ef7deccd1ece6934f086f3b33b68400000635df22bc06200105960201b60201c565b620004ef733abaa3f24428d6028f5a7fc5b18ce9d04ccec2296902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000524733c9f867d9b3a595987e198786fa9ab722e5c2f9b6934f086f3b33b68400000635df22bc06200105960201b60201c565b62000559733f11b4ad17fde4695cad64e109ae92a679d87bfc6969e10de76676d0800000635d79dee06200105960201b60201c565b6200058e733f12af735238c6e2fa45efb5b2f3fae82df4c9226901c3c03b52c63f027880635df22bc06200105960201b60201c565b620005c373404bb9c13364522133b363d5c4adb7a88056b19d6902d2cd2bb7a39658b500635df22bc06200105960201b60201c565b620005f873428ab4b019ee3a9b9863b2b4bf1885ce6dff9a736902a5a058fc295ed00000635df22bc06200105960201b60201c565b6200062d7347428fc08e56388372e7c81ad4a1140d932d10966969e10de76676d0800000635d79dee06200105960201b60201c565b620006627348ee57faf61c0b963113e7921e6173629e6bc4436902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000697734d0aa1c3459bf41e3ad4e4f40bbf029cb5723d836934f086f3b33b68400000635df22bc06200105960201b60201c565b620006cc7357f33efad76d4b783cf42c9e6cb08f4425dfe96e6902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000701735b3fb4e1d6040615f3e681bec4c80b5d7c9580716901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000736735fbb9c482034d287c5b3848fc2f9272abdd5bfa26903878076a58c80674b00635df22bc06200105960201b60201c565b6200076b73656e5569bef7781bf0db199d32027766053501ff69438ec266600555e00000635df22bc06200105960201b60201c565b620007a073664f991cdb2ffe6b6a568ede65b0208dbcce6f72691a784379d99db4200000635df22bc06200105960201b60201c565b620007d67369af0912dd44dce2b2373db4021788cbad84ff356a0422ca8b0a00a4250000006360c3f9006200105960201b60201c565b6200080b736a0a5da2a48ea87c2a906c53b3373642c29a4b6c6934f086f3b33b68400000635df22bc06200105960201b60201c565b62000840736cf32cc52e220c023c2d92b1d62310f46a6e2a136901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000875736d516767e4068fc331bdb331fba7578bdb07a68c69234b04a2777d0408ee00635df22bc06200105960201b60201c565b620008aa736dd10e41a7a84fe23ab35fefa2f46c9895f87a2d693c8c4bde2deef1680000635df22bc06200105960201b60201c565b620008df737030892dbf9c2048e796296dda597f145754a1856969e10de76676d0800000635d79dee06200105960201b60201c565b62000914737ed62cf71d519d3bf293ef90829508f92f4ccccb6902a5a058fc295ed00000635df22bc06200105960201b60201c565b6200094a73871ba4266793ad11da537d4857de7ad49eab662b6a017293b0a9e69fd9c00000635df22bc06200105960201b60201c565b6200097f73880e8b0ece0171edd0247f8d13d348d77a6b9b296903878076a58c80674b00635df22bc06200105960201b60201c565b620009b373887f2b16847248bc757b69f3c695f24ff344daf268e9062e03b5c2908780635df22bc06200105960201b60201c565b620009e8738c994ada51d35b8519424368807fb99c103366866969e10de76676d0800000635d79dee06200105960201b60201c565b62000a1d739196e46d664ceda55cb45a2cc5ab5bd1b7e614e26902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000a5273943c85b13f24083ec73815f7ba763b7c42ae02886902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000a87739467b762550673f08b14423f8562048d5e3694226902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000abc73949423db1bfee1ddec99c9d24a12a6ea27cb34896901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000af17396a5eb172efdf262ed6beaaf0e20c6af71831fc96934f086f3b33b68400000635df22bc06200105960201b60201c565b62000b2673a69dca0814eaadc89b6dbe94c5e2110497690f6c6903878076a58c80674b00635df22bc06200105960201b60201c565b62000b5b73a720a8ee90f5013cae9bf7bcac1d153e42815454691a784379d99db4200000635df22bc06200105960201b60201c565b62000b9073b080454f190e76eb8e719560fa8cae50c71bcea96901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000bc573b476ee7d610dae7b23b671ebc7bd6112e97729696902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000bfb73b561618a3ea959a5e363643b267c4cb8fe4b1df76a0422ca8b0a00a4250000006360c3f9006200105960201b60201c565b62000c3073b5b6d8885fbf28f843cc7886de242b811d6952056901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000c6573b61c11b6e42d459efaee8995c44db08507e468e169477d5529f68a63000000635df22bc06200105960201b60201c565b62000c9a73b999004b49c6b907d4278067da5c85195dcd7fc769081e0dddaff653f8b500635df22bc06200105960201b60201c565b62000ccf73be4888c5b021e5f16cd254de2d4eaf17625685c46934f086f3b33b68400000635df22bc06200105960201b60201c565b62000d0473c1d441a2ad43af7b4a3d8e3200d2ceb3a973099d6934f086f3b33b68400000635df22bc06200105960201b60201c565b62000d3973c58a20e290e858542d8e8bb07b600aeb9195fe306903878076a58c80674b00635df22bc06200105960201b60201c565b62000d6f73cfe7964b0b6412b013dc019bdf3afef58be565936a055084cc99f0bdbadd0000635df22bc06200105960201b60201c565b62000da473d33d4f83e85c92e0b53ffe4fc0e18b0e3632c0976901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000dd973d44fb8de580d34f44789408cc9335c9a9ce0ce4d691ad0235eb930a0540000635df22bc06200105960201b60201c565b62000e0e73dacd80d8e1d4f117515caa477ee7599cdfc766196902a5a058fc295ed00000635df22bc06200105960201b60201c565b62000e4373db6cc57168c07b83a00f1f8871538446068824fc691a784379d99db4200000635df22bc06200105960201b60201c565b62000e7873de6b493d368316b9078454e37dce4968482dfbe96969e10de76676d0800000635d79dee06200105960201b60201c565b62000ead73e23c7cb60189bb2fd60625d2c2747b1e68f107766934f086f3b33b68400000635df22bc06200105960201b60201c565b62000ee273e6e8a111c89b05337049de9349c7c4880a396ef1691a784379d99db4200000635df22bc06200105960201b60201c565b62000f1773ebbddf28bf3224791b0510a2ab8813f182fe4e2b6901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000f4c73f4e31018a926f64cb780cb9f5f027377bcfb26fc6907f0e10af47c1c700000635df22bc06200105960201b60201c565b62000f8173f8e6ecb4b0f17576525749bdf85524652cbf002e6901c3c03b52c63f027880635df22bc06200105960201b60201c565b62000fb773fd679097fe0f914642af9857e5799332fe2efa296a01a784379d99db42000000635d79dee06200105960201b60201c565b62000fed73fd7a30d3c2bd017a458610274c275059d308b2e76a01ff1675f219f5a8780000635df22bc06200105960201b60201c565b6200102273ffcf98c62c1bad480ab6846717b173a72e2dd090691a784379d99db4200000635df22bc06200105960201b60201c565b6200105773ffd9b871df6e93803c0877e98fc1722b39c00d786902a5a058fc295ed00000635df22bc06200105960201b60201c565b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154148015620010b4575060008160010154145b6200110b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180620014e26029913960400191505060405180910390fd5b8260016000828254019250508190555082816000018190555081816001018190555050505050565b61037780620011436000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806318a5bbdc14610051578063192e7a7b146100b057806330f0dbe0146100f45780639976e12f14610112575b600080fd5b6100936004803603602081101561006757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610130565b604051808381526020018281526020019250505060405180910390f35b6100f2600480360360208110156100c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610154565b005b6100fc610336565b6040518082815260200191505060405180910390f35b61011a610345565b6040518082815260200191505060405180910390f35b60006020528060005260406000206000915090508060000154908060010154905082565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411610210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f417661696c61626c6520616d6f756e742069732030000000000000000000000081525060200191505060405180910390fd5b80600101544211610289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f486f6c64696e6720706572696f64206973206e6f74206f76657200000000000081525060200191505060405180910390fd5b600081600001549050600082600001819055508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156102e2573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff167f221c08a06b07a64803b3787861a3f276212fcccb51c2e6234077a9b8cb13047a826040518082815260200191505060405180910390a2505050565b6a22140f53c2d216263ba28081565b6001548156fea165627a7a72305820b0165b18a29fae78ec1f58bf69134a67ab02e21d059e757412318d8362284866002954617267657420616d6f756e742073686f756c6420657175616c2061637475616c20616d6f756e74486f6c64696e6720666f72207468697320616464726573732077617320616c7265616479207365742e42616c616e63652073686f756c6420657175616c2074617267657420616d6f756e742e