false
true
0

Contract Address Details

0xc40c58afFf0A8908c392a752F4951EfF381AA0b2

Token
Pulse Dai (PAI)
Creator
0xbcaee0–64cea5 at 0xdec4ee–c80523
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
208 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25905152
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Dai




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
200
EVM Version
default




Verified at
2025-04-18T13:54:20.143205Z

Constructor Arguments

0x0000000000000000000000000000000000000000000000000000000000000171

Arg [0] (uint256) : 369

              

Contract source code

// SPDX-License-Identifier: AGPL-3.0-or-later

/// dai.sol -- Dai Stablecoin PRC-20 Token

pragma solidity ^0.6.12;

contract Dai {
    // --- Auth ---
    mapping (address => uint) public wards;
    function rely(address guy) external auth { wards[guy] = 1; emit Rely(guy); }
    function deny(address guy) external auth { wards[guy] = 0; emit Deny(guy); }
    modifier auth {
        require(wards[msg.sender] == 1, "Dai/not-authorized");
        _;
    }

    // --- ERC20 Data ---
    string  public constant name     = "Pulse Dai";
    string  public constant symbol   = "PAI";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint)                      public balanceOf;
    mapping (address => mapping (address => uint)) public allowance;
    mapping (address => uint)                      public nonces;

    // --- Events ---
    event Rely(address indexed guy);
    event Deny(address indexed guy);
    event Approval(address indexed src, address indexed guy, uint wad);
    event Transfer(address indexed src, address indexed dst, uint wad);
    event Mint(address indexed usr, uint wad);
    event Burn(address indexed usr, uint wad);
    event Permit(address indexed holder, address indexed spender, uint wad);

    // --- Math ---
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }

    // --- EIP712 niceties ---
    bytes32 public DOMAIN_SEPARATOR;
    bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    constructor(uint256 chainId_) public {
        wards[msg.sender] = 1;
        DOMAIN_SEPARATOR = keccak256(abi.encode(
            keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
            keccak256(bytes(name)),
            keccak256(bytes(version)),
            chainId_,
            address(this)
        ));
        emit Rely(msg.sender);
    }

    // --- Token ---
    function transfer(address dst, uint wad) external returns (bool) {
        return transferFrom(msg.sender, dst, wad);
    }
    function transferFrom(address src, address dst, uint wad)
        public returns (bool)
    {
        require(balanceOf[src] >= wad, "Dai/insufficient-balance");
        if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
            require(allowance[src][msg.sender] >= wad, "Dai/insufficient-allowance");
            allowance[src][msg.sender] = sub(allowance[src][msg.sender], wad);
        }
        balanceOf[src] = sub(balanceOf[src], wad);
        balanceOf[dst] = add(balanceOf[dst], wad);
        emit Transfer(src, dst, wad);
        return true;
    }
    function mint(address usr, uint wad) external auth {
        balanceOf[usr] = add(balanceOf[usr], wad);
        totalSupply    = add(totalSupply, wad);
        emit Mint(usr, wad);
        emit Transfer(address(0), usr, wad);
    }
    function burn(address usr, uint wad) external {
        require(balanceOf[usr] >= wad, "Dai/insufficient-balance");
        if (usr != msg.sender && allowance[usr][msg.sender] != uint(-1)) {
            require(allowance[usr][msg.sender] >= wad, "Dai/insufficient-allowance");
            allowance[usr][msg.sender] = sub(allowance[usr][msg.sender], wad);
        }
        balanceOf[usr] = sub(balanceOf[usr], wad);
        totalSupply    = sub(totalSupply, wad);
        emit Burn(usr, wad);
        emit Transfer(usr, address(0), wad);
    }
    function approve(address usr, uint wad) external returns (bool) {
        allowance[msg.sender][usr] = wad;
        emit Approval(msg.sender, usr, wad);
        return true;
    }

    // --- Alias ---
    function push(address usr, uint wad) external {
        transferFrom(msg.sender, usr, wad);
    }
    function pull(address usr, uint wad) external {
        transferFrom(usr, msg.sender, wad);
    }
    function move(address src, address dst, uint wad) external {
        transferFrom(src, dst, wad);
    }

    // --- Approve by signature ---
    function permit(address holder, address spender, uint256 nonce, uint256 expiry,
                    bool allowed, uint8 v, bytes32 r, bytes32 s) external
    {
        bytes32 digest =
            keccak256(abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH,
                                     holder,
                                     spender,
                                     nonce,
                                     expiry,
                                     allowed))
        ));

        require(holder != address(0), "Dai/invalid-address-0");
        require(holder == ecrecover(digest, v, r, s), "Dai/invalid-permit");
        require(expiry == 0 || now <= expiry, "Dai/permit-expired");
        require(nonce == nonces[holder]++, "Dai/invalid-nonce");
        uint wad = allowed ? uint(-1) : 0;
        allowance[holder][spender] = wad;
        emit Permit(holder, spender, wad);
        emit Approval(holder, spender, wad);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"uint256","name":"chainId_","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"guy","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"guy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Permit","inputs":[{"type":"address","name":"holder","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"guy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"guy","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"move","inputs":[{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"permit","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"nonce","internalType":"uint256"},{"type":"uint256","name":"expiry","internalType":"uint256"},{"type":"bool","name":"allowed","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pull","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"push","inputs":[{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"guy","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"version","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b506040516112393803806112398339818101604052602081101561003357600080fd5b50513360008181526020818152604080832060019081905581518083018352600981526850756c73652044616960b81b9084015281518083018352908152603160f81b9083015280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818401527f55c855f7e41fec249044fe88a12416b913c1b3a079528232826ef40308445b61818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018690523060a0808301919091528251808303909101815260c09091019182905280519201919091206005557fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2506110ea8061014f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146103de578063b753a98c1461040a578063bb35783b14610436578063bf353dbb1461046c578063dd62ed3e14610492578063f2d5d56b146104c057610142565b80637ecebe00146103045780638fcbaf0c1461032a57806395d89b41146103845780639c52a7f11461038c5780639dc29fac146103b257610142565b8063313ce5671161010a578063313ce5671461025c5780633644e5151461027a57806340c10f191461028257806354fd4d50146102b057806365fae35e146102b857806370a08231146102de57610142565b806306fdde0314610147578063095ea7b3146101c457806318160ddd1461020457806323b872dd1461021e57806330adf81f14610254575b600080fd5b61014f6104ec565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610189578181015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f0600480360360408110156101da57600080fd5b506001600160a01b038135169060200135610511565b604080519115158252519081900360200190f35b61020c610578565b60408051918252519081900360200190f35b6101f06004803603606081101561023457600080fd5b506001600160a01b0381358116916020810135909116906040013561057e565b61020c6107a7565b6102646107cb565b6040805160ff9092168252519081900360200190f35b61020c6107d0565b6102ae6004803603604081101561029857600080fd5b506001600160a01b0381351690602001356107d6565b005b61014f6108ff565b6102ae600480360360208110156102ce57600080fd5b50356001600160a01b031661091c565b61020c600480360360208110156102f457600080fd5b50356001600160a01b03166109ba565b61020c6004803603602081101561031a57600080fd5b50356001600160a01b03166109cc565b6102ae600480360361010081101561034157600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e001356109de565b61014f610d23565b6102ae600480360360208110156103a257600080fd5b50356001600160a01b0316610d42565b6102ae600480360360408110156103c857600080fd5b506001600160a01b038135169060200135610ddf565b6101f0600480360360408110156103f457600080fd5b506001600160a01b038135169060200135611025565b6102ae6004803603604081101561042057600080fd5b506001600160a01b038135169060200135611039565b6102ae6004803603606081101561044c57600080fd5b506001600160a01b03813581169160208101359091169060400135611049565b61020c6004803603602081101561048257600080fd5b50356001600160a01b031661105a565b61020c600480360360408110156104a857600080fd5b506001600160a01b038135811691602001351661106c565b6102ae600480360360408110156104d657600080fd5b506001600160a01b038135169060200135611089565b6040518060400160405280600981526020016850756c73652044616960b81b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60015481565b6001600160a01b0383166000908152600260205260408120548211156105e6576040805162461bcd60e51b81526020600482015260186024820152774461692f696e73756666696369656e742d62616c616e636560401b604482015290519081900360640190fd5b6001600160a01b038416331480159061062457506001600160a01b038416600090815260036020908152604080832033845290915290205460001914155b156106f4576001600160a01b03841660009081526003602090815260408083203384529091529020548211156106a1576040805162461bcd60e51b815260206004820152601a60248201527f4461692f696e73756666696369656e742d616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526003602090815260408083203384529091529020546106cf9083611094565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6001600160a01b0384166000908152600260205260409020546107179083611094565b6001600160a01b03808616600090815260026020526040808220939093559085168152205461074690836110a4565b6001600160a01b0380851660008181526002602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b60055481565b3360009081526020819052604090205460011461082f576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03821660009081526002602052604090205461085290826110a4565b6001600160a01b03831660009081526002602052604090205560015461087890826110a4565b6001556040805182815290516001600160a01b038416917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604051806040016040528060018152602001603160f81b81525081565b33600090815260208190526040902054600114610975576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b60026020526000908152604090205481565b60046020526000908152604090205481565b600554604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251929091019190912090610ade576040805162461bcd60e51b815260206004820152601560248201527404461692f696e76616c69642d616464726573732d3605c1b604482015290519081900360640190fd5b60018185858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610b38573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610b9c576040805162461bcd60e51b815260206004820152601260248201527111185a4bda5b9d985b1a590b5c195c9b5a5d60721b604482015290519081900360640190fd5b851580610ba95750854211155b610bef576040805162461bcd60e51b815260206004820152601260248201527111185a4bdc195c9b5a5d0b595e1c1a5c995960721b604482015290519081900360640190fd5b6001600160a01b03891660009081526004602052604090208054600181019091558714610c57576040805162461bcd60e51b81526020600482015260116024820152704461692f696e76616c69642d6e6f6e636560781b604482015290519081900360640190fd5b600085610c65576000610c69565b6000195b6001600160a01b03808c166000818152600360209081526040808320948f168084529482529182902085905581518581529151949550929391927f0bbe6fe32ba41c62b899130b3acc89f9b1d164ffbfc67beb05a9f2d4cce60b7692918290030190a3886001600160a01b03168a6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020016250414960e81b81525081565b33600090815260208190526040902054600114610d9b576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260026020526040902054811115610e47576040805162461bcd60e51b81526020600482015260186024820152774461692f696e73756666696369656e742d62616c616e636560401b604482015290519081900360640190fd5b6001600160a01b0382163314801590610e8557506001600160a01b038216600090815260036020908152604080832033845290915290205460001914155b15610f55576001600160a01b0382166000908152600360209081526040808320338452909152902054811115610f02576040805162461bcd60e51b815260206004820152601a60248201527f4461692f696e73756666696369656e742d616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600360209081526040808320338452909152902054610f309082611094565b6001600160a01b03831660009081526003602090815260408083203384529091529020555b6001600160a01b038216600090815260026020526040902054610f789082611094565b6001600160a01b038316600090815260026020526040902055600154610f9e9082611094565b6001556040805182815290516001600160a01b038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061103233848461057e565b9392505050565b61104433838361057e565b505050565b61105483838361057e565b50505050565b60006020819052908152604090205481565b600360209081526000928352604080842090915290825290205481565b61104482338361057e565b8082038281111561057257600080fd5b8082018281101561057257600080fdfea2646970667358221220b8aab9118b089723c732b1b4b512542a1c09fb5212f3932d4e7e1d9cbc4eca1564736f6c634300060c00330000000000000000000000000000000000000000000000000000000000000171

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c80637ecebe00116100b8578063a9059cbb1161007c578063a9059cbb146103de578063b753a98c1461040a578063bb35783b14610436578063bf353dbb1461046c578063dd62ed3e14610492578063f2d5d56b146104c057610142565b80637ecebe00146103045780638fcbaf0c1461032a57806395d89b41146103845780639c52a7f11461038c5780639dc29fac146103b257610142565b8063313ce5671161010a578063313ce5671461025c5780633644e5151461027a57806340c10f191461028257806354fd4d50146102b057806365fae35e146102b857806370a08231146102de57610142565b806306fdde0314610147578063095ea7b3146101c457806318160ddd1461020457806323b872dd1461021e57806330adf81f14610254575b600080fd5b61014f6104ec565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610189578181015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f0600480360360408110156101da57600080fd5b506001600160a01b038135169060200135610511565b604080519115158252519081900360200190f35b61020c610578565b60408051918252519081900360200190f35b6101f06004803603606081101561023457600080fd5b506001600160a01b0381358116916020810135909116906040013561057e565b61020c6107a7565b6102646107cb565b6040805160ff9092168252519081900360200190f35b61020c6107d0565b6102ae6004803603604081101561029857600080fd5b506001600160a01b0381351690602001356107d6565b005b61014f6108ff565b6102ae600480360360208110156102ce57600080fd5b50356001600160a01b031661091c565b61020c600480360360208110156102f457600080fd5b50356001600160a01b03166109ba565b61020c6004803603602081101561031a57600080fd5b50356001600160a01b03166109cc565b6102ae600480360361010081101561034157600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e001356109de565b61014f610d23565b6102ae600480360360208110156103a257600080fd5b50356001600160a01b0316610d42565b6102ae600480360360408110156103c857600080fd5b506001600160a01b038135169060200135610ddf565b6101f0600480360360408110156103f457600080fd5b506001600160a01b038135169060200135611025565b6102ae6004803603604081101561042057600080fd5b506001600160a01b038135169060200135611039565b6102ae6004803603606081101561044c57600080fd5b506001600160a01b03813581169160208101359091169060400135611049565b61020c6004803603602081101561048257600080fd5b50356001600160a01b031661105a565b61020c600480360360408110156104a857600080fd5b506001600160a01b038135811691602001351661106c565b6102ae600480360360408110156104d657600080fd5b506001600160a01b038135169060200135611089565b6040518060400160405280600981526020016850756c73652044616960b81b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60015481565b6001600160a01b0383166000908152600260205260408120548211156105e6576040805162461bcd60e51b81526020600482015260186024820152774461692f696e73756666696369656e742d62616c616e636560401b604482015290519081900360640190fd5b6001600160a01b038416331480159061062457506001600160a01b038416600090815260036020908152604080832033845290915290205460001914155b156106f4576001600160a01b03841660009081526003602090815260408083203384529091529020548211156106a1576040805162461bcd60e51b815260206004820152601a60248201527f4461692f696e73756666696369656e742d616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526003602090815260408083203384529091529020546106cf9083611094565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6001600160a01b0384166000908152600260205260409020546107179083611094565b6001600160a01b03808616600090815260026020526040808220939093559085168152205461074690836110a4565b6001600160a01b0380851660008181526002602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b60055481565b3360009081526020819052604090205460011461082f576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03821660009081526002602052604090205461085290826110a4565b6001600160a01b03831660009081526002602052604090205560015461087890826110a4565b6001556040805182815290516001600160a01b038416917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604051806040016040528060018152602001603160f81b81525081565b33600090815260208190526040902054600114610975576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b60026020526000908152604090205481565b60046020526000908152604090205481565b600554604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b61010085015261010284019590955261012280840195909552835180840390950185526101429092019092528251929091019190912090610ade576040805162461bcd60e51b815260206004820152601560248201527404461692f696e76616c69642d616464726573732d3605c1b604482015290519081900360640190fd5b60018185858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610b38573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610b9c576040805162461bcd60e51b815260206004820152601260248201527111185a4bda5b9d985b1a590b5c195c9b5a5d60721b604482015290519081900360640190fd5b851580610ba95750854211155b610bef576040805162461bcd60e51b815260206004820152601260248201527111185a4bdc195c9b5a5d0b595e1c1a5c995960721b604482015290519081900360640190fd5b6001600160a01b03891660009081526004602052604090208054600181019091558714610c57576040805162461bcd60e51b81526020600482015260116024820152704461692f696e76616c69642d6e6f6e636560781b604482015290519081900360640190fd5b600085610c65576000610c69565b6000195b6001600160a01b03808c166000818152600360209081526040808320948f168084529482529182902085905581518581529151949550929391927f0bbe6fe32ba41c62b899130b3acc89f9b1d164ffbfc67beb05a9f2d4cce60b7692918290030190a3886001600160a01b03168a6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050505050505050565b6040518060400160405280600381526020016250414960e81b81525081565b33600090815260208190526040902054600114610d9b576040805162461bcd60e51b815260206004820152601260248201527111185a4bdb9bdd0b585d5d1a1bdc9a5e995960721b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260026020526040902054811115610e47576040805162461bcd60e51b81526020600482015260186024820152774461692f696e73756666696369656e742d62616c616e636560401b604482015290519081900360640190fd5b6001600160a01b0382163314801590610e8557506001600160a01b038216600090815260036020908152604080832033845290915290205460001914155b15610f55576001600160a01b0382166000908152600360209081526040808320338452909152902054811115610f02576040805162461bcd60e51b815260206004820152601a60248201527f4461692f696e73756666696369656e742d616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600360209081526040808320338452909152902054610f309082611094565b6001600160a01b03831660009081526003602090815260408083203384529091529020555b6001600160a01b038216600090815260026020526040902054610f789082611094565b6001600160a01b038316600090815260026020526040902055600154610f9e9082611094565b6001556040805182815290516001600160a01b038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061103233848461057e565b9392505050565b61104433838361057e565b505050565b61105483838361057e565b50505050565b60006020819052908152604090205481565b600360209081526000928352604080842090915290825290205481565b61104482338361057e565b8082038281111561057257600080fd5b8082018281101561057257600080fdfea2646970667358221220b8aab9118b089723c732b1b4b512542a1c09fb5212f3932d4e7e1d9cbc4eca1564736f6c634300060c0033