Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intrinsic gas too low #540

Closed
ninabreznik opened this issue Jun 8, 2019 · 15 comments
Closed

Intrinsic gas too low #540

ninabreznik opened this issue Jun 8, 2019 · 15 comments
Labels
discussion Questions, feedback and general information.

Comments

@ninabreznik
Copy link

ninabreznik commented Jun 8, 2019

Hi,

I am trying to deploy this contract

pragma solidity 0.4.24;

import "https://raw.githubusercontent.com/oraclize/ethereum-examples/master/solidity/gas-price-oracle/contracts/imported/strings.sol";
import "https://raw.githubusercontent.com/oraclize/ethereum-examples/master/solidity/gas-price-oracle/contracts/imported/usingOraclize.sol";

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
     * @notice Multiplies two numbers, throws on overflow.
     *
     */
    function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (_a == 0) return 0;
        c = _a * _b;
        require(c / _a == _b, 'SafeMath multiplication threw!');
        return c;
    }
    /**
     * @notice Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     *
     */
    function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
        require(_b <= _a, 'SafeMath subtraction threw!');
        return _a - _b;
    }
}

contract GasPriceOracle is usingOraclize {
    using strings for *;
    using SafeMath for *;

    uint    constant public interval = 6;
    uint    constant public gasLimit = 187000;
    uint    constant public gasLimitRec = 200000;
    uint    constant public conversionFactor = 100000000;
    string  constant public queryString = "json(https://ethgasstation.info/json/ethgasAPI.json).[safeLow,average,fast]";

    GasStationPrices public gasStationPrices;

    struct GasStationPrices { // 100 mwei prices inherited from ethgasstation
        uint64 safeLow;       // gas price * 100 mwei for a transaction time < 30 minutes
        uint64 standard;      // gas price * 100 mwei for a transaction time <  5 minutes
        uint64 fast;          // gas price * 100 mwei for a transaction time <  2 minutes
        uint64 timeUpdated;   // timestamp of when the current prices were last updated.
    }

    mapping(bytes32 => QueryIDs) public queryIDs;

    struct QueryIDs {
        bool isManual;
        bool isProcessed;
        bool isRevival;
        uint64 dueAt;
        uint128 gasPriceUsed;
    }

    bytes32 public nextRecursiveQuery;

    event LogInsufficientBalance();
    event LogGasPricesUpdated(uint64 safeLowPrice, uint64 standardPrice, uint64 fastPrice, bytes32 queryID, bytes IPFSMultihash);
    /**
     * @notice  Constructor. Sets the Oraclize proof type, and
     *          initializes the gas price struct with dummy
     *          values. This standardises the gas cost of the
     *          __callback function.
     *
     * @param   _gasPrice   Desired gas price for first recursive
     *                      Oraclize call.
     *
     */
    constructor(uint _gasPrice) public payable {
        oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
        nextRecursiveQuery = keccak256('Oraclize Gas Price Oracle');
        gasStationPrices   = GasStationPrices({
            safeLow:     uint64(1234),
            standard:    uint64(1234),
            fast:        uint64(1234),
            timeUpdated: uint64(1)
        });
        recursivelyUpdateGasPrices(0, _gasPrice);
    }
    /**
     * @notice  Allows anyone to update the gas prices stored in
     *          this contract at any time. Caller must provide
     *          enough ETH to cover the cost of the Oraclize query.
     *          If the recursive queries have gone stale the query
     *          made here will automatically begin the recursion
     *          anew if the fast gas price in the gas prices struct
     *          is sufficient. The function refunds any excess ETH
     *          above the price of the Oraclize query to the sender.
     *
     */
    function updateGasPrices() public payable {
        updateGasPrices(0);
    }
    /**
     * @notice  Allows anyone to update the gas prices stored in
     *          this contract at any time, with a delay of their
     *          choosing. Caller must provide enough ETH to cover
     *          the cost of the Oraclize query. Any extra ETH over
     *          the price of the query is refunded. If the recursive
     *          queries have gone stale, any query sent with a 0
     *          delay may become eligible to restart the recursion
     *          if the fast gas price in the gas prices struct is
     *          sufficient. This function refunds any excess ETH
     *          above the price of the Oraclize query to the sender.
     *
     * @param   _delay  The time the callback of the query is desired.
     *                  Can either be a UTC timestamp, or an offset
     *                  in seconds from now. Delays cannot exceed a
     *                  maximum of 60 days.
     *
     */
    function updateGasPrices(uint _delay) public payable {
        updateGasPrices(_delay, getFastPrice());
    }
    /**
     * @notice  Allows anyone to update the gas prices stored in
     *          this contract at any time, with a delay of their
     *          choosing and a gas price of their choosing. Caller
     *          must provide enough ETH to cover the cost of the
     *          Oraclize query. If the recursive queries have gone
     *          stale, any query sent with a 0 delay and a gas price
     *          higher than the gas price used in the previous
     *          recursive query will restart the recursive queries.
     *          This function returns any exccess ETH above the price
     *          of the Oraclize query to the sender.
     *
     * @param   _delay  The time the callback of the query is desired.
     *                  Can either be a UTC timestamp, or an offset
     *                  in seconds from now. Delays cannot exceed a
     *                  maximum of 60 days.
     *
     * @param   _gasPrice   Sets a custom gas price desired for the
     *                      query, in Wei.
     *
     */
    function updateGasPrices(uint _delay, uint _gasPrice) public payable {
        if (
            _delay == 0 &&
            isRecursiveStale() &&
            _gasPrice >= queryIDs[nextRecursiveQuery].gasPriceUsed + (1 * 10 ** 9) &&
            getQueryPrice(gasLimitRec, _gasPrice) <= msg.value
        ) {
            bool successful = recursivelyUpdateGasPrices(_delay, _gasPrice); // query usable to restart stale recursive ones
            if (successful) {
              queryIDs[nextRecursiveQuery].isRevival = true;
              msg.sender.transfer(msg.value.sub(getQueryPrice(gasLimitRec)));
            }
        } else {
            oraclize_setCustomGasPrice(_gasPrice);
            bytes32 qID = oraclize_query(
              _delay,
              "computation",
              [
                "json(QmdKK319Veha83h6AYgQqhx9YRsJ9MJE7y33oCXyZ4MqHE).[safeLow,average,fast]",
                "GET",
                "https://ethgasstation.info/json/ethgasAPI.json"
              ],
              gasLimit
            );
            queryIDs[qID].isManual = true;
            queryIDs[qID].dueAt = _delay > now
                ? uint64(_delay)
                : uint64(now + _delay);
            msg.sender.transfer(msg.value.sub(getQueryPrice(gasLimit)));
        }
    }
    /**
     * @notice  Allows the contract to automatically update the gas prices
     *          stored herein. Contract balance must be sufficient to
     *          cover the cost of the Oraclize query.
     *
     * @param   _delay  The time the callback of the query is desired.
     *                  Can either be a UTC timestamp, or an offset
     *                  in seconds from now. Delays cannot exceed a
     *                  maximum of 60 days.
     *
     * @param   _gasPrice   Sets a custom gas price desired for the
     *                      query, in Wei.
     *
     * @return  bool    Whether the function call was successful or not.
     *
     */
    function recursivelyUpdateGasPrices(uint _delay, uint _gasPrice) private returns (bool) {
        oraclize_setCustomGasPrice(_gasPrice);
        uint cost = getQueryPrice(gasLimitRec);
        if (address(this).balance < cost && msg.value < cost) {
          emit LogInsufficientBalance();
          return;
        }
        bytes32 qID = oraclize_query(
          _delay,
          "computation",
          [
            "json(QmdKK319Veha83h6AYgQqhx9YRsJ9MJE7y33oCXyZ4MqHE).[safeLow,average,fast]",
            "GET",
            "https://ethgasstation.info/json/ethgasAPI.json"
          ],
          gasLimitRec
        );
        nextRecursiveQuery = qID;
        queryIDs[qID].dueAt = uint64(now + _delay);
        queryIDs[qID].gasPriceUsed = uint128(_gasPrice);
        return true;
    }
    /**
     * @notice  Allows both users and this contract to discover the
     *          price of the Oraclize query before making it, in
     *          order to supply the call with the correct amount of ETH.
     *
     * @param   _limit  Gas limit required for the __callback function.
     *
     * @return  uint    The cost of the Oraclize query in Wei.
     *
     */
    function getQueryPrice(uint _limit) public view returns (uint) {
        return oraclize_getPrice("computation", _limit);
    }
    /**
     * @notice  Allows both users and this contract to discover the
     *          price of the Oraclize query before making it, in
     *          order to supply the call with the correct amount of ETH.
     *
     * @param   _limit  Gas limit required for the __callback function.
     *
     * @param   _price  Custom gas price for the Oraclize query.
     *
     * @return  uint    The cost of the Oraclize query in Wei.
     *
     */
    function getQueryPrice(uint _limit, uint _price) public view returns (uint) {
        oraclize_setCustomGasPrice(_price);
        return oraclize_getPrice("computation", _limit);
    }
    /**
     * @notice  Checks whether the currently pending recursive Oraclize
     *          query is past due by greater than 45 minutes or not.
     *          Should recursion have lapsed, zero delay user queries
     *          are used to restart the recursion. Such cases are considered
     *          instantly stale allowing subsequent, higher gas priced
     *          queries to take priority in restarting recursion.
     *
     * @return  bool    Whether or not the current recursive query is
     *                  past due or replacable.
     *
     */
    function isRecursiveStale() public view returns (bool) {
        return now > queryIDs[nextRecursiveQuery].dueAt + 2700 ||
               queryIDs[nextRecursiveQuery].isRevival;
    }
    /**
     * @notice  Oraclize callback function. Only callable by the
     *          Oraclize address(es). Parses API call result and
     *          stores it into struct. If query was made manually,
     *          no further recursive queries are triggered.
     *
     * @param   _myid   Bytes32 ID of the Oraclize query.
     *
     * @param   _result String of the result of the Oraclize query.
     *
     * @param   _proof  Bytes of the proof of the Oraclize query.
     *
     */
    function __callback(bytes32 _myid, string _result, bytes _proof) public {
        require(msg.sender == oraclize_cbAddress(), 'Caller is not Oraclize address!');
        require(!queryIDs[_myid].isProcessed, 'Query has already been processed!');
        if (queryIDs[_myid].dueAt > gasStationPrices.timeUpdated)
            processUpdate(_myid, _result, _proof);
        queryIDs[_myid].isProcessed = true;
        if (!queryIDs[_myid].isManual && _myid == nextRecursiveQuery)
            recursivelyUpdateGasPrices(getDelayToNextInterval(), getFastPrice());
    }
    /**
     * @notice  Function processes the result string of the Oraclize
     *          query. Splices string into its constituent parts and
     *          parses the gas prices into the desired uints.
     *
     *
     * @dev     The vars are returning struct types from the strings
     *          library. They give deprecation warnings but we have
     *          no other option. Note also the mutable nature of
     *          split().
     *
     * @param   _myid   Bytes32 ID of the Oraclize query.
     *
     * @param   _result String of the result of the Oraclize query.
     *
     * @param   _proof  Bytes of the proof of the Oraclize query.
     *
     */
    function processUpdate(bytes32 _myid, string _result, bytes _proof) private {
        var delim = ",".toSlice();
        var stringToParse = _result.toSlice();
        uint64 l = uint64(parseInt(stringToParse.split(delim).toString()));
        uint64 s = uint64(parseInt(stringToParse.split(delim).toString()));
        uint64 f = uint64(parseInt(stringToParse.split(delim).toString()));
        gasStationPrices = GasStationPrices({
            safeLow: l,
            standard: s,
            fast: f,
            timeUpdated: queryIDs[_myid].dueAt
        });
        emit LogGasPricesUpdated(l, s, f, _myid, _proof);
    }
    /**
     * @notice  Get the safe low gas price in Wei.
     *
     * @return  uint
     *
     */
    function getSafeLowPrice() public view returns (uint) {
        return gasStationPrices.safeLow.mul(conversionFactor);
    }
    /**
     * @notice  Get the standard gas price in Wei.
     *
     * @return  uint
     *
     */
    function getStandardPrice() public view returns (uint) {
        return gasStationPrices.standard.mul(conversionFactor);
    }
    /**
     * @notice  Get the fast gas price in Wei.
     *
     * @return  uint
     *
     */
    function getFastPrice() public view returns (uint) {
        return gasStationPrices.fast.mul(conversionFactor);
    }
    /**
     * @notice  Returns the time the gas prices were last updated,
     *          as a UTC timestamp.
     *
     */
    function getLastUpdated() public view returns (uint) {
        return gasStationPrices.timeUpdated;
    }
    /**
     * @notice  Returns all three gas prices, ordered slowest to
     *          fastest, plus the time at which they were updated.
     *
     * @return  uint    The safe low gas price in Wei.
     *          uint    The standard gas price in Wei.
     *          uint    The fast gas price in Wei.
     *          uint    Timestamp of last update
     *
     */
    function getGasPrices() public view returns (uint, uint, uint, uint) {
        return (
            getSafeLowPrice(),
            getStandardPrice(),
            getFastPrice(),
            getLastUpdated()
        );
    }
    /**
     * @notice  Calculates the delay in seconds to the next occuring
     *          sixth hour. If delay is fewer than 600 seconds, the
     *          delay until the subsequent 6th hour mark is used instead.
     *
     * @return  uint    Time in seconds to next sixth hour.
     *
     */
    function getDelayToNextInterval() public view returns (uint) {
        uint secs         = now % 60;
        uint mins         = (now / 60) % 60;
        uint hour         = (now / 60 / 60) % 24;
        uint secsElapsed  = ((hour * 60 * 60) + (mins * 60) + secs);
        uint secsInPeriod = (((hour / interval) + 1) * interval) * 60 * 60;
        uint remaining    = secsInPeriod - secsElapsed;
        return remaining > 600
            ? remaining
            : remaining + (interval * 60 * 60);
    }
    /**
     * @notice  Fallback function allowing ETH addition by
     *          anyone.
     *
     */
     function () public payable {}
}

