Contract 0x4A10307E221781570E4B7E409EB315F11E8D0385

 
 
Txn Hash
Method
Block
From
To
Value
0x3829bc5a2703aaa090428e68a57f841668f4dd7100ccdd2de96cc9c3f99815e0Transfer156422032022-09-29 23:14:111 day 19 hrs ago0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0005975610.9666924
0x5a9b7476fb28acc70bce336040096aa00f330bd7c2a88d4786d2678e5780b429Drop Address156165472022-09-26 9:06:595 days 9 hrs ago0x3504565d19a557de2f3b4552e344a3bfaa6010f2 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0007993510
0xd94b73de25d10be56a4c781f16aeb1d12b96a69c0fc3faa6986242b1e6aa9140Drop Address156165472022-09-26 9:06:595 days 9 hrs ago0x3504565d19a557de2f3b4552e344a3bfaa6010f2 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0008376510
0x1aca305c630352f6e72d4ee40f70a17d27a7bcc2c942079208b083578ee13535Drop Address156165372022-09-26 9:04:595 days 9 hrs ago0xe597f83558c3b4b9cd9df9bd4ef6901adf13e63e IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0010005910
0x41e083f45814c314e10c6a730979da940d50e3a1344029d02188cc456a8f60c7Drop Address156165372022-09-26 9:04:595 days 9 hrs ago0xe597f83558c3b4b9cd9df9bd4ef6901adf13e63e IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0009736110
0x6483b69d74b78066c57ca35c2c0fecf0c7e6362b1bdf5e04ec1cfb302040f4dfTransfer153643292022-08-18 9:53:5444 days 8 hrs ago0x30741289523c2e4d2a62c7d6722686d14e723851 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0022913130
0x1fe80a6dd83fcf99eac4fa01c3e9e324e2768ed383e59a69d83c600dccf97c67Transfer152624722022-08-02 10:11:5560 days 8 hrs ago0x30741289523c2e4d2a62c7d6722686d14e723851 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0022913130
0xbb870d59c84370c94e6edfe35c924b0c5c842c3dcba5dcb0096be6838eaa6c34Transfer151721072022-07-19 8:58:3574 days 9 hrs ago0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0006537212
0x3e6691cc6beeee52a6b7843e0db1ea605364dae84a0f5deedd9a86aaf21350c5Transfer151405552022-07-14 11:43:1079 days 6 hrs ago0x7262b784e35e1f0d1b83f4f00cab1877e3047e70 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0021480330
0x04d8c1b1a5e6cb969a0a4cf619c906eeb31cb1392a79fbe8cf1725ea97bf0e9cTransfer151405152022-07-14 11:32:4079 days 6 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0021480330
0x99ed6aa4435ee3435d733ed567933b8bc3ff4e9d154b4ba2ec39aa26338d5d86Transfer150840632022-07-05 18:10:3688 days 3 mins ago0x71a6e17c7db414d1b7f605a9d4d762b2909eb067 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0032148559
0x547bef058f8f8730b4cbea55e0755ee9db940150109d8e44af2ad25f28794c23Transfer150840122022-07-05 17:59:1988 days 15 mins ago0x4b850f1fbd2383bc3bbbbda903b45bfcbaed4364 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0022908432
0x4fb2b5aa1b701299a3f8f8735e01f7cdd56972d6ad106ba8fc5ab0dc001e37e1Transfer149922372022-06-19 18:36:03103 days 23 hrs ago0x71a6e17c7db414d1b7f605a9d4d762b2909eb067 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.001416426
0xffc362cc17ad79842a9d33ece327f57d9624c8d51af9299970b03edc77d18fe8Transfer149921872022-06-19 18:24:31103 days 23 hrs ago0x4b850f1fbd2383bc3bbbbda903b45bfcbaed4364 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0012220316
0xdd4470c54312b4731210d41479de4a40c7edf61253711c85b9ef9d16433e37caTransfer149852722022-06-18 13:40:49105 days 4 hrs ago0x4b850f1fbd2383bc3bbbbda903b45bfcbaed4364 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0012350721
0x7fd9e935a815790d1f7bd8b2f6d591c494b8cfcd532406a9017ab7b73b59b967Transfer149852512022-06-18 13:35:59105 days 4 hrs ago0x71a6e17c7db414d1b7f605a9d4d762b2909eb067 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0017973433
0xeb2cf7889cff1c677ea2650c7bff445a34551dfe25052d00f0116f18c59f9696Transfer149852032022-06-18 13:24:29105 days 4 hrs ago0x4b850f1fbd2383bc3bbbbda903b45bfcbaed4364 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0018327624
0xa42b66cfb5ec4a7c1b0fc000617caa43ac5dd43c8c9a001a8b125f84ec330618Transfer149849932022-06-18 12:37:02105 days 5 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0022916730
0x6771c6919e215c80c83a3a44fd689153c725698c20608b0850cbb73f39e02918Transfer145944342022-04-16 5:24:00168 days 12 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0032608955
0x78378ba94efd05380358e6c1b841b39651f71e1465c6e882e84ba47eb862431bTransfer145942582022-04-16 4:36:15168 days 13 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0054227671
0x6b2bdb22db98c86a930aa7588b16a0de1f5da39cb888f49276d09bacc0b9aa9fTransfer144811942022-03-29 12:52:22186 days 5 hrs ago0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0045215983
0xa7cfc85f0bdb885ebed4588917fdf8e912020ad912b5a0d98ef8db3bc40db2f5Transfer144672342022-03-27 8:47:25188 days 9 hrs ago0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.0016346730
0xcd2edc129cc55a591b78d58ea408ef3a7867a862547b604fcfae3964cac20b5dTransfer140658132022-01-24 3:08:23250 days 15 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.01031251135
0x6685d4e0d02898fa15e7896aec280b69f98ecb503e2ac28bcea1e9772b0cdc66Transfer137386982021-12-04 8:10:10301 days 10 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.01310021221
0xa650424d9628c1f3059f70b9cfbbb6e6b14370d9057c7500d0712c22c4c8ee2eTransfer137386462021-12-04 7:58:50301 days 10 hrs agoHuobi 10 IN  0x4a10307e221781570e4b7e409eb315f11e8d03850 Ether0.01695303222
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HXTZToken

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 5 of 8: HXTZToken.sol
pragma solidity ^0.5.11;

