ETH Price: $2,930.87 (-7.17%)
Gas: 7 Gwei

Contract

0x9AFb950948c2370975fb91a441F36FDC02737cD4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x0c2944891c102626d54d851f7d32d44d8511f79020a242ef25d2944a3bff41d0 Transfer(pending)2024-06-30 2:44:445 days ago1719715484IN
0x9AFb9509...C02737cD4
0 ETH(Pending)(Pending)
0x4823f6060a9cfde86259d351cc96a0d2f9cc62c10b0461f1087a2e48832e3046 Transfer(pending)2024-06-30 0:56:565 days ago1719709016IN
0x9AFb9509...C02737cD4
0 ETH(Pending)(Pending)
Transfer201113812024-06-17 12:03:2317 days ago1718625803IN
0x9AFb9509...C02737cD4
0 ETH0.000417557.66472827
Transfer201113652024-06-17 12:00:1117 days ago1718625611IN
0x9AFb9509...C02737cD4
0 ETH0.000334664.67475269
Transfer200949512024-06-15 4:55:3520 days ago1718427335IN
0x9AFb9509...C02737cD4
0 ETH0.000380295.31399905
Transfer200759402024-06-12 13:06:4722 days ago1718197607IN
0x9AFb9509...C02737cD4
0 ETH0.0020937238.4500772
Transfer200759012024-06-12 12:58:5922 days ago1718197139IN
0x9AFb9509...C02737cD4
0 ETH0.0025535933.43931961
Transfer200447572024-06-08 4:34:4727 days ago1717821287IN
0x9AFb9509...C02737cD4
0 ETH0.000394895.51801284
Transfer198832902024-05-16 14:59:4749 days ago1715871587IN
0x9AFb9509...C02737cD4
0 ETH0.000697039.73824131
Transfer198698832024-05-14 18:02:3551 days ago1715709755IN
0x9AFb9509...C02737cD4
0 ETH0.000810914.88518505
Transfer198698592024-05-14 17:57:3551 days ago1715709455IN
0x9AFb9509...C02737cD4
0 ETH0.0008265710.8206403
Transfer198666342024-05-14 7:02:2352 days ago1715670143IN
0x9AFb9509...C02737cD4
0 ETH0.000517257.22529155
Transfer197382502024-04-26 8:08:5970 days ago1714118939IN
0x9AFb9509...C02737cD4
0 ETH0.000486888.21713476
Transfer197381672024-04-26 7:52:1170 days ago1714117931IN
0x9AFb9509...C02737cD4
0 ETH0.000750539.82978692
Transfer197380182024-04-26 7:21:5970 days ago1714116119IN
0x9AFb9509...C02737cD4
0 ETH0.00067788.87592342
Transfer197370132024-04-26 3:59:5970 days ago1714103999IN
0x9AFb9509...C02737cD4
0 ETH0.000420137.71559884
Transfer197370032024-04-26 3:57:5970 days ago1714103879IN
0x9AFb9509...C02737cD4
0 ETH0.004059656.72614543
Transfer197333092024-04-25 15:35:1170 days ago1714059311IN
0x9AFb9509...C02737cD4
0 ETH0.0027659650.77302172
Transfer197332822024-04-25 15:29:3570 days ago1714058975IN
0x9AFb9509...C02737cD4
0 ETH0.001824125.48024488
Transfer196768472024-04-17 18:00:5978 days ago1713376859IN
0x9AFb9509...C02737cD4
0 ETH0.0016530821.64038441
Transfer196765522024-04-17 17:01:1178 days ago1713373271IN
0x9AFb9509...C02737cD4
0 ETH0.0010567124.55823618
Transfer196765512024-04-17 17:00:5978 days ago1713373259IN
0x9AFb9509...C02737cD4
0 ETH0.0018354925.63940464
Transfer196096002024-04-08 7:55:5988 days ago1712562959IN
0x9AFb9509...C02737cD4
0 ETH0.0011021215.39772829
Transfer196079682024-04-08 2:26:3588 days ago1712543195IN
0x9AFb9509...C02737cD4
0 ETH0.0007347313.49011768
Transfer196079422024-04-08 2:21:1188 days ago1712542871IN
0x9AFb9509...C02737cD4
0 ETH0.0008000411.17742793
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HFILToken

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: HFILToken.sol
pragma solidity ^0.5.11;

import "./IERC20Token.sol";
import "./HFILAdmin.sol";
import "./HFILLogic.sol";
import "./HFILStorage.sol";
import "./Pausable.sol";

