Contract 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 9

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x54152b5371315daa2615e63d0a86d83d7904d6a594e16f3541571557f5a276cfSet Prices With ...1369253062023-10-03 0:11:09178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.0000354 0.1
0x16a0719e832360a2200a732610703844877251d3516e0cf6e29cb0303eb3d25bSet Prices With ...1369247022023-10-03 0:08:09178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00003568 0.1
0x31af088809c370e57d206bbac88e9336facb95894510bc83d7a0b948e1cbed38Set Prices With ...1369240092023-10-03 0:04:54178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00003959 0.1
0xd9d26c146d681496de5d13e1d612c6b9e913d82b9dc750842ed4c6460d3d7178Set Prices With ...1369237362023-10-03 0:03:39178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00003959 0.1
0x4379f9f04de994a0c7011d9231a05db34f3061484c9e95d8ff1e0f7553f66d47Set Prices With ...1369234572023-10-03 0:02:24178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00003987 0.1
0x40b426622422cc2354ec690fed68a0a1b2ab2279cb77a6ed9576190ee45219e8Set Prices With ...1369227712023-10-02 23:59:09178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004016 0.1
0x634f9b8831440f7761fcbded875364761057d91d88d50937f72b85856d2a4943Set Prices With ...1369222712023-10-02 23:56:44178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004016 0.1
0xd599a8e9cb30846df917eff624a6d20aca6c55b9072e2f70a6afdb2a3a72e82aSet Prices With ...1369220272023-10-02 23:55:39178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004016 0.1
0x4c79c0104e50ad59d007cf2edf7b30dcf231cda2d17f2a2514efc2fe70f46d38Set Prices With ...1369213962023-10-02 23:52:24178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004357 0.1
0x0917dca312a56bb257f8d3c3e0f3ee26e15c229ef687e1a84a1ef2f3b1901393Set Prices With ...1369207232023-10-02 23:49:09178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004357 0.1
0x7434dd540cb37e6128b6fa6b39d45f8e8fbf2bdf6d6436e04255762ad5bb607bSet Prices With ...1369201282023-10-02 23:46:07178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004191 0.1
0xf94a49c7e0c63563736d1c2d6e18b81278752f9e465d1201f383b55731ad0adcSet Prices With ...1369196582023-10-02 23:43:53178 days 6 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004163 0.1
0x177c78359299cfca8de5a2b1dbf20072f286d274b8f81730a0b88de9b15598ffSet Prices With ...1369191532023-10-02 23:41:24178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004545 0.1
0x7a6ecca4a06bcf3f2c4e63abd7519805d7ee80258dcc17bafdce27bfe2d86179Set Prices With ...1369185202023-10-02 23:38:09178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.000046 0.1
0x79bc204420617e9b92b23897d87565d441df453efaead0d10e008603e69f4fa8Set Prices With ...1369178372023-10-02 23:34:54178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004502 0.1
0xfaefb52036963ea1f9520eda4e7c0cf90c6e020d705ee3ac292a8ffbda829cd7Set Prices With ...1369172172023-10-02 23:31:48178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004502 0.1
0x4bf17ae735cb0cad9356fe6077f699e3a3d4e79889e0e2583d0485cf89bba48aSet Prices With ...1369168272023-10-02 23:29:54178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004502 0.1
0x994ecba751a9cc9538f2c520b24d4abd94405c388a541cd1ce96e2b2155b5388Set Prices With ...1369162182023-10-02 23:26:39178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004716 0.1
0xe77bdcb863c7229dcc9640d466f546af219db5ecefb57467a65493aed5d0ed10Set Prices With ...1369155792023-10-02 23:23:24178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004744 0.1
0x8c5503617712f292b7ae2de443a9cf830aa4d74b3d2502d13b7beb9372bb97a7Set Prices With ...1369149822023-10-02 23:20:09178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004499 0.1
0x4f4371fb95d0273fdfaca7689411e2f3c42099c7cdedc63d626828ad1f709509Set Prices With ...1369143622023-10-02 23:17:02178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004471 0.1
0x16825089c51ea812af31cba238eb4992c7fb923b7dda372c70fdad959a176057Set Prices With ...1369140012023-10-02 23:15:09178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004756 0.1
0xcb64af4771b4d60d6cb549e90c05628d7475e7532c364b1d9b8cb210c56c7713Set Prices With ...1369134302023-10-02 23:12:09178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004784 0.1
0x301eac9366be220830219e763e076169ff358ba1492514461cbe1e59c9522878Set Prices With ...1369130682023-10-02 23:10:24178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.00004784 0.1
0x77b5fc22dbf209dcf0b701cd97fca93bff3b6f6a68dab759451ef9ba60ee605fSet Prices With ...1369124452023-10-02 23:07:09178 days 7 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x2ca1df570cca0421cd4fd4798417a2b36c73e8450 ETH0.0000484 0.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xfb3f5dc49bbef8bd9fcd8513b58ed4273c0fa754905fbd65c31d11ccb87e286c720865282023-03-21 10:18:13373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x830c8e1373ceb62fca6fce904304bc24de5322561a98f0c3fd2758fd7494d619720863862023-03-21 10:17:43373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x48e931a0cb5256421283ccf603b316f296d28c0e1ae63deab8ad54a33277fe9d720862652023-03-21 10:17:12373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xd05d54f5aa38e951d5f4adaf64ff3e6dd7bc4b6cb8f41da0a3afb53048c82464720859762023-03-21 10:15:58373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xd05d54f5aa38e951d5f4adaf64ff3e6dd7bc4b6cb8f41da0a3afb53048c82464720859762023-03-21 10:15:58373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xd05d54f5aa38e951d5f4adaf64ff3e6dd7bc4b6cb8f41da0a3afb53048c82464720859762023-03-21 10:15:58373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xd05d54f5aa38e951d5f4adaf64ff3e6dd7bc4b6cb8f41da0a3afb53048c82464720859762023-03-21 10:15:58373 days 20 hrs ago 0x2ca1df570cca0421cd4fd4798417a2b36c73e845 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FastPriceFeed

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion
File 1 of 7 : Governable.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

