Contract 0x188f79b0a8edc10ad53285c47c3feaa0d2716e83

 

TxHash Block Age From To Value [TxFee]
0x21c2a489e6b1d40636a64a04db815e7b917a814e07a85809764f9992d44ee04a72180733 days 33 mins ago0x798196b74c94b9f20066ff1c4b09c24bed94e6a4  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.029538175
0x2173c3d070d07b3cefdaa29e7a1e35e67752e65cfcb6a3ac9eadf61ac2f70e1072161593 days 11 hrs ago0x4ddb0396073c0d92831f692d37150eaee634bcaf  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000678138
0x0062139a73ca65d54ab9869250a8c19912ab19f4d81a34590f4822d9b039113072123314 days 9 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.17722905
0x53170961167fb44147b0ad92fae62fe7d449c6faacebf792f195c7ab3f5fbc0972102254 days 21 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.00019835
0xbe6e60f1bb35002929497faa83459298decb922a381c1242bf6d096ec50db7e472081355 days 9 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.00080508
0x38cba7d036551ba8a3c615feb47bba9f923f39de9a9aec7716a954d17213d9c272081325 days 9 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.029538175
0x6e1e2cb497966782715de71acf083580d8f5b7bf6a9766bbb4c9c2b45b5b89f572081275 days 9 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.029538175
0xf728cfbdf18f45e9f684c8e2e5180e661ab0484f9de499839d41593281374a7c72077735 days 11 hrs ago0xa4e5cd0b3d4a050734d2fe310b30ab0a80e72eae  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.01181527
0xccd9ab1003b4b3938d2d2875cd1940baedaa548684b5c82587b027cbc9947c8372077255 days 11 hrs ago0xfdd1f743679cca49864137eb0dc5787b2a19ac43  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000317618
0x3fc0d400403686914de16bb591aaac154add68d36ff6c0841f6ad469e6bfc3f872051926 days 1 hr ago0xfdd1f743679cca49864137eb0dc5787b2a19ac43  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000575236
0xd0e252ac2173ad28cb535d2228670256702324f26eeebfef7e150047a49fc86572046166 days 5 hrs ago0x9cfc4d4c13cf22c9a0b9c90955249eaaff0433d8  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000852244
0x5bfdca7105d7948374c582f120603cd54bade24bce2e98b492e37bca1445bf2372038036 days 9 hrs ago0x46edba15cff73b5e42a80c12d6cb763307a5633c  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000972244
0x4e546b1cebbc66a5a65f23be3929935cd8f597524ea72bb0d7d00ed84b9d8b3472027936 days 15 hrs ago0x9cfc4d4c13cf22c9a0b9c90955249eaaff0433d8  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000229262
0xb246fbe98c344db64b6bc7bba15d673b08a0d90f9f9f70779a42f38aaa0d2fd172003337 days 5 hrs ago0x98eeb3b87f59d05829a3d34e5232d14535262df9  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000393268
0x6da55bc6b34e3de59d6564750d9da8ec9f56b5c18ffe63fe48d20bd3c9734d4172003127 days 5 hrs ago0x98eeb3b87f59d05829a3d34e5232d14535262df9  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000635492
0x0e8551cad76479b2887e287dcdd4440c021fc731e33164ef4582c38687ac793972001417 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000459036
0xa638bc056cf60c2d65d9ddfa5160cd9888a66acc4daedfa1c559c52a0ae0931d72001277 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000398268
0xcb475b8a723ba5793569e2bf212b3bcdd0d2159870fe8215b6c15755c248b3fc72001257 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000458268
0x7746343d08ecf285cfd80a594152a57a65e460c785869c71b3ed71b6e84a791672001137 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000572835
0xce85b2e02598ad6f727bd63d87f32d4042f39c0ca3740f998cd2a7752537d50772001127 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000229518
0xeb0a28a597d8d9b76751a8aae7b10ba2a041ffd749aeb38c3b0f66315beb2df772000577 days 6 hrs ago0x1ec56680b7bf1caaddcb9305b88e1a7c9be99478  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000229134
0xe4ce09bdccdecfda2980f1e58443fc5b3e6c33e3776e02da37e864d39aa1a8ed71999717 days 7 hrs ago0xfdd1f743679cca49864137eb0dc5787b2a19ac43  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000755236
0x54f63ab89f5172ee5712c61f6df47b3c728a7d4bc4935870c2b342403357f5c771967937 days 22 hrs ago0xabd55309f9f92b2dc1759919593237fb34db50a3  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000458524
0x2579deb1aba5ce00ca7fdabfd1ec2c0c0d95d8d0ae6aecf38ecccb439c6dd68571967847 days 22 hrs ago0xabd55309f9f92b2dc1759919593237fb34db50a3  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000458524
0x247febf9dbdd2087112af5d5fcbbe879c206fe4069167587fd556ad6e84480a171964867 days 23 hrs ago0x2e1422fb346526d23ef133d681c3f12099621ae0  IN   0x188f79b0a8edc10ad53285c47c3feaa0d2716e830 Ether0.000643552
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Bondage
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.24;

// File: contracts/lib/ownership/Ownable.sol

contract Ownable {
    address public owner;
    event OwnershipTransferred(address indexed previousOwner,address indexed newOwner);

    /// @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
    constructor() public { owner = msg.sender; }

    /// @dev Throws if called by any contract other than latest designated caller
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /// @dev Allows the current owner to transfer control of the contract to a newOwner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(address newOwner) public onlyOwner {
       require(newOwner != address(0));
       emit OwnershipTransferred(owner, newOwner);
       owner = newOwner;
    }
}

// File: contracts/lib/lifecycle/Destructible.sol