contract HFILToken is IERC20Token,Pausable, HFILAdmin{
    string public constant name = "Huobi FIL";

    string public constant symbol = "HFIL";

    uint8 public constant decimals = 18;

    HFILLogic private logic;

    event Burning(address indexed from, uint256 value, string proof, string  filAddress, address burner);
    event Burned(address indexed from, uint256 value, string proof, string  filAddress);
    event Minting(address indexed to, uint256 value, string proof, address  minter);
    event Minted(address indexed to, uint256 value, string proof);

    constructor(address owner0, address owner1, address owner2) public{
        initAdmin(owner0, owner1, owner2);
    }


    function totalSupply() public view returns (uint256 supply) {
        return logic.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return logic.balanceOf(owner);
    }

    function mint(address to, uint256 value, string memory proof,bytes32 taskHash) public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.mintLogic(value,to,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
            emit Minting(to, value, proof, msg.sender);
        }else if (status == 3) {
            emit Minting(to, value, proof, msg.sender);
            emit Minted(to, value, proof);
            emit Transfer(address(0x0),to,value);
        }
        return true;
    }


    function burn(address from,uint256 value,string memory filAddress,string memory proof, bytes32 taskHash)
    public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.burnLogic(from,value,filAddress,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
           emit Burning(from, value, proof,filAddress, msg.sender);
        }else if (status == 3) {
           emit Burning(from, value, proof,filAddress,  msg.sender);
           emit Burned(from, value, proof,filAddress);
           emit Transfer(from, address(0x0),value);
        }
        return true;
    }

    function cancelTask(bytes32 taskHash)  public returns(uint256){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        return logic.cancelTask(taskHash);
    }

    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        bool flag = logic.transferLogic(msg.sender,to,value);
        require(flag, "transfer failed");
        emit Transfer(msg.sender,to,value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public whenNotPaused  returns (bool){
        bool flag = logic.transferFromLogic(msg.sender,from,to,value);
        require(flag,"transferFrom failed");
        emit Transfer(from, to, value);
        return true;
    }


    function approve(address spender, uint256 value) public whenNotPaused returns (bool){
        bool flag = logic.approveLogic(msg.sender,spender,value);
        require(flag, "approve failed");
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256 remaining){
        return logic.getAllowed(owner,spender);
    }

    function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused{
        require(newAddress != address(0x0), "wrong address");
        bool flag = modifyAddress(class, oldAddress, newAddress);
        if(flag){
            bytes32 classHash = keccak256(abi.encodePacked(class));
            if(classHash == LOGICHASH){
                logic = HFILLogic(newAddress);
            }else if(classHash == STOREHASH){
                logic.resetStoreLogic(newAddress);
            }
        }
    }

    function getLogicAddress() public view returns(address){
        return address(logic);
    }

    function getStoreAddress() public view returns(address){
        return logic.getStoreAddress();
    }

    function pause() public{
        require(itemAddressExists(PAUSERHASH, msg.sender), "wrong user to pauser");
        doPause();
    }

}

File 2 of 8: Container.sol
pragma solidity ^0.5.11;

contract Container{
    struct Item{
        uint256 itemType;
        uint256 status;
        address[] addresses;
    }
    uint256 MaxItemAdressNum = 255;

    mapping (bytes32 => Item) private container;

    function itemAddressExists(bytes32 id, address oneAddress) internal view returns(bool){
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress)
                return true;
        }
        return false;
    }
    function getItemAddresses(bytes32 id) internal view returns(address[] memory){
        return container[id].addresses;
    }

    function getItemInfo(bytes32 id) internal view returns(uint256, uint256, uint256){
        return (container[id].itemType, container[id].status, container[id].addresses.length);
    }

    function getItemAddressCount(bytes32 id) internal view returns(uint256){
        return container[id].addresses.length;
    }

    function setItemInfo(bytes32 id, uint256 itemType, uint256 status) internal{
        container[id].itemType = itemType;
        container[id].status = status;
    }

    function addItemAddress(bytes32 id, address oneAddress) internal{
        require(!itemAddressExists(id, oneAddress), "dup address added");
        require(container[id].addresses.length < MaxItemAdressNum, "too many addresses");
        container[id].addresses.push(oneAddress);
    }
    function removeItemAddresses(bytes32 id) internal{
        container[id].addresses.length = 0;
    }

    function removeOneItemAddress(bytes32 id, address oneAddress) internal{
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = container[id].addresses[container[id].addresses.length - 1];
                container[id].addresses.length--;
                return;
            }
        }
        revert("not exist address");
    }

    function removeItem(bytes32 id) internal{
        delete container[id];
    }

    function replaceItemAddress(bytes32 id, address oneAddress, address anotherAddress) internal{
        require(!itemAddressExists(id,anotherAddress),"dup address added");
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = anotherAddress;
                return;
            }
        }
        revert("not exist address");
    }
}

