ETH Price: $2,711.95 (+6.89%)
Gas: 2 Gwei

Contract

0x435FC409F14b2500A1E24C20516250Ad89341627
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer198748662024-05-15 10:44:5989 days ago1715769899IN
0x435FC409...d89341627
0 ETH0.000152315.03314737
Approve197239792024-04-24 8:14:47110 days ago1713946487IN
0x435FC409...d89341627
0 ETH0.0003135810.79524555
Approve196585392024-04-15 4:29:11119 days ago1713155351IN
0x435FC409...d89341627
0 ETH0.000208427.17530437
Approve196574392024-04-15 0:48:11119 days ago1713142091IN
0x435FC409...d89341627
0 ETH0.000368487.98684084
Approve195987932024-04-06 19:33:35128 days ago1712432015IN
0x435FC409...d89341627
0 ETH0.0006457313.99638015
Approve195987892024-04-06 19:32:47128 days ago1712431967IN
0x435FC409...d89341627
0 ETH0.0006404513.88178597
Approve195987662024-04-06 19:27:47128 days ago1712431667IN
0x435FC409...d89341627
0 ETH0.0005846312.67207066
Approve195585972024-04-01 4:24:23133 days ago1711945463IN
0x435FC409...d89341627
0 ETH0.000732415.87483312
Transfer195371132024-03-29 3:54:23136 days ago1711684463IN
0x435FC409...d89341627
0 ETH0.0011226522.38007935
Transfer194753872024-03-20 10:43:23145 days ago1710931403IN
0x435FC409...d89341627
0 ETH0.0015597131.09291471
Transfer194371802024-03-15 1:48:11150 days ago1710467291IN
0x435FC409...d89341627
0 ETH0.0013078643.23364696
Transfer190811462024-01-25 4:07:35200 days ago1706155655IN
0x435FC409...d89341627
0 ETH0.0005478110.92076027
Transfer187226932023-12-05 21:02:11251 days ago1701810131IN
0x435FC409...d89341627
0 ETH0.0030425460.65324788
Transfer186951492023-12-02 0:29:47254 days ago1701476987IN
0x435FC409...d89341627
0 ETH0.0014429328.88241896
Transfer185508542023-11-11 19:44:59275 days ago1699731899IN
0x435FC409...d89341627
0 ETH0.0015873531.64397512
Approve181735342023-09-20 0:28:59327 days ago1695169739IN
0x435FC409...d89341627
0 ETH0.0005046110.8752883
Approve181050372023-09-10 9:19:47337 days ago1694337587IN
0x435FC409...d89341627
0 ETH0.000429599.24651765
Transfer180565962023-09-03 14:35:35344 days ago1693751735IN
0x435FC409...d89341627
0 ETH0.0004745715.6815331
Transfer180032772023-08-27 3:19:59351 days ago1693106399IN
0x435FC409...d89341627
0 ETH0.0003692612.2018034
Transfer178174682023-08-01 3:28:23377 days ago1690860503IN
0x435FC409...d89341627
0 ETH0.000802616
Approve176753372023-07-12 5:13:59397 days ago1689138839IN
0x435FC409...d89341627
0 ETH0.0004018113.83839396
Transfer176750272023-07-12 4:10:35397 days ago1689135035IN
0x435FC409...d89341627
0 ETH0.0007834414.26026561
Transfer176559892023-07-09 11:56:11400 days ago1688903771IN
0x435FC409...d89341627
0 ETH0.0007056914.07473521
Approve176559722023-07-09 11:52:47400 days ago1688903567IN
0x435FC409...d89341627
0 ETH0.0006966615.01431442
Approve176559642023-07-09 11:51:11400 days ago1688903471IN
0x435FC409...d89341627
0 ETH0.0007809916.81006907
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
wHBAR

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-01
*/

// File: eip1996/contracts/libraries/StringUtil.sol

pragma solidity ^0.5.9;


library StringUtil {
    function toHash(string memory _s) internal pure returns (bytes32) {
        return keccak256(abi.encode(_s));
    }

    function isEmpty(string memory _s) internal pure returns (bool) {
        return bytes(_s).length == 0;
    }
}

// File: contracts/AccountCreator.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;


contract AccountCreator {
    using StringUtil for string;

    enum RequestStatus {
        Nonexistent,
        Requested,
        Confirmed,
        Failed,
        Refunded
    }

    struct AccountRequest {
        string hederaPublicKey;
        address payable requestor;
        uint256 paid;
        RequestStatus status;
    }

    mapping(bytes32 => AccountRequest) private requests;
    address public accountCreator;
    uint256 private fee;

    constructor(
        address creator, 
        uint256 accountCreationFee
    ) public {
        accountCreator = creator;
        fee = accountCreationFee;
    }

    function getAccountCreator() public view returns (address) {
        return accountCreator;
    }

    function getAccountCreationFee() external view returns (uint256) {
        return fee;
    }

    function setAccountCreationFee(uint256 feeInWei) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );
        fee = feeInWei;
        return true;
    }

    // User calls createAccount
    function _createAccount(
        string memory operationId,
        string memory hederaPublicKey
    ) internal returns (bool) {
        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];

        require(!hederaPublicKey.isEmpty(), "Hedera Public Key cannot be empty");
        require(request.paid == 0, "A request with this id already exists");

        request.requestor = msg.sender;
        request.hederaPublicKey = hederaPublicKey;
        request.status = RequestStatus.Requested;
        request.paid = msg.value;

        emit CreateAccountRequest(
            operationId,
            msg.sender,
            hederaPublicKey
        );

        return true;
    }

    function createAccount(
        string calldata operationId, 
        string calldata hederaPublicKey
    ) external payable returns (bool) {
        require(
            msg.value == fee, 
            "Incorrect fee amount, call getAccountCreationFee"
        );

        // Make accountcreator a payable address, then transfer the value
        address(uint160(accountCreator)).transfer(msg.value);

        return _createAccount(
            operationId,
            hederaPublicKey
        );
    }

    // contract creates record and emits
    event CreateAccountRequest(
        string operationId, 
        address requestor, 
        string hederaPublicKey
    );
    // request is created with status Requested
    
    // Bridge program sees HederaAccountRequest
    // Tries to create a hedera account using the oracle, 
    // and if successful, should call
    function createAccountSuccess(
        string calldata operationId, 
        string calldata hederaAccountId
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];
        
        require(
            request.status == RequestStatus.Requested, 
            "Account Request must have status Requested to be set to status Confirmed"
        );
        
        request.status = RequestStatus.Confirmed;

        emit CreateAccountSuccess(
            operationId,
            request.requestor,
            request.hederaPublicKey,
            hederaAccountId
        );

        return true;
    }

    //which emits
    event CreateAccountSuccess(
        string operationId, 
        address requestor, 
        string hederaPublicKey, 
        string hederaAccountId
    );
    // request has status Confirmed

    // if Hedera account creation fails, bridge program should call
    function createAccountFail(
        string calldata operationId, 
        string calldata reason
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];
        
        require(
            request.status == RequestStatus.Requested, 
            "Account Request must have status Requested to be set to status Failed"
        );
        
        request.status = RequestStatus.Failed;

        emit CreateAccountFail(
            operationId,
            request.requestor,
            request.hederaPublicKey,
            request.paid,
            reason
        );

        return true;
    }
    
    // which emits
    event CreateAccountFail(
        string operationId,
        address requestor,
        string hederaPublicKey,
        uint256 amount,
        string reason
    );
    // request has status Failed

    // Set to Refunded for confirmation
    function createAccountRefund(
        string calldata operationId
    ) external returns (bool) {
        require(
            msg.sender == accountCreator,
            "Only the account creator can call this function"
        );

        bytes32 operationIdHash = operationId.toHash();
        AccountRequest storage request = requests[operationIdHash];

        require(
            request.status == RequestStatus.Failed,
            "Account Request must have status Failed to be refunded"
        );

        request.status = RequestStatus.Refunded;

        emit CreateAccountRefund(operationId, request.requestor, request.paid);
        return true;
    }

    // emits
    event CreateAccountRefund(
        string id, 
        address requestor, 
        uint256 refundAmountWei
    );
}

// File: eip2021/contracts/IPayoutable.sol

pragma solidity ^0.5.0;

interface IPayoutable {
    enum PayoutStatusCode {
        Nonexistent,
        Ordered,
        InProcess,
        FundsInSuspense,
        Executed,
        Rejected,
        Cancelled
    }

    function orderPayout(string calldata operationId, uint256 value, string calldata instructions) external returns (bool);
    function orderPayoutFrom(
        string calldata operationId,
        address walletToBePaidOut,
        uint256 value,
        string calldata instructions
    ) external returns (bool);
    function cancelPayout(string calldata operationId) external returns (bool);
    function processPayout(string calldata operationId) external returns (bool);
    function putFundsInSuspenseInPayout(string calldata operationId) external returns (bool);
    function executePayout(string calldata operationId) external returns (bool);
    function rejectPayout(string calldata operationId, string calldata reason) external returns (bool);
    function retrievePayoutData(string calldata operationId) external view returns (
        address walletToDebit,
        uint256 value,
        string memory instructions,
        PayoutStatusCode status
    );

    function authorizePayoutOperator(address operator) external returns (bool);
    function revokePayoutOperator(address operator) external returns (bool);
    function isPayoutOperatorFor(address operator, address from) external view returns (bool);

    event PayoutOrdered(address indexed orderer, string operationId, address indexed walletToDebit, uint256 value, string instructions);
    event PayoutInProcess(address indexed orderer, string operationId);
    event PayoutFundsInSuspense(address indexed orderer, string operationId);
    event PayoutExecuted(address indexed orderer, string operationId);
    event PayoutRejected(address indexed orderer, string operationId, string reason);
    event PayoutCancelled(address indexed orderer, string operationId);
    event AuthorizedPayoutOperator(address indexed operator, address indexed account);
    event RevokedPayoutOperator(address indexed operator, address indexed account);
}

// File: openzeppelin-solidity/contracts/GSN/Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

// File: eip1996/contracts/IHoldable.sol

pragma solidity ^0.5.0;

interface IHoldable {
    enum HoldStatusCode {
        Nonexistent,
        Ordered,
        Executed,
        ExecutedAndKeptOpen,
        ReleasedByNotary,
        ReleasedByPayee,
        ReleasedOnExpiration
    }

    function hold(
        string calldata operationId,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) external returns (bool);
    function holdFrom(
        string calldata operationId,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) external returns (bool);
    function releaseHold(string calldata operationId) external returns (bool);
    function executeHold(string calldata operationId, uint256 value) external returns (bool);
    function executeHoldAndKeepOpen(string calldata operationId, uint256 value) external returns (bool);
    function renewHold(string calldata operationId, uint256 timeToExpiration) external returns (bool);
    function retrieveHoldData(string calldata operationId) external view returns (
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 expiration,
        HoldStatusCode status
    );

    function balanceOnHold(address account) external view returns (uint256);
    function netBalanceOf(address account) external view returns (uint256);
    function totalSupplyOnHold() external view returns (uint256);

    function authorizeHoldOperator(address operator) external returns (bool);
    function revokeHoldOperator(address operator) external returns (bool);
    function isHoldOperatorFor(address operator, address from) external view returns (bool);

    event HoldCreated(
        address indexed holdIssuer,
        string  operationId,
        address from,
        address to,
        address indexed notary,
        uint256 value,
        uint256 expiration
    );
    event HoldExecuted(address indexed holdIssuer, string operationId, address indexed notary, uint256 heldValue, uint256 transferredValue);
    event HoldExecutedAndKeptOpen(address indexed holdIssuer, string operationId, address indexed notary, uint256 heldValue,
    uint256 transferredValue);
    event HoldReleased(address indexed holdIssuer, string operationId, HoldStatusCode status);
    event HoldRenewed(address indexed holdIssuer, string operationId, uint256 oldExpiration, uint256 newExpiration);
    event AuthorizedHoldOperator(address indexed operator, address indexed account);
    event RevokedHoldOperator(address indexed operator, address indexed account);
}

// File: eip1996/contracts/Holdable.sol

pragma solidity ^0.5.0;





contract Holdable is IHoldable, ERC20 {

    using SafeMath for uint256;
    using StringUtil for string;

    struct Hold {
        address issuer;
        address origin;
        address target;
        address notary;
        uint256 expiration;
        uint256 value;
        HoldStatusCode status;
    }

    mapping(bytes32 => Hold) internal holds;
    mapping(address => uint256) private heldBalance;
    mapping(address => mapping(address => bool)) private operators;

    uint256 private _totalHeldBalance;

    function hold(
        string memory operationId,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) public returns (bool)
    {
        require(to != address(0), "Payee address must not be zero address");

        emit HoldCreated(
            msg.sender,
            operationId,
            msg.sender,
            to,
            notary,
            value,
            timeToExpiration
        );

        return _hold(
            operationId,
            msg.sender,
            msg.sender,
            to,
            notary,
            value,
            timeToExpiration
        );
    }

    function holdFrom(
        string memory operationId,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) public returns (bool)
    {
        require(to != address(0), "Payee address must not be zero address");
        require(from != address(0), "Payer address must not be zero address");
        require(operators[from][msg.sender], "This operator is not authorized");

        emit HoldCreated(
            msg.sender,
            operationId,
            from,
            to,
            notary,
            value,
            timeToExpiration
        );

        return _hold(
            operationId,
            msg.sender,
            from,
            to,
            notary,
            value,
            timeToExpiration
        );
    }

    function releaseHold(string memory operationId) public returns (bool) {
        Hold storage releasableHold = holds[operationId.toHash()];

        require(releasableHold.status == HoldStatusCode.Ordered || releasableHold.status == HoldStatusCode.ExecutedAndKeptOpen,"A hold can only be released in status Ordered or ExecutedAndKeptOpen");
        require(
            _isExpired(releasableHold.expiration) ||
            (msg.sender == releasableHold.notary) ||
            (msg.sender == releasableHold.target),
            "A not expired hold can only be released by the notary or the payee"
        );

        _releaseHold(operationId);

        emit HoldReleased(releasableHold.issuer, operationId, releasableHold.status);

        return true;
    }

    function executeHold(string memory operationId, uint256 value) public returns (bool) { 
        return _executeHold(operationId, value, false);
    }

    function executeHoldAndKeepOpen(string memory operationId, uint256 value) public returns (bool) {
        return _executeHold(operationId, value, true);
    }


    function _executeHold(string memory operationId, uint256 value, bool keepOpenIfHoldHasBalance) internal returns (bool) {

        Hold storage executableHold = holds[operationId.toHash()];

        require(executableHold.status == HoldStatusCode.Ordered || executableHold.status == HoldStatusCode.ExecutedAndKeptOpen,"A hold can only be executed in status Ordered or ExecutedAndKeptOpen");
        require(value != 0, "Value must be greater than zero");
        require(executableHold.notary == msg.sender, "The hold can only be executed by the notary");
        require(!_isExpired(executableHold.expiration), "The hold has already expired");
        require(value <= executableHold.value, "The value should be equal or less than the held amount");


        if (keepOpenIfHoldHasBalance && ((executableHold.value - value) > 0)) {
            _decreaseHeldBalance(operationId, value);
            _setHoldToExecutedAndKeptOpen(operationId, value); 
        }else {
            _decreaseHeldBalance(operationId, executableHold.value);
            _setHoldToExecuted(operationId, value);
        }
        
  
        

        _transfer(executableHold.origin, executableHold.target, value);

        return true;
    }


    function renewHold(string memory operationId, uint256 timeToExpiration) public returns (bool) {
        Hold storage renewableHold = holds[operationId.toHash()];

        require(renewableHold.status == HoldStatusCode.Ordered, "A hold can only be renewed in status Ordered");
        require(!_isExpired(renewableHold.expiration), "An expired hold can not be renewed");
        require(
            renewableHold.origin == msg.sender || renewableHold.issuer == msg.sender,
            "The hold can only be renewed by the issuer or the payer"
        );

        uint256 oldExpiration = renewableHold.expiration;

        if (timeToExpiration == 0) {
            renewableHold.expiration = 0;
        } else {
            /* solium-disable-next-line security/no-block-members */
            renewableHold.expiration = now.add(timeToExpiration);
        }

        emit HoldRenewed(
            renewableHold.issuer,
            operationId,
            oldExpiration,
            renewableHold.expiration
        );

        return true;
    }

    function retrieveHoldData(string memory operationId) public view returns (
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 expiration,
        HoldStatusCode status)
    {
        Hold storage retrievedHold = holds[operationId.toHash()];
        return (
            retrievedHold.origin,
            retrievedHold.target,
            retrievedHold.notary,
            retrievedHold.value,
            retrievedHold.expiration,
            retrievedHold.status
        );
    }

    function balanceOnHold(address account) public view returns (uint256) {
        return heldBalance[account];
    }

    function netBalanceOf(address account) public view returns (uint256) {
        return super.balanceOf(account);
    }

    function totalSupplyOnHold() public view returns (uint256) {
        return _totalHeldBalance;
    }

    function isHoldOperatorFor(address operator, address from) public view returns (bool) {
        return operators[from][operator];
    }

    function authorizeHoldOperator(address operator) public returns (bool) {
        require (operators[msg.sender][operator] == false, "The operator is already authorized");

        operators[msg.sender][operator] = true;
        emit AuthorizedHoldOperator(operator, msg.sender);
        return true;
    }

    function revokeHoldOperator(address operator) public returns (bool) {
        require (operators[msg.sender][operator] == true, "The operator is already not authorized");

        operators[msg.sender][operator] = false;
        emit RevokedHoldOperator(operator, msg.sender);
        return true;
    }

    /// @notice Retrieve the erc20.balanceOf(account) - heldBalance(account)
    function balanceOf(address account) public view returns (uint256) {
        return super.balanceOf(account).sub(heldBalance[account]);
    }

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(balanceOf(msg.sender) >= _value, "Not enough available balance");
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(balanceOf(_from) >= _value, "Not enough available balance");
        return super.transferFrom(_from, _to, _value);
    }

    function _isExpired(uint256 expiration) internal view returns (bool) {
        /* solium-disable-next-line security/no-block-members */
        return expiration != 0 && (now >= expiration);
    }

    function _hold(
        string memory operationId,
        address issuer,
        address from,
        address to,
        address notary,
        uint256 value,
        uint256 timeToExpiration
    ) internal returns (bool)
    {
        Hold storage newHold = holds[operationId.toHash()];

        require(!operationId.isEmpty(), "Operation ID must not be empty");
        require(value != 0, "Value must be greater than zero");
        require(newHold.value == 0, "This operationId already exists");
        require(notary != address(0), "Notary address must not be zero address");
        require(value <= balanceOf(from), "Amount of the hold can't be greater than the balance of the origin");

        newHold.issuer = issuer;
        newHold.origin = from;
        newHold.target = to;
        newHold.notary = notary;
        newHold.value = value;
        newHold.status = HoldStatusCode.Ordered;

        if (timeToExpiration != 0) {
            /* solium-disable-next-line security/no-block-members */
            newHold.expiration = now.add(timeToExpiration);
        }

        heldBalance[from] = heldBalance[from].add(value);
        _totalHeldBalance = _totalHeldBalance.add(value);

        return true;
    }

    function _releaseHold(string memory operationId) internal returns (bool) {
        Hold storage releasableHold = holds[operationId.toHash()];

        if (_isExpired(releasableHold.expiration)) {
            releasableHold.status = HoldStatusCode.ReleasedOnExpiration;
        } else {
            if (releasableHold.notary == msg.sender) {
                releasableHold.status = HoldStatusCode.ReleasedByNotary;
            } else {
                releasableHold.status = HoldStatusCode.ReleasedByPayee;
            }
        }

        heldBalance[releasableHold.origin] = heldBalance[releasableHold.origin].sub(releasableHold.value);
        _totalHeldBalance = _totalHeldBalance.sub(releasableHold.value);

        return true;
    }

    function _setHoldToExecuted(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        executableHold.status = HoldStatusCode.Executed;

        emit HoldExecuted(
            executableHold.issuer, 
            operationId,
            executableHold.notary,
            executableHold.value,
            value
        );
    }

    function _setHoldToExecutedAndKeptOpen(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        executableHold.status = HoldStatusCode.ExecutedAndKeptOpen;
        executableHold.value = executableHold.value.sub(value);

        emit HoldExecutedAndKeptOpen(
            executableHold.issuer,
            operationId,
            executableHold.notary,
            executableHold.value,
            value
            );
    }

    function _decreaseHeldBalance(string memory operationId, uint256 value) internal {
        Hold storage executableHold = holds[operationId.toHash()];
        heldBalance[executableHold.origin] = heldBalance[executableHold.origin].sub(value);
        _totalHeldBalance = _totalHeldBalance.sub(value);
    }
}