contract Governable {
    address public gov;

    constructor() public {
        gov = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == gov, "Governable: forbidden");
        _;
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }
}

File 2 of 7 : IPositionRouter.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IPositionRouter {
    function increasePositionRequestKeysStart() external returns (uint256);

    function decreasePositionRequestKeysStart() external returns (uint256);

    function executeIncreasePositions(uint256 _count, address payable _executionFeeReceiver) external;

    function executeDecreasePositions(uint256 _count, address payable _executionFeeReceiver) external;

    function createIncreasePositionForUser(
        address _account,
        address[] memory _path,
        address _indexToken,
        uint256 _amountIn,
        uint256 _minOut,
        uint256 _sizeDelta,
        bool _isLong,
        uint256 _acceptablePrice,
        uint256 _executionFee,
        bytes32 _referralCode,
        bool _wrap
    ) external payable;
}

File 3 of 7 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 7 : FastPriceFeed.sol
// SPDX-License-Identifier: MIT

import "../libraries/math/SafeMath.sol";

import "./interfaces/ISecondaryPriceFeed.sol";
import "./interfaces/IFastPriceFeed.sol";
import "./interfaces/IFastPriceEvents.sol";
import "../core/interfaces/IPositionRouter.sol";
import "../access/Governable.sol";

pragma solidity 0.6.12;