File 3 of 8: HFILAdmin.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HFILAdmin is Container{

    bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;
    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f;
    bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680;
    bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182;
    uint256 internal constant MAXUSERNUM = 255;
    bytes32[] private classHashArray;

    uint256 internal ownerRequireNum;
    uint256 internal operatorRequireNum;

    event AdminChanged(string TaskType, string class, address oldAddress, address newAddress);
    event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum);
    event AdminTaskDropped(bytes32 taskHash);

    function initAdmin(address owner0, address owner1, address owner2) internal{
        addItemAddress(OWNERHASH, owner0);
        addItemAddress(OWNERHASH, owner1);
        addItemAddress(OWNERHASH, owner2);
        addItemAddress(LOGICHASH, address(0x0));
        addItemAddress(STOREHASH, address(0x1));

        classHashArray.push(OWNERHASH);
        classHashArray.push(OPERATORHASH);
        classHashArray.push(PAUSERHASH);
        classHashArray.push(STOREHASH);
        classHashArray.push(LOGICHASH);
        ownerRequireNum = 2;
        operatorRequireNum = 2;
    }

    function classHashExist(bytes32 aHash) private view returns(bool){
        for(uint256 i = 0; i < classHashArray.length; i++)
            if(classHashArray[i] == aHash) return true;
        return false;
    }
    function getAdminAddresses(string memory class) public view returns(address[] memory) {
        bytes32 classHash = getClassHash(class);
        return getItemAddresses(classHash);
    }
    function getOwnerRequiredNum() public view returns(uint256){
        return ownerRequireNum;
    }
    function getOperatorRequiredNum() public view returns(uint256){
        return operatorRequireNum;
    }

    function resetRequiredNum(string memory class, uint256 requiredNum)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require((classHash == OPERATORHASH) || (classHash == OWNERHASH),"wrong class");
        if (classHash == OWNERHASH)
            require(requiredNum <= getItemAddressCount(OWNERHASH),"num larger than existed owners");

        bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum));
        addItemAddress(taskHash, msg.sender);

        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeItem(taskHash);
            uint256 previousNum = 0;
            if (classHash == OWNERHASH){
                previousNum = ownerRequireNum;
                ownerRequireNum = requiredNum;
            }
            else if(classHash == OPERATORHASH){
                previousNum = operatorRequireNum;
                operatorRequireNum = requiredNum;
            }else{
                revert("wrong class");
            }
            emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum);
        }
        return true;
    }


    function modifyAddress(string memory class, address oldAddress, address newAddress)
        internal onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(!itemAddressExists(classHash,newAddress),"address existed already");
        require(itemAddressExists(classHash,oldAddress),"address not existed");
        bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            replaceItemAddress(classHash, oldAddress, newAddress);
            emit AdminChanged("modifyAddress", class, oldAddress, newAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function getClassHash(string memory class) private view returns (bytes32){
        bytes32 classHash = keccak256(abi.encodePacked(class));
        require(classHashExist(classHash), "invalid class");
        return classHash;
    }

    function dropAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(itemAddressExists(classHash, oneAddress), "no such address exist");

        if(classHash == OWNERHASH)
            require(getItemAddressCount(classHash) > ownerRequireNum, "insuffience addresses");

        bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeOneItemAddress(classHash, oneAddress);
            emit AdminChanged("dropAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;

    }

    function addAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(!itemAddressExists(classHash,oneAddress),"address existed already");

        bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            addItemAddress(classHash, oneAddress);
            emit AdminChanged("addAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }


    function dropTask(bytes32 taskHash)
    public onlyOwner returns (bool){
        removeItem(taskHash);
        emit AdminTaskDropped(taskHash);
        return true;
    }

    modifier onlyOwner() {
        require(itemAddressExists(OWNERHASH, msg.sender), "only use owner to call");
        _;
    }

}

File 4 of 8: HFILLogic.sol
pragma solidity ^0.5.11;

import "./SafeMath.sol";
import "./HFILStorage.sol";

contract HFILLogic {

    using SafeMath for uint256;

    string public constant name = "HFILLogic";

    uint256 public constant TASKINIT = 0;
    uint256 public constant TASKPROCESSING = 1;
    uint256 public constant TASKCANCELLED = 2;
    uint256 public constant TASKDONE = 3;
    uint256 public constant MINTTASK = 1;
    uint256 public constant BURNTASK = 2;

    address private caller;
    HFILStorage private store;

    constructor(address aCaller) public{
        caller = aCaller;
    }

    modifier onlyCaller(){
        require(msg.sender == caller, "only main contract can call");
        _;
    }

    function mintLogic(uint256 value,address to,string calldata proof,
        bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){
        require(to != address(0), "cannot be burned from zero address");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong");
        uint256 status = supportTask(MINTTASK, taskHash, supportAddress, requireNum);

        if( status == TASKDONE){
            uint256 totalSupply = store.getTotalSupply();
            uint256 balanceTo = store.balanceOf(to);
            balanceTo = balanceTo.safeAdd(value);
            totalSupply = totalSupply.safeAdd(value);
            store.setBalance(to,balanceTo);
            store.setTotalSupply(totalSupply);
        }
        return status;
    }

    function burnLogic(address from, uint256 value,string calldata filAddress,
        string calldata proof,bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){

        uint256 balance = store.balanceOf(from);
        require(balance >= value,"sender address not have enough HFIL");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(from,value,filAddress,proof))),"taskHash is wrong");
        uint256 status = supportTask(BURNTASK, taskHash, supportAddress, requireNum);

        if ( status == TASKDONE ){
            uint256 totalSupply = store.getTotalSupply();
            totalSupply = totalSupply.safeSub(value);
            balance = balance.safeSub(value);
            store.setBalance(from,balance);
            store.setTotalSupply(totalSupply);

        }
        return status;
    }

    function transferLogic(address sender,address to,uint256 value) external onlyCaller returns(bool) {
        require(to != address(0), "cannot transfer to address zero");
        require(sender != to, "sender need != to");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(sender);
        uint256 balanceTo = store.balanceOf(to);
        require(value <= balanceFrom, "insufficient funds");
        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        store.setBalance(sender,balanceFrom);
        store.setBalance(to,balanceTo);
        return true;
    }

    function transferFromLogic(address sender,address from,address to,uint256 value) external onlyCaller returns(bool) {
        require(from != address(0), "cannot transfer from address zero");
        require(to != address(0), "cannot transfer to address zero");
        require(value > 0, "can not tranfer zero Token");
        require(from!=to,"from and to can not be be the same ");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(from);
        uint256 balanceTo = store.balanceOf(to);
        uint256 allowedvalue = store.getAllowed(from,sender);

        require(value <= allowedvalue, "insufficient allowance");
        require(value <= balanceFrom, "insufficient funds");

        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        allowedvalue = allowedvalue.safeSub(value);

        store.setBalance(from,balanceFrom);
        store.setBalance(to,balanceTo);
        store.setAllowed(from,sender,allowedvalue);
        return true;
    }

    function approveLogic(address sender,address spender,uint256 value)  external onlyCaller returns(bool success){
        require(spender != address(0), "spender address zero");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        store.setAllowed(sender,spender,value);
        return true;
    }

    function resetStoreLogic(address storeAddress) external onlyCaller {
        store = HFILStorage(storeAddress);
    }

    function getTotalSupply() public view returns (uint256 supply) {
        return store.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return store.balanceOf(owner);
    }

    function getAllowed(address owner, address spender) public view returns (uint256 remaining){
        return store.getAllowed(owner,spender);
    }

    function getStoreAddress() public view returns(address){
        return address(store);
    }

    function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) private returns(uint256){
        require(!store.supporterExists(taskHash, oneAddress), "supporter already exists");
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus < TASKDONE, "wrong status");

        if (theTaskStatus != TASKINIT)
            require(theTaskType == taskType, "task type not match");
        store.addSupporter(taskHash, oneAddress);
        theSupporterNum++;
        if(theSupporterNum >= requireNum)
            theTaskStatus = TASKDONE;
        else
            theTaskStatus = TASKPROCESSING;
        store.setTaskInfo(taskHash, taskType, theTaskStatus);
        return theTaskStatus;
    }

    function cancelTask(bytes32 taskHash)  external onlyCaller returns(uint256){
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus == TASKPROCESSING, "wrong status");
        if(theSupporterNum > 0) store.removeAllSupporter(taskHash);
        theTaskStatus = TASKCANCELLED;
        store.setTaskInfo(taskHash, theTaskType, theTaskStatus);
        return theTaskStatus;
    }
}