import "./IERC20Token.sol";
import "./HXTZAdmin.sol";
import "./HXTZLogic.sol";
import "./HXTZStorage.sol";
import "./Pausable.sol";

contract HXTZToken is IERC20Token,Pausable, HXTZAdmin{
    string public constant name = "Huobi XTZ";

    string public constant symbol = "HXTZ";

    uint8 public constant decimals = 18;

    HXTZLogic private logic;

    event Burning(address indexed from, uint256 value, string proof, string  xtzAddress, address burner);
    event Burned(address indexed from, uint256 value, string proof, string  xtzAddress);
    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 xtzAddress,string memory proof, bytes32 taskHash)
    public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.burnLogic(from,value,xtzAddress,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
           emit Burning(from, value, proof,xtzAddress, msg.sender);
        }else if (status == 3) {
           emit Burning(from, value, proof,xtzAddress,  msg.sender);
           emit Burned(from, value, proof,xtzAddress);
           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 = HXTZLogic(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 1 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 2 of 8: HXTZAdmin.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HXTZAdmin 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 3 of 8: HXTZLogic.sol
pragma solidity ^0.5.11;

import "./SafeMath.sol";
import "./HXTZStorage.sol";

contract HXTZLogic {

    using SafeMath for uint256;

    string public constant name = "HXTZLogic";

    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;
    HXTZStorage 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 xtzAddress,
        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 HXTZ");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(from,value,xtzAddress,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 = HXTZStorage(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 4 of 8: HXTZStorage.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HXTZStorage is Container{

    string public constant name = "HXTZStorage";

    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":"xtzAddress","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":"xtzAddress","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":"xtzAddress","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"}]

608060405260016000806101000a81548160ff02191690831515021790555060ff6001553480156200003057600080fd5b5060405162004f3e38038062004f3e833981810160405260608110156200005657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506200008e8383836200009760201b60201c565b505050620005a7565b620000cc7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b846200034260201b60201c565b620001017f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b836200034260201b60201c565b620001367f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b826200034260201b60201c565b6200016c7f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200034260201b60201c565b620001a27fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200034260201b60201c565b60037f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060026004819055506002600581905550505050565b620003548282620004d760201b60201c565b15620003c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501062000459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600090505b60026000858152602001908152602001600020600201805490508110156200059b578273ffffffffffffffffffffffffffffffffffffffff166002600086815260200190815260200160002060020182815481106200053a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200058d576001915050620005a1565b8080600101915050620004df565b50600090505b92915050565b61498780620005b76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f62692058545a000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f4858545a0000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a723158206d43a9f50aec6b90a4c579d68bee70d530561916f1efa3e8dc1b7985facdb91b64736f6c63430005110032000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765000000000000000000000000e597f83558c3b4b9cd9df9bd4ef6901adf13e63e

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

000000000000000000000000338637a1431f42243ffb8c39807e8d7cda0478a000000000000000000000000095a6ebdacd70b37b4dabb3504e5d817580e6e765000000000000000000000000e597f83558c3b4b9cd9df9bd4ef6901adf13e63e

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

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


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://6d43a9f50aec6b90a4c579d68bee70d530561916f1efa3e8dc1b7985facdb91b
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading

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.