Sponsored:   LH-CRYPTO - 200 instruments (BTC, EUR, GOLD, OIL, SHARES). Leverage up to 1:500. OPEN ACCOUNT
 Latest 25 transactions from a total of 38 transactions

TxHash Age From To Value [TxFee]
0xbbfeae135633a0e077037791cc1c20d08246a0f7d34a66e278e76a8555dd441429 days 5 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.000283536
0x8dd330be71900f6db9a52a26eaba8d4d52c6b851915e0ff96bd526c6d928b48235 days 10 hrs ago0x8c47a2dffec12fe9f599cc5c1f8e0814421d87c1  IN   TheAbyss_PollManagedFund0 Ether0.000115225
0x487631957d44219cd774f76aec93308e48742fa65cc51e8a795ec75892bcd54a35 days 10 hrs ago0x8c47a2dffec12fe9f599cc5c1f8e0814421d87c1  IN   TheAbyss_PollManagedFund0 Ether0.000114265
0x459a260b0058d5a4d1d9f263604536791b42aaeced0e5163158e8dd5b4c64b6a36 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.002814044
0xd385dcfc484e531adff053e355b85ce3f7800642b1138efa4fa24393099dc03745 days 14 hrs ago0x8fa809147f814b123c2032d3a66f8cc2516ee998  IN   TheAbyss_PollManagedFund0 Ether0.028815907
0xb73e37a1d522ca0d5a2a73784c3847f34db5479882a9a1b3d9d4cc1e7c5d7ef566 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.0000905
0xc687f1a1abdf00aacdf6152bc281ffe328286a8c82cb441efc170a51575655fc66 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.002817808
0x6d57b1cdf2578674e3e62738c9761de9b2250222d8d4868d2211da54bcea840294 days 1 hr ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.000358038
0x05cdc85b6828c45f592fa04a55842c02e03fa8e97b3daabd273e6a16a3bbb1d797 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.010536135
0xe5614ed83e8913c0e446e9042112f7485213ad51790fa72eac03736268fcb7db121 days 7 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.000318256
0xec1b4fc739884f0c0430f0b460dd173ed7f7649174aec4a287113fa3b9128e2d128 days 19 hrs ago0x55a49af2c3fa307a474796981734f63bf8462908  IN   TheAbyss_PollManagedFund0 Ether0.00045962
0x73ae97845bcba4df97ce4e833af4f7f541fc4db70ecbf7942c1163769e5e1ead128 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.010527855
0x32d738927a60af137739da1d9c2deb3ed299db6002ecbedb80065f5ab74f2f6a129 days 20 hrs ago0x767c091240b8a3148eba8707cf0223f4f3094480  IN   TheAbyss_PollManagedFund0 Ether0.000164335
0x437b92f407f09d054606b9a934dbd9ff99072d0b1ec2d43655441fe08ad74336143 days 9 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.00079564
0x7d6f089fed02ffaa55a5a8ef6cdab6187067295bfd31f765a59fe96b2e5407f0148 days 6 mins ago0xe6fbe6582648dd4dad45cd00392e84bfb179ee6b  IN   TheAbyss_PollManagedFund0 Ether0.000115825
0xa67de205c624b6671b1ddcdbef58699613116ad2cf561507fd7162cfae4e9fc2155 days 20 hrs ago0xd661ac48af77605b25d42446ab394cd98e1a0747  IN   TheAbyss_PollManagedFund0 Ether0.000023045
0x169cbd5233bd656cd628ac2ccd1357f0112e48173ae40a0cbbd6854776a4e4f0155 days 23 hrs ago0xd661ac48af77605b25d42446ab394cd98e1a0747  IN   TheAbyss_PollManagedFund0 Ether0.000032288
0x340c67611832f337f26813dc831e99441210c4710d00a607993d76c54fe742ed158 days 4 hrs ago0x785772f90c4d47eba89f56dc431160090293a82b  IN   TheAbyss_PollManagedFund0 Ether0.00023045
0x75724f193ceb931de654e715e663566ce2e08bddaba76d8d1c7ac3a5077086be158 days 20 hrs ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.002812008
0x00b3980edabcda430f93d79de2402c14fc08a4b1617c8f684e90b6ccfb11e376167 days 1 hr ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.00059673
0xc99e2a65e3452bdd77c9e8f33562ea59b5f6f5671d083f806322a2d9151e5a8e167 days 1 hr ago0x5eaf0a37346ff992199fbc4480c9ccc4137d9c1f  IN   TheAbyss_PollManagedFund0 Ether0.00037182
0x8a6461df29b64dc9142e053075cbc1bf107418c4f29292ea9f54789f8a986062189 days 6 hrs ago0x100c00ddc802e40f969095374b0cc3b3fd0abc0f  IN   TheAbyss_PollManagedFund0.01 Ether0.000861
0x322103e6e82a43eb5d015645f4ac4e007b9b5da97e189972434c70eeafc013e7210 days 5 hrs ago0x58e47357af4949ba8d5ae5e528f4a6eb719a010f  IN   TheAbyss_PollManagedFund0.2 Ether0.001681706937
0x78ba2f5dd1d49928d6f517e9e8e2a6ec162743bf229f1a506075251a64102e81210 days 14 hrs ago0x48b577bef96ff15ca0d02a0c055efdd151526b89  IN   TheAbyss_PollManagedFund3 Ether0.000862886
0x2055bad38ca3609fc4f58056bc5048b5fe8545fb06b49f9dd0936ce04751b508210 days 15 hrs ago0x845dbb80bd79d1193c4d3f620dcbf937f54b8064  IN   TheAbyss_PollManagedFund0.054598676 Ether0.002083554
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0xbbfeae135633a0e077037791cc1c20d08246a0f7d34a66e278e76a8555dd4414653264929 days 5 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f3,647.660807291651725848 Ether
0x459a260b0058d5a4d1d9f263604536791b42aaeced0e5163158e8dd5b4c64b6a648566636 days 20 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0xd385dcfc484e531adff053e355b85ce3f7800642b1138efa4fa24393099dc037643185145 days 14 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0xc687f1a1abdf00aacdf6152bc281ffe328286a8c82cb441efc170a51575655fc630297666 days 20 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0x6d57b1cdf2578674e3e62738c9761de9b2250222d8d4868d2211da54bcea8402614158594 days 1 hr ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f1,021.491753472218038192 Ether
0x05cdc85b6828c45f592fa04a55842c02e03fa8e97b3daabd273e6a16a3bbb1d7611923997 days 20 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0xe5614ed83e8913c0e446e9042112f7485213ad51790fa72eac03736268fcb7db5980769121 days 7 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f552.064525462961337685 Ether
0x73ae97845bcba4df97ce4e833af4f7f541fc4db70ecbf7942c1163769e5e1ead5935939128 days 20 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0x437b92f407f09d054606b9a934dbd9ff99072d0b1ec2d43655441fe08ad743365851508143 days 9 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f591.349247685183444253 Ether
0x75724f193ceb931de654e715e663566ce2e08bddaba76d8d1c7ac3a5077086be5761667158 days 20 hrs ago0x49db6ee4507132d1fdac92318e0e6150bf786728  Contract Creation0 Ether
0x00b3980edabcda430f93d79de2402c14fc08a4b1617c8f684e90b6ccfb11e3765715539167 days 1 hr ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f270.600501543209547493 Ether
0xc99e2a65e3452bdd77c9e8f33562ea59b5f6f5671d083f806322a2d9151e5a8e5715526167 days 1 hr ago0x49db6ee4507132d1fdac92318e0e6150bf7867280xe45f9c10f3e4647ac922b0128e688e8e1f220f5f5,769 Ether
0x1359322bfc935d7977317fbbd40bae0bf87a23caf04d8b3b2da0cb5023019fa65623925183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867282 Ether
0x120098be77c26cbda1f84d4a6defe02becaaf521c08ca3c9968e98759c8ac4585623922183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867282.8983354 Ether
0x655cafb6916b8bc2c452e585c3114e8c2e22aabc6dcaf93448cc6e71b65157b75623920183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867285 Ether
0x25efc2211ef5405ed9da9ac816c743cddc5fb565b88930f8fb6b1c84c13d93925623912183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf78672817 Ether
0x6692873219d1898894d0e55dd9156487d49c23f4f5cda49e44e3ff76a8a179ea5623912183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf78672810 Ether
0x81fab133fcf31da4343818a747d3ea47b2676376c1a9a393d7faa1718e7c2bf25623912183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.35384615 Ether
0x7aa8ddf52d3038487e9534a84e8a34549d96b2c27aeca2ad45c42699b7a67cb05623910183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.65 Ether
0x5ae49ef7efbea234130c5873bbc39cacb36718d1bbb0b30563782315ceca0a5b5623908183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867281 Ether
0xb582d20f8d7eb32e4c267874f82d7532716fa22eb37089882d3811592d20fb865623907183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867281.5 Ether
0xf70d61b291b2415ffdb79d0aa6895b36d74b11be490c4d8a3544d417d0e62d6c5623906183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.2 Ether
0x68ac1cb2f597cf43713b3faf0f3fd2787c19741280846c1e22efbcc2c1a973b55623904183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.32 Ether
0xd6cb72fca32c0c48979b749ccdef63a8e4c58f7476acd9527861cda78aaa88635623902183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.3 Ether
0xe7fddb0c94c1207ffd7315348436aaca3a1452e90260196da445579d5a524ea25623901183 days 6 hrs ago0xb84e224216fec19d8631a0ad187326bc48f91b6b0x49db6ee4507132d1fdac92318e0e6150bf7867280.2 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: PollManagedFund
Compiler Text: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.21;