File 5 of 8: HFILStorage.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HFILStorage is Container{

    string public constant name = "HFILStorage";

    address private caller;

    constructor(address aCaller) public{
        totalSupply = 0;
        caller = aCaller;
    }
    uint256 public totalSupply;

    mapping (address => uint256) private balances;

    mapping (address => mapping (address => uint256)) private allowed;

    function supporterExists(bytes32 taskHash, address user) public view returns(bool){
        return itemAddressExists(taskHash, user);
    }

    function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller{
        setItemInfo(taskHash, taskType, status);
    }

    function getTaskInfo(bytes32 taskHash) public view returns(uint256, uint256, uint256){
        return getItemInfo(taskHash);
    }

    function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller{
        addItemAddress(taskHash, oneAddress);
    }

    function removeAllSupporter(bytes32 taskHash) external onlyCaller{
        removeItemAddresses(taskHash);
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "only use main main contract to call");
        _;
    }

    function getTotalSupply() external view returns(uint256) {
        return totalSupply;
    }

    function setTotalSupply(uint256 amount) external onlyCaller {
        totalSupply = amount;
    }

    function balanceOf(address account) external view returns(uint256) {
        return balances[account];
    }

    function setBalance(address account,uint256 amount) external onlyCaller {
        require(account != address(0),"account address error");
        balances[account] = amount;
    }

    function getAllowed(address owner,address spender) external view returns(uint256) {
        return allowed[owner][spender];
    }

    function setAllowed(address owner,address spender,uint256 amount) external onlyCaller {
        require(owner != address(0),"owner address error");
        require(spender != address(0),"spender address error");
        allowed[owner][spender] = amount;
    }
}