contract FastPriceFeed is IFastPriceFeed, ISecondaryPriceFeed, Governable {
    using SafeMath for uint256;

    uint256 public constant PRICE_PRECISION = 10 ** 30;

    // uint256(~0) is 256 bits of 1s
    // shift the 1s by (256 - 32) to get (256 - 32) 0s followed by 32 1s
    uint256 public constant PRICE_BITMASK = uint256(~0) >> (256 - 32);

    uint256 public constant BASIS_POINTS_DIVISOR = 10000;

    uint256 public constant MAX_PRICE_DURATION = 30 minutes;

    bool public isInitialized;
    bool public isSpreadEnabled = false;
    address public fastPriceEvents;

    address public tokenManager;

    address public positionRouter;

    uint256 public override lastUpdatedAt;
    uint256 public override lastUpdatedBlock;

    uint256 public priceDuration;
    uint256 public minBlockInterval;
    uint256 public maxTimeDeviation;

    // volatility basis points
    uint256 public volBasisPoints;
    // max deviation from primary price
    uint256 public maxDeviationBasisPoints;

    uint256 public minAuthorizations;
    uint256 public disableFastPriceVoteCount = 0;

    mapping(address => bool) public isUpdater;

    mapping(address => uint256) public prices;

    mapping(address => bool) public isSigner;
    mapping(address => bool) public disableFastPriceVotes;

    // array of tokens used in setCompactedPrices, saves L1 calldata gas costs
    address[] public tokens;
    // array of tokenPrecisions used in setCompactedPrices, saves L1 calldata gas costs
    // if the token price will be sent with 3 decimals, then tokenPrecision for that token
    // should be 10 ** 3
    uint256[] public tokenPrecisions;

    event DisableFastPrice(address signer);
    event EnableFastPrice(address signer);

    modifier onlySigner() {
        require(isSigner[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyUpdater() {
        require(isUpdater[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyTokenManager() {
        require(msg.sender == tokenManager, "FastPriceFeed: forbidden");
        _;
    }

    constructor(
        uint256 _priceDuration,
        uint256 _minBlockInterval,
        uint256 _maxDeviationBasisPoints,
        address _fastPriceEvents,
        address _tokenManager,
        address _positionRouter
    ) public {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
        minBlockInterval = _minBlockInterval;
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
        fastPriceEvents = _fastPriceEvents;
        tokenManager = _tokenManager;
        positionRouter = _positionRouter;
    }

    function initialize(
        uint256 _minAuthorizations,
        address[] memory _signers,
        address[] memory _updaters
    ) public onlyGov {
        require(!isInitialized, "FastPriceFeed: already initialized");
        isInitialized = true;

        minAuthorizations = _minAuthorizations;

        for (uint256 i = 0; i < _signers.length; i++) {
            address signer = _signers[i];
            isSigner[signer] = true;
        }

        for (uint256 i = 0; i < _updaters.length; i++) {
            address updater = _updaters[i];
            isUpdater[updater] = true;
        }
    }

    function setTokenManager(address _tokenManager) external onlyGov {
        tokenManager = _tokenManager;
    }

    function setSigner(address _account, bool _isActive) external onlyGov {
        isSigner[_account] = _isActive;
    }

    function setUpdater(address _account, bool _isActive) external onlyGov {
        isUpdater[_account] = _isActive;
    }

    function setFastPriceEvents(address _fastPriceEvents) external onlyGov {
        fastPriceEvents = _fastPriceEvents;
    }

    function setPriceDuration(uint256 _priceDuration) external onlyGov {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
    }

    function setMinBlockInterval(uint256 _minBlockInterval) external onlyGov {
        minBlockInterval = _minBlockInterval;
    }

    function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyUpdater {
        isSpreadEnabled = _isSpreadEnabled;
    }

    function setMaxTimeDeviation(uint256 _maxTimeDeviation) external onlyGov {
        maxTimeDeviation = _maxTimeDeviation;
    }

    function setLastUpdatedAt(uint256 _lastUpdatedAt) external onlyGov {
        lastUpdatedAt = _lastUpdatedAt;
    }

    function setVolBasisPoints(uint256 _volBasisPoints) external onlyGov {
        volBasisPoints = _volBasisPoints;
    }

    function setMaxDeviationBasisPoints(uint256 _maxDeviationBasisPoints) external onlyGov {
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
    }

    function setMinAuthorizations(uint256 _minAuthorizations) external onlyTokenManager {
        minAuthorizations = _minAuthorizations;
    }

    function setTokens(address[] memory _tokens, uint256[] memory _tokenPrecisions) external onlyGov {
        require(_tokens.length == _tokenPrecisions.length, "FastPriceFeed: invalid lengths");
        tokens = _tokens;
        tokenPrecisions = _tokenPrecisions;
    }

    function setPrices(address[] memory _tokens, uint256[] memory _prices, uint256 _timestamp) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _tokens.length; i++) {
                address token = _tokens[i];
                prices[token] = _prices[i];
                _emitPriceEvent(_fastPriceEvents, token, _prices[i]);
            }
        }
    }

    function setCompactedPrices(uint256[] memory _priceBitArray, uint256 _timestamp) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _priceBitArray.length; i++) {
                uint256 priceBits = _priceBitArray[i];

                for (uint256 j = 0; j < 8; j++) {
                    uint256 index = i * 8 + j;
                    if (index >= tokens.length) {
                        return;
                    }

                    uint256 startBit = 32 * j;
                    uint256 price = (priceBits >> startBit) & PRICE_BITMASK;

                    address token = tokens[i * 8 + j];
                    uint256 tokenPrecision = tokenPrecisions[i * 8 + j];
                    uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                    prices[token] = adjustedPrice;

                    _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
                }
            }
        }
    }

    function setPricesWithBits(uint256 _priceBits, uint256 _timestamp) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);
    }

    function setPricesWithBitsAndExecute(
        uint256 _priceBits,
        uint256 _timestamp,
        uint256 _endIndexForIncreasePositions,
        uint256 _endIndexForDecreasePositions
    ) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);

        IPositionRouter _positionRouter = IPositionRouter(positionRouter);
        _positionRouter.executeIncreasePositions(_endIndexForIncreasePositions, payable(msg.sender));
        _positionRouter.executeDecreasePositions(_endIndexForDecreasePositions, payable(msg.sender));
    }

    function disableFastPrice() external onlySigner {
        require(!disableFastPriceVotes[msg.sender], "FastPriceFeed: already voted");
        disableFastPriceVotes[msg.sender] = true;
        disableFastPriceVoteCount = disableFastPriceVoteCount.add(1);

        emit DisableFastPrice(msg.sender);
    }

    function enableFastPrice() external onlySigner {
        require(disableFastPriceVotes[msg.sender], "FastPriceFeed: already enabled");
        disableFastPriceVotes[msg.sender] = false;
        disableFastPriceVoteCount = disableFastPriceVoteCount.sub(1);

        emit EnableFastPrice(msg.sender);
    }

    function getPrice(address _token, uint256 _refPrice, bool _maximise) external view override returns (uint256) {
        // If it has been longer than priceDuration since return parameter given
        if (block.timestamp > lastUpdatedAt.add(priceDuration)) {
            return _refPrice;
        }

        uint256 fastPrice = prices[_token];
        if (fastPrice == 0) {
            return _refPrice;
        }

        uint256 maxPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.add(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);
        uint256 minPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.sub(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);

        if (favorFastPrice()) {
            if (fastPrice >= minPrice && fastPrice <= maxPrice) {
                if (_maximise) {
                    if (_refPrice > fastPrice) {
                        uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.add(volBasisPoints)).div(
                            BASIS_POINTS_DIVISOR
                        );
                        // the volPrice should not be more than _refPrice
                        return volPrice > _refPrice ? _refPrice : volPrice;
                    }
                    return fastPrice;
                }

                if (_refPrice < fastPrice) {
                    uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.sub(volBasisPoints)).div(
                        BASIS_POINTS_DIVISOR
                    );
                    // the volPrice should not be less than _refPrice
                    return volPrice < _refPrice ? _refPrice : volPrice;
                }

                return fastPrice;
            }
        }

        if (_maximise) {
            if (_refPrice > fastPrice) {
                return _refPrice;
            }
            return fastPrice > maxPrice ? maxPrice : fastPrice;
        }

        if (_refPrice < fastPrice) {
            return _refPrice;
        }
        return fastPrice < minPrice ? minPrice : fastPrice;
    }

    function favorFastPrice() public view returns (bool) {
        if (isSpreadEnabled) {
            return false;
        }

        if (disableFastPriceVoteCount >= minAuthorizations) {
            return false;
        }

        return true;
    }

    function _setPricesWithBits(uint256 _priceBits, uint256 _timestamp) private {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 j = 0; j < 8; j++) {
                uint256 index = j;
                if (index >= tokens.length) {
                    return;
                }

                uint256 startBit = 32 * j;
                uint256 price = (_priceBits >> startBit) & PRICE_BITMASK;

                address token = tokens[j];
                uint256 tokenPrecision = tokenPrecisions[j];
                uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                prices[token] = adjustedPrice;

                _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
            }
        }
    }

    function _emitPriceEvent(address _fastPriceEvents, address _token, uint256 _price) private {
        if (_fastPriceEvents == address(0)) {
            return;
        }

        IFastPriceEvents(_fastPriceEvents).emitPriceEvent(_token, _price);
    }

    function _setLastUpdatedValues(uint256 _timestamp) private returns (bool) {
        if (minBlockInterval > 0) {
            require(
                block.number.sub(lastUpdatedBlock) >= minBlockInterval,
                "FastPriceFeed: minBlockInterval not yet passed"
            );
        }

        require(_timestamp > block.timestamp.sub(maxTimeDeviation), "FastPriceFeed: _timestamp below allowed range");
        require(_timestamp < block.timestamp.add(maxTimeDeviation), "FastPriceFeed: _timestamp exceeds allowed range");

        // do not update prices if _timestamp is before the current lastUpdatedAt value
        if (_timestamp < lastUpdatedAt) {
            return false;
        }

        lastUpdatedAt = _timestamp;
        lastUpdatedBlock = block.number;

        return true;
    }
}