// File: contracts/DateTime.sol

contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                                timestamp += LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                        monthDayCounts[1] = 29;
                }
                else {
                        monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}

// File: contracts/ISimpleCrowdsale.sol

interface ISimpleCrowdsale {
    function getSoftCap() external view returns(uint256);
    function isContributorInLists(address contributorAddress) external view returns(bool);
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable;
}

// File: contracts/fund/ICrowdsaleFund.sol

/**
 * @title ICrowdsaleFund
 * @dev Fund methods used by crowdsale contract
 */
interface ICrowdsaleFund {
    /**
    * @dev Function accepts user`s contributed ether and logs contribution
    * @param contributor Contributor wallet address.
    */
    function processContribution(address contributor) external payable;
    /**
    * @dev Function is called on the end of successful crowdsale
    */
    function onCrowdsaleEnd() external;
    /**
    * @dev Function is called if crowdsale failed to reach soft cap
    */
    function enableCrowdsaleRefund() external;
}

// File: contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
contract SafeMath {
    /**
    * @dev constructor
    */
    function SafeMath() public {
    }

    function safeMul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function safeSub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(a >= b);
        return a - b;
    }

    function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

// File: contracts/ownership/MultiOwnable.sol

/**
 * @title MultiOwnable
 * @dev The MultiOwnable contract has owners addresses and provides basic authorization control
 * functions, this simplifies the implementation of "users permissions".
 */
contract MultiOwnable {
    address public manager; // address used to set owners
    address[] public owners;
    mapping(address => bool) public ownerByAddress;

    event SetOwners(address[] owners);

    modifier onlyOwner() {
        require(ownerByAddress[msg.sender] == true);
        _;
    }

    /**
     * @dev MultiOwnable constructor sets the manager
     */
    function MultiOwnable() public {
        manager = msg.sender;
    }

    /**
     * @dev Function to set owners addresses
     */
    function setOwners(address[] _owners) public {
        require(msg.sender == manager);
        _setOwners(_owners);

    }

    function _setOwners(address[] _owners) internal {
        for(uint256 i = 0; i < owners.length; i++) {
            ownerByAddress[owners[i]] = false;
        }


        for(uint256 j = 0; j < _owners.length; j++) {
            ownerByAddress[_owners[j]] = true;
        }
        owners = _owners;
        SetOwners(_owners);
    }

    function getOwners() public constant returns (address[]) {
        return owners;
    }
}

// File: contracts/token/IERC20Token.sol

/**
 * @title IERC20Token - ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value)  public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success);
    function approve(address _spender, uint256 _value)  public returns (bool success);
    function allowance(address _owner, address _spender)  public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - ERC20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Token is IERC20Token, SafeMath {
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);

        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);

        balances[_to] = safeAdd(balances[_to], _value);
        balances[_from] = safeSub(balances[_from], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function balanceOf(address _owner) public constant returns (uint256) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256) {
      return allowed[_owner][_spender];
    }
}

// File: contracts/token/ITokenEventListener.sol

/**
 * @title ITokenEventListener
 * @dev Interface which should be implemented by token listener
 */
interface ITokenEventListener {
    /**
     * @dev Function is called after token transfer/transferFrom
     * @param _from Sender address
     * @param _to Receiver address
     * @param _value Amount of tokens
     */
    function onTokenTransfer(address _from, address _to, uint256 _value) external;
}

// File: contracts/token/ManagedToken.sol

/**
 * @title ManagedToken
 * @dev ERC20 compatible token with issue and destroy facilities
 * @dev All transfers can be monitored by token event listener
 */