// File: contracts/Payoutable.sol
pragma solidity >=0.5.0;



// modification: allow Suspense --> User
contract Payoutable is IPayoutable, Holdable {

    struct OrderedPayout {
        string instructions;
        PayoutStatusCode status;
    }

    mapping(bytes32 => OrderedPayout) private orderedPayouts;
    mapping(address => mapping(address => bool)) private payoutOperators;
    address public payoutAgent;
    address public suspenseAccount;

    constructor(address _suspenseAccount) public {
        require(_suspenseAccount != address(0), "Suspense account must not be the zero address");
        suspenseAccount = _suspenseAccount;

        payoutAgent = _suspenseAccount;
    }

    function orderPayout(string calldata operationId, uint256 value, string calldata instructions) external returns (bool) {
        _orderPayout(
            msg.sender,
            operationId,
            msg.sender,
            value,
            instructions
        );

        emit PayoutOrdered(
            msg.sender,
            operationId,
            msg.sender,
            value,
            instructions
        );

        return true;
    }

    function orderPayoutFrom(
        string calldata operationId,
        address walletToBePaidOut,
        uint256 value,
        string calldata instructions
    ) external returns (bool)
    {
        require(walletToBePaidOut != address(0), "walletToBePaidOut address must not be zero address");
        require(payoutOperators[walletToBePaidOut][msg.sender], "This operator is not authorized");

        emit PayoutOrdered(
            msg.sender,
            operationId,
            walletToBePaidOut,
            value,
            instructions
        );

        return _orderPayout(
            msg.sender,
            operationId,
            walletToBePaidOut,
            value,
            instructions
        );
    }

    function cancelPayout(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage cancelablePayout = orderedPayouts[operationIdHash];
        Hold storage cancelableHold = holds[operationIdHash];

        require(cancelablePayout.status == PayoutStatusCode.Ordered, "A payout can only be cancelled in status Ordered");
        require(
            msg.sender == cancelableHold.issuer || msg.sender == cancelableHold.origin,
            "A payout can only be cancelled by the orderer or the walletToBePaidOut"
        );

        _releaseHold(operationId);

        cancelablePayout.status = PayoutStatusCode.Cancelled;

        emit PayoutCancelled(
            cancelableHold.issuer,
            operationId
        );

        return true;
    }

    function processPayout(string calldata operationId) external returns (bool) {
        revert("Function not supported in this implementation");
    }

    function putFundsInSuspenseInPayout(string calldata operationId) external returns (bool) {
        revert("Function not supported in this implementation");
    }

    event PayoutFundsReady(string operationId, uint256 amount, string instructions);
    function transferPayoutToSuspenseAccount(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage inSuspensePayout = orderedPayouts[operationIdHash];

        require(inSuspensePayout.status == PayoutStatusCode.Ordered, "A payout can only be set to FundsInSuspense from status Ordered");
        require(msg.sender == payoutAgent, "A payout can only be set to in suspense by the payout agent");

        Hold storage inSuspenseHold = holds[operationIdHash];

        super._transfer(inSuspenseHold.origin, inSuspenseHold.target, inSuspenseHold.value);
        super._setHoldToExecuted(operationId, inSuspenseHold.value);

        _releaseHold(operationId);
        inSuspensePayout.status = PayoutStatusCode.FundsInSuspense;

        emit PayoutFundsInSuspense(
            inSuspenseHold.issuer,
            operationId
        );

        emit PayoutFundsReady(
            operationId,
            inSuspenseHold.value,
            inSuspensePayout.instructions
        );

        return true;
    }

    // New
    event PayoutFundsReturned(string operationId);
    function returnPayoutFromSuspenseAccount(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage inSuspensePayout = orderedPayouts[operationIdHash];

        require(inSuspensePayout.status == PayoutStatusCode.FundsInSuspense, "A payout can only be set back to Ordered from status FundsInSuspense");
        require(msg.sender == payoutAgent, "A payout can only be set back to Ordered by the payout agent");

        Hold storage inSuspenseHold = holds[operationIdHash];

        super._transfer(inSuspenseHold.target, inSuspenseHold.origin, inSuspenseHold.value);

        inSuspensePayout.status = PayoutStatusCode.Ordered;

        emit PayoutFundsReturned(
            operationId
        );

        return true;
    }

    function executePayout(string calldata operationId) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage executedPayout = orderedPayouts[operationIdHash];

        require(executedPayout.status == PayoutStatusCode.FundsInSuspense, "A payout can only be executed from status FundsInSuspense");
        require(msg.sender == payoutAgent, "A payout can only be executed by the payout agent");

        Hold storage executedHold = holds[operationIdHash];

        _burn(executedHold.target, executedHold.value);

        executedPayout.status = PayoutStatusCode.Executed;

        emit PayoutExecuted(
            executedHold.issuer,
            operationId
        );

        return true;
    }

    function rejectPayout(string calldata operationId, string calldata reason) external returns (bool) {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage rejectedPayout = orderedPayouts[operationIdHash];

        require(rejectedPayout.status == PayoutStatusCode.Ordered, "A payout can only be rejected from status Ordered");
        require(msg.sender == payoutAgent, "A payout can only be rejected by the payout agent");

        Hold storage rejectedHold = holds[operationIdHash];

        rejectedPayout.status = PayoutStatusCode.Rejected;

        emit PayoutRejected(
            rejectedHold.issuer,
            operationId,
            reason
        );

        return true;
    }

    function retrievePayoutData(string calldata operationId) external view returns (
        address walletToDebit,
        uint256 value,
        string memory instructions,
        PayoutStatusCode status
    )
    {
        bytes32 operationIdHash = operationId.toHash();

        OrderedPayout storage retrievedPayout = orderedPayouts[operationIdHash];
        Hold storage retrievedHold = holds[operationIdHash];

        return (
            retrievedHold.origin,
            retrievedHold.value,
            retrievedPayout.instructions,
            retrievedPayout.status
        );
    }

    function isPayoutOperatorFor(address operator, address from) external view returns (bool) {
        return payoutOperators[from][operator];
    }

    function authorizePayoutOperator(address operator) external returns (bool) {
        require(payoutOperators[msg.sender][operator] == false, "The operator is already authorized");

        payoutOperators[msg.sender][operator] = true;
        emit AuthorizedPayoutOperator(operator, msg.sender);
        return true;
    }

    function revokePayoutOperator(address operator) external returns (bool) {
        require(payoutOperators[msg.sender][operator], "The operator is already not authorized");

        payoutOperators[msg.sender][operator] = false;
        emit RevokedPayoutOperator(operator, msg.sender);
        return true;
    }

    function _orderPayout(
        address orderer,
        string memory operationId,
        address walletToBePaidOut,
        uint256 value,
        string memory instructions
    ) internal returns (bool)
    {
        OrderedPayout storage newPayout = orderedPayouts[operationId.toHash()];

        require(!instructions.isEmpty(), "Instructions must not be empty");

        newPayout.instructions = instructions;
        newPayout.status = PayoutStatusCode.Ordered;

        return _hold(
            operationId,
            orderer,
            walletToBePaidOut,
            suspenseAccount,
            payoutAgent,
            value,
            0
        );
    }
}

// File: contracts/Token.sol
pragma solidity >=0.5.0;