I am using these ethers.js calls

let factory = await new ethers.ContractFactory(abi, bytecode, signer)`

if (allArgs.overrides) { instance = await factory.deploy(args, overrides) }
else { transaction = await factory.deploy(args) }

let deployed = await contract.deployed()

overrides.gasLimit = 750000
overrides.value = (i get it from the form, same way as when I send value through payable functions and it works there)

When I try to deploy, I get this error in Metamask. I tried with higher gasLimit but didn't help

ALERT: [ethjs-rpc] rpc error with payload {

"id":9630236586439,

"jsonrpc":"2.0",

"params":["0xf94651820396843b9aca00830b71b080848c30ac00b945f96080604052604051602080620045d9833981018060405281019080805192506200005691507f110000...648d70898ea558fd7a4423b6a51"],

"method":"eth_sendRawTransaction"
} 

{"code":-32000,"message":"intrinsic gas too low"}
@ricmoo
Copy link
Member

ricmoo commented Jun 10, 2019

I’ll look into this shortly. Intrinsic gas too low usually means the gasLimit is under 21000, but I’ll poke at this once I am at my computer...

@ricmoo ricmoo added discussion Questions, feedback and general information. investigate Under investigation and may be a bug. and removed discussion Questions, feedback and general information. labels Jun 10, 2019
@ricmoo
Copy link
Member

ricmoo commented Jun 10, 2019

@ninabreznik Oh... Can you re-post, but this time with the entire RPC call response? Or did the node insert the "..." in the middle of it? I need the whole thing to debug...

@ninabreznik
Copy link
Author

ninabreznik commented Jun 10, 2019

Thanks, @ricmoo :) Here's the full thing...

MetaMask - RPC Error: Error: Error: [ethjs-rpc] rpc error with payload {"id":9929837472338,"jsonrpc":"2.0","params":["0xf9464d82059b843b9aca00830b71b08001b945f96080604052604051602080620045d9833981018060405281019080805192506200005691507f1100000000000000000000000000000000000000000000000000000000000000905064010000000062000192810204565b6040517f4f7261636c697a6520476173205072696365204f7261636c650000000000000081526019016040518091039020600755608060405190810160409081526104d280835260208301819052908201526001606082015260058151815467ffffffffffffffff19166001604060020a0391909116178155602082015181546001604060020a03919091166801000000000000000002604060020a608060020a0319909116178155604082015181546001604060020a039190911670010000000000000000000000000000000002608060020a60c060020a0319909116178155606082015181546001604060020a0391909116780100000000000000000000000000000000000000000000000002600160c060020a03909116179055506200018a600082640100000000620003dd810204565b505062001b7f565b600054600160a060020a03161580620001c85750600054620001c690600160a060020a031664010000000062000663810204565b155b15620001e557620001e3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200023f57600080fd5b505af115801562000254573d6000803e3d6000fd5b505050506040513d60208110156200026b57600080fd5b810190808051600154600160a060020a0390811691161492506200033c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620002e657600080fd5b505af1158015620002fb573d6000803e3d6000fd5b505050506040513d60208110156200031257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663688dcfd7826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281527fff000000000000000000000000000000000000000000000000000000000000009091166004820152602401600060405180830381600087803b158015620003c057600080fd5b505af1158015620003d5573d6000803e3d6000fd5b505050505b50565b60008080620003f58464010000000062000682810204565b6200040c62030d406401000000006200088f810204565b91503031821180156200041e57508134105b1562000456577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a16200065b565b620005d1856040805190810160405280600b81526020017f636f6d7075746174696f6e000000000000000000000000000000000000000000815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d40640100000000620008d9810204565b600781905560008181526006602052909150428601906040902080546001604060020a03929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546001608060020a03929092166b01000000000000000000000002605860020a60d860020a0319909216919091179055600192505b505092915050565b3b90565b60006200067c64010000000062000b3a810204565b92915050565b600054600160a060020a03161580620006b85750600054620006b690600160a060020a031664010000000062000663810204565b155b15620006d557620006d3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200072f57600080fd5b505af115801562000744573d6000803e3d6000fd5b505050506040513d60208110156200075b57600080fd5b810190808051600154600160a060020a0390811691161492506200082c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b505050506040513d60208110156200080257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e4826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b158015620003c057600080fd5b60006200067c60408051908101604052600b81527f636f6d7075746174696f6e00000000000000000000000000000000000000000060208201528364010000000062000ee3810204565b60008054606090600160a060020a031615806200091357506000546200091190600160a060020a031664010000000062000663810204565b155b1562000930576200092e600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200098a57600080fd5b505af11580156200099f573d6000803e3d6000fd5b505050506040513d6020811015620009b657600080fd5b810190808051600154600160a060020a03908116911614925062000a8791505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000a3157600080fd5b505af115801562000a46573d6000803e3d6000fd5b505050506040513d602081101562000a5d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600360405190808252806020026020018201604052801562000abe57816020015b606081526020019060019003908162000aa85790505b50905083518160008151811062000ad157fe5b6020908102909101015283600160200201518160018151811062000af157fe5b602090810291909101015260408401518160028151811062000b0f57fe5b6020908102909101015262000b30868683866401000000006200119c810204565b9695505050505050565b60008062000b65731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062000663810204565b111562000be25760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905562000bd960408051908101604052600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015264010000000062001615810204565b50600162000ee0565b600062000c0c73c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062000663810204565b111562000c805760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905562000bd960408051908101604052600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000caa73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e64010000000062000663810204565b111562000d1e5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905562000bd960408051908101604052600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000d4873146500cfd35b22e4a392fe0adc06de1a1368ed4864010000000062000663810204565b111562000dbc5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905562000bd960408051908101604052600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000de6736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47564010000000062000663810204565b111562000e1c575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475179055600162000ee0565b600062000e467320e12a1f859b3feae5fb2a0a32c18f5a65555bbf64010000000062000663810204565b111562000e7c575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf179055600162000ee0565b600062000ea67351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062000663810204565b111562000edc575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa179055600162000ee0565b5060005b90565b60008054600160a060020a0316158062000f1a575060005462000f1890600160a060020a031664010000000062000663810204565b155b1562000f375762000f35600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000f9157600080fd5b505af115801562000fa6573d6000803e3d6000fd5b505050506040513d602081101562000fbd57600080fd5b810190808051600154600160a060020a0390811691161492506200108e91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200103857600080fd5b505af11580156200104d573d6000803e3d6000fd5b505050506040513d60208110156200106457600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101562001111578082015183820152602001620010f7565b50505050905090810190601f1680156200113f5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050506040513d60208110156200118c57600080fd5b8101908080519695505050505050565b600080548190606090600160a060020a03161580620011d85750600054620011d690600160a060020a031664010000000062000663810204565b155b15620011f557620011f3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200124f57600080fd5b505af115801562001264573d6000803e3d6000fd5b505050506040513d60208110156200127b57600080fd5b810190808051600154600160a060020a0390811691161492506200134c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620012f657600080fd5b505af11580156200130b573d6000803e3d6000fd5b505050506040513d60208110156200132257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015620013cf578082015183820152602001620013b5565b50505050905090810190601f168015620013fd5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200141e57600080fd5b505af115801562001433573d6000803e3d6000fd5b505050506040513d60208110156200144a57600080fd5b8101908080519450505050670de0b6b3a76400003a8502018211156200147457600092506200160b565b62001488856401000000006200162e810204565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200151b57808201518382015260200162001501565b50505050905090810190601f168015620015495780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200158157808201518382015260200162001567565b50505050905090810190601f168015620015af5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015620015d257600080fd5b505af1158015620015e7573d6000803e3d6000fd5b50505050506040513d6020811015620015ff57600080fd5b81019080805195505050505b5050949350505050565b60028180516200162a92916020019062001ac5565b5050565b60606200163a62001b4a565b60006200164f640100000000620016ef810204565b6200166b8261040064010000000062002666620016fb82021704565b6200168482640100000000620026946200172a82021704565b5060005b8351811015620016cc57620016c3848281518110620016a357fe5b9060200190602002015183906401000000006200269f6200174082021704565b60010162001688565b620016e582640100000000620026bc6200177782021704565b8151949350505050565b60405180590338823950565b8060208106156200170f5760208106602003015b60208301819052604051928390526000835290910160405250565b620003da8160046401000000006200178d810204565b620017588260038351640100000000620017b0810204565b620017728282640100000000620027da6200191a82021704565b505050565b620003da8160076401000000006200178d810204565b6200162a82601f602060ff8516021764010000000062002877620019d282021704565b60178111620017e357620017dd8360ff848116602002168317640100000000620019d28102620028771704565b62001772565b60ff811162001832576200180f836018602060ff8616021764010000000062002877620019d282021704565b6200182b83826001640100000000620028b062001a1782021704565b5062001772565b61ffff81116200187b576200185f836019602060ff8616021764010000000062002877620019d282021704565b6200182b83826002640100000000620028b062001a1782021704565b63ffffffff8111620018c657620018aa83601a602060ff8616021764010000000062002877620019d282021704565b6200182b83826004640100000000620028b062001a1782021704565b6001604060020a0381116200177257620018f883601b602060ff8616021764010000000062002877620019d282021704565b6200191483826008640100000000620028b062001a1782021704565b50505050565b6200192462001b4a565b600080600080866020015187515187510111156200196d576200196d876200195b8960200151895164010000000062001a7c810204565b60020264010000000062001a95810204565b8551915086518051602081830101955087510190526020860192505b60208210620019ae578251845260208401935060208301925060208203915062001989565b6001826020036101000a039050801983511681855116179093525093949350505050565b8160200151825151600101111562001a005762001a0082836020015160020264010000000062001a95810204565b815180516020818301018381535060010190525050565b62001a2162001b4a565b600084602001518551518401111562001a525762001a52856200195b87602001518664010000000062001a7c810204565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b60008183111562001a8f5750816200067c565b50919050565b60608251905062001ab08383640100000000620016fb810204565b6200191483826401000000006200191a810204565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001b0857805160ff191683800117855562001b38565b8280016001018555821562001b38579182015b8281111562001b3857825182559160200191906001019062001b1b565b5062001b4692915062001b62565b5090565b60408051908101604052606081526000602082015290565b62000ee091905b8082111562001b46576000815560010162001b69565b612a4a8062001b8f6000396000f30060806040526004361061010e5763ffffffff60e060020a6000350416631381bc9f811461011057806315b0e0f41461013d57806318f452b8146101485780631ed4a070146101d457806324629bb4146101fd57806327dc297e1461026857806332ef9237146102c357806338bbfa50146103035780633bc0117e1461039e57806341533118146103b35780635c3ad4cd146103bb578063602631ef146103d0578063655e4fd3146103e557806378121dd4146103fa5780637f1e22701461040f578063885e8e68146104245780638d88874014610432578063947a36fb14610447578063a98c49041461045c578063b9ae507b14610471578063c4f315ce146104bd578063f68016b7146104d5575b005b34801561011c57600080fd5b5061012b6004356024356104ea565b60405190815260200160405180910390f35b61010e600435610529565b34801561015457600080fd5b5061015d61053d565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610199578082015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506101e96105c3565b604051901515815260200160405180910390f35b34801561020957600080fd5b50610215600435610617565b6040519415158552921515602085015290151560408085019190915267ffffffffffffffff90911660608401526fffffffffffffffffffffffffffffffff909116608083015260a0909101905180910390f35b34801561027457600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497506106759650505050505050565b3480156102cf57600080fd5b506102d86106b3565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561030f57600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497969560208082019650903587018082019550359350839250601f8301819004810201905060405190810160405281815292919060208401838380828437509497506106e79650505050505050565b3480156103aa57600080fd5b5061012b610890565b61010e610897565b3480156103c757600080fd5b5061012b6108a3565b3480156103dc57600080fd5b5061012b6108cd565b3480156103f157600080fd5b5061012b6108d5565b34801561040657600080fd5b5061012b610907565b34801561041b57600080fd5b5061012b61091e565b61010e600435602435610942565b34801561043e57600080fd5b5061012b610c63565b34801561045357600080fd5b5061012b610c69565b34801561046857600080fd5b5061012b610c6e565b34801561047d57600080fd5b50610486610cd6565b60405167ffffffffffffffff9485168152928416602084015290831660408084019190915292166060820152608001905180910390f35b3480156104c957600080fd5b5061012b600435610d17565b3480156104e157600080fd5b5061012b610d44565b60006104f582610d4b565b61052060408051908101604052600b81526000805160206129ff833981519152602082015284610f01565b90505b92915050565b61053a816105356108d5565b610942565b50565b608060405190810160405280604b81526020017f6a736f6e2868747470733a2f2f65746867617373746174696f6e2e696e666f2f81526020017f6a736f6e2f6574686761734150492e6a736f6e292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081565b600754600090815260066020526040812054610a8c67ffffffffffffffff630100000090920482160116421180610611575060075460009081526006602052604090205462010000900460ff165b90505b90565b60066020528060005260406000205460ff80821692506101008204811691620100008104909116906301000000810467ffffffffffffffff16906b01000000000000000000000090046fffffffffffffffffffffffffffffffff1685565b6106af82826000604051818152601f19601f83011681016020016040529080156106a9578160200160208202803883390190505b506106e7565b5050565b6000806000806106c161091e565b6106c96108a3565b6106d16108d5565b6106d9610907565b935093509350935090919293565b6106ef61114a565b600160a060020a0316331461074d5760405160e560020a62461bcd02815260206004820152601f60248201527f43616c6c6572206973206e6f74204f7261636c697a6520616464726573732100604482015260640160405180910390fd5b600083815260066020526040902054610100900460ff16156107de5760405160e560020a62461bcd02815260206004820152602160248201527f51756572792068617320616c7265616479206265656e2070726f63657373656460448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b6005546000848152600660205260c060020a90910467ffffffffffffffff169060409020546301000000900467ffffffffffffffff1611156108255761082583838361131c565b600083815260066020526001906040902080549115156101000261ff001990921691909117905560008381526006602052604090205460ff1615801561086c575060075483145b1561088b5761088961087c610c6e565b6108846108d5565b6115c9565b505b505050565b62030d4081565b6108a16000610529565b565b6005546000906106119068010000000000000000900467ffffffffffffffff166305f5e100611835565b6305f5e10081565b60055460009061061190700100000000000000000000000000000000900467ffffffffffffffff166305f5e100611835565b60055460c060020a900467ffffffffffffffff1690565b6005546000906106119067ffffffffffffffff166305f5e10063ffffffff61183516565b6000808315801561095657506109566105c3565b801561099d5750600754600090815260066020526040902054633b9aca006fffffffffffffffffffffffffffffffff6b010000000000000000000000909204821601168310155b80156109b55750346109b262030d40856104ea565b11155b15610a4a576109c484846115c9565b91508115610a455760075460009081526006602052600190604090208054911515620100000262ff000019909216919091179055336108fc610a18610a0b62030d40610d17565b349063ffffffff6118ab16565b9081150290604051600060405180830381858888f19350505050158015610a43573d6000803e3d6000fd5b505b610889565b610a5383610d4b565b610bb1846040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e0000000000000000000000000000000000009082015290526202da7861190a565b6000818152600660205290915060019060409020805460ff1916911515919091179055428411610be357834201610be5565b835b6000828152600660205260409020805467ffffffffffffffff929092166301000000026affffffffffffffff00000019909216919091179055336108fc610c31610a0b6202da78610d17565b9081150290604051600060405180830381858888f19350505050158015610c5c573d6000803e3d6000fd5b5050505050565b60075481565b600681565b6000808080808080603c42069550603c804204811515610c8a57fe5b0694506018603c4281900404069350505050603c8202610e10820201830161546060016006840401028181036102588111610cc9576154608101610ccb565b805b965050505050505090565b60055467ffffffffffffffff80821691680100000000000000008104821691700100000000000000000000000000000000820481169160c060020a90041684565b600061052360408051908101604052600b81526000805160206129ff833981519152602082015283610f01565b6202da7881565b600054600160a060020a03161580610d755750600054610d7390600160a060020a0316611b0a565b155b15610d8657610d846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b505050506040513d6020811015610df057600080fd5b810190808051600154600160a060020a039081169116149250610ea491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050506040513d6020811015610e7a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e48260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b158015610eed57600080fd5b505af1158015610c5c573d6000803e3d6000fd5b60008054600160a060020a03161580610f2c5750600054610f2a90600160a060020a0316611b0a565b155b15610f3d57610f3b6000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b810190808051600154600160a060020a03908116911614925061105b91505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156110c35780820151838201526020016110ab565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050506040513d602081101561113a57600080fd5b8101908080519695505050505050565b60008054600160a060020a03161580611175575060005461117390600160a060020a0316611b0a565b155b15611186576111846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b505050506040513d60208110156111f057600080fd5b810190808051600154600160a060020a0390811691161492506112a491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050506040513d602081101561130e57600080fd5b810190808051935050505090565b611324612937565b61132c612937565b600080600061136d60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611b18565b945061137887611b18565b935061139a611395611390868863ffffffff611b4016565b611b5a565b611ba7565b92506113b2611395611390868863ffffffff611b4016565b91506113ca611395611390868863ffffffff611b4016565b90506080604051908101604090815267ffffffffffffffff80861683528481166020808501919091529084168284015260008b8152600690915260608301919020546301000000900467ffffffffffffffff16905260058151815467ffffffffffffffff191667ffffffffffffffff919091161781556020820151815467ffffffffffffffff9190911668010000000000000000026fffffffffffffffff0000000000000000199091161781556040820151815467ffffffffffffffff919091167001000000000000000000000000000000000277ffffffffffffffff00000000000000000000000000000000199091161781556060820151815467ffffffffffffffff9190911660c060020a0277ffffffffffffffffffffffffffffffffffffffffffffffff909116179055507f2bc130e6a38e491143f3cc8d7df3f729c2772cf1953bb7e5a3329e51fb3add9c8383838b8a60405167ffffffffffffffff80871682528581166020830152841660408201526060810183905260a06080820181815290820183818151815260200191508051906020019080838360005b83811015611581578082015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008060006115d784610d4b565b6115e362030d40610d17565b91503031821180156115f457508134105b1561162a577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a161182d565b611788856040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d4061190a565b6007819055600081815260066020529091504286019060409020805467ffffffffffffffff929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546fffffffffffffffffffffffffffffffff929092166b010000000000000000000000027affffffffffffffffffffffffffffffff000000000000000000000019909216919091179055600192505b505092915050565b600082151561184657506000610523565b5081810281838281151561185657fe5b04146105235760405160e560020a62461bcd02815260206004820152601e60248201527f536166654d617468206d756c7469706c69636174696f6e207468726577210000604482015260640160405180910390fd5b6000828211156119045760405160e560020a62461bcd02815260206004820152601b60248201527f536166654d617468207375627472616374696f6e207468726577210000000000604482015260640160405180910390fd5b50900390565b60008054606090600160a060020a03161580611938575060005461193690600160a060020a0316611b0a565b155b15611949576119476000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b505050506040513d60208110156119b357600080fd5b810190808051600154600160a060020a039081169116149250611a6791505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b6003604051908082528060200260200182016040528015611a9c57816020015b6060815260200190600190039081611a875790505b509050835181600081518110611aae57fe5b60209081029091010152836001602002015181600181518110611acd57fe5b6020908102919091010152604084015181600281518110611aea57fe5b60209081029091010152611b0086868386611bb4565b9695505050505050565b3b90565b6000610523611f8e565b611b20612937565b602082016040805190810160405280845181526020019190915292915050565b611b48612937565b611b538383836122b2565b5092915050565b60608060008351604051818152601f19601f8301168101602001604052908015611b8e578160200160208202803883390190505b509150602082019050611b538185602001518651612321565b6000610523826000612366565b600080548190606090600160a060020a03161580611be45750600054611be290600160a060020a0316611b0a565b155b15611bf557611bf36000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050506040513d6020811015611c5f57600080fd5b810190808051600154600160a060020a039081169116149250611d1391505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b505050506040513d6020811015611ce957600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611d7b578082015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b505050506040513d6020811015611df257600080fd5b8101908080519450505050670de0b6b3a76400003a850201821115611e1a5760009250611f84565b611e2385612512565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff1660e060020a028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611e9b578082015183820152602001611e83565b50505050905090810190601f168015611ec85780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015611efe578082015183820152602001611ee6565b50505050905090810190601f168015611f2b5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015611f4d57600080fd5b505af1158015611f61573d6000803e3d6000fd5b50505050506040513d6020811015611f7857600080fd5b81019080805195505050505b5050949350505050565b600080611fae731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611b0a565b111561201e5760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905561201660408051908101604052600b81527f6574685f6d61696e6e65740000000000000000000000000000000000000000006020820152612589565b506001610614565b600061203d73c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611b0a565b11156120a55760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905561201660408051908101604052600c81527f6574685f726f707374656e3300000000000000000000000000000000000000006020820152612589565b60006120c473b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611b0a565b111561212c5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905561201660408051908101604052600981527f6574685f6b6f76616e00000000000000000000000000000000000000000000006020820152612589565b600061214b73146500cfd35b22e4a392fe0adc06de1a1368ed48611b0a565b11156121b35760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905561201660408051908101604052600b81527f6574685f72696e6b6562790000000000000000000000000000000000000000006020820152612589565b60006121d2736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611b0a565b1115612206575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610614565b60006122257320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611b0a565b1115612259575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610614565b60006122787351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611b0a565b11156122ac575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610614565b50600090565b6122ba612937565b60006122d2855186602001518651876020015161259c565b905084602001516020808501919091528501518103835284518560200151018114156123015760008552612318565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106123475782518452602084019350602083019250602082039150612324565b6001826020036101000a03905080198351168185511617909352505050565b6000828180805b83518110156124f5577f30000000000000000000000000000000000000000000000000000000000000008482815181106123a357fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015801561244457507f390000000000000000000000000000000000000000000000000000000000000084828151811061240d57fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b1561249a5781156124635785151561245b576124f5565b600019909501945b600a83029250603084828151811061247757fe5b016020015160f860020a900460f860020a0260f860020a900403830192506124ed565b8381815181106124a657fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916602e60f860020a0214156124ed57600191505b60010161236d565b60008611156125075785600a0a830292505b509095945050505050565b606061251c61294e565b600061252661265a565b61253282610400612666565b61253b82612694565b5060005b83518110156125765761256e84828151811061255757fe5b90602001906020020151839063ffffffff61269f16565b60010161253f565b61257f826126bc565b8151949350505050565b60028180516106af929160200190612966565b600083818080808080808c8b116126445760208b1161260c57600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514612604578388106125f3578c8c01985061264a565b6001909701968588511692506125db565b87985061264a565b8a8a209150600096505b8a8d038711612644578a88209050818114156126345787985061264a565b6001978801979690960195612616565b8c8c0198505b5050505050505050949350505050565b60405180590338823950565b8060208106156126795760208106602003015b60208301819052604051928390526000835290910160405250565b61053a8160046126c3565b6126ac82600383516126dc565b61088b828263ffffffff6127da16565b61053a8160075b6106af82601f602060ff8516021763ffffffff61287716565b601781116126fd576126f88360ff848116602002168317612877565b61088b565b60ff81116127365761271e836018602060ff8616021763ffffffff61287716565b6127308382600163ffffffff6128b016565b5061088b565b61ffff811161276a57612758836019602060ff8616021763ffffffff61287716565b6127308382600263ffffffff6128b016565b63ffffffff81116127a05761278e83601a602060ff8616021763ffffffff61287716565b6127308382600463ffffffff6128b016565b67ffffffffffffffff811161088b576127c883601b602060ff8616021763ffffffff61287716565b6108898382600863ffffffff6128b016565b6127e261294e565b60008060008086602001518751518751011115612814576128148761280c89602001518951612906565b60020261291d565b8551915086518051602081830101955087510190526020860192505b602082106128535782518452602084019350602083019250602082039150612830565b6001826020036101000a039050801983511681855116179093525093949350505050565b816020015182515160010111156128995761289982836020015160020261291d565b815180516020818301018381535060010190525050565b6128b861294e565b60008460200151855151840111156128dc576128dc8561280c876020015186612906565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b600081831115612917575081610523565b50919050565b60608251905061292d8383612666565b61088983826127da565b604080519081016040526000808252602082015290565b60408051908101604052606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129a757805160ff19168380011785556129d4565b828001600101855582156129d4579182015b828111156129d45782518255916020019190600101906129b9565b506129e09291506129e4565b5090565b61061491905b808211156129e057600081556001016129ea5600636f6d7075746174696f6e000000000000000000000000000000000000000000a165627a7a7230582074735fd76fa6bb4deb9ecc3563268c1cbc6dffbdfdd734f3596ddbfb60898552002900000000000000000000000000000000000000000000000000000000000000012ca07790e33e6d07537a82283ac21e5d7efaca7c367f2e9c9f9d02805eeedff27deba0295b1d1f3180f43072d6ed76cce8bf5c05198571178383bf453b2ea9de538639"],"method":"eth_sendRawTransaction"} {"code":-32000,"message":"intrinsic gas too low"}

@ricmoo
Copy link
Member

ricmoo commented Jun 10, 2019

Ok... I think I see the problem. :)

You are setting a gas limit of 750,000. But a transaction costs 21,000 + (68 * data.length) (ish; 4 gas for a zero, 68 for non-zero, most things are non-zero)... Your data is at around 65kb, so you need at least around 2.2 million gas, just to submit your transaction to the network, that isn't including any execution. So, you need a lot more gas. You might start hitting the transaction gas limit. You may need to cut down the size of your contract, or split it up... It looks like you have the optimizer disabled too; enabling it may help save you a bit too.

So, basically, the "intrinsic gas too low" means your gas limit is not even enough to ask the network to consider your transaction. :)

@ricmoo ricmoo changed the title Deploy with payable constructor Intrinsic gas too low Jun 10, 2019
@ricmoo ricmoo added discussion Questions, feedback and general information. and removed investigate Under investigation and may be a bug. labels Jun 10, 2019
@ninabreznik
Copy link
Author

Thanks, @ricmoo for a quick response. I am working on an editor and am just testing it out with real world contracts.This one is from Open Zeppelin.

I tried to deploy it also using Remix, where gasLimit is set to 3 000 000 and it works, but when I set overrides.gasLimit to 3 000 000 in my code, I get this error

Error: transaction failed (transactionHash="0x1065519062a062b3c55dc76344a383bfb9d5d4df8044c42c84de6d0bbd17c982", transaction={"hash":"0x1065519062a062b3c55dc76344a383bfb9d5d4df8044c42c84de6d0bbd17c982","blockHash":null,"blockNumber":null,"transactionIndex":0,"confirmations":0,"from":"0x16A3d2582419DBfB48d1f6EA2D64Bc416c63A5d6","gasPrice":{"_hex":"0x3b9aca00"},"gasLimit":{"_hex":"0x2dc6c0"},"to":null,"value":{"_hex":"0x17"},"nonce":1435,"data":"0x6080604052604051602080620045d9833981018060405281019080805192506200005691507f1100000000000000000000000000000000000000000000000000000000000000905064010000000062000192810204565b6040517f4f7261636c697a6520476173205072696365204f7261636c650000000000000081526019016040518091039020600755608060405190810160409081526104d280835260208301819052908201526001606082015260058151815467ffffffffffffffff19166001604060020a0391909116178155602082015181546001604060020a03919091166801000000000000000002604060020a608060020a0319909116178155604082015181546001604060020a039190911670010000000000000000000000000000000002608060020a60c060020a0319909116178155606082015181546001604060020a0391909116780100000000000000000000000000000000000000000000000002600160c060020a03909116179055506200018a600082640100000000620003dd810204565b505062001b7f565b600054600160a060020a03161580620001c85750600054620001c690600160a060020a031664010000000062000663810204565b155b15620001e557620001e3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200023f57600080fd5b505af115801562000254573d6000803e3d6000fd5b505050506040513d60208110156200026b57600080fd5b810190808051600154600160a060020a0390811691161492506200033c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620002e657600080fd5b505af1158015620002fb573d6000803e3d6000fd5b505050506040513d60208110156200031257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663688dcfd7826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281527fff000000000000000000000000000000000000000000000000000000000000009091166004820152602401600060405180830381600087803b158015620003c057600080fd5b505af1158015620003d5573d6000803e3d6000fd5b505050505b50565b60008080620003f58464010000000062000682810204565b6200040c62030d406401000000006200088f810204565b91503031821180156200041e57508134105b1562000456577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a16200065b565b620005d1856040805190810160405280600b81526020017f636f6d7075746174696f6e000000000000000000000000000000000000000000815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d40640100000000620008d9810204565b600781905560008181526006602052909150428601906040902080546001604060020a03929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546001608060020a03929092166b01000000000000000000000002605860020a60d860020a0319909216919091179055600192505b505092915050565b3b90565b60006200067c64010000000062000b3a810204565b92915050565b600054600160a060020a03161580620006b85750600054620006b690600160a060020a031664010000000062000663810204565b155b15620006d557620006d3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200072f57600080fd5b505af115801562000744573d6000803e3d6000fd5b505050506040513d60208110156200075b57600080fd5b810190808051600154600160a060020a0390811691161492506200082c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b505050506040513d60208110156200080257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e4826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b158015620003c057600080fd5b60006200067c60408051908101604052600b81527f636f6d7075746174696f6e00000000000000000000000000000000000000000060208201528364010000000062000ee3810204565b60008054606090600160a060020a031615806200091357506000546200091190600160a060020a031664010000000062000663810204565b155b1562000930576200092e600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200098a57600080fd5b505af11580156200099f573d6000803e3d6000fd5b505050506040513d6020811015620009b657600080fd5b810190808051600154600160a060020a03908116911614925062000a8791505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000a3157600080fd5b505af115801562000a46573d6000803e3d6000fd5b505050506040513d602081101562000a5d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600360405190808252806020026020018201604052801562000abe57816020015b606081526020019060019003908162000aa85790505b50905083518160008151811062000ad157fe5b6020908102909101015283600160200201518160018151811062000af157fe5b602090810291909101015260408401518160028151811062000b0f57fe5b6020908102909101015262000b30868683866401000000006200119c810204565b9695505050505050565b60008062000b65731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062000663810204565b111562000be25760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905562000bd960408051908101604052600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015264010000000062001615810204565b50600162000ee0565b600062000c0c73c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062000663810204565b111562000c805760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905562000bd960408051908101604052600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000caa73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e64010000000062000663810204565b111562000d1e5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905562000bd960408051908101604052600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000d4873146500cfd35b22e4a392fe0adc06de1a1368ed4864010000000062000663810204565b111562000dbc5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905562000bd960408051908101604052600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000de6736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47564010000000062000663810204565b111562000e1c575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475179055600162000ee0565b600062000e467320e12a1f859b3feae5fb2a0a32c18f5a65555bbf64010000000062000663810204565b111562000e7c575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf179055600162000ee0565b600062000ea67351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062000663810204565b111562000edc575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa179055600162000ee0565b5060005b90565b60008054600160a060020a0316158062000f1a575060005462000f1890600160a060020a031664010000000062000663810204565b155b1562000f375762000f35600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000f9157600080fd5b505af115801562000fa6573d6000803e3d6000fd5b505050506040513d602081101562000fbd57600080fd5b810190808051600154600160a060020a0390811691161492506200108e91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200103857600080fd5b505af11580156200104d573d6000803e3d6000fd5b505050506040513d60208110156200106457600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101562001111578082015183820152602001620010f7565b50505050905090810190601f1680156200113f5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050506040513d60208110156200118c57600080fd5b8101908080519695505050505050565b600080548190606090600160a060020a03161580620011d85750600054620011d690600160a060020a031664010000000062000663810204565b155b15620011f557620011f3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200124f57600080fd5b505af115801562001264573d6000803e3d6000fd5b505050506040513d60208110156200127b57600080fd5b810190808051600154600160a060020a0390811691161492506200134c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620012f657600080fd5b505af11580156200130b573d6000803e3d6000fd5b505050506040513d60208110156200132257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015620013cf578082015183820152602001620013b5565b50505050905090810190601f168015620013fd5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200141e57600080fd5b505af115801562001433573d6000803e3d6000fd5b505050506040513d60208110156200144a57600080fd5b8101908080519450505050670de0b6b3a76400003a8502018211156200147457600092506200160b565b62001488856401000000006200162e810204565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200151b57808201518382015260200162001501565b50505050905090810190601f168015620015495780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200158157808201518382015260200162001567565b50505050905090810190601f168015620015af5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015620015d257600080fd5b505af1158015620015e7573d6000803e3d6000fd5b50505050506040513d6020811015620015ff57600080fd5b81019080805195505050505b5050949350505050565b60028180516200162a92916020019062001ac5565b5050565b60606200163a62001b4a565b60006200164f640100000000620016ef810204565b6200166b8261040064010000000062002666620016fb82021704565b6200168482640100000000620026946200172a82021704565b5060005b8351811015620016cc57620016c3848281518110620016a357fe5b9060200190602002015183906401000000006200269f6200174082021704565b60010162001688565b620016e582640100000000620026bc6200177782021704565b8151949350505050565b60405180590338823950565b8060208106156200170f5760208106602003015b60208301819052604051928390526000835290910160405250565b620003da8160046401000000006200178d810204565b620017588260038351640100000000620017b0810204565b620017728282640100000000620027da6200191a82021704565b505050565b620003da8160076401000000006200178d810204565b6200162a82601f602060ff8516021764010000000062002877620019d282021704565b60178111620017e357620017dd8360ff848116602002168317640100000000620019d28102620028771704565b62001772565b60ff811162001832576200180f836018602060ff8616021764010000000062002877620019d282021704565b6200182b83826001640100000000620028b062001a1782021704565b5062001772565b61ffff81116200187b576200185f836019602060ff8616021764010000000062002877620019d282021704565b6200182b83826002640100000000620028b062001a1782021704565b63ffffffff8111620018c657620018aa83601a602060ff8616021764010000000062002877620019d282021704565b6200182b83826004640100000000620028b062001a1782021704565b6001604060020a0381116200177257620018f883601b602060ff8616021764010000000062002877620019d282021704565b6200191483826008640100000000620028b062001a1782021704565b50505050565b6200192462001b4a565b600080600080866020015187515187510111156200196d576200196d876200195b8960200151895164010000000062001a7c810204565b60020264010000000062001a95810204565b8551915086518051602081830101955087510190526020860192505b60208210620019ae578251845260208401935060208301925060208203915062001989565b6001826020036101000a039050801983511681855116179093525093949350505050565b8160200151825151600101111562001a005762001a0082836020015160020264010000000062001a95810204565b815180516020818301018381535060010190525050565b62001a2162001b4a565b600084602001518551518401111562001a525762001a52856200195b87602001518664010000000062001a7c810204565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b60008183111562001a8f5750816200067c565b50919050565b60608251905062001ab08383640100000000620016fb810204565b6200191483826401000000006200191a810204565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001b0857805160ff191683800117855562001b38565b8280016001018555821562001b38579182015b8281111562001b3857825182559160200191906001019062001b1b565b5062001b4692915062001b62565b5090565b60408051908101604052606081526000602082015290565b62000ee091905b8082111562001b46576000815560010162001b69565b612a4a8062001b8f6000396000f30060806040526004361061010e5763ffffffff60e060020a6000350416631381bc9f811461011057806315b0e0f41461013d57806318f452b8146101485780631ed4a070146101d457806324629bb4146101fd57806327dc297e1461026857806332ef9237146102c357806338bbfa50146103035780633bc0117e1461039e57806341533118146103b35780635c3ad4cd146103bb578063602631ef146103d0578063655e4fd3146103e557806378121dd4146103fa5780637f1e22701461040f578063885e8e68146104245780638d88874014610432578063947a36fb14610447578063a98c49041461045c578063b9ae507b14610471578063c4f315ce146104bd578063f68016b7146104d5575b005b34801561011c57600080fd5b5061012b6004356024356104ea565b60405190815260200160405180910390f35b61010e600435610529565b34801561015457600080fd5b5061015d61053d565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610199578082015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506101e96105c3565b604051901515815260200160405180910390f35b34801561020957600080fd5b50610215600435610617565b6040519415158552921515602085015290151560408085019190915267ffffffffffffffff90911660608401526fffffffffffffffffffffffffffffffff909116608083015260a0909101905180910390f35b34801561027457600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497506106759650505050505050565b3480156102cf57600080fd5b506102d86106b3565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561030f57600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497969560208082019650903587018082019550359350839250601f8301819004810201905060405190810160405281815292919060208401838380828437509497506106e79650505050505050565b3480156103aa57600080fd5b5061012b610890565b61010e610897565b3480156103c757600080fd5b5061012b6108a3565b3480156103dc57600080fd5b5061012b6108cd565b3480156103f157600080fd5b5061012b6108d5565b34801561040657600080fd5b5061012b610907565b34801561041b57600080fd5b5061012b61091e565b61010e600435602435610942565b34801561043e57600080fd5b5061012b610c63565b34801561045357600080fd5b5061012b610c69565b34801561046857600080fd5b5061012b610c6e565b34801561047d57600080fd5b50610486610cd6565b60405167ffffffffffffffff9485168152928416602084015290831660408084019190915292166060820152608001905180910390f35b3480156104c957600080fd5b5061012b600435610d17565b3480156104e157600080fd5b5061012b610d44565b60006104f582610d4b565b61052060408051908101604052600b81526000805160206129ff833981519152602082015284610f01565b90505b92915050565b61053a816105356108d5565b610942565b50565b608060405190810160405280604b81526020017f6a736f6e2868747470733a2f2f65746867617373746174696f6e2e696e666f2f81526020017f6a736f6e2f6574686761734150492e6a736f6e292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081565b600754600090815260066020526040812054610a8c67ffffffffffffffff630100000090920482160116421180610611575060075460009081526006602052604090205462010000900460ff165b90505b90565b60066020528060005260406000205460ff80821692506101008204811691620100008104909116906301000000810467ffffffffffffffff16906b01000000000000000000000090046fffffffffffffffffffffffffffffffff1685565b6106af82826000604051818152601f19601f83011681016020016040529080156106a9578160200160208202803883390190505b506106e7565b5050565b6000806000806106c161091e565b6106c96108a3565b6106d16108d5565b6106d9610907565b935093509350935090919293565b6106ef61114a565b600160a060020a0316331461074d5760405160e560020a62461bcd02815260206004820152601f60248201527f43616c6c6572206973206e6f74204f7261636c697a6520616464726573732100604482015260640160405180910390fd5b600083815260066020526040902054610100900460ff16156107de5760405160e560020a62461bcd02815260206004820152602160248201527f51756572792068617320616c7265616479206265656e2070726f63657373656460448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b6005546000848152600660205260c060020a90910467ffffffffffffffff169060409020546301000000900467ffffffffffffffff1611156108255761082583838361131c565b600083815260066020526001906040902080549115156101000261ff001990921691909117905560008381526006602052604090205460ff1615801561086c575060075483145b1561088b5761088961087c610c6e565b6108846108d5565b6115c9565b505b505050565b62030d4081565b6108a16000610529565b565b6005546000906106119068010000000000000000900467ffffffffffffffff166305f5e100611835565b6305f5e10081565b60055460009061061190700100000000000000000000000000000000900467ffffffffffffffff166305f5e100611835565b60055460c060020a900467ffffffffffffffff1690565b6005546000906106119067ffffffffffffffff166305f5e10063ffffffff61183516565b6000808315801561095657506109566105c3565b801561099d5750600754600090815260066020526040902054633b9aca006fffffffffffffffffffffffffffffffff6b010000000000000000000000909204821601168310155b80156109b55750346109b262030d40856104ea565b11155b15610a4a576109c484846115c9565b91508115610a455760075460009081526006602052600190604090208054911515620100000262ff000019909216919091179055336108fc610a18610a0b62030d40610d17565b349063ffffffff6118ab16565b9081150290604051600060405180830381858888f19350505050158015610a43573d6000803e3d6000fd5b505b610889565b610a5383610d4b565b610bb1846040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e0000000000000000000000000000000000009082015290526202da7861190a565b6000818152600660205290915060019060409020805460ff1916911515919091179055428411610be357834201610be5565b835b6000828152600660205260409020805467ffffffffffffffff929092166301000000026affffffffffffffff00000019909216919091179055336108fc610c31610a0b6202da78610d17565b9081150290604051600060405180830381858888f19350505050158015610c5c573d6000803e3d6000fd5b5050505050565b60075481565b600681565b6000808080808080603c42069550603c804204811515610c8a57fe5b0694506018603c4281900404069350505050603c8202610e10820201830161546060016006840401028181036102588111610cc9576154608101610ccb565b805b965050505050505090565b60055467ffffffffffffffff80821691680100000000000000008104821691700100000000000000000000000000000000820481169160c060020a90041684565b600061052360408051908101604052600b81526000805160206129ff833981519152602082015283610f01565b6202da7881565b600054600160a060020a03161580610d755750600054610d7390600160a060020a0316611b0a565b155b15610d8657610d846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b505050506040513d6020811015610df057600080fd5b810190808051600154600160a060020a039081169116149250610ea491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050506040513d6020811015610e7a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e48260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b158015610eed57600080fd5b505af1158015610c5c573d6000803e3d6000fd5b60008054600160a060020a03161580610f2c5750600054610f2a90600160a060020a0316611b0a565b155b15610f3d57610f3b6000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b810190808051600154600160a060020a03908116911614925061105b91505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156110c35780820151838201526020016110ab565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050506040513d602081101561113a57600080fd5b8101908080519695505050505050565b60008054600160a060020a03161580611175575060005461117390600160a060020a0316611b0a565b155b15611186576111846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b505050506040513d60208110156111f057600080fd5b810190808051600154600160a060020a0390811691161492506112a491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050506040513d602081101561130e57600080fd5b810190808051935050505090565b611324612937565b61132c612937565b600080600061136d60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611b18565b945061137887611b18565b935061139a611395611390868863ffffffff611b4016565b611b5a565b611ba7565b92506113b2611395611390868863ffffffff611b4016565b91506113ca611395611390868863ffffffff611b4016565b90506080604051908101604090815267ffffffffffffffff80861683528481166020808501919091529084168284015260008b8152600690915260608301919020546301000000900467ffffffffffffffff16905260058151815467ffffffffffffffff191667ffffffffffffffff919091161781556020820151815467ffffffffffffffff9190911668010000000000000000026fffffffffffffffff0000000000000000199091161781556040820151815467ffffffffffffffff919091167001000000000000000000000000000000000277ffffffffffffffff00000000000000000000000000000000199091161781556060820151815467ffffffffffffffff9190911660c060020a0277ffffffffffffffffffffffffffffffffffffffffffffffff909116179055507f2bc130e6a38e491143f3cc8d7df3f729c2772cf1953bb7e5a3329e51fb3add9c8383838b8a60405167ffffffffffffffff80871682528581166020830152841660408201526060810183905260a06080820181815290820183818151815260200191508051906020019080838360005b83811015611581578082015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008060006115d784610d4b565b6115e362030d40610d17565b91503031821180156115f457508134105b1561162a577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a161182d565b611788856040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d4061190a565b6007819055600081815260066020529091504286019060409020805467ffffffffffffffff929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546fffffffffffffffffffffffffffffffff929092166b010000000000000000000000027affffffffffffffffffffffffffffffff000000000000000000000019909216919091179055600192505b505092915050565b600082151561184657506000610523565b5081810281838281151561185657fe5b04146105235760405160e560020a62461bcd02815260206004820152601e60248201527f536166654d617468206d756c7469706c69636174696f6e207468726577210000604482015260640160405180910390fd5b6000828211156119045760405160e560020a62461bcd02815260206004820152601b60248201527f536166654d617468207375627472616374696f6e207468726577210000000000604482015260640160405180910390fd5b50900390565b60008054606090600160a060020a03161580611938575060005461193690600160a060020a0316611b0a565b155b15611949576119476000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b505050506040513d60208110156119b357600080fd5b810190808051600154600160a060020a039081169116149250611a6791505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b6003604051908082528060200260200182016040528015611a9c57816020015b6060815260200190600190039081611a875790505b509050835181600081518110611aae57fe5b60209081029091010152836001602002015181600181518110611acd57fe5b6020908102919091010152604084015181600281518110611aea57fe5b60209081029091010152611b0086868386611bb4565b9695505050505050565b3b90565b6000610523611f8e565b611b20612937565b602082016040805190810160405280845181526020019190915292915050565b611b48612937565b611b538383836122b2565b5092915050565b60608060008351604051818152601f19601f8301168101602001604052908015611b8e578160200160208202803883390190505b509150602082019050611b538185602001518651612321565b6000610523826000612366565b600080548190606090600160a060020a03161580611be45750600054611be290600160a060020a0316611b0a565b155b15611bf557611bf36000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050506040513d6020811015611c5f57600080fd5b810190808051600154600160a060020a039081169116149250611d1391505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b505050506040513d6020811015611ce957600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611d7b578082015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b505050506040513d6020811015611df257600080fd5b8101908080519450505050670de0b6b3a76400003a850201821115611e1a5760009250611f84565b611e2385612512565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff1660e060020a028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611e9b578082015183820152602001611e83565b50505050905090810190601f168015611ec85780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015611efe578082015183820152602001611ee6565b50505050905090810190601f168015611f2b5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015611f4d57600080fd5b505af1158015611f61573d6000803e3d6000fd5b50505050506040513d6020811015611f7857600080fd5b81019080805195505050505b5050949350505050565b600080611fae731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611b0a565b111561201e5760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905561201660408051908101604052600b81527f6574685f6d61696e6e65740000000000000000000000000000000000000000006020820152612589565b506001610614565b600061203d73c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611b0a565b11156120a55760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905561201660408051908101604052600c81527f6574685f726f707374656e3300000000000000000000000000000000000000006020820152612589565b60006120c473b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611b0a565b111561212c5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905561201660408051908101604052600981527f6574685f6b6f76616e00000000000000000000000000000000000000000000006020820152612589565b600061214b73146500cfd35b22e4a392fe0adc06de1a1368ed48611b0a565b11156121b35760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905561201660408051908101604052600b81527f6574685f72696e6b6562790000000000000000000000000000000000000000006020820152612589565b60006121d2736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611b0a565b1115612206575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610614565b60006122257320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611b0a565b1115612259575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610614565b60006122787351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611b0a565b11156122ac575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610614565b50600090565b6122ba612937565b60006122d2855186602001518651876020015161259c565b905084602001516020808501919091528501518103835284518560200151018114156123015760008552612318565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106123475782518452602084019350602083019250602082039150612324565b6001826020036101000a03905080198351168185511617909352505050565b6000828180805b83518110156124f5577f30000000000000000000000000000000000000000000000000000000000000008482815181106123a357fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015801561244457507f390000000000000000000000000000000000000000000000000000000000000084828151811061240d57fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b1561249a5781156124635785151561245b576124f5565b600019909501945b600a83029250603084828151811061247757fe5b016020015160f860020a900460f860020a0260f860020a900403830192506124ed565b8381815181106124a657fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916602e60f860020a0214156124ed57600191505b60010161236d565b60008611156125075785600a0a830292505b509095945050505050565b606061251c61294e565b600061252661265a565b61253282610400612666565b61253b82612694565b5060005b83518110156125765761256e84828151811061255757fe5b90602001906020020151839063ffffffff61269f16565b60010161253f565b61257f826126bc565b8151949350505050565b60028180516106af929160200190612966565b600083818080808080808c8b116126445760208b1161260c57600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514612604578388106125f3578c8c01985061264a565b6001909701968588511692506125db565b87985061264a565b8a8a209150600096505b8a8d038711612644578a88209050818114156126345787985061264a565b6001978801979690960195612616565b8c8c0198505b5050505050505050949350505050565b60405180590338823950565b8060208106156126795760208106602003015b60208301819052604051928390526000835290910160405250565b61053a8160046126c3565b6126ac82600383516126dc565b61088b828263ffffffff6127da16565b61053a8160075b6106af82601f602060ff8516021763ffffffff61287716565b601781116126fd576126f88360ff848116602002168317612877565b61088b565b60ff81116127365761271e836018602060ff8616021763ffffffff61287716565b6127308382600163ffffffff6128b016565b5061088b565b61ffff811161276a57612758836019602060ff8616021763ffffffff61287716565b6127308382600263ffffffff6128b016565b63ffffffff81116127a05761278e83601a602060ff8616021763ffffffff61287716565b6127308382600463ffffffff6128b016565b67ffffffffffffffff811161088b576127c883601b602060ff8616021763ffffffff61287716565b6108898382600863ffffffff6128b016565b6127e261294e565b60008060008086602001518751518751011115612814576128148761280c89602001518951612906565b60020261291d565b8551915086518051602081830101955087510190526020860192505b602082106128535782518452602084019350602083019250602082039150612830565b6001826020036101000a039050801983511681855116179093525093949350505050565b816020015182515160010111156128995761289982836020015160020261291d565b815180516020818301018381535060010190525050565b6128b861294e565b60008460200151855151840111156128dc576128dc8561280c876020015186612906565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b600081831115612917575081610523565b50919050565b60608251905061292d8383612666565b61088983826127da565b604080519081016040526000808252602082015290565b60408051908101604052606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129a757805160ff19168380011785556129d4565b828001600101855582156129d4579182015b828111156129d45782518255916020019190600101906129b9565b506129e09291506129e4565b5090565b61061491905b808211156129e057600081556001016129ea5600636f6d7075746174696f6e000000000000000000000000000000000000000000a165627a7a7230582074735fd76fa6bb4deb9ecc3563268c1cbc6dffbdfdd734f3596ddbfb608985520029000000000000000000000000000000000000000000000000000000000000014a","r":"0xfd9f3c918f94a4ca7f4703c3cbec2da8e432cea247662e55cbc73cb597611b3d","s":"0x3f13dde30d74059cf8bf62e4c3fcf92c9cacb61b34c693104ab85cd98c8f329f","v":43,"creates":"0x275a581aF7F06e23EDa5fe6a50e3e7FdeF93C299","raw":"0xf9464d82059b843b9aca00832dc6c08017b945f96080604052604051602080620045d9833981018060405281019080805192506200005691507f1100000000000000000000000000000000000000000000000000000000000000905064010000000062000192810204565b6040517f4f7261636c697a6520476173205072696365204f7261636c650000000000000081526019016040518091039020600755608060405190810160409081526104d280835260208301819052908201526001606082015260058151815467ffffffffffffffff19166001604060020a0391909116178155602082015181546001604060020a03919091166801000000000000000002604060020a608060020a0319909116178155604082015181546001604060020a039190911670010000000000000000000000000000000002608060020a60c060020a0319909116178155606082015181546001604060020a0391909116780100000000000000000000000000000000000000000000000002600160c060020a03909116179055506200018a600082640100000000620003dd810204565b505062001b7f565b600054600160a060020a03161580620001c85750600054620001c690600160a060020a031664010000000062000663810204565b155b15620001e557620001e3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200023f57600080fd5b505af115801562000254573d6000803e3d6000fd5b505050506040513d60208110156200026b57600080fd5b810190808051600154600160a060020a0390811691161492506200033c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620002e657600080fd5b505af1158015620002fb573d6000803e3d6000fd5b505050506040513d60208110156200031257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663688dcfd7826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281527fff000000000000000000000000000000000000000000000000000000000000009091166004820152602401600060405180830381600087803b158015620003c057600080fd5b505af1158015620003d5573d6000803e3d6000fd5b505050505b50565b60008080620003f58464010000000062000682810204565b6200040c62030d406401000000006200088f810204565b91503031821180156200041e57508134105b1562000456577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a16200065b565b620005d1856040805190810160405280600b81526020017f636f6d7075746174696f6e000000000000000000000000000000000000000000815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d40640100000000620008d9810204565b600781905560008181526006602052909150428601906040902080546001604060020a03929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546001608060020a03929092166b01000000000000000000000002605860020a60d860020a0319909216919091179055600192505b505092915050565b3b90565b60006200067c64010000000062000b3a810204565b92915050565b600054600160a060020a03161580620006b85750600054620006b690600160a060020a031664010000000062000663810204565b155b15620006d557620006d3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200072f57600080fd5b505af115801562000744573d6000803e3d6000fd5b505050506040513d60208110156200075b57600080fd5b810190808051600154600160a060020a0390811691161492506200082c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620007d657600080fd5b505af1158015620007eb573d6000803e3d6000fd5b505050506040513d60208110156200080257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e4826040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b158015620003c057600080fd5b60006200067c60408051908101604052600b81527f636f6d7075746174696f6e00000000000000000000000000000000000000000060208201528364010000000062000ee3810204565b60008054606090600160a060020a031615806200091357506000546200091190600160a060020a031664010000000062000663810204565b155b1562000930576200092e600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200098a57600080fd5b505af11580156200099f573d6000803e3d6000fd5b505050506040513d6020811015620009b657600080fd5b810190808051600154600160a060020a03908116911614925062000a8791505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000a3157600080fd5b505af115801562000a46573d6000803e3d6000fd5b505050506040513d602081101562000a5d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600360405190808252806020026020018201604052801562000abe57816020015b606081526020019060019003908162000aa85790505b50905083518160008151811062000ad157fe5b6020908102909101015283600160200201518160018151811062000af157fe5b602090810291909101015260408401518160028151811062000b0f57fe5b6020908102909101015262000b30868683866401000000006200119c810204565b9695505050505050565b60008062000b65731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062000663810204565b111562000be25760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905562000bd960408051908101604052600b81527f6574685f6d61696e6e6574000000000000000000000000000000000000000000602082015264010000000062001615810204565b50600162000ee0565b600062000c0c73c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062000663810204565b111562000c805760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905562000bd960408051908101604052600c81527f6574685f726f707374656e330000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000caa73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e64010000000062000663810204565b111562000d1e5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905562000bd960408051908101604052600981527f6574685f6b6f76616e0000000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000d4873146500cfd35b22e4a392fe0adc06de1a1368ed4864010000000062000663810204565b111562000dbc5760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905562000bd960408051908101604052600b81527f6574685f72696e6b656279000000000000000000000000000000000000000000602082015264010000000062001615810204565b600062000de6736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47564010000000062000663810204565b111562000e1c575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475179055600162000ee0565b600062000e467320e12a1f859b3feae5fb2a0a32c18f5a65555bbf64010000000062000663810204565b111562000e7c575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf179055600162000ee0565b600062000ea67351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062000663810204565b111562000edc575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa179055600162000ee0565b5060005b90565b60008054600160a060020a0316158062000f1a575060005462000f1890600160a060020a031664010000000062000663810204565b155b1562000f375762000f35600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000f9157600080fd5b505af115801562000fa6573d6000803e3d6000fd5b505050506040513d602081101562000fbd57600080fd5b810190808051600154600160a060020a0390811691161492506200108e91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200103857600080fd5b505af11580156200104d573d6000803e3d6000fd5b505050506040513d60208110156200106457600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b8381101562001111578082015183820152602001620010f7565b50505050905090810190601f1680156200113f5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050506040513d60208110156200118c57600080fd5b8101908080519695505050505050565b600080548190606090600160a060020a03161580620011d85750600054620011d690600160a060020a031664010000000062000663810204565b155b15620011f557620011f3600064010000000062000667810204565b505b600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200124f57600080fd5b505af115801562001264573d6000803e3d6000fd5b505050506040513d60208110156200127b57600080fd5b810190808051600154600160a060020a0390811691161492506200134c91505057600054600160a060020a03166338cc48316040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620012f657600080fd5b505af11580156200130b573d6000803e3d6000fd5b505050506040513d60208110156200132257600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015620013cf578082015183820152602001620013b5565b50505050905090810190601f168015620013fd5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156200141e57600080fd5b505af115801562001433573d6000803e3d6000fd5b505050506040513d60208110156200144a57600080fd5b8101908080519450505050670de0b6b3a76400003a8502018211156200147457600092506200160b565b62001488856401000000006200162e810204565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200151b57808201518382015260200162001501565b50505050905090810190601f168015620015495780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156200158157808201518382015260200162001567565b50505050905090810190601f168015620015af5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015620015d257600080fd5b505af1158015620015e7573d6000803e3d6000fd5b50505050506040513d6020811015620015ff57600080fd5b81019080805195505050505b5050949350505050565b60028180516200162a92916020019062001ac5565b5050565b60606200163a62001b4a565b60006200164f640100000000620016ef810204565b6200166b8261040064010000000062002666620016fb82021704565b6200168482640100000000620026946200172a82021704565b5060005b8351811015620016cc57620016c3848281518110620016a357fe5b9060200190602002015183906401000000006200269f6200174082021704565b60010162001688565b620016e582640100000000620026bc6200177782021704565b8151949350505050565b60405180590338823950565b8060208106156200170f5760208106602003015b60208301819052604051928390526000835290910160405250565b620003da8160046401000000006200178d810204565b620017588260038351640100000000620017b0810204565b620017728282640100000000620027da6200191a82021704565b505050565b620003da8160076401000000006200178d810204565b6200162a82601f602060ff8516021764010000000062002877620019d282021704565b60178111620017e357620017dd8360ff848116602002168317640100000000620019d28102620028771704565b62001772565b60ff811162001832576200180f836018602060ff8616021764010000000062002877620019d282021704565b6200182b83826001640100000000620028b062001a1782021704565b5062001772565b61ffff81116200187b576200185f836019602060ff8616021764010000000062002877620019d282021704565b6200182b83826002640100000000620028b062001a1782021704565b63ffffffff8111620018c657620018aa83601a602060ff8616021764010000000062002877620019d282021704565b6200182b83826004640100000000620028b062001a1782021704565b6001604060020a0381116200177257620018f883601b602060ff8616021764010000000062002877620019d282021704565b6200191483826008640100000000620028b062001a1782021704565b50505050565b6200192462001b4a565b600080600080866020015187515187510111156200196d576200196d876200195b8960200151895164010000000062001a7c810204565b60020264010000000062001a95810204565b8551915086518051602081830101955087510190526020860192505b60208210620019ae578251845260208401935060208301925060208203915062001989565b6001826020036101000a039050801983511681855116179093525093949350505050565b8160200151825151600101111562001a005762001a0082836020015160020264010000000062001a95810204565b815180516020818301018381535060010190525050565b62001a2162001b4a565b600084602001518551518401111562001a525762001a52856200195b87602001518664010000000062001a7c810204565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b60008183111562001a8f5750816200067c565b50919050565b60608251905062001ab08383640100000000620016fb810204565b6200191483826401000000006200191a810204565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001b0857805160ff191683800117855562001b38565b8280016001018555821562001b38579182015b8281111562001b3857825182559160200191906001019062001b1b565b5062001b4692915062001b62565b5090565b60408051908101604052606081526000602082015290565b62000ee091905b8082111562001b46576000815560010162001b69565b612a4a8062001b8f6000396000f30060806040526004361061010e5763ffffffff60e060020a6000350416631381bc9f811461011057806315b0e0f41461013d57806318f452b8146101485780631ed4a070146101d457806324629bb4146101fd57806327dc297e1461026857806332ef9237146102c357806338bbfa50146103035780633bc0117e1461039e57806341533118146103b35780635c3ad4cd146103bb578063602631ef146103d0578063655e4fd3146103e557806378121dd4146103fa5780637f1e22701461040f578063885e8e68146104245780638d88874014610432578063947a36fb14610447578063a98c49041461045c578063b9ae507b14610471578063c4f315ce146104bd578063f68016b7146104d5575b005b34801561011c57600080fd5b5061012b6004356024356104ea565b60405190815260200160405180910390f35b61010e600435610529565b34801561015457600080fd5b5061015d61053d565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610199578082015183820152602001610181565b50505050905090810190601f1680156101c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101e057600080fd5b506101e96105c3565b604051901515815260200160405180910390f35b34801561020957600080fd5b50610215600435610617565b6040519415158552921515602085015290151560408085019190915267ffffffffffffffff90911660608401526fffffffffffffffffffffffffffffffff909116608083015260a0909101905180910390f35b34801561027457600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497506106759650505050505050565b3480156102cf57600080fd5b506102d86106b3565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561030f57600080fd5b5061010e6004803590369060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509497969560208082019650903587018082019550359350839250601f8301819004810201905060405190810160405281815292919060208401838380828437509497506106e79650505050505050565b3480156103aa57600080fd5b5061012b610890565b61010e610897565b3480156103c757600080fd5b5061012b6108a3565b3480156103dc57600080fd5b5061012b6108cd565b3480156103f157600080fd5b5061012b6108d5565b34801561040657600080fd5b5061012b610907565b34801561041b57600080fd5b5061012b61091e565b61010e600435602435610942565b34801561043e57600080fd5b5061012b610c63565b34801561045357600080fd5b5061012b610c69565b34801561046857600080fd5b5061012b610c6e565b34801561047d57600080fd5b50610486610cd6565b60405167ffffffffffffffff9485168152928416602084015290831660408084019190915292166060820152608001905180910390f35b3480156104c957600080fd5b5061012b600435610d17565b3480156104e157600080fd5b5061012b610d44565b60006104f582610d4b565b61052060408051908101604052600b81526000805160206129ff833981519152602082015284610f01565b90505b92915050565b61053a816105356108d5565b610942565b50565b608060405190810160405280604b81526020017f6a736f6e2868747470733a2f2f65746867617373746174696f6e2e696e666f2f81526020017f6a736f6e2f6574686761734150492e6a736f6e292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081565b600754600090815260066020526040812054610a8c67ffffffffffffffff630100000090920482160116421180610611575060075460009081526006602052604090205462010000900460ff165b90505b90565b60066020528060005260406000205460ff80821692506101008204811691620100008104909116906301000000810467ffffffffffffffff16906b01000000000000000000000090046fffffffffffffffffffffffffffffffff1685565b6106af82826000604051818152601f19601f83011681016020016040529080156106a9578160200160208202803883390190505b506106e7565b5050565b6000806000806106c161091e565b6106c96108a3565b6106d16108d5565b6106d9610907565b935093509350935090919293565b6106ef61114a565b600160a060020a0316331461074d5760405160e560020a62461bcd02815260206004820152601f60248201527f43616c6c6572206973206e6f74204f7261636c697a6520616464726573732100604482015260640160405180910390fd5b600083815260066020526040902054610100900460ff16156107de5760405160e560020a62461bcd02815260206004820152602160248201527f51756572792068617320616c7265616479206265656e2070726f63657373656460448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b6005546000848152600660205260c060020a90910467ffffffffffffffff169060409020546301000000900467ffffffffffffffff1611156108255761082583838361131c565b600083815260066020526001906040902080549115156101000261ff001990921691909117905560008381526006602052604090205460ff1615801561086c575060075483145b1561088b5761088961087c610c6e565b6108846108d5565b6115c9565b505b505050565b62030d4081565b6108a16000610529565b565b6005546000906106119068010000000000000000900467ffffffffffffffff166305f5e100611835565b6305f5e10081565b60055460009061061190700100000000000000000000000000000000900467ffffffffffffffff166305f5e100611835565b60055460c060020a900467ffffffffffffffff1690565b6005546000906106119067ffffffffffffffff166305f5e10063ffffffff61183516565b6000808315801561095657506109566105c3565b801561099d5750600754600090815260066020526040902054633b9aca006fffffffffffffffffffffffffffffffff6b010000000000000000000000909204821601168310155b80156109b55750346109b262030d40856104ea565b11155b15610a4a576109c484846115c9565b91508115610a455760075460009081526006602052600190604090208054911515620100000262ff000019909216919091179055336108fc610a18610a0b62030d40610d17565b349063ffffffff6118ab16565b9081150290604051600060405180830381858888f19350505050158015610a43573d6000803e3d6000fd5b505b610889565b610a5383610d4b565b610bb1846040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e0000000000000000000000000000000000009082015290526202da7861190a565b6000818152600660205290915060019060409020805460ff1916911515919091179055428411610be357834201610be5565b835b6000828152600660205260409020805467ffffffffffffffff929092166301000000026affffffffffffffff00000019909216919091179055336108fc610c31610a0b6202da78610d17565b9081150290604051600060405180830381858888f19350505050158015610c5c573d6000803e3d6000fd5b5050505050565b60075481565b600681565b6000808080808080603c42069550603c804204811515610c8a57fe5b0694506018603c4281900404069350505050603c8202610e10820201830161546060016006840401028181036102588111610cc9576154608101610ccb565b805b965050505050505090565b60055467ffffffffffffffff80821691680100000000000000008104821691700100000000000000000000000000000000820481169160c060020a90041684565b600061052360408051908101604052600b81526000805160206129ff833981519152602082015283610f01565b6202da7881565b600054600160a060020a03161580610d755750600054610d7390600160a060020a0316611b0a565b155b15610d8657610d846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b505050506040513d6020811015610df057600080fd5b810190808051600154600160a060020a039081169116149250610ea491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050506040513d6020811015610e7a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663ca6ad1e48260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b158015610eed57600080fd5b505af1158015610c5c573d6000803e3d6000fd5b60008054600160a060020a03161580610f2c5750600054610f2a90600160a060020a0316611b0a565b155b15610f3d57610f3b6000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b810190808051600154600160a060020a03908116911614925061105b91505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561100757600080fd5b505af115801561101b573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc84846040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156110c35780820151838201526020016110ab565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050506040513d602081101561113a57600080fd5b8101908080519695505050505050565b60008054600160a060020a03161580611175575060005461117390600160a060020a0316611b0a565b155b15611186576111846000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156111c657600080fd5b505af11580156111da573d6000803e3d6000fd5b505050506040513d60208110156111f057600080fd5b810190808051600154600160a060020a0390811691161492506112a491505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561125057600080fd5b505af1158015611264573d6000803e3d6000fd5b505050506040513d602081101561127a57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050506040513d602081101561130e57600080fd5b810190808051935050505090565b611324612937565b61132c612937565b600080600061136d60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611b18565b945061137887611b18565b935061139a611395611390868863ffffffff611b4016565b611b5a565b611ba7565b92506113b2611395611390868863ffffffff611b4016565b91506113ca611395611390868863ffffffff611b4016565b90506080604051908101604090815267ffffffffffffffff80861683528481166020808501919091529084168284015260008b8152600690915260608301919020546301000000900467ffffffffffffffff16905260058151815467ffffffffffffffff191667ffffffffffffffff919091161781556020820151815467ffffffffffffffff9190911668010000000000000000026fffffffffffffffff0000000000000000199091161781556040820151815467ffffffffffffffff919091167001000000000000000000000000000000000277ffffffffffffffff00000000000000000000000000000000199091161781556060820151815467ffffffffffffffff9190911660c060020a0277ffffffffffffffffffffffffffffffffffffffffffffffff909116179055507f2bc130e6a38e491143f3cc8d7df3f729c2772cf1953bb7e5a3329e51fb3add9c8383838b8a60405167ffffffffffffffff80871682528581166020830152841660408201526060810183905260a06080820181815290820183818151815260200191508051906020019080838360005b83811015611581578082015183820152602001611569565b50505050905090810190601f1680156115ae5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a15050505050505050565b60008060006115d784610d4b565b6115e362030d40610d17565b91503031821180156115f457508134105b1561162a577fcaa17151a57d6e1e209f31d45bf1823c6f178ed689d9638ba247592832fb674b60405160405180910390a161182d565b611788856040805190810160405280600b81526020016000805160206129ff833981519152815250606060405190810160405280608060405190810160405280604b81526020017f6a736f6e28516d644b4b3331395665686138336836415967517168783959527381526020017f4a394d4a45377933336f4358795a344d714845292e5b736166654c6f772c617681526020017f65726167652c666173745d00000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017f4745540000000000000000000000000000000000000000000000000000000000815250815260200160606040519081016040908152602e82527f68747470733a2f2f65746867617373746174696f6e2e696e666f2f6a736f6e2f60208301527f6574686761734150492e6a736f6e00000000000000000000000000000000000090820152905262030d4061190a565b6007819055600081815260066020529091504286019060409020805467ffffffffffffffff929092166301000000026affffffffffffffff000000199092169190911790556000818152600660205284906040902080546fffffffffffffffffffffffffffffffff929092166b010000000000000000000000027affffffffffffffffffffffffffffffff000000000000000000000019909216919091179055600192505b505092915050565b600082151561184657506000610523565b5081810281838281151561185657fe5b04146105235760405160e560020a62461bcd02815260206004820152601e60248201527f536166654d617468206d756c7469706c69636174696f6e207468726577210000604482015260640160405180910390fd5b6000828211156119045760405160e560020a62461bcd02815260206004820152601b60248201527f536166654d617468207375627472616374696f6e207468726577210000000000604482015260640160405180910390fd5b50900390565b60008054606090600160a060020a03161580611938575060005461193690600160a060020a0316611b0a565b155b15611949576119476000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561198957600080fd5b505af115801561199d573d6000803e3d6000fd5b505050506040513d60208110156119b357600080fd5b810190808051600154600160a060020a039081169116149250611a6791505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b6003604051908082528060200260200182016040528015611a9c57816020015b6060815260200190600190039081611a875790505b509050835181600081518110611aae57fe5b60209081029091010152836001602002015181600181518110611acd57fe5b6020908102919091010152604084015181600281518110611aea57fe5b60209081029091010152611b0086868386611bb4565b9695505050505050565b3b90565b6000610523611f8e565b611b20612937565b602082016040805190810160405280845181526020019190915292915050565b611b48612937565b611b538383836122b2565b5092915050565b60608060008351604051818152601f19601f8301168101602001604052908015611b8e578160200160208202803883390190505b509150602082019050611b538185602001518651612321565b6000610523826000612366565b600080548190606090600160a060020a03161580611be45750600054611be290600160a060020a0316611b0a565b155b15611bf557611bf36000611b0e565b505b600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050506040513d6020811015611c5f57600080fd5b810190808051600154600160a060020a039081169116149250611d1391505057600054600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cbf57600080fd5b505af1158015611cd3573d6000803e3d6000fd5b505050506040513d6020811015611ce957600080fd5b81019080805160018054600160a060020a031916600160a060020a03929092169190911790555050505b600154600160a060020a0316632ef3accc87866040518363ffffffff1660e060020a0281526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b83811015611d7b578082015183820152602001611d63565b50505050905090810190601f168015611da85780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b505050506040513d6020811015611df257600080fd5b8101908080519450505050670de0b6b3a76400003a850201821115611e1a5760009250611f84565b611e2385612512565b600154909150600160a060020a031663c55c1cb683898985896040518663ffffffff1660e060020a028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611e9b578082015183820152602001611e83565b50505050905090810190601f168015611ec85780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015611efe578082015183820152602001611ee6565b50505050905090810190601f168015611f2b5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b158015611f4d57600080fd5b505af1158015611f61573d6000803e3d6000fd5b50505050506040513d6020811015611f7857600080fd5b81019080805195505050505b5050949350505050565b600080611fae731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611b0a565b111561201e5760008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905561201660408051908101604052600b81527f6574685f6d61696e6e65740000000000000000000000000000000000000000006020820152612589565b506001610614565b600061203d73c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611b0a565b11156120a55760008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905561201660408051908101604052600c81527f6574685f726f707374656e3300000000000000000000000000000000000000006020820152612589565b60006120c473b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611b0a565b111561212c5760008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905561201660408051908101604052600981527f6574685f6b6f76616e00000000000000000000000000000000000000000000006020820152612589565b600061214b73146500cfd35b22e4a392fe0adc06de1a1368ed48611b0a565b11156121b35760008054600160a060020a03191673146500cfd35b22e4a392fe0adc06de1a1368ed4817905561201660408051908101604052600b81527f6574685f72696e6b6562790000000000000000000000000000000000000000006020820152612589565b60006121d2736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611b0a565b1115612206575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb4751790556001610614565b60006122257320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611b0a565b1115612259575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf1790556001610614565b60006122787351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611b0a565b11156122ac575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa1790556001610614565b50600090565b6122ba612937565b60006122d2855186602001518651876020015161259c565b905084602001516020808501919091528501518103835284518560200151018114156123015760008552612318565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106123475782518452602084019350602083019250602082039150612324565b6001826020036101000a03905080198351168185511617909352505050565b6000828180805b83518110156124f5577f30000000000000000000000000000000000000000000000000000000000000008482815181106123a357fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015801561244457507f390000000000000000000000000000000000000000000000000000000000000084828151811061240d57fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b1561249a5781156124635785151561245b576124f5565b600019909501945b600a83029250603084828151811061247757fe5b016020015160f860020a900460f860020a0260f860020a900403830192506124ed565b8381815181106124a657fe5b016020015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916602e60f860020a0214156124ed57600191505b60010161236d565b60008611156125075785600a0a830292505b509095945050505050565b606061251c61294e565b600061252661265a565b61253282610400612666565b61253b82612694565b5060005b83518110156125765761256e84828151811061255757fe5b90602001906020020151839063ffffffff61269f16565b60010161253f565b61257f826126bc565b8151949350505050565b60028180516106af929160200190612966565b600083818080808080808c8b116126445760208b1161260c57600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514612604578388106125f3578c8c01985061264a565b6001909701968588511692506125db565b87985061264a565b8a8a209150600096505b8a8d038711612644578a88209050818114156126345787985061264a565b6001978801979690960195612616565b8c8c0198505b5050505050505050949350505050565b60405180590338823950565b8060208106156126795760208106602003015b60208301819052604051928390526000835290910160405250565b61053a8160046126c3565b6126ac82600383516126dc565b61088b828263ffffffff6127da16565b61053a8160075b6106af82601f602060ff8516021763ffffffff61287716565b601781116126fd576126f88360ff848116602002168317612877565b61088b565b60ff81116127365761271e836018602060ff8616021763ffffffff61287716565b6127308382600163ffffffff6128b016565b5061088b565b61ffff811161276a57612758836019602060ff8616021763ffffffff61287716565b6127308382600263ffffffff6128b016565b63ffffffff81116127a05761278e83601a602060ff8616021763ffffffff61287716565b6127308382600463ffffffff6128b016565b67ffffffffffffffff811161088b576127c883601b602060ff8616021763ffffffff61287716565b6108898382600863ffffffff6128b016565b6127e261294e565b60008060008086602001518751518751011115612814576128148761280c89602001518951612906565b60020261291d565b8551915086518051602081830101955087510190526020860192505b602082106128535782518452602084019350602083019250602082039150612830565b6001826020036101000a039050801983511681855116179093525093949350505050565b816020015182515160010111156128995761289982836020015160020261291d565b815180516020818301018381535060010190525050565b6128b861294e565b60008460200151855151840111156128dc576128dc8561280c876020015186612906565b6001836101000a039050845180518481830101868419825116179052909301909252509192915050565b600081831115612917575081610523565b50919050565b60608251905061292d8383612666565b61088983826127da565b604080519081016040526000808252602082015290565b60408051908101604052606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129a757805160ff19168380011785556129d4565b828001600101855582156129d4579182015b828111156129d45782518255916020019190600101906129b9565b506129e09291506129e4565b5090565b61061491905b808211156129e057600081556001016129ea5600636f6d7075746174696f6e000000000000000000000000000000000000000000a165627a7a7230582074735fd76fa6bb4deb9ecc3563268c1cbc6dffbdfdd734f3596ddbfb608985520029000000000000000000000000000000000000000000000000000000000000014a2ba0fd9f3c918f94a4ca7f4703c3cbec2da8e432cea247662e55cbc73cb597611b3da03f13dde30d74059cf8bf62e4c3fcf92c9cacb61b34c693104ab85cd98c8f329f","networkId":4}, version=4.0.27)
    at Object.n [as throwError] (bundle.js:4569)
    at bundle.js:4569
    at async deployContract (bundle.js:14451)

@ninabreznik
Copy link
Author

Am I even sending value via constructor correctly?

        var instance
        if (overrides) { instance = await factory.deploy(args, overrides) }
        else { instance = await factory.deploy(args) }

@ninabreznik
Copy link
Author

It works with this contract

pragma solidity ^0.5.2;

import "https://gist.githubusercontent.com/ninabreznik/a66bdae5fa18c7618b445b24fe97cce0/raw/f4df88ce6d58d959b854188a6a2daa49ba641e4f/SafeMath";

/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * PaymentSplitter follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the release
 * function.
 */
contract PaymentSplitter {
    using SafeMath for uint256;

    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    /**
     * @dev Creates an instance of PaymentSplitter where each account in payees is assigned the number of shares at
     * the matching position in the shares array.
     *
     * All addresses in payees must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in payees.
     */
    constructor (address[] memory payees, uint256[] memory shares) public payable {
        // solhint-disable-next-line max-line-length
        require(payees.length == shares.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with PaymentReceived events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for [fallback functions].
     *
     * [fallback functions]: https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function
     */
    function () external payable {
        emit PaymentReceived(msg.sender, msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the address of the payee number index.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to account of the amount of Ether they are owed, according to their percentage of the
    function release(address payable account) public {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance.add(_totalReleased);
        uint256 payment = totalReceived.mul(_shares[account]).div(_totalShares).sub(_released[account]);

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] = _released[account].add(payment);
        _totalReleased = _totalReleased.add(payment);

        account.transfer(payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares.add(shares_);
        emit PayeeAdded(account, shares_);
    }
}

@ricmoo
Copy link
Member

ricmoo commented Jun 11, 2019

What is args? The Contract methods need to be dereferenced, so maybe it needs to be ...args? Otherwise it looks like it should work...

@ninabreznik
Copy link
Author

ninabreznik commented Jun 12, 2019

I have ...args :) Just didn't want to confuse it here...

You try to replicate it on https://ethereum-play.github.io/editor-solidity/ using 2 contracts mentioned above. One works fine, the other throws this error...

@ninabreznik
Copy link
Author

@ricmoo
Copy link
Member

ricmoo commented Oct 19, 2019

Do you still have this problem? I think the problem is the length of the one contract is way longer, so the intrinsic gas required is a lot more (more than the gas limit permits).

@dorjebro
Copy link

dorjebro commented Mar 4, 2021

Screenshot_20210304-083811_MetaMask
Screenshot_20210304-083729_MetaMask

@ricmoo
Copy link
Member

ricmoo commented Mar 4, 2021

@dorjebro this means your gasLimit is too low. Are you setting your gasLimit explicitly? What network are you using?

@dorjebro
Copy link

dorjebro commented Mar 4, 2021

I'm using metamask how mush I should take gas limit?

@ricmoo
Copy link
Member

ricmoo commented Mar 4, 2021

In your transaction where you are specifying the gasLimit in a transaction or contract interaction? Can you include a code snippet?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion Questions, feedback and general information.
Projects
None yet
Development

No branches or pull requests

3 participants