contract ManagedToken is ERC20Token, MultiOwnable {
    bool public allowTransfers = false;
    bool public issuanceFinished = false;

    ITokenEventListener public eventListener;

    event AllowTransfersChanged(bool _newState);
    event Issue(address indexed _to, uint256 _value);
    event Destroy(address indexed _from, uint256 _value);
    event IssuanceFinished();

    modifier transfersAllowed() {
        require(allowTransfers);
        _;
    }

    modifier canIssue() {
        require(!issuanceFinished);
        _;
    }

    /**
     * @dev ManagedToken constructor
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     */
    function ManagedToken(address _listener, address[] _owners) public {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        }
        _setOwners(_owners);
    }

    /**
     * @dev Enable/disable token transfers. Can be called only by owners
     * @param _allowTransfers True - allow False - disable
     */
    function setAllowTransfers(bool _allowTransfers) external onlyOwner {
        allowTransfers = _allowTransfers;
        AllowTransfersChanged(_allowTransfers);
    }

    /**
     * @dev Set/remove token event listener
     * @param _listener Listener address (Contract must implement ITokenEventListener interface)
     */
    function setListener(address _listener) public onlyOwner {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        } else {
            delete eventListener;
        }
    }

    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transfer(_to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(msg.sender, _to, _value);
        }
        return success;
    }

    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transferFrom(_from, _to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(_from, _to, _value);
        }
        return success;
    }

    function hasListener() internal view returns(bool) {
        if(eventListener == address(0)) {
            return false;
        }
        return true;
    }

    /**
     * @dev Issue tokens to specified wallet
     * @param _to Wallet address
     * @param _value Amount of tokens
     */
    function issue(address _to, uint256 _value) external onlyOwner canIssue {
        totalSupply = safeAdd(totalSupply, _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Issue(_to, _value);
        Transfer(address(0), _to, _value);
    }

    /**
     * @dev Destroy tokens on specified address (Called by owner or token holder)
     * @dev Fund contract address must be in the list of owners to burn token during refund
     * @param _from Wallet address
     * @param _value Amount of tokens to destroy
     */
    function destroy(address _from, uint256 _value) external {
        require(ownerByAddress[msg.sender] || msg.sender == _from);
        require(balances[_from] >= _value);
        totalSupply = safeSub(totalSupply, _value);
        balances[_from] = safeSub(balances[_from], _value);
        Transfer(_from, address(0), _value);
        Destroy(_from, _value);
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Finish token issuance
     * @return True if success
     */
    function finishIssuance() public onlyOwner returns (bool) {
        issuanceFinished = true;
        IssuanceFinished();
        return true;
    }
}

// File: contracts/Fund.sol

contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
    enum FundState {
        Crowdsale,
        CrowdsaleRefund,
        TeamWithdraw,
        Refund
    }

    FundState public state = FundState.Crowdsale;
    ManagedToken public token;

    uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month

    address public teamWallet;
    uint256 public crowdsaleEndDate;

    address public referralTokenWallet;
    address public foundationTokenWallet;
    address public reserveTokenWallet;
    address public bountyTokenWallet;
    address public companyTokenWallet;
    address public advisorTokenWallet;
    address public lockedTokenAddress;
    address public refundManager;

    uint256 public tap;
    uint256 public lastWithdrawTime = 0;
    uint256 public firstWithdrawAmount = 0;

    address public crowdsaleAddress;
    mapping(address => uint256) public contributions;

    event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp);
    event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp);
    event Withdraw(uint256 amountWei, uint256 timestamp);
    event RefundEnabled(address initiatorAddress);

    /**
     * @dev Fund constructor
     * @param _teamWallet Withdraw functions transfers ether to this address
     * @param _referralTokenWallet Referral wallet address
     * @param _companyTokenWallet Company wallet address
     * @param _reserveTokenWallet Reserve wallet address
     * @param _bountyTokenWallet Bounty wallet address
     * @param _advisorTokenWallet Advisor wallet address
     * @param _owners Contract owners
     */
    function Fund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address _refundManager,
        address[] _owners
    ) public
    {
        teamWallet = _teamWallet;
        referralTokenWallet = _referralTokenWallet;
        foundationTokenWallet = _foundationTokenWallet;
        companyTokenWallet = _companyTokenWallet;
        reserveTokenWallet = _reserveTokenWallet;
        bountyTokenWallet = _bountyTokenWallet;
        advisorTokenWallet = _advisorTokenWallet;
        refundManager = _refundManager;
        _setOwners(_owners);
    }

    modifier withdrawEnabled() {
        require(canWithdraw());
        _;
    }

    modifier onlyCrowdsale() {
        require(msg.sender == crowdsaleAddress);
        _;
    }

    function canWithdraw() public returns(bool);

    function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner {
        require(crowdsaleAddress == address(0));
        crowdsaleAddress = _crowdsaleAddress;
    }

    function setTokenAddress(address _tokenAddress) public onlyOwner {
        require(address(token) == address(0));
        token = ManagedToken(_tokenAddress);
    }

    function setLockedTokenAddress(address _lockedTokenAddress) public onlyOwner {
        require(address(lockedTokenAddress) == address(0));
        lockedTokenAddress = _lockedTokenAddress;
    }

    /**
     * @dev Process crowdsale contribution
     */
    function processContribution(address contributor) external payable onlyCrowdsale {
        require(state == FundState.Crowdsale);
        uint256 totalContribution = safeAdd(contributions[contributor], msg.value);
        contributions[contributor] = totalContribution;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is reached
     */
    function onCrowdsaleEnd() external onlyCrowdsale {
        state = FundState.TeamWithdraw;
        ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress);
        firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2);
        lastWithdrawTime = now;
        tap = INITIAL_TAP;
        crowdsaleEndDate = now;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is not reached
     */
    function enableCrowdsaleRefund() external onlyCrowdsale {
        require(state == FundState.Crowdsale);
        state = FundState.CrowdsaleRefund;
    }

    /**
    * @dev Function is called by contributor to refund payments if crowdsale failed to reach soft cap
    */
    function refundCrowdsaleContributor() external {
        require(state == FundState.CrowdsaleRefund);
        require(contributions[msg.sender] > 0);

        uint256 refundAmount = contributions[msg.sender];
        contributions[msg.sender] = 0;
        token.destroy(msg.sender, token.balanceOf(msg.sender));
        msg.sender.transfer(refundAmount);
        RefundContributor(msg.sender, refundAmount, now);
    }

    /**
    * @dev Function is called by owner to refund payments if crowdsale failed to reach soft cap
    */
    function autoRefundCrowdsaleContributor(address contributorAddress) external {
        require(ownerByAddress[msg.sender] == true || msg.sender == refundManager);
        require(state == FundState.CrowdsaleRefund);
        require(contributions[contributorAddress] > 0);

        uint256 refundAmount = contributions[contributorAddress];
        contributions[contributorAddress] = 0;
        token.destroy(contributorAddress, token.balanceOf(contributorAddress));
        contributorAddress.transfer(refundAmount);
        RefundContributor(contributorAddress, refundAmount, now);
    }

    /**
     * @dev Decrease tap amount
     * @param _tap New tap value
     */
    function decTap(uint256 _tap) external onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(_tap < tap);
        tap = _tap;
    }

    function getCurrentTapAmount() public constant returns(uint256) {
        if(state != FundState.TeamWithdraw) {
            return 0;
        }
        return calcTapAmount();
    }

    function calcTapAmount() internal view returns(uint256) {
        uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap);
        if(address(this).balance < amount) {
            amount = address(this).balance;
        }
        return amount;
    }

    function firstWithdraw() public onlyOwner withdrawEnabled {
        require(firstWithdrawAmount > 0);
        uint256 amount = firstWithdrawAmount;
        firstWithdrawAmount = 0;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    /**
     * @dev Withdraw tap amount
     */
    function withdraw() public onlyOwner withdrawEnabled {
        require(state == FundState.TeamWithdraw);
        uint256 amount = calcTapAmount();
        lastWithdrawTime = now;
        teamWallet.transfer(amount);
        Withdraw(amount, now);
    }

    // Refund
    /**
     * @dev Called to start refunding
     */
    function enableRefund() internal {
        require(state == FundState.TeamWithdraw);
        state = FundState.Refund;
        token.destroy(lockedTokenAddress, token.balanceOf(lockedTokenAddress));
        token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet));
        token.destroy(reserveTokenWallet, token.balanceOf(reserveTokenWallet));
        token.destroy(foundationTokenWallet, token.balanceOf(foundationTokenWallet));
        token.destroy(bountyTokenWallet, token.balanceOf(bountyTokenWallet));
        token.destroy(referralTokenWallet, token.balanceOf(referralTokenWallet));
        token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet));
        RefundEnabled(msg.sender);
    }

    /**
    * @dev Function is called by contributor to refund
    * Buy user tokens for refundTokenPrice and destroy them
    */
    function refundTokenHolder() public {
        require(state == FundState.Refund);

        uint256 tokenBalance = token.balanceOf(msg.sender);
        require(tokenBalance > 0);
        uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply());
        require(refundAmount > 0);

        token.destroy(msg.sender, tokenBalance);
        msg.sender.transfer(refundAmount);

        RefundHolder(msg.sender, refundAmount, tokenBalance, now);
    }
}

// File: contracts/fund/IPollManagedFund.sol

/**
 * @title IPollManagedFund
 * @dev Fund callbacks used by polling contracts
 */
interface IPollManagedFund {
    /**
     * @dev TapPoll callback
     * @param agree True if new tap value is accepted by majority of contributors
     * @param _tap New tap value
     */
    function onTapPollFinish(bool agree, uint256 _tap) external;

    /**
     * @dev RefundPoll callback
     * @param agree True if contributors decided to allow refunding
     */
    function onRefundPollFinish(bool agree) external;
}

// File: contracts/poll/BasePoll.sol

/**
 * @title BasePoll
 * @dev Abstract base class for polling contracts
 */