File 5 of 7 : IFastPriceEvents.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IFastPriceEvents {
    function emitPriceEvent(address _token, uint256 _price) external;
}

File 6 of 7 : IFastPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IFastPriceFeed {
    function lastUpdatedAt() external view returns (uint256);

    function lastUpdatedBlock() external view returns (uint256);
}

File 7 of 7 : ISecondaryPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface ISecondaryPriceFeed {
    function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"},{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"},{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"},{"internalType":"address","name":"_fastPriceEvents","type":"address"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_positionRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"DisableFastPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"EnableFastPrice","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRICE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_BITMASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFastPriceVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disableFastPriceVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastPriceEvents","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorFastPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_refPrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"},{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_updaters","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpreadEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUpdater","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeviationBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTimeDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAuthorizations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_priceBitArray","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setCompactedPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fastPriceEvents","type":"address"}],"name":"setFastPriceEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSpreadEnabled","type":"bool"}],"name":"setIsSpreadEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdatedAt","type":"uint256"}],"name":"setLastUpdatedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"}],"name":"setMaxDeviationBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTimeDeviation","type":"uint256"}],"name":"setMaxTimeDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"}],"name":"setMinAuthorizations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"}],"name":"setMinBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"}],"name":"setPriceDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPricesWithBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_endIndexForIncreasePositions","type":"uint256"},{"internalType":"uint256","name":"_endIndexForDecreasePositions","type":"uint256"}],"name":"setPricesWithBitsAndExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_tokenPrecisions","type":"uint256[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_volBasisPoints","type":"uint256"}],"name":"setVolBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrecisions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526000805460ff60a81b19168155600c5534801561002057600080fd5b5060405161235f38038061235f833981810160405260c081101561004357600080fd5b508051602082015160408301516060840151608085015160a090950151600080546001600160a01b0319163317905593949293919290916107088611156100bb5760405162461bcd60e51b815260040180806020018281038252602581526020018061233a6025913960400191505060405180910390fd5b600695909555600793909355600a91909155600180546001600160a01b039283166001600160a01b031991821617909155600280549383169382169390931790925560038054919093169116179055612221806101196000396000f3fe608060405234801561001057600080fd5b50600436106102305760003560e01c806303b049361461023557806303cd25711461026f57806303f4d7dc146102895780630e9272ea1461032e578063114fbeb314610352578063126082cf1461035a57806312d43a51146103625780631389a3cc1461036a57806314dd2dce14610399578063162ac4e0146103b657806317835d1c146103dc5780631a153391146103ff578063287800c91461042d5780632a709b141461043557806331cb61051461043d578063392e53cd1461046b5780633aa08f861461047357806344c231931461047b5780634d11fb4a146104985780634f64b2be146104b55780634fdfb086146104d257806354aea127146104f857806361ef161f14610500578063668d3d6514610508578063695d4184146105105780636ccd47c414610518578063715c753614610520578063776d16c114610528578063782661bc146105455780637cb2b79c1461066a5780637df73e27146106905780637fbc79c6146106b65780637fece368146107e057806382553aad1461081457806395082d25146108315780639e4de0e314610839578063b0a2566614610856578063b3606b561461085e578063c0e4de8e14610866578063c8390a481461086e578063c84a912414610991578063ce98dfa814610999578063cfad57a2146109b8578063cfed246b146109de578063d6a153f114610a04578063d925351a14610a21578063f67e3bf014610a3e578063f90ce5ba14610a46575b600080fd5b61025b6004803603602081101561024b57600080fd5b50356001600160a01b0316610a4e565b604080519115158252519081900360200190f35b610277610a63565b60408051918252519081900360200190f35b61032c6004803603604081101561029f57600080fd5b810190602081018135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a69915050565b005b610336610bf1565b604080516001600160a01b039092168252519081900360200190f35b610277610c00565b610277610c06565b610336610c0c565b61032c6004803603608081101561038057600080fd5b5080359060208101359060408101359060600135610c1b565b61032c600480360360208110156103af57600080fd5b5035610d4f565b61032c600480360360208110156103cc57600080fd5b50356001600160a01b0316610da1565b61032c600480360360408110156103f257600080fd5b5080359060200135610e10565b61032c6004803603604081101561041557600080fd5b506001600160a01b0381351690602001351515610e6c565b610277610ee4565b610336610eea565b61032c6004803603604081101561045357600080fd5b506001600160a01b0381351690602001351515610ef9565b61025b610f71565b610277610f81565b61032c6004803603602081101561049157600080fd5b5035610f87565b610277600480360360208110156104ae57600080fd5b503561101a565b610336600480360360208110156104cb57600080fd5b5035611038565b61025b600480360360208110156104e857600080fd5b50356001600160a01b031661105f565b610277611074565b61033661107a565b610277611089565b61025b61108f565b61032c61109f565b6102776111b2565b61032c6004803603602081101561053e57600080fd5b50356111b8565b61032c6004803603606081101561055b57600080fd5b810190602081018135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460208302840111600160201b8311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061120a915050565b61032c6004803603602081101561068057600080fd5b50356001600160a01b031661130c565b61025b600480360360208110156106a657600080fd5b50356001600160a01b031661137b565b61032c600480360360608110156106cc57600080fd5b81359190810190604081016020820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111600160201b831117156107a257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611390945050505050565b610277600480360360608110156107f657600080fd5b506001600160a01b03813516906020810135906040013515156114e9565b61032c6004803603602081101561082a57600080fd5b50356116a7565b6102776116f9565b61032c6004803603602081101561084f57600080fd5b5035611709565b61027761175b565b610277611761565b61025b611767565b61032c6004803603604081101561088457600080fd5b810190602081018135600160201b81111561089e57600080fd5b8201836020820111156108b057600080fd5b803590602001918460208302840111600160201b831117156108d157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561092057600080fd5b82018360208201111561093257600080fd5b803590602001918460208302840111600160201b8311171561095357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061179c945050505050565b61032c611866565b61032c600480360360208110156109af57600080fd5b5035151561197d565b61032c600480360360208110156109ce57600080fd5b50356001600160a01b03166119ed565b610277600480360360208110156109f457600080fd5b50356001600160a01b0316611a5c565b61032c60048036036020811015610a1a57600080fd5b5035611a6e565b61032c60048036036020811015610a3757600080fd5b5035611ac0565b610277611b12565b610277611b1a565b60106020526000908152604090205460ff1681565b60065481565b336000908152600d602052604090205460ff16610abb576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b6000610ac682611b20565b90508015610beb576001546001600160a01b031660005b8451811015610be8576000858281518110610af457fe5b6020026020010151905060005b6008811015610bde57601154600884028201908110610b2557505050505050610bed565b60118054602084029185831c63ffffffff169160009190600889028701908110610b4b57fe5b6000918252602082200154601280546001600160a01b0390921693509060088a028801908110610b7757fe5b60009182526020822001549150610ba482610b9e8668327cb2734119d3b7a9601e1b611c33565b90611c95565b6001600160a01b0384166000908152600e602052604090208190559050610bcc8a8483611cd4565b505060019094019350610b0192505050565b5050600101610add565b50505b505b5050565b6001546001600160a01b031681565b60095481565b61271081565b6000546001600160a01b031681565b336000908152600d602052604090205460ff16610c6d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610c778484611d5b565b60035460408051629a208160e81b81526004810185905233602482015290516001600160a01b03909216918291639a20810091604480830192600092919082900301818387803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b50506040805163f3883d8b60e01b81526004810186905233602482015290516001600160a01b038516935063f3883d8b9250604480830192600092919082900301818387803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b03163314610d9c576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600455565b6000546001600160a01b03163314610dee576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600d602052604090205460ff16610e62576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610bed8282611d5b565b6000546001600160a01b03163314610eb9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600b5481565b6002546001600160a01b031681565b6000546001600160a01b03163314610f46576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600054600160a01b900460ff1681565b60085481565b6000546001600160a01b03163314610fd4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6107088111156110155760405162461bcd60e51b81526004018080602001828103825260258152602001806120ba6025913960400191505060405180910390fd5b600655565b6012818154811061102757fe5b600091825260209091200154905081565b6011818154811061104557fe5b6000918252602090912001546001600160a01b0316905081565b600d6020526000908152604090205460ff1681565b60045481565b6003546001600160a01b031681565b61070881565b600054600160a81b900460ff1681565b336000908152600f602052604090205460ff166110f1576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16611155576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20616c726561647920656e61626c65640000604482015290519081900360640190fd5b336000908152601060205260409020805460ff19169055600c5461117a906001611e43565b600c556040805133815290517f9fe0c305c33aa92757a537936872a60be0d91549a4303cc99fd8b7fce8a002759181900360200190a1565b600a5481565b6000546001600160a01b03163314611205576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600855565b336000908152600d602052604090205460ff1661125c576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600061126782611b20565b90508015611306576001546001600160a01b031660005b855181101561130357600086828151811061129557fe5b602002602001015190508582815181106112ab57fe5b6020026020010151600e6000836001600160a01b03166001600160a01b03168152602001908152602001600020819055506112fa83828885815181106112ed57fe5b6020026020010151611cd4565b5060010161127e565b50505b50505050565b6000546001600160a01b03163314611359576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031633146113dd576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600054600160a01b900460ff16156114265760405162461bcd60e51b81526004018080602001828103825260228152602001806121ca6022913960400191505060405180910390fd5b6000805460ff60a01b1916600160a01b178155600b8490555b825181101561149257600083828151811061145657fe5b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff1916600190811790915591909101905061143f565b5060005b81518110156113065760008282815181106114ad57fe5b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff19166001908117909155919091019050611496565b6000611502600654600454611e8590919063ffffffff16565b4211156115105750816116a0565b6001600160a01b0384166000908152600e60205260409020548061153757839150506116a0565b6000611560612710610b9e611559600a54612710611e8590919063ffffffff16565b8890611c33565b9050600061158b612710610b9e611584600a54612710611e4390919063ffffffff16565b8990611c33565b9050611595611767565b15611646578083101580156115aa5750818311155b1561164657841561160d57828611156116025760006115e6612710610b9e6115df600954612710611e8590919063ffffffff16565b8790611c33565b90508681116115f557806115f7565b865b9450505050506116a0565b8293505050506116a0565b82861015611602576000611637612710610b9e6115df600954612710611e4390919063ffffffff16565b90508681106115f557806115f7565b8415611678578286111561165f578593505050506116a0565b81831161166c578261166e565b815b93505050506116a0565b8286101561168b578593505050506116a0565b808310611698578261169a565b805b93505050505b9392505050565b6000546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600a55565b68327cb2734119d3b7a9601e1b81565b6000546001600160a01b03163314611756576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600955565b600c5481565b60075481565b60008054600160a81b900460ff161561178257506000611799565b600b54600c541061179557506000611799565b5060015b90565b6000546001600160a01b031633146117e9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b805182511461183f576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20696e76616c6964206c656e677468730000604482015290519081900360640190fd5b8151611852906011906020850190611fd9565b508051610beb90601290602084019061203e565b336000908152600f602052604090205460ff166118b8576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff161561191c576040805162461bcd60e51b815260206004820152601c60248201527b11985cdd141c9a58d9519959590e88185b1c9958591e481d9bdd195960221b604482015290519081900360640190fd5b336000908152601060205260409020805460ff19166001908117909155600c5461194591611e85565b600c556040805133815290517f4c0c5fabf50e808e3bc8d19577d305e3a7163eea7e8a74a50caa8896694cd44b9181900360200190a1565b336000908152600d602052604090205460ff166119cf576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b60008054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611a3a576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e6020526000908152604090205481565b6000546001600160a01b03163314611abb576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600755565b6002546001600160a01b03163314611b0d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600b55565b63ffffffff81565b60055481565b60075460009015611b7957600754600554611b3c904390611e43565b1015611b795760405162461bcd60e51b815260040180806020018281038252602e81526020018061219c602e913960400191505060405180910390fd5b600854611b87904290611e43565b8211611bc45760405162461bcd60e51b815260040180806020018281038252602d81526020018061216f602d913960400191505060405180910390fd5b600854611bd2904290611e85565b8210611c0f5760405162461bcd60e51b815260040180806020018281038252602f81526020018061211f602f913960400191505060405180910390fd5b600454821015611c2157506000611c2e565b5060048190554360055560015b919050565b600082611c4257506000611c8f565b82820282848281611c4f57fe5b0414611c8c5760405162461bcd60e51b815260040180806020018281038252602181526020018061214e6021913960400191505060405180910390fd5b90505b92915050565b6000611c8c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611edd565b6001600160a01b038316611ce757610beb565b826001600160a01b031663e0409c7183836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b50505050505050565b6000611d6682611b20565b90508015610beb576001546001600160a01b031660005b6008811015610be85760115481908110611d9a5750505050610bed565b60118054602084029188831c63ffffffff16916000919086908110611dbb57fe5b6000918252602082200154601280546001600160a01b0390921693509087908110611de257fe5b60009182526020822001549150611e0982610b9e8668327cb2734119d3b7a9601e1b611c33565b6001600160a01b0384166000908152600e602052604090208190559050611e31888483611cd4565b505060019094019350611d7d92505050565b6000611c8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f7f565b600082820183811015611c8c576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008183611f695760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f2e578181015183820152602001611f16565b50505050905090810190601f168015611f5b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f7557fe5b0495945050505050565b60008184841115611fd15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f2e578181015183820152602001611f16565b505050900390565b82805482825590600052602060002090810192821561202e579160200282015b8281111561202e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff9565b5061203a929150612085565b5090565b828054828255906000526020600020908101928215612079579160200282015b8281111561207957825182559160200191906001019061205e565b5061203a9291506120a4565b5b8082111561203a5780546001600160a01b0319168155600101612086565b5b8082111561203a57600081556001016120a556fe466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e476f7665726e61626c653a20666f7262696464656e0000000000000000000000466173745072696365466565643a20666f7262696464656e0000000000000000466173745072696365466565643a205f74696d657374616d70206578636565647320616c6c6f7765642072616e6765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77466173745072696365466565643a205f74696d657374616d702062656c6f7720616c6c6f7765642072616e6765466173745072696365466565643a206d696e426c6f636b496e74657276616c206e6f742079657420706173736564466173745072696365466565643a20616c726561647920696e697469616c697a6564a2646970667358221220cdc7326dbafdca00257e237a8fc72a52215a76e7f156663575aa1ac109fa174464736f6c634300060c0033466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b0000000000000000000000003d38f21012052c201bb94eb97eed6f774eec4b69000000000000000000000000bb214233c570b8e9b732212974e7baeffe63f0de

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102305760003560e01c806303b049361461023557806303cd25711461026f57806303f4d7dc146102895780630e9272ea1461032e578063114fbeb314610352578063126082cf1461035a57806312d43a51146103625780631389a3cc1461036a57806314dd2dce14610399578063162ac4e0146103b657806317835d1c146103dc5780631a153391146103ff578063287800c91461042d5780632a709b141461043557806331cb61051461043d578063392e53cd1461046b5780633aa08f861461047357806344c231931461047b5780634d11fb4a146104985780634f64b2be146104b55780634fdfb086146104d257806354aea127146104f857806361ef161f14610500578063668d3d6514610508578063695d4184146105105780636ccd47c414610518578063715c753614610520578063776d16c114610528578063782661bc146105455780637cb2b79c1461066a5780637df73e27146106905780637fbc79c6146106b65780637fece368146107e057806382553aad1461081457806395082d25146108315780639e4de0e314610839578063b0a2566614610856578063b3606b561461085e578063c0e4de8e14610866578063c8390a481461086e578063c84a912414610991578063ce98dfa814610999578063cfad57a2146109b8578063cfed246b146109de578063d6a153f114610a04578063d925351a14610a21578063f67e3bf014610a3e578063f90ce5ba14610a46575b600080fd5b61025b6004803603602081101561024b57600080fd5b50356001600160a01b0316610a4e565b604080519115158252519081900360200190f35b610277610a63565b60408051918252519081900360200190f35b61032c6004803603604081101561029f57600080fd5b810190602081018135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a69915050565b005b610336610bf1565b604080516001600160a01b039092168252519081900360200190f35b610277610c00565b610277610c06565b610336610c0c565b61032c6004803603608081101561038057600080fd5b5080359060208101359060408101359060600135610c1b565b61032c600480360360208110156103af57600080fd5b5035610d4f565b61032c600480360360208110156103cc57600080fd5b50356001600160a01b0316610da1565b61032c600480360360408110156103f257600080fd5b5080359060200135610e10565b61032c6004803603604081101561041557600080fd5b506001600160a01b0381351690602001351515610e6c565b610277610ee4565b610336610eea565b61032c6004803603604081101561045357600080fd5b506001600160a01b0381351690602001351515610ef9565b61025b610f71565b610277610f81565b61032c6004803603602081101561049157600080fd5b5035610f87565b610277600480360360208110156104ae57600080fd5b503561101a565b610336600480360360208110156104cb57600080fd5b5035611038565b61025b600480360360208110156104e857600080fd5b50356001600160a01b031661105f565b610277611074565b61033661107a565b610277611089565b61025b61108f565b61032c61109f565b6102776111b2565b61032c6004803603602081101561053e57600080fd5b50356111b8565b61032c6004803603606081101561055b57600080fd5b810190602081018135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460208302840111600160201b8311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061120a915050565b61032c6004803603602081101561068057600080fd5b50356001600160a01b031661130c565b61025b600480360360208110156106a657600080fd5b50356001600160a01b031661137b565b61032c600480360360608110156106cc57600080fd5b81359190810190604081016020820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111600160201b831117156107a257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611390945050505050565b610277600480360360608110156107f657600080fd5b506001600160a01b03813516906020810135906040013515156114e9565b61032c6004803603602081101561082a57600080fd5b50356116a7565b6102776116f9565b61032c6004803603602081101561084f57600080fd5b5035611709565b61027761175b565b610277611761565b61025b611767565b61032c6004803603604081101561088457600080fd5b810190602081018135600160201b81111561089e57600080fd5b8201836020820111156108b057600080fd5b803590602001918460208302840111600160201b831117156108d157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561092057600080fd5b82018360208201111561093257600080fd5b803590602001918460208302840111600160201b8311171561095357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061179c945050505050565b61032c611866565b61032c600480360360208110156109af57600080fd5b5035151561197d565b61032c600480360360208110156109ce57600080fd5b50356001600160a01b03166119ed565b610277600480360360208110156109f457600080fd5b50356001600160a01b0316611a5c565b61032c60048036036020811015610a1a57600080fd5b5035611a6e565b61032c60048036036020811015610a3757600080fd5b5035611ac0565b610277611b12565b610277611b1a565b60106020526000908152604090205460ff1681565b60065481565b336000908152600d602052604090205460ff16610abb576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b6000610ac682611b20565b90508015610beb576001546001600160a01b031660005b8451811015610be8576000858281518110610af457fe5b6020026020010151905060005b6008811015610bde57601154600884028201908110610b2557505050505050610bed565b60118054602084029185831c63ffffffff169160009190600889028701908110610b4b57fe5b6000918252602082200154601280546001600160a01b0390921693509060088a028801908110610b7757fe5b60009182526020822001549150610ba482610b9e8668327cb2734119d3b7a9601e1b611c33565b90611c95565b6001600160a01b0384166000908152600e602052604090208190559050610bcc8a8483611cd4565b505060019094019350610b0192505050565b5050600101610add565b50505b505b5050565b6001546001600160a01b031681565b60095481565b61271081565b6000546001600160a01b031681565b336000908152600d602052604090205460ff16610c6d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610c778484611d5b565b60035460408051629a208160e81b81526004810185905233602482015290516001600160a01b03909216918291639a20810091604480830192600092919082900301818387803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b50506040805163f3883d8b60e01b81526004810186905233602482015290516001600160a01b038516935063f3883d8b9250604480830192600092919082900301818387803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b03163314610d9c576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600455565b6000546001600160a01b03163314610dee576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600d602052604090205460ff16610e62576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610bed8282611d5b565b6000546001600160a01b03163314610eb9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600b5481565b6002546001600160a01b031681565b6000546001600160a01b03163314610f46576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600054600160a01b900460ff1681565b60085481565b6000546001600160a01b03163314610fd4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6107088111156110155760405162461bcd60e51b81526004018080602001828103825260258152602001806120ba6025913960400191505060405180910390fd5b600655565b6012818154811061102757fe5b600091825260209091200154905081565b6011818154811061104557fe5b6000918252602090912001546001600160a01b0316905081565b600d6020526000908152604090205460ff1681565b60045481565b6003546001600160a01b031681565b61070881565b600054600160a81b900460ff1681565b336000908152600f602052604090205460ff166110f1576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16611155576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20616c726561647920656e61626c65640000604482015290519081900360640190fd5b336000908152601060205260409020805460ff19169055600c5461117a906001611e43565b600c556040805133815290517f9fe0c305c33aa92757a537936872a60be0d91549a4303cc99fd8b7fce8a002759181900360200190a1565b600a5481565b6000546001600160a01b03163314611205576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600855565b336000908152600d602052604090205460ff1661125c576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600061126782611b20565b90508015611306576001546001600160a01b031660005b855181101561130357600086828151811061129557fe5b602002602001015190508582815181106112ab57fe5b6020026020010151600e6000836001600160a01b03166001600160a01b03168152602001908152602001600020819055506112fa83828885815181106112ed57fe5b6020026020010151611cd4565b5060010161127e565b50505b50505050565b6000546001600160a01b03163314611359576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031633146113dd576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600054600160a01b900460ff16156114265760405162461bcd60e51b81526004018080602001828103825260228152602001806121ca6022913960400191505060405180910390fd5b6000805460ff60a01b1916600160a01b178155600b8490555b825181101561149257600083828151811061145657fe5b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff1916600190811790915591909101905061143f565b5060005b81518110156113065760008282815181106114ad57fe5b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff19166001908117909155919091019050611496565b6000611502600654600454611e8590919063ffffffff16565b4211156115105750816116a0565b6001600160a01b0384166000908152600e60205260409020548061153757839150506116a0565b6000611560612710610b9e611559600a54612710611e8590919063ffffffff16565b8890611c33565b9050600061158b612710610b9e611584600a54612710611e4390919063ffffffff16565b8990611c33565b9050611595611767565b15611646578083101580156115aa5750818311155b1561164657841561160d57828611156116025760006115e6612710610b9e6115df600954612710611e8590919063ffffffff16565b8790611c33565b90508681116115f557806115f7565b865b9450505050506116a0565b8293505050506116a0565b82861015611602576000611637612710610b9e6115df600954612710611e4390919063ffffffff16565b90508681106115f557806115f7565b8415611678578286111561165f578593505050506116a0565b81831161166c578261166e565b815b93505050506116a0565b8286101561168b578593505050506116a0565b808310611698578261169a565b805b93505050505b9392505050565b6000546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600a55565b68327cb2734119d3b7a9601e1b81565b6000546001600160a01b03163314611756576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600955565b600c5481565b60075481565b60008054600160a81b900460ff161561178257506000611799565b600b54600c541061179557506000611799565b5060015b90565b6000546001600160a01b031633146117e9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b805182511461183f576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20696e76616c6964206c656e677468730000604482015290519081900360640190fd5b8151611852906011906020850190611fd9565b508051610beb90601290602084019061203e565b336000908152600f602052604090205460ff166118b8576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff161561191c576040805162461bcd60e51b815260206004820152601c60248201527b11985cdd141c9a58d9519959590e88185b1c9958591e481d9bdd195960221b604482015290519081900360640190fd5b336000908152601060205260409020805460ff19166001908117909155600c5461194591611e85565b600c556040805133815290517f4c0c5fabf50e808e3bc8d19577d305e3a7163eea7e8a74a50caa8896694cd44b9181900360200190a1565b336000908152600d602052604090205460ff166119cf576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b60008054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611a3a576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e6020526000908152604090205481565b6000546001600160a01b03163314611abb576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600755565b6002546001600160a01b03163314611b0d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600b55565b63ffffffff81565b60055481565b60075460009015611b7957600754600554611b3c904390611e43565b1015611b795760405162461bcd60e51b815260040180806020018281038252602e81526020018061219c602e913960400191505060405180910390fd5b600854611b87904290611e43565b8211611bc45760405162461bcd60e51b815260040180806020018281038252602d81526020018061216f602d913960400191505060405180910390fd5b600854611bd2904290611e85565b8210611c0f5760405162461bcd60e51b815260040180806020018281038252602f81526020018061211f602f913960400191505060405180910390fd5b600454821015611c2157506000611c2e565b5060048190554360055560015b919050565b600082611c4257506000611c8f565b82820282848281611c4f57fe5b0414611c8c5760405162461bcd60e51b815260040180806020018281038252602181526020018061214e6021913960400191505060405180910390fd5b90505b92915050565b6000611c8c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611edd565b6001600160a01b038316611ce757610beb565b826001600160a01b031663e0409c7183836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b50505050505050565b6000611d6682611b20565b90508015610beb576001546001600160a01b031660005b6008811015610be85760115481908110611d9a5750505050610bed565b60118054602084029188831c63ffffffff16916000919086908110611dbb57fe5b6000918252602082200154601280546001600160a01b0390921693509087908110611de257fe5b60009182526020822001549150611e0982610b9e8668327cb2734119d3b7a9601e1b611c33565b6001600160a01b0384166000908152600e602052604090208190559050611e31888483611cd4565b505060019094019350611d7d92505050565b6000611c8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f7f565b600082820183811015611c8c576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008183611f695760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f2e578181015183820152602001611f16565b50505050905090810190601f168015611f5b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f7557fe5b0495945050505050565b60008184841115611fd15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f2e578181015183820152602001611f16565b505050900390565b82805482825590600052602060002090810192821561202e579160200282015b8281111561202e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff9565b5061203a929150612085565b5090565b828054828255906000526020600020908101928215612079579160200282015b8281111561207957825182559160200191906001019061205e565b5061203a9291506120a4565b5b8082111561203a5780546001600160a01b0319168155600101612086565b5b8082111561203a57600081556001016120a556fe466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e476f7665726e61626c653a20666f7262696464656e0000000000000000000000466173745072696365466565643a20666f7262696464656e0000000000000000466173745072696365466565643a205f74696d657374616d70206578636565647320616c6c6f7765642072616e6765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77466173745072696365466565643a205f74696d657374616d702062656c6f7720616c6c6f7765642072616e6765466173745072696365466565643a206d696e426c6f636b496e74657276616c206e6f742079657420706173736564466173745072696365466565643a20616c726561647920696e697469616c697a6564a2646970667358221220cdc7326dbafdca00257e237a8fc72a52215a76e7f156663575aa1ac109fa174464736f6c634300060c0033

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

000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b0000000000000000000000003d38f21012052c201bb94eb97eed6f774eec4b69000000000000000000000000bb214233c570b8e9b732212974e7baeffe63f0de

-----Decoded View---------------
Arg [0] : _priceDuration (uint256): 300
Arg [1] : _minBlockInterval (uint256): 0
Arg [2] : _maxDeviationBasisPoints (uint256): 250
Arg [3] : _fastPriceEvents (address): 0x3934cA8b69D05533769B0D96d1A11C44c1D2fA3B
Arg [4] : _tokenManager (address): 0x3d38f21012052C201bb94EB97eEd6F774EeC4b69
Arg [5] : _positionRouter (address): 0xbB214233C570b8e9b732212974E7baeFFE63F0de

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [3] : 0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b
Arg [4] : 0000000000000000000000003d38f21012052c201bb94eb97eed6f774eec4b69
Arg [5] : 000000000000000000000000bb214233c570b8e9b732212974e7baeffe63f0de


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.