contract Destructible is Ownable {
	function selfDestruct() public onlyOwner {
		selfdestruct(owner);
	}
}

// File: contracts/lib/ownership/ZapCoordinatorInterface.sol

contract ZapCoordinatorInterface is Ownable {
	function addImmutableContract(string contractName, address newAddress) external;
	function updateContract(string contractName, address newAddress) external;
	function getContractName(uint index) public view returns (string);
	function getContract(string contractName) public view returns (address);
	function updateAllDependencies() external;
}

// File: contracts/lib/ownership/Upgradable.sol

pragma solidity ^0.4.24;

contract Upgradable {

	address coordinatorAddr;
	ZapCoordinatorInterface coordinator;

	constructor(address c) public{
		coordinatorAddr = c;
		coordinator = ZapCoordinatorInterface(c);
	}

    function updateDependencies() external coordinatorOnly {
       _updateDependencies();
    }

    function _updateDependencies() internal;

    modifier coordinatorOnly() {
    	require(msg.sender == coordinatorAddr, "Error: Coordinator Only Function");
    	_;
    }
}

// File: contracts/lib/ERC20.sol

contract ERC20Basic {
    uint256 public totalSupply;
    function balanceOf(address who) public constant returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
    string public name;
    string public symbol;
    uint256 public decimals;
    function allowance(address owner, address spender) public constant returns (uint256);
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address spender, uint256 value) public returns (bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/platform/database/DatabaseInterface.sol

contract DatabaseInterface is Ownable {
	function setStorageContract(address _storageContract, bool _allowed) public;
	/*** Bytes32 ***/
	function getBytes32(bytes32 key) external view returns(bytes32);
	function setBytes32(bytes32 key, bytes32 value) external;
	/*** Number **/
	function getNumber(bytes32 key) external view returns(uint256);
	function setNumber(bytes32 key, uint256 value) external;
	/*** Bytes ***/
	function getBytes(bytes32 key) external view returns(bytes);
	function setBytes(bytes32 key, bytes value) external;
	/*** String ***/
	function getString(bytes32 key) external view returns(string);
	function setString(bytes32 key, string value) external;
	/*** Bytes Array ***/
	function getBytesArray(bytes32 key) external view returns (bytes32[]);
	function getBytesArrayIndex(bytes32 key, uint256 index) external view returns (bytes32);
	function getBytesArrayLength(bytes32 key) external view returns (uint256);
	function pushBytesArray(bytes32 key, bytes32 value) external;
	function setBytesArrayIndex(bytes32 key, uint256 index, bytes32 value) external;
	function setBytesArray(bytes32 key, bytes32[] value) external;
	/*** Int Array ***/
	function getIntArray(bytes32 key) external view returns (int[]);
	function getIntArrayIndex(bytes32 key, uint256 index) external view returns (int);
	function getIntArrayLength(bytes32 key) external view returns (uint256);
	function pushIntArray(bytes32 key, int value) external;
	function setIntArrayIndex(bytes32 key, uint256 index, int value) external;
	function setIntArray(bytes32 key, int[] value) external;
	/*** Address Array ***/
	function getAddressArray(bytes32 key) external view returns (address[]);
	function getAddressArrayIndex(bytes32 key, uint256 index) external view returns (address);
	function getAddressArrayLength(bytes32 key) external view returns (uint256);
	function pushAddressArray(bytes32 key, address value) external;
	function setAddressArrayIndex(bytes32 key, uint256 index, address value) external;
	function setAddressArray(bytes32 key, address[] value) external;
}

// File: contracts/platform/bondage/currentCost/CurrentCostInterface.sol

contract CurrentCostInterface {    
    function _currentCostOfDot(address, bytes32, uint256) public view returns (uint256);
    function _dotLimit(address, bytes32) public view returns (uint256);
    function _costOfNDots(address, bytes32, uint256, uint256) public view returns (uint256);
}

// File: contracts/platform/bondage/BondageInterface.sol

contract BondageInterface {
    function bond(address, bytes32, uint256) external returns(uint256);
    function unbond(address, bytes32, uint256) external returns (uint256);
    function delegateBond(address, address, bytes32, uint256) external returns(uint256);
    function escrowDots(address, address, bytes32, uint256) external returns (bool);
    function releaseDots(address, address, bytes32, uint256) external returns (bool);
    function returnDots(address, address, bytes32, uint256) external returns (bool success);
    function calcZapForDots(address, bytes32, uint256) external view returns (uint256);
    function currentCostOfDot(address, bytes32, uint256) public view returns (uint256);
    function getDotsIssued(address, bytes32) public view returns (uint256);
    function getBoundDots(address, address, bytes32) public view returns (uint256);
    function getZapBound(address, bytes32) public view returns (uint256);
    function dotLimit( address, bytes32) public view returns (uint256);
}

// File: contracts/platform/bondage/Bondage.sol

contract Bondage is Destructible, BondageInterface, Upgradable {
    DatabaseInterface public db;

    event Bound(address indexed holder, address indexed oracle, bytes32 indexed endpoint, uint256 numZap, uint256 numDots);
    event Unbound(address indexed holder, address indexed oracle, bytes32 indexed endpoint, uint256 numDots);
    event Escrowed(address indexed holder, address indexed oracle, bytes32 indexed endpoint, uint256 numDots);
    event Released(address indexed holder, address indexed oracle, bytes32 indexed endpoint, uint256 numDots);
    event Returned(address indexed holder, address indexed oracle, bytes32 indexed endpoint, uint256 numDots);


    CurrentCostInterface currentCost;
    ERC20 token;

    address public arbiterAddress;
    address public dispatchAddress;

    // For restricting dot escrow/transfer method calls to Dispatch and Arbiter
    modifier operatorOnly() {
        require(msg.sender == arbiterAddress || msg.sender == dispatchAddress, "Error: Operator Only Error");
        _;
    }

    /// @dev Initialize Storage, Token, anc CurrentCost Contracts
    constructor(address c) Upgradable(c) public {
        _updateDependencies();
    }

    function _updateDependencies() internal {
        address databaseAddress = coordinator.getContract("DATABASE");
        db = DatabaseInterface(databaseAddress);
        arbiterAddress = coordinator.getContract("ARBITER");
        dispatchAddress = coordinator.getContract("DISPATCH");
        token = ERC20(coordinator.getContract("ZAP_TOKEN")); 
        currentCost = CurrentCostInterface(coordinator.getContract("CURRENT_COST")); 
    }

    /// @dev will bond to an oracle
    /// @return total ZAP bound to oracle
    function bond(address oracleAddress, bytes32 endpoint, uint256 numDots) external returns (uint256 bound) {
        bound = _bond(msg.sender, oracleAddress, endpoint, numDots);
        emit Bound(msg.sender, oracleAddress, endpoint, bound, numDots);
    }

    /// @return total ZAP unbound from oracle
    function unbond(address oracleAddress, bytes32 endpoint, uint256 numDots) external returns (uint256 unbound) {
        unbound = _unbond(msg.sender, oracleAddress, endpoint, numDots);
        emit Unbound(msg.sender, oracleAddress, endpoint, numDots);
    }        

    /// @dev will bond to an oracle on behalf of some holder
    /// @return total ZAP bound to oracle
    function delegateBond(address holderAddress, address oracleAddress, bytes32 endpoint, uint256 numDots) external returns (uint256 boundZap) {
        boundZap = _bond(holderAddress, oracleAddress, endpoint, numDots);
        emit Bound(holderAddress, oracleAddress, endpoint, boundZap, numDots);
    }

    /// @dev Move numDots dots from provider-requester to bondage according to 
    /// data-provider address, holder address, and endpoint specifier (ala 'smart_contract')
    /// Called only by Dispatch or Arbiter Contracts
    function escrowDots(        
        address holderAddress,
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots
    )
        external
        operatorOnly        
        returns (bool success)
    {
        uint256 boundDots = getBoundDots(holderAddress, oracleAddress, endpoint);
        require(numDots <= boundDots, "Error: Not enough dots bound");
        updateEscrow(holderAddress, oracleAddress, endpoint, numDots, "add");
        updateBondValue(holderAddress, oracleAddress, endpoint, numDots, "sub");
        emit Escrowed(holderAddress, oracleAddress, endpoint, numDots);
        return true;
    }

    /// @dev Transfer N dots from fromAddress to destAddress. 
    /// Called only by Disptach or Arbiter Contracts
    /// In smart contract endpoint, occurs per satisfied request. 
    /// In socket endpoint called on termination of subscription.
    function releaseDots(
        address holderAddress,
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots
    )
        external
        operatorOnly 
        returns (bool success)
    {
        uint256 numEscrowed = getNumEscrow(holderAddress, oracleAddress, endpoint);
        require(numDots <= numEscrowed, "Error: Not enough dots Escrowed");
        updateEscrow(holderAddress, oracleAddress, endpoint, numDots, "sub");
        updateBondValue(oracleAddress, oracleAddress, endpoint, numDots, "add");
        emit Released(holderAddress, oracleAddress, endpoint, numDots);
        return true;
    }

    /// @dev Transfer N dots from destAddress to fromAddress. 
    /// Called only by Disptach or Arbiter Contracts
    /// In smart contract endpoint, occurs per satisfied request. 
    /// In socket endpoint called on termination of subscription.
    function returnDots(
        address holderAddress,
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots
    )
        external
        operatorOnly 
        returns (bool success)
    {
        uint256 numEscrowed = getNumEscrow(holderAddress, oracleAddress, endpoint);
        require(numDots <= numEscrowed, "Error: Not enough dots escrowed");
        updateEscrow(holderAddress, oracleAddress, endpoint, numDots, "sub");
        updateBondValue(holderAddress, oracleAddress, endpoint, numDots, "add");
        emit Returned(holderAddress, oracleAddress, endpoint, numDots);
        return true;
    }


    /// @dev Calculate quantity of tokens required for specified amount of dots
    /// for endpoint defined by endpoint and data provider defined by oracleAddress
    function calcZapForDots(
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots       
    ) 
        external
        view
        returns (uint256 numZap)
    {
        uint256 issued = getDotsIssued(oracleAddress, endpoint);
        return currentCost._costOfNDots(oracleAddress, endpoint, issued + 1, numDots - 1);
    }

    /// @dev Get the current cost of a dot.
    /// @param endpoint specifier
    /// @param oracleAddress data-provider
    /// @param totalBound current number of dots
    function currentCostOfDot(
        address oracleAddress,
        bytes32 endpoint,
        uint256 totalBound
    )
        public
        view
        returns (uint256 cost)
    {
        return currentCost._currentCostOfDot(oracleAddress, endpoint, totalBound);
    }

    /// @dev Get issuance limit of dots 
    /// @param endpoint specifier
    /// @param oracleAddress data-provider
    function dotLimit(
        address oracleAddress,
        bytes32 endpoint
    )
        public
        view
        returns (uint256 limit)
    {
        return currentCost._dotLimit(oracleAddress, endpoint);
    }


    /// @return total ZAP held by contract
    function getZapBound(address oracleAddress, bytes32 endpoint) public view returns (uint256) {
        return getNumZap(oracleAddress, endpoint);
    }

    function _bond(
        address holderAddress,
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots        
    )
        private
        returns (uint256) 
    {   

        address broker = getEndpointBroker(oracleAddress, endpoint);

        if( broker != address(0)){
            require(msg.sender == broker, "Error: Only the broker has access to this function");
        }

        // This also checks if oracle is registered w/an initialized curve
        uint256 issued = getDotsIssued(oracleAddress, endpoint);
        require(issued + numDots <= dotLimit(oracleAddress, endpoint), "Error: Dot limit exceeded");
        
        uint256 numZap = currentCost._costOfNDots(oracleAddress, endpoint, issued + 1, numDots - 1);

        // User must have approved contract to transfer working ZAP
        require(token.transferFrom(msg.sender, this, numZap), "Error: User must have approved contract to transfer ZAP");

        if (!isProviderInitialized(holderAddress, oracleAddress)) {            
            setProviderInitialized(holderAddress, oracleAddress);
            addHolderOracle(holderAddress, oracleAddress);
        }

        updateBondValue(holderAddress, oracleAddress, endpoint, numDots, "add");        
        updateTotalIssued(oracleAddress, endpoint, numDots, "add");
        updateTotalBound(oracleAddress, endpoint, numZap, "add");

        return numZap;
    }

    function _unbond(        
        address holderAddress,
        address oracleAddress,
        bytes32 endpoint,
        uint256 numDots
    )
        private
        returns (uint256 numZap)
    {
        address broker = getEndpointBroker(oracleAddress, endpoint);

        if( broker != address(0)){
            require(msg.sender == broker, "Error: Only the broker has access to this function");
        }

        // Make sure the user has enough to bond with some additional sanity checks
        uint256 amountBound = getBoundDots(holderAddress, oracleAddress, endpoint);
        require(amountBound >= numDots, "Error: Not enough dots bonded");
        require(numDots > 0, "Error: Dots to unbond must be more than zero");

        // Get the value of the dots
        uint256 issued = getDotsIssued(oracleAddress, endpoint);
        numZap = currentCost._costOfNDots(oracleAddress, endpoint, issued + 1 - numDots, numDots - 1);

        // Update the storage values
        updateTotalBound(oracleAddress, endpoint, numZap, "sub");
        updateTotalIssued(oracleAddress, endpoint, numDots, "sub");
        updateBondValue(holderAddress, oracleAddress, endpoint, numDots, "sub");

        // Do the transfer
        require(token.transfer(msg.sender, numZap), "Error: Transfer failed");

        return numZap;
    }

    /**** Get Methods ****/
    function isProviderInitialized(address holderAddress, address oracleAddress) public view returns (bool) {
        return db.getNumber(keccak256(abi.encodePacked('holders', holderAddress, 'initialized', oracleAddress))) == 1 ? true : false;
    }

    /// @dev get broker address for endpoint
    function getEndpointBroker(address oracleAddress, bytes32 endpoint) public view returns (address) {
        return address(db.getBytes32(keccak256(abi.encodePacked('oracles', oracleAddress, endpoint, 'broker'))));
    }

    function getNumEscrow(address holderAddress, address oracleAddress, bytes32 endpoint) public view returns (uint256) {
        return db.getNumber(keccak256(abi.encodePacked('escrow', holderAddress, oracleAddress, endpoint)));
    }

    function getNumZap(address oracleAddress, bytes32 endpoint) public view returns (uint256) {
        return db.getNumber(keccak256(abi.encodePacked('totalBound', oracleAddress, endpoint)));
    }

    function getDotsIssued(address oracleAddress, bytes32 endpoint) public view returns (uint256) {
        return db.getNumber(keccak256(abi.encodePacked('totalIssued', oracleAddress, endpoint)));
    }

    function getBoundDots(address holderAddress, address oracleAddress, bytes32 endpoint) public view returns (uint256) {
        return db.getNumber(keccak256(abi.encodePacked('holders', holderAddress, 'bonds', oracleAddress, endpoint)));
    }

    function getIndexSize(address holderAddress) external view returns (uint256) {
        return db.getAddressArrayLength(keccak256(abi.encodePacked('holders', holderAddress, 'oracleList')));
    }

    function getOracleAddress(address holderAddress, uint256 index) public view returns (address) {
        return db.getAddressArrayIndex(keccak256(abi.encodePacked('holders', holderAddress, 'oracleList')), index);
    }

    /**** Set Methods ****/
    function addHolderOracle(address holderAddress, address oracleAddress) internal {
        db.pushAddressArray(keccak256(abi.encodePacked('holders', holderAddress, 'oracleList')), oracleAddress);
    }

    function setProviderInitialized(address holderAddress, address oracleAddress) internal {
        db.setNumber(keccak256(abi.encodePacked('holders', holderAddress, 'initialized', oracleAddress)), 1);
    }

    function updateEscrow(address holderAddress, address oracleAddress, bytes32 endpoint, uint256 numDots, bytes32 op) internal {
        uint256 newEscrow = db.getNumber(keccak256(abi.encodePacked('escrow', holderAddress, oracleAddress, endpoint)));

        if ( op == "sub" ) {
            newEscrow -= numDots;
        } else if ( op == "add" ) {
            newEscrow += numDots;
        }
        else {
            revert();
        }

        db.setNumber(keccak256(abi.encodePacked('escrow', holderAddress, oracleAddress, endpoint)), newEscrow);
    }

    function updateBondValue(address holderAddress, address oracleAddress, bytes32 endpoint, uint256 numDots, bytes32 op) internal {
        uint256 bondValue = db.getNumber(keccak256(abi.encodePacked('holders', holderAddress, 'bonds', oracleAddress, endpoint)));
        
        if (op == "sub") {
            bondValue -= numDots;
        } else if (op == "add") {
            bondValue += numDots;
        }

        db.setNumber(keccak256(abi.encodePacked('holders', holderAddress, 'bonds', oracleAddress, endpoint)), bondValue);
    }

    function updateTotalBound(address oracleAddress, bytes32 endpoint, uint256 numZap, bytes32 op) internal {
        uint256 totalBound = db.getNumber(keccak256(abi.encodePacked('totalBound', oracleAddress, endpoint)));
        
        if (op == "sub"){
            totalBound -= numZap;
        } else if (op == "add") {
            totalBound += numZap;
        }
        else {
            revert();
        }
        
        db.setNumber(keccak256(abi.encodePacked('totalBound', oracleAddress, endpoint)), totalBound);
    }

    function updateTotalIssued(address oracleAddress, bytes32 endpoint, uint256 numDots, bytes32 op) internal {
        uint256 totalIssued = db.getNumber(keccak256(abi.encodePacked('totalIssued', oracleAddress, endpoint)));
        
        if (op == "sub"){
            totalIssued -= numDots;
        } else if (op == "add") {
            totalIssued += numDots;
        }
        else {
            revert();
        }
    
        db.setNumber(keccak256(abi.encodePacked('totalIssued', oracleAddress, endpoint)), totalIssued);
    }
}

    /*************************************** STORAGE ****************************************
    * 'holders', holderAddress, 'initialized', oracleAddress => {uint256} 1 -> provider-subscriber initialized, 0 -> not initialized 
    * 'holders', holderAddress, 'bonds', oracleAddress, endpoint => {uint256} number of dots this address has bound to this endpoint
    * 'oracles', oracleAddress, endpoint, 'broker' => {address} address of endpoint broker, 0 if none
    * 'escrow', holderAddress, oracleAddress, endpoint => {uint256} amount of Zap that have been escrowed
    * 'totalBound', oracleAddress, endpoint => {uint256} amount of Zap bound to this endpoint
    * 'totalIssued', oracleAddress, endpoint => {uint256} number of dots issued by this endpoint
    * 'holders', holderAddress, 'oracleList' => {address[]} array of oracle addresses associated with this holder
    ****************************************************************************************/

Contract ABI
[{"constant":true,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"}],"name":"isProviderInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"escrowDots","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getZapBound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getDotsIssued","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"dotLimit","outputs":[{"name":"limit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"releaseDots","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getNumZap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"db","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"arbiterAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getNumEscrow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holderAddress","type":"address"},{"name":"index","type":"uint256"}],"name":"getOracleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"bond","outputs":[{"name":"bound","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getEndpointBroker","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"selfDestruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"unbond","outputs":[{"name":"unbound","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"calcZapForDots","outputs":[{"name":"numZap","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"}],"name":"getBoundDots","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"delegateBond","outputs":[{"name":"boundZap","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"totalBound","type":"uint256"}],"name":"currentCostOfDot","outputs":[{"name":"cost","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"holderAddress","type":"address"}],"name":"getIndexSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dispatchAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"holderAddress","type":"address"},{"name":"oracleAddress","type":"address"},{"name":"endpoint","type":"bytes32"},{"name":"numDots","type":"uint256"}],"name":"returnDots","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"c","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"oracle","type":"address"},{"indexed":true,"name":"endpoint","type":"bytes32"},{"indexed":false,"name":"numZap","type":"uint256"},{"indexed":false,"name":"numDots","type":"uint256"}],"name":"Bound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"oracle","type":"address"},{"indexed":true,"name":"endpoint","type":"bytes32"},{"indexed":false,"name":"numDots","type":"uint256"}],"name":"Unbound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"oracle","type":"address"},{"indexed":true,"name":"endpoint","type":"bytes32"},{"indexed":false,"name":"numDots","type":"uint256"}],"name":"Escrowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"oracle","type":"address"},{"indexed":true,"name":"endpoint","type":"bytes32"},{"indexed":false,"name":"numDots","type":"uint256"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":true,"name":"oracle","type":"address"},{"indexed":true,"name":"endpoint","type":"bytes32"},{"indexed":false,"name":"numDots","type":"uint256"}],"name":"Returned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code
60806040523480156200001157600080fd5b50604051602080620059208339810180604052810190808051906020019092919050505080336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200011262000119640100000000026401000000009004565b5062000761565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260088152602001807f4441544142415345000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015620001de57600080fd5b505af1158015620001f3573d6000803e3d6000fd5b505050506040513d60208110156200020a57600080fd5b8101908080519060200190929190505050905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260078152602001807f4152424954455200000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156200032157600080fd5b505af115801562000336573d6000803e3d6000fd5b505050506040513d60208110156200034d57600080fd5b8101908080519060200190929190505050600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260088152602001807f4449535041544348000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156200046157600080fd5b505af115801562000476573d6000803e3d6000fd5b505050506040513d60208110156200048d57600080fd5b8101908080519060200190929190505050600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260098152602001807f5a41505f544f4b454e0000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015620005a157600080fd5b505af1158015620005b6573d6000803e3d6000fd5b505050506040513d6020811015620005cd57600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600c8152602001807f43555252454e545f434f53540000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015620006e157600080fd5b505af1158015620006f6573d6000803e3d6000fd5b505050506040513d60208110156200070d57600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6151af80620007716000396000f300608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063036459c01461014e57806316614c98146101c957806319ec825c1461025c5780631d7b5e22146102c157806321cb4ec7146103265780633b058aa71461038b5780633fe796851461041e5780634d655aff146104835780635d799306146104da5780636e5ecdff146105315780637a68c23a146105485780638758eb69146105cd5780638da5cb5b1461065a57806399275cc7146106b15780639c39c8ea146107205780639cb8a26a146107b1578063a06fe775146107c8578063b6105f1514610837578063bbee3694146108a6578063ca01fed51461092b578063cbdaf0c8146109ba578063ceae8b3214610a29578063f2fde38b14610a80578063f528c94914610ac3578063f6dfac2514610b1a575b600080fd5b34801561015a57600080fd5b506101af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bad565b604051808215151515815260200191505060405180910390f35b3480156101d557600080fd5b50610242600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050610deb565b604051808215151515815260200191505060405180910390f35b34801561026857600080fd5b506102ab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611061565b6040518082815260200191505060405180910390f35b3480156102cd57600080fd5b50610310600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611075565b6040518082815260200191505060405180910390f35b34801561033257600080fd5b50610375600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611247565b6040518082815260200191505060405180910390f35b34801561039757600080fd5b50610404600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050611359565b604051808215151515815260200191505060405180910390f35b34801561042a57600080fd5b5061046d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506115cf565b6040518082815260200191505060405180910390f35b34801561048f57600080fd5b506104986117a1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104e657600080fd5b506104ef6117c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053d57600080fd5b506105466117ed565b005b34801561055457600080fd5b506105b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506118bc565b6040518082815260200191505060405180910390f35b3480156105d957600080fd5b50610618600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ad2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066657600080fd5b5061066f611cc4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106bd57600080fd5b5061070a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050611ce9565b6040518082815260200191505060405180910390f35b34801561072c57600080fd5b5061076f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050611d72565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bd57600080fd5b506107c6611f70565b005b3480156107d457600080fd5b50610821600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050612005565b6040518082815260200191505060405180910390f35b34801561084357600080fd5b50610890600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050612086565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506121bd565b6040518082815260200191505060405180910390f35b34801561093757600080fd5b506109a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001909291905050506123fb565b6040518082815260200191505060405180910390f35b3480156109c657600080fd5b50610a13600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050612485565b6040518082815260200191505060405180910390f35b348015610a3557600080fd5b50610a6a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125a0565b6040518082815260200191505060405180910390f35b348015610a8c57600080fd5b50610ac1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612789565b005b348015610acf57600080fd5b50610ad86128de565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2657600080fd5b50610b93600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190929190505050612904565b604051808215151515815260200191505060405180910390f35b60006001600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d64858560405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f696e697469616c697a6564000000000000000000000000000000000000000000815250600b018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b602083101515610d125780518252602082019150602081019050602083039250610ced565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b810190808051906020019092919050505014610de0576000610de3565b60015b905092915050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e975750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4572726f723a204f70657261746f72204f6e6c79204572726f7200000000000081525060200191505060405180910390fd5b610f168686866121bd565b9050808311151515610f90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4572726f723a204e6f7420656e6f75676820646f747320626f756e640000000081525060200191505060405180910390fd5b610fbd868686867f6164640000000000000000000000000000000000000000000000000000000000612b7a565b610fea868686867f7375620000000000000000000000000000000000000000000000000000000000612ff3565b83600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2738c9bd1693cadc7b4fabefd6467b42f901650c7401bad1076dbc984f4b15d0866040518082815260200191505060405180910390a46001915050949350505050565b600061106d83836115cf565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d64848460405160200180807f746f74616c497373756564000000000000000000000000000000000000000000815250600b018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561117d5780518252602082019150602081019050602083039250611158565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561120457600080fd5b505af1158015611218573d6000803e3d6000fd5b505050506040513d602081101561122e57600080fd5b8101908080519060200190929190505050905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1ca69c484846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826000191660001916815260200192505050602060405180830381600087803b15801561131657600080fd5b505af115801561132a573d6000803e3d6000fd5b505050506040513d602081101561134057600080fd5b8101908080519060200190929190505050905092915050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114055750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4572726f723a204f70657261746f72204f6e6c79204572726f7200000000000081525060200191505060405180910390fd5b6114848686866118bc565b90508083111515156114fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4572726f723a204e6f7420656e6f75676820646f747320457363726f7765640081525060200191505060405180910390fd5b61152b868686867f7375620000000000000000000000000000000000000000000000000000000000612b7a565b611558858686867f6164640000000000000000000000000000000000000000000000000000000000612ff3565b83600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2afa253d0464d87b039f71a6964ed5c028a3a3c68048d909fbee4b1610756e79866040518082815260200191505060405180910390a46001915050949350505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d64848460405160200180807f746f74616c426f756e6400000000000000000000000000000000000000000000815250600a018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156116d757805182526020820191506020810190506020830392506116b2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506040513d602081101561178857600080fd5b8101908080519060200190929190505050905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4572726f723a20436f6f7264696e61746f72204f6e6c792046756e6374696f6e81525060200191505060405180910390fd5b6118ba6134b3565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d6485858560405160200180807f657363726f7700000000000000000000000000000000000000000000000000008152506006018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515611a0757805182526020820191506020810190506020830392506119e2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611a8e57600080fd5b505af1158015611aa2573d6000803e3d6000fd5b505050506040513d6020811015611ab857600080fd5b810190808051906020019092919050505090509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e16e93408460405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f6f7261636c654c69737400000000000000000000000000000000000000000000815250600a019150506040516020818303038152906040526040518082805190602001908083835b602083101515611bf25780518252602082019150602081019050602083039250611bcd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015611c8157600080fd5b505af1158015611c95573d6000803e3d6000fd5b505050506040513d6020811015611cab57600080fd5b8101908080519060200190929190505050905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf733858585613aec565b905082600019168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe8fd3c22d82ce4b5a0addda04f808686ef3d592b33cadc8435ce17dc106ced6c8486604051808381526020018281526020019250505060405180910390a49392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6ed563e848460405160200180807f6f7261636c6573000000000000000000000000000000000000000000000000008152506007018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001807f62726f6b65720000000000000000000000000000000000000000000000000000815250600601925050506040516020818303038152906040526040518082805190602001908083835b602083101515611ea25780518252602082019150602081019050602083039250611e7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b505050506040513d6020811015611f5357600080fd5b810190808051906020019092919050505060019004905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fcb57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600061201333858585614033565b905082600019168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f60b9c649cd4eb0d02bcdc2d69fd86d12022c0bf7ff8aa61e5ac0bc121fc3cac0856040518082815260200191505060405180910390a49392505050565b6000806120938585611075565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663197d66d5868660018501600188036040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460001916600019168152602001838152602001828152602001945050505050602060405180830381600087803b15801561217857600080fd5b505af115801561218c573d6000803e3d6000fd5b505050506040513d60208110156121a257600080fd5b81019080805190602001909291905050509150509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d6485858560405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f626f6e64730000000000000000000000000000000000000000000000000000008152506005018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612330578051825260208201915060208101905060208303925061230b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156123b757600080fd5b505af11580156123cb573d6000803e3d6000fd5b505050506040513d60208110156123e157600080fd5b810190808051906020019092919050505090509392505050565b600061240985858585613aec565b905082600019168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fe8fd3c22d82ce4b5a0addda04f808686ef3d592b33cadc8435ce17dc106ced6c8486604051808381526020018281526020019250505060405180910390a4949350505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ecca1fad8585856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183600019166000191681526020018281526020019350505050602060405180830381600087803b15801561255c57600080fd5b505af1158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b810190808051906020019092919050505090509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632fc94ba68360405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f6f7261636c654c69737400000000000000000000000000000000000000000000815250600a019150506040516020818303038152906040526040518082805190602001908083835b6020831015156126c0578051825260208201915060208101905060208303925061269b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561274757600080fd5b505af115801561275b573d6000803e3d6000fd5b505050506040513d602081101561277157600080fd5b81019080805190602001909291905050509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561282057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129b05750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4572726f723a204f70657261746f72204f6e6c79204572726f7200000000000081525060200191505060405180910390fd5b612a2f8686866118bc565b9050808311151515612aa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4572726f723a204e6f7420656e6f75676820646f747320657363726f7765640081525060200191505060405180910390fd5b612ad6868686867f7375620000000000000000000000000000000000000000000000000000000000612b7a565b612b03868686867f6164640000000000000000000000000000000000000000000000000000000000612ff3565b83600019168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8ce63c9cd119808de8fe6e9629b631f115a967dd2cfd274bca3f6b9486745bf7866040518082815260200191505060405180910390a46001915050949350505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d6487878760405160200180807f657363726f7700000000000000000000000000000000000000000000000000008152506006018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612cc55780518252602082019150602081019050602083039250612ca0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015612d4c57600080fd5b505af1158015612d60573d6000803e3d6000fd5b505050506040513d6020811015612d7657600080fd5b810190808051906020019092919050505090507f737562000000000000000000000000000000000000000000000000000000000082600019161415612dbf578281039050612dfb565b7f616464000000000000000000000000000000000000000000000000000000000082600019161415612df5578281019050612dfa565b600080fd5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354c552db87878760405160200180807f657363726f7700000000000000000000000000000000000000000000000000008152506006018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083101515612f445780518252602082019150602081019050602083039250612f1f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015612fd357600080fd5b505af1158015612fe7573d6000803e3d6000fd5b50505050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d6487878760405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f626f6e64730000000000000000000000000000000000000000000000000000008152506005018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156131665780518252602082019150602081019050602083039250613141565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156131ed57600080fd5b505af1158015613201573d6000803e3d6000fd5b505050506040513d602081101561321757600080fd5b810190808051906020019092919050505090507f737562000000000000000000000000000000000000000000000000000000000082600019161415613260578281039050613293565b7f6164640000000000000000000000000000000000000000000000000000000000826000191614156132925782810190505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354c552db87878760405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f626f6e64730000000000000000000000000000000000000000000000000000008152506005018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401826000191660001916815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310151561340457805182526020820191506020810190506020830392506133df565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561349357600080fd5b505af11580156134a7573d6000803e3d6000fd5b50505050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260088152602001807f4441544142415345000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561357757600080fd5b505af115801561358b573d6000803e3d6000fd5b505050506040513d60208110156135a157600080fd5b8101908080519060200190929190505050905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260078152602001807f4152424954455200000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156136b757600080fd5b505af11580156136cb573d6000803e3d6000fd5b505050506040513d60208110156136e157600080fd5b8101908080519060200190929190505050600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260088152602001807f4449535041544348000000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b1580156137f457600080fd5b505af1158015613808573d6000803e3d6000fd5b505050506040513d602081101561381e57600080fd5b8101908080519060200190929190505050600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825260098152602001807f5a41505f544f4b454e0000000000000000000000000000000000000000000000815250602001915050602060405180830381600087803b15801561393157600080fd5b505af1158015613945573d6000803e3d6000fd5b505050506040513d602081101561395b57600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663358177736040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018281038252600c8152602001807f43555252454e545f434f53540000000000000000000000000000000000000000815250602001915050602060405180830381600087803b158015613a6e57600080fd5b505af1158015613a82573d6000803e3d6000fd5b505050506040513d6020811015613a9857600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080613afc8787611d72565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515613bfe578273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613bfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4572726f723a204f6e6c79207468652062726f6b65722068617320616363657381526020017f7320746f20746869732066756e6374696f6e000000000000000000000000000081525060400191505060405180910390fd5b5b613c088787611075565b9150613c148787611247565b85830111151515613c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4572726f723a20446f74206c696d69742065786365656465640000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663197d66d588886001860160018a036040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460001916600019168152602001838152602001828152602001945050505050602060405180830381600087803b158015613d7057600080fd5b505af1158015613d84573d6000803e3d6000fd5b505050506040513d6020811015613d9a57600080fd5b81019080805190602001909291905050509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ea657600080fd5b505af1158015613eba573d6000803e3d6000fd5b505050506040513d6020811015613ed057600080fd5b81019080805190602001909291905050501515613f7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001807f4572726f723a2055736572206d757374206861766520617070726f766564206381526020017f6f6e747261637420746f207472616e73666572205a415000000000000000000081525060400191505060405180910390fd5b613f858888610bad565b1515613fa057613f95888861459d565b613f9f88886147aa565b5b613fcd888888887f6164640000000000000000000000000000000000000000000000000000000000612ff3565b613ff98787877f616464000000000000000000000000000000000000000000000000000000000061499f565b6140258787837f6164640000000000000000000000000000000000000000000000000000000000614d91565b809350505050949350505050565b6000806000806140438787611d72565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515614145578273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4572726f723a204f6e6c79207468652062726f6b65722068617320616363657381526020017f7320746f20746869732066756e6374696f6e000000000000000000000000000081525060400191505060405180910390fd5b5b6141508888886121bd565b91508482101515156141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4572726f723a204e6f7420656e6f75676820646f747320626f6e64656400000081525060200191505060405180910390fd5b600085111515614268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4572726f723a20446f747320746f20756e626f6e64206d757374206265206d6f81526020017f7265207468616e207a65726f000000000000000000000000000000000000000081525060400191505060405180910390fd5b6142728787611075565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663197d66d5888888600186010360018a036040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460001916600019168152602001838152602001828152602001945050505050602060405180830381600087803b15801561435957600080fd5b505af115801561436d573d6000803e3d6000fd5b505050506040513d602081101561438357600080fd5b810190808051906020019092919050505093506143c28787867f7375620000000000000000000000000000000000000000000000000000000000614d91565b6143ee8787877f737562000000000000000000000000000000000000000000000000000000000061499f565b61441b888888887f7375620000000000000000000000000000000000000000000000000000000000612ff3565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156144e057600080fd5b505af11580156144f4573d6000803e3d6000fd5b505050506040513d602081101561450a57600080fd5b8101908080519060200190929190505050151561458f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4572726f723a205472616e73666572206661696c65640000000000000000000081525060200191505060405180910390fd5b839350505050949350505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354c552db838360405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f696e697469616c697a6564000000000000000000000000000000000000000000815250600b018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831015156146fe57805182526020820191506020810190506020830392506146d9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060016040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561478e57600080fd5b505af11580156147a2573d6000803e3d6000fd5b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd151d1e8360405160200180807f686f6c64657273000000000000000000000000000000000000000000000000008152506007018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401807f6f7261636c654c69737400000000000000000000000000000000000000000000815250600a019150506040516020818303038152906040526040518082805190602001908083835b6020831015156148c857805182526020820191506020810190506020830392506148a3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561498357600080fd5b505af1158015614997573d6000803e3d6000fd5b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d64868660405160200180807f746f74616c497373756564000000000000000000000000000000000000000000815250600b018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515614aa75780518252602082019150602081019050602083039250614a82565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614b2e57600080fd5b505af1158015614b42573d6000803e3d6000fd5b505050506040513d6020811015614b5857600080fd5b810190808051906020019092919050505090507f737562000000000000000000000000000000000000000000000000000000000082600019161415614ba1578281039050614bdd565b7f616464000000000000000000000000000000000000000000000000000000000082600019161415614bd7578281019050614bdc565b600080fd5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354c552db868660405160200180807f746f74616c497373756564000000000000000000000000000000000000000000815250600b018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515614ce35780518252602082019150602081019050602083039250614cbe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015614d7257600080fd5b505af1158015614d86573d6000803e3d6000fd5b505050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ecb0d64868660405160200180807f746f74616c426f756e6400000000000000000000000000000000000000000000815250600a018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515614e995780518252602082019150602081019050602083039250614e74565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614f2057600080fd5b505af1158015614f34573d6000803e3d6000fd5b505050506040513d6020811015614f4a57600080fd5b810190808051906020019092919050505090507f737562000000000000000000000000000000000000000000000000000000000082600019161415614f93578281039050614fcf565b7f616464000000000000000000000000000000000000000000000000000000000082600019161415614fc9578281019050614fce565b600080fd5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354c552db868660405160200180807f746f74616c426f756e6400000000000000000000000000000000000000000000815250600a018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156150d557805182526020820191506020810190506020830392506150b0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561516457600080fd5b505af1158015615178573d6000803e3d6000fd5b5050505050505050505600a165627a7a72305820b93702e84f4615a49bbd0d5daeffdf8358273acc7dd8ff627d67f43d552a1e8d0029000000000000000000000000b007eca49763f31edff95623ed6c23c8c1924a16


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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b007eca49763f31edff95623ed6c23c8c1924a16


   Swarm Source:
bzzr://b93702e84f4615a49bbd0d5daeffdf8358273acc7dd8ff627d67f43d552a1e8d
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.