contract BasePoll is SafeMath {
    struct Vote {
        uint256 time;
        uint256 weight;
        bool agree;
    }

    uint256 public constant MAX_TOKENS_WEIGHT_DENOM = 1000;

    IERC20Token public token;
    address public fundAddress;

    uint256 public startTime;
    uint256 public endTime;
    bool checkTransfersAfterEnd;

    uint256 public yesCounter = 0;
    uint256 public noCounter = 0;
    uint256 public totalVoted = 0;

    bool public finalized;
    mapping(address => Vote) public votesByAddress;

    modifier checkTime() {
        require(now >= startTime && now <= endTime);
        _;
    }

    modifier notFinalized() {
        require(!finalized);
        _;
    }

    /**
     * @dev BasePoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function BasePoll(address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransfersAfterEnd) public {
        require(_tokenAddress != address(0));
        require(_startTime >= now && _endTime > _startTime);

        token = IERC20Token(_tokenAddress);
        fundAddress = _fundAddress;
        startTime = _startTime;
        endTime = _endTime;
        finalized = false;
        checkTransfersAfterEnd = _checkTransfersAfterEnd;
    }

    /**
     * @dev Process user`s vote
     * @param agree True if user endorses the proposal else False
     */
    function vote(bool agree) public checkTime {
        require(votesByAddress[msg.sender].time == 0);

        uint256 voiceWeight = token.balanceOf(msg.sender);
        uint256 maxVoiceWeight = safeDiv(token.totalSupply(), MAX_TOKENS_WEIGHT_DENOM);
        voiceWeight =  voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight;

        if(agree) {
            yesCounter = safeAdd(yesCounter, voiceWeight);
        } else {
            noCounter = safeAdd(noCounter, voiceWeight);

        }

        votesByAddress[msg.sender].time = now;
        votesByAddress[msg.sender].weight = voiceWeight;
        votesByAddress[msg.sender].agree = agree;

        totalVoted = safeAdd(totalVoted, 1);
    }

    /**
     * @dev Revoke user`s vote
     */
    function revokeVote() public checkTime {
        require(votesByAddress[msg.sender].time > 0);

        uint256 voiceWeight = votesByAddress[msg.sender].weight;
        bool agree = votesByAddress[msg.sender].agree;

        votesByAddress[msg.sender].time = 0;
        votesByAddress[msg.sender].weight = 0;
        votesByAddress[msg.sender].agree = false;

        totalVoted = safeSub(totalVoted, 1);
        if(agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
    }

    /**
     * @dev Function is called after token transfer from user`s wallet to check and correct user`s vote
     *
     */
    function onTokenTransfer(address tokenHolder, uint256 amount) public {
        require(msg.sender == fundAddress);
        if(votesByAddress[tokenHolder].time == 0) {
            return;
        }
        if(!checkTransfersAfterEnd) {
             if(finalized || (now < startTime || now > endTime)) {
                 return;
             }
        }

        if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) {
            return;
        }
        uint256 voiceWeight = amount;
        if(amount > votesByAddress[tokenHolder].weight) {
            voiceWeight = votesByAddress[tokenHolder].weight;
        }

        if(votesByAddress[tokenHolder].agree) {
            yesCounter = safeSub(yesCounter, voiceWeight);
        } else {
            noCounter = safeSub(noCounter, voiceWeight);
        }
        votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight);
    }

    /**
     * Finalize poll and call onPollFinish callback with result
     */
    function tryToFinalize() public notFinalized returns(bool) {
        if(now < endTime) {
            return false;
        }
        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isNowApproved() public view returns(bool) {
        return isSubjectApproved();
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter;
    }

    /**
     * @dev callback called after poll finalization
     */
    function onPollFinish(bool agree) internal;
}

// File: contracts/RefundPoll.sol

/**
 * @title RefundPoll
 * @dev Enables fund refund mode
 */
contract RefundPoll is BasePoll {
    uint256 public holdEndTime = 0;

    /**
     * RefundPoll constructor
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     */
    function RefundPoll(
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _holdEndTime,
        bool _checkTransfersAfterEnd
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransfersAfterEnd)
    {
        holdEndTime = _holdEndTime;
    }

    function tryToFinalize() public returns(bool) {
        if(holdEndTime > 0 && holdEndTime > endTime) {
            require(now >= holdEndTime);
        } else {
            require(now >= endTime);
        }

        finalized = true;
        onPollFinish(isSubjectApproved());
        return true;
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3);
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onRefundPollFinish(agree);
    }

}

// File: contracts/TapPoll.sol

/**
 * @title TapPoll
 * @dev Poll to increase tap amount
 */
contract TapPoll is BasePoll {
    uint256 public tap;
    uint256 public minTokensPerc = 0;

    /**
     * TapPoll constructor
     * @param _tap New tap value
     * @param _tokenAddress ERC20 compatible token contract address
     * @param _fundAddress Fund contract address
     * @param _startTime Poll start time
     * @param _endTime Poll end time
     * @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled
     */
    function TapPoll(
        uint256 _tap,
        address _tokenAddress,
        address _fundAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _minTokensPerc
    ) public
        BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
    {
        tap = _tap;
        minTokensPerc = _minTokensPerc;
    }

    function onPollFinish(bool agree) internal {
        IPollManagedFund fund = IPollManagedFund(fundAddress);
        fund.onTapPollFinish(agree, tap);
    }

    function getVotedTokensPerc() public view returns(uint256) {
        return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
    }

    function isSubjectApproved() internal view returns(bool) {
        return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
    }
}

// File: contracts/PollManagedFund.sol