contract wHBAR is Payoutable, AccountCreator {
    string _name;
    string _symbol;
    uint8 _decimals;

    address _owner;

    uint256 _accountCreateFee;
    
    constructor(
        string memory __name,
        string memory __symbol,
        uint8 __decimals,
        address __customOwner

    )
    public
    Payoutable(__customOwner) 
    AccountCreator(__customOwner, 50000000000000) 
    { // AccountCreator ERC20 Holdable SafeMath, 50k gwei hedera account creation fee
        _name = __name;
        _symbol = __symbol;
        _decimals = __decimals;
        _owner = __customOwner;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function mint(address to, uint256 amount) public returns (bool) {
        require(_msgSender() == _owner, "unauthorized");
        super._mint(to, amount);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"address","name":"__customOwner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AuthorizedHoldOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AuthorizedPayoutOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"CreateAccountFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"id","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"refundAmountWei","type":"uint256"}],"name":"CreateAccountRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"}],"name":"CreateAccountRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"string","name":"hederaPublicKey","type":"string"},{"indexed":false,"internalType":"string","name":"hederaAccountId","type":"string"}],"name":"CreateAccountSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"HoldCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"heldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferredValue","type":"uint256"}],"name":"HoldExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"notary","type":"address"},{"indexed":false,"internalType":"uint256","name":"heldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferredValue","type":"uint256"}],"name":"HoldExecutedAndKeptOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"enum IHoldable.HoldStatusCode","name":"status","type":"uint8"}],"name":"HoldReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holdIssuer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldExpiration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newExpiration","type":"uint256"}],"name":"HoldRenewed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutFundsInSuspense","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"instructions","type":"string"}],"name":"PayoutFundsReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutFundsReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"}],"name":"PayoutInProcess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":true,"internalType":"address","name":"walletToDebit","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"instructions","type":"string"}],"name":"PayoutOrdered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"orderer","type":"address"},{"indexed":false,"internalType":"string","name":"operationId","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"PayoutRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RevokedHoldOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RevokedPayoutOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"accountCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeHoldOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizePayoutOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOnHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"cancelPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"hederaPublicKey","type":"string"}],"name":"createAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"createAccountFail","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"createAccountRefund","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"hederaAccountId","type":"string"}],"name":"createAccountSuccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"executeHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"executeHoldAndKeepOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"executePayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAccountCreationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAccountCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"hold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"holdFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"isHoldOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"}],"name":"isPayoutOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"netBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"}],"name":"orderPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"address","name":"walletToBePaidOut","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"}],"name":"orderPayoutFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payoutAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"processPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"putFundsInSuspenseInPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"rejectPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"releaseHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"},{"internalType":"uint256","name":"timeToExpiration","type":"uint256"}],"name":"renewHold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"retrieveHoldData","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"notary","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"enum IHoldable.HoldStatusCode","name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"retrievePayoutData","outputs":[{"internalType":"address","name":"walletToDebit","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"instructions","type":"string"},{"internalType":"enum IPayoutable.PayoutStatusCode","name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"returnPayoutFromSuspenseAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeHoldOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokePayoutOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"setAccountCreationFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"suspenseAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyOnHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"operationId","type":"string"}],"name":"transferPayoutToSuspenseAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620058ac380380620058ac833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060409081526020820151910151909250905080652d79883d2000816001600160a01b038116620001fb5760405162461bcd60e51b815260040180806020018281038252602d8152602001806200587f602d913960400191505060405180910390fd5b600a80546001600160a01b039283166001600160a01b03199182168117909255600980548216909217909155600c805494909216931692909217909155600d5583516200025090600e906020870190620002a3565b5082516200026690600f906020860190620002a3565b50601080546001600160a01b0390921661010002610100600160a81b031960ff90941660ff19909316929092179290921617905550620003489050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002e657805160ff191683800117855562000316565b8280016001018555821562000316579182015b8281111562000316578251825591602001919060010190620002f9565b506200032492915062000328565b5090565b6200034591905b808211156200032457600081556001016200032f565b90565b61552780620003586000396000f3fe60806040526004361061022e5760003560e01c806306fdde0314610233578063095ea7b3146102bd5780630ab5555d1461030a5780630b986a50146103345780630cd6300614610379578063174d988a146103ac57806318160ddd146103dd57806319289287146103f257806323b872dd146104b057806324cc7076146104f3578063264b44d51461056e57806330dfa9d5146105e9578063313ce5671461061c57806336c8773f14610647578063395093511461067a57806340c10f19146106b3578063473dbde8146106ec5780634cb0267f146107015780634f6c0edf1461082f57806351bfb9611461090f578063604015811461092457806367bf10301461095f5780636ce4814d1461097457806370a08231146109ef57806373fb44c614610a225780637649c6d114610a9d5780637840499914610ad05780638da5cb5b14610b9e5780638e4a5a9214610bb357806395d89b4114610c64578063a457c2d714610c79578063a9059cbb14610cb2578063abb80b4214610ceb578063abd3bd1914610d9e578063b03a635f14610e69578063b1a1322c14610ee4578063b39832d414610faf578063b89b204e1461107e578063c2ac5b5c14611149578063c5a468c614611184578063c5b670f0146111b7578063d7faaf5c1461128e578063da7d3d0414611309578063da84e00014610a22578063dd62ed3e146113bc578063e83c4671146113f7578063ec38b2291461151f578063f124f7f4146115d2578063fa62edc1146115e7575b600080fd5b34801561023f57600080fd5b506102486115fc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c957600080fd5b506102f6600480360360408110156102e057600080fd5b506001600160a01b038135169060200135611693565b604080519115158252519081900360200190f35b34801561031657600080fd5b506102f66004803603602081101561032d57600080fd5b50356116b0565b34801561034057600080fd5b506103676004803603602081101561035757600080fd5b50356001600160a01b0316611705565b60408051918252519081900360200190f35b34801561038557600080fd5b506102f66004803603602081101561039c57600080fd5b50356001600160a01b0316611716565b3480156103b857600080fd5b506103c16117d2565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b506103676117e1565b6102f66004803603604081101561040857600080fd5b810190602081018135600160201b81111561042257600080fd5b82018360208201111561043457600080fd5b803590602001918460018302840111600160201b8311171561045557600080fd5b919390929091602081019035600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460018302840111600160201b831117156104a557600080fd5b5090925090506117e7565b3480156104bc57600080fd5b506102f6600480360360608110156104d357600080fd5b506001600160a01b038135811691602081013590911690604001356118df565b3480156104ff57600080fd5b506102f66004803603602081101561051657600080fd5b810190602081018135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460018302840111600160201b8311171561056357600080fd5b509092509050611950565b34801561057a57600080fd5b506102f66004803603602081101561059157600080fd5b810190602081018135600160201b8111156105ab57600080fd5b8201836020820111156105bd57600080fd5b803590602001918460018302840111600160201b831117156105de57600080fd5b509092509050611c62565b3480156105f557600080fd5b506102f66004803603602081101561060c57600080fd5b50356001600160a01b0316611e38565b34801561062857600080fd5b50610631611ef8565b6040805160ff9092168252519081900360200190f35b34801561065357600080fd5b506102f66004803603602081101561066a57600080fd5b50356001600160a01b0316611f01565b34801561068657600080fd5b506102f66004803603604081101561069d57600080fd5b506001600160a01b038135169060200135611fc2565b3480156106bf57600080fd5b506102f6600480360360408110156106d657600080fd5b506001600160a01b03813516906020013561201b565b3480156106f857600080fd5b506103c161208b565b34801561070d57600080fd5b506107b26004803603602081101561072457600080fd5b810190602081018135600160201b81111561073e57600080fd5b82018360208201111561075057600080fd5b803590602001918460018302840111600160201b8311171561077157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061209a945050505050565b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200182600681111561081657fe5b60ff168152602001965050505050505060405180910390f35b34801561083b57600080fd5b506102f66004803603608081101561085257600080fd5b810190602081018135600160201b81111561086c57600080fd5b82018360208201111561087e57600080fd5b803590602001918460018302840111600160201b8311171561089f57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050612108565b34801561091b57600080fd5b506103676122ce565b34801561093057600080fd5b506102f66004803603604081101561094757600080fd5b506001600160a01b03813581169160200135166122d4565b34801561096b57600080fd5b506103c1612303565b34801561098057600080fd5b506102f66004803603602081101561099757600080fd5b810190602081018135600160201b8111156109b157600080fd5b8201836020820111156109c357600080fd5b803590602001918460018302840111600160201b831117156109e457600080fd5b509092509050612312565b3480156109fb57600080fd5b5061036760048036036020811015610a1257600080fd5b50356001600160a01b03166124ae565b348015610a2e57600080fd5b506102f660048036036020811015610a4557600080fd5b810190602081018135600160201b811115610a5f57600080fd5b820183602082011115610a7157600080fd5b803590602001918460018302840111600160201b83111715610a9257600080fd5b5090925090506124e0565b348015610aa957600080fd5b506102f660048036036020811015610ac057600080fd5b50356001600160a01b0316612519565b348015610adc57600080fd5b506102f6600480360360a0811015610af357600080fd5b810190602081018135600160201b811115610b0d57600080fd5b820183602082011115610b1f57600080fd5b803590602001918460018302840111600160201b83111715610b4057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060013590506125d9565b348015610baa57600080fd5b506103c1612718565b348015610bbf57600080fd5b506102f660048036036020811015610bd657600080fd5b810190602081018135600160201b811115610bf057600080fd5b820183602082011115610c0257600080fd5b803590602001918460018302840111600160201b83111715610c2357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061272c945050505050565b348015610c7057600080fd5b5061024861290f565b348015610c8557600080fd5b506102f660048036036040811015610c9c57600080fd5b506001600160a01b038135169060200135612970565b348015610cbe57600080fd5b506102f660048036036040811015610cd557600080fd5b506001600160a01b0381351690602001356129de565b348015610cf757600080fd5b506102f660048036036040811015610d0e57600080fd5b810190602081018135600160201b811115610d2857600080fd5b820183602082011115610d3a57600080fd5b803590602001918460018302840111600160201b83111715610d5b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612a4d915050565b348015610daa57600080fd5b506102f660048036036040811015610dc157600080fd5b810190602081018135600160201b811115610ddb57600080fd5b820183602082011115610ded57600080fd5b803590602001918460018302840111600160201b83111715610e0e57600080fd5b919390929091602081019035600160201b811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b803590602001918460018302840111600160201b83111715610e5e57600080fd5b509092509050612a5b565b348015610e7557600080fd5b506102f660048036036020811015610e8c57600080fd5b810190602081018135600160201b811115610ea657600080fd5b820183602082011115610eb857600080fd5b803590602001918460018302840111600160201b83111715610ed957600080fd5b509092509050612c87565b348015610ef057600080fd5b506102f660048036036040811015610f0757600080fd5b810190602081018135600160201b811115610f2157600080fd5b820183602082011115610f3357600080fd5b803590602001918460018302840111600160201b83111715610f5457600080fd5b919390929091602081019035600160201b811115610f7157600080fd5b820183602082011115610f8357600080fd5b803590602001918460018302840111600160201b83111715610fa457600080fd5b509092509050612e27565b348015610fbb57600080fd5b506102f660048036036060811015610fd257600080fd5b810190602081018135600160201b811115610fec57600080fd5b820183602082011115610ffe57600080fd5b803590602001918460018302840111600160201b8311171561101f57600080fd5b91939092823592604081019060200135600160201b81111561104057600080fd5b82018360208201111561105257600080fd5b803590602001918460018302840111600160201b8311171561107357600080fd5b509092509050612fdd565b34801561108a57600080fd5b506102f6600480360360408110156110a157600080fd5b810190602081018135600160201b8111156110bb57600080fd5b8201836020820111156110cd57600080fd5b803590602001918460018302840111600160201b831117156110ee57600080fd5b919390929091602081019035600160201b81111561110b57600080fd5b82018360208201111561111d57600080fd5b803590602001918460018302840111600160201b8311171561113e57600080fd5b5090925090506130fa565b34801561115557600080fd5b506102f66004803603604081101561116c57600080fd5b506001600160a01b0381358116916020013516613334565b34801561119057600080fd5b50610367600480360360208110156111a757600080fd5b50356001600160a01b0316613363565b3480156111c357600080fd5b506102f6600480360360c08110156111da57600080fd5b810190602081018135600160201b8111156111f457600080fd5b82018360208201111561120657600080fd5b803590602001918460018302840111600160201b8311171561122757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602084013581169360408101359091169250606081013591506080013561337e565b34801561129a57600080fd5b506102f6600480360360208110156112b157600080fd5b810190602081018135600160201b8111156112cb57600080fd5b8201836020820111156112dd57600080fd5b803590602001918460018302840111600160201b831117156112fe57600080fd5b50909250905061355e565b34801561131557600080fd5b506102f66004803603604081101561132c57600080fd5b810190602081018135600160201b81111561134657600080fd5b82018360208201111561135857600080fd5b803590602001918460018302840111600160201b8311171561137957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506136eb915050565b3480156113c857600080fd5b50610367600480360360408110156113df57600080fd5b506001600160a01b03813581169160200135166136f9565b34801561140357600080fd5b506114726004803603602081101561141a57600080fd5b810190602081018135600160201b81111561143457600080fd5b82018360208201111561144657600080fd5b803590602001918460018302840111600160201b8311171561146757600080fd5b509092509050613724565b60405180856001600160a01b03166001600160a01b03168152602001848152602001806020018360068111156114a457fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156114e15781810151838201526020016114c9565b50505050905090810190601f16801561150e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561152b57600080fd5b506102f66004803603604081101561154257600080fd5b810190602081018135600160201b81111561155c57600080fd5b82018360208201111561156e57600080fd5b803590602001918460018302840111600160201b8311171561158f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061384d915050565b3480156115de57600080fd5b506103c1613a5e565b3480156115f357600080fd5b50610367613a6d565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b505050505090505b90565b60006116a76116a0613a73565b8484613a77565b50600192915050565b600c546000906001600160a01b031633146116fc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b50600d55600190565b600061171082613b63565b92915050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff166117785760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f310d4cbf7ddcbf3169fb9371662fdfdfd6be42d3c1faed93bb0ec2f5173ce9b791a3506001919050565b600c546001600160a01b031690565b60025490565b6000600d5434146118295760405162461bcd60e51b81526004018080602001828103825260308152602001806153316030913960400191505060405180910390fd5b600c546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611862573d6000803e3d6000fd5b506118d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613b7e92505050565b95945050505050565b6000816118eb856124ae565b101561193d576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b611948848484613d73565b949350505050565b60008061199284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff1660068111156119b757fe5b146119f35760405162461bcd60e51b815260040180806020018281038252603f815260200180614e44603f913960400191505060405180910390fd5b6009546001600160a01b03163314611a3c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061543b603b913960400191505060405180910390fd5b6000828152600360205260409020600181015460028201546005830154611a70926001600160a01b03908116921690613e8d565b611ab386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506005830154613fd7565b611af286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166003179055805460408051602080825281018890526001600160a01b03909216917f451f61007271790232845a513d5966bccacab4d17e29a9995c7ccbaa940e6fc5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a27f085d7f4eb5ec120940eff725bef88dceeb82326ffedf842de5b4cc0b3697cd1b86868360050154856000016040518080602001848152602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528554600260001961010060018416150201909116048082526020909101915085908015611c445780601f10611c1957610100808354040283529160200191611c44565b820191906000526020600020905b815481529060010190602001808311611c2757829003601f168201915b5050965050505050505060405180910390a150600195945050505050565b600080611ca484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020908152604080832060039092529091209192509060018083015460ff166006811115611cd557fe5b14611d115760405162461bcd60e51b8152600401808060200182810382526030815260200180614ef76030913960400191505060405180910390fd5b80546001600160a01b0316331480611d35575060018101546001600160a01b031633145b611d705760405162461bcd60e51b8152600401808060200182810382526046815260200180614d2a6046913960600191505060405180910390fd5b611daf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166006179055805460408051602080825281018890526001600160a01b03909216917f6ef2e76d8eadaf1eadb34e35d630315078941cb5ae013c870d1268c0fb67ff92918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff1615611e9b5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917ffe9272e2e39a0471797d14bdcbd79ab868dd481d19256b15a886c1213b983ddf91a3506001919050565b60105460ff1690565b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161515600114611f685760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f2e96d672cd86b559c08b9503df494f90c7766b7804ed5c650d0adde07cdf483f91a3506001919050565b60006116a7611fcf613a73565b846120168560016000611fe0613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6141d316565b613a77565b60105460009061010090046001600160a01b0316612037613a73565b6001600160a01b031614612081576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6116a7838361422b565b600a546001600160a01b031681565b6000806000806000806000600360006120b28a613dfb565b81526020810191909152604001600020600181015460028201546003830154600584015460048501546006909501546001600160a01b039485169e9385169d50939091169a50985091965060ff16945092505050565b60006001600160a01b03851661214f5760405162461bcd60e51b815260040180806020018281038252603281526020018061512d6032913960400191505060405180910390fd5b6001600160a01b038516600090815260086020908152604080832033845290915290205460ff166121b5576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b846001600160a01b0316336001600160a01b031660008051602061508f83398151915289898888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a36122c33388888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528b93508a925090899089908190840183828082843760009201919091525061430992505050565b979650505050505050565b60065490565b6001600160a01b0380821660009081526008602090815260408083209386168352929052205460ff1692915050565b6009546001600160a01b031681565b60008061235484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff16600681111561237a57fe5b146123b65760405162461bcd60e51b815260040180806020018281038252604481526020018061501a6044913960600191505060405180910390fd5b6009546001600160a01b031633146123ff5760405162461bcd60e51b815260040180806020018281038252603c81526020018061515f603c913960400191505060405180910390fd5b6000828152600360205260409020600281015460018201546005830154612433926001600160a01b03908116921690613e8d565b6001828101805460ff1916909117905560408051602080825281018790527f766abd3a64bee5c3f0dd407ddcbc2bbcbb99100d725a88cb1ac43b962d41ce80918891889181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a150600195945050505050565b6001600160a01b038116600090815260046020526040812054611710906124d484613b63565b9063ffffffff6143cc16565b600060405162461bcd60e51b815260040180806020018281038252602d815260200180614e83602d913960400191505060405180910390fd5b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161561257c5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917fbb785bb78fa937a58ce1ce2c3a4bfdaf457b51bdedc3944e94c26d6777c7214a91a3506001919050565b60006001600160a01b0385166126205760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915288338988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156126c15781810151838201526020016126a9565b50505050905090810190601f1680156126ee5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a361270e8633338888888861440e565b9695505050505050565b60105461010090046001600160a01b031690565b6000806003600061273c85613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561276357fe5b14806127815750600360068083015460ff169081111561277f57fe5b145b6127bc5760405162461bcd60e51b8152600401808060200182810382526044815260200180614cc46044913960600191505060405180910390fd5b6127c98160040154614694565b806127e0575060038101546001600160a01b031633145b806127f7575060028101546001600160a01b031633145b6128325760405162461bcd60e51b81526004018080602001828103825260428152602001806152046042913960600191505060405180910390fd5b61283b836140dc565b5080546006808301546040516001600160a01b03909316927f4e48b247593fd0b3174316619f9274ea86db0ed03e691c2f8c4e0400e923375e92879260ff16919081906020820190849081111561288e57fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156128cb5781810151838201526020016128b3565b50505050905090810190601f1680156128f85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600192915050565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b60006116a761297d613a73565b846120168560405180606001604052806025815260200161549d60259139600160006129a7613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6146a716565b6000816129ea336124ae565b1015612a3c576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b612a46838361473e565b9392505050565b6000612a4683836001614752565b600c546000906001600160a01b03163314612aa75760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b6000612ae886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff166004811115612b0e57fe5b14612b4a5760405162461bcd60e51b8152600401808060200182810382526048815260200180614db86048913960600191505060405180910390fd5b60038101805460ff191660021790556001810154604080516001600160a01b0390921660208301819052608080845283018990527f1578cd46dfc61f5ed64ae02780d7de11d318753ba429fd6abcec24e5a56cddee928a928a929186918b918b91819081016060820160a083018a8a80828437600083820152601f01601f191690910185810384528854600260001961010060018416150201909116048082526020909101915088908015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a15060019695505050505050565b600080612cc984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff166006811115612cef57fe5b14612d2b5760405162461bcd60e51b81526004018080602001828103825260398152602001806153ac6039913960400191505060405180910390fd5b6009546001600160a01b03163314612d745760405162461bcd60e51b815260040180806020018281038252603181526020018061505e6031913960400191505060405180910390fd5b600082815260036020526040902060028101546005820154612d9f916001600160a01b031690614983565b60018201805460ff19166004179055805460408051602080825281018890526001600160a01b03909216917fae582f187de7234ff4da256268de739cdf3e9c284298c66f0b5b5712da128da5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b600080612e6986868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff166006811115612e8e57fe5b14612eca5760405162461bcd60e51b815260040180806020018281038252603181526020018061526b6031913960400191505060405180910390fd5b6009546001600160a01b03163314612f135760405162461bcd60e51b81526004018080602001828103825260318152602001806154c26031913960400191505060405180910390fd5b60008281526003602090815260409182902060018401805460ff19166005179055805483518481529384018a905290926001600160a01b03909116917f84992793c2d54d037b0e705937a2a092a41c7e9018a78da2195ca589cd5860fc918b918b918b918b91908190810160608201878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a2506001979650505050505050565b60006130573387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881523393508a925090899089908190840183828082843760009201919091525061430992505050565b50336001600160a01b0316336001600160a01b031660008051602061508f83398151915288888888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a350600195945050505050565b600c546000906001600160a01b031633146131465760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b600061318786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff1660048111156131ad57fe5b146131e95760405162461bcd60e51b8152600401808060200182810382526045815260200180614f276045913960600191505060405180910390fd5b6003818101805460ff1916909117905560018101546002820154604080516001600160a01b03909316602084018190526060840183905260a080855284018a90527f75a18f738a9a0c8b27f2fbf44c649f80dc607d0f394cf294aad2e0bb76f72b3c938b938b9387928c918c9190819081016080820160c083018b8b80828437600083820152601f01601f1916909101858103845289546002600019610100600184161502019091160480825260209091019150899080156132ec5780601f106132c1576101008083540402835291602001916132ec565b820191906000526020600020905b8154815290600101906020018083116132cf57829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a15060019695505050505050565b6001600160a01b0380821660009081526005602090815260408083209386168352929052205460ff1692915050565b6001600160a01b031660009081526004602052604090205490565b60006001600160a01b0385166133c55760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b6001600160a01b03861661340a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d926026913960400191505060405180910390fd5b6001600160a01b038616600090815260056020908152604080832033845290915290205460ff16613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915289898988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156135115781810151838201526020016134f9565b50505050905090810190601f16801561353e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36122c38733888888888861440e565b600c546000906001600160a01b031633146135aa5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b60006135eb84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b6020526040902090915060038082015460ff16600481111561361057fe5b1461364c5760405162461bcd60e51b81526004018080602001828103825260368152602001806154056036913960400191505060405180910390fd5b60038101805460ff1916600417905560018101546002820154604080516001600160a01b0390931660208401819052908301829052606080845283018790527f43af5daa4dba8ba628232d5a7a61ccf585df7a4d3298358cd2786456264c6d969288928892918060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a1506001949350505050565b6000612a4683836000614752565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080606060008061376b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600760209081526040808320600383529281902060018082015460058301548287015487548651600261010096831615969096026000190190911694909404601f8101889004880285018801909652858452979850959692956001600160a01b03909116949093879360ff1692918491908301828280156138325780601f1061380757610100808354040283529160200191613832565b820191906000526020600020905b81548152906001019060200180831161381557829003601f168201915b50505050509150965096509650965050505092959194509250565b6000806003600061385d86613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561388457fe5b146138c05760405162461bcd60e51b815260040180806020018281038252602c815260200180614fb7602c913960400191505060405180910390fd5b6138cd8160040154614694565b156139095760405162461bcd60e51b815260040180806020018281038252602281526020018061530f6022913960400191505060405180910390fd5b60018101546001600160a01b031633148061392d575080546001600160a01b031633145b6139685760405162461bcd60e51b8152600401808060200182810382526037815260200180614fe36037913960400191505060405180910390fd5b60048101548361397e5760006004830155613994565b61398e428563ffffffff6141d316565b60048301555b81546004830154604080516020808201869052918101839052606080825289519082015288516001600160a01b03909416937fab224ddedc192922a9caa9c23294ca7c6c25bd489024c2d08e16b8aaffce2486938a9387939192829160808301919087019080838360005b83811015613a175781810151838201526020016139ff565b50505050905090810190601f168015613a445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2506001949350505050565b600c546001600160a01b031681565b600d5490565b3390565b6001600160a01b038316613abc5760405162461bcd60e51b815260040180806020018281038252602481526020018061529c6024913960400191505060405180910390fd5b6001600160a01b038216613b015760405162461bcd60e51b8152600401808060200182810382526022815260200180614d706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b031660009081526020819052604090205490565b600080613b8a84613dfb565b6000818152600b60205260409020909150613ba484614a6d565b15613be05760405162461bcd60e51b8152600401808060200182810382526021815260200180614ed66021913960400191505060405180910390fd5b600281015415613c215760405162461bcd60e51b8152600401808060200182810382526025815260200180614f6c6025913960400191505060405180910390fd5b6001810180546001600160a01b031916331790558351613c479082906020870190614bc6565b5060038101805460ff1916600117905534600282015560408051336020808301829052606080845289519084015288517fbd4815905cf0865b10d3cf5d5a792b1063072ca973863448e47b3e7b209a5629948a948a939092839283019160808401919088019080838360005b83811015613ccb578181015183820152602001613cb3565b50505050905090810190601f168015613cf85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613d2b578181015183820152602001613d13565b50505050905090810190601f168015613d585780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b6000613d80848484613e8d565b613df184613d8c613a73565b6120168560405180606001604052806028815260200161519b602891396001600160a01b038a16600090815260016020526040812090613dca613a73565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6146a716565b5060019392505050565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015613e3e578181015183820152602001613e26565b50505050905090810190601f168015613e6b5780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001209050919050565b6001600160a01b038316613ed25760405162461bcd60e51b81526004018080602001828103825260258152602001806152466025913960400191505060405180910390fd5b6001600160a01b038216613f175760405162461bcd60e51b8152600401808060200182810382526023815260200180614c5f6023913960400191505060405180910390fd5b613f5a81604051806060016040528060268152602001614eb0602691396001600160a01b038616600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613f8f908263ffffffff6141d316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206151c383398151915292918290030190a3505050565b600060036000613fe685613dfb565b8152602081019190915260400160002060068101805491925060029160ff19166001830217905550600381015481546005830154604080516020808201849052918101879052606080825288519082015287516001600160a01b0395861695909416937f5c325a8e2c888924f4a27940863613323b3a56cfbbbf8ee144e180ab228e104c9389939092899290918291608083019187019080838360005b8381101561409b578181015183820152602001614083565b50505050905090810190601f1680156140c85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b600080600360006140ec85613dfb565b815260200190815260200160002090506141098160040154614694565b15614127576006818101805460ff19166001835b0217905550614162565b60038101546001600160a01b0316331415614152576006810180546004919060ff191660018361411d565b60068101805460ff191660051790555b600581015460018201546001600160a01b03166000908152600460205260409020546141939163ffffffff6143cc16565b60018201546001600160a01b031660009081526004602052604090205560058101546006546141c79163ffffffff6143cc16565b60065550600192915050565b600082820183811015612a46576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6001600160a01b038216614286576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254614299908263ffffffff6141d316565b6002556001600160a01b0382166000908152602081905260409020546142c5908263ffffffff6141d316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391926000805160206151c38339815191529281900390910190a35050565b6000806007600061431988613dfb565b8152602001908152602001600020905061433283614a6d565b15614384576040805162461bcd60e51b815260206004820152601e60248201527f496e737472756374696f6e73206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b82516143969082906020860190614bc6565b506001818101805460ff19169091179055600a546009546122c39188918a9189916001600160a01b03918216911689600061440e565b6000612a4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506146a7565b6000806003600061441e8b613dfb565b8152602001908152602001600020905061443789614a6d565b15614489576040805162461bcd60e51b815260206004820152601e60248201527f4f7065726174696f6e204944206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b836144c9576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b600581015415614520576040805162461bcd60e51b815260206004820152601f60248201527f54686973206f7065726174696f6e496420616c72656164792065786973747300604482015290519081900360640190fd5b6001600160a01b0385166145655760405162461bcd60e51b81526004018080602001828103825260278152602001806154766027913960400191505060405180910390fd5b61456e876124ae565b8411156145ac5760405162461bcd60e51b8152600401808060200182810382526042815260200180614c826042913960600191505060405180910390fd5b80546001600160a01b03199081166001600160a01b038a81169190911783556001808401805484168b841617905560028401805484168a8416179055600384018054909316918816919091179091556005820185905560068201805460ff19169091179055821561462d57614627428463ffffffff6141d316565b60048201555b6001600160a01b038716600090815260046020526040902054614656908563ffffffff6141d316565b6001600160a01b038816600090815260046020526040902055600654614682908563ffffffff6141d316565b60065550600198975050505050505050565b6000811580159061171057505042101590565b600081848411156147365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146fb5781810151838201526020016146e3565b50505050905090810190601f1680156147285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006116a761474b613a73565b8484613e8d565b6000806003600061476287613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561478957fe5b14806147a75750600360068083015460ff16908111156147a557fe5b145b6147e25760405162461bcd60e51b8152600401808060200182810382526044815260200180614e006044913960600191505060405180910390fd5b83614822576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b60038101546001600160a01b0316331461486d5760405162461bcd60e51b815260040180806020018281038252602b815260200180615381602b913960400191505060405180910390fd5b61487a8160040154614694565b156148cb576040805162461bcd60e51b815260206004820152601c60248201527b151a19481a1bdb19081a185cc8185b1c9958591e48195e1c1a5c995960221b604482015290519081900360640190fd5b806005015484111561490e5760405162461bcd60e51b81526004018080602001828103825260368152602001806150f76036913960400191505060405180910390fd5b8280156149215750600084826005015403115b1561493f576149308585614a72565b61493a8585614af8565b614957565b61494d858260050154614a72565b6149578585613fd7565b60018101546002820154614978916001600160a01b03908116911686613e8d565b506001949350505050565b6001600160a01b0382166149c85760405162461bcd60e51b81526004018080602001828103825260218152602001806151e36021913960400191505060405180910390fd5b614a0b81604051806060016040528060228152602001614d08602291396001600160a01b038516600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038316600090815260208190526040902055600254614a37908263ffffffff6143cc16565b6002556040805182815290516000916001600160a01b038516916000805160206151c38339815191529181900360200190a35050565b511590565b600060036000614a8185613dfb565b81526020808201929092526040908101600090812060018101546001600160a01b0316825260049093522054909150614ac0908363ffffffff6143cc16565b60018201546001600160a01b0316600090815260046020526040902055600654614af0908363ffffffff6143cc16565b600655505050565b600060036000614b0785613dfb565b8152602081019190915260400160002060068101805460ff191660031790556005810154909150614b3890836143cc565b6005820181905560038201548254604080516020808201869052918101879052606080825288519082015287516001600160a01b039485169594909316937f580d13b8c7eed8e88f52fc61856554268aa83422271759f5af5af20268411e4693899391928992909182916080830191908701908083836000831561409b578181015183820152602001614083565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c0757805160ff1916838001178555614c34565b82800160010185558215614c34579182015b82811115614c34578251825591602001919060010190614c19565b50614c40929150614c44565b5090565b61169091905b80821115614c405760008155600101614c4a56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206f662074686520686f6c642063616e27742062652067726561746572207468616e207468652062616c616e6365206f6620746865206f726967696e4120686f6c642063616e206f6e6c792062652072656c656173656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636541207061796f75742063616e206f6e6c792062652063616e63656c6c656420627920746865206f726465726572206f72207468652077616c6c6574546f4265506169644f757445524332303a20617070726f766520746f20746865207a65726f206164647265737350617965722061646472657373206d757374206e6f74206265207a65726f20616464726573734163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f2073746174757320436f6e6669726d65644120686f6c642063616e206f6e6c7920626520657865637574656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e41207061796f75742063616e206f6e6c792062652073657420746f2046756e6473496e53757370656e73652066726f6d20737461747573204f72646572656446756e6374696f6e206e6f7420737570706f7274656420696e207468697320696d706c656d656e746174696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365486564657261205075626c6963204b65792063616e6e6f7420626520656d70747941207061796f75742063616e206f6e6c792062652063616e63656c6c656420696e20737461747573204f7264657265644163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f20737461747573204661696c65644120726571756573742077697468207468697320696420616c72656164792065786973747350617965652061646472657373206d757374206e6f74206265207a65726f20616464726573734120686f6c642063616e206f6e6c792062652072656e6577656420696e20737461747573204f72646572656454686520686f6c642063616e206f6e6c792062652072656e657765642062792074686520697373756572206f722074686520706179657241207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f7264657265642066726f6d207374617475732046756e6473496e53757370656e736541207061796f75742063616e206f6e6c7920626520657865637574656420627920746865207061796f7574206167656e74dede0d220fbab7cb612b269ed216c1532317ffc2614e8965592747ec49087b70546865206f70657261746f7220697320616c7265616479206e6f7420617574686f72697a6564546865206f70657261746f7220697320616c726561647920617574686f72697a65645468652076616c75652073686f756c6420626520657175616c206f72206c657373207468616e207468652068656c6420616d6f756e7477616c6c6574546f4265506169644f75742061646472657373206d757374206e6f74206265207a65726f206164647265737341207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f72646572656420627920746865207061796f7574206167656e7445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737341206e6f74206578706972656420686f6c642063616e206f6e6c792062652072656c656173656420627920746865206e6f74617279206f722074686520706179656545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341207061796f75742063616e206f6e6c792062652072656a65637465642066726f6d20737461747573204f72646572656445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734f6e6c7920746865206163636f756e742063726561746f722063616e2063616c6c20746869732066756e6374696f6e8a1d1765ef42a1fb3d5b0e12ba4b1083e020407cb5ba8e07aaaacf610624aec9416e206578706972656420686f6c642063616e206e6f742062652072656e65776564496e636f72726563742066656520616d6f756e742c2063616c6c206765744163636f756e744372656174696f6e46656556616c7565206d7573742062652067726561746572207468616e207a65726f0054686520686f6c642063616e206f6e6c7920626520657865637574656420627920746865206e6f7461727941207061796f75742063616e206f6e6c792062652065786563757465642066726f6d207374617475732046756e6473496e53757370656e736554686973206f70657261746f72206973206e6f7420617574686f72697a6564004163636f756e742052657175657374206d757374206861766520737461747573204661696c656420746f20626520726566756e64656441207061796f75742063616e206f6e6c792062652073657420746f20696e2073757370656e736520627920746865207061796f7574206167656e744e6f746172792061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f41207061796f75742063616e206f6e6c792062652072656a656374656420627920746865207061796f7574206167656e74a265627a7a72315820b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb464736f6c634300050f003253757370656e7365206163636f756e74206d757374206e6f7420626520746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9000000000000000000000000000000000000000000000000000000000000000c577261707065642048626172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057748424152000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061022e5760003560e01c806306fdde0314610233578063095ea7b3146102bd5780630ab5555d1461030a5780630b986a50146103345780630cd6300614610379578063174d988a146103ac57806318160ddd146103dd57806319289287146103f257806323b872dd146104b057806324cc7076146104f3578063264b44d51461056e57806330dfa9d5146105e9578063313ce5671461061c57806336c8773f14610647578063395093511461067a57806340c10f19146106b3578063473dbde8146106ec5780634cb0267f146107015780634f6c0edf1461082f57806351bfb9611461090f578063604015811461092457806367bf10301461095f5780636ce4814d1461097457806370a08231146109ef57806373fb44c614610a225780637649c6d114610a9d5780637840499914610ad05780638da5cb5b14610b9e5780638e4a5a9214610bb357806395d89b4114610c64578063a457c2d714610c79578063a9059cbb14610cb2578063abb80b4214610ceb578063abd3bd1914610d9e578063b03a635f14610e69578063b1a1322c14610ee4578063b39832d414610faf578063b89b204e1461107e578063c2ac5b5c14611149578063c5a468c614611184578063c5b670f0146111b7578063d7faaf5c1461128e578063da7d3d0414611309578063da84e00014610a22578063dd62ed3e146113bc578063e83c4671146113f7578063ec38b2291461151f578063f124f7f4146115d2578063fa62edc1146115e7575b600080fd5b34801561023f57600080fd5b506102486115fc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c957600080fd5b506102f6600480360360408110156102e057600080fd5b506001600160a01b038135169060200135611693565b604080519115158252519081900360200190f35b34801561031657600080fd5b506102f66004803603602081101561032d57600080fd5b50356116b0565b34801561034057600080fd5b506103676004803603602081101561035757600080fd5b50356001600160a01b0316611705565b60408051918252519081900360200190f35b34801561038557600080fd5b506102f66004803603602081101561039c57600080fd5b50356001600160a01b0316611716565b3480156103b857600080fd5b506103c16117d2565b604080516001600160a01b039092168252519081900360200190f35b3480156103e957600080fd5b506103676117e1565b6102f66004803603604081101561040857600080fd5b810190602081018135600160201b81111561042257600080fd5b82018360208201111561043457600080fd5b803590602001918460018302840111600160201b8311171561045557600080fd5b919390929091602081019035600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460018302840111600160201b831117156104a557600080fd5b5090925090506117e7565b3480156104bc57600080fd5b506102f6600480360360608110156104d357600080fd5b506001600160a01b038135811691602081013590911690604001356118df565b3480156104ff57600080fd5b506102f66004803603602081101561051657600080fd5b810190602081018135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460018302840111600160201b8311171561056357600080fd5b509092509050611950565b34801561057a57600080fd5b506102f66004803603602081101561059157600080fd5b810190602081018135600160201b8111156105ab57600080fd5b8201836020820111156105bd57600080fd5b803590602001918460018302840111600160201b831117156105de57600080fd5b509092509050611c62565b3480156105f557600080fd5b506102f66004803603602081101561060c57600080fd5b50356001600160a01b0316611e38565b34801561062857600080fd5b50610631611ef8565b6040805160ff9092168252519081900360200190f35b34801561065357600080fd5b506102f66004803603602081101561066a57600080fd5b50356001600160a01b0316611f01565b34801561068657600080fd5b506102f66004803603604081101561069d57600080fd5b506001600160a01b038135169060200135611fc2565b3480156106bf57600080fd5b506102f6600480360360408110156106d657600080fd5b506001600160a01b03813516906020013561201b565b3480156106f857600080fd5b506103c161208b565b34801561070d57600080fd5b506107b26004803603602081101561072457600080fd5b810190602081018135600160201b81111561073e57600080fd5b82018360208201111561075057600080fd5b803590602001918460018302840111600160201b8311171561077157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061209a945050505050565b60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200182600681111561081657fe5b60ff168152602001965050505050505060405180910390f35b34801561083b57600080fd5b506102f66004803603608081101561085257600080fd5b810190602081018135600160201b81111561086c57600080fd5b82018360208201111561087e57600080fd5b803590602001918460018302840111600160201b8311171561089f57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050612108565b34801561091b57600080fd5b506103676122ce565b34801561093057600080fd5b506102f66004803603604081101561094757600080fd5b506001600160a01b03813581169160200135166122d4565b34801561096b57600080fd5b506103c1612303565b34801561098057600080fd5b506102f66004803603602081101561099757600080fd5b810190602081018135600160201b8111156109b157600080fd5b8201836020820111156109c357600080fd5b803590602001918460018302840111600160201b831117156109e457600080fd5b509092509050612312565b3480156109fb57600080fd5b5061036760048036036020811015610a1257600080fd5b50356001600160a01b03166124ae565b348015610a2e57600080fd5b506102f660048036036020811015610a4557600080fd5b810190602081018135600160201b811115610a5f57600080fd5b820183602082011115610a7157600080fd5b803590602001918460018302840111600160201b83111715610a9257600080fd5b5090925090506124e0565b348015610aa957600080fd5b506102f660048036036020811015610ac057600080fd5b50356001600160a01b0316612519565b348015610adc57600080fd5b506102f6600480360360a0811015610af357600080fd5b810190602081018135600160201b811115610b0d57600080fd5b820183602082011115610b1f57600080fd5b803590602001918460018302840111600160201b83111715610b4057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b0383358116945060208401351692604081013592506060013590506125d9565b348015610baa57600080fd5b506103c1612718565b348015610bbf57600080fd5b506102f660048036036020811015610bd657600080fd5b810190602081018135600160201b811115610bf057600080fd5b820183602082011115610c0257600080fd5b803590602001918460018302840111600160201b83111715610c2357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061272c945050505050565b348015610c7057600080fd5b5061024861290f565b348015610c8557600080fd5b506102f660048036036040811015610c9c57600080fd5b506001600160a01b038135169060200135612970565b348015610cbe57600080fd5b506102f660048036036040811015610cd557600080fd5b506001600160a01b0381351690602001356129de565b348015610cf757600080fd5b506102f660048036036040811015610d0e57600080fd5b810190602081018135600160201b811115610d2857600080fd5b820183602082011115610d3a57600080fd5b803590602001918460018302840111600160201b83111715610d5b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250612a4d915050565b348015610daa57600080fd5b506102f660048036036040811015610dc157600080fd5b810190602081018135600160201b811115610ddb57600080fd5b820183602082011115610ded57600080fd5b803590602001918460018302840111600160201b83111715610e0e57600080fd5b919390929091602081019035600160201b811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b803590602001918460018302840111600160201b83111715610e5e57600080fd5b509092509050612a5b565b348015610e7557600080fd5b506102f660048036036020811015610e8c57600080fd5b810190602081018135600160201b811115610ea657600080fd5b820183602082011115610eb857600080fd5b803590602001918460018302840111600160201b83111715610ed957600080fd5b509092509050612c87565b348015610ef057600080fd5b506102f660048036036040811015610f0757600080fd5b810190602081018135600160201b811115610f2157600080fd5b820183602082011115610f3357600080fd5b803590602001918460018302840111600160201b83111715610f5457600080fd5b919390929091602081019035600160201b811115610f7157600080fd5b820183602082011115610f8357600080fd5b803590602001918460018302840111600160201b83111715610fa457600080fd5b509092509050612e27565b348015610fbb57600080fd5b506102f660048036036060811015610fd257600080fd5b810190602081018135600160201b811115610fec57600080fd5b820183602082011115610ffe57600080fd5b803590602001918460018302840111600160201b8311171561101f57600080fd5b91939092823592604081019060200135600160201b81111561104057600080fd5b82018360208201111561105257600080fd5b803590602001918460018302840111600160201b8311171561107357600080fd5b509092509050612fdd565b34801561108a57600080fd5b506102f6600480360360408110156110a157600080fd5b810190602081018135600160201b8111156110bb57600080fd5b8201836020820111156110cd57600080fd5b803590602001918460018302840111600160201b831117156110ee57600080fd5b919390929091602081019035600160201b81111561110b57600080fd5b82018360208201111561111d57600080fd5b803590602001918460018302840111600160201b8311171561113e57600080fd5b5090925090506130fa565b34801561115557600080fd5b506102f66004803603604081101561116c57600080fd5b506001600160a01b0381358116916020013516613334565b34801561119057600080fd5b50610367600480360360208110156111a757600080fd5b50356001600160a01b0316613363565b3480156111c357600080fd5b506102f6600480360360c08110156111da57600080fd5b810190602081018135600160201b8111156111f457600080fd5b82018360208201111561120657600080fd5b803590602001918460018302840111600160201b8311171561122757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b03833581169450602084013581169360408101359091169250606081013591506080013561337e565b34801561129a57600080fd5b506102f6600480360360208110156112b157600080fd5b810190602081018135600160201b8111156112cb57600080fd5b8201836020820111156112dd57600080fd5b803590602001918460018302840111600160201b831117156112fe57600080fd5b50909250905061355e565b34801561131557600080fd5b506102f66004803603604081101561132c57600080fd5b810190602081018135600160201b81111561134657600080fd5b82018360208201111561135857600080fd5b803590602001918460018302840111600160201b8311171561137957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506136eb915050565b3480156113c857600080fd5b50610367600480360360408110156113df57600080fd5b506001600160a01b03813581169160200135166136f9565b34801561140357600080fd5b506114726004803603602081101561141a57600080fd5b810190602081018135600160201b81111561143457600080fd5b82018360208201111561144657600080fd5b803590602001918460018302840111600160201b8311171561146757600080fd5b509092509050613724565b60405180856001600160a01b03166001600160a01b03168152602001848152602001806020018360068111156114a457fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156114e15781810151838201526020016114c9565b50505050905090810190601f16801561150e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561152b57600080fd5b506102f66004803603604081101561154257600080fd5b810190602081018135600160201b81111561155c57600080fd5b82018360208201111561156e57600080fd5b803590602001918460018302840111600160201b8311171561158f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061384d915050565b3480156115de57600080fd5b506103c1613a5e565b3480156115f357600080fd5b50610367613a6d565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b820191906000526020600020905b81548152906001019060200180831161166b57829003601f168201915b505050505090505b90565b60006116a76116a0613a73565b8484613a77565b50600192915050565b600c546000906001600160a01b031633146116fc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b50600d55600190565b600061171082613b63565b92915050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff166117785760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f310d4cbf7ddcbf3169fb9371662fdfdfd6be42d3c1faed93bb0ec2f5173ce9b791a3506001919050565b600c546001600160a01b031690565b60025490565b6000600d5434146118295760405162461bcd60e51b81526004018080602001828103825260308152602001806153316030913960400191505060405180910390fd5b600c546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611862573d6000803e3d6000fd5b506118d685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250613b7e92505050565b95945050505050565b6000816118eb856124ae565b101561193d576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b611948848484613d73565b949350505050565b60008061199284848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff1660068111156119b757fe5b146119f35760405162461bcd60e51b815260040180806020018281038252603f815260200180614e44603f913960400191505060405180910390fd5b6009546001600160a01b03163314611a3c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061543b603b913960400191505060405180910390fd5b6000828152600360205260409020600181015460028201546005830154611a70926001600160a01b03908116921690613e8d565b611ab386868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506005830154613fd7565b611af286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166003179055805460408051602080825281018890526001600160a01b03909216917f451f61007271790232845a513d5966bccacab4d17e29a9995c7ccbaa940e6fc5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a27f085d7f4eb5ec120940eff725bef88dceeb82326ffedf842de5b4cc0b3697cd1b86868360050154856000016040518080602001848152602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528554600260001961010060018416150201909116048082526020909101915085908015611c445780601f10611c1957610100808354040283529160200191611c44565b820191906000526020600020905b815481529060010190602001808311611c2757829003601f168201915b5050965050505050505060405180910390a150600195945050505050565b600080611ca484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020908152604080832060039092529091209192509060018083015460ff166006811115611cd557fe5b14611d115760405162461bcd60e51b8152600401808060200182810382526030815260200180614ef76030913960400191505060405180910390fd5b80546001600160a01b0316331480611d35575060018101546001600160a01b031633145b611d705760405162461bcd60e51b8152600401808060200182810382526046815260200180614d2a6046913960600191505060405180910390fd5b611daf86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506140dc92505050565b5060018201805460ff19166006179055805460408051602080825281018890526001600160a01b03909216917f6ef2e76d8eadaf1eadb34e35d630315078941cb5ae013c870d1268c0fb67ff92918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b3360009081526008602090815260408083206001600160a01b038516845290915281205460ff1615611e9b5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526008602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917ffe9272e2e39a0471797d14bdcbd79ab868dd481d19256b15a886c1213b983ddf91a3506001919050565b60105460ff1690565b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161515600114611f685760405162461bcd60e51b81526004018080602001828103825260268152602001806150af6026913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917f2e96d672cd86b559c08b9503df494f90c7766b7804ed5c650d0adde07cdf483f91a3506001919050565b60006116a7611fcf613a73565b846120168560016000611fe0613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6141d316565b613a77565b60105460009061010090046001600160a01b0316612037613a73565b6001600160a01b031614612081576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6116a7838361422b565b600a546001600160a01b031681565b6000806000806000806000600360006120b28a613dfb565b81526020810191909152604001600020600181015460028201546003830154600584015460048501546006909501546001600160a01b039485169e9385169d50939091169a50985091965060ff16945092505050565b60006001600160a01b03851661214f5760405162461bcd60e51b815260040180806020018281038252603281526020018061512d6032913960400191505060405180910390fd5b6001600160a01b038516600090815260086020908152604080832033845290915290205460ff166121b5576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b846001600160a01b0316336001600160a01b031660008051602061508f83398151915289898888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a36122c33388888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528b93508a925090899089908190840183828082843760009201919091525061430992505050565b979650505050505050565b60065490565b6001600160a01b0380821660009081526008602090815260408083209386168352929052205460ff1692915050565b6009546001600160a01b031681565b60008061235484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff16600681111561237a57fe5b146123b65760405162461bcd60e51b815260040180806020018281038252604481526020018061501a6044913960600191505060405180910390fd5b6009546001600160a01b031633146123ff5760405162461bcd60e51b815260040180806020018281038252603c81526020018061515f603c913960400191505060405180910390fd5b6000828152600360205260409020600281015460018201546005830154612433926001600160a01b03908116921690613e8d565b6001828101805460ff1916909117905560408051602080825281018790527f766abd3a64bee5c3f0dd407ddcbc2bbcbb99100d725a88cb1ac43b962d41ce80918891889181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a150600195945050505050565b6001600160a01b038116600090815260046020526040812054611710906124d484613b63565b9063ffffffff6143cc16565b600060405162461bcd60e51b815260040180806020018281038252602d815260200180614e83602d913960400191505060405180910390fd5b3360009081526005602090815260408083206001600160a01b038516845290915281205460ff161561257c5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d56022913960400191505060405180910390fd5b3360008181526005602090815260408083206001600160a01b0387168085529252808320805460ff191660011790555190917fbb785bb78fa937a58ce1ce2c3a4bfdaf457b51bdedc3944e94c26d6777c7214a91a3506001919050565b60006001600160a01b0385166126205760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915288338988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156126c15781810151838201526020016126a9565b50505050905090810190601f1680156126ee5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a361270e8633338888888861440e565b9695505050505050565b60105461010090046001600160a01b031690565b6000806003600061273c85613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561276357fe5b14806127815750600360068083015460ff169081111561277f57fe5b145b6127bc5760405162461bcd60e51b8152600401808060200182810382526044815260200180614cc46044913960600191505060405180910390fd5b6127c98160040154614694565b806127e0575060038101546001600160a01b031633145b806127f7575060028101546001600160a01b031633145b6128325760405162461bcd60e51b81526004018080602001828103825260428152602001806152046042913960600191505060405180910390fd5b61283b836140dc565b5080546006808301546040516001600160a01b03909316927f4e48b247593fd0b3174316619f9274ea86db0ed03e691c2f8c4e0400e923375e92879260ff16919081906020820190849081111561288e57fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b838110156128cb5781810151838201526020016128b3565b50505050905090810190601f1680156128f85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250600192915050565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116885780601f1061165d57610100808354040283529160200191611688565b60006116a761297d613a73565b846120168560405180606001604052806025815260200161549d60259139600160006129a7613a73565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6146a716565b6000816129ea336124ae565b1015612a3c576040805162461bcd60e51b815260206004820152601c60248201527b4e6f7420656e6f75676820617661696c61626c652062616c616e636560201b604482015290519081900360640190fd5b612a46838361473e565b9392505050565b6000612a4683836001614752565b600c546000906001600160a01b03163314612aa75760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b6000612ae886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff166004811115612b0e57fe5b14612b4a5760405162461bcd60e51b8152600401808060200182810382526048815260200180614db86048913960600191505060405180910390fd5b60038101805460ff191660021790556001810154604080516001600160a01b0390921660208301819052608080845283018990527f1578cd46dfc61f5ed64ae02780d7de11d318753ba429fd6abcec24e5a56cddee928a928a929186918b918b91819081016060820160a083018a8a80828437600083820152601f01601f191690910185810384528854600260001961010060018416150201909116048082526020909101915088908015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039b50909950505050505050505050a15060019695505050505050565b600080612cc984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b60008181526007602052604090209091506003600182015460ff166006811115612cef57fe5b14612d2b5760405162461bcd60e51b81526004018080602001828103825260398152602001806153ac6039913960400191505060405180910390fd5b6009546001600160a01b03163314612d745760405162461bcd60e51b815260040180806020018281038252603181526020018061505e6031913960400191505060405180910390fd5b600082815260036020526040902060028101546005820154612d9f916001600160a01b031690614983565b60018201805460ff19166004179055805460408051602080825281018890526001600160a01b03909216917fae582f187de7234ff4da256268de739cdf3e9c284298c66f0b5b5712da128da5918991899181908101848480828437600083820152604051601f909101601f19169092018290039550909350505050a250600195945050505050565b600080612e6986868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b600081815260076020526040902090915060018082015460ff166006811115612e8e57fe5b14612eca5760405162461bcd60e51b815260040180806020018281038252603181526020018061526b6031913960400191505060405180910390fd5b6009546001600160a01b03163314612f135760405162461bcd60e51b81526004018080602001828103825260318152602001806154c26031913960400191505060405180910390fd5b60008281526003602090815260409182902060018401805460ff19166005179055805483518481529384018a905290926001600160a01b03909116917f84992793c2d54d037b0e705937a2a092a41c7e9018a78da2195ca589cd5860fc918b918b918b918b91908190810160608201878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a2506001979650505050505050565b60006130573387878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881523393508a925090899089908190840183828082843760009201919091525061430992505050565b50336001600160a01b0316336001600160a01b031660008051602061508f83398151915288888888886040518080602001858152602001806020018381038352888882818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f1916909201829003995090975050505050505050a350600195945050505050565b600c546000906001600160a01b031633146131465760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b600061318786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b602052604090209091506001600382015460ff1660048111156131ad57fe5b146131e95760405162461bcd60e51b8152600401808060200182810382526045815260200180614f276045913960600191505060405180910390fd5b6003818101805460ff1916909117905560018101546002820154604080516001600160a01b03909316602084018190526060840183905260a080855284018a90527f75a18f738a9a0c8b27f2fbf44c649f80dc607d0f394cf294aad2e0bb76f72b3c938b938b9387928c918c9190819081016080820160c083018b8b80828437600083820152601f01601f1916909101858103845289546002600019610100600184161502019091160480825260209091019150899080156132ec5780601f106132c1576101008083540402835291602001916132ec565b820191906000526020600020905b8154815290600101906020018083116132cf57829003601f168201915b50508481038252858152602001868680828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a15060019695505050505050565b6001600160a01b0380821660009081526005602090815260408083209386168352929052205460ff1692915050565b6001600160a01b031660009081526004602052604090205490565b60006001600160a01b0385166133c55760405162461bcd60e51b8152600401808060200182810382526026815260200180614f916026913960400191505060405180910390fd5b6001600160a01b03861661340a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d926026913960400191505060405180910390fd5b6001600160a01b038616600090815260056020908152604080832033845290915290205460ff16613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206153e5833981519152604482015290519081900360640190fd5b836001600160a01b0316336001600160a01b03166000805160206152ef83398151915289898988886040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156135115781810151838201526020016134f9565b50505050905090810190601f16801561353e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a36122c38733888888888861440e565b600c546000906001600160a01b031633146135aa5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152c0602f913960400191505060405180910390fd5b60006135eb84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600b6020526040902090915060038082015460ff16600481111561361057fe5b1461364c5760405162461bcd60e51b81526004018080602001828103825260368152602001806154056036913960400191505060405180910390fd5b60038101805460ff1916600417905560018101546002820154604080516001600160a01b0390931660208401819052908301829052606080845283018790527f43af5daa4dba8ba628232d5a7a61ccf585df7a4d3298358cd2786456264c6d969288928892918060808101868680828437600083820152604051601f909101601f191690920182900397509095505050505050a1506001949350505050565b6000612a4683836000614752565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080606060008061376b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dfb92505050565b6000818152600760209081526040808320600383529281902060018082015460058301548287015487548651600261010096831615969096026000190190911694909404601f8101889004880285018801909652858452979850959692956001600160a01b03909116949093879360ff1692918491908301828280156138325780601f1061380757610100808354040283529160200191613832565b820191906000526020600020905b81548152906001019060200180831161381557829003601f168201915b50505050509150965096509650965050505092959194509250565b6000806003600061385d86613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561388457fe5b146138c05760405162461bcd60e51b815260040180806020018281038252602c815260200180614fb7602c913960400191505060405180910390fd5b6138cd8160040154614694565b156139095760405162461bcd60e51b815260040180806020018281038252602281526020018061530f6022913960400191505060405180910390fd5b60018101546001600160a01b031633148061392d575080546001600160a01b031633145b6139685760405162461bcd60e51b8152600401808060200182810382526037815260200180614fe36037913960400191505060405180910390fd5b60048101548361397e5760006004830155613994565b61398e428563ffffffff6141d316565b60048301555b81546004830154604080516020808201869052918101839052606080825289519082015288516001600160a01b03909416937fab224ddedc192922a9caa9c23294ca7c6c25bd489024c2d08e16b8aaffce2486938a9387939192829160808301919087019080838360005b83811015613a175781810151838201526020016139ff565b50505050905090810190601f168015613a445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2506001949350505050565b600c546001600160a01b031681565b600d5490565b3390565b6001600160a01b038316613abc5760405162461bcd60e51b815260040180806020018281038252602481526020018061529c6024913960400191505060405180910390fd5b6001600160a01b038216613b015760405162461bcd60e51b8152600401808060200182810382526022815260200180614d706022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b031660009081526020819052604090205490565b600080613b8a84613dfb565b6000818152600b60205260409020909150613ba484614a6d565b15613be05760405162461bcd60e51b8152600401808060200182810382526021815260200180614ed66021913960400191505060405180910390fd5b600281015415613c215760405162461bcd60e51b8152600401808060200182810382526025815260200180614f6c6025913960400191505060405180910390fd5b6001810180546001600160a01b031916331790558351613c479082906020870190614bc6565b5060038101805460ff1916600117905534600282015560408051336020808301829052606080845289519084015288517fbd4815905cf0865b10d3cf5d5a792b1063072ca973863448e47b3e7b209a5629948a948a939092839283019160808401919088019080838360005b83811015613ccb578181015183820152602001613cb3565b50505050905090810190601f168015613cf85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613d2b578181015183820152602001613d13565b50505050905090810190601f168015613d585780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b6000613d80848484613e8d565b613df184613d8c613a73565b6120168560405180606001604052806028815260200161519b602891396001600160a01b038a16600090815260016020526040812090613dca613a73565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6146a716565b5060019392505050565b6000816040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015613e3e578181015183820152602001613e26565b50505050905090810190601f168015613e6b5780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001209050919050565b6001600160a01b038316613ed25760405162461bcd60e51b81526004018080602001828103825260258152602001806152466025913960400191505060405180910390fd5b6001600160a01b038216613f175760405162461bcd60e51b8152600401808060200182810382526023815260200180614c5f6023913960400191505060405180910390fd5b613f5a81604051806060016040528060268152602001614eb0602691396001600160a01b038616600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613f8f908263ffffffff6141d316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716926000805160206151c383398151915292918290030190a3505050565b600060036000613fe685613dfb565b8152602081019190915260400160002060068101805491925060029160ff19166001830217905550600381015481546005830154604080516020808201849052918101879052606080825288519082015287516001600160a01b0395861695909416937f5c325a8e2c888924f4a27940863613323b3a56cfbbbf8ee144e180ab228e104c9389939092899290918291608083019187019080838360005b8381101561409b578181015183820152602001614083565b50505050905090810190601f1680156140c85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b600080600360006140ec85613dfb565b815260200190815260200160002090506141098160040154614694565b15614127576006818101805460ff19166001835b0217905550614162565b60038101546001600160a01b0316331415614152576006810180546004919060ff191660018361411d565b60068101805460ff191660051790555b600581015460018201546001600160a01b03166000908152600460205260409020546141939163ffffffff6143cc16565b60018201546001600160a01b031660009081526004602052604090205560058101546006546141c79163ffffffff6143cc16565b60065550600192915050565b600082820183811015612a46576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6001600160a01b038216614286576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254614299908263ffffffff6141d316565b6002556001600160a01b0382166000908152602081905260409020546142c5908263ffffffff6141d316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391926000805160206151c38339815191529281900390910190a35050565b6000806007600061431988613dfb565b8152602001908152602001600020905061433283614a6d565b15614384576040805162461bcd60e51b815260206004820152601e60248201527f496e737472756374696f6e73206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b82516143969082906020860190614bc6565b506001818101805460ff19169091179055600a546009546122c39188918a9189916001600160a01b03918216911689600061440e565b6000612a4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506146a7565b6000806003600061441e8b613dfb565b8152602001908152602001600020905061443789614a6d565b15614489576040805162461bcd60e51b815260206004820152601e60248201527f4f7065726174696f6e204944206d757374206e6f7420626520656d7074790000604482015290519081900360640190fd5b836144c9576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b600581015415614520576040805162461bcd60e51b815260206004820152601f60248201527f54686973206f7065726174696f6e496420616c72656164792065786973747300604482015290519081900360640190fd5b6001600160a01b0385166145655760405162461bcd60e51b81526004018080602001828103825260278152602001806154766027913960400191505060405180910390fd5b61456e876124ae565b8411156145ac5760405162461bcd60e51b8152600401808060200182810382526042815260200180614c826042913960600191505060405180910390fd5b80546001600160a01b03199081166001600160a01b038a81169190911783556001808401805484168b841617905560028401805484168a8416179055600384018054909316918816919091179091556005820185905560068201805460ff19169091179055821561462d57614627428463ffffffff6141d316565b60048201555b6001600160a01b038716600090815260046020526040902054614656908563ffffffff6141d316565b6001600160a01b038816600090815260046020526040902055600654614682908563ffffffff6141d316565b60065550600198975050505050505050565b6000811580159061171057505042101590565b600081848411156147365760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146fb5781810151838201526020016146e3565b50505050905090810190601f1680156147285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006116a761474b613a73565b8484613e8d565b6000806003600061476287613dfb565b815260208101919091526040016000209050600160068083015460ff169081111561478957fe5b14806147a75750600360068083015460ff16908111156147a557fe5b145b6147e25760405162461bcd60e51b8152600401808060200182810382526044815260200180614e006044913960600191505060405180910390fd5b83614822576040805162461bcd60e51b815260206004820152601f6024820152600080516020615361833981519152604482015290519081900360640190fd5b60038101546001600160a01b0316331461486d5760405162461bcd60e51b815260040180806020018281038252602b815260200180615381602b913960400191505060405180910390fd5b61487a8160040154614694565b156148cb576040805162461bcd60e51b815260206004820152601c60248201527b151a19481a1bdb19081a185cc8185b1c9958591e48195e1c1a5c995960221b604482015290519081900360640190fd5b806005015484111561490e5760405162461bcd60e51b81526004018080602001828103825260368152602001806150f76036913960400191505060405180910390fd5b8280156149215750600084826005015403115b1561493f576149308585614a72565b61493a8585614af8565b614957565b61494d858260050154614a72565b6149578585613fd7565b60018101546002820154614978916001600160a01b03908116911686613e8d565b506001949350505050565b6001600160a01b0382166149c85760405162461bcd60e51b81526004018080602001828103825260218152602001806151e36021913960400191505060405180910390fd5b614a0b81604051806060016040528060228152602001614d08602291396001600160a01b038516600090815260208190526040902054919063ffffffff6146a716565b6001600160a01b038316600090815260208190526040902055600254614a37908263ffffffff6143cc16565b6002556040805182815290516000916001600160a01b038516916000805160206151c38339815191529181900360200190a35050565b511590565b600060036000614a8185613dfb565b81526020808201929092526040908101600090812060018101546001600160a01b0316825260049093522054909150614ac0908363ffffffff6143cc16565b60018201546001600160a01b0316600090815260046020526040902055600654614af0908363ffffffff6143cc16565b600655505050565b600060036000614b0785613dfb565b8152602081019190915260400160002060068101805460ff191660031790556005810154909150614b3890836143cc565b6005820181905560038201548254604080516020808201869052918101879052606080825288519082015287516001600160a01b039485169594909316937f580d13b8c7eed8e88f52fc61856554268aa83422271759f5af5af20268411e4693899391928992909182916080830191908701908083836000831561409b578181015183820152602001614083565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c0757805160ff1916838001178555614c34565b82800160010185558215614c34579182015b82811115614c34578251825591602001919060010190614c19565b50614c40929150614c44565b5090565b61169091905b80821115614c405760008155600101614c4a56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206f662074686520686f6c642063616e27742062652067726561746572207468616e207468652062616c616e6365206f6620746865206f726967696e4120686f6c642063616e206f6e6c792062652072656c656173656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636541207061796f75742063616e206f6e6c792062652063616e63656c6c656420627920746865206f726465726572206f72207468652077616c6c6574546f4265506169644f757445524332303a20617070726f766520746f20746865207a65726f206164647265737350617965722061646472657373206d757374206e6f74206265207a65726f20616464726573734163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f2073746174757320436f6e6669726d65644120686f6c642063616e206f6e6c7920626520657865637574656420696e20737461747573204f726465726564206f72204578656375746564416e644b6570744f70656e41207061796f75742063616e206f6e6c792062652073657420746f2046756e6473496e53757370656e73652066726f6d20737461747573204f72646572656446756e6374696f6e206e6f7420737570706f7274656420696e207468697320696d706c656d656e746174696f6e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365486564657261205075626c6963204b65792063616e6e6f7420626520656d70747941207061796f75742063616e206f6e6c792062652063616e63656c6c656420696e20737461747573204f7264657265644163636f756e742052657175657374206d7573742068617665207374617475732052657175657374656420746f2062652073657420746f20737461747573204661696c65644120726571756573742077697468207468697320696420616c72656164792065786973747350617965652061646472657373206d757374206e6f74206265207a65726f20616464726573734120686f6c642063616e206f6e6c792062652072656e6577656420696e20737461747573204f72646572656454686520686f6c642063616e206f6e6c792062652072656e657765642062792074686520697373756572206f722074686520706179657241207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f7264657265642066726f6d207374617475732046756e6473496e53757370656e736541207061796f75742063616e206f6e6c7920626520657865637574656420627920746865207061796f7574206167656e74dede0d220fbab7cb612b269ed216c1532317ffc2614e8965592747ec49087b70546865206f70657261746f7220697320616c7265616479206e6f7420617574686f72697a6564546865206f70657261746f7220697320616c726561647920617574686f72697a65645468652076616c75652073686f756c6420626520657175616c206f72206c657373207468616e207468652068656c6420616d6f756e7477616c6c6574546f4265506169644f75742061646472657373206d757374206e6f74206265207a65726f206164647265737341207061796f75742063616e206f6e6c7920626520736574206261636b20746f204f72646572656420627920746865207061796f7574206167656e7445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737341206e6f74206578706972656420686f6c642063616e206f6e6c792062652072656c656173656420627920746865206e6f74617279206f722074686520706179656545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341207061796f75742063616e206f6e6c792062652072656a65637465642066726f6d20737461747573204f72646572656445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734f6e6c7920746865206163636f756e742063726561746f722063616e2063616c6c20746869732066756e6374696f6e8a1d1765ef42a1fb3d5b0e12ba4b1083e020407cb5ba8e07aaaacf610624aec9416e206578706972656420686f6c642063616e206e6f742062652072656e65776564496e636f72726563742066656520616d6f756e742c2063616c6c206765744163636f756e744372656174696f6e46656556616c7565206d7573742062652067726561746572207468616e207a65726f0054686520686f6c642063616e206f6e6c7920626520657865637574656420627920746865206e6f7461727941207061796f75742063616e206f6e6c792062652065786563757465642066726f6d207374617475732046756e6473496e53757370656e736554686973206f70657261746f72206973206e6f7420617574686f72697a6564004163636f756e742052657175657374206d757374206861766520737461747573204661696c656420746f20626520726566756e64656441207061796f75742063616e206f6e6c792062652073657420746f20696e2073757370656e736520627920746865207061796f7574206167656e744e6f746172792061646472657373206d757374206e6f74206265207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f41207061796f75742063616e206f6e6c792062652072656a656374656420627920746865207061796f7574206167656e74a265627a7a72315820b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb464736f6c634300050f0032

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9000000000000000000000000000000000000000000000000000000000000000c577261707065642048626172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057748424152000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : __name (string): Wrapped Hbar
Arg [1] : __symbol (string): wHBAR
Arg [2] : __decimals (uint8): 8
Arg [3] : __customOwner (address): 0xE824424eE4022Cd6bC408249F924A6e3BDA035c9

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 000000000000000000000000e824424ee4022cd6bc408249f924a6e3bda035c9
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 5772617070656420486261720000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 7748424152000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49794:1191:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50432:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50432:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;50432:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20827:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20827:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20827:152:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1324:264;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1324:264:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1324:264:0;;:::i;35609:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35609:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35609:119:0;-1:-1:-1;;;;;35609:119:0;;:::i;:::-;;;;;;;;;;;;;;;;48702:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48702:318:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48702:318:0;-1:-1:-1;;;;;48702:318:0;;:::i;1115:99::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1115:99:0;;;:::i;:::-;;;;-1:-1:-1;;;;;1115:99:0;;;;;;;;;;;;;;19848:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19848:91:0;;;:::i;2400:518::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2400:518:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2400:518:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2400:518:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2400:518:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2400:518:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2400:518:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;2400:518:0;;-1:-1:-1;2400:518:0;-1:-1:-1;2400:518:0;:::i;37068:230::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37068:230:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37068:230:0;;;;;;;;;;;;;;;;;:::i;44038:1116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44038:1116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44038:1116:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;44038:1116:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44038:1116:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;44038:1116:0;;-1:-1:-1;44038:1116:0;-1:-1:-1;44038:1116:0;:::i;42764:851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42764:851:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42764:851:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42764:851:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42764:851:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;42764:851:0;;-1:-1:-1;42764:851:0;-1:-1:-1;42764:851:0;:::i;48366:328::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48366:328:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48366:328:0;-1:-1:-1;;;;;48366:328:0;;:::i;50618:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50618:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36310:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36310:309:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36310:309:0;-1:-1:-1;;;;;36310:309:0;;:::i;22164:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22164:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22164:210:0;;;;;;;;:::i;50796:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50796:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;50796:186:0;;;;;;;;:::i;41231:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41231:30:0;;;:::i;34926:551::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34926:551:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34926:551:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;34926:551:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34926:551:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34926:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34926:551:0;;-1:-1:-1;34926:551:0;;-1:-1:-1;;;;;34926:551:0:i;:::-;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;-1:-1:-1;;;;;34926:551:0;-1:-1:-1;;;;;34926:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41999:757;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41999:757:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;41999:757:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41999:757:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41999:757:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41999:757:0;;;;-1:-1:-1;;;;;41999:757:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41999:757:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41999:757:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;41999:757:0;;-1:-1:-1;41999:757:0;-1:-1:-1;41999:757:0;:::i;35736:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35736:102:0;;;:::i;48211:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48211:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;48211:147:0;;;;;;;;;;:::i;41198:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41198:26:0;;;:::i;45226:828::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45226:828:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45226:828:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45226:828:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45226:828:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;45226:828:0;;-1:-1:-1;45226:828:0;-1:-1:-1;45226:828:0;:::i;36705:142::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36705:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36705:142:0;-1:-1:-1;;;;;36705:142:0;;:::i;43781:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43781:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43781:163:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;43781:163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43781:163:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;43781:163:0;;-1:-1:-1;43781:163:0;-1:-1:-1;43781:163:0;:::i;35991:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35991:311:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35991:311:0;-1:-1:-1;;;;;35991:311:0;;:::i;29931:681::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29931:681:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;29931:681:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;29931:681:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29931:681:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29931:681:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;29931:681:0;;-1:-1:-1;;;;;;;29931:681:0;;;;;-1:-1:-1;29931:681:0;;;;;;;;;;;-1:-1:-1;29931:681:0;;;;-1:-1:-1;29931:681:0;:::i;50709:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50709:79:0;;;:::i;31486:772::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31486:772:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31486:772:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31486:772:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31486:772:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31486:772:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31486:772:0;;-1:-1:-1;31486:772:0;;-1:-1:-1;;;;;31486:772:0:i;50523:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50523:87:0;;;:::i;22877:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22877:261:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22877:261:0;;;;;;;;:::i;36855:205::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36855:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36855:205:0;;;;;;;;:::i;32425:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32425:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32425:160:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;32425:160:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32425:160:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;32425:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32425:160:0;;-1:-1:-1;;32425:160:0;;;-1:-1:-1;32425:160:0;;-1:-1:-1;;32425:160:0:i;3303:859::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3303:859:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3303:859:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3303:859:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3303:859:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3303:859:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;3303:859:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3303:859:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3303:859:0;;-1:-1:-1;3303:859:0;-1:-1:-1;3303:859:0;:::i;46062:773::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46062:773:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46062:773:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46062:773:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46062:773:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;46062:773:0;;-1:-1:-1;46062:773:0;-1:-1:-1;46062:773:0;:::i;46843:742::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46843:742:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46843:742:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46843:742:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46843:742:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46843:742:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46843:742:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46843:742:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;46843:742:0;;-1:-1:-1;46843:742:0;-1:-1:-1;46843:742:0;:::i;41518:473::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41518:473:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41518:473:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41518:473:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41518:473:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41518:473:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41518:473:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41518:473:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;41518:473:0;;-1:-1:-1;41518:473:0;-1:-1:-1;41518:473:0;:::i;4463:856::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4463:856:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4463:856:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4463:856:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4463:856:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4463:856:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4463:856:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4463:856:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;4463:856:0;;-1:-1:-1;4463:856:0;-1:-1:-1;4463:856:0;:::i;35846:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35846:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35846:137:0;;;;;;;;;;:::i;35485:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35485:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35485:116:0;-1:-1:-1;;;;;35485:116:0;;:::i;30620:858::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30620:858:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;30620:858:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30620:858:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30620:858:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30620:858:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30620:858:0;;-1:-1:-1;;;;;;;30620:858:0;;;;;-1:-1:-1;30620:858:0;;;;;;;;;;;;;;;-1:-1:-1;30620:858:0;;;;;-1:-1:-1;30620:858:0;;;;:::i;5604:682::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5604:682:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5604:682:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5604:682:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5604:682:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;5604:682:0;;-1:-1:-1;5604:682:0;-1:-1:-1;5604:682:0;:::i;32266:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32266:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32266:151:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;32266:151:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32266:151:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;32266:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32266:151:0;;-1:-1:-1;;32266:151:0;;;-1:-1:-1;32266:151:0;;-1:-1:-1;;32266:151:0:i;20546:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20546:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20546:134:0;;;;;;;;;;:::i;47593:610::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47593:610:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47593:610:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;47593:610:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47593:610:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;47593:610:0;;-1:-1:-1;47593:610:0;-1:-1:-1;47593:610:0;:::i;:::-;;;;;-1:-1:-1;;;;;47593:610:0;-1:-1:-1;;;;;47593:610:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;47593:610:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33848:1070;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33848:1070:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33848:1070:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;33848:1070:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33848:1070:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33848:1070:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33848:1070:0;;-1:-1:-1;;33848:1070:0;;;-1:-1:-1;33848:1070:0;;-1:-1:-1;;33848:1070:0:i;875:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;875:29:0;;;:::i;1222:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1222:94:0;;;:::i;50432:83::-;50502:5;50495:12;;;;;;;;-1:-1:-1;;50495:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50469:13;;50495:12;;50502:5;;50495:12;;50502:5;50495:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50432:83;;:::o;20827:152::-;20893:4;20910:39;20919:12;:10;:12::i;:::-;20933:7;20942:6;20910:8;:39::i;:::-;-1:-1:-1;20967:4:0;20827:152;;;;:::o;1324:264::-;1444:14;;1391:4;;-1:-1:-1;;;;;1444:14:0;1430:10;:28;1408:125;;;;-1:-1:-1;;;1408:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:3:0;:14;1576:4;;1324:264::o;35609:119::-;35669:7;35696:24;35712:7;35696:15;:24::i;:::-;35689:31;35609:119;-1:-1:-1;;35609:119:0:o;48702:318::-;48809:10;48768:4;48793:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48793:37:0;;;;;;;;;;;;48785:88;;;;-1:-1:-1;;;48785:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48902:10;48926:5;48886:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48886:37:0;;;;;;;;;;:45;;-1:-1:-1;;48886:45:0;;;48947:43;48886:37;;48947:43;;;-1:-1:-1;49008:4:0;48702:318;;;:::o;1115:99::-;1192:14;;-1:-1:-1;;;;;1192:14:0;1115:99;:::o;19848:91::-;19919:12;;19848:91;:::o;2400:518::-;2537:4;2589:3;;2576:9;:16;2554:115;;;;-1:-1:-1;;;2554:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2773:14;;2757:52;;-1:-1:-1;;;;;2773:14:0;;;;2799:9;2757:52;;;;;2773:14;2757:52;2773:14;2757:52;2799:9;2773:14;2757:52;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2757:52:0;2829:81;2858:11;;2829:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;2829:81:0;;;;137:4:-1;2829:81:0;;;;;;;;;;;;;;;;;;-1:-1:-1;2884:15:0;;-1:-1:-1;2884:15:0;;;;2829:81;;2884:15;;;;2829:81;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;2829:14:0;;-1:-1:-1;;;2829:81:0:i;:::-;2822:88;2400:518;-1:-1:-1;;;;;2400:518:0:o;37068:230::-;37150:4;37195:6;37175:16;37185:5;37175:9;:16::i;:::-;:26;;37167:67;;;;;-1:-1:-1;;;37167:67:0;;;;;;;;;;;;-1:-1:-1;;;37167:67:0;;;;;;;;;;;;;;;37252:38;37271:5;37278:3;37283:6;37252:18;:38::i;:::-;37245:45;37068:230;-1:-1:-1;;;;37068:230:0:o;44038:1116::-;44126:4;44143:23;44169:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44169:18:0;;-1:-1:-1;;;44169:20:0:i;:::-;44202:38;44243:31;;;:14;:31;;;;;44143:46;;-1:-1:-1;44322:24:0;44295:23;;;;;;:51;;;;;;;;;44287:127;;;;-1:-1:-1;;;44287:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44447:11;;-1:-1:-1;;;;;44447:11:0;44433:10;:25;44425:97;;;;-1:-1:-1;;;44425:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44535:27;44565:22;;;:5;:22;;;;;44616:21;;;;44639;;;;44662:20;;;;44600:83;;-1:-1:-1;;;;;44616:21:0;;;;44639;;44600:15;:83::i;:::-;44694:59;44719:11;;44694:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;;;44732:20:0;;;;44694:24;:59::i;:::-;44766:25;44779:11;;44766:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44766:12:0;;-1:-1:-1;;;44766:25:0:i;:::-;-1:-1:-1;44802:23:0;;;:58;;-1:-1:-1;;44802:58:0;44828:32;44802:58;;;44914:21;;44878:94;;;;;;;;;;;;-1:-1:-1;;;;;44914:21:0;;;;44878:94;;44950:11;;44878:94;;;;;;44950:11;44878:94;;44950:11;44878:94;1:33:-1;99:1;81:16;;;74:27;44878:94:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;44878:94:0;;;;-1:-1:-1;44878:94:0;;-1:-1:-1;;;;44878:94:0;44990:132;45021:11;;45047:14;:20;;;45082:16;:29;;44990:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;44990:132:0;;;;;;;;-1:-1:-1;;44990:132:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;44990:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45142:4:0;;44038:1116;-1:-1:-1;;;;;44038:1116:0:o;42764:851::-;42833:4;42850:23;42876:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42876:18:0;;-1:-1:-1;;;42876:20:0:i;:::-;42909:38;42950:31;;;:14;:31;;;;;;;;43022:5;:22;;;;;;42850:46;;-1:-1:-1;42950:31:0;43092:24;43065:23;;;;;;:51;;;;;;;;;43057:112;;;;-1:-1:-1;;;43057:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43216:21;;-1:-1:-1;;;;;43216:21:0;43202:10;:35;;:74;;-1:-1:-1;43255:21:0;;;;-1:-1:-1;;;;;43255:21:0;43241:10;:35;43202:74;43180:194;;;;-1:-1:-1;;;43180:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43387:25;43400:11;;43387:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43387:12:0;;-1:-1:-1;;;43387:25:0:i;:::-;-1:-1:-1;43425:23:0;;;:52;;-1:-1:-1;;43425:52:0;43451:26;43425:52;;;43525:21;;43495:88;;;;;;;;;;;;-1:-1:-1;;;;;43525:21:0;;;;43495:88;;43561:11;;43495:88;;;;;;43561:11;43495:88;;43561:11;43495:88;1:33:-1;99:1;81:16;;;74:27;43495:88:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;43495:88:0;;;;-1:-1:-1;43495:88:0;;-1:-1:-1;;;;43495:88:0;-1:-1:-1;43603:4:0;;42764:851;-1:-1:-1;;;;;42764:851:0:o;48366:328::-;48476:10;48435:4;48460:27;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48460:37:0;;;;;;;;;;;;:46;48452:93;;;;-1:-1:-1;;;48452:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48574:10;48558:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;48558:37:0;;;;;;;;;;:44;;-1:-1:-1;;48558:44:0;48598:4;48558:44;;;48618:46;48558:37;;48618:46;;;-1:-1:-1;48682:4:0;48366:328;;;:::o;50618:83::-;50684:9;;;;50618:83;:::o;36310:309::-;36408:10;36372:4;36398:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36398:31:0;;;;;;;;;;;;:39;;:31;:39;36389:91;;;;-1:-1:-1;;;36389:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36503:10;36527:5;36493:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36493:31:0;;;;;;;;;;:39;;-1:-1:-1;;36493:39:0;;;36548:41;36493:31;;36548:41;;;-1:-1:-1;36607:4:0;36310:309;;;:::o;22164:210::-;22244:4;22261:83;22270:12;:10;:12::i;:::-;22284:7;22293:50;22332:10;22293:11;:25;22305:12;:10;:12::i;:::-;-1:-1:-1;;;;;22293:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22293:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;:::-;22261:8;:83::i;50796:186::-;50895:6;;50854:4;;50895:6;;;-1:-1:-1;;;;;50895:6:0;50879:12;:10;:12::i;:::-;-1:-1:-1;;;;;50879:22:0;;50871:47;;;;;-1:-1:-1;;;50871:47:0;;;;;;;;;;;;-1:-1:-1;;;50871:47:0;;;;;;;;;;;;;;;50929:23;50941:2;50945:6;50929:11;:23::i;41231:30::-;;;-1:-1:-1;;;;;41231:30:0;;:::o;34926:551::-;35010:12;35033:10;35054:14;35079:13;35103:18;35132:21;35171:26;35200:5;:27;35206:20;:11;:18;:20::i;:::-;35200:27;;;;;;;;;;;-1:-1:-1;35200:27:0;35260:20;;;;35295;;;;35330;;;;35365:19;;;;35399:24;;;;35438:20;;;;;-1:-1:-1;;;;;35260:20:0;;;;35295;;;;-1:-1:-1;35330:20:0;;;;;-1:-1:-1;35365:19:0;-1:-1:-1;35399:24:0;;-1:-1:-1;35438:20:0;;;-1:-1:-1;34926:551:0;-1:-1:-1;;;34926:551:0:o;41999:757::-;42186:4;-1:-1:-1;;;;;42216:31:0;;42208:94;;;;-1:-1:-1;;;42208:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42321:34:0;;;;;;:15;:34;;;;;;;;42356:10;42321:46;;;;;;;;;;42313:90;;;;;-1:-1:-1;;;42313:90:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;42313:90:0;;;;;;;;;;;;;;;42500:17;-1:-1:-1;;;;;42421:154:0;42449:10;-1:-1:-1;;;;;42421:154:0;-1:-1:-1;;;;;;;;;;;42474:11:0;;42532:5;42552:12;;42421:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;42421:154:0;;;;;;;;;;;-1:-1:-1;42421:154:0;;;;;1:33:-1;99:1;81:16;;;74:27;42421:154:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;42421:154:0;;;;-1:-1:-1;42421:154:0;;-1:-1:-1;;;;;;;;42421:154:0;42595:153;42622:10;42647:11;;42595:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;42595:153:0;;;;137:4:-1;42595:153:0;;;;;;;;;;;;;;;;;42673:17;;-1:-1:-1;42705:5:0;;-1:-1:-1;42595:153:0;42725:12;;;;;;42595:153;;42725:12;;;;42595:153;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;42595:12:0;;-1:-1:-1;;;42595:153:0:i;:::-;42588:160;41999:757;-1:-1:-1;;;;;;;41999:757:0:o;35736:102::-;35813:17;;35736:102;:::o;48211:147::-;-1:-1:-1;;;;;48319:21:0;;;48295:4;48319:21;;;:15;:21;;;;;;;;:31;;;;;;;;;;;;48211:147;;;;:::o;41198:26::-;;;-1:-1:-1;;;;;41198:26:0;;:::o;45226:828::-;45314:4;45331:23;45357:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45357:18:0;;-1:-1:-1;;;45357:20:0:i;:::-;45390:38;45431:31;;;:14;:31;;;;;45331:46;;-1:-1:-1;45510:32:0;45483:23;;;;;;:59;;;;;;;;;45475:140;;;;-1:-1:-1;;;45475:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45648:11;;-1:-1:-1;;;;;45648:11:0;45634:10;:25;45626:98;;;;-1:-1:-1;;;45626:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45737:27;45767:22;;;:5;:22;;;;;45818:21;;;;;45841;;;45864:20;;;;45802:83;;-1:-1:-1;;;;;45818:21:0;;;;45841;;45802:15;:83::i;:::-;45924:24;45898:23;;;:50;;-1:-1:-1;;45898:50:0;;;;;;45966:56;;;;;;;;;;;;;;46000:11;;;;45966:56;;;;46000:11;;;;45966:56;1:33:-1;99:1;81:16;;;74:27;45966:56:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;45966:56:0;;;;-1:-1:-1;45966:56:0;;-1:-1:-1;;;;45966:56:0;-1:-1:-1;46042:4:0;;45226:828;-1:-1:-1;;;;;45226:828:0:o;36705:142::-;-1:-1:-1;;;;;36818:20:0;;36762:7;36818:20;;;:11;:20;;;;;;36789:50;;:24;36830:7;36789:15;:24::i;:::-;:28;:50;:28;:50;:::i;43781:163::-;43864:4;43881:55;;-1:-1:-1;;;43881:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35991:311;36092:10;36056:4;36082:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36082:31:0;;;;;;;;;;;;:40;36073:88;;;;-1:-1:-1;;;36073:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36184:10;36174:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;36174:31:0;;;;;;;;;;:38;;-1:-1:-1;;36174:38:0;36208:4;36174:38;;;36228:44;36174:31;;36228:44;;;-1:-1:-1;36290:4:0;35991:311;;;:::o;29931:681::-;30109:4;-1:-1:-1;;;;;30139:16:0;;30131:67;;;;-1:-1:-1;;;30131:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30335:6;-1:-1:-1;;;;;30216:187:0;30242:10;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;;;;;;;30267:11:0;30293:10;30318:2;30356:5;30376:16;30216:187;;;;;;;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;30216:187:0;;;;;;-1:-1:-1;;;;;30216:187:0;-1:-1:-1;;;;;30216:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30216:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30423:181;30443:11;30469:10;30494;30519:2;30536:6;30557:5;30577:16;30423:5;:181::i;:::-;30416:188;29931:681;-1:-1:-1;;;;;;29931:681:0:o;50709:79::-;50774:6;;;;;-1:-1:-1;;;;;50774:6:0;;50709:79::o;31486:772::-;31550:4;31567:27;31597:5;:27;31603:20;:11;:18;:20::i;:::-;31597:27;;;;;;;;;;;-1:-1:-1;31597:27:0;;-1:-1:-1;31670:22:0;31645:21;;;;;;;;:47;;;;;;;;:110;;;-1:-1:-1;31721:34:0;31696:21;;;;;;;;:59;;;;;;;;31645:110;31637:190;;;;-1:-1:-1;;;31637:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31860:37;31871:14;:25;;;31860:10;:37::i;:::-;:91;;;-1:-1:-1;31929:21:0;;;;-1:-1:-1;;;;;31929:21:0;31915:10;:35;31860:91;:145;;;-1:-1:-1;31983:21:0;;;;-1:-1:-1;;;;;31983:21:0;31969:10;:35;31860:145;31838:261;;;;-1:-1:-1;;;31838:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32112:25;32125:11;32112:12;:25::i;:::-;-1:-1:-1;32168:21:0;;32204;;;;;32155:71;;-1:-1:-1;;;;;32168:21:0;;;;32155:71;;32191:11;;32204:21;;;32155:71;;;;;;;32204:21;;32155:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32155:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32246:4:0;;31486:772;-1:-1:-1;;31486:772:0:o;50523:87::-;50595:7;50588:14;;;;;;;;-1:-1:-1;;50588:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50562:13;;50588:14;;50595:7;;50588:14;;50595:7;50588:14;;;;;;;;;;;;;;;;;;;;;;;;22877:261;22962:4;22979:129;22988:12;:10;:12::i;:::-;23002:7;23011:96;23050:15;23011:96;;;;;;;;;;;;;;;;;:11;:25;23023:12;:10;:12::i;:::-;-1:-1:-1;;;;;23011:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23011:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;36855:205::-;36918:4;36968:6;36943:21;36953:10;36943:9;:21::i;:::-;:31;;36935:72;;;;;-1:-1:-1;;;36935:72:0;;;;;;;;;;;;-1:-1:-1;;;36935:72:0;;;;;;;;;;;;;;;37025:27;37040:3;37045:6;37025:14;:27::i;:::-;37018:34;36855:205;-1:-1:-1;;;36855:205:0:o;32425:160::-;32515:4;32539:38;32552:11;32565:5;32572:4;32539:12;:38::i;3303:859::-;3492:14;;3439:4;;-1:-1:-1;;;;;3492:14:0;3478:10;:28;3456:125;;;;-1:-1:-1;;;3456:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3594:23;3620:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3620:18:0;;-1:-1:-1;;;3620:20:0:i;:::-;3651:30;3684:25;;;:8;:25;;;;;3594:46;;-1:-1:-1;3770:23:0;3752:14;;;;;;:41;;;;;;;;;3730:164;;;;-1:-1:-1;;;3730:164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:14;;;:40;;-1:-1:-1;;3915:40:0;3932:23;3915:40;;;;4034:17;;;3973:157;;;-1:-1:-1;;;;;4034:17:0;;;3973:157;;;;;;;;;;;;;;;;;4008:11;;3973:157;;4034:17;3915:14;;4104:15;;;;3973:157;;;;;;;;;;4008:11;3973:157;;4008:11;3973:157;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;3973:157:0;;;;;;;;-1:-1:-1;;3973:157:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;3973:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3973:157:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;3973:157:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;3973:157:0;;;;-1:-1:-1;3973:157:0;;-1:-1:-1;;;;;;;;;;3973:157:0;-1:-1:-1;4150:4:0;;3303:859;-1:-1:-1;;;;;;3303:859:0:o;46062:773::-;46132:4;46149:23;46175:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46175:18:0;;-1:-1:-1;;;46175:20:0:i;:::-;46208:36;46247:31;;;:14;:31;;;;;46149:46;;-1:-1:-1;46324:32:0;46299:21;;;;;;:57;;;;;;;;;46291:127;;;;-1:-1:-1;;;46291:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46451:11;;-1:-1:-1;;;;;46451:11:0;46437:10;:25;46429:87;;;;-1:-1:-1;;;46429:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46529:25;46557:22;;;:5;:22;;;;;46598:19;;;;46619:18;;;;46592:46;;-1:-1:-1;;;;;46598:19:0;;46592:5;:46::i;:::-;46651:21;;;:49;;-1:-1:-1;;46651:49:0;46675:25;46651:49;;;46747:19;;46718:85;;;;;;;;;;;;-1:-1:-1;;;;;46747:19:0;;;;46718:85;;46781:11;;46718:85;;;;;;46781:11;46718:85;;46781:11;46718:85;1:33:-1;99:1;81:16;;;74:27;46718:85:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;46718:85:0;;;;-1:-1:-1;46718:85:0;;-1:-1:-1;;;;46718:85:0;-1:-1:-1;46823:4:0;;46062:773;-1:-1:-1;;;;;46062:773:0:o;46843:742::-;46936:4;46953:23;46979:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46979:18:0;;-1:-1:-1;;;46979:20:0:i;:::-;47012:36;47051:31;;;:14;:31;;;;;46953:46;;-1:-1:-1;47128:24:0;47103:21;;;;;;:49;;;;;;;;;47095:111;;;;-1:-1:-1;;;47095:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47239:11;;-1:-1:-1;;;;;47239:11:0;47225:10;:25;47217:87;;;;-1:-1:-1;;;47217:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47317:25;47345:22;;;:5;:22;;;;;;;;;47380:21;;;:49;;-1:-1:-1;;47380:49:0;47404:25;47380:49;;;47476:19;;47447:106;;;;;;;;;;;47345:22;;-1:-1:-1;;;;;47476:19:0;;;;47447:106;;47510:11;;47447:106;;47536:6;;;;47447:106;;;;;;;;47510:11;47447:106;;47510:11;47447:106;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;47447:106:0;;;;;;;;;;;-1:-1:-1;47447:106:0;;;;;1:33:-1;99:1;81:16;;;74:27;47447:106:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;47447:106:0;;;;-1:-1:-1;47447:106:0;;-1:-1:-1;;;;;;;47447:106:0;-1:-1:-1;47573:4:0;;46843:742;-1:-1:-1;;;;;;;46843:742:0:o;41518:473::-;41631:4;41648:146;41675:10;41700:11;;41648:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;41648:146:0;;;;137:4:-1;41648:146:0;;;;;;;;;;;;;;;;;41726:10;;-1:-1:-1;41751:5:0;;-1:-1:-1;41648:146:0;41771:12;;;;;;41648:146;;41771:12;;;;41648:146;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;41648:12:0;;-1:-1:-1;;;41648:146:0:i;:::-;;41891:10;-1:-1:-1;;;;;41812:147:0;41840:10;-1:-1:-1;;;;;41812:147:0;-1:-1:-1;;;;;;;;;;;41865:11:0;;41916:5;41936:12;;41812:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;41812:147:0;;;;;;;;;;;-1:-1:-1;41812:147:0;;;;;1:33:-1;99:1;81:16;;;74:27;41812:147:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;41812:147:0;;;;-1:-1:-1;41812:147:0;;-1:-1:-1;;;;;;;;41812:147:0;-1:-1:-1;41979:4:0;41518:473;;;;;;;:::o;4463:856::-;4640:14;;4587:4;;-1:-1:-1;;;;;4640:14:0;4626:10;:28;4604:125;;;;-1:-1:-1;;;4604:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4742:23;4768:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4768:18:0;;-1:-1:-1;;;4768:20:0:i;:::-;4799:30;4832:25;;;:8;:25;;;;;4742:46;;-1:-1:-1;4918:23:0;4900:14;;;;;;:41;;;;;;;;;4878:161;;;;-1:-1:-1;;;4878:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5077:20;5060:14;;;:37;;-1:-1:-1;;5060:37:0;;;;;;;5173:17;;;5243:12;;;;5115:172;;;-1:-1:-1;;;;;5173:17:0;;;5115:172;;;;;;;;;;;;;;;;;;;;;;;5147:11;;5115:172;;5060:14;;5270:6;;;;5115:172;;;;;;;;;;;5147:11;5115:172;;5147:11;5115:172;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;5115:172:0;;;;;;;;-1:-1:-1;;5115:172:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;5115:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5115:172:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;5115:172:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;5115:172:0;;;;-1:-1:-1;5115:172:0;;-1:-1:-1;;;;;;;;;;;5115:172:0;-1:-1:-1;5307:4:0;;4463:856;-1:-1:-1;;;;;;4463:856:0:o;35846:137::-;-1:-1:-1;;;;;35950:15:0;;;35926:4;35950:15;;;:9;:15;;;;;;;;:25;;;;;;;;;;;;35846:137;;;;:::o;35485:116::-;-1:-1:-1;;;;;35573:20:0;35546:7;35573:20;;;:11;:20;;;;;;;35485:116::o;30620:858::-;30825:4;-1:-1:-1;;;;;30855:16:0;;30847:67;;;;-1:-1:-1;;;30847:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30933:18:0;;30925:69;;;;-1:-1:-1;;;30925:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31013:15:0;;;;;;:9;:15;;;;;;;;31029:10;31013:27;;;;;;;;;;31005:71;;;;;-1:-1:-1;;;31005:71:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31005:71:0;;;;;;;;;;;;;;;31207:6;-1:-1:-1;;;;;31094:181:0;31120:10;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;;;;;;;31145:11:0;31171:4;31190:2;31228:5;31248:16;31094:181;;;;;;;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;31094:181:0;;;;;;-1:-1:-1;;;;;31094:181:0;-1:-1:-1;;;;;31094:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31094:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31295:175;31315:11;31341:10;31366:4;31385:2;31402:6;31423:5;31443:16;31295:5;:175::i;5604:682::-;5749:14;;5696:4;;-1:-1:-1;;;;;5749:14:0;5735:10;:28;5713:125;;;;-1:-1:-1;;;5713:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5851:23;5877:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5877:18:0;;-1:-1:-1;;;5877:20:0:i;:::-;5908:30;5941:25;;;:8;:25;;;;;5851:46;;-1:-1:-1;6019:20:0;6001:14;;;;;;:38;;;;;;;;;5979:142;;;;-1:-1:-1;;;5979:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6134:14;;;:39;;-1:-1:-1;;6134:39:0;6151:22;6134:39;;;;6224:17;;;6243:12;;;;6191:65;;;-1:-1:-1;;;;;6224:17:0;;;6191:65;;;;;;;;;;;;;;;;;;;;;;;6211:11;;6191:65;;6224:17;6191:65;;;;6211:11;6191:65;;6211:11;6191:65;1:33:-1;99:1;81:16;;;74:27;6191:65:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6191:65:0;;;;-1:-1:-1;6191:65:0;;-1:-1:-1;;;;;;6191:65:0;-1:-1:-1;6274:4:0;;5604:682;-1:-1:-1;;;;5604:682:0:o;32266:151::-;32345:4;32370:39;32383:11;32396:5;32403;32370:12;:39::i;20546:134::-;-1:-1:-1;;;;;20645:18:0;;;20618:7;20645:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20546:134::o;47593:610::-;47683:21;47715:13;47739:26;47776:23;47823;47849:20;:11;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;47849:18:0;;-1:-1:-1;;;47849:20:0:i;:::-;47882:37;47922:31;;;:14;:31;;;;;;;;47993:5;:22;;;;;;48050:20;;;;;48085:19;;;;48162:22;;;;48028:167;;;;;48050:20;48028:167;;;;;;;;-1:-1:-1;;48028:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;47922:31;;-1:-1:-1;47922:31:0;;47993:22;;-1:-1:-1;;;;;48050:20:0;;;;48085:19;;47922:31;;48162:22;;;48028:167;47922:31;;48028:167;;;47922:31;48028:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47593:610;;;;;;;:::o;33848:1070::-;33936:4;33953:26;33982:5;:27;33988:20;:11;:18;:20::i;:::-;33982:27;;;;;;;;;;;-1:-1:-1;33982:27:0;;-1:-1:-1;34054:22:0;34030:20;;;;;;;;:46;;;;;;;;34022:103;;;;-1:-1:-1;;;34022:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34145:36;34156:13;:24;;;34145:10;:36::i;:::-;34144:37;34136:84;;;;-1:-1:-1;;;34136:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34253:20;;;;-1:-1:-1;;;;;34253:20:0;34277:10;34253:34;;:72;;-1:-1:-1;34291:20:0;;-1:-1:-1;;;;;34291:20:0;34315:10;34291:34;34253:72;34231:177;;;;-1:-1:-1;;;34231:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34445:24;;;;34486:21;34482:237;;34551:1;34524:24;;;:28;34482:237;;;34682:25;:3;34690:16;34682:25;:7;:25;:::i;:::-;34655:24;;;:52;34482:237;34762:20;;34851:24;;;;34736:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34762:20:0;;;;34736:150;;34797:11;;34823:13;;34851:24;;34736:150;;;;;;;;;;;;;34762:20;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34736:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34906:4:0;;33848:1070;-1:-1:-1;;;;33848:1070:0:o;875:29::-;;;-1:-1:-1;;;;;875:29:0;;:::o;1222:94::-;1305:3;;1222:94;:::o;9525:98::-;9605:10;9525:98;:::o;25808:338::-;-1:-1:-1;;;;;25902:19:0;;25894:68;;;;-1:-1:-1;;;25894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25981:21:0;;25973:68;;;;-1:-1:-1;;;25973:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26054:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26106:32;;;;;;;;;;;;;;;;;25808:338;;;:::o;20002:110::-;-1:-1:-1;;;;;20086:18:0;20059:7;20086:18;;;;;;;;;;;;20002:110::o;1629:763::-;1754:4;1771:23;1797:20;:11;:18;:20::i;:::-;1828:30;1861:25;;;:8;:25;;;;;1771:46;;-1:-1:-1;1908:25:0;:15;:23;:25::i;:::-;1907:26;1899:72;;;;-1:-1:-1;;;1899:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1990:12;;;;:17;1982:67;;;;-1:-1:-1;;;1982:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2062:17;;;:30;;-1:-1:-1;;;;;;2062:30:0;2082:10;2062:30;;;2103:41;;;;2062:7;;2103:41;;;;;:::i;:::-;-1:-1:-1;2155:14:0;;;:40;;-1:-1:-1;;2155:40:0;2172:23;2155:40;;;2221:9;2206:12;;;:24;2248:112;;;2309:10;2248:112;;;;;;;;;;;;;;;;;;;;;;;2334:15;;2248:112;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2248:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2248:112:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2248:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2380:4:0;;1629:763;-1:-1:-1;;;;1629:763:0:o;21451:304::-;21540:4;21557:36;21567:6;21575:9;21586:6;21557:9;:36::i;:::-;21604:121;21613:6;21621:12;:10;:12::i;:::-;21635:89;21673:6;21635:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21635:19:0;;;;;;:11;:19;;;;;;21655:12;:10;:12::i;:::-;-1:-1:-1;;;;;21635:33:0;;;;;;;;;;;;-1:-1:-1;21635:33:0;;;:89;;:37;:89;:::i;21604:121::-;-1:-1:-1;21743:4:0;21451:304;;;;;:::o;110:117::-;167:7;215:2;204:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;204::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;204:14:0;;;194:25;;;;;;187:32;;110:117;;;:::o;23628:471::-;-1:-1:-1;;;;;23726:20:0;;23718:70;;;;-1:-1:-1;;;23718:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23807:23:0;;23799:71;;;;-1:-1:-1;;;23799:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23903;23925:6;23903:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23903:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;23883:17:0;;;:9;:17;;;;;;;;;;;:91;;;;24008:20;;;;;;;:32;;24033:6;24008:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23985:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;24056:35;;;;;;;23985:20;;24056:35;;;;-1:-1:-1;;;;;;;;;;;24056:35:0;;;;;;;;23628:471;;;:::o;39547:408::-;39637:27;39667:5;:27;39673:20;:11;:18;:20::i;:::-;39667:27;;;;;;;;;;;-1:-1:-1;39667:27:0;39705:21;;;:47;;39667:27;;-1:-1:-1;39729:23:0;;-1:-1:-1;;39705:47:0;;39729:23;39705:47;;;;-1:-1:-1;39860:21:0;;;;39797;;39896:20;;;;39770:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39860:21:0;;;;39797;;;;39770:177;;;;39896:20;;39770:177;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39770:177:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39547:408;;;:::o;38783:756::-;38850:4;38867:27;38897:5;:27;38903:20;:11;:18;:20::i;:::-;38897:27;;;;;;;;;;;38867:57;;38941:37;38952:14;:25;;;38941:10;:37::i;:::-;38937:387;;;39019:35;38995:21;;;:59;;-1:-1:-1;;38995:59:0;;39019:35;38995:59;;;;;;38937:387;;;39091:21;;;;-1:-1:-1;;;;;39091:21:0;39116:10;39091:35;39087:226;;;39147:21;;;:55;;39171:31;;39147:21;-1:-1:-1;;39147:55:0;;39171:31;39147:55;;39087:226;39243:21;;;:54;;-1:-1:-1;;39243:54:0;39267:30;39243:54;;;39087:226;39412:20;;;;39385:21;;;;-1:-1:-1;;;;;39385:21:0;39373:34;;;;:11;:34;;;;;;:60;;;:38;:60;:::i;:::-;39348:21;;;;-1:-1:-1;;;;;39348:21:0;39336:34;;;;:11;:34;;;;;:97;39486:20;;;;39464:17;;:43;;;:21;:43;:::i;:::-;39444:17;:63;-1:-1:-1;39527:4:0;;38783:756;-1:-1:-1;;38783:756:0:o;13672:181::-;13730:7;13762:5;;;13786:6;;;;13778:46;;;;;-1:-1:-1;;;13778:46:0;;;;;;;;;;;;-1:-1:-1;;;13778:46:0;;;;;;;;;;;;;;24380:308;-1:-1:-1;;;;;24456:21:0;;24448:65;;;;;-1:-1:-1;;;24448:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24541:12;;:24;;24558:6;24541:24;:16;:24;:::i;:::-;24526:12;:39;-1:-1:-1;;;;;24597:18:0;;:9;:18;;;;;;;;;;;:30;;24620:6;24597:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;24576:18:0;;:9;:18;;;;;;;;;;;:51;;;;24643:37;;;;;;;24576:18;;:9;;-1:-1:-1;;;;;;;;;;;24643:37:0;;;;;;;;;24380:308;;:::o;49028:697::-;49234:4;49256:31;49290:14;:36;49305:20;:11;:18;:20::i;:::-;49290:36;;;;;;;;;;;49256:70;;49348:22;:12;:20;:22::i;:::-;49347:23;49339:66;;;;;-1:-1:-1;;;49339:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;49418:37;;;;:9;;:37;;;;;:::i;:::-;-1:-1:-1;49485:24:0;49466:16;;;:43;;-1:-1:-1;;49466:43:0;;;;;;49629:15;;49659:11;;49529:188;;49549:11;;49575:7;;49597:17;;-1:-1:-1;;;;;49629:15:0;;;;49659:11;49685:5;-1:-1:-1;49529:5:0;:188::i;14128:136::-;14186:7;14213:43;14217:1;14220;14213:43;;;;;;;;;;;;;;;;;:3;:43::i;37513:1262::-;37742:4;37764:20;37787:5;:27;37793:20;:11;:18;:20::i;:::-;37787:27;;;;;;;;;;;37764:50;;37836:21;:11;:19;:21::i;:::-;37835:22;37827:65;;;;;-1:-1:-1;;;37827:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37911:10;37903:54;;;;;-1:-1:-1;;;37903:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37903:54:0;;;;;;;;;;;;;;;37976:13;;;;:18;37968:62;;;;;-1:-1:-1;;;37968:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38049:20:0;;38041:72;;;;-1:-1:-1;;;38041:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38141:15;38151:4;38141:9;:15::i;:::-;38132:5;:24;;38124:103;;;;-1:-1:-1;;;38124:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38240:23;;-1:-1:-1;;;;;;38240:23:0;;;-1:-1:-1;;;;;38240:23:0;;;;;;;;;-1:-1:-1;38274:14:0;;;:21;;;;;;;;;;38306:14;;;:19;;;;;;;;;;38336:14;;;:23;;;;;;;;;;;;;;;38370:13;;;:21;;;38402:14;;;:39;;-1:-1:-1;;38402:39:0;;;;;;38458:21;;38454:170;;38587:25;:3;38595:16;38587:25;:7;:25;:::i;:::-;38566:18;;;:46;38454:170;-1:-1:-1;;;;;38656:17:0;;;;;;:11;:17;;;;;;:28;;38678:5;38656:28;:21;:28;:::i;:::-;-1:-1:-1;;;;;38636:17:0;;;;;;:11;:17;;;;;:48;38715:17;;:28;;38737:5;38715:28;:21;:28;:::i;:::-;38695:17;:48;-1:-1:-1;38763:4:0;;37513:1262;-1:-1:-1;;;;;;;;37513:1262:0:o;37306:199::-;37369:4;37459:15;;;;;:38;;-1:-1:-1;;37479:3:0;:17;;;37306:199::o;14601:192::-;14687:7;14723:12;14715:6;;;;14707:29;;;;-1:-1:-1;;;14707:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14707:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14759:5:0;;;14601:192::o;20325:158::-;20394:4;20411:42;20421:12;:10;:12::i;:::-;20435:9;20446:6;20411:9;:42::i;32595:1243::-;32708:4;32727:27;32757:5;:27;32763:20;:11;:18;:20::i;:::-;32757:27;;;;;;;;;;;-1:-1:-1;32757:27:0;;-1:-1:-1;32830:22:0;32805:21;;;;;;;;:47;;;;;;;;:110;;;-1:-1:-1;32881:34:0;32856:21;;;;;;;;:59;;;;;;;;32805:110;32797:190;;;;-1:-1:-1;;;32797:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33006:10;32998:54;;;;;-1:-1:-1;;;32998:54:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32998:54:0;;;;;;;;;;;;;;;33071:21;;;;-1:-1:-1;;;;;33071:21:0;33096:10;33071:35;33063:91;;;;-1:-1:-1;;;33063:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33174:37;33185:14;:25;;;33174:10;:37::i;:::-;33173:38;33165:79;;;;;-1:-1:-1;;;33165:79:0;;;;;;;;;;;;-1:-1:-1;;;33165:79:0;;;;;;;;;;;;;;;33272:14;:20;;;33263:5;:29;;33255:96;;;;-1:-1:-1;;;33255:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33370:24;:64;;;;;33432:1;33423:5;33400:14;:20;;;:28;33399:34;33370:64;33366:342;;;33451:40;33472:11;33485:5;33451:20;:40::i;:::-;33506:49;33536:11;33549:5;33506:29;:49::i;:::-;33366:342;;;33588:55;33609:11;33622:14;:20;;;33588;:55::i;:::-;33658:38;33677:11;33690:5;33658:18;:38::i;:::-;33754:21;;;;33777;;;;33744:62;;-1:-1:-1;;;;;33754:21:0;;;;33777;33800:5;33744:9;:62::i;:::-;-1:-1:-1;33826:4:0;;32595:1243;-1:-1:-1;;;;32595:1243:0:o;25020:348::-;-1:-1:-1;;;;;25096:21:0;;25088:67;;;;-1:-1:-1;;;25088:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25189:68;25212:6;25189:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25189:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;25168:18:0;;:9;:18;;;;;;;;;;:89;25283:12;;:24;;25300:6;25283:24;:16;:24;:::i;:::-;25268:12;:39;25323:37;;;;;;;;25349:1;;-1:-1:-1;;;;;25323:37:0;;;-1:-1:-1;;;;;;;;;;;25323:37:0;;;;;;;;25020:348;;:::o;235:111::-;317:16;:21;;235:111::o;40480:309::-;40572:27;40602:5;:27;40608:20;:11;:18;:20::i;:::-;40602:27;;;;;;;;;;;;;;-1:-1:-1;40602:27:0;;;40689:21;;;;-1:-1:-1;;;;;40689:21:0;40677:34;;:11;:34;;;;;40602:27;;-1:-1:-1;40677:45:0;;40716:5;40677:45;:38;:45;:::i;:::-;40652:21;;;;-1:-1:-1;;;;;40652:21:0;40640:34;;;;:11;:34;;;;;:82;40753:17;;:28;;40775:5;40753:28;:21;:28;:::i;:::-;40733:17;:48;-1:-1:-1;;;40480:309:0:o;39963:509::-;40064:27;40094:5;:27;40100:20;:11;:18;:20::i;:::-;40094:27;;;;;;;;;;;-1:-1:-1;40094:27:0;40132:21;;;:58;;-1:-1:-1;;40132:58:0;40156:34;40132:58;;;40224:20;;;;40094:27;;-1:-1:-1;40224:31:0;;40249:5;40224:24;:31::i;:::-;40201:20;;;:54;;;40373:21;;;;40311;;40273:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40373:21:0;;;;40311;;;;;40273:191;;;;40201:54;;40273:191;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;49794:1191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49794:1191:0;;;-1:-1:-1;49794:1191:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://b0301d4465a561932901711da016e59c1b9e6f1d27164d3e537971db839bedb4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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