File 6 of 8: IERC20Token.sol
pragma solidity ^0.5.11;

contract IERC20Token {
    function totalSupply() public view returns (uint256 supply);
    /// @param owner The address from which the balance will be retrieved
    /// @return The balance
    //solium-disable security/enforce-explicit-visibility
    function balanceOf(address owner) public view returns (uint256 balance);

    /// @notice send `value` token to `to` from `msg.sender`
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address to, uint256 value) public returns (bool success);

    /// @notice send `value` token to `to` from `from` on the condition it is approved by `from`
    /// @param from The address of the sender
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address from, address to, uint256 value) public returns (bool success);

    /// @notice `msg.sender` approves `spender` to spend `value` tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @param value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address spender, uint256 value) public returns (bool success);

    /// @param owner The address of the account owning tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address owner, address spender) public view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

File 7 of 8: Pausable.sol
pragma solidity ^0.5.11;

contract Pausable {

    bool private pauseState = true;

    event PauseChangedTo(bool pauseState);

    function doPause() internal {
        pauseState = !pauseState;
        emit PauseChangedTo(pauseState);
    }

    function isPaused() public view returns (bool) {
        return pauseState;
    }

    modifier whenPaused() {
        require(pauseState, "it is not paused now");
        _;
    }

    modifier whenNotPaused() {
        require(!pauseState, "it is paused now");
        _;
    }

}

File 8 of 8: SafeMath.sol
// solium-disable linebreak-style
pragma solidity ^0.5.11;

library SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a,"");
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a,"");
        c = a - b;
    }
    function safeMul(uint a, uint b) public pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b,"");
    }
    function safeDiv(uint a, uint b) public pure returns (uint c) {
        require(b > 0,"");
        c = a / b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner0","type":"address"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"filAddress","type":"string"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"filAddress","type":"string"},{"indexed":false,"internalType":"address","name":"burner","type":"address"}],"name":"Burning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"Minting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pauseState","type":"bool"}],"name":"PauseChangedTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"filAddress","type":"string"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"cancelTask","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperatorRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwnerRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405260016000806101000a81548160ff02191690831515021790555060ff6001553480156200003057600080fd5b5060405162004f3e38038062004f3e833981810160405260608110156200005657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506200008e8383836200009760201b60201c565b505050620005a7565b620000cc7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b846200034260201b60201c565b620001017f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b836200034260201b60201c565b620001367f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b826200034260201b60201c565b6200016c7f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200034260201b60201c565b620001a27fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200034260201b60201c565b60037f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060026004819055506002600581905550505050565b620003548282620004d760201b60201c565b15620003c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501062000459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600090505b60026000858152602001908152602001600020600201805490508110156200059b578273ffffffffffffffffffffffffffffffffffffffff166002600086815260200190815260200160002060020182815481106200053a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200058d576001915050620005a1565b8080600101915050620004df565b50600090505b92915050565b61498780620005b76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f62692046494c000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f4846494c0000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a7231582028dc67043e81ac5778b3ae59599e5d3ffece616828c4f3e1a4fe56d27c754b6464736f6c63430005110032000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e76500000000000000000000000009eae35713306115b6f1f5361b0dfd65a0b81433

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f62692046494c000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f4846494c0000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a7231582028dc67043e81ac5778b3ae59599e5d3ffece616828c4f3e1a4fe56d27c754b6464736f6c63430005110032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e76500000000000000000000000009eae35713306115b6f1f5361b0dfd65a0b81433

-----Decoded View---------------
Arg [0] : owner0 (address): 0x338637A1431F42243ffB8C39807e8D7cdA0478a0
Arg [1] : owner1 (address): 0x95a6EBdacD70B37b4dabb3504E5D817580E6E765
Arg [2] : owner2 (address): 0x09EaE35713306115b6F1f5361b0dFd65a0b81433

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a0
Arg [1] : 00000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765
Arg [2] : 00000000000000000000000009eae35713306115b6f1f5361b0dfd65a0b81433


Deployed Bytecode Sourcemap