/**
 * @title PollManagedFund
 * @dev Fund controlled by users
 */
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
    uint256 public constant TAP_POLL_DURATION = 3 days;
    uint256 public constant REFUND_POLL_DURATION = 7 days;
    uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

    TapPoll public tapPoll;
    RefundPoll public refundPoll;

    uint256 public minVotedTokensPerc = 0;
    uint256 public secondRefundPollDate = 0;
    bool public isWithdrawEnabled = true;

    uint256[] public refundPollDates = [
        1530403200, // 01.07.2018
        1538352000, // 01.10.2018
        1546300800, // 01.01.2019
        1554076800, // 01.04.2019
        1561939200, // 01.07.2019
        1569888000, // 01.10.2019
        1577836800, // 01.01.2020
        1585699200  // 01.04.2020
    ];

    modifier onlyTokenHolder() {
        require(token.balanceOf(msg.sender) > 0);
        _;
    }

    event TapPollCreated();
    event TapPollFinished(bool approved, uint256 _tap);
    event RefundPollCreated();
    event RefundPollFinished(bool approved);

    /**
     * @dev PollManagedFund constructor
     * params - see Fund constructor
     */
    function PollManagedFund(
        address _teamWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _advisorTokenWallet,
        address _refundManager,
        address[] _owners
        ) public
    Fund(_teamWallet, _referralTokenWallet, _foundationTokenWallet, _companyTokenWallet, _reserveTokenWallet, _bountyTokenWallet, _advisorTokenWallet, _refundManager, _owners)
    {
    }

    function canWithdraw() public returns(bool) {
        if(
            address(refundPoll) != address(0) &&
            !refundPoll.finalized() &&
            refundPoll.holdEndTime() > 0 &&
            now >= refundPoll.holdEndTime() &&
            refundPoll.isNowApproved()
        ) {
            return false;
        }
        return isWithdrawEnabled;
    }

    /**
     * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers
     */
    function onTokenTransfer(address _from, address /*_to*/, uint256 _value) external {
        require(msg.sender == address(token));
        if(address(tapPoll) != address(0) && !tapPoll.finalized()) {
            tapPoll.onTokenTransfer(_from, _value);
        }
         if(address(refundPoll) != address(0) && !refundPoll.finalized()) {
            refundPoll.onTokenTransfer(_from, _value);
        }
    }

    /**
     * @dev Update minVotedTokensPerc value after tap poll.
     * Set new value == 50% from current voted tokens amount
     */
    function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal {
        uint256 newPerc = safeDiv(_minVotedTokensPerc, 2);
        if(newPerc > MAX_VOTED_TOKEN_PERC) {
            minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
            return;
        }
        minVotedTokensPerc = newPerc;
    }

    // Tap poll
    function createTapPoll(uint8 tapIncPerc) public onlyOwner {
        require(state == FundState.TeamWithdraw);
        require(tapPoll == address(0));
        require(getDay(now) == 10);
        require(tapIncPerc <= 50);
        uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100));
        uint256 startTime = now;
        uint256 endTime = startTime + TAP_POLL_DURATION;
        tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
        TapPollCreated();
    }

    function onTapPollFinish(bool agree, uint256 _tap) external {
        require(msg.sender == address(tapPoll) && tapPoll.finalized());
        if(agree) {
            tap = _tap;
        }
        updateMinVotedTokens(tapPoll.getVotedTokensPerc());
        TapPollFinished(agree, _tap);
        delete tapPoll;
    }

    // Refund poll
    function checkRefundPollDate() internal view returns(bool) {
        if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) {
            return true;
        }

        for(uint i; i < refundPollDates.length; i++) {
            if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)) {
                return true;
            }
        }
        return false;
    }

    function createRefundPoll() public onlyTokenHolder {
        require(state == FundState.TeamWithdraw);
        require(address(refundPoll) == address(0));
        require(checkRefundPollDate());

        if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)) {
            secondRefundPollDate = 0;
        }

        uint256 startTime = now;
        uint256 endTime = startTime + REFUND_POLL_DURATION;
        bool isFirstRefund = secondRefundPollDate == 0;
        uint256 holdEndTime = 0;

        if(isFirstRefund) {
            holdEndTime = toTimestamp(
                getYear(startTime),
                getMonth(startTime) + 1,
                1
            );
        }
        refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
        RefundPollCreated();
    }

    function onRefundPollFinish(bool agree) external {
        require(msg.sender == address(refundPoll) && refundPoll.finalized());
        if(agree) {
            if(secondRefundPollDate > 0) {
                enableRefund();
            } else {
                uint256 startTime = refundPoll.startTime();
                secondRefundPollDate = toTimestamp(
                    getYear(startTime),
                    getMonth(startTime) + 2,
                    1
                );
                isWithdrawEnabled = false;
            }
        } else {
            secondRefundPollDate = 0;
            isWithdrawEnabled = true;
        }
        RefundPollFinished(agree);

        delete refundPoll;
    }

    function forceRefund() public {
        require(msg.sender == refundManager);
        enableRefund();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapIncPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"createRefundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockedTokenAddress","type":"address"}],"name":"setLockedTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contributorAddress","type":"address"}],"name":"autoRefundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenHolder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_refundManager","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060409081526003805460ff199081169091556000600f8190556010819055601581905560165560178054909116600117905561010090519081016040908152635b3819808252635bb163806020830152635c2aad8090820152635ca154806060820152635d194d006080820152635d92970060a0820152635e0be10060c0820152635e83d98060e08201526200009c90601890600862000313565b503415620000a957600080fd5b60405162004a7038038062004a7083398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a031990811633600160a060020a03908116919091179092556004805482168e84161790556006805482168d84161790556007805482168c8416179055600a805482168b84161790556008805482168a8416179055600980548216898416179055600b80548216888416179055600d8054909116918616919091179055919091019050888888888888888888620001a881640100000000620001c0810262002f521704565b5050505050505050505050505050505050506200041a565b6000805b6001548210156200022657600060026000600185815481101515620001e557fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff191691151591909117905560019190910190620001c4565b5060005b825181101562000282576001600260008584815181106200024757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016200022a565b6001838051620002979291602001906200036b565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b83811015620002fb578082015183820152602001620002e1565b505050509050019250505060405180910390a1505050565b82805482825590600052602060002090810192821562000359579160200282015b8281111562000359578251829063ffffffff1690559160200191906001019062000334565b5062000367929150620003d3565b5090565b828054828255906000526020600020908101928215620003c5579160200282015b82811115620003c55782518254600160a060020a031916600160a060020a0391909116178255602092909201916001909101906200038c565b5062000367929150620003f3565b620003f091905b80821115620003675760008155600101620003da565b90565b620003f091905b8082111562000367578054600160a060020a0319168155600101620003fa565b614646806200042a6000396000f300606060405260043610620003355763ffffffff60e060020a600035041663025e7c2781146200033a578063026eca12146200036f57806302fc28c4146200038d57806308867fc214620003b5578063192f107614620003cb5780631f35bc4014620003e157806326a4e8d2146200040357806326b52faf146200042557806329c90b63146200043b57806331d2f891146200045957806336e61cf7146200046f5780633b64e77e14620004885780633ccfd60b146200049e5780633e239e1a14620004b457806340e6b00a14620004e357806342e94c9014620004f9578063481c6a75146200051b5780634ac1ad78146200053157806359927044146200054a5780635f58384614620005605780636252c127146200057957806362ba9687146200058f57806365c7284014620005c4578063677ba3d314620005dd578063774a97cf14620006085780637ddbf0ed146200061e5780637f791833146200064057806384219204146200066f57806387174c3e1462000685578063880dc4e6146200069b57806389ea2cb714620006c55780638aa001fc14620006e05780638c8d98a014620006f9578063903171ae14620007225780639054bbb614620007385780639054bdec146200074e57806392a0fd64146200078957806392d66313146200079f578063962c9c8d14620007cf578063a0e67e2b14620007e5578063a324ad241462000850578063a666ff3c1462000869578063a6f0e577146200087f578063a78a651a146200089c578063ab23151114620008b2578063b199993714620008c8578063b238ad0e14620008e1578063b465e52f1462000904578063b51459fe146200091a578063bd7427f81462000930578063c19d93fb1462000946578063c5f5ce211462000981578063cae6b9c51462000997578063cc96019f14620009ad578063d0e6cfec14620009c3578063d66f146d14620009d9578063e2d2a86814620009ef578063e9b5a2f71462000a11578063eb6b192f1462000a27578063f190a7931462000a49578063fa4d36981462000a5f578063fa93f8831462000ab1578063fbbfe8301462000aca578063fc0c546a1462000ae0578063fd2210311462000af6578063ff01ffa81462000b0c575b600080fd5b34156200034657600080fd5b6200035360043562000b22565b604051600160a060020a03909116815260200160405180910390f35b34156200037b57600080fd5b6200038b60ff6004351662000b4b565b005b34156200039957600080fd5b620003a362000cdf565b60405190815260200160405180910390f35b3415620003c157600080fd5b620003a362000ce6565b3415620003d757600080fd5b620003a362000ced565b3415620003ed57600080fd5b6200038b600160a060020a036004351662000cf3565b34156200040f57600080fd5b6200038b600160a060020a036004351662000d57565b34156200043157600080fd5b620003a362000dd3565b34156200044757600080fd5b6200038b600435151560243562000dd9565b34156200046557600080fd5b6200035362000f18565b34156200047b57600080fd5b6200038b60043562000f27565b34156200049457600080fd5b6200038b62000f85565b3415620004aa57600080fd5b6200038b62000fcf565b3415620004c057600080fd5b620004cd600435620010b1565b60405160ff909116815260200160405180910390f35b3415620004ef57600080fd5b6200038b620010cf565b34156200050557600080fd5b620003a3600160a060020a0360043516620012db565b34156200052757600080fd5b62000353620012ed565b34156200053d57600080fd5b620004cd600435620012fc565b34156200055657600080fd5b620003536200130f565b34156200056c57600080fd5b620003a36004356200131e565b34156200058557600080fd5b6200038b6200133e565b34156200059b57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843516620013e9565b3415620005d057600080fd5b620004cd60043562001406565b3415620005e957600080fd5b6200038b600160a060020a03600435811690602435166044356200141d565b34156200061457600080fd5b620003a362001601565b34156200062a57600080fd5b6200038b600160a060020a036004351662001636565b34156200064c57600080fd5b620003a361ffff6004351660ff602435811690604435811690606435166200169a565b34156200067b57600080fd5b620003a3620016b6565b34156200069157600080fd5b62000353620016bc565b3415620006a757600080fd5b620006b1620016cb565b604051901515815260200160405180910390f35b3415620006d157600080fd5b6200038b6004351515620016d4565b3415620006ec57600080fd5b620004cd60043562001868565b34156200070557600080fd5b620003a361ffff6004351660ff6024358116906044351662001873565b34156200072e57600080fd5b620003536200188f565b34156200074457600080fd5b620003a36200189e565b34156200075a57600080fd5b620003a361ffff6004351660ff60243581169060443581169060643581169060843581169060a43516620018a8565b34156200079557600080fd5b62000353620019fd565b3415620007ab57600080fd5b620007b860043562001a0c565b60405161ffff909116815260200160405180910390f35b3415620007db57600080fd5b620003a362001aa6565b3415620007f157600080fd5b620007fb62001aab565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200083c57808201518382015260200162000822565b505050509050019250505060405180910390f35b34156200085c57600080fd5b620004cd60043562001b17565b34156200087557600080fd5b6200035362001b2e565b34156200088b57600080fd5b620006b161ffff6004351662001b3d565b6200038b600160a060020a036004351662001b91565b3415620008be57600080fd5b620003a362001c14565b3415620008d457600080fd5b620003a360043562001c1a565b3415620008ed57600080fd5b620004cd60ff6004351661ffff6024351662001c35565b34156200091057600080fd5b620003a362001d0e565b34156200092657600080fd5b620006b162001d14565b34156200093c57600080fd5b6200038b62001eca565b34156200095257600080fd5b6200095c62001ef2565b604051808260038111156200096d57fe5b60ff16815260200191505060405180910390f35b34156200098d57600080fd5b6200035362001efb565b3415620009a357600080fd5b6200035362001f0a565b3415620009b957600080fd5b6200035362001f19565b3415620009cf57600080fd5b6200035362001f28565b3415620009e557600080fd5b6200035362001f37565b3415620009fb57600080fd5b6200038b600160a060020a036004351662001f46565b341562000a1d57600080fd5b6200038b6200214a565b341562000a3357600080fd5b620006b1600160a060020a0360043516620021da565b341562000a5557600080fd5b62000353620021ef565b341562000a6b57600080fd5b6200038b6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650620021fe95505050505050565b341562000abd57600080fd5b620004cd60043562002228565b341562000ad657600080fd5b6200038b62002234565b341562000aec57600080fd5b6200035362002464565b341562000b0257600080fd5b620003a362002478565b341562000b1857600080fd5b6200038b6200247e565b600180548290811062000b3157fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a0333166000908152600260205260408120548190819060ff16151560011462000b7a57600080fd5b60026003805460ff169081111562000b8e57fe5b1462000b9957600080fd5b601354600160a060020a03161562000bb057600080fd5b62000bbb4262001406565b60ff16600a14151562000bcd57600080fd5b603260ff8516111562000bdf57600080fd5b62000c09600e5462000c0362000bfb600e548860ff166200263c565b60646200266a565b62002682565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460155462000c3d620030b8565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a083015260c09091019051809103906000f080151562000c8d57600080fd5b60138054600160a060020a031916600160a060020a03929092169190911790557f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454960405160405180910390a150505050565b6203f48081565b62093a8081565b60055481565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d1e57600080fd5b601154600160a060020a03161562000d3557600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a03331660009081526002602052604090205460ff16151560011462000d8257600080fd5b6003546101009004600160a060020a03161562000d9e57600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60105481565b60135433600160a060020a03908116911614801562000e4c5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000e3357600080fd5b5af1151562000e4157600080fd5b505050604051805190505b151562000e5857600080fd5b811562000e6557600e8190555b60135462000ec890600160a060020a0316632c24909c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562000eaa57600080fd5b5af1151562000eb857600080fd5b5050506040518051905062002692565b7fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d162488282604051911515825260208201526040908101905180910390a1505060138054600160a060020a0319169055565b601154600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff16151560011462000f5257600080fd5b60026003805460ff169081111562000f6657fe5b1462000f7157600080fd5b600e54811062000f8057600080fd5b600e55565b60115433600160a060020a0390811691161462000fa157600080fd5b60006003805460ff169081111562000fb557fe5b1462000fc057600080fd5b6003805460ff19166001179055565b600160a060020a03331660009081526002602052604081205460ff16151560011462000ffa57600080fd5b6200100462001d14565b15156200101057600080fd5b60026003805460ff16908111156200102457fe5b146200102f57600080fd5b62001039620026c2565b42600f55600454909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b7f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8814260405191825260208201526040908101905180910390a150565b60006018603c8084045b04811515620010c657fe5b0690505b919050565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200113b57600080fd5b5af115156200114957600080fd5b505050604051805190501115156200116057600080fd5b60026003805460ff16908111156200117457fe5b146200117f57600080fd5b601454600160a060020a0316156200119657600080fd5b620011a06200270a565b1515620011ac57600080fd5b6000601654118015620011ce5750620011cb6016546201518062002682565b42115b15620011da5760006016555b505060165442925062093a808301915015600081156200121c5762001219620012038562001a0c565b6200120e8662001b17565b600101600162001873565b90505b6003546101009004600160a060020a031630858584866200123c620030c9565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015260c0019051809103906000f08015156200128957600080fd5b60148054600160a060020a031916600160a060020a03929092169190911790557fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f60405160405180910390a150505050565b60126020526000908152604090205481565b600054600160a060020a031681565b60006007600462015180840401620010c6565b600454600160a060020a031681565b60188054829081106200132d57fe5b600091825260209091200154905081565b60115460009033600160a060020a039081169116146200135d57600080fd5b506003805460ff19166002179055601154600160a060020a0316620013d081634d52a5126040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620013b057600080fd5b5af11515620013be57600080fd5b5050506040518051905060026200266a565b6010555042600f81905565af7151902add600e55600555565b6000620013fc86868686866000620018a8565b9695505050505050565b60006200141382620027cf565b6040015192915050565b60035433600160a060020a0390811661010090920416146200143e57600080fd5b601354600160a060020a031615801590620014ae5750601354600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200149457600080fd5b5af11515620014a257600080fd5b50505060405180519050155b156200151d57601354600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200150b57600080fd5b5af115156200151957600080fd5b5050505b601454600160a060020a0316158015906200158d5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200157357600080fd5b5af115156200158157600080fd5b50505060405180519050155b15620015fc57601454600160a060020a031663c734f917848360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620015ea57600080fd5b5af11515620015f857600080fd5b5050505b505050565b600060026003805460ff16908111156200161757fe5b14620016265750600062001633565b62001630620026c2565b90505b90565b600160a060020a03331660009081526002602052604090205460ff1615156001146200166157600080fd5b600c54600160a060020a0316156200167857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000620016ad85858585600080620018a8565b95945050505050565b60155481565b600d54600160a060020a031681565b60175460ff1681565b60145460009033600160a060020a0390811691161480156200174a5750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200173157600080fd5b5af115156200173f57600080fd5b505050604051805190505b15156200175657600080fd5b81156200180c576000601654111562001779576200177362002932565b62001806565b601454600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515620017b957600080fd5b5af11515620017c757600080fd5b505050604051805190509050620017f8620017e28262001a0c565b620017ed8362001b17565b600201600162001873565b6016556017805460ff191690555b6200181f565b60006016556017805460ff191660011790555b7f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db82604051901515815260200160405180910390a1505060148054600160a060020a0319169055565b6000603c82620010c6565b6000620018878484846000806000620018a8565b949350505050565b600754600160a060020a031681565b65af7151902add81565b600080620018b5620030da565b6107b291505b8861ffff168261ffff1610156200190257620018d78262001b3d565b15620018ec576301e2850083019250620018f6565b6301e13380830192505b600190910190620018bb565b601f8152620019118962001b3d565b156200192457601d60208201526200192c565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff161015620019bf578061ffff600019840116600c8110620019a057fe5b602002015160ff1662015180028301925081806001019250506200197b565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b600854600160a060020a031681565b6000806107b26301e133808404810190829062001a299062001c1a565b62001a388361ffff1662001c1a565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562001a9e5762001a736001830362001b3d565b1562001a88576301e285008303925062001a92565b6301e13380830392505b60018203915062001a5c565b509392505050565b600a81565b62001ab562003104565b600180548060200260200160405190810160405280929190818152602001828054801562001b0d57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831162001aee575b5050505050905090565b600062001b2482620027cf565b6020015192915050565b600c54600160a060020a031681565b6000600382161562001b5257506000620010ca565b606461ffff83160661ffff161562001b6d57506001620010ca565b61019061ffff83160661ffff161562001b8957506000620010ca565b506001919050565b60115460009033600160a060020a0390811691161462001bb057600080fd5b60006003805460ff169081111562001bc457fe5b1462001bcf57600080fd5b600160a060020a03821660009081526012602052604090205462001bf4903462002682565b600160a060020a0390921660009081526012602052604090209190915550565b600f5481565b60001901600061019082046064830460048404030192915050565b60008260ff166001148062001c4d57508260ff166003145b8062001c5c57508260ff166005145b8062001c6b57508260ff166007145b8062001c7a57508260ff166008145b8062001c8957508260ff16600a145b8062001c9857508260ff16600c145b1562001ca75750601f62001d08565b8260ff166004148062001cbd57508260ff166006145b8062001ccc57508260ff166009145b8062001cdb57508260ff16600b145b1562001cea5750601e62001d08565b62001cf58262001b3d565b1562001d045750601d62001d08565b50601c5b92915050565b60165481565b601454600090600160a060020a03161580159062001d875750601454600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001d6d57600080fd5b5af1151562001d7b57600080fd5b50505060405180519050155b801562001dec5750601454600090600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001dd257600080fd5b5af1151562001de057600080fd5b50505060405180519050115b801562001e505750601454600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e3457600080fd5b5af1151562001e4257600080fd5b505050604051805190504210155b801562001eb15750601454600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151562001e9857600080fd5b5af1151562001ea657600080fd5b505050604051805190505b1562001ec05750600062001633565b5060175460ff1690565b600d5433600160a060020a0390811691161462001ee657600080fd5b62001ef062002932565b565b60035460ff1681565b600b54600160a060020a031681565b601354600160a060020a031681565b600654600160a060020a031681565b600954600160a060020a031681565b601454600160a060020a031681565b600160a060020a03331660009081526002602052604081205460ff1615156001148062001f815750600d5433600160a060020a039081169116145b151562001f8d57600080fd5b60016003805460ff169081111562001fa157fe5b1462001fac57600080fd5b600160a060020a0382166000908152601260205260408120541162001fd057600080fd5b50600160a060020a03808216600090815260126020526040808220805492905560035491926101009092049091169063a24835d190849083906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200204e57600080fd5b5af115156200205c57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620020aa57600080fd5b5af11515620020b857600080fd5b505050600160a060020a0382166108fc82150282604051600060405180830381858888f193505050501515620020ed57600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c8282426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050565b600160a060020a03331660009081526002602052604081205460ff1615156001146200217557600080fd5b6200217f62001d14565b15156200218b57600080fd5b601054600090116200219c57600080fd5b50601080546000909155600454600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156200107457600080fd5b60026020526000908152604090205460ff1681565b600a54600160a060020a031681565b60005433600160a060020a039081169116146200221a57600080fd5b620022258162002f52565b50565b6000603c8083620010bb565b600080600380805460ff16908111156200224a57fe5b146200225557600080fd5b6003546101009004600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620022ab57600080fd5b5af11515620022b957600080fd5b505050604051805192505060008211620022d257600080fd5b6200234f620022ec8330600160a060020a0316316200263c565b6003546101009004600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156200233157600080fd5b5af115156200233f57600080fd5b505050604051805190506200266a565b9050600081116200235f57600080fd5b6003546101009004600160a060020a031663a24835d1338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515620023bb57600080fd5b5af11515620023c957600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620023ff57600080fd5b7f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e51338284426040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a15050565b6003546101009004600160a060020a031681565b600e5481565b600060016003805460ff16908111156200249457fe5b146200249f57600080fd5b600160a060020a03331660009081526012602052604081205411620024c357600080fd5b50600160a060020a0333818116600090815260126020526040808220805492905560035491936101009092049091169163a24835d19183906370a082319083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156200254057600080fd5b5af115156200254e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156200259c57600080fd5b5af11515620025aa57600080fd5b5050600160a060020a033316905081156108fc0282604051600060405180830381858888f193505050501515620025e057600080fd5b7fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c3382426040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150565b60008282028315806200265a57508284828115156200265757fe5b04145b15156200266357fe5b9392505050565b60008082848115156200267957fe5b04949350505050565b6000828201838110156200266357fe5b6000620026a18260026200266a565b9050600a811115620026b857600a601555620026be565b60158190555b5050565b600080620026e0620026d742600f54620030a5565b600e546200263c565b90508030600160a060020a0316311015620027025750600160a060020a033016315b8091505b5090565b60008060006016541180156200272257506016544210155b80156200273f57506200273b6016546201518062002682565b4211155b156200274f576001915062002706565b601854811015620027c75760188054829081106200276957fe5b9060005260206000209001544210158015620027ae5750620027aa6018828154811015156200279457fe5b9060005260206000209001546201518062002682565b4211155b15620027be576001915062002706565b6001016200274f565b600091505090565b620027d962003116565b6000808080620027e98662001a0c565b61ffff168552620027fc6107b262001c1a565b6200280c865161ffff1662001c1a565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002885576200285182865162001c35565b60ff1662015180029050858482011115620028755760ff8216602086015262002885565b9283019260019091019062002838565b600191505b6200289b8560200151865162001c35565b60ff168260ff16111515620028dc57858462015180011115620028c75760ff82166040860152620028dc565b6201518093909301926001909101906200288a565b620028e786620010b1565b60ff166060860152620028fa8662002228565b60ff1660808601526200290d8662001868565b60ff1660a08601526200292086620012fc565b60ff1660c08601525092949350505050565b60026003805460ff16908111156200294657fe5b146200295157600080fd5b6003805460ff1916811790819055600c54600160a060020a0361010090920482169163a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515620029c057600080fd5b5af11515620029ce57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002a1c57600080fd5b5af1151562002a2a57600080fd5b5050600354600a54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002a9157600080fd5b5af1151562002a9f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002aed57600080fd5b5af1151562002afb57600080fd5b5050600354600854600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002b6257600080fd5b5af1151562002b7057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002bbe57600080fd5b5af1151562002bcc57600080fd5b5050600354600754600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002c3357600080fd5b5af1151562002c4157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002c8f57600080fd5b5af1151562002c9d57600080fd5b5050600354600954600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002d0457600080fd5b5af1151562002d1257600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002d6057600080fd5b5af1151562002d6e57600080fd5b5050600354600654600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002dd557600080fd5b5af1151562002de357600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002e3157600080fd5b5af1151562002e3f57600080fd5b5050600354600b54600160a060020a036101009092048216925063a24835d19116826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562002ea657600080fd5b5af1151562002eb457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151562002f0257600080fd5b5af1151562002f1057600080fd5b5050507f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb2333604051600160a060020a03909116815260200160405180910390a1565b6000805b60015482101562002fb85760006002600060018581548110151562002f7757fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062002f56565b5060005b8251811015620030145760016002600085848151811062002fd957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010162002fbc565b60018380516200302992916020019062003152565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb8360405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200308d57808201518382015260200162003073565b505050509050019250505060405180910390a1505050565b600081831015620030b257fe5b50900390565b604051610a6280620031db83390190565b6040516109de8062003c3d83390190565b610180604051908101604052600c815b600081526000199091019060200181620030ea5790505090565b60206040519081016040526000815290565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b828054828255906000526020600020908101928215620031ac579160200282015b82811115620031ac5782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062003173565b506200270692620016339250905b8082111562002706578054600160a060020a0319168155600101620031ba560060606040526000600555600060065560006007556000600b55341561002357600080fd5b60405160c080610a6283398101604052808051919060200180519190602001805191906020018051919060200180519190602001805191508590508484846000600160a060020a038516151561007857600080fd5b42831015801561008757508282115b151561009257600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b919091555061095a806101086000396000f3006060604052600436106100e25763ffffffff60e060020a6000350416632c24909c81146100e75780633197cbb61461010c578063361810261461011f57806341fdade61461014657806343c14b22146101595780634b9f5c981461016e57806364a90292146101865780636f6a97621461019957806378e97925146101ac57806380322cbd146101bf578063a7491b48146101d2578063b3a2273f14610217578063b3f05b971461022a578063c734f9171461023d578063d74689e41461025f578063e82bef2914610272578063fc0c546a146102a1578063fd221031146102b4575b600080fd5b34156100f257600080fd5b6100fa6102c7565b60405190815260200160405180910390f35b341561011757600080fd5b6100fa610345565b341561012a57600080fd5b61013261034b565b604051901515815260200160405180910390f35b341561015157600080fd5b6100fa610393565b341561016457600080fd5b61016c610399565b005b341561017957600080fd5b61016c6004351515610458565b341561019157600080fd5b6100fa6105ee565b34156101a457600080fd5b6100fa6105f4565b34156101b757600080fd5b6100fa6105fa565b34156101ca57600080fd5b610132610600565b34156101dd57600080fd5b6101f1600160a060020a036004351661060a565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561022257600080fd5b6100fa61062e565b341561023557600080fd5b610132610634565b341561024857600080fd5b61016c600160a060020a036004351660243561063d565b341561026a57600080fd5b6100fa610814565b341561027d57600080fd5b61028561081a565b604051600160a060020a03909116815260200160405180910390f35b34156102ac57600080fd5b610285610829565b34156102bf57600080fd5b6100fa610838565b600061033f6102e46102dd60055460065461083e565b6064610854565b600054600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561032357600080fd5b5af1151561033057600080fd5b50505060405180519050610878565b90505b90565b60035481565b60085460009060ff161561035e57600080fd5b60035442101561037057506000610342565b6008805460ff1916600117905561038d61038861088f565b6108b1565b50600190565b6103e881565b60008060025442101580156103b057506003544211155b15156103bb57600080fd5b600160a060020a033316600090815260096020526040812054116103de57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104279161091c565b60075580156104445761043c6005548361091c565b600555610454565b6104506006548361091c565b6006555b5050565b600080600254421015801561046f57506003544211155b151561047a57600080fd5b600160a060020a0333166000908152600960205260409020541561049d57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156104ed57600080fd5b5af115156104fa57600080fd5b50505060405180516000549093506105689150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561054957600080fd5b5af1151561055657600080fd5b505050604051805190506103e8610878565b905080821115610578578061057a565b815b915082156105965761058e6005548361083e565b6005556105a6565b6105a26006548361083e565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105e69161083e565b600755505050565b60065481565b600b5481565b60025481565b600061033f61088f565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a0390811691161461065b57600080fd5b600160a060020a038316600090815260096020526040902054151561067f5761080f565b60045460ff1615156106b25760085460ff16806106a857506002544210806106a8575060035442115b156106b25761080f565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561071d57600080fd5b5af1151561072a57600080fd5b505050604051805190501015156107405761080f565b50600160a060020a03821660009081526009602052604090206001015481908111156107845750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107bc576107b46005548261091c565b6005556107cc565b6107c86006548261091c565b6006555b600160a060020a0383166000908152600960205260409020600101546107f2908261091c565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b60008282018381101561084d57fe5b9392505050565b6000828202831580610870575082848281151561086d57fe5b04145b151561084d57fe5b600080828481151561088657fe5b04949350505050565b600060065460055411801561033f5750600b546108aa6102c7565b1015905090565b600154600a54600160a060020a039091169081906329c90b6390849060405160e060020a63ffffffff851602815291151560048301526024820152604401600060405180830381600087803b151561090857600080fd5b5af1151561091557600080fd5b5050505050565b60008183101561092857fe5b509003905600a165627a7a7230582059b9e61e8cd64d75d9fd9707882faf208afa8c2a4a99bc7f4ed6dd90ad40be26002960606040526000600555600060065560006007556000600a55341561002357600080fd5b60405160c0806109de833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051915086905085858584600160a060020a038516151561007757600080fd5b42831015801561008657508282115b151561009157600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a55505050506108df806100ff6000396000f3006060604052600436106100cc5763ffffffff60e060020a6000350416633197cbb681146100d157806336181026146100f657806341fdade61461011d57806343c14b22146101305780634b9f5c981461014557806364a902921461015d578063728b482b1461017057806378e979251461018357806380322cbd14610196578063a7491b48146101a9578063b3a2273f146101ee578063b3f05b9714610201578063c734f91714610214578063d74689e414610236578063e82bef2914610249578063fc0c546a14610278575b600080fd5b34156100dc57600080fd5b6100e461028b565b60405190815260200160405180910390f35b341561010157600080fd5b610109610291565b604051901515815260200160405180910390f35b341561012857600080fd5b6100e46102f2565b341561013b57600080fd5b6101436102f8565b005b341561015057600080fd5b61014360043515156103b7565b341561016857600080fd5b6100e461054d565b341561017b57600080fd5b6100e4610553565b341561018e57600080fd5b6100e4610559565b34156101a157600080fd5b61010961055f565b34156101b457600080fd5b6101c8600160a060020a036004351661056e565b604051928352602083019190915215156040808301919091526060909101905180910390f35b34156101f957600080fd5b6100e4610592565b341561020c57600080fd5b610109610598565b341561021f57600080fd5b610143600160a060020a03600435166024356105a1565b341561024157600080fd5b6100e4610778565b341561025457600080fd5b61025c61077e565b604051600160a060020a03909116815260200160405180910390f35b341561028357600080fd5b61025c61078d565b60035481565b600080600a541180156102a75750600354600a54115b156102c057600a544210156102bb57600080fd5b6102cf565b6003544210156102cf57600080fd5b6008805460ff191660011790556102ec6102e761079c565b610817565b50600190565b6103e881565b600080600254421015801561030f57506003544211155b151561031a57600080fd5b600160a060020a0333166000908152600960205260408120541161033d57600080fd5b5050600160a060020a033316600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff9092169161038691610874565b60075580156103a35761039b60055483610874565b6005556103b3565b6103af60065483610874565b6006555b5050565b60008060025442101580156103ce57506003544211155b15156103d957600080fd5b600160a060020a033316600090815260096020526040902054156103fc57600080fd5b600054600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561044c57600080fd5b5af1151561045957600080fd5b50505060405180516000549093506104c79150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104a857600080fd5b5af115156104b557600080fd5b505050604051805190506103e8610886565b9050808211156104d757806104d9565b815b915082156104f5576104ed6005548361089d565b600555610505565b6105016006548361089d565b6006555b33600160a060020a0316600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105459161089d565b600755505050565b60065481565b600a5481565b60025481565b600061056961079c565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60075481565b60085460ff1681565b60015460009033600160a060020a039081169116146105bf57600080fd5b600160a060020a03831660009081526009602052604090205415156105e357610773565b60045460ff1615156106165760085460ff168061060c575060025442108061060c575060035442115b1561061657610773565b600160a060020a03808416600090815260096020526040808220600101549154919291909116906370a082319086905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561068157600080fd5b5af1151561068e57600080fd5b505050604051805190501015156106a457610773565b50600160a060020a03821660009081526009602052604090206001015481908111156106e85750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107205761071860055482610874565b600555610730565b61072c60065482610874565b6006555b600160a060020a0383166000908152600960205260409020600101546107569082610874565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b6000600654600554118015610569575060005461080d90600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156107ef57600080fd5b5af115156107fc57600080fd5b505050604051805190506003610886565b6005541015905090565b600154600160a060020a0316806389ea2cb78360405160e060020a63ffffffff84160281529015156004820152602401600060405180830381600087803b151561086057600080fd5b5af1151561086d57600080fd5b5050505050565b60008183101561088057fe5b50900390565b600080828481151561089457fe5b04949350505050565b6000828201838110156108ac57fe5b93925050505600a165627a7a7230582008913de14f0f24c71050379b6997cb6e8d4ff163e3e8f3e73edbd6069a08d95f0029a165627a7a72305820933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c70029000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f30000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b8760400000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f

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

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000e45f9c10f3e4647ac922b0128e688e8e1f220f5f
Arg [1] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [2] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [3] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [4] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [5] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [6] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [7] : 0000000000000000000000002d2edbfa6c22c276263dacf1252eb0611bde751d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 0000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f


   Swarm Source:
bzzr://933a469c477da45183c7ccef2cc51e8cce1c9f6715277e653a22eb77386679c7

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.