160:4276:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;160:4276:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;219:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;219:41:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3125:270;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3125:270:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;855:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2835:283;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2835:283:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3552:535;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3552:535:4;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3552:535:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3552:535:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;312:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6094:170:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6094:170:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2048:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;967:118:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;967:118:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4300:133;;;:::i;:::-;;4464:879:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4464:879:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4464:879:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4464:879:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;267:38:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;267:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:257;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2572:257:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4093:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4192:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;248:81:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2151:104:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1857:186;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1857:186:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1857:186:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1857:186:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1857:186:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1857:186:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1857:186:1;;;;;;;;;;;;;;;;;5349:738;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5349:738:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5349:738:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5349:738:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1091:594:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1091:594:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1091:594:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3401:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3401:145:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2261:1159:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2261:1159:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2261:1159:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2261:1159:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2374:192:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2374:192:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1692:676;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:41;;;;;;;;;;;;;;;;;;;:::o;3125:270::-;3204:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3219:9:4;3231:5;;;;;;;;;;;:18;;;3250:10;3261:7;3269:5;3231:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3231:44:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3231:44:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3231:44:4;;;;;;;;;;;;;;;;3219:56;;3293:4;3285:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:7;3331:36;;3340:10;3331:36;;;3361:5;3331:36;;;;;;;;;;;;;;;;;;3384:4;3377:11;;;3125:270;;;;:::o;855:106::-;899:14;932:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;932:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;932:22:4;;;;;;;;;;;;;;;;925:29;;855:106;:::o;2835:283::-;2929:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:9:4;2956:5;;;;;;;;;;;:23;;;2980:10;2991:4;2996:2;2999:5;2956:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2956:49:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2956:49:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2956:49:4;;;;;;;;;;;;;;;;2944:61;;3023:4;3015:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3080:2;3065:25;;3074:4;3065:25;;;3084:5;3065:25;;;;;;;;;;;;;;;;;;3107:4;3100:11;;;2835:283;;;;;:::o;3552:535::-;375:10:6;;;;;;;;;;;367:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:3:4;3676:26;;:10;:26;;;;3668:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3730:9;3742:44;3756:5;3763:10;3775;3742:13;:44::i;:::-;3730:56;;3799:4;3796:285;;;3818:17;3865:5;3848:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3848:23:4;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3848:23:4;;;3838:34;;;;;;3818:54;;573:66:1;3902:9:4;;3889;:22;3886:185;;;3948:10;3930:5;;:29;;;;;;;;;;;;;;;;;;3886:185;;;463:66:1;3995:9:4;;3982;:22;3979:92;;;4023:5;;;;;;;;;;;:21;;;4045:10;4023:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4023:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4023:33:4;;;;3979:92;3886:185;3796:285;;420:1:6;3552:535:4;;;:::o;312:35::-;345:2;312:35;:::o;6094:170:1:-;6160:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6175:20;6186:8;6175:10;:20::i;:::-;6210:26;6227:8;6210:26;;;;;;;;;;;;;;;;;;6253:4;6246:11;;6094:170;;;:::o;2048:98::-;2099:7;2124:15;;2117:22;;2048:98;:::o;967:118:4:-;1022:15;1056:5;;;;;;;;;;;:15;;;1072:5;1056:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1056:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1056:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1056:22:4;;;;;;;;;;;;;;;;1049:29;;967:118;;;:::o;4300:133::-;4341:41;353:66:1;4359:10:4;;4371;4341:17;:41::i;:::-;4333:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4417:9;:7;:9::i;:::-;4300:133::o;4464:879:1:-;4559:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4574:17;4594:19;4607:5;4594:12;:19::i;:::-;4574:39;;463:66;4644:9;;4631;:22;;:48;;;;;573:66;4670:9;;4657;:22;;4631:48;4623:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4713:40;4731:9;4742:10;4713:17;:40::i;:::-;4705:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;4806:9;;4793;:22;4790:121;;;4870:15;;4837:30;4857:9;4837:19;:30::i;:::-;:48;4829:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4790:121;4922:16;4983:5;4990:10;4951:50;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4951:50:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4951:50:1;;;4941:61;;;;;;4922:80;;5012:36;5027:8;5037:10;5012:14;:36::i;:::-;5094:15;;5061:29;5081:8;5061:19;:29::i;:::-;:48;5058:256;;5124:43;5145:9;5156:10;5124:20;:43::i;:::-;5186:58;5214:5;5221:10;5233;5186:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5186:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:20;5269:8;5258:10;:20::i;:::-;5299:4;5292:11;;;;;;5058:256;5330:5;5323:12;;;;6386:1;4464:879;;;;:::o;267:38:4:-;;;;;;;;;;;;;;;;;;;:::o;2572:257::-;2647:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:9:4;2675:5;;;;;;;;;;;:19;;;2695:10;2706:2;2709:5;2675:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2675:40:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2675:40:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2675:40:4;;;;;;;;;;;;;;;;2663:52;;2733:4;2725:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2792:2;2772:29;;2781:10;2772:29;;;2795:5;2772:29;;;;;;;;;;;;;;;;;;2818:4;2811:11;;;2572:257;;;;:::o;4093:93::-;4140:7;4173:5;;;;;;;;;;;4158:21;;4093:93;:::o;4192:102::-;4239:7;4264:5;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4264:23:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4264:23:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4264:23:4;;;;;;;;;;;;;;;;4257:30;;4192:102;:::o;248:81:6:-;289:4;312:10;;;;;;;;;;;305:17;;248:81;:::o;2151:104:1:-;2205:7;2230:18;;2223:25;;2151:104;:::o;1857:186::-;1925:16;1953:17;1973:19;1986:5;1973:12;:19::i;:::-;1953:39;;2009:27;2026:9;2009:16;:27::i;:::-;2002:34;;;1857:186;;;:::o;5349:738::-;5443:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5458:17;5478:19;5491:5;5478:12;:19::i;:::-;5458:39;;463:66;5528:9;;5515;:22;;:48;;;;;573:66;5554:9;;5541;:22;;5515:48;5507:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:39;5616:9;5626:10;5598:17;:39::i;:::-;5597:40;5589:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5675:16;5735:5;5742:10;5704:49;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5704:49:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5704::1;;;5694:60;;;;;;5675:79;;5764:36;5779:8;5789:10;5764:14;:36::i;:::-;5846:15;;5813:29;5833:8;5813:19;:29::i;:::-;:48;5810:249;;5876:37;5891:9;5902:10;5876:14;:37::i;:::-;5932:57;5959:5;5966:10;5978;5932:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5932:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6003:20;6014:8;6003:10;:20::i;:::-;6044:4;6037:11;;;;;;5810:249;6075:5;6068:12;;;;6386:1;5349:738;;;;:::o;1091:594:4:-;1199:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:43:4;242:66:1;1240:12:4;;1254:10;1222:17;:43::i;:::-;1214:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:14;1311:5;;;;;;;;;;;:15;;;1327:5;1333:2;1336:5;1342:8;1352:10;1364:18;;1311:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1311:72:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:72:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1311:72:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1311:72:4;;;;;;;;;;;;;;;;1294:89;;1407:1;1397:6;:11;1393:265;;;1436:2;1428:37;;;1440:5;1447;1454:10;1428:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1428:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:265;;;1495:1;1485:6;:11;1481:177;;;1525:2;1517:37;;;1529:5;1536;1543:10;1517:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1517:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:2;1573:24;;;1584:5;1591;1573:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1573:24:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1638:2;1616:31;;1633:3;1616:31;;;1641:5;1616:31;;;;;;;;;;;;;;;;;;1481:177;1393:265;1674:4;1667:11;;;1091:594;;;;;;:::o;3401:145::-;3473:17;3508:5;;;;;;;;;;;:16;;;3525:5;3531:7;3508:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3508:31:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3508:31:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3508:31:4;;;;;;;;;;;;;;;;3501:38;;3401:145;;;;:::o;2261:1159:1:-;2362:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:17;2397:19;2410:5;2397:12;:19::i;:::-;2377:39;;242:66;2448:12;;2435:9;:25;2434:55;;;;129:66;2479:9;;2466;:22;2434:55;2426:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;2531:9;;2518;:22;2514:127;;;2577:30;129:66;2597:9;;2577:19;:30::i;:::-;2562:11;:45;;2554:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:127;2652:16;2718:5;2725:11;2681:56;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2681:56:1;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2681:56:1;;;2671:67;;;;;;2652:86;;2748:36;2763:8;2773:10;2748:14;:36::i;:::-;2831:15;;2798:29;2818:8;2798:19;:29::i;:::-;:48;2795:598;;2861:20;2872:8;2861:10;:20::i;:::-;2895:19;2917:1;2895:23;;129:66;2949:9;;2936;:22;2932:356;;;2991:15;;2977:29;;3042:11;3024:15;:29;;;;2932:356;;;242:66;3102:12;;3089:9;:25;3086:202;;;3147:18;;3133:32;;3204:11;3183:18;:32;;;;3086:202;;;3252:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3086:202;2932:356;3306:76;3350:5;3357:11;3370;3306:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3306:76:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2795:598;;3409:4;3402:11;;;;2261:1159;;;;:::o;2374:192:4:-;2428:7;2454:43;242:66:1;2472:12:4;;2486:10;2454:17;:43::i;:::-;2446:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2533:5;;;;;;;;;;;:16;;;2550:8;2533:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2533:26:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2533:26:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2533:26:4;;;;;;;;;;;;;;;;2526:33;;2374:192;;;:::o;1692:676::-;1830:4;478:10:6;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:43:4;242:66:1;1871:12:4;;1885:10;1853:17;:43::i;:::-;1845:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:14;1942:5;;;;;;;;;;;:15;;;1958:4;1963:5;1969:10;1980:5;1986:8;1996:10;2008:18;;1942:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1942:85:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1942:85:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1942:85:4;;;;;;;;;;;;;;;;1925:102;;2051:1;2041:6;:11;2037:304;;;2079:4;2071:50;;;2085:5;2092;2098:10;2110;2071:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:304;;;2151:1;2141:6;:11;2137:204;;;2180:4;2172:51;;;2186:5;2193;2199:10;2212;2172:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:4;2241:37;;;2254:5;2261;2267:10;2241:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:3;2296:34;;2305:4;2296:34;;;2324:5;2296:34;;;;;;;;;;;;;;;;;;2137:204;2037:304;2357:4;2350:11;;;1692:676;;;;;;;:::o;3427:794:1:-;3546:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:17;3581:19;3594:5;3581:12;:19::i;:::-;3561:39;;3619;3637:9;3647:10;3619:17;:39::i;:::-;3618:40;3610:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:39;3721:9;3731:10;3703:17;:39::i;:::-;3695:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3775:16;3838:5;3845:10;3857;3804:64;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3804:64:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3804:64:1;;;3794:75;;;;;;3775:94;;3879:36;3894:8;3904:10;3879:14;:36::i;:::-;3961:15;;3928:29;3948:8;3928:19;:29::i;:::-;:48;3925:268;;3991:53;4010:9;4021:10;4033;3991:18;:53::i;:::-;4063:60;4093:5;4100:10;4112;4063:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4063:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4137:20;4148:8;4137:10;:20::i;:::-;4178:4;4171:11;;;;;;3925:268;4209:5;4202:12;;;;6386:1;3427:794;;;;;:::o;239:280:0:-;320:4;339:9;351:1;339:13;;335:156;358:9;:13;368:2;358:13;;;;;;;;;;;:23;;:30;;;;354:1;:34;335:156;;;441:10;411:40;;:9;:13;421:2;411:13;;;;;;;;;;;:23;;435:1;411:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;408:72;;;476:4;469:11;;;;;408:72;390:3;;;;;;;335:156;;;;507:5;500:12;;239:280;;;;;:::o;1991:77::-;2048:9;:13;2058:2;2048:13;;;;;;;;;;;;2041:20;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1991:77;:::o;132:110:6:-;184:10;;;;;;;;;;;183:11;170:10;;:24;;;;;;;;;;;;;;;;;;209:26;224:10;;;;;;;;;;;209:26;;;;;;;;;;;;;;;;;;;;;;132:110::o;4227:231:1:-;4292:7;4310:17;4357:5;4340:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4340:23:1;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4340:23:1;;;4330:34;;;;;;4310:54;;4382:25;4397:9;4382:14;:25::i;:::-;4374:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4442:9;4435:16;;;4227:231;;;:::o;843:125:0:-;906:7;931:9;:13;941:2;931:13;;;;;;;;;;;:23;;:30;;;;924:37;;843:125;;;:::o;1144:285::-;1227:33;1245:2;1249:10;1227:17;:33::i;:::-;1226:34;1218:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1333:16;;1300:9;:13;1310:2;1300:13;;;;;;;;;;;:23;;:30;;;;:49;1292:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:9;:13;1392:2;1382:13;;;;;;;;;;;:23;;1411:10;1382:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1382:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:285;;:::o;1540:445::-;1624:9;1636:1;1624:13;;1620:322;1643:9;:13;1653:2;1643:13;;;;;;;;;;;:23;;:30;;;;1639:1;:34;1620:322;;;1726:10;1696:40;;:9;:13;1706:2;1696:13;;;;;;;;;;;:23;;1720:1;1696:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;1693:239;;;1784:9;:13;1794:2;1784:13;;;;;;;;;;;:23;;1841:1;1808:9;:13;1818:2;1808:13;;;;;;;;;;;:23;;:30;;;;:34;1784:59;;;;;;;;;;;;;;;;;;;;;;;;;1755:9;:13;1765:2;1755:13;;;;;;;;;;;:23;;1779:1;1755:26;;;;;;;;;;;;;;;;:88;;;;;;;;;;;;;;;;;;1861:9;:13;1871:2;1861:13;;;;;;;;;;;:23;;:32;;;;;;;;;;;;:::i;:::-;;1911:7;;;1693:239;1675:3;;;;;;;1620:322;;;;1951:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1540:445;;;:::o;524:124::-;584:16;618:9;:13;628:2;618:13;;;;;;;;;;;:23;;611:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;524:124;;;:::o;2074:448::-;2185:36;2203:2;2206:14;2185:17;:36::i;:::-;2184:37;2176:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2256:9;2268:1;2256:13;;2252:227;2275:9;:13;2285:2;2275:13;;;;;;;;;;;:23;;:30;;;;2271:1;:34;2252:227;;;2358:10;2328:40;;:9;:13;2338:2;2328:13;;;;;;;;;;;:23;;2352:1;2328:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;2325:144;;;2416:14;2387:9;:13;2397:2;2387:13;;;;;;;;;;;:23;;2411:1;2387:26;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2448:7;;;2325:144;2307:3;;;;;;;2252:227;;;;2488:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:448;;;;:::o;1643:209:1:-;1703:4;1722:9;1734:1;1722:13;;1718:105;1741:14;:21;;;;1737:1;:25;1718:105;;;1805:5;1784:14;1799:1;1784:17;;;;;;;;;;;;;;;;:26;1781:42;;;1819:4;1812:11;;;;;1781:42;1764:3;;;;;;;1718:105;;;;1840:5;1833:12;;1643:209;;;;:::o;160:4276:4:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://28dc67043e81ac5778b3ae59599e5d3ffece616828c4f3e1a4fe56d27c754